Part 4 of 10
Algo que noté después de unas semanas usando Claude Code: seguía escribiendo los mismos prompts una y otra vez. "Revisa este código por problemas de seguridad." "Genera tests siguiendo los patrones del proyecto." "Crea un commit con un buen mensaje."

Cada prompt repetido son pulsaciones de tecla desperdiciadas. Los comandos slash personalizados solucionan eso.
¿Qué Son los Comandos Personalizados?
Los comandos personalizados son archivos markdown que se convierten en comandos slash. Pon un archivo llamado review.md en la carpeta correcta, y de repente /review es un comando que puedes ejecutar en cualquier momento.
.claude/commands/├── review.md → /review├── test.md → /test└── git/├── commit.md → /git:commit└── pr.md → /git:pr
La magia: estos comandos pueden aceptar argumentos, especificar qué herramientas puede usar Claude, definir hooks que se ejecutan automáticamente, e incluso forzar un modelo específico. No son solo prompts guardados—son flujos de trabajo programables.
Tu Primer Comando en 60 Segundos
Paso 1: Crea el Directorio
Mkdir -p .claude/commands
Paso 2: Crea un Archivo de Comando
Cat > .claude/commands/review.md << 'EOF'Review the staged changes for:- Security vulnerabilities- Performance issues- Missing error handling- Type safety problemsFormat as: Critical (must fix) → Warnings → SuggestionsEOF
Paso 3: Úsalo
/review
Eso es todo. Claude ejecuta tus instrucciones como si las hubieras escrito manualmente.
Argumentos: Haciendo los Comandos Dinámicos
Los comandos estáticos son útiles, pero los comandos dinámicos son poderosos. El placeholder $ARGUMENTS captura todo lo que viene después del nombre del comando.
Argumentos Básicos
# .claude/commands/explain.mdExplain how $ARGUMENTS works in this codebase.Show me the key files, the data flow, and any gotchas.
Uso:
/explain the authentication system/explain the payment processing flow/explain how websockets connect to the backend
Lo que escribas después de /explain se convierte en $ARGUMENTS.
Argumentos Posicionales
¿Necesitas más control? Usa $1, $2, $3 para posiciones específicas:
# .claude/commands/fix-issue.mdFix GitHub issue #$1.Priority: $2Additional context: $31. Read the issue description2. Find the relevant code3. Implement the fix4. Write tests5. Create a commit referencing the issue
Uso:
/fix-issue 1234 high "user reported login failures on mobile"
Aquí $1 = "1234", $2 = "high", $3 = "user reported login failures on mobile".
Frontmatter: Los Superpoderes de los Comandos
El verdadero poder viene del frontmatter YAML en la parte superior de tu archivo de comando. Te permite configurar permisos, hints, modelos y más.
Lo Básico
---Description: Review code for security issuesArgument-hint: [file-or-directory]---Review $ARGUMENTS for security vulnerabilities including:- SQL injection- XSS- Authentication bypasses
La description aparece cuando ejecutas /help. El argument-hint le dice a los usuarios qué pasar.
Pre-Aprobación de Permisos de Herramientas
¿Cansado de aprobar los mismos comandos git cada vez? Usa allowed-tools:
---Description: Smart git commitAllowed-tools: Bash(git add:*), Bash(git status:*), Bash(git commit:*), Bash(git diff:*)Argument-hint: [optional message]---Analyze the staged changes and create a commit.If a message is provided, use it: $ARGUMENTSOtherwise, generate a descriptive message following conventional commits.Requirements:- Use format: type(scope): description- Keep summary under 72 characters- Body explains WHY, not WHAT
Ahora /git:commit se ejecuta sin prompts de permisos para esos comandos git específicos.
Forzar un Modelo Específico
Algunos comandos funcionan mejor con modelos específicos:
---Description: Deep architecture analysisModel: claude-sonnet-4-5-20250929---Analyze the architecture of $ARGUMENTS.Consider:- Design patterns in use- Coupling between modules- Scalability implications- Technical debt indicators
Usa Haiku para tareas rápidas, Sonnet para trabajo equilibrado, Opus para razonamiento complejo:
---Description: Quick code explanationModel: claude-3-5-haiku-20241022---Briefly explain what $ARGUMENTS does in 2-3 sentences.
Hooks en Comandos
Los comandos pueden definir sus propios hooks que se ejecutan durante la ejecución:
---Description: Format and commitHooks:PostToolUse:- matcher: "Edit|Write"hooks:- type: commandcommand: "npx prettier --write $FILE_PATH"---Make the requested changes to $ARGUMENTS.After each edit, files will be auto-formatted.
Esto ejecuta Prettier después de cada edición de archivo—pero solo mientras este comando está activo.
Espacios de Nombres con Directorios
Organiza comandos relacionados en subdirectorios. El nombre de la carpeta se convierte en un espacio de nombres:
.claude/commands/├── git/│ ├── commit.md → /git:commit│ ├── pr.md → /git:pr│ ├── branch.md → /git:branch│ └── squash.md → /git:squash├── test/│ ├── unit.md → /test:unit│ ├── e2e.md → /test:e2e│ └── coverage.md → /test:coverage└── docs/├── readme.md → /docs:readme└── api.md → /docs:api
Esto mantiene la salida de /help organizada y los comandos fáciles de descubrir.
Comandos Globales vs de Proyecto
Comandos de Proyecto (Equipo)
Tu-proyecto/.claude/commands/
- Disponibles solo en este proyecto
- Commitéalos a git—todo el equipo los recibe
- Ideales para flujos de trabajo específicos del proyecto
Comandos Personales (Tú)
~/.claude/commands/
- Disponibles en todos los proyectos
- Potenciadores de productividad personal
- No se comparten con el equipo
División Recomendada
Mantén como global (personal):
/explain— Explicación universal de código/debug— Proceso sistemático de depuración/review— Lista de verificación general de code review
Mantén como específico del proyecto (equipo):
/deploy— Tus pasos de despliegue/test:e2e— Tu configuración de tests/git:commit— Las convenciones de commits de tu equipo/onboard— Contexto específico del proyecto para nuevos devs
10 Comandos que Vale la Pena Copiar
Aquí tienes comandos probados en batalla. Cópialos, modifícalos, hazlos tuyos.

1. /review — Code Review
---Description: Comprehensive code reviewArgument-hint: [file or leave empty for staged changes]---Review $ARGUMENTS (or staged changes if not specified).## Check For- Security: OWASP Top 10, auth issues, data exposure- Performance: N+1 queries, memory leaks, blocking calls- Correctness: Edge cases, error handling, type safety- Maintainability: Complexity, naming, duplication## Output Format### 🚨 Critical (blocks merge)### ⚠️ Warnings (should fix)### 💡 Suggestions (nice to have)
2. /git:commit — Commits Inteligentes
---Description: Analyze changes and create commitAllowed-tools: Bash(git *)---1. Run `git diff --staged` to see changes2. Analyze what was changed and why3. Create a commit message:- Format: type(scope): description- Types: feat, fix, refactor, docs, test, chore- Under 72 chars- Body explains WHY if non-obvious4. Execute the commit
3. /test:generate — Creación de Tests
---Description: Generate comprehensive testsArgument-hint: [file-to-test]---Generate tests for $ARGUMENTS.## Include- Happy path (expected usage)- Edge cases (empty, null, boundaries)- Error scenarios (invalid input, failures)- Integration points (mocks for external deps)## Requirements- Match existing test patterns in this project- Use the testing framework already in use- Clear test names: "should [expected] when [condition]"
4. /debug — Depuración Sistemática
---Description: Debug an issue systematicallyArgument-hint: [description of the problem]---Debug: $ARGUMENTS## Process1. Clarify: What's expected vs actual behavior?2. Reproduce: What triggers the issue?3. Isolate: Which component/function is responsible?4. Trace: Follow the data flow5. Fix: Implement and verify the solution## Output- Root cause- Affected code paths- Fix with explanation- Prevention strategy
5. /security — Auditoría de Seguridad
---Description: Security vulnerability scanArgument-hint: [file, directory, or leave empty for full scan]Allowed-tools: Read, Grep, Glob---Audit $ARGUMENTS for security vulnerabilities.## Check For- Injection: SQL, command, XSS, template- Auth: Weak passwords, session issues, CSRF- Data: Exposure, logging secrets, insecure storage- Config: Debug mode, default creds, missing headers- Dependencies: Known CVEs## OutputSeverity-ranked findings with:- Location (file:line)- Risk explanation- Remediation steps
6. /refactor — Mejora de Código
---Description: Refactor while maintaining behaviorArgument-hint: [file-or-function]---Refactor $ARGUMENTS.## Goals- Reduce complexity- Improve readability- Apply DRY- Better naming- Smaller functions (single responsibility)## Constraints- NO behavior changes- Keep public API intact- Existing tests must passExplain each change.
7. /explain — Explicación de Código
---Description: Explain code for someone newArgument-hint: [file, function, or concept]Model: claude-3-5-haiku-20241022---Explain $ARGUMENTS.## Cover- What it does (purpose)- How it works (step by step)- Why it's designed this way- Dependencies and side effects- Potential gotchasAssume reader knows the language but not this codebase.
8. /optimize — Análisis de Rendimiento
---Description: Analyze and optimize performanceArgument-hint: [file-or-function]---Analyze $ARGUMENTS for performance.## Examine- Time complexity (Big O)- Space complexity- I/O operations- Database queries (N+1?)- Unnecessary allocations## Output- Current bottlenecks- Specific optimizations- Expected improvement- Trade-offs involved
9. /ship — Lista de Verificación Pre-Despliegue
---Description: Pre-deployment verificationAllowed-tools: Bash(npm *), Bash(git *)---Pre-deploy checklist:- [ ] Tests pass (`npm test`)- [ ] Lint clean (`npm run lint`)- [ ] Build succeeds (`npm run build`)- [ ] No console.log/debugger statements- [ ] Env vars documented- [ ] No hardcoded secrets- [ ] Error handling complete- [ ] Migrations readyRun checks and report: Ready 🚀 or Blocked 🛑 with issues.
10. /catchup — Restauración de Contexto
Este comando implementa el patrón /clear + /catchup de la Parte 2 para una gestión eficiente del contexto.
---Description: Rebuild context after /clearAllowed-tools: Bash(git *)---I just cleared context. Help me catch up.1. Run `git diff main...HEAD --stat` to see what's changed2. Summarize the changes on this branch3. Read the key modified files4. Tell me where we likely are in this feature$ARGUMENTS (if any additional context)
Más Allá del Código: Comandos Creativos
Los comandos no se limitan a flujos de trabajo de código. Puedes integrar cualquier API o servicio que Claude pueda llamar. Aquí tienes dos que usé mientras escribía esta misma serie de blog:
/meme — Generar Memes
---Description: Generate a meme using Imgflip APIArgument-hint: "top text" "bottom text" [template]---Generate a meme using the Imgflip API.## API Details- Endpoint: https://api.imgflip.com/caption_image- Username: $IMGFLIP_USER- Password: $IMGFLIP_PASS## Popular Templates- drake (181913649) - Drake Hotline Bling- distracted (112126428) - Distracted Boyfriend- changemymind (129242436) - Change My Mind- twobuttons (87743020) - Two Buttons- pikachu (155067746) - Surprised Pikachu## Instructions1. Parse the arguments: $ARGUMENTS2. Use curl to POST to the API with template_id, text0, text13. Return the generated meme URL4. Download to ./public/assets/blog/ if requested
Usé esto para generar el meme del "distracted boyfriend" en la Parte 5 — un desarrollador distraído por "simplemente publícalo" mientras "escribe tests primero" mira con desaprobación.
/imagen — Generación de Imágenes con IA
Este es uno de mis favoritos. La API Imagen de Google te permite generar imágenes directamente desde Claude Code. Aquí tienes una implementación completa:
---Description: Generate an image using Google ImagenArgument-hint: "prompt" [output-path]Allowed-tools: Bash(node *)---Generate an image using Google Imagen.## Instructions1. Parse the prompt from: $ARGUMENTS2. Run: node ~/.claude/scripts/generate-image.js "prompt" "./output.png"3. Report the saved file path
La verdadera magia está en el script. Aquí tienes una implementación completa que puedes colocar en ~/.claude/scripts/generate-image.js:
#!/usr/bin/env nodeConst https = require('https');Const fs = require('fs');Const path = require('path');Const API_KEY = process.env.GOOGLE_AI_API_KEY || 'your-api-key-here';// Note: Check https://ai.google.dev/gemini-api/docs/imagen for the latest model IDConst MODEL = 'imagen-4.0-generate-001';Async function generateImage(prompt, outputPath) {const requestBody = {instances: [{ prompt }],parameters: {sampleCount: 1,aspectRatio: '16:9',personGeneration: 'dont_allow'}};const body = JSON.stringify(requestBody);const options = {hostname: 'generativelanguage.googleapis.com',port: 443,path: `/v1beta/models/${MODEL}:predict?key=${API_KEY}`,method: 'POST',headers: {'Content-Type': 'application/json','Content-Length': Buffer.byteLength(body)}};return new Promise((resolve, reject) => {const req = https.request(options, (res) => {let data = '';res.on('data', chunk => data += chunk);res.on('end', () => {const response = JSON.parse(data);if (response.error) {reject(new Error(response.error.message));return;}if (response.predictions?.[0]) {const imageData = response.predictions[0].bytesBase64Encoded;const dir = path.dirname(outputPath);if (dir && !fs.existsSync(dir)) {fs.mkdirSync(dir, { recursive: true });}fs.writeFileSync(outputPath, Buffer.from(imageData, 'base64'));resolve(outputPath);}});});req.on('error', reject);req.write(body);req.end();});}Const [prompt, outputPath = `./generated-${Date.now()}.png`] = process.argv.slice(2);GenerateImage(prompt, outputPath).then(p => console.log(`Saved: ${p}`));
Obtener una clave API:
- Ve a Google AI Studio
- Crea una nueva clave API
- Establece la variable de entorno
GOOGLE_AI_API_KEYo pégala directamente en el script
Ejemplos de uso:
/imagen "a minimalist logo for a coding blog, orange and white"/imagen "abstract geometric pattern" ./public/hero.png/imagen "futuristic terminal interface, dark theme, neon accents"
Parámetros de la API:
sampleCount— Número de imágenes a generar (1-4, por defecto:4)aspectRatio— Dimensiones de salida:1:1,3:4,4:3,9:16,16:9(por defecto:1:1)personGeneration— Controla personas en las imágenes:dont_allow— Bloquear personas completamenteallow_adult— Solo adultos (por defecto)allow_all— Adultos y niños
imageSize— Resolución:1Ko2K(solo modelos Standard/Ultra)
Modelos disponibles:
imagen-4.0-generate-001— Standard, mejor calidadimagen-4.0-ultra-generate-001— Ultra, máxima calidadimagen-4.0-fast-generate-001— Fast, menor latenciaimagen-3.0-generate-001— Generación anterior
¿Algunas imágenes de portada e ilustraciones a lo largo de esta serie? Generadas con /imagen. ¿Los memes que ves aquí? Creados con /meme.
El punto es: si hay una API, puedes envolverla en un comando. Publicación en redes sociales, traducción, generación de imágenes, consultas de datos—todo se convierte en un comando slash.
Principios de Diseño de Comandos
Propósito único — Un comando hace una cosa bien. /review revisa, /test testea. No hagas navajas suizas.
Formato de salida claro — Dile a Claude exactamente cómo presentar los resultados. ¿Viñetas? ¿Categorías? ¿Niveles de severidad? Sé explícito.
Incluye restricciones — ¿Qué NO debería hacer Claude? "Sin cambios de comportamiento" o "No modificar tests" previene que se exceda.
Usa el modelo apropiado — Haiku para consultas rápidas, Sonnet para la mayoría de tareas, Opus para razonamiento complejo. Ajusta el modelo al trabajo.
Pre-aprueba herramientas seguras — Si un comando siempre necesita git o npm, usa allowed-tools para saltar los prompts de permisos.
Depuración de Comandos
Si un comando no funciona:
- Verifica la ruta — ¿Está en
.claude/commands/o~/.claude/commands/? - Verifica la extensión — Debe ser
.md - Ejecuta
/help— Tu comando debería aparecer en la lista - Verifica el frontmatter — El YAML debe ser válido (indentación correcta, comillas alrededor de strings con caracteres especiales)
Qué Sigue
Los comandos personalizados codifican tus flujos de trabajo en acciones reutilizables. Pero ¿qué pasa si quieres compartir comandos más allá de tu equipo? ¿Y si quieres comandos que funcionen en diferentes proyectos sin copiar archivos por todas partes?
Ahí es donde entran los Skills. En la Parte 5: Skills, exploraremos cómo empaquetar comandos para distribución más amplia y crear automatización más sofisticada.
Crear comandos
mkdir -p .claude/commands — Crear directorio
.claude/commands/nombre.md — Comando básico
.claude/commands/git/commit.md — Con espacio de nombres (/git:commit)
Campos de frontmatter
Description — Se muestra en /help
Argument-hint — Pista de uso
Allowed-tools — ej., Bash(git *), Read, Write
Model — Sobreescribir modelo
Placeholders de argumentos
$ARGUMENTS — Todo después del comando
$1, $2, $3 — Argumentos posicionales
Ver comandos — /help
Stay Updated
Get notified about new posts on automation, productivity tips, indie hacking, and web3.
No spam, ever. Unsubscribe anytime.

