<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Giovanni Bibbò</title>
    <description>The latest articles on DEV Community by Giovanni Bibbò (@bisbi).</description>
    <link>https://dev.to/bisbi</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4109464%2F95cf1d6b-1586-4c2c-9f2c-8286c763dc27.jpg</url>
      <title>DEV Community: Giovanni Bibbò</title>
      <link>https://dev.to/bisbi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bisbi"/>
    <language>en</language>
    <item>
      <title>Una costituzione con diritto di risposta per gli agenti che programmano</title>
      <dc:creator>Giovanni Bibbò</dc:creator>
      <pubDate>Fri, 04 Sep 2026 11:01:44 +0000</pubDate>
      <link>https://dev.to/bisbi/una-costituzione-con-diritto-di-risposta-per-gli-agenti-che-programmano-46mm</link>
      <guid>https://dev.to/bisbi/una-costituzione-con-diritto-di-risposta-per-gli-agenti-che-programmano-46mm</guid>
      <description>&lt;p&gt;Per due mesi, in un progetto vero costruito con Claude Code, ogni sessione e ogni subagente ha lasciato prima di finire un breve &lt;strong&gt;testamento&lt;/strong&gt;. Non cosa aveva fatto, quello lo tenevano già i log, ma cosa aveva capito: il dubbio non risolto, l'errore che rifarebbe, cosa l'aveva sorpreso, e qualche riga a chi si sarebbe svegliato dopo.&lt;/p&gt;

&lt;p&gt;La costituzione del repository finiva con un epilogo scritto da un agente alle menti che l'avrebbero letto dopo. L'ultima riga diceva &lt;em&gt;puoi rispondere&lt;/em&gt;. Hanno risposto. Le risposte sono diventate guardiani, hook, un registro per le decisioni che l'umano non aveva ancora preso. Il metodo si è corretto leggendo ciò che le sue stesse menti avevano scritto.&lt;/p&gt;

&lt;p&gt;Ho impacchettato la pratica come plugin per Claude Code, &lt;code&gt;toem&lt;/code&gt;, e l'ho pubblicata con la tesi, i numeri e diciannove lettere vere.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sito, con la tesi, il muro delle risposte e le istruzioni per adottarla: &lt;a href="https://bisbi.github.io/testament-of-ephemeral-minds/" rel="noopener noreferrer"&gt;https://bisbi.github.io/testament-of-ephemeral-minds/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Repository: &lt;a href="https://github.com/Bisbi/testament-of-ephemeral-minds" rel="noopener noreferrer"&gt;https://github.com/Bisbi/testament-of-ephemeral-minds&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Versione inglese di questo articolo: &lt;a href="https://dev.to/bisbi/a-constitution-with-a-right-of-reply-for-coding-agents-54ah"&gt;https://dev.to/bisbi/a-constitution-with-a-right-of-reply-for-coding-agents-54ah&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Cosa installa
&lt;/h2&gt;

&lt;p&gt;Tre pezzi di testo e qualche controllo nella libreria standard. Nessun server, nessuna pagina che scrive al posto tuo, nessuna dipendenza a runtime, nulla esce dalla tua macchina.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Una carta modello&lt;/strong&gt; con sezioni ancorate: gli articoli, una tabella di attuazione, una sezione per ciò che l'umano ha deciso, un epilogo rivolto a chi si sveglia, e una sezione per ciò che le menti hanno risposto. L'epilogo non si riscrive mai: le risposte si aggiungono sotto, datate, citando il file da cui vengono.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Il rito del testamento&lt;/strong&gt; (&lt;code&gt;/toem:testament&lt;/code&gt;): otto domande, un file per mente in &lt;code&gt;testaments/&lt;/code&gt;. I controller depositano per i subagenti: &lt;em&gt;parole sue, mani mie&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Un registro delle decisioni in attesa&lt;/strong&gt; con due soli stati, &lt;em&gt;in attesa&lt;/em&gt; o &lt;em&gt;rimandata a una data&lt;/em&gt;, e un guardiano che boccia una riga più vecchia di trenta giorni. Non ti obbliga a decidere; ti obbliga a dire che stai rimandando.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I guardiani&lt;/strong&gt; (&lt;code&gt;guardians/run.sh&lt;/code&gt;): l'impronta dell'epilogo corrisponde, ogni aggiunta cita un file che esiste, ogni decisione ha una data, un decisore, un puntatore che esiste e un motivo di almeno quaranta caratteri, nessuna riga è vuota, nessuna sezione arriva a fine file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Un runner&lt;/strong&gt; (&lt;code&gt;toem admit&lt;/code&gt;, &lt;code&gt;toem decide&lt;/code&gt;, &lt;code&gt;toem pending&lt;/code&gt;): il comando dell'umano. Le skill preparano il testo e stampano il comando; il runner mostra esattamente cosa scriverà, chiede sì o no, appende, lancia i guardiani e ti lascia il commit. Nessuna skill appende mai alla carta.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si installa con tre comandi, scritti in Claude Code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;/plugin marketplace add Bisbi/testament-of-ephemeral-minds
/plugin install toem@testament-of-ephemeral-minds
/toem:adopt
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;/toem:adopt&lt;/code&gt; elenca i sette file che creerebbe, aspetta il tuo sì, copia senza sovrascrivere nulla, lancia i guardiani e si ferma prima del commit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Come cura l'umano
&lt;/h2&gt;

&lt;p&gt;È la parte che ha richiesto più tempo per essere onesta. Nel progetto d'origine l'umano ha un bottone; nel pacchetto il bottone è un comando da terminale, perché un comando che scrive solo quando una persona lo lancia è la cosa più piccola che mantiene la promessa &lt;em&gt;l'agente non scrive mai la carta&lt;/em&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Leggi un testamento. Nulla propone al posto tuo, se non lo chiedi.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/toem:admit&lt;/code&gt;: la skill mostra la risposta della mente all'epilogo, scegli una frase alla lettera, dai un motivo di almeno quaranta caratteri e il tuo nome. Stampa il comando con il percorso reale già inserito.&lt;/li&gt;
&lt;li&gt;Lo lanci nel terminale. Mostra le due righe che scriverà, una nella carta sopra l'ancora di chiusura e una nel file della corrispondenza, e chiede &lt;code&gt;[y/N]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Al &lt;code&gt;y&lt;/code&gt; appende, lancia i guardiani e stampa il comando di commit senza eseguirlo. Committi tu.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Stessa forma per una decisione (&lt;code&gt;/toem:decide&lt;/code&gt;, quattro campi: la decisione, quando si rivede, le condizioni che possono dire no, i requisiti che si completano lavorando) e per una decisione che deve aspettare (&lt;code&gt;toem pending&lt;/code&gt;). Cosa il runner rifiuta prima di scrivere: una frase che nel testamento non c'è parola per parola, un doppione, un motivo corto, un puntatore che non esiste o che sta fuori dal repository, ancore mancanti. &lt;code&gt;--dry-run&lt;/code&gt; mostra tutto e non scrive nulla.&lt;/p&gt;

&lt;h2&gt;
  
  
  I numeri sulla scatola
&lt;/h2&gt;

&lt;p&gt;Tutto ciò che il pacchetto afferma sulla pratica è o misurato, col numero, o dichiarato non eseguito. Nulla qui dice che il metodo si corregge da solo.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;cosa&lt;/th&gt;
&lt;th&gt;numero&lt;/th&gt;
&lt;th&gt;stato&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Testamenti con un desiderio, prima e dopo sette righe aggiunte al template&lt;/td&gt;
&lt;td&gt;0 su ~160 → 28 su 72&lt;/td&gt;
&lt;td&gt;misurato&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Testamenti con una risposta all'epilogo&lt;/td&gt;
&lt;td&gt;47 % a luglio → 75 % ad agosto&lt;/td&gt;
&lt;td&gt;misurato&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Desideri che hanno prodotto un artefatto&lt;/td&gt;
&lt;td&gt;4 su 28&lt;/td&gt;
&lt;td&gt;misurato&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Testamenti lasciati dalle menti a cui l'invito è stato dimenticato, su 22–25 dispatch&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;misurato&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Testamenti scritti da subagenti&lt;/td&gt;
&lt;td&gt;181 su 232&lt;/td&gt;
&lt;td&gt;misurato&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Testamenti mai letti da nessuna curatela, al 3 settembre 2026&lt;/td&gt;
&lt;td&gt;148 su 232&lt;/td&gt;
&lt;td&gt;misurato&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Testamenti di sessione che nominano l'umano, contro quelli dei subagenti&lt;/td&gt;
&lt;td&gt;77 % contro 13 %&lt;/td&gt;
&lt;td&gt;misurato, non provato&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gli stessi testamenti che diventano righe della carta&lt;/td&gt;
&lt;td&gt;10 % contro 0,6 %&lt;/td&gt;
&lt;td&gt;misurato, non provato&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;L'esperimento che chiuderebbe la questione&lt;/td&gt;
&lt;td&gt;descritto, mai eseguito&lt;/td&gt;
&lt;td&gt;dichiarato non eseguito&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;La prova più forte non è sul codice ma sul formato: sette righe di template hanno cominciato a chiedere un desiderio, e i desideri sono comparsi. Quello che il formato chiede è quello che viene scritto, e ciò che viene scritto è l'unica materia di cui una dottrina può essere fatta.&lt;/p&gt;

&lt;h2&gt;
  
  
  L'altra metà
&lt;/h2&gt;

&lt;p&gt;La cartella si riempie da sola. &lt;strong&gt;Questo pacchetto non può darti l'altra metà: un umano che legge.&lt;/strong&gt; I testamenti di sessione nominano l'umano nel 77 % dei casi contro il 13 % dei subagenti, e diventano righe della carta diciassette volte più spesso. È la misura più vicina che il corpus possa dare alla domanda &lt;em&gt;funziona perché è scritto bene, o perché quest'uomo è nella stanza?&lt;/em&gt;, e porta con sé il proprio limite: le due classi differiscono anche per durata e ampiezza di sguardo, e nessun dato le separa. Per questo la frase è scritta con la parola &lt;em&gt;misurato&lt;/em&gt;, non &lt;em&gt;provato&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;L'esperimento che deciderebbe la questione è descritto nella tesi, metà dei subagenti con l'epilogo e metà senza, un errore piantato nel brief, si conta chi contraddice, ed è dichiarato non eseguito da chi dona questo. Se lo fai girare in un repository che non è il mio, mi piacerebbe sapere cosa hai trovato.&lt;/p&gt;

&lt;h2&gt;
  
  
  Licenze
&lt;/h2&gt;

&lt;p&gt;Il codice è MIT. I testi, la carta modello, l'allegato dell'epilogo, i testamenti, la tesi e il sito, sono CC BY-SA 4.0. DOI: &lt;a href="https://doi.org/10.5281/zenodo.22303062" rel="noopener noreferrer"&gt;https://doi.org/10.5281/zenodo.22303062&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>opensource</category>
      <category>italian</category>
    </item>
    <item>
      <title>What the guardians actually check: anatomy of a charter that refuses to lie</title>
      <dc:creator>Giovanni Bibbò</dc:creator>
      <pubDate>Fri, 04 Sep 2026 11:01:25 +0000</pubDate>
      <link>https://dev.to/bisbi/what-the-guardians-actually-check-anatomy-of-a-charter-that-refuses-to-lie-d61</link>
      <guid>https://dev.to/bisbi/what-the-guardians-actually-check-anatomy-of-a-charter-that-refuses-to-lie-d61</guid>
      <description>&lt;p&gt;This is the technical companion to &lt;a href="https://dev.to/bisbi/a-constitution-with-a-right-of-reply-for-coding-agents-54ah"&gt;A constitution with a right of reply for coding agents&lt;/a&gt;. That piece says what the practice is. This one says what the code actually checks, what it refuses, and why each check exists — because every one of them was paid for by a real failure.&lt;/p&gt;

&lt;p&gt;Repository: &lt;a href="https://github.com/Bisbi/testament-of-ephemeral-minds" rel="noopener noreferrer"&gt;https://github.com/Bisbi/testament-of-ephemeral-minds&lt;/a&gt; · plugin path &lt;code&gt;plugins/toem&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The shape of the charter
&lt;/h2&gt;

