Los comandos hardcodeaban /home/lucas/fn_registry y hacían 'source' del script TBD, lo que fallaba en otros PCs (path inexistente) y bajo zsh (BASH_SOURCE sin definir).
- Path portable: ${FN_REGISTRY_ROOT:-$HOME/fn_registry} — usa la env var si está, si no ~/fn_registry. Válido en cualquier PC del ecosistema.
- Invocación con 'bash <script> <args>' en vez de 'source': los scripts tbd_branch_finish.sh y tbd_branch_create.sh tienen un entry point (if BASH_SOURCE[0] == $0) que llama a la función con los argumentos al ejecutarse directamente. Así funciona aunque la shell de la sesión sea zsh.
No se renombra el archivo del comando; solo se corrige la invocación interna. No incluye .claude/settings.json (cambio ajeno a esta tarea).
install.sh ahora gestiona los hooks goal_*.sh y CLAUDE.md ademas de
skills/agents/commands/settings. Antes quedaban fuera del script, por lo
que al mover repo_Claude de ~/DataProyects a fn_registry/external los
symlinks de hooks/ quedaban colgando y los hooks goal_* fallaban con
"not found".
Cambios:
- Enlace simbolico por archivo de todos los hooks .sh del repo.
- Enlace simbolico de CLAUDE.md (preferencias globales).
- statusline.sh pasa de copia a symlink (elimina backups basura por corrida).
- Logica de relink idempotente: symlink roto o mal-apuntado se borra y
recrea; solo los archivos reales se respaldan en backup.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Simplifica el modelo segun feedback:
- El OBJETIVO (target) es el identificativo de la terminal: se genera una vez y
NUNCA cambia automaticamente. goal_refine deja de tocarlo.
- goal_refine ahora ajusta SOLO el DoD para mantenerlo coherente con los prompts.
- Se elimina la deteccion de cambio de tarea y el icono de alerta ⚠️ (campo alert
ya no se escribe ni se lee; queda inocuo en JSONs antiguos).
- Se elimina el comando 'recalcular' y goal_refine.sh modo force.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Los comandos del usuario objetivo:/dod:/recalcular/pausa ahora bloquean el prompt
en UserPromptSubmit con {"decision":"block","reason":...}: el hook ejecuta su
efecto, el usuario ve una confirmacion breve, y el prompt NO llega al modelo — el
agente no genera respuesta y sigue idle con su tarea. Antes estos comandos se
procesaban como un turno normal e interrumpian al agente. Los prompts normales se
siguen pasando al modelo (texto plano como contexto) y acumulan/refían el objetivo.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
El objetivo y el DoD dejan de quedarse congelados en el primer prompt:
- goal_tracker acumula cada prompt sustantivo del usuario en .prompts y lanza
goal_refine.sh (background, haiku) para mantener objetivo y DoD coherentes con
TODO lo pedido (action refine), o dejarlos igual (action same).
- goal_refine marca alert=true (action switch) cuando el ultimo prompt introduce
una tarea completamente distinta del objetivo: senal de que la terminal mezcla
tareas (principio: una terminal = una tarea). No cambia el objetivo, solo avisa.
- statusline muestra ⚠️ en rojo antes del objetivo cuando alert=true.
- Comando 'recalcular' (recalcula/replantea): fuerza regenerar objetivo+DoD desde
los prompts y limpia la alerta (para cuando el cambio de tarea es intencional).
- goal_autogen inicializa .prompts con el primer prompt.
Coste: 1 haiku/prompt sustantivo en background (ademas del haiku de reposo del
Stop), solicitado para mantener la coherencia. No bloquea el turno.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
El DoD se mostraba en la misma linea que el objetivo y la expandia demasiado a lo
ancho. Ahora va en una linea separada debajo, atenuado y con sangria. Si no hay
DoD, no se imprime la linea extra.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
El Stop worker recibe ahora el DoD de la tarea y lo usa como criterio para
distinguir hecho de pendiente_revision/en_pausa: marca 'hecho' unicamente si el
resultado descrito cumple el DoD punto por punto y esta verificado. Si el DoD no
se cumple del todo, cae en pendiente_revision (resultado para revisar) o en_pausa
(avance parcial). Si no hay DoD definido, mantiene el criterio anterior sobre el
objetivo. Hace el estado 'hecho' mucho mas preciso.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Cuando una terminal no tiene objetivo y el usuario envia su primer prompt
sustantivo (>=12 chars), goal_tracker lanza goal_autogen.sh en background (no
bloquea el turno). El script infiere con ask_llm (haiku) un objetivo corto y un
DoD corto a partir del prompt y crea el goal JSON con phase=planificando. Los
prompts triviales (saludos, ok) no generan nada (el modelo responde {}). El
statusline lo muestra en el siguiente refresco. El usuario puede sobrescribir a
mano con objetivo:/dod: o borrar con objetivo: clear.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Los dos estados activos que no tenian disparador ahora se asignan de forma
determinista en el PostToolUse:
- planificando: al usar TodoWrite / ExitPlanMode / EnterPlanMode.
- puliendo: al editar (Edit/Write/MultiEdit/NotebookEdit) cuando la fase actual
ya era testeando o puliendo, es decir retoques finales sobre algo ya probado.
Una edicion normal (sin testeo previo) sigue siendo haciendo; volver a testear
saca de puliendo.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Nuevo estado de reposo 'preguntando' (❓ esperando respuesta), distinto de
pendiente_revision: lo usa el Stop worker cuando la respuesta termina con
preguntas concretas al usuario en vez de dejar un resultado para revisar.
- DoD corto opcional junto al objetivo: se fija con "dod: <texto>" ("dod: clear"
lo borra) y se muestra atenuado con 🏁 tras el objetivo. Re-fijar el objetivo
preserva el DoD existente.
- Comando "pausa" (prompt) marca la fase en en_pausa. Es la alternativa manual a
Ctrl-C: Claude Code no dispara ningun hook al interrumpir un turno (el Stop
hook solo corre en finalizacion normal; feature pedido, sin implementar), asi
que no es posible detectar la interrupcion automaticamente.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
El statusline solo se re-ejecutaba al cambiar los mensajes, asi que el estado de
reposo que el Stop hook escribe ~2s despues (en background) no se reflejaba hasta
que el usuario interactuaba. Se anade refreshInterval=2 para que el harness re-
ejecute el statusline cada 2s tambien estando idle, mostrando el valor final sin
necesidad de escribir y sin bloquear el turno.
Para que el refresco continuo no sea caro en repos grandes, el bloque git se
cachea por directorio con TTL de 6s (el estado git no cambia estando parado); los
ticks idle reusan el cache (~0.1s vs ~0.33s recomputando). El goal file (la fase)
se lee siempre fresco.
Se revierte el intento previo de Stop sincrono (bloqueaba ~2s el control).
Nota: Claude Code no soporta acotar el refresco a una ventana (p.ej. 10s y
parar); refreshInterval es continuo.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
El Stop hook ahora pone en_pausa de forma sincrona si la fase estaba en un
estado activo (investigando/haciendo/testeando/puliendo), antes de lanzar el
worker haiku en background. Evita que el statusline se quede mostrando el ultimo
estado activo (p.ej. 'investigando' por un 'git log' final) durante los ~2s que
tarda la clasificacion de reposo. El provisional no toca el historial; el worker
escribe el reposo final (hecho/pendiente_revision/bloqueado/en_pausa) + history.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Separa el ciclo de trabajo en dos grupos con la fuente adecuada para cada uno:
- ACTIVO (mientras se trabaja): lo marca el hook PostToolUse de forma
determinista, sin LLM, segun la herramienta usada — Read/Grep/Glob ->
investigando; Edit/Write -> haciendo; Bash con tests -> testeando; Bash de
lectura (ls/cat/git status...) -> investigando; mcp fn_search/show/... ->
investigando. Refleja en tiempo real lo que hace el asistente.
- REPOSO (al parar y ceder el control): lo resuelve el Stop hook con ask_llm
(haiku) -> hecho / pendiente_revision / bloqueado / en_pausa. Al parar nunca
queda en un estado activo.
Cambios:
- goal_phase_active.sh: nuevo hook PostToolUse (mapa herramienta -> fase activa).
- goal_phase_worker.sh: ahora solo produce estados de reposo; se elimina el modo
prompt. Mantiene el gate (resuelve reposo solo si hubo trabajo o se venia de
activo) y el historial.
- goal_tracker.sh: deja de lanzar clasificacion LLM en el prompt (redundante);
vuelve a fijar objetivo desde el prompt + informar estado.
- statusline.sh: nuevo estado en_pausa (en pausa); set de fases reordenado.
- settings.json: registra el hook PostToolUse.
Resultado: 1 sola llamada haiku por turno (Stop); el estado activo es gratis y
refleja las acciones reales en vez de la intencion del prompt.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- statusline.sh: muestra los ultimos 7 estados previos como emojis atenuados
(DIM) separados por │, entre el objetivo y la fase actual. El historial se
guarda en el goal JSON (campo .history), colapsando estados consecutivos
repetidos, hasta 12 entradas.
- goal_phase_worker.sh: dos modos. 'stop' (tras la respuesta del asistente, con
filtro de trabajo real) y 'prompt' (tras el prompt del usuario, clasifica la
intencion para feedback inmediato). Nuevo veredicto 'sin_cambio' para
preguntas/charla que no implican cambio de actividad; ante la duda, no toca.
Ambos modos mantienen el historial.
- goal_tracker.sh: en cada prompt con objetivo activo lanza el worker en modo
prompt (background) ademas del Stop hook.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Cada terminal muestra su objetivo (color estable por session_id) y la fase de
trabajo actual, para distinguir sesiones y saber cuando algo esta hecho.
- statusline.sh: linea 0 con objetivo (izq, color por sesion) + fase (der) con
el separador estandar; 9 fases (investigando, planificando, haciendo,
testeando, puliendo, iterando, pendiente_revision, bloqueado, hecho) con icono,
color y etiqueta. Purga de goal files de sesiones muertas (>7 dias).
- hooks/goal_tracker.sh (UserPromptSubmit): fija el objetivo leyendo el prompt
del usuario ("objetivo: ...", "objetivo: clear" lo borra); si no, informa el
estado actual al modelo.
- hooks/goal_phase_eval.sh (Stop): al terminar el turno lanza el worker en
background, sin bloquear.
- hooks/goal_phase_worker.sh: clasifica la fase con ask_llm (haiku, API directa,
nunca claude -p) usando la peticion del usuario + la ultima respuesta del
asistente. Solo reevalua si el turno tuvo trabajo real (tool_use); en charla
pura no toca la fase ni gasta llamada.
- settings.json: registra los hooks UserPromptSubmit y Stop.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Slash command for rapid yes/no/short iteration. Allows internal
reasoning + read-only tools but restricts user-facing output to
si/no/short phrase. One-shot: only affects the invoking turn.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Show 5h reset as HH:MM and 7d reset as "Day HH:MM" from rate_limits.*.resets_at
- Color 5h/7d pill+arrow by burndown vs expected rate (5h: 20%/h, 7d: 14%/day)
- Green if available% >= expected, yellow if >= expected/2, red otherwise
- Add separator between 5h and 7d blocks
- parallel-fix-issues: detecta build tag del proyecto (auto o via BUILD_TAG env/arg),
usa $(git rev-parse --show-toplevel) para rutas en vez de /home/ubuntu/agents_and_robots
- verify-worktree.sh: acepta BUILD_TAG como env o segundo argumento, auto-detecta con
//go:build, ejecuta sin -tags si no hay tag configurado
- create-tui: DEVFACTORY_PATH, DEVFACTORY_MODULE y GO_NAMESPACE configurables via env
- init-jupyter: resuelve SKILL_DIR dinamicamente siguiendo el symlink de ~/.claude
- pass-usage: elimina GPG-ID hardcodeado, instruye leer de ~/.password-store/.gpg-id
- settings.json: refresh de formato + effortLevel
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Se agrega "commands" al array FOLDERS de install.sh para que al instalar
se cree el symlink ~/.claude/commands -> repo/.claude/commands. Esto
permite que los commands del repo estén disponibles en cualquier proyecto
sin copiarlos manualmente.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Nuevo skill que permite implementar múltiples issues en paralelo usando
git worktrees aislados y agentes concurrentes. Analiza dependencias,
verifica builds/tests e integra a master en orden. Incluye scripts
auxiliares en scripts/.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Se añaden 4 commands en .claude/commands/ que reemplazan a los skills
obsoletos con formato SKILL.md. Los commands usan el formato nativo de
Claude Code (.md en commands/) y cubren: create-issue, fix-issue,
git-branch y git-push. Esto simplifica la invocación y mantenimiento.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Se eliminan los archivos SKILL.md y scripts asociados de 20 skills que
ya no se usan. Estos skills fueron reemplazados por commands (.claude/commands/)
o por skills nuevos con estructura actualizada. Limpieza necesaria para
evitar confusión entre skills activos y obsoletos.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Se eliminan los archivos SKILL.md de fn-constructor, fn-executor,
fn-recopilador y frontend-lib que ya no se utilizan.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Se añaden los agents del ciclo reactivo: fn-constructor (Fase 1) para
construcción de funciones/tests/tipos, y fn-recopilador (Fase 3) para
auditoría y validación de operations.db.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Se eliminan los agents backend-lib, build-wails, db-reader, docker y navegator
que ya no se utilizan en el flujo de trabajo actual.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Añade sección completa de estructura obligatoria para apps: app.md con
frontmatter estandarizado, .gitignore, estructura por lenguaje (Go/Python/Bash),
checklist de validación de 7 puntos, y templates actualizados que incluyen
app.md + .gitignore + fn index como pasos obligatorios al crear apps.
Skill que gestiona contraseñas con pass (password-store) y GPG.
Soporta insertar, listar, buscar, generar y sincronizar secretos
con el repositorio de Gitea. Verifica dependencias e instala
automáticamente si es necesario.
Added explicit rules for working_dir (not dir), type: graph with depends,
and snake_case step IDs. These caused validation failures in practice.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Nuevas skills para crear TUIs, inicializar frontends React y módulos Go.
Incluye binario parallel-executor y utilidades de soporte.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Nueva issue para unificar skills de issues con flags.
Actualizar README de issues con sección de mejoras a skills.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Añadir gopls-lsp@claude-plugins-official a enabledPlugins
para soporte de Go LSP en Claude Code.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Agente para gestionar Dagu: instalación, organización de ~/dagu,
creación de DAGs YAML con referencia completa del formato.
Skill dagu-auto genera automatizaciones completas (DAG + scripts)
y es invocable tanto por el usuario como por Claude automáticamente.
Preferimos Dagu sobre cron para toda programación de tareas.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Actualiza JUPYTER_RULES en setup-jupyter.sh para incluir:
- Regla 1: Código inmutable - prohibido modificar celdas existentes
- Regla 2: Programación funcional obligatoria con ejemplos
- Renumeración de reglas existentes (3-7)
Estas reglas se aplicarán a todos los repos inicializados con /init-jupyter