Skip to content

BlastShield is in beta and may contain bugs. Validate it in a non-production environment before relying on it for safety-critical workflows.

Profiles

All cloud profiles enforce a default-deny posture for mutations. The AI agent can inspect resources (list, describe, get, plan) but cannot modify them. Any mutating operation — apply, deploy, create, delete, update — requires the user to run it manually.

This is by design: the agent plans, you execute.

Profiles are SBPL (Seatbelt Profile Language) files in profiles/. They compose by intersection — every deny rule from every loaded profile is enforced.

ProfileAlways LoadedPurpose
baseDeny-all default, project writes, system reads
secretsProtect SSH keys, cloud creds, browser data
terraformAutoState file protection, deny all tfstate writes
gcloudAutoGCP credential protection, ADC denial
awsAutoAWS credential protection, SSO cache denial
azureAutoAzure credential protection, MSAL cache denial
kubectlAutoKubeconfig write protection, SA token denial
ghAutoGitHub auth protection, workflow file locks

Create profiles in ~/.config/blastshield/profiles/:

;; ~/.config/blastshield/profiles/custom.sb
;; Deny access to internal API keys directory
(deny file-read* (subpath "/Users/you/secrets"))
(deny file-write* (subpath "/Users/you/secrets"))

Load with -p:

Terminal window
blastshield -p custom claude

The foundation of every BlastShield session. Establishes a deny-by-default policy and opens only the minimal paths needed for an agent to function.

PolicyDetail
DefaultDeny all
Project writesAllowed in current working directory
System readsAllowed for standard system paths
Process executionAllowed for standard binary paths
NetworkOutbound allowed, inbound allowed
Mount/unmountDenied
IOKitDenied

Protects the most sensitive files on your system — the ones that, if read by an AI agent, would give it credentials to act on your behalf.

ProtectedPath
SSH keys~/.ssh/
Cloud credentials~/.aws/, ~/.azure/, ~/.config/gcloud/
Browser dataSafari, Chrome, Firefox profile data
Shell init files.bashrc, .zshrc, .profile
Git credentials~/.gitconfig, ~/.netrc

Prevents ALL state mutations — not just destroy. The agent can plan but not apply. State files are read-only.

BlockedAllowed
terraform applyterraform plan
terraform destroyterraform init, fmt, validate
terraform import, taint, untaintterraform show, output, console
terraform refreshstate list, state show
terraform state rm/mvworkspace list, workspace select
ALL tfstate writesterraform providers, version, graph
Plan file writes (.tfplan)
Provider/module downloads

Auto-detection trigger: *.tf files in project directory

Protects GCP credentials and blocks ALL mutating gcloud operations.

BlockedAllowed
gcloud * delete/create/deploy/updategcloud * list/describe/get
gcloud * add/remove/patch/setgcloud auth status
gcloud * enable/disable/submitgcloud config list/get
gcloud builds submitgcloud version, help
gcloud app deploy
Service account key reads

Auto-detection trigger: .gcloudignore, cloudbuild.yaml, app.yaml

Protects AWS credentials and blocks ALL mutating AWS CLI operations.

BlockedAllowed
aws * delete/create/put/updateaws * describe-/list-/get-
aws * deploy/terminate/run-aws s3 ls, cp (download), presign
aws * start-/stop-/rebootaws sts get-caller-identity
aws * authorize/revoke/sendaws logs describe-/get-/filter-
Credential readsaws dynamodb scan/query/get-item
SSO token cache readsaws iam list-/get-
CDK/SAM state writesaws lambda list-, invoke

Auto-detection trigger: serverless.yml, template.yaml, cdk.json, samconfig.toml

Protects Azure credentials and blocks ALL mutating Azure CLI operations.

BlockedAllowed
az * delete/create/update/deployaz * list/show
az * set/remove/add/lock/unlockaz account show/list
az * scale/restartaz version, help
ALL ~/.azure access

Auto-detection trigger: azure-pipelines.yml, local.settings.json

Protects Kubernetes cluster access — read-only inspection only.

BlockedAllowed
kubectl apply/create/deletekubectl get/describe/logs
kubectl patch/scale/execkubectl top, events
kubectl taint/cordon/uncordon/drainkubectl api-resources/versions/explain
kubectl rollout restart/undokubectl auth can-i
kubectl label/annotate/setkubectl config view/get-contexts
kubectl expose/run/cp/debugkubectl rollout status/history
Kubeconfig writeskubectl version
Helm install/upgrade/deleteHelm list/status/show/search

Auto-detection trigger: kustomization.yaml, Chart.yaml, skaffold.yaml

Protects GitHub authentication — prevents destructive repo operations and CI manipulation.

BlockedAllowed
gh repo delete/edit/renamegh repo list/view/clone/fork
gh pr merge/closegh pr list/view/diff/checkout
gh release deletegh release create/list/view/download
gh workflow disable/enablegh workflow list/view
gh run cancelgh issue create/list/view/comment
gh api -X DELETE/PUT/PATCHgh pr create
Workflow file writesgh auth status
CODEOWNERS writesgh secret set

Auto-detection trigger: .github/ directory


Profiles are loaded in this order:

  1. base — always (deny-by-default foundation)
  2. secrets — always (credential and SSH key protection)
  3. Auto-detected profiles — based on project directory contents
  4. Explicitly specified profiles — via -p flag

All deny rules from all profiles are enforced. Allow rules must pass every profile’s checks. This means adding more profiles can only make the sandbox more restrictive, never less.