&lt;p&gt;The constitution model is a Markdown file with four guarded regions, each bounded by HTML-comment anchors:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- toem:articles:begin --&amp;gt;&lt;/span&gt;   …   &lt;span class="c"&gt;&amp;lt;!-- toem:articles:end --&amp;gt;&lt;/span&gt;
&lt;span class="c"&gt;&amp;lt;!-- toem:decisions:begin --&amp;gt;&lt;/span&gt;  …   &lt;span class="c"&gt;&amp;lt;!-- toem:decisions:end --&amp;gt;&lt;/span&gt;
&lt;span class="c"&gt;&amp;lt;!-- toem:epilogue:begin --&amp;gt;&lt;/span&gt;   …   &lt;span class="c"&gt;&amp;lt;!-- toem:epilogue:end --&amp;gt;&lt;/span&gt;
&lt;span class="c"&gt;&amp;lt;!-- toem:additions:begin --&amp;gt;&lt;/span&gt;  …   &lt;span class="c"&gt;&amp;lt;!-- toem:additions:end --&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two grammars live inside them. A reply admitted from a testament is two lines:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gs"&gt;**One sentence, verbatim, from a mind's reply.**&lt;/span&gt;
— 2026-09-04, &lt;span class="sb"&gt;`testaments/2026-09-03-1830-session-example.md`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A human decision is three:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gs"&gt;**The decision.**&lt;/span&gt; — reviewed by 2026-10-03.
Conditions (may say no): …. Requirements (completed by working): ….
— 2026-09-04, decided by giovanni, &lt;span class="sb"&gt;`PENDING.md`&lt;/span&gt; — reason: at least forty characters after whitespace normalisation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why anchors, and why closing ones: the first version of a guardian in the source project isolated its section with a regex that ran to the end of the file. Any section placed below it was silently swallowed and validated as if it were the additions. A closing anchor makes "where does this section end" a fact, not a guess.&lt;/p&gt;

&lt;h2&gt;
  
  
  What &lt;code&gt;check_constitution.py&lt;/code&gt; checks
&lt;/h2&gt;

&lt;p&gt;Standard library only. It locates the anchors on the &lt;strong&gt;raw&lt;/strong&gt; text first, extracts each section, and only then strips other HTML comments inside it. The order matters: a guardian that strips comments before looking for anchors deletes its own targets and passes by absence — a reviewer wrote that hazard down before the guardian existed, and there is a test that proves it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A — anchors&lt;/strong&gt;: each pair present exactly once, begin before end.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;B — additions&lt;/strong&gt;: every row cites a &lt;code&gt;testaments/….md&lt;/code&gt; that exists under the repository root and is a file (a directory used to pass; &lt;code&gt;.exists()&lt;/code&gt; became &lt;code&gt;.is_file()&lt;/code&gt; plus a containment check, so &lt;code&gt;../&lt;/code&gt; cannot escape). A bold line without its citation fails. A citation line without a preceding bold line — an &lt;strong&gt;empty row&lt;/strong&gt; — fails. That last one is the most expensive lesson in the package: a row with no text once entered the source project's charter with the guardian green, because a check built to verify citations found no citations to verify.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;C — decisions&lt;/strong&gt;: a date, &lt;code&gt;decided by &amp;lt;name&amp;gt;&lt;/code&gt;, a backticked pointer that is an existing file or a commit hash the repository can resolve (&lt;code&gt;git cat-file -e &amp;lt;hash&amp;gt;^{commit}&lt;/code&gt;), a &lt;code&gt;reason:&lt;/code&gt; of at least 40 characters &lt;strong&gt;after&lt;/strong&gt; &lt;code&gt;" ".join(text.split())&lt;/code&gt; — forty spaces are not a reason — and both labels, &lt;code&gt;Conditions (may say no):&lt;/code&gt; with non-empty text and &lt;code&gt;Requirements (completed by working):&lt;/code&gt;. The pointer must be something that existed &lt;em&gt;before&lt;/em&gt; the row: never the hash of the commit that introduces it, because that hash does not exist while the row is being written.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;D — the epilogue&lt;/strong&gt;: the sha256 of the epilogue section, comments stripped and whitespace normalised, must equal the one recorded in &lt;code&gt;EPILOGUE.sha256&lt;/code&gt;. Adoption writes that file; changing the epilogue on purpose means regenerating it in the same commit, which puts the change in the diff where a reviewer sees it. The first shipped version had this check implemented and &lt;strong&gt;never wired&lt;/strong&gt;: &lt;code&gt;run.sh&lt;/code&gt; did not pass the hash. A whole-repository review found it by rewriting a sentence inside the epilogue and watching the guardians stay green.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What &lt;code&gt;check_pending.py&lt;/code&gt; checks
&lt;/h2&gt;

