cd /news/ai-agents/3-presets-de-permisos-para-claude-co… · home › topics › ai-agents › article
[ARTICLE · art-164108] src=dev.to ↗ pub= topic=ai-agents verified=true sentiment=· neutral

3 presets de permisos para Claude Code (estricto, equilibrado, autónomo) y el hueco que ninguno cierra

A developer published three Claude Code permission presets for `.claude/settings.json` — strict, balanced and autonomous — ordered from most cautious to most permissive, and documented the gap none of them closes: permission rules match Bash commands by prefix, so `Bash(git:*)` also allows `git push --force` and `git reset --hard`, and `Read(./.env)` does not stop a `cat .env` run through Bash. The developer released two free MIT-licensed `PreToolUse` hooks that inspect the full command before execution and can block it with `exit 2`, one rejecting destructive git commands and one preventing secrets from being written to files, arguing that "presets for convenience, hooks for security" are both needed.

by read2 min views1 publishedNov 4, 2026

Cada "¿Permitir este comando?" de Claude Code es una pequeña interrupción. Si le das "permitir siempre" muchas veces, terminas con un settings.json que nadie leyó. Estos son tres presets que uso en .claude/settings.json, del más cuidadoso al más suelto, y lo único que ninguno puede hacer.

Las reglas se aplican en este orden: deny gana a ask, y ask gana a allow. Lo que no está en la lista usa el defaultMode.

Git de solo lectura va libre. Commits, push e instalaciones piden confirmación, y las herramientas de red están bloqueadas.

{
  "permissions": {
    "defaultMode": "default",
    "allow": [
      "Bash(git status)",
      "Bash(git diff:*)",
      "Bash(git log:*)"
    ],
    "ask": [
      "Bash(git commit:*)",
      "Bash(git push:*)",
      "Bash(npm install:*)",
      "Bash(pnpm add:*)",
      "Bash(yarn add:*)"
    ],
    "deny": [
      "Read(./.env)",
      "Read(./.env.*)",
      "Read(./secrets/**)",
      "Bash(curl:*)",
      "Bash(wget:*)",
      "WebFetch"
    ]
  }
}

Las ediciones se aceptan solas (acceptEdits). Lint, tests y chequeo de tipos corren sin preguntar, y todo lo que sale de tu máquina o cambia dependencias sigue preguntando.

{
  "permissions": {
    "defaultMode": "acceptEdits",
    "allow": [
      "Bash(git status)",
      "Bash(git diff:*)",
      "Bash(git log:*)",
      "Bash(git add:*)",
      "Bash(npm run lint:*)",
      "Bash(npm run test:*)",
      "Bash(npm test:*)",
      "Bash(npx tsc --noEmit:*)"
    ],
    "ask": [
      "Bash(git push:*)",
      "Bash(npm install:*)",
      "Bash(pnpm add:*)",
      "Bash(yarn add:*)"
    ],
    "deny": [
      "Read(./.env)",
      "Read(./.env.*)",
      "Read(./secrets/**)"
    ]
  }
}

Todo git y npm permitido. Úsalo solo donde un comando malo te cueste una rama, no una base de datos de producción.

{
  "permissions": {
    "defaultMode": "acceptEdits",
    "allow": [
      "Bash(git:*)",
      "Bash(npm:*)",
      "Bash(npx:*)",
      "Bash(pnpm:*)",
      "Bash(node:*)",
      "WebFetch",
      "WebSearch"
    ],
    "deny": [
      "Read(./.env)",
      "Read(./.env.*)",
      "Read(./secrets/**)"
    ]
  }
}

Mira otra vez el preset autónomo: Bash(git:*) también permite git push --force y git reset --hard. Las reglas de permisos comparan el comando por su prefijo. No distinguen un git push seguro de uno destructivo.

Hay un segundo hueco. Read(./.env) bloquea la herramienta Read de Claude, pero no es una regla sobre la terminal. Un cat .env por Bash es otra herramienta y necesita su propio control.

Para eso están los hooks. Un hook PreToolUse es un script que ve el comando completo antes de que corra y puede bloquearlo con exit 2: puede rechazar git push --force y dejar pasar un push normal, o negarse a cualquier comando que toque .env. Dejé dos gratis (uno bloquea comandos destructivos, probado contra trucos como git push origin +main; otro impide escribir secretos en archivos) aquí: https://github.com/kailucho/claude-code-hooks-seguridad (MIT).

Presets para la comodidad, hooks para la seguridad. Necesitas los dos.

Los tres presets, los hooks, 6 skills (/commit, /pr, /revisar, /tests, /plan, /depurar) y plantillas de CLAUDE.md para React, Node y GraphQL vienen juntos en el Kit de Claude Code en español (US$9, no oficial): https://luijhy.gumroad.com/l/kit-claude-code-es

── more in #ai-agents 4 stories · sorted by recency
── more on @claude code 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
→ Live at https://your-agent.zahid.host ✓
Get free account → Pricing
from €0/mo · no card required
LIVE [news/3-presets-de-permiso…] indexed:0 read:2min 2026-11-04 · —