Qlcube
Módulo 5 · Slash commands, modos y permisos
7 horas5 / 13
Progreso del curso
38% · Módulo 5 de 13
Módulo 5 · 7 horas

Slash commands y permisos

Las /comandos de Claude Code son atajos a operaciones de la sesión: cambiar de modelo, limpiar contexto, lanzar revisiones, ejecutar Skills. Y los permisos son la frontera entre lo que el agente puede hacer solo y lo que necesita tu OK. Dominar ambos es lo que separa una herramienta cómoda de una herramienta segura.

Objetivos

  • Conocer los slash commands incorporados y cuándo se usa cada uno.
  • Crear un slash command propio para tu equipo.
  • Entender la jerarquía de permisos (allow / deny / ask).
  • Configurar settings.json para que el equipo tenga el mismo comportamiento.
  • Diferenciar permission modes: bypass, default, restricted.

4.1 Slash commands incorporados

Estos comandos vienen con Claude Code y están disponibles en cualquier sesión:

ComandoQué haceCuándo
/helpLista todos los comandos disponibles en la sesión.Recordatorio rápido
/initGenera un CLAUDE.md a partir del repo.Primera vez en un proyecto
/clearLimpia el contexto de la conversación, conserva CLAUDE.md.Cuando se "atasca" el agente
/compactResume mensajes antiguos para liberar tokens.Sesiones muy largas
/resumeLista sesiones recientes y permite reanudar.Volver a una conversación previa
/exitCierra la sesión actual.Final del trabajo
/modelCambia de modelo en caliente (Opus / Sonnet / Haiku).Optimizar coste/calidad
/planActiva plan mode.Antes de cambios grandes
/autoActiva auto mode (mínimas confirmaciones).Tareas mecánicas
/reviewHace una revisión de los cambios pendientes (diff vs main).Antes de abrir PR
/permissionsAbre el editor del settings.json del proyecto.Ajustar allowlists
/configAbre el editor del settings.json de usuario.Cambiar preferencias globales
/mcpLista, autentica y gestiona MCP servers conectados.Configurar integraciones
/hooksLista los hooks activos en la sesión.Auditar automatizaciones
/costMuestra el coste estimado de la sesión actual.Controlar gasto

Tip productivo: usa /clear entre tareas distintas. Mantener una sola sesión de 6 horas con 12 tareas distintas degrada la calidad — el agente se distrae con contexto irrelevante. Una sesión = una tarea coherente.

4.2 Crear tu propio slash command

Puedes definir comandos específicos de tu equipo o tu proyecto. Se guardan como ficheros Markdown en:

  • ~/.claude/commands/ — global (disponible en todas las sesiones).
  • .claude/commands/ — del proyecto (versionado, viaja con el repo).

Cada fichero .md es un comando. El nombre del fichero, sin extensión, es el comando.

Ejemplo: /security-review

Crea .claude/commands/security-review.md:

---
description: Revisión de seguridad de los cambios pendientes
allowed-tools: Read, Glob, Grep, Bash(git diff:*), Bash(git log:*)
---

Eres un auditor de seguridad. Revisa los cambios pendientes en este repo
(diff contra origin/main) buscando:

1. Inyección SQL, command injection, XSS.
2. Secretos hardcodeados (API keys, contraseñas, tokens).
3. Validación insuficiente de input de usuario.
4. Uso de funciones criptográficas inseguras (md5, sha1, eval).
5. Logging de datos personales (PII).

Devuelve un informe estructurado con:
- Severidad (crítica / alta / media / baja).
- Fichero y línea.
- Por qué es un problema.
- Cómo arreglarlo (con código).

NO modifiques archivos. Solo lee y reporta.

A partir de ese momento, en cualquier sesión del proyecto puedes hacer:

> /security-review

Variables de entorno en commands

Los slash commands aceptan argumentos que rellenas con $ARGUMENTS:

---
description: Genera tests para el archivo dado
---

Lee el archivo $ARGUMENTS y escribe tests unitarios con vitest
hasta cubrir el 90% de las ramas.

Uso:

> /tests src/services/billing.ts

