diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md index d43ed59..3401623 100644 --- a/.claude/CLAUDE.md +++ b/.claude/CLAUDE.md @@ -57,6 +57,7 @@ agents/runtime.go Agent{}: ensambla core + shell agents// agent.go (reglas puras) + config.yaml + prompts/system.md tools/ tool registry + tool implementations (subpackages) internal/config/ schema.go + loader.go +security/ grupos de usuarios/agentes + politicas de permisos (YAMLs) cmd/launcher/ entrypoint principal (rulesRegistry) cmd/agentctl/ CLI de gestion crons/ catálogo de automatizaciones nombradas (schedule.yaml + prompts) diff --git a/dev/issues/README.md b/dev/issues/README.md index 5182250..57648cf 100644 --- a/dev/issues/README.md +++ b/dev/issues/README.md @@ -31,8 +31,8 @@ afectados y notas de implementacion. | 22b | E2E: Auth fixtures y helpers | [0022b-e2e-auth-helpers.md](completed/0022b-e2e-auth-helpers.md) | completado | | 22c | E2E: Tests de agentes + docs | [0022c-e2e-agent-tests.md](completed/0022c-e2e-agent-tests.md) | completado | | 23 | Seccion de tests en dashboard | [0023-dashboard-tests.md](completed/0023-dashboard-tests.md) | completado | -| 24 | Grupos y permisos centralizados | [0024-centralized-security-groups.md](0024-centralized-security-groups.md) | pendiente | +| 24 | Grupos y permisos centralizados | [0024-centralized-security-groups.md](completed/0024-centralized-security-groups.md) | completado | | 24a | Security types: pkg/security/ | [0024a-security-types.md](completed/0024a-security-types.md) | completado | | 24b | Security loader: shell/security/ | [0024b-security-loader.md](completed/0024b-security-loader.md) | completado | -| 24c | Security integration + cleanup | [0024c-security-integration.md](0024c-security-integration.md) | pendiente | +| 24c | Security integration + cleanup | [0024c-security-integration.md](completed/0024c-security-integration.md) | completado | | 25 | Catálogo cron + scaffolder | [0025-cron-scaffolder.md](completed/0025-cron-scaffolder.md) | completado | diff --git a/dev/issues/0024-centralized-security-groups.md b/dev/issues/completed/0024-centralized-security-groups.md similarity index 100% rename from dev/issues/0024-centralized-security-groups.md rename to dev/issues/completed/0024-centralized-security-groups.md diff --git a/dev/issues/0024c-security-integration.md b/dev/issues/completed/0024c-security-integration.md similarity index 100% rename from dev/issues/0024c-security-integration.md rename to dev/issues/completed/0024c-security-integration.md diff --git a/docs/security.md b/docs/security.md index ae3d26f..029e1de 100644 --- a/docs/security.md +++ b/docs/security.md @@ -137,6 +137,85 @@ Esto evita que el subproceso `claude -p` tenga acceso de lectura/escritura al co Implementado en `shell/llm/claudecode.go` → `resolveWorkDir()`. +## 7. Sistema de grupos centralizados (`security/`) + +Control de acceso centralizado: quien puede hablar con que agentes, y que puede hacer. +Reemplaza los campos per-agente `security.roles` y `matrix.filters.allowed_users` (ahora deprecados). + +### Estructura de archivos + +``` +security/ + user-groups.yaml # grupos de usuarios Matrix + agent-groups.yaml # grupos de agentes + permissions.yaml # politicas: que grupo de usuarios tiene que acciones en que agentes +``` + +### user-groups.yaml + +```yaml +groups: + admins: + members: ["@admin:matrix-af2f3d.organic-machine.com"] + developers: + members: ["@dev1:homeserver.com", "@dev2:homeserver.com"] + everyone: + members: ["*"] # wildcard: todos los usuarios +``` + +### agent-groups.yaml + +```yaml +groups: + all: + agents: ["*"] # wildcard: todos los agentes + production: + agents: ["assistant-bot", "asistente-2"] +``` + +### permissions.yaml + +```yaml +policies: + - agent_group: all # aplica a todos los agentes + permissions: + - user_group: admins + actions: ["*"] # admins pueden hacer todo + - user_group: everyone + actions: ["ask"] # todos pueden chatear + - agent_group: production # solo agentes de produccion + permissions: + - user_group: developers + actions: ["ask", "command:deploy", "tool:ssh_command"] +``` + +### Acciones disponibles + +| Accion | Descripcion | +|--------|-------------| +| `*` | Todo permitido | +| `ask` | Puede chatear con el agente (mensajes normales) | +| `command:` | Puede ejecutar el comando `!` | +| `tool:` | El LLM puede llamar la tool `` para este usuario | + +### Resolucion de ACL + +Al arrancar, el launcher: +1. Carga todos los YAMLs con `shellsecurity.Load("security/")` +2. Para cada agente, llama `pksecurity.ResolveACL(agentID, policy)` +3. Inyecta la `acl.ACL` resultante en `agents.New()` + +**Comportamiento cuando la politica esta vacia**: si `security/` no existe o no hay politicas que apliquen al agente, la ACL esta vacia y el acceso es abierto (sin restricciones). Preferible a denegar todo por defecto en produccion. + +### Campos deprecados + +Los siguientes campos en `config.yaml` del agente estan deprecated y no tienen efecto desde la activacion del sistema centralizado: + +- `security.roles` — reemplazado por `security/permissions.yaml` +- `matrix.filters.allowed_users` — reemplazado por `security/user-groups.yaml` + +Los campos siguen en el schema para compatibilidad con configs existentes y se eliminarán en un issue futuro. + ## Activacion Para activar todas las protecciones, añadir al `config.yaml` del agente: