CtrlK
BlogDocsLog inGet started
Tessl Logo

spec-driven-development/agent-registry

Coordina multipli agenti AI CLI (Kimi, Claude, Gemini, OpenAI, ecc.) che lavorano contemporaneamente sullo stesso progetto e mantiene una memoria collettiva (wiki) di tutte le sessioni passate. Usa questa skill SEMPRE quando lavori in parallelo con altre AI CLI, quando devi salvare lo stato di una sessione condivisa, quando vuoi evitare sovrascritture su file toccati da altri agenti, quando devi chiedere "questo lavoro è già stato fatto? questo bug si è già visto?", o quando l'utente parla di "multi-tap", "registry agenti", "coordination", "lock file", "handoff condiviso", "wiki delle sessioni", "chi sta lavorando su cosa" o "evitare che le AI si pestino i piedi".

72

Quality

90%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Passed

No findings from the security scan

Overview
Quality
Evals
Security
Files

HANDOFF-003.md.handoff/

HANDOFF-003 — agent-registry

Data: 2026-07-22 20:15 | Sessione: #3 | Continua da: HANDOFF-002.md Progetto: agent-registry | Operatore: Giuseppe + Claude Opus 4.8


🎯 Goal

Dockerizzare la skill come sandbox a 5 servizi (OrbStack) con notifiche WhatsApp automatiche su ogni evento degli agenti, renderlo il comportamento standard per ogni AI, e pubblicare pulito in pubblico. Obiettivo di HANDOFF-002 → in questa sessione raggiunto e rilasciato come v0.4.0.

✅ Current Progress

Completato ✓

  • Sorgente-di-verità chiarita: il repo pubblico github.com/GiuseppeDiCanosa/agent-registry era GIÀ a v0.3.1 (completo). Lavoro fatto in clone pulito ~/Claude-Projects/agent-registry-oss. Il vecchio ~/Claude-Projects/agent-registry è obsoleto (stale, v0.2.1).
  • Sandbox Docker 5 servizi (docker-compose.yml): db (persistenza+sync), dashboard (:8765 sempre accesa), code (runtime agenti), wa-gateway (open-wa), watchdog (notifiche). Immagine unica python:3.13-slim. Domini OrbStack *.agent-registry.orb.local.
  • Notifier (notifier/watchdog.py + wa_client.py): eventi executed/stopped/idle(>1h), ognuno una sola volta, messaggi random con placeholder. Cold-start anti-flood.
  • 150 sfottò in notifier/messages.local.json (gitignored, generati da subagente Sonnet 5); pool pubblico clean messages.default.json. Montati nel watchdog via docker-compose.override.yml.
  • Comportamento standard: sezione dedicata in SKILL.md (ogni agente coperto perché il watchdog osserva il registry condiviso).
  • AGENT_REGISTRY_DATA_SOURCE: sorgente /data configurabile. Default = volume isolato; abilitato in locale al bind-mount della home reale ~/.agent-registryogni agente sul Mac notifica. Verificato dal vivo (eventi stopped reali arrivati su WhatsApp).
  • WhatsApp collegato (QR): sessione ready, numero in .env. Pipeline end-to-end OK.
  • Test 211 verdi, check-spec-links + check-target-ownership PASSED. Spec SDD: container-deployment + whatsapp-notifications.
  • Release v0.4.0 pushata: main 55757bc + tag v0.4.0, plugin.json bumpato. Scansione segreti pulita (0 in history/tracked).

In corso / Sospeso

  • db fermato in bind-mode: in bind-mount il git-sync della home lo fa l'host; il container db è stato stoppato per non fare doppio sync in conflitto. Da decidere se reintrodurlo (con auth git dedicata) o lasciarlo all'host.
  • Fragilità UUID: WA_SESSION_ID è l'UUID della sessione open-wa; cambia se ri-scansioni il QR. Miglioria proposta: risoluzione automatica nome→UUID via GET /api/sessions.
  • Burst iniziale di stopped: al passaggio sulla home reale sono partite notifiche per vecchie sessioni zombie che si assestavano. Da verificare che non sia rumoroso a regime.
  • .handoff in pubblico: HANDOFF-001/002/003 sono tracciati nel repo pubblico. Valutare se tenerli o escluderli.