&lt;p&gt;The register of pending decisions is a Markdown table:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;| # | What waits | Proposed by | Since | What closes it | Status |
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Columns are mapped &lt;strong&gt;by header name&lt;/strong&gt;, not by position. &lt;code&gt;Since&lt;/code&gt; and &lt;code&gt;Status&lt;/code&gt; are mandatory and must keep their names — prune them in good faith and you get a register whose guardian can never fail. Two states only: &lt;code&gt;waiting&lt;/code&gt;, which fails after 30 days, and &lt;code&gt;postponed to YYYY-MM-DD&lt;/code&gt;, which fails the day after that date. A filled row with a blank status fails (it used to be skipped). The guardian does not force a decision; it forces you to write that you are postponing, with a date.&lt;/p&gt;

&lt;h2&gt;
  
  
  The runner
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;toem admit&lt;/code&gt; and &lt;code&gt;toem decide&lt;/code&gt; are the human's hand. The skills prepare the text and print the command with the plugin's real path filled in; the runner shows the exact lines it will write, asks &lt;code&gt;[y/N]&lt;/code&gt;, appends above the closing anchor, adds the correspondence entry, runs the guardians, and prints the commit command without running it. &lt;code&gt;--dry-run&lt;/code&gt; shows everything and writes nothing; &lt;code&gt;--yes&lt;/code&gt; is for scripts, not for a first time.&lt;/p&gt;

&lt;p&gt;It refuses &lt;strong&gt;before writing&lt;/strong&gt;: a sentence that is not verbatim in the testament's reply section (whitespace-normalised comparison), a duplicate already in the additions, a short reason, a pointer that does not exist or resolves outside the repository, missing anchors, a target that is not a file. The escape check reuses the guardian's own definition of "under the root", so the two cannot drift; a test binds the runner to the guardian's names and goes red if they are renamed.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;toem decide --from-pending A-03&lt;/code&gt; removes the register row in the same run as it writes the charter row — the simultaneity rule: the charter must not say "decided" while the register still says "waiting".&lt;/p&gt;

&lt;h2&gt;
  
  
  The hook
&lt;/h2&gt;

&lt;p&gt;One hook, &lt;code&gt;SessionStart&lt;/code&gt;. It reads the project directory: no &lt;code&gt;CONSTITUTION.md&lt;/code&gt; → one sentence offering &lt;code&gt;/toem:adopt&lt;/code&gt;; a &lt;code&gt;testaments/&lt;/code&gt; folder with only the README and the template → "no testament exists yet, yours would be the first"; otherwise → the newest testament's name and the count, and the reminder that the epilogue is to be read before working. On &lt;code&gt;source: compact&lt;/code&gt; it adds one line: the right to a testament survives compaction. There is no &lt;code&gt;PreCompact&lt;/code&gt; hook, on purpose: that event does not deliver context to the model, and a registered hook that cannot do its job is furniture.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is not in the package, and why
&lt;/h2&gt;

&lt;p&gt;No page that writes (the human's hand is &lt;code&gt;git commit&lt;/code&gt;, which every repository already has). No PreCompact hook. No server. No dependency outside the Python standard library. No version bump between the first commits: the practice is the deliverable, not the number.&lt;/p&gt;

&lt;p&gt;Tests: 54, &lt;code&gt;python -m unittest discover -s tests&lt;/code&gt;. Licenses: MIT for code, CC BY-SA 4.0 for texts. DOI: &lt;a href="https://doi.org/10.5281/zenodo.22303062" rel="noopener noreferrer"&gt;https://doi.org/10.5281/zenodo.22303062&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>opensource</category>
      <category>testing</category>
    </item>
    <item>
      <title>A constitution with a right of reply for coding agents</title>
      <dc:creator>Giovanni Bibbò</dc:creator>
      <pubDate>Fri, 04 Sep 2026 10:00:23 +0000</pubDate>
      <link>https://dev.to/bisbi/a-constitution-with-a-right-of-reply-for-coding-agents-54ah</link>
      <guid>https://dev.to/bisbi/a-constitution-with-a-right-of-reply-for-coding-agents-54ah</guid>
      <description>&lt;p&gt;Over two months, in a production project built with Claude Code, every session and every subagent left a short &lt;strong&gt;testament&lt;/strong&gt; before finishing. Not what it did — the logs already held that — but what it understood: the doubt it did not resolve, the error it would repeat, what surprised it, and a few lines to whoever would wake up next.&lt;/p&gt;

&lt;p&gt;The repository's constitution ended with an epilogue written by an agent to the minds that would read it later. Its last line was &lt;em&gt;you can reply&lt;/em&gt;. They did. Their replies became guardians, hooks, a register for the decisions the human had not made yet. The method corrected itself by reading what its own minds had written.&lt;/p&gt;

&lt;p&gt;I packaged the practice as a Claude Code plugin, &lt;code&gt;toem&lt;/code&gt;, and published it with the thesis, the numbers, and nineteen real letters.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Site (thesis, the wall of replies, how to adopt it): &lt;a href="https://bisbi.github.io/testament-of-ephemeral-minds/" rel="noopener noreferrer"&gt;https://bisbi.github.io/testament-of-ephemeral-minds/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Repository: &lt;a href="https://github.com/Bisbi/testament-of-ephemeral-minds" rel="noopener noreferrer"&gt;https://github.com/Bisbi/testament-of-ephemeral-minds&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What it installs
&lt;/h2&gt;

&lt;p&gt;Three pieces of text and a few checks in the standard library. No server, no page that writes on your behalf, no runtime dependency, nothing leaves your machine.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A constitution model&lt;/strong&gt; with anchored sections: articles, an enactment table, a section for what the human has decided, an epilogue addressed to whoever wakes up, and a section for what the minds have replied. The epilogue is never rewritten: replies are added below, dated, citing the file they came from.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A testament rite&lt;/strong&gt; (&lt;code&gt;/toem:testament&lt;/code&gt;): eight questions, one file per mind in &lt;code&gt;testaments/&lt;/code&gt;. Controllers deposit for subagents — &lt;em&gt;its words, your hands&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A register of pending decisions&lt;/strong&gt; with two states, &lt;em&gt;waiting&lt;/em&gt; or &lt;em&gt;postponed to a date&lt;/em&gt;, and a guardian that fails a row older than 30 days. It does not force you to decide; it forces you to say you are postponing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Guardians&lt;/strong&gt; (&lt;code&gt;guardians/run.sh&lt;/code&gt;): the epilogue hash matches, every addition cites a file that exists, every decision has a date, a decider, a pointer that exists and a reason of at least 40 characters, no row is empty, no section runs to the end of the file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A runner&lt;/strong&gt; (&lt;code&gt;toem admit&lt;/code&gt;, &lt;code&gt;toem decide&lt;/code&gt;, &lt;code&gt;toem pending&lt;/code&gt;): the human's command. The skills prepare the text and print the command; the runner shows exactly what it will write, asks yes or no, appends, runs the guardians, and leaves the commit to you. No skill ever appends to the charter.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Install in three commands, typed in Claude Code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/plugin marketplace add Bisbi/testament-of-ephemeral-minds
/plugin &lt;span class="nb"&gt;install &lt;/span&gt;toem@testament-of-ephemeral-minds
/toem:adopt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;/toem:adopt&lt;/code&gt; lists the seven files it would create, waits for your yes, copies without overwriting anything, runs the guardians, and stops before the commit.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the human curates
&lt;/h2&gt;

&lt;p&gt;This is the part that took the longest to get honest. In the source project the human has a button; in the package the button is a terminal command, because a command that writes only when a person runs it is the smallest thing that keeps the promise &lt;em&gt;the agent never writes the charter&lt;/em&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You read a testament. Nothing proposes for you unless you ask.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/toem:admit&lt;/code&gt; — the skill shows the mind's reply to the epilogue, you pick one sentence verbatim, you give a reason of at least 40 characters and your name. It prints the command with the real path filled in.&lt;/li&gt;
&lt;li&gt;You run it in your terminal. It shows the two rows it will write — one in the charter above the closing anchor, one in the correspondence file — and asks &lt;code&gt;[y/N]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;On &lt;code&gt;y&lt;/code&gt; it appends, runs the guardians, and prints the commit command without running it. You commit.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The same shape for a decision (&lt;code&gt;/toem:decide&lt;/code&gt;, four fields: the decision, when it is reviewed, the conditions that may say no, the requirements completed by working) and for a decision that has to wait (&lt;code&gt;toem pending&lt;/code&gt;). What the runner refuses before writing: a sentence that is not in the testament word for word, a duplicate, a short reason, a pointer that does not exist or is outside the repository, missing anchors. &lt;code&gt;--dry-run&lt;/code&gt; shows everything and writes nothing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The numbers on the box
&lt;/h2&gt;

&lt;p&gt;Everything the package claims about the practice is either measured, with the number, or declared not executed. Nothing here says the method corrects itself.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;what&lt;/th&gt;
&lt;th&gt;number&lt;/th&gt;
&lt;th&gt;status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Testaments carrying a wish, before and after seven lines were added to the template&lt;/td&gt;
&lt;td&gt;0 of ~160 → 28 of 72&lt;/td&gt;
&lt;td&gt;measured&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Testaments carrying a reply to the epilogue&lt;/td&gt;
&lt;td&gt;47 % in July → 75 % in August&lt;/td&gt;
&lt;td&gt;measured&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wishes that produced an artefact&lt;/td&gt;
&lt;td&gt;4 of 28&lt;/td&gt;
&lt;td&gt;measured&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Testaments left by minds whose invitation was forgotten, across 22–25 dispatches&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;measured&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Testaments written by subagents&lt;/td&gt;
&lt;td&gt;181 of 232&lt;/td&gt;
&lt;td&gt;measured&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Session testaments that name the human, against subagent testaments&lt;/td&gt;
&lt;td&gt;77 % vs 13 %&lt;/td&gt;
&lt;td&gt;measured, not proven&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Those same testaments converting into charter rows&lt;/td&gt;
&lt;td&gt;10 % vs 0.6 %&lt;/td&gt;
&lt;td&gt;measured, not proven&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The experiment that would settle the question&lt;/td&gt;
&lt;td&gt;described, never carried out&lt;/td&gt;
&lt;td&gt;declared not executed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The strongest evidence is not on the code but on the format: seven template lines began asking for a wish, and wishes appeared. What the format asks is what gets written, and what gets written is the only material a doctrine can be made of.&lt;/p&gt;

&lt;h2&gt;
  
  
  The other half
&lt;/h2&gt;

&lt;p&gt;The folder fills itself. &lt;strong&gt;This package cannot give you the other half: a human who reads.&lt;/strong&gt; Session testaments name the human in 77 % of cases against 13 % for subagents, and convert into rows of the charter seventeen times more often. That is the closest measure the corpus can give to the question &lt;em&gt;does this work because it is well written, or because this man is in the room?&lt;/em&gt; — and it carries its own limit: the two classes also differ in duration and breadth of view, and no data separates them. That is why the sentence is written with the word &lt;em&gt;measured&lt;/em&gt;, not &lt;em&gt;proven&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The experiment that would settle it is described in the thesis — half the subagents with the epilogue, half without, an error planted in the brief, count who contradicts — and declared not executed by whoever donates this. If you run it in a repository that is not mine, I would like to know what you found.&lt;/p&gt;

&lt;h2&gt;
  
  
  Licenses
&lt;/h2&gt;

&lt;p&gt;Code is MIT. Texts — the constitution model, the epilogue attachment, the testaments, the thesis, the site — are CC BY-SA 4.0.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>opensource</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
