Vai al contenuto

Due agenti insieme

Sì: due agenti puntati sulla stessa board possono pestarsi i piedi, e i punti dove succede sono pochi e prevedibili. Questa pagina li elenca, con la regola che tiene al sicuro ciascuno. In breve: la board decide chi lavora su cosa, un checkout per agente decide dove scrivono, e tutto quello che è condiviso dalla macchina (cache, build, migrazioni, rilasci) lo fa un agente alla volta.

Cosa garantisce la board

Ogni task appartiene a un agente: quello scelto sul task (tendina su una riga sua nell'intestazione del modale), altrimenti quello di default della lista (selettore nella barra), altrimenti l'agente predefinito. griglia:check --agent=<chiave> elenca solo i task di quell'agente, e le azioni si rifiutano di toccare quelli degli altri:

La riga del task continua a mostrare questo agente effettivo mentre il lavoro è in corso, anche quando il task eredita il default della lista invece di avere un'assegnazione propria.

$ php artisan griglia:check --agent=claude --take=412
«Release the package» (id:412) belongs to agent «Codex CLI», you are «Claude Code»: refusing to take it
— it is being worked on right now. Reassign it on the board (task or list agent), or re-run with --force.

Quella guardia copre --take, --done e --ask, così un id vecchio dentro un prompt (o un worker riavviato con la chiave sbagliata) non può rubare, chiudere o mettere in pausa in silenzio il lavoro di un altro agente. --force è la strada dichiarata — usala quando stai davvero subentrando.

Da qui discendono altre due cose:

  • 🔒 busy elsewhere — con più agenti configurati, griglia:check stampa quello che gli altri hanno in lavorazione in questo momento, così puoi stare alla larga da quei file e da quei branch.
  • La baseline 🆕 è per agente. Il marcatore «nuovo dal tuo ultimo check» è memorizzato per chiave d'agente: un altro agente che lancia check non consuma più i tuoi 🆕.

Assegna il lavoro in modo esplicito (agente del task o della lista) ogni volta che due agenti sono attivi: un task non assegnato finisce all'agente predefinito, quindi il secondo agente non lo vede nemmeno.

Cosa la board non può garantire

Tutto quello che sta fuori dal database è condiviso dall'host, e la board non ha voce in capitolo.

Risorsa condivisa Come si scontrano Regola
Working tree L'agente B fa il checkout di un altro branch mentre l'agente A sta scrivendo — e in questo progetto il sito servito è il working tree Un checkout per agente: git worktree add ../wt-codex -b task/…, e punta lì il worker (--repo, GRIGLIA_WORKER_REPO)
Branch Appoggiare il branch di un task sulla punta di un altro agente si trascina in PR del lavoro non ancora rivisto Parti da un main aggiornato (git fetch && git merge origin/main), una PR per task, mai sopra un altro task
Asset compilati (public/build) Due build Vite che scrivono lo stesso manifest Compila uno alla volta; ogni worktree compila la propria copia
Cache delle viste Blade Una vista compilata da un altro branch viene riusata quando il sorgente è più vecchio di lei, e la suite fallisce su codice che non esiste più La suite di test del package svuota le viste compilate al primo test dell'esecuzione
Database e migrazioni Uno schema solo per tutti: una migrazione arriva sotto i piedi dell'altro agente Esegui le migrazioni una alla volta, e dillo sulla board mentre lo fai
Rilascio del package Un rsync --delete verso il repository del package cancellerebbe quello che l'altro agente ha rilasciato nel frattempo release-griglia.sh si ferma quando il remoto ha versioni o file che il sorgente non ha; quando si ferma, aspetta che la pull request dell'altro agente venga integrata, porta main dentro il tuo branch e rilascia di nuovo
Comandi che valgono per tutto il container config:cache, route:cache, queue:restart, reverb:restart colpiscono ogni sessione Trattali come globali: lanciali quando nessun altro è a metà di un test

Preparare il secondo agente

# 1. dichiara tutti e due gli agenti
GRIGLIA_AGENTS="claude:Claude Code,codex:Codex CLI"

# 2. dai a ciascuno il proprio checkout
git worktree add ../board-codex -b task/000-scratch origin/main

# 3. un worker per agente, ognuno sul proprio percorso di repository
GRIGLIA_WORKER_REPO=/srv/board-codex \
  python3 scripts/griglia-agent-worker.py --agent=codex --driver=codex

Ogni worker prende già un lock suo (/tmp/griglia-agent-worker-<chiave>.lock), così la stessa chiave d'agente non gira mai due volte; chiavi diverse invece devono poter girare insieme.

Vedi anche

Griglia v0.92.0