Claude Code:
De 0 a 100
Instalación, Comandos, Subagentes, MCP y un Caso Práctico Real con Python
💻 Nivel: principiante → producción
🎥 Basado en el curso de Nick Saraev (772K vistas)
commits/día escritos por Claude Code
del código de Anthropic generado con IA
velocidad media de producción
01
¿Qué es Claude Code exactamente?
Claude Code es la herramienta de línea de comandos oficial de Anthropic. No es el Claude del navegador. La diferencia es fundamental: el Claude de claude.ai es un consultor al que le mandas emails. Claude Code es ese mismo consultor sentado en tu escritorio, con acceso a todos tus archivos, ejecutando comandos en tu nombre mientras tú supervisas.
| Característica | Claude.ai (navegador) | Claude Code (terminal) |
|---|---|---|
| Lee tus archivos | ❌ Tienes que pegar código | ✅ Indexa todo el proyecto |
| Ejecuta comandos | ❌ Solo describe | ✅ Corre npm test, git commit… |
| Edita archivos | ❌ Te da código para copiar | ✅ Edita directamente |
| Recuerda el proyecto | ❌ Cada sesión desde cero | ✅ Lee CLAUDE.md siempre |
| Conecta con GitHub | ❌ Imposible | ✅ Crea PRs, comenta issues |
| Trabajo paralelo | ❌ Un hilo por sesión | ✅ Subagentes simultáneos |
02
Prerrequisitos
Cuenta de Anthropic — obligatorio
Claude Code no está disponible en el plan gratuito.
| Plan | Precio | Para quién |
|---|---|---|
| Claude Pro | $20/mes | Aprendizaje y uso moderado. El mejor para empezar. |
| Claude Max | $100–200/mes | Uso intensivo, menos límites de mensajes |
| Teams | $25/usuario/mes | Equipos de desarrollo |
| Console API | Pago por uso | CI/CD, automatización, producción |
Regístrate en: claude.ai/upgrade
03
Instalación paso a paso
macOS / Linux — instalador nativo (recomendado)
Un solo comando. No necesitas Node.js. Se autoactualiza en segundo plano.
bash
curl -fsSL https://claude.ai/install.sh | bash # Verificar instalación claude --version # claude 1.x.x ✓ # Diagnóstico completo claude doctor # ✓ Installation type: native # ✓ Auto-updates: enabled
Windows — PowerShell
Primero instala Git for Windows. Luego en PowerShell:
powershell
irm https://claude.ai/install.ps1 | iex claude --version
⚠️
Git Bash tiene problemas de compatibilidad con Claude Code en Windows.
Windows con WSL2
powershell (admin)
wsl --install -d Ubuntu
# Reinicia el PC, luego dentro de Ubuntu:
curl -fsSL https://claude.ai/install.sh | bash
Método npm (alternativa)
bash
# NUNCA uses sudo con este comando npm install -g @anthropic-ai/claude-code # Si ves "command not found": echo 'export PATH="$(npm config get prefix)/bin:$PATH"' >> ~/.zshrc source ~/.zshrc
04
Primera sesión
La primera vez que ejecutas claude, se abre el navegador para hacer login con tu cuenta de Anthropic.
bash
claude # Abriendo navegador para autenticación... # ✓ Autenticado como tu@email.com # Para CI/CD sin navegador: export ANTHROPIC_API_KEY=sk-ant-api03-xxxxx claude
Comandos iniciales
claude code
/help # Lista todos los comandos /status # Modelo activo, permisos, MCPs /doctor # Diagnóstico del entorno /init # Genera CLAUDE.md para el proyecto Ctrl+C # Interrumpir tarea en curso Ctrl+D # Salir
Atajos de teclado
| Atajo | Acción |
|---|---|
Shift+Tab (×2) |
Activar Plan Mode — piensa sin tocar nada |
Shift+Tab (×1) |
Volver a Edit Mode |
Ctrl+C |
Interrumpir tarea en curso |
↑ / ↓ |
Navegar historial de prompts |
Tab |
Autocompletar comandos / |
05
El archivo CLAUDE.md — la memoria del proyecto
El CLAUDE.md es el activo más importante de tu configuración. Claude lo lee automáticamente al inicio de cada sesión. Sin él, Claude empieza sin contexto: no sabe qué stack usas ni cómo arrancar el proyecto.
💡
Con Claude Code abierto en tu proyecto, escribe /init. Claude escanea el proyecto y genera un CLAUDE.md inicial. Revísalo y mejóralo.
CLAUDE.md completo para un proyecto SaaS
markdown
# TaskFlow — CLAUDE.md ## Stack técnico - Frontend: React 18 + TypeScript + Tailwind CSS - Backend: Node.js 20 + Express + PostgreSQL - Tests: Jest + React Testing Library ## Comandos esenciales - npm run dev → Frontend en localhost:3000 - npm run server → Backend en localhost:4000 - npm test → Todos los tests ## Reglas de código - TypeScript strict mode — siempre - No usar `any` en TypeScript - No hardcodear URLs — usar variables de entorno - No commitear .env
06
Plan Mode vs Edit Mode
| Plan Mode | Edit Mode | |
|---|---|---|
| Activar | Shift+Tab ×2 o /plan |
Por defecto |
| Qué hace | Propone cambios y espera tu OK | Escribe y edita de inmediato |
| Cuándo usar | Cambios grandes, +3 archivos, arquitectura | Fixes pequeños, un archivo |
| Seguridad | Máxima — nada sin tu aprobación | Normal |
Ejemplo con Plan Mode
claude code
> /plan > Quiero añadir autenticación con Google OAuth. Necesito botón en login, callback endpoint, guardar usuario nuevo en DB. Claude propone: 1. npm install passport passport-google-oauth20 2. Crear /server/config/passport.js 3. Añadir GET /auth/google y /auth/google/callback 4. Migración: campo googleId en users 5. Actualizar LoginButton.tsx ¿Apruebo el plan? > sí
07
Todos los comandos esenciales
referencia rápida
# SESIÓN /help # Lista todos los comandos /status # Modelo activo, permisos, MCPs /doctor # Diagnóstico — úsalo cuando algo falla /init # Genera CLAUDE.md # CONTEXTO /clear # Limpia historial /compact # Resume sin perder el hilo @archivo.js # Incluye archivo en contexto --continue # Retoma sesión anterior # MODO NO INTERACTIVO claude -p "tarea" # Ejecuta y sale claude -p "tarea" --max-budget-usd 2 # Limita gasto claude -w feature/rama # Crea worktree
08
Gestión de contexto
Claude Code tiene una ventana de contexto de 200.000 tokens. En sesiones largas puede agotarse — Claude empieza a «olvidar» reglas o repetir trabajo.
✅
❌ «Arregla los bugs del proyecto»
✅ «En /server/routes/auth.js línea 45, validateToken lanza TokenExpiredError sin manejar. Añade try/catch y retorna HTTP 401 con body {error: ‘Token expirado’}»
gestión de contexto
/compact # Compacta sin perder el hilo /clear # Limpia historial completo claude --continue # Retoma sesión anterior # Referenciar solo lo necesario con @ > @src/routes/auth.js La función validateToken no maneja TokenExpiredError...
09
Subagentes
Los subagentes son instancias especializadas de Claude que trabajan de forma independiente y devuelven solo el resultado al hilo principal. Mantienen el contexto limpio.
Crear el subagente Code Reviewer
.claude/agents/code-reviewer.md
--- name: code-reviewer description: Revisor experto. Úsalo tras implementar cambios. tools: Read, Grep, Glob, Bash model: sonnet --- Para cada archivo modificado evalúa: 1. Seguridad: inputs sin validar, tokens hardcodeados 2. Rendimiento: queries N+1, bucles innecesarios 3. Tests: cobertura para cambios críticos Formato — cita archivo + línea: 🔴 CRÍTICO — [problema] → [solución] 🟡 MEJORA — [problema] → [sugerencia] ✅ OK — [qué está bien]
10
MCP — Conecta Claude con el mundo
MCP (Model Context Protocol) permite conectarse con GitHub, bases de datos, Playwright, Notion, Slack y cualquier API con soporte MCP.
GitHub MCP — el más útil
bash
claude mcp add --transport stdio github -- npx -y @modelcontextprotocol/server-github # Token en: https://github.com/settings/tokens/new # Luego puedes hacer desde Claude Code: > Lista los últimos 5 PRs abiertos > Crea un PR de feature/auth a main > Comenta en el issue #42 que el bug está resuelto
MCPs más útiles en 2026
| MCP | Para qué sirve |
|---|---|
| GitHub | PRs, issues, commits, reviews |
| PostgreSQL | Consultas, esquema, optimización |
| Playwright | Tests E2E automáticos |
| Notion | Leer/escribir páginas |
| Slack | Mensajes y canales |
⚠️
Con más de 10 MCPs activos la ventana de contexto puede reducirse de 200K a 70K tokens.
11
Git Worktrees
Los worktrees permiten tener múltiples ramas activas en carpetas separadas al mismo tiempo, sin interferencias. La funcionalidad más infrautilizada de Claude Code.
bash
# Terminal 1 — desarrollando una feature git worktree add ../proyecto-feature-pagos feature/pagos cd ../proyecto-feature-pagos && claude # Terminal 2 — bug urgente en paralelo git worktree add ../proyecto-hotfix hotfix/login-bug cd ../proyecto-hotfix && claude # Atajo directo de Claude Code claude -w feature/nueva-funcionalidad # Limpiar al terminar git worktree remove ../proyecto-hotfix
💡
main = producción estable. Nunca desarrolles directamente en main. Siempre usa worktrees para mantener producción intacta.
PARTE 2
Caso Práctico Real
Sistema de captación automática de clínicas dentales
con Python · Playwright · Claude API
12
Arquitectura del sistema
Vas a construir un sistema que encuentra clínicas en Google Maps, detecta sus puntos débiles y genera mensajes de captación personalizados con IA. El resultado parece hecho a mano porque está basado en datos reales de cada negocio.
↓ Playwright (scraping)
datos: nombre, rating, web
↓ Análisis: reseñas + web + anuncios
🤖 Claude API → Mensaje personalizado
↓
📧 Tu bandeja → Cliente potencial
Setup: 4 pasos
mkdir dental-system && cd dental-systempython -m venv venv && source venv/bin/activatepip install playwright requests beautifulsoup4 python-dotenv anthropicplaywright install — sin esto el scraping no funcionacore.py — cliente Claude
python
import os, anthropic from dotenv import load_dotenv load_dotenv() client = anthropic.Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY")) def call_claude(prompt: str, max_tokens: int = 800) -> str: response = client.messages.create( model="claude-haiku-4-5-20251001", max_tokens=max_tokens, messages=[{"role": "user", "content": prompt}] ) return response.content[0].text
tools/maps_scraper.py — scraping con Playwright
python
from playwright.sync_api import sync_playwright import time, re def scrape_google_maps(query="clinica dental Madrid", max_results=10): results = [] with sync_playwright() as p: browser = p.chromium.launch(headless=False) page = browser.new_page() page.goto("https://www.google.com/maps") page.locator("input#searchboxinput").fill(query) page.keyboard.press("Enter") time.sleep(4) # Scroll para cargar más resultados panel = page.locator("div[role='feed']").first for _ in range(5): panel.evaluate("el => el.scrollTop += 1500") time.sleep(1.5) for listing in page.locator("div[role='article']").all()[:max_results]: try: name = listing.locator("h3").inner_text(timeout=2000).strip() listing.click() time.sleep(2.5) rating_el = page.locator("span[aria-label*='estrellas']").first raw = rating_el.get_attribute("aria-label") or "" m = re.search(r"(\d[,\.]\d)", raw) rating = m.group(1).replace(",", ".") if m else "" results.append({"name": name, "rating": rating}) print(f"✓ {name} — {rating}⭐") except: continue browser.close() return results
⚠️
Si el scraper falla, usa DevTools (F12) para inspeccionar los selectores actuales y actualiza maps_scraper.py. Es normal.
agents/messaging.py — mensajes con Claude
python
from core import call_claude def generate_message(data: dict) -> str: problems = [] if "baja" in data.get("reputation_problem", ""): problems.append(f"rating de {data['rating']} estrellas") if data.get("reviews_count", 999) < 50: problems.append(f"solo {data['reviews_count']} reseñas") if not data.get("has_website"): problems.append("no tienen página web") prompt = f""" Eres experto en marketing dental en España. Escribe un email de captación (máx 120 palabras). Tono: directo, usa 'vosotros', no parecer spam. Objetivo: conseguir una llamada de 10 min. Clínica: {data['name']} Problemas: {chr(10).join(f'- {p}' for p in problems)} """ return call_claude(prompt, max_tokens=400)
Ejemplo de mensaje generado
Hola,
He estado revisando vuestra clínica y he detectado dos puntos que os están costando pacientes: tenéis 3.9 estrellas con solo 23 reseñas, y la competencia en vuestra zona está invirtiendo en anuncios mientras vosotros no aparecéis.
Trabajo con clínicas dentales para mejorar su captación desde Google. Las clínicas con las que trabajo han incrementado sus nuevos pacientes entre un 30% y un 60%.
¿Os parece si hablamos 10 minutos esta semana?
main.py — ejecutar todo
python
from tools.maps_scraper import scrape_google_maps from tools.reviews import analyze_reviews from agents.messaging import generate_message if __name__ == "__main__": clinics = scrape_google_maps("clinica dental Santiago de Compostela") for clinic in clinics: review = analyze_reviews(clinic) if not review.get("is_lead"): continue msg = generate_message({**clinic, **review}) print(f"\n{clinic['name']}\n{msg}") # Ejecutar: # source venv/bin/activate && python main.py
13
Cómo monetizar el sistema
SEO Local
300–800€
/mes por cliente ✅
Gestión Reseñas
200–400€
/mes ✅
Google Ads
500–1.500€
/mes + % ✅
Setup web
1.500–4.000€
pago único
📊
20–50 contactos cualificados/día con una hora de trabajo. Tasa de respuesta 3–8% con mensajes personalizados. Cálculo conservador: 2 clientes/semana × 400€/mes = 800€ MRR adicional en el primer mes.
14
Errores comunes
❌
Mal: «Arregla los bugs del proyecto»
Bien: «En /server/routes/auth.js línea ~45, validateToken no maneja JWT TokenExpiredError. Añade try/catch y devuelve HTTP 401 con {error: ‘Token expirado’}»
❌
Sin CLAUDE.md Claude no sabe tu stack ni convenciones. Usa /init en cada proyecto nuevo.
❌
Claude es correcto el 80-90% del tiempo. Siempre pide que ejecute los tests: «Corre npm test y dime si algo falla antes de continuar».
⚡ Resumen ejecutivo
| Instalación | curl -fsSL https://claude.ai/install.sh | bash |
| Verificar | claude doctor |
| CLAUDE.md | /init en cada proyecto, luego edítalo |
| Plan Mode | Shift+Tab ×2 para cambios grandes |
| Contexto | /compact cuando la sesión se alarga |
| Subagentes | Crea code-reviewer en .claude/agents/ |
| MCP GitHub | claude mcp add github -- npx @modelcontextprotocol/server-github |
| Worktrees | claude -w feature/rama — nunca en main directo |
| Sistema dental | python main.py — scraping + análisis + mensajes IA |
| Monetización | 300–800€/mes por cliente SEO local + reseñas |
🚀 El siguiente paso es tuyo
Este artículo te ha dado el mapa completo.
Instala Claude Code ahora y construye algo real hoy.