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
90%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Dare mutua esclusione reale su file e aree fra agenti AI CLI che operano come processi one-shot: comandi che acquisiscono il lock e terminano subito. Da questo vincolo discende l'intera capability — la proprietà di un lock deve vivere quanto il lavoro, non quanto il processo che l'ha presa, quindi lo stato risiede nel contenuto di un file e non in un lock advisory legato al ciclo di vita del processo. La capability copre acquisizione, scadenza per timeout, rinnovo e rilascio riservati all'owner, e l'identità del lock indipendente dalla directory di lavoro.
I lock restano advisory: proteggono gli agenti che li consultano, non i write() di
chi li ignora.
Il lock manager SHALL garantire che, dato un path, al più un session_id alla volta ne risulti owner, e questa garanzia MUST reggere quando gli agenti operano come processi distinti e di breve durata che terminano subito dopo aver acquisito il lock. L'esito dell'acquisizione MUST essere determinato da uno stato che sopravvive alla terminazione del processo acquirente: il manager MUST NOT dipendere da lock advisory legati al ciclo di vita del processo (fcntl.flock/lockf) né da stato in memoria del processo per decidere se un path è occupato.
Verified by: [@test] tests/test_lock_cross_process.py
locked: False e il session_id di A come owner corrente, e il lock su disco continua ad attribuire la proprietà ad Alocked: True e gli altri N-1 ricevono locked: False, e l'owner registrato su disco è il vincitoreIl lock manager SHALL consentire allo stesso session_id di riacquisire un lock che già detiene, restituendo esito positivo senza errore e rinnovando la scadenza, affinché un agente che riavvia il proprio processo non si autoescluda dal lavoro già iniziato.
Verified by: [@test] tests/test_lock_cross_process.py
session_idIl lock manager SHALL considerare stale un lock il cui ultimo rinnovo è più vecchio del timeout configurato, e MUST permetterne l'acquisizione a un altro agente, in modo che il crash di un agente non blocchi un file per sempre. Un lock non ancora scaduto MUST NOT essere considerato acquisibile. La rimozione di un lock stale MUST essere atomica rispetto ad acquisizioni concorrenti: se più agenti osservano lo stesso lock stale nello stesso istante, al più uno MUST riuscire ad acquisirlo.
Verified by: [@test] tests/test_lock_cross_process.py
stale_owner precedentestale_owner sostituitolocked: TrueIl lock manager SHALL permettere il rinnovo della scadenza (heartbeat) solo al session_id che detiene il lock, e MUST rifiutare il rinnovo richiesto da chiunque altro riportando l'owner corrente. Un rinnovo riuscito MUST posticipare la scadenza del lock; un rinnovo su un lock inesistente MUST fallire senza crearlo.
Verified by: [@test] tests/test_lock_cross_process.py
not owner e riporta l'owner correnteIl lock manager SHALL permettere il rilascio di un lock solo al session_id che lo detiene, e MUST rifiutare il rilascio richiesto da un altro agente lasciando il lock intatto. Dopo un rilascio riuscito il path MUST risultare libero e acquisibile da chiunque.
Verified by: [@test] tests/test_lock_cross_process.py
not owner, riporta l'owner corrente e il lock resta validoIl lock manager SHALL identificare il lock di un path a partire dal suo path assoluto risolto, in modo che riferimenti diversi allo stesso file (path relativo da directory di lavoro diverse, path assoluto) contendano lo stesso lock, e che file omonimi in progetti diversi non si blocchino a vicenda.
Verified by: [@test] tests/test_lock_cross_process.py
src/auth.py in due directory di progetto distinteIl lock manager SHALL leggere la directory dei lock dalla variabile d'ambiente AGENT_REGISTRY_LOCK_DIR quando definita, ricadendo altrimenti sul default, e MUST crearla se assente. La configurazione MUST essere risolta a ogni operazione e non memorizzata all'import, così che i test e gli agenti possano isolare i lock senza modificare lo stato globale del modulo.
Verified by: [@test] tests/test_lock_cross_process.py
AGENT_REGISTRY_LOCK_DIR punta a una directory e un agente acquisisce un lockIl lock manager SHALL esporre i comandi acquire, release, check e heartbeat via CLI, e MUST terminare con exit code 0 quando l'operazione riesce e diverso da 0 quando fallisce o viene bloccata, affinché un agente possa reagire all'esito senza dover interpretare il testo stampato.
Verified by: [@test] tests/test_lock_cli.py
lock_manager.py acquire <path> <sid> acquisisce un path liberolock_manager.py acquire <path> <sid> tenta un path già locked da un altro agente.claude
commands
.tessl-plugin
docker
openspec
changes
2026-07-22-dockerize-sandbox
agent-registry-sync-setup-wizard
archive
2026-07-16-fix-cross-process-coordination
schemas
spec-as-source
templates
scripts
templates
tests
docker
notifier