From de34d8a99deb3666e81adee9c4f78b01dd9d7216 Mon Sep 17 00:00:00 2001 From: Enmanuel Date: Sun, 8 Mar 2026 11:48:13 +0000 Subject: [PATCH] docs: documentar aislamiento de claude -p en security y guias MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - docs/security.md: nueva seccion 6 sobre aislamiento del provider claude-code, comportamiento del working_dir y checklist actualizado - CLAUDE.md: añadir claude_code.working_dir a la seccion de seguridad - create_agent.md: recomendar siempre configurar working_dir cuando se usa el provider claude-code Co-Authored-By: Claude Opus 4.6 --- .claude/CLAUDE.md | 3 ++- .claude/rules/create_agent.md | 12 ++++++++++++ docs/security.md | 23 +++++++++++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md index 271db94..028934d 100644 --- a/.claude/CLAUDE.md +++ b/.claude/CLAUDE.md @@ -100,8 +100,9 @@ Protecciones contra prompt injection y abuso de tools (issue 0019): - **Rate limiting** — por room en `tools/registry.go` via `security.tool_rate_limit` - **System prompts** — seccion anti-injection obligatoria (template en `.claude/templates/security-prompt.md`) - **`storage.base_path`** — permite aislar datos de runtime fuera del arbol del proyecto +- **`claude_code.working_dir`** — aislamiento del subproceso `claude -p` fuera del repo (default: tmpdir) -Config YAML relevante: `security.sanitize.*`, `security.tool_rate_limit.*`, `storage.base_path` +Config YAML relevante: `security.sanitize.*`, `security.tool_rate_limit.*`, `storage.base_path`, `claude_code.working_dir` Documentacion completa: `docs/security.md` ## Preferencias diff --git a/.claude/rules/create_agent.md b/.claude/rules/create_agent.md index 4578467..bdd2e70 100644 --- a/.claude/rules/create_agent.md +++ b/.claude/rules/create_agent.md @@ -84,6 +84,18 @@ llm: api_key_env: ANTHROPIC_API_KEY # o OPENAI_API_KEY (default) ``` +**Claude-code provider** (si usa `claude-code` como provider): +```yaml +llm: + primary: + provider: claude-code + claude_code: + working_dir: "/tmp/claude-agents/" # SIEMPRE configurar, nunca dejar vacío + permission_mode: "bypassPermissions" +``` + +**Importante**: `working_dir` debe apuntar fuera del repositorio para evitar que el subproceso `claude -p` acceda al código fuente. Si se deja vacío, se usará un directorio temporal (con WARN en logs). + **Tool use** (si el agente necesita herramientas): ```yaml llm: diff --git a/docs/security.md b/docs/security.md index 13b2873..ae3d26f 100644 --- a/docs/security.md +++ b/docs/security.md @@ -115,6 +115,28 @@ Prioridad: config `base_path` > `$AGENTS_DATA_DIR/` > `agents//data/` (d Esto previene que tools como `read_file` accedan accidentalmente a codigo fuente, `.env`, o configs del proyecto. +## 6. Aislamiento de claude -p (provider claude-code) + +Cuando un agente usa el provider `claude-code`, el subproceso `claude -p` se ejecuta en un directorio de trabajo aislado, no en la raiz del repositorio. + +**Configuracion:** + +```yaml +llm: + primary: + claude_code: + working_dir: "/tmp/claude-agents/mi-bot" # directorio aislado +``` + +**Comportamiento:** +- Si `working_dir` esta configurado: se crea el directorio automaticamente con `MkdirAll` y se usa como CWD del subproceso +- Si `working_dir` esta vacio: se crea un directorio temporal (`os.MkdirTemp`) y se loguea un WARN para que el operador lo note +- **Nunca** se hereda el CWD del launcher (raiz del repo) + +Esto evita que el subproceso `claude -p` tenga acceso de lectura/escritura al codigo fuente del proyecto, incluso con `permission_mode: bypassPermissions`. + +Implementado en `shell/llm/claudecode.go` → `resolveWorkDir()`. + ## Activacion Para activar todas las protecciones, añadir al `config.yaml` del agente: @@ -133,3 +155,4 @@ Y asegurarse de que: - Las tools tienen allowlists configuradas (no vacias si se quieren usar) - El system prompt incluye la seccion de seguridad - `storage.base_path` apunta fuera del proyecto en produccion +- `claude_code.working_dir` apunta fuera del repo si se usa el provider claude-code