Nueva regla .claude/rules/delete_agent.md con instrucciones completas
para eliminar agentes (manual y automatizado). Actualiza index.md,
CLAUDE.md y cierra issue 0048.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Nuevos scripts que revierten todo lo que create-full.sh genera:
- deactivate-matrix.sh: desactiva usuario via Synapse admin API
- remove-launcher-import.sh: elimina blank import del launcher
- remove-env-vars.sh: limpia las 4 env vars del .env
- delete-full.sh: orquestador de 7 pasos (validate, stop, deactivate,
remove import, remove env, delete files, rebuild)
Flags: --force (sin confirmacion), --keep-matrix (preserva usuario).
Actualiza remove.sh con referencia a delete-full.sh.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Father Bot pasa de creador restringido a administrador completo del
sistema de agentes: crear, modificar, desactivar, configurar tools,
gestionar permisos, diagnosticar. Sin limites artificiales.
Father Bot ya no tiene restricciones artificiales. Ahora puede:
- Crear, modificar y desactivar agentes
- Configurar tools con allowlists reales (no solo vacias)
- Gestionar permisos en security/
- Diagnosticar problemas leyendo logs
- Sin limite de agentes por sesion
Se eliminaron: restricciones de paths, rate limiting de creacion,
deny-by-default obligatorio en tools, prohibicion de modificar
agentes existentes, prohibicion de eliminar agentes.
Se mantienen: ACL admin-only, proteccion anti-injection del propio
Father Bot, prohibicion de mostrar .env, seccion de seguridad en
prompts de agentes creados.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Corrige bug donde el system prompt de agentes en agents/_specials/
(como Father Bot) no se cargaba porque el runtime resolvia la ruta
como agents/<id>/... en vez del directorio real del config.
Agrega ConfigDir al schema de config, poblado por el loader.
Test con directorio anidado (agents/_specials/father-bot/) que
confirma que ConfigDir se resuelve al directorio padre del config
y que system_prompt_file se puede resolver relativo a el.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Antes, el runtime construia la ruta del system prompt como
agents/<agent-id>/<file>, lo cual fallaba para agentes en
agents/_specials/ (como Father Bot). Ahora:
1. config.Load() guarda el directorio del config en ConfigDir
2. llm.go usa ConfigDir para resolver rutas relativas
Esto corrige que Father Bot operara sin su system prompt completo
(369 lineas de instrucciones, pipeline, seguridad) usando solo la
description de una linea como fallback.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
El runtime resuelve system_prompt_file como agents/<id>/prompts/...
pero los agentes especiales viven en agents/_specials/<id>/. Esto
causa que Father Bot opere sin su system prompt completo de 369 lineas.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Habilita streaming en Father Bot y mejora el ProgressReporter para
mostrar mensajes legibles durante la creacion de agentes (paso N,
nombre del script, emoji contextual) en vez de comandos raw.
Tests unitarios para formatToolEvent con todos los pipeline hints:
create-full.sh, health-check.sh, notify-developer.sh, restart.sh,
start.sh, go build, go test, Edit, Read, Glob, Grep, y fallback
generico. Incluye tests para el contador de pasos y truncateInput.
Actualiza test de integracion existente para el nuevo formato de
mensajes (step counter + nombres legibles vs raw tool names).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Informa a Father Bot que el sistema muestra automaticamente progreso
al usuario en tiempo real, y que no necesita enviar mensajes
intermedios manuales. Esto evita duplicacion de feedback.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
El ProgressReporter ahora muestra mensajes legibles cuando detecta
comandos conocidos del pipeline de creacion de agentes:
- create-full.sh → "📦 Creando agente: scaffold, build, register..."
- health-check.sh → "🏥 Verificando health check..."
- notify-developer.sh → "📨 Enviando bienvenida a developers..."
- restart.sh / start.sh → "🔄 Reiniciando launcher..."
- go build → "🔨 Compilando..."
- go test → "🧪 Ejecutando tests..."
- Edit/Write → "✏️ Editando: <archivo>"
- Read → "📖 Leyendo: <archivo>"
- Glob/Grep → "🔍 Buscando: <patron>"
Incluye contador de pasos visible ("Paso N — <descripcion>") para que
el usuario pueda seguir el progreso. Si no reconoce el comando, usa
el formato generico anterior.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Issue para que Father Bot muestre feedback visual durante la creacion
de agentes. Incluye: habilitar streaming en config, mejorar formateo
del ProgressReporter con nombres de pasos legibles, y tests.
Tambien habilita streaming + show_tool_progress en el config de
Father Bot (quick win que activa el ProgressReporter existente).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
El script notify-developer.sh ahora crea salas DM con encriptacion
E2EE habilitada via initial_state m.room.encryption. Corrige que
bots recientes (father-bot, test-bot, test-personality) aparezcan
sin cifrado en Element.
Valida que el script notify-developer.sh crea DM rooms con
encriptacion habilitada: initial_state con m.room.encryption,
algoritmo m.megolm.v1.aes-sha2, preset trusted_private_chat,
is_direct e invite presentes.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
El createRoom usaba solo preset trusted_private_chat, que configura
permisos pero no activa encriptacion. Ahora incluye initial_state
con m.room.encryption (m.megolm.v1.aes-sha2) para que las salas DM
de bienvenida se creen cifradas de extremo a extremo.
Esto corrige que bots recientes (father-bot, test-bot, test-personality)
aparezcan sin E2EE en Element cuando el DM fue iniciado por el script.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
El script notify-developer.sh crea salas DM sin encriptacion porque
el createRoom usa preset trusted_private_chat sin initial_state de
m.room.encryption. Esto afecta a bots creados recientemente
(father-bot, test-bot, test-personality).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Mueve el issue a dev/issues/completed/ tras implementar todas las fases:
- Fase 1: streaming del subproceso con stream-json
- Fase 2: ProgressReporter con mensajes progresivos en Matrix
- Fase 3: config schema y template actualizados
- Fase 4: tests de integracion y regresion
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Agrega tests de integracion end-to-end que validan el pipeline completo:
streaming events → ProgressReporter → mock sender → Matrix messages.
- TestIntegration_StreamToProgressReporter: simula sesion completa con
init, 3 tool_use, text, result y finalize — verifica 1 send + 4 edits
- TestIntegration_NoStreamingNoSideEffects: verifica que streaming=false
no genera ningun side effect (regression test)
- TestIntegration_ProgressReporterWithSendError: verifica que errores
de envio no causan panic y se manejan gracefully
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Agrega campos streaming y show_tool_progress al template de config
del agente para documentar las nuevas opciones de claude-code.
Ambos desactivados por defecto (backward compatible).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Implementa la Fase 2 del issue 0036: mensajes de progreso en tiempo real
que muestran al usuario que herramientas esta usando el agente claude-code.
- SendMarkdownGetID en shell/matrix/client.go: envia mensaje y retorna
el event ID para editarlo despues
- EditMessage en shell/matrix/client.go: edita un mensaje existente
usando m.replace (m.relates_to con rel_type=m.replace)
- ProgressReporter en shell/effects/progress.go (NEW): recibe streaming
events y actualiza un mensaje unico en Matrix mostrando el progreso
(e.g. "🔧 Bash: ls -la" → "🔧 Read: file.go" → "✅ Completado")
- Rate limiter integrado: max 1 edit/segundo para no saturar el homeserver
- Conectado en devagents/handler.go: cuando provider=claude-code y
streaming+show_tool_progress habilitados, crea ProgressReporter y
pasa StreamFunc al CompletionRequest
- MatrixSender interface actualizada con los nuevos metodos
- 10 tests nuevos para ProgressReporter, todos los existentes pasan
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Implementa la Fase 1 del issue 0036: soporte de streaming en tiempo real
para el provider claude-code.
- Tipos puros de streaming en pkg/llm/types.go: StreamEventKind,
StreamEvent, StreamFunc (pure core, sin side effects)
- Refactor de shell/llm/claudecode.go: nuevo code path executeStreaming
que usa cmd.StdoutPipe + bufio.Scanner para leer linea a linea
- Parser parseStreamLine que mapea eventos JSON del CLI (system, assistant,
result) a StreamEvent del dominio
- buildClaudeArgs ahora selecciona --output-format stream-json cuando
streaming esta habilitado y StreamFunc presente
- Campos Streaming y ShowToolProgress en ClaudeCodeCfg (config schema)
- Backward compatible: streaming=false (default) no cambia comportamiento
- 40 tests (20 existentes + 20 nuevos) pasan sin errores
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- /create-agent SKILL.md: pipeline 8 pasos del script, pasos 8-12 post
- /create-bot SKILL.md: pipeline con health check y self-introduce
- CLAUDE.md: seccion breve de pipeline de 12 pasos con env var clave
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Actualiza create_agent.md con el pipeline completo (12 pasos) al inicio
de la guia, referenciando los scripts de cada paso.
Actualiza system prompt de father-bot con:
- Pipeline de 12 pasos explicito con "nunca saltar pasos"
- Health check (paso 11) via health-check.sh antes de confirmar
- Self-introduce (paso 12) via notify-developer.sh
- Paso de reporte incluye confirmacion de health check y notify
- Manejo de errores para health check y notify
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Mover issue 0043-father-bot-security-guardrails a completed/.
Todas las fases implementadas: control de acceso, path scoping,
rate limiting, validacion post-creacion y verificacion de audit.
Agrega dos tests nuevos al paquete pkg/security que verifican
escenarios especificos de father-bot:
- TestResolveACL_FatherBotDenyByDefault: cuando el grupo admins
esta vacio, nadie puede interactuar con father-bot (deny-by-default)
- TestResolveACL_FatherBotMultipleAdmins: cuando hay multiples
admins configurados, todos pueden interactuar; usuarios fuera
del grupo no pueden
Estos tests complementan el existente TestResolveACL_PrivilegedVsGeneral
que ya cubria el caso basico de admin vs non-admin.
Issue: 0043
Implementa restricciones adicionales de seguridad para father-bot,
el agente privilegiado que crea otros agentes. Los guardrails se
implementan como instrucciones en el system prompt (primera linea
de defensa) complementando el ACL admin-only existente.
Guardrails agregados:
- Control de acceso: verificacion explicita de admin antes de operar,
deny-by-default si no hay admins configurados (fase 1)
- Path scoping: allowlist de escritura (agents/, cmd/launcher/main.go),
denylist explicita (.env, security/, .git/) (fase 2)
- Rate limiting: maximo 3 agentes por sesion de conversacion,
verificacion de duplicados antes de crear (fase 3)
- Validacion post-creacion: checklist de seguridad obligatorio antes
de reiniciar launcher — sin sanitize deshabilitado, sin wildcards
en SSH/file, sin bypassPermissions, con seccion de seguridad en
prompt (fase 4)
- Paso 5.5 en el flujo de trabajo para ejecutar validacion de
seguridad despues de compilar y antes de reiniciar (fase 4)
- Audit ya estaba habilitado en config.yaml, verificado correcto (fase 5)
Issue: 0043
Pipeline de creacion formalizado con 3 mejoras:
1. Display name automatico (paso 7): create-full.sh ahora configura
el display name en Matrix via PUT al profile API con el token
del bot recien creado. Evita que los bots aparezcan como @id:server.
2. Health check post-arranque: nuevo script health-check.sh que busca
en los logs del launcher mensajes de arranque exitoso ("e2ee ready",
"runner started", etc.) con timeout configurable (default 30s).
3. Notificacion enriquecida: notify-developer.sh ahora incluye
descripcion del agente (leida de config.yaml), tools habilitadas,
formato markdown con estructura clara, y reintentos con backoff
(hasta 3 intentos) si el envio de DM falla.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Pipeline de 12 pasos obligatorios:
scaffold → build → register → verify E2EE → [convert robot] →
auto-avatar → display name → personalize → rebuild → start →
health check → self-introduce (el bot habla a devs)
Nuevos pasos: display name automatico, health check post-arranque,
y mejora del mensaje de bienvenida. Garantiza consistencia entre
creacion manual (dev-scripts) y via father-bot.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Test de integracion real que:
1. Crea DM con father-bot via Matrix SDK
2. Pide crear un robot simple (e2e-father-test)
3. Espera respuesta de father-bot (timeout 9min, claude-code)
4. Verifica: config.yaml (type: robot), agent.go, compilacion, blank import
5. Cleanup automatico: borra agente, import y env vars
Validado: father-bot creo el robot en ~3min con reporte estructurado.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
El usuario principal del servidor no estaba en el grupo admins,
causando que father-bot (y cualquier agente con ACL restrictivo)
denegara el acceso. Solo @admin estaba listado.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Primer agente privilegiado en agents/_specials/. Usa claude-code provider
con acceso completo al repo para crear agentes y robots via Matrix.
Cambios principales:
- father-bot: agent.go, config.yaml (claude-code, E2EE, audit, sanitize),
system prompt con guia de creacion completa y seguridad anti-injection
- Launcher: descubre configs en _specials/ con validacion de tipo
- Seguridad: grupo privileged (admin-only), reestructura de all → general
para evitar ACL union con everyone
- dev-scripts: _common.sh escanea _specials/ en config_path_for y list_agents_raw
- Issue 0043 creado para guardrails de seguridad futuros
- Tests: ACL privileged vs general, isSpecialConfig, 11 E2E tests
Implementado como father-bot en agents/_specials/father-bot/.
Mover issue a completed/ y actualizar README.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
11 tests que verifican:
- agent.go puro (sin imports I/O, registra Rules con ActionKindLLM)
- config.yaml: claude-code provider, bypassPermissions, E2EE, sanitize, audit
- system prompt: guia de creacion, decision tree, convenciones, seguridad
- launcher: import de _specials/father-bot, discovery de _specials/
- security: father-bot en grupo privileged, solo admins en permissions.yaml,
NO en grupo general (evita ACL union)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- TestResolveACL_PrivilegedVsGeneral: verifica que father-bot solo
es accesible por admins y que agentes generales son accesibles
por todos. Reproduce la config real de produccion.
- TestIsSpecialConfig_*: 3 tests para la funcion que detecta
configs de SpecialConfig ya cargados (orchestrator) y los salta
en el loop de discovery normal del launcher.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Reestructura los grupos de seguridad para soportar agentes privilegiados:
- Nuevo grupo 'privileged' con father-bot (solo admins)
- Reemplaza grupo 'all' (wildcard) con 'general' (lista explicita)
para evitar que el ACL union otorgue permisos de everyone a father-bot
- Documenta en YAML que el ACL es acumulativo y por que privileged
y general deben ser mutuamente excluyentes
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Primer agente privilegiado en agents/_specials/. Usa provider claude-code
con acceso completo al repositorio para ejecutar el pipeline de creacion
de agentes de forma autonoma (scaffold, build, register, verify, restart).
Archivos:
- agent.go: reglas puras (DM/mention → LLM)
- config.yaml: claude-code provider, bypassPermissions, E2EE, audit
- prompts/system.md: guia completa de creacion con decision tree,
convencion de IDs, validaciones y seccion anti-injection
Config: claude-code con working_dir al repo, allowed_tools restringido,
model sonnet, timeout 10m, add_dirs con templates y referencias.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
El launcher ahora escanea agents/_specials/*/config.yaml ademas de
agents/*/config.yaml para descubrir agentes del sistema con identidad
Matrix (ej: father-bot). Los SpecialConfig ya cargados (orchestrator)
se detectan y saltan via isSpecialConfig() para evitar errores de
validacion.
Tambien actualiza dev-scripts/_common.sh para que config_path_for()
y list_agents_raw() incluyan _specials/ en la busqueda.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>