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.
Estos comandos vienen con Claude Code y están disponibles en cualquier sesión:
Comando
Qué hace
Cuándo
/help
Lista todos los comandos disponibles en la sesión.
Recordatorio rápido
/init
Genera un CLAUDE.md a partir del repo.
Primera vez en un proyecto
/clear
Limpia el contexto de la conversación, conserva CLAUDE.md.
Cuando se "atasca" el agente
/compact
Resume mensajes antiguos para liberar tokens.
Sesiones muy largas
/resume
Lista sesiones recientes y permite reanudar.
Volver a una conversación previa
/exit
Cierra la sesión actual.
Final del trabajo
/model
Cambia de modelo en caliente (Opus / Sonnet / Haiku).
Optimizar coste/calidad
/plan
Activa plan mode.
Antes de cambios grandes
/auto
Activa auto mode (mínimas confirmaciones).
Tareas mecánicas
/review
Hace una revisión de los cambios pendientes (diff vs main).
Antes de abrir PR
/permissions
Abre el editor del settings.json del proyecto.
Ajustar allowlists
/config
Abre el editor del settings.json de usuario.
Cambiar preferencias globales
/mcp
Lista, autentica y gestiona MCP servers conectados.
Configurar integraciones
/hooks
Lista los hooks activos en la sesión.
Auditar automatizaciones
/cost
Muestra 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:
Resultado
Significado
allow
Ejecuta sin preguntar.
ask
Pide confirmación al usuario antes de ejecutar.
deny
Bloquea. El agente recibe error y debe buscar otra vía.
Además de las reglas, hay tres "modos" globales que cambian el comportamiento general:
Modo
Comportamiento
Cuándo
default
Aplica las reglas allow/deny. Pregunta lo no especificado.
El día a día
bypass
No pregunta nunca. Solo respeta deny.
Sandbox o CI sin riesgo
restricted
Solo 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.
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:
Lea el último diff (git diff origin/main..HEAD).
Identifique funciones nuevas o modificadas con complejidad cubica/cuadrática.
Proponga un benchmark con console.time.
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?
Se ejecuta sin preguntar (allow gana).
Se bloquea (deny gana).
Te pregunta antes (es ambiguo).
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?
~/.claude/commands/
.claude/commands/ (en el repo)
.claude/local-commands/
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?
bypass
default
restricted
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?
Listar los argumentos recientes de Bash.
Insertar lo que el usuario teclea después del nombre del comando.
Es una variable reservada del modelo.
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.