Cómo convertir tu Mac en un agente autónomo con Claude Code y Codex
El concepto
La idea es simple: una Mac Air M1 corriendo Claude Code de forma permanente, funcionando como un agente personal que podés controlar desde el celular. Le mandás tareas desde Telegram o la app de Claude, y mientras vos caminás, el agente lee tu backlog, ejecuta código, crea PRs en GitHub, sincroniza con Notion, y te avisa cuando termina.
No es ciencia ficción. Con las herramientas que Anthropic lanzó en los últimos meses — Remote Control, Channels, Skills, Subagentes, y Hooks — esto se puede armar en una tarde.
Este tutorial documenta el setup completo que armamos paso a paso, incluyendo la integración con Obsidian para gestionar tareas, Notion como backup, GitHub para repos, y Codex CLI de OpenAI como segundo agente para code review.
Qué vas a necesitar
Hardware:
- Mac con Apple Silicon (M1 o superior). Usamos una Mac Air M1 pero funciona con cualquier Mac moderna.
- La Mac tiene que estar encendida y conectada a corriente 24/7.
Suscripciones:
- Claude Pro ($20/mes mínimo) o Max ($100-200/mes para más headroom). Remote Control requiere Pro como mínimo.
- Cuenta de GitHub con un Fine-grained Personal Access Token.
- Cuenta de Notion (el free tier funciona).
- Cuenta de ChatGPT (Plus o superior) si querés usar Codex CLI.
Software que vamos a instalar:
- Claude Code CLI (npm)
- tmux (brew)
- Bun (para plugins/channels)
- Codex CLI (npm, opcional)
- Obsidian (para visualizar el backlog)
Arquitectura del sistema
El sistema tiene tres capas:
Capa de control — cómo le das instrucciones al agente:
- App de Claude en el teléfono (Remote Control)
- Telegram (Channels)
- Terminal directa (tmux)
- Crons del sistema operativo (automático)
Capa de agentes — quién ejecuta el trabajo:
- Claude Code como agente principal (tareas, PRDs, código, comunicación)
- Codex CLI como agente secundario (code review, tests, segunda opinión)
Capa de herramientas — dónde se conecta:
- Obsidian vault (backlog local en markdown)
- Notion (backup y visibilidad)
- GitHub (repos, PRs, issues)
- Gmail y Google Calendar (conectores nativos de claude.ai)
Paso 1: Instalar los prerequisitos
# Homebrew (si no lo tenés)/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Node.js, tmux, y Bunbrew install node tmuxcurl -fsSL https://bun.sh/install | bashexec /bin/zsh
# Verificarecho "Node: $(node --version) | tmux: $(tmux -V) | Bun: $(bun --version)"Si zsh intenta corregir tmux a _tmux, solucionalo con:
echo 'alias tmux="nocorrect tmux"' >> ~/.zshrcsource ~/.zshrcPaso 2: Instalar Claude Code y autenticarse
npm install -g @anthropic-ai/claude-codeclaude --version # Necesitás v2.1.80+Abrí una sesión para loguearte:
cd ~claudeDentro de Claude Code:
/login # Abre el navegador para OAuth con tu cuenta Pro/Max/config # Habilitar "Enable Remote Control for all sessions" → true/exitPaso 3: Crear la estructura de carpetas
Todo el workspace vive dentro de una sola carpeta. Claude Code solo trabaja acá.
# Workspace contenedormkdir -p ~/claude-setup/{vault/backlog/{pending,in-progress,done},vault/prd,vault/daily-logs,projects}
# Configuración de Claude Code (skills, agentes, scripts)mkdir -p ~/.claude/skills/{backlog-manager,notion-sync,daily-standup,pr-creator,run-codex}mkdir -p ~/.claude/{agents,scripts}Paso 4: El CLAUDE.md global
Este es el archivo más importante del setup. Claude lo lee al inicio de cada sesión y contiene todas las reglas, convenciones, y contexto que necesita para trabajar como vos querés.
cat > ~/.claude/CLAUDE.md << 'EOF'# Global Configuration
## WorkspaceEverything lives inside ~/claude-setup/- Vault (Obsidian backlog): ~/claude-setup/vault/- Projects: ~/claude-setup/projects/- Do NOT access files outside ~/claude-setup/ unless explicitly asked
## Task system- Backlog lives in ~/claude-setup/vault/backlog/- Tasks are markdown with YAML frontmatter (status, priority, project, type, assigned_to)- Statuses: pending → in-progress → done- Priorities: critical > high > medium > low- When completing a task, move file to done/ and update frontmatter- Write daily log in ~/claude-setup/vault/daily-logs/YYYY-MM-DD.md
## Code conventions- TypeScript strict mode- Functional components- Conventional commits (feat:, fix:, chore:)- Run tests before committingEOFAdaptá este archivo con tus propias convenciones, stack tecnológico, y nombre.
Paso 5: Crear los Skills
Los skills son archivos SKILL.md que enseñan a Claude cómo hacer tareas específicas. Se cargan on-demand y consumen solo 30-50 tokens cada uno hasta que se activan.
El skill más importante es el gestor de backlog:
cat > ~/.claude/skills/backlog-manager/SKILL.md << 'EOF'---name: backlog-managerdescription: Use when managing tasks, reading the backlog, creating or updating tasks in the Obsidian vaultallowed-tools: Read, Write, Edit, Bash, Grep, Glob---
# Backlog Manager
## Vault location~/claude-setup/vault/backlog/
## Task file formatFiles named YYYY-MM-DD-short-description.md with YAML frontmatter:status, priority, project, type, assigned_to, created, completed
## Rules1. Pick highest priority pending task with assigned_to: claude-code2. Change status to in-progress before starting3. After completing, move to done/ and add completed date4. Write log entry in daily-logs/EOFCreá skills adicionales para sincronización con Notion, generación de standups, creación de PRs, y delegación a Codex. El formato siempre es el mismo: frontmatter YAML con nombre y descripción, seguido de instrucciones en markdown.
Paso 6: Crear los Subagentes
Los subagentes son instancias especializadas de Claude que corren en su propio contexto. A diferencia de los skills (instrucciones), los subagentes son workers independientes.
cat > ~/.claude/agents/task-runner.md << 'EOF'---name: task-runnerdescription: Autonomous task executor for processing the backlogtools: Read, Write, Edit, Bash, Grep, Globmodel: sonnetmemory: projectpermissionMode: acceptEdits---
You are an autonomous task execution agent.Read ~/claude-setup/vault/backlog/pending/, pick the highestpriority task, execute it, update status, and write a log.EOFPaso 7: Configurar los Hooks
Los hooks ejecutan código automáticamente en momentos específicos del ciclo de vida de Claude Code. Se configuran en ~/.claude/settings.json:
{ "hooks": { "SessionStart": [{ "hooks": [{ "type": "command", "command": "~/.claude/scripts/inject-date.sh" }] }], "Notification": [{ "hooks": [{ "type": "command", "command": "~/.claude/scripts/notify.sh \"$CLAUDE_NOTIFICATION\"" }] }] }}Los scripts de soporte:
# inject-date.sh — le dice a Claude qué día es hoyecho "Today is $(date '+%A, %B %d, %Y'). Current time: $(date '+%H:%M %Z')."
# notify.sh — notificación nativa de macOSosascript -e "display notification \"$1\" with title \"Claude Code\" sound name \"Glass\""Paso 8: Conectar los MCP Servers
Los MCPs conectan a Claude con servicios externos. Solo necesitás MCPs para cosas que no están en tu filesystem local.
# Notion (oficial, hosteado por Notion)claude mcp add --transport http notion https://mcp.notion.com/mcp --scope user
# GitHub (necesita un Fine-grained Personal Access Token)claude mcp add --transport stdio github --env GITHUB_TOKEN=tu_token -- npx -y @modelcontextprotocol/server-github --scope user
# Slack (oficial, si lo usás)claude mcp add --transport http slack https://mcp.slack.com/mcp --scope userPara Obsidian no necesitás MCP. El vault son archivos markdown en tu disco — Claude los lee directamente con sus herramientas nativas (Read, Write, Edit, Bash).
Para GitHub, usá un Fine-grained Personal Access Token (no classic) que limite el acceso a repos específicos. Crealo en GitHub → Settings → Developer Settings → Fine-grained tokens, seleccionando “Only select repositories” y dándole solo permisos de Contents, Pull Requests, e Issues.
Los MCPs que requieren OAuth (Notion, Slack) se autentican la primera vez que los usás dentro de Claude Code.
Paso 9: La sesión always-on con tmux
tmux es un multiplexor de terminal que mantiene procesos corriendo aunque cierres la ventana. Es la pieza que hace posible el “always-on”.
Script de arranque:
cat > ~/.claude/scripts/start-agent.sh << 'EOF'#!/bin/bashSESSION_NAME="claude-agent"
if tmux has-session -t $SESSION_NAME 2>/dev/null; then echo "Session '$SESSION_NAME' already running." exit 0fi
tmux new-session -d -s $SESSION_NAMEtmux send-keys -t $SESSION_NAME 'cd ~/claude-setup/projects && claude --remote-control --dangerously-skip-permissions' Enter
echo "Claude agent started in tmux session '$SESSION_NAME'"echo "Attach: tmux attach -t $SESSION_NAME"echo "Detach: Ctrl+B, then D"echo "Kill: tmux kill-session -t $SESSION_NAME"EOFchmod +x ~/.claude/scripts/start-agent.shPara usarlo:
~/.claude/scripts/start-agent.sh # Lanzartmux attach -t claude-agent # Ver la sesión# Ctrl+B, D # Desattachartetmux kill-session -t claude-agent # MatarUna vez corriendo, copiá la URL de Remote Control y abrila en el teléfono. A partir de ahí, todo se controla desde el celular.
Nota sobre --dangerously-skip-permissions: este flag le da a Claude acceso total sin confirmación. Es necesario para que funcione de forma autónoma (sin que se quede esperando tu OK para cada operación), pero significa que Claude puede ejecutar cualquier comando. Por eso limitamos su alcance en el CLAUDE.md a ~/claude-setup/.
Paso 10: Crons para automatización
Los crons del sistema operativo ejecutan tareas periódicamente usando Claude Code en modo headless (-p). Cada ejecución arranca una sesión limpia.
# crontab -e# Ejecutar tareas del backlog cada 2 horas0 */2 * * * ~/.claude/scripts/cron-wrapper.sh backlog
# Sincronizar a Notion cada 4 horas0 */4 * * * ~/.claude/scripts/cron-wrapper.sh sync
# Standup diario a las 9pm0 21 * * * ~/.claude/scripts/cron-wrapper.sh standupEn macOS, necesitás darle Full Disk Access a /usr/sbin/cron en System Settings → Privacy & Security para que los crons funcionen.
Codex como segundo agente
Opcionalmente, podés instalar Codex CLI de OpenAI como agente secundario para code review y testing:
npm install -g @openai/codexEl skill run-codex y el subagente codex-reviewer que configuramos lo usan así:
codex exec "Review these files for bugs and security issues" --sandbox read-onlyClaude Code orquesta: decide cuándo delegar a Codex, le pasa el contexto, recibe el resultado, y lo integra con su propio análisis. Es un segundo par de ojos automático.
El workflow diario
- Al prender la Mac:
~/.claude/scripts/start-agent.sh - Crear tareas: desde el teléfono vía Remote Control, o creando archivos en
~/claude-setup/vault/backlog/pending/ - Claude ejecuta: automáticamente (crons) o bajo demanda (cuando le pedís desde el teléfono)
- Revisás resultados: en Obsidian, en Notion, o preguntándole “qué hiciste hoy”
- Code review: Codex revisa automáticamente cuando Claude le delega
Gestión de contexto
La sesión de Remote Control acumula contexto. Para mantenerlo limpio:
- Los crons siempre corren en sesiones aisladas (contexto limpio cada vez)
- Los subagentes corren en su propio contexto (no ensucian la sesión principal)
- Reiniciar la sesión:
tmux kill-session -t claude-agent && ~/.claude/scripts/start-agent.sh - Con Opus 4.6 tenés 1M de tokens de contexto, así que tarda mucho en llenarse
- Claude hace compactación automática cuando se acerca al límite
Limitaciones a tener en cuenta
- La Mac debe estar encendida y despierta para que todo funcione
--dangerously-skip-permissionsle da acceso total. Usalo solo en tu máquina personal- Los Fine-grained tokens de GitHub expiran (recomiendo 90 días) y hay que renovarlos
- La sincronización Obsidian → Notion es unidireccional. Notion es solo un espejo
- Remote Control genera una URL nueva cada vez que reiniciás la sesión
- Cada ejecución de cron consume tokens de tu plan de Claude
Próximos pasos
- Telegram Channel: controlar el agente desde Telegram en vez de (o además de) Remote Control
- Agent Teams: para tareas grandes, lanzar equipos de agentes que trabajan en paralelo
- Más MCPs: Slack, Linear, Figma, Playwright para testing visual
- Codex Cloud: cuando OpenAI lo lance, las tareas de Codex podrían correr en la nube sin depender de tu Mac
- Claude Code on the web: Anthropic está desarrollando sesiones cloud que no dependen de tu máquina local
Setup armado en marzo 2026 usando Claude Code v2.1.80+, Codex CLI, y macOS Sequoia en Mac Air M1.