Buena práctica: versiona los .claude/commands/*.md en el repo del equipo. Los comandos se vuelven parte del contrato del proyecto: "para preparar un PR pasa /security-review y /perf-check".

4.3 Modelo de permisos

Cuando Claude Code va a ejecutar una herramienta con efectos secundarios (Bash, Edit, Write, MCP write), el sistema decide entre tres caminos:

ResultadoSignificado
allowEjecuta sin preguntar.
askPide confirmación al usuario antes de ejecutar.
denyBloquea. El agente recibe error y debe buscar otra vía.

Las reglas se evalúan en este orden:

  1. Reglas deny de cualquier nivel (siempre ganan).
  2. Reglas allow de cualquier nivel.
  3. Por defecto, ask.

Ejemplo: settings.json del proyecto

{
  "permissions": {
    "allow": [
      "Bash(npm:*)",
      "Bash(git status)",
      "Bash(git diff:*)",
      "Bash(git log:*)",
      "Read",
      "Glob",
      "Grep"
    ],
    "deny": [
      "Bash(rm -rf:*)",
      "Bash(git push:*)",
      "Bash(git reset --hard:*)",
      "Bash(npm publish:*)",
      "Bash(curl * | bash)"
    ]
  }
}

La sintaxis Bash(npm:*) usa glob: matchea cualquier comando que empiece por npm. Bash(git status) es exacto, solo ese comando.

Pruébalo · ¿qué decisión toma con cada comando?

Reglas activas: las del JSON de arriba (allow npm:*, git status, git diff:*, Read, Glob, Grep · deny rm -rf:*, git push:*, git reset --hard:*, npm publish:*, curl * | bash). Escribe el comando exacto que el agente intentaría ejecutar.

Prueba estos:

Permisos en MCP servers

Los servidores MCP (Módulo 7) exponen sus propias herramientas con prefijo mcp__<servidor>__<tool>. Puedes listarlas igual:

{
  "permissions": {
    "allow": [
      "mcp__chrome__navigate",
      "mcp__chrome__screenshot"
    ],
    "deny": [
      "mcp__github__delete_repository"
    ]
  }
}

4.4 Permission modes: bypass, default, restricted

Además de las reglas, hay tres "modos" globales que cambian el comportamiento general:

ModoComportamientoCuándo
defaultAplica las reglas allow/deny. Pregunta lo no especificado.El día a día
bypassNo pregunta nunca. Solo respeta deny.Sandbox o CI sin riesgo
restrictedSolo permite herramientas read-only. Bloquea Edit/Write/Bash.Code review autónomo, auditorías

Activación en línea de comandos:

claude --permission-mode restricted

O en settings.json:

{ "permissionMode": "restricted" }

Bypass solo en sandbox: usa bypass cuando trabajes en una máquina efímera (un container de CI, una VM destruible). Nunca en tu máquina de trabajo, nunca en producción.

4.5 Repartir settings entre equipo y persona

Recomendación de organización en un repo de empresa:

.claude/settings.json (versionado)

Lo que TODO el equipo debe tener: modelo por defecto, allowlist de comandos seguros, denylist crítico.

{
  "model": "claude-sonnet-4-6",
  "permissions": {
    "allow": ["Bash(npm:*)","Bash(git status)","Bash(git diff:*)","Read","Glob","Grep","Edit","Write"],
    "deny": ["Bash(rm -rf:*)","Bash(git push:*)","Bash(git reset --hard:*)"]
  }
}

.claude/settings.local.json (en .gitignore)

Lo que cada persona personaliza: variables de entorno locales, hooks personales, modelo distinto si tiene plan superior.

{
  "model": "claude-opus-4-7",
  "env": {
    "DATABASE_URL": "postgres://localhost/myapp_dev"
  }
}

~/.claude/settings.json (global del usuario)

Comportamiento por defecto al entrar en cualquier proyecto: tu shell preferido, tu MCP de Chrome, tu API key de WeatherKit, etc.

Recuerda: los tres niveles se mergean, con local > proyecto > usuario. Si el equipo declara "model":"sonnet" y tú quieres usar Opus, mete tu override en settings.local.json sin tocar el del equipo.

4.6 Reduce los prompts de permiso (skill fewer-permission-prompts)

Si te cansa que el agente pregunte cada vez por npm test, git status, etc., usa la skill oficial:

> /fewer-permission-prompts

La skill escanea tu transcript reciente, identifica los comandos que ya has aprobado varias veces, y te propone añadir un allowlist al .claude/settings.json. Tú apruebas y lo guarda.

Ejemplo de salida:

He encontrado 12 comandos que aprobaste manualmente más de 3 veces:

  Bash(npm test)            → 8 veces
  Bash(npm run build)       → 6 veces
  Bash(git diff)            → 14 veces
  Bash(git log:*)           → 5 veces
  ...

¿Añadir todo a .claude/settings.json allow? (sí / no / selecciona)

Práctica

Ejercicio 4.1 · Crea tu primer slash command

Crea .claude/commands/perf-check.md con un command que:

  1. Lea el último diff (git diff origin/main..HEAD).
  2. Identifique funciones nuevas o modificadas con complejidad cubica/cuadrática.
  3. Proponga un benchmark con console.time.
  4. NO modifique archivos — solo informe.

Inclúyelo en la frontmatter con allowed-tools apropiado.

Ejercicio 4.2 · Política de permisos del equipo

Diseña un .claude/settings.json para un equipo que trabaja con un repo Node.js + PostgreSQL. Debe permitir todo el flujo normal de desarrollo (npm, git read, tests) y bloquear:

  • Cualquier comando que toque la base de datos de producción.
  • Cualquier git push, git force, git reset --hard.
  • Borrado recursivo (rm -rf).
  • Instalación de paquetes globales (npm install -g).

Ejercicio 4.3 · Test de modos

Inicia una sesión con claude --permission-mode restricted y pide al agente "renombra X a Y en el archivo Z". Observa qué ocurre y razona por qué.

Test de comprensión

1. Tienes en allow Bash(npm:*) y en deny Bash(npm publish:*). ¿Qué ocurre cuando el agente pide npm publish?

  1. Se ejecuta sin preguntar (allow gana).
  2. Se bloquea (deny gana).
  3. Te pregunta antes (es ambiguo).
  4. Falla y termina la sesión.

Respuesta correcta: B. Las reglas deny siempre tienen precedencia sobre allow, sin importar el nivel.

2. ¿Dónde guardas un slash command que TODO el equipo debe tener?

  1. ~/.claude/commands/
  2. .claude/commands/ (en el repo)
  3. .claude/local-commands/
  4. En el README.md

Respuesta correcta: B. .claude/commands/ versionado en el repo es la vía estándar para comandos compartidos.

3. Quieres que el agente haga code review pero sin riesgo de modificar nada. ¿Qué modo usas?

  1. bypass
  2. default
  3. restricted
  4. plan

Respuesta correcta: C · restricted. Bloquea Edit/Write/Bash con efectos. plan también funciona pero está pensado para antes de aplicar cambios, no como modo permanente para auditoría.

4. ¿Para qué sirve $ARGUMENTS en un slash command?

  1. Listar los argumentos recientes de Bash.
  2. Insertar lo que el usuario teclea después del nombre del comando.
  3. Es una variable reservada del modelo.
  4. Se usa solo en hooks.

Respuesta correcta: B. $ARGUMENTS se reemplaza por el texto que sigue al nombre del slash command. Permite parametrizar el prompt.

Resumen

  • Slash commands integrados (/help, /clear, /init, /plan, /review, /cost) cubren el día a día.
  • Custom commands en .claude/commands/*.md con frontmatter para permisos.
  • Permisos en tres caminos: allow / deny / ask. Deny siempre gana.
  • Permission modes: default, bypass, restricted. Bypass solo en sandbox.
  • Reparto settings: equipo en settings.json, persona en settings.local.json.

El siguiente módulo entra en Skills: cómo encapsular conocimiento de dominio en paquetes que Claude Code puede invocar automáticamente.

0 / 0Respondidas
0 / 0Aciertos
% de acierto