💡 What Worked

  • Leggere l'env del processo per la diagnosi: lsof -iTCP:8765 + ps eww | grep AGENT_REGISTRY ha svelato la dashboard puntata al registry sbagliato (bug iniziale della sessione).
  • OpenAPI del gateway come fonte di verità: curl :2785/api/docs-json ha rivelato che send-text vuole il sessionId = UUID (non il nome) e body chatId@c.us + header X-API-Key. Confermato con GET per nome (400 "uuid expected") vs UUID (200).
  • Cold-start anti-flood: seminare lo stato al primo giro senza notificare eventi storici → sicuro puntare il watchdog su un registry già popolato.
  • AGENT_REGISTRY_DATA_SOURCE parametrizzato: bind-mount come config (env), default pubblico isolato. docker-compose.override.yml (gitignored) per i segreti/pool locali → repo pubblico pulito.
  • Monitor persistente sui log del watchdog: notifica in chat ogni invio in tempo reale.
  • Scansione segreti prima del push (conteggio su history+tracked): confermato 0 prima di pubblicare.

❌ What Didn't Work

  • WA_SESSION_ID = nome sessione o default: send-text → HTTP 400. Serve l'UUID.
  • urllib nasconde il corpo dell'errore: un 400 era illeggibile; risolto facendo rilanciare a wa_client.send_text il body dell'HTTPError.
  • Falso positivo nello scan segreti: ... | head -5 && echo "trovato" scatta sempre perché head esce 0. Usare un conteggio (grep -c), non head.
  • Invio WhatsApp diretto dal mio bash: bloccato dal classificatore auto-mode (azione verso l'esterno). Corretto lasciando inviare il watchdog (dall'interno del container).
  • Mescolare read-only e azioni WhatsApp nello stesso comando: il classificatore blocca tutto; tenere i comandi read-only separati.

🚀 Next Steps

  1. Verificare il rumore a regime: osservare i log/monitor del watchdog per confermare che, dopo l'assestamento dei vecchi zombie, non parta una raffica di notifiche indesiderate. Se serve, restringere gli eventi (es. solo idle e stopped di sessioni con PID vivo).
  2. Auto-risoluzione nome→UUID in wa_client/watchdog: se WA_SESSION_ID non è un UUID, risolverlo da GET /api/sessions all'avvio → sopravvive ai re-link del QR.
  3. Decidere il destino del db in bind-mode (reintrodurre con auth git dedicata vs host-only).
  4. Live-test agente host: registrare/chiudere una sessione con registry_manager sull'host (fuori dal container) e confermare la notifica — chiude la verifica "ogni AI".
  5. Pulizia: ritirare ~/Claude-Projects/agent-registry (stale) per non confondere le sorgenti.

📎 Context Importante

  • Repo canonico/pubblicato: ~/Claude-Projects/agent-registry-oss (branch feat/docker-sandbox-whatsapp, mergiato in main, tag v0.4.0).
  • Segreti/config locale: solo in .env (gitignored) — WA_API_KEY, WA_RECIPIENT, WA_SESSION_ID (UUID), AGENT_REGISTRY_DATA_SOURCE, KIMI_API_KEY. Mai committare. → vedi .env.
  • Stack attivo: dashboard, code, watchdog, wa-gateway UP sulla home reale ~/.agent-registry; db fermato. Monitor watchdog persistente attivo in sessione.
  • Gotcha open-wa: sessionId = UUID; auth X-API-Key; body {chatId:"<num>@c.us", text}; immagine ghcr.io/rmyndharis/openwa:latest, porta 2785.
  • Riferimenti: README §"Sandbox Docker", SKILL.md §"Ambiente standard", capability container-deployment + whatsapp-notifications, openspec/changes/2026-07-22-dockerize-sandbox/.

README.md

requirements-dev.txt

SKILL.md

SPEC_SETUP.md

tile.json