Renumera todos los archivos de tasks de 2 dígitos (01-, 02-...) a 3 dígitos (001-, 002-...) para mejor ordenación. Añade tres nuevas tasks pendientes: 012-threads, 013-hot-reload, 014-template-agent. Deshabilita memory temporalmente en assistant-bot config mientras se estabiliza el sistema de memoria. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
5.1 KiB
014 — Agente plantilla + estandarización de config.yaml
Objetivo
Crear un agente plantilla (no lanzable) que sirva como referencia canónica para la configuración de todos los agentes. Enriquecer !info para mostrar metadata completa. Estandarizar los config.yaml existentes.
Contexto
- El launcher descubre agentes via
agents/*/config.yaml(glob en cmd/launcher/main.go:55) !infoexiste como built-in enpkg/command/builtins.gopero solo muestra: nombre, ID, versión, descripción- No hay herencia de configs ni template base — cada config.yaml es autocontenido
- Agentes actuales: assistant-bot, asistente-2, meteorologo
Tareas
Fase 1: Agente plantilla
-
1.1 Decidir mecanismo de exclusión del launcher. Opciones:
- (A) Campo
agent.template: trueen config.yaml → launcher lo ignora - (B) Directorio especial fuera de
agents/(ej:agents/_template/) - (C) Convención de nombre con prefijo
_que el glob excluya - Recomendación: opción (A) es la más explícita y extensible. Añadir campo
Template boolaAgentMetaen schema.go y filtrar en launcher.
- (A) Campo
-
1.2 Añadir campo
template: trueainternal/config/schema.go→AgentMeta -
1.3 Filtrar agentes template en
cmd/launcher/main.go— skip sicfg.Agent.Template == true -
1.4 Crear
agents/_template/config.yamlcon TODAS las secciones documentadas y valores por defecto comentados. Este archivo es la referencia canónica. Incluir:agent:— id, name, description, version, tags, template: truepersonality:— valores estándar (tone, verbosity, language, emoji_style, prefix, templates, behavior)llm:— primary con placeholders, tool_use config, fallbacktools:— todas las subsecciones (memory, knowledge, ssh, http, scripts, file_ops, mcp)matrix:— homeserver, user_id, encryption, rooms, filtersagents:— peers, delegationsecurity:— roles, auditschedules:— ejemplo de cronobservability:— logging, metrics, healthresilience:— circuit breaker, retry, shutdownstorage:— state, cache, historymemory:— window config
-
1.5 Crear
agents/_template/agent.gomínimo conRules()que retorna slice vacío (para que compile, aunque nunca se lance) -
1.6 Actualizar
dev-scripts/agent/new-agent.shpara copiar desde_template/en lugar de generar inline
Fase 2: Enriquecer !info
-
2.1 Modificar el handler de
!infoenagents/commands.gopara que devuelva:- Nombre (
agent.name) - Descripción (
agent.description) - Versión (
agent.version) - Personalidad: tone, verbosity, language, emoji_style
- LLM: provider + modelo del primary
- Nº de tools registradas (del toolRegistry)
- Memoria habilitada (sí/no + window size)
- Knowledge habilitado (sí/no)
- Nº de docs en knowledge (si habilitado, contar archivos en knowledge dir)
- Uptime del agente
- Nombre (
-
2.2 Formatear la respuesta como bloque legible (markdown con secciones o tabla)
-
2.3 Asegurar que
!infono exponga datos sensibles (tokens, API keys, paths internos)
Fase 3: Estandarizar configs existentes
-
3.1 Definir convenciones estándar obligatorias para todo config.yaml:
agent.versionsiempre presente (semver)agent.tagssiempre presente (al menos un tag de categoría)personality.languageypersonality.languages_supportedsiempre explícitospersonality.behaviorsiempre con las 6 claves (proactive, ask_confirmation, show_reasoning, thread_replies, typing_indicator, acknowledge_receipt)llm.tool_usesiempre explícito (enabled true/false, max_iterations)tools.memoryytools.knowledgesiempre presentes (enabled true/false)matrix.homeserverymatrix.encryptionsiempre presentesobservability.logging.levelsiempre explícito
-
3.2 Actualizar
agents/assistant-bot/config.yamlsegún convenciones -
3.3 Actualizar
agents/asistente-2/config.yamlsegún convenciones -
3.4 Actualizar
agents/meteorologo/config.yamlsegún convenciones -
3.5 Validar que los tres agentes arrancan correctamente tras los cambios
Fase 4: Documentación y tooling
-
4.1 Añadir validación en
internal/config/loader.goque emita warnings si faltan secciones recomendadas (no bloquear, solo log) -
4.2 Actualizar
.claude/policies/create_agent.mdpara referenciar el template -
4.3 Actualizar
docs/creating-agents.mdcon la nueva referencia del template
Orden de ejecución recomendado
- Fase 1 (template) → base para todo lo demás
- Fase 2 (info) → independiente, puede hacerse en paralelo
- Fase 3 (estandarizar) → requiere Fase 1 como referencia
- Fase 4 (docs) → última, cuando todo esté estable
Decisiones de diseño pendientes
- ¿El template debería ser un config.yaml real parseable o solo documentación con comentarios?
→ Recomendación: real parseable con
template: true, así sirve como test de que el schema está completo - ¿Añadir un comando
agentctl validate <config.yaml>para verificar conformidad? → Nice-to-have, se puede añadir en una fase posterior