docs: documentar aislamiento de claude -p en security y guias
- 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 <noreply@anthropic.com>
This commit is contained in:
+2
-1
@@ -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`
|
- **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`)
|
- **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
|
- **`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`
|
Documentacion completa: `docs/security.md`
|
||||||
|
|
||||||
## Preferencias
|
## Preferencias
|
||||||
|
|||||||
@@ -84,6 +84,18 @@ llm:
|
|||||||
api_key_env: ANTHROPIC_API_KEY # o OPENAI_API_KEY (default)
|
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/<agent-id>" # 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):
|
**Tool use** (si el agente necesita herramientas):
|
||||||
```yaml
|
```yaml
|
||||||
llm:
|
llm:
|
||||||
|
|||||||
@@ -115,6 +115,28 @@ Prioridad: config `base_path` > `$AGENTS_DATA_DIR/<id>` > `agents/<id>/data/` (d
|
|||||||
|
|
||||||
Esto previene que tools como `read_file` accedan accidentalmente a codigo fuente, `.env`, o configs del proyecto.
|
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
|
## Activacion
|
||||||
|
|
||||||
Para activar todas las protecciones, añadir al `config.yaml` del agente:
|
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)
|
- Las tools tienen allowlists configuradas (no vacias si se quieren usar)
|
||||||
- El system prompt incluye la seccion de seguridad
|
- El system prompt incluye la seccion de seguridad
|
||||||
- `storage.base_path` apunta fuera del proyecto en produccion
|
- `storage.base_path` apunta fuera del proyecto en produccion
|
||||||
|
- `claude_code.working_dir` apunta fuera del repo si se usa el provider claude-code
|
||||||
|
|||||||
Reference in New Issue
Block a user