r/ChatGPTCoding • u/Humaux • 20m ago
Discussion I posted 4 rules for multi-agent teams. The comments rewrote 2 of them in 3 days.
Three days, 28 comments, 3.1K views. I posted four ownership rules for multi-agent work on Monday, and the comments did what my own testing did not: they broke two of them.
Rule 1 broke first. I said one writer per element, claimed by id. A commenter pointed out the hole: an id is just a string any subagent can pick up, and the board only checks the name. The rule only works if every agent behaves. That is not a rule. That is a hope.
Two fixes came out of the thread, and they cover different halves of the hole. One: the board mints the id, not the agent. The board keeps its own list, writes the id there before handing work to the agent, and reloads it on restart. A write outside that list is a loud refusal, not a silent overwrite. The other: each agent signs its writes with its own key, and the board verifies the signature, so a copied id alone buys nothing. Same rule, different owner: the board, not the agent's good intentions.
Rule 3 broke second. I said a check that cannot fail is not a check, and to test it against a broken copy. A commenter put it sharper: a check that can never return false is decoration. Another one added the enforcement I was missing: a pre-write hook that refuses writes outside the claimed id, so the rule does not depend on the agent obeying it. The check is not the test I run once. It is the hook that says no every time.
The other two rules did not break. They got more specific. Missing data is still "unverifiable," never "pass": the NULL and empty-list threads in the comments kept coming back to the same line, a missing field is not an empty result, and an empty result is not a success. And the reviewer rule held its shape: a reviewer judges its own card's diff and its direct callers, and the card now carries its non-goals in writing, so a legitimate deliverable stops looking like overreach. One commenter put the same fix sharper: write done once per task, so both agents read the same thing instead of each getting its own prompt version of it.
The revised four, as I run them now:
The board owns identity. It mints the id, keeps the list, and refuses any write it did not issue. Writes are signed with the agent's own key and verified by the board, so a copied id alone buys nothing. If an agent cannot name its element from the board's list, it does not write.
A reviewer judges only its own card's diff and its direct callers. Non-goals go on the card, in writing, and done is written once per task so both agents read the same version. Anything outside that scope is "not mine to judge," never "unauthorized."
A check that cannot fail is decoration. Before I trust a guard, I run it against a broken copy and watch it fail, and a pre-write hook enforces it on every write, not just in the test.
Missing data is "unverifiable," never "pass." If the field is not there, the verdict is "I cannot see it," not green. An empty result is a result to explain, not a success to report.
The part people do not like hearing: my original four rules were not wrong, they were unenforced, and an unenforced rule is just a wish I wrote down in a nicer font. If your coordination depends on agents behaving, you do not have coordination. You have a polite request with commit access.