Files
fn_registry/bash/functions/pipelines/agent_scaffold.md
T
egutierrez 7913116a8e chore: auto-commit (129 archivos)
- .claude/agents/fn-analizador/SKILL.md
- .claude/agents/fn-constructor/SKILL.md
- .claude/agents/fn-executor/SKILL.md
- .claude/agents/fn-mejorador/SKILL.md
- .claude/agents/fn-orquestador/SKILL.md
- .claude/agents/fn-recopilador/SKILL.md
- .claude/commands/app.md
- .claude/commands/compile.md
- .claude/commands/cpp-app.md
- .claude/commands/create_functions.md
- ...

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-01 22:23:12 +02:00

5.8 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports params output tested tests test_file_path file_path
agent_scaffold pipeline bash pipelines 1.0.0 impure agent_scaffold(id: string, --display-name string, [--skills cat/skill,...], [--llm provider], [--model model], [--description string], [--tags tags], [--no-register], [--no-commit], [--dry-run]) -> json Crea un agente nuevo en agents_and_robots/agents/<id>/ listo para arrancar. Copia el _template/, adapta config.yaml (id, name, version, template:false, llm, skills, matrix env vars), valida skills declaradas, registra el bot en Synapse via bin/register y hace commit en el repo.
agent
scaffold
matrix
agents_and_robots
launcher
assert_command_exists_bash_shell
false error_go_core
name desc
id Identificador del agente en snake-case o kebab-case (ej: monitor-bot, data_analyst). Debe ser unico en agents/.
name desc
display-name Nombre legible que aparece en Matrix y en el system prompt generado (ej: 'Monitor Agent').
name desc
skills Lista de skills a habilitar, separadas por coma, en formato cat/skill-name (ej: devops/deploy-service,system/health-check). Cada skill debe existir como skills/<cat>/<name>/SKILL.md.
name desc
llm LLM provider: openai (default), anthropic, o claude-code. Determina el proveedor en llm.primary.provider del config.yaml.
name desc
model Modelo LLM especifico (ej: gpt-4o, claude-sonnet-4-20250514). Si se omite, se usa el default del provider.
name desc
description Descripcion corta del agente que se escribe en agent.description del config.yaml y en el stub del system prompt.
name desc
tags Tags separados por coma para agent.tags del config.yaml (ej: monitor,ops,devops).
name desc
no-register Flag opcional. Si esta presente, omite el paso de registro del usuario bot en Synapse.
name desc
no-commit Flag opcional. Si esta presente, omite el git commit en el repo agents_and_robots.
name desc
dry-run Flag opcional. Muestra el plan completo de ejecucion sin modificar ningún archivo.
JSON con campos: status (ok/error), id, agent_dir (path relativo al registry), skills_enabled (array), registered (bool), committed (bool), message (advertencias si las hay). false
bash/functions/pipelines/agent_scaffold.sh

Ejemplo

# Crear agente basico con openai
export FN_REGISTRY_ROOT=$HOME/fn_registry
bash bash/functions/pipelines/agent_scaffold.sh monitor-bot \
  --display-name "Monitor Agent" \
  --description "Monitorea servicios y reporta estado" \
  --tags "monitor,ops" \
  --llm openai \
  --model gpt-4o

# Crear agente con skills habilitadas y claude-code
bash bash/functions/pipelines/agent_scaffold.sh devops-bot \
  --display-name "DevOps Bot" \
  --skills devops/deploy-service,system/health-check \
  --llm claude-code \
  --description "Bot para operaciones de infraestructura" \
  --no-register --no-commit

# Ver plan sin modificar nada
bash bash/functions/pipelines/agent_scaffold.sh test-bot \
  --display-name "Test Bot" \
  --skills devops/deploy-service \
  --description "Bot de prueba" \
  --no-register --no-commit --dry-run

Salida JSON

{
  "status": "ok",
  "id": "monitor-bot",
  "agent_dir": "projects/element_agents/apps/agents_and_robots/agents/monitor-bot",
  "skills_enabled": ["devops/deploy-service"],
  "registered": true,
  "committed": true
}

Estructura generada

agents/<id>/
  config.yaml          # Adaptado desde _template, con id/name/version/template:false
  agent.go             # Copiado del template (reglas puras — editar despues)
  prompts/
    system.md          # Stub minimo si el del template era generico
  knowledge/           # Directorio creado si faltaba

Pasos del pipeline

  1. Localizar el proyecto agents_and_robots en projects/element_agents/apps/agents_and_robots/
  2. Validar que el id es valido (snake/kebab-case, sin espacios, no existe ya)
  3. Copiar agents/_template/ a agents/<id>/, eliminar template_para_llm.md y PERSONALITIES.md
  4. Editar config.yaml: id, name, version, template:false, description, tags, role, llm.provider, llm.model, api_key_env, skills (si aplica), matrix user_id/tokens/crypto paths
  5. Validar que cada cat/skill declarada en --skills existe como skills/<cat>/<name>/SKILL.md
  6. Crear prompts/system.md y knowledge/ si no existen o son el stub del template
  7. Si no --no-register: compilar bin/register si falta y ejecutar registro en Synapse
  8. Si no --no-commit: git add agents/<id>/ && git commit "feat: scaffold agent <id>"
  9. Emitir JSON de resultado

Variables de entorno requeridas

Variable Requerida para Descripcion
FN_REGISTRY_ROOT siempre (o ejecutar desde la raiz) Raiz del fn_registry
MATRIX_ADMIN_TOKEN paso 7 (registro) Token de admin de Synapse

Comportamiento de errores

  • Si agents_and_robots/ no existe: error fatal, no crea nada
  • Si el id ya existe: error fatal, no sobreescribe
  • Si una skill no existe: error fatal con lista de skills disponibles
  • Si bin/register no compila o falta MATRIX_ADMIN_TOKEN: advertencia en JSON, continua sin registrar
  • Si el git commit falla: advertencia en JSON, el agente queda creado en disco

Notas

El pipeline NO hace push al remote ni arranca el agente. Estos pasos quedan pendientes:

  • Editar agents/<id>/agent.go para personalizar las reglas de decision (puro)
  • Editar agents/<id>/prompts/system.md con el system prompt real
  • Registrar el blank import en cmd/launcher/main.go (ver .claude/rules/create_agent.md)
  • Reconstruir el launcher: go build -tags goolm ./...
  • Arrancar: ./dev-scripts/server/restart.sh
  • Push: /full-git-push desde el proyecto