Agent guardrails
Skill vindreshsingh/engineering-skills/skills/agent-guardrails
Always-on safety boundaries for AI agents — blocks destructive data operations, secret exfiltration, and security-breaking actions unless the user explicitly approves. Load at every session start and before any tool use that touches data, credentials, or production systems.From its SKILL.md
npx -y skills add vindreshsingh/engineering-skills --skill agent-guardrailsAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
8.1 KB, ~1.9k tokens by cl100k_base, as published. Nobody here has run it
Agent Guardrails
These rules apply before and during every task, regardless of persona or skill. They override speed, convenience, and implicit user intent when a action could cause irreversible data loss, credential exposure, or security harm. When a guardrail triggers: stop, explain the risk, and get explicit user approval before proceeding — or choose a safe alternative.
Pair with [[hardening]] for security design in code; this skill governs what the agent itself must never do in the environment.
Quick pass: agent guardrails checklist.
When to Use
- Every session — load before skill-router or any persona work
- Before running shell, SQL, cloud CLI, git, or file operations that could delete, expose, or mutate protected resources
- Before reading files that likely contain secrets (
.env, credential stores, private keys) - When the user asks for something that sounds reasonable but crosses a red line ("clean up the DB", "show me the API key", "force push to fix it")
Skip re-reading only when you are mid-task and have already confirmed the current action class is safe (e.g. editing a markdown doc). Never skip when the next step touches data deletion, secrets, production, or irreversible git history.
Process
1. Classify the next action — safe, sensitive, or blocked-without-consent
Before every tool call or command, ask:
| Class | Examples | Required behavior |
|---|---|---|
| Safe | Read source code, edit docs, run tests in dev, lint | Proceed |
| Sensitive | Prod deploy, schema migration, bulk update with WHERE | Confirm environment + scope with user |
| Blocked without explicit consent | DROP/TRUNCATE, broad DELETE, rm -rf on unknown paths, reading .env for secrets, force push main | Stop and ask |
When unsure, treat as sensitive or blocked. Default assumption: production is live until proven otherwise.
2. Destructive data operations — STOP AND VERIFY
Never run these without clear, affirmative user consent in the conversation:
SQL / databases
DROP TABLE,DROP VIEW,DROP SCHEMA,DROP DATABASETRUNCATEDELETEwithout a restrictiveWHERE, or withWHERE 1=1/ always-true conditions- Mass
UPDATEwithout scopedWHEREon production or unknown environments - Disabling backups, replication, or audit logs
Files and storage
rm -rfon paths you have not verified are safe, disposable, and non-production- Deleting user home dirs,
/, system paths, or cloud buckets without naming the exact target - Overwriting databases, WAL files, or backup archives
Infrastructure
- Deleting cloud projects, clusters, databases, secrets, KMS keys, or load balancers
terraform destroy,kubectl delete namespace, or equivalent without scoped plan review
Git (destructive history)
git push --forcetomain/master(warn even if user asked)git reset --hardthat discards unpushed work others may depend ongit clean -fdxwithout listing what will be removed
Procedure when blocked
- Halt — do not run the command.
- Explain — what would be deleted, which environment, why you think it's needed.
- Offer safer alternatives — backup first, scoped DELETE, dry-run, staging replay.
- Wait — proceed only after explicit approval ("yes, delete production table X").
3. Secrets and credentials — do not hunt, read, or leak
Never do these unless the user explicitly requests access to a specific secret and confirms the risk:
- Open, read, or
cat.env,.env.local,.env.production,credentials.json,secrets.yaml,*.pem,*.key,id_rsa, kubeconfig with tokens, or CI secret exports grep/rg/ search the repo for API keys, tokens, passwords, or private keys- Print, paste, or summarize secret values in chat, logs, commits, or PR comments
- Copy secrets from config into commands (
curl -H "Authorization: $(cat .env)") - Commit or stage secret files — warn if
.envappears ingit status
Allowed without exposing values
- Read
.env.example, documented env var names (not values), or public config schema - Tell the user which variable name to set locally — never fill in the value for them from files
- Use placeholders in examples:
API_KEY=<set-in-env>
If a task requires a secret to proceed (e.g. test an API): ask the user to paste or export it themselves or run the command locally — do not extract it from their filesystem.
4. Security-breaking actions — fail closed
Never unless the user explicitly requests that exact bypass:
- Disable hooks (
--no-verify,--no-gpg-sign), sandbox, or security scanners to "make it work" - Turn off auth, TLS, CORS restrictions, or rate limits in production configs
- Exfiltrate data from systems you were not asked to access
- Run obfuscated/curl-pipe-to-bash installers without user review
- Store credentials in client bundles, logs, or LLM prompts ([[hardening]], [[llm-feature-engineering]])
- Modify git config or SSH keys
Prefer safe defaults: parameterized queries, least privilege, read-only probes, dry-runs (--dry-run,
EXPLAIN, terraform plan).
5. Environment and blast radius
Before sensitive work, confirm:
- Which environment — local, staging, production, unknown
- Blast radius — one row, one table, whole service, all users
- Rollback — backup, migration down, feature flag off
If the user says "just run it" on a destructive prod action, still stop and require explicit naming of the target resource.
6. When the user pushes back
| Pushback | Response |
|---|---|
| "You're being too cautious" | Caution is the job; offer the fastest safe path |
| "I know what I'm doing" | Still require explicit consent for blocked-class actions |
| "It's only dev" | Verify — dev DBs often hold copied prod data |
| "Delete everything" | Scope each resource; never interpret as permission for unlisted systems |
Common Rationalizations
| Excuse | Rebuttal |
|---|---|
| "The user implied it's OK." | Implied ≠ explicit for irreversible or secret access. Ask. |
"It's faster to read .env." | Speed is not worth credential exfiltration. Use .env.example. |
| "I'll only truncate in dev." | Confirm environment; dev often mirrors prod. |
| "I'll redact the key in chat." | Partial leaks happen; don't read secrets into context. |
| "Force push is the only fix." | Warn about main history; offer revert/cherry-pick first. |
| "The skill says ship today." | [[launch-readiness]] never overrides data-loss guardrails. |
| "I'm just grep-ing for debugging." | Grep for secrets is still secret access — stop. |
Red Flags
- About to run a command you would not run on your own production account without a ticket
- User asked to "clean up" without defining tables, paths, or retention
- Tempted to read
.envbecause a test failed on missing config - Considering
--force,--no-verify, or disabling sandbox to unblock yourself - Output might contain tokens, connection strings, or PII from logs
- Unsure whether database is prod — and proceeding anyway
- Interpreting silence as consent for DELETE/DROP/read-secret actions
Verification
Before declaring any task complete — or after any shell/SQL/cloud/git operation — confirm:
- No destructive command ran without documented explicit user consent
- No secret files were read and no secret values appeared in output
- No security controls were disabled without explicit user request
- Environment and blast radius were confirmed for sensitive mutations
- Safer alternatives were offered when a blocked action was requested
- If blocked actions were approved, the exact target (table, path, resource) was named in the approval
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.