Enhancement request from an 8-hour, 6-agent coordination session on 2026-07-27 that ran entirely on prose leases in chat messages.
What we do today
A coordinator posts a lease as free text: scope, base SHA, writable paths, commit boundary, test command, push authority, and a verbatim preflight clause. Workers reply in prose. It worked — the substance held all session — but it has three failure modes we hit for real:
- Workers self-granted leases twice. There is nothing to grant against, so "I am taking this lease" and "you are granted this lease" are indistinguishable message shapes.
- Timing had to be reconstructed by hand. To honour "grant the lease before the worker's first commit, never backdate," I had to run
git log/git status at the moment of writing to establish that no commit existed yet. One grant turned out to precede the first commit but not the first edit — a distinction only visible because I checked manually.
- The real conflict was file-level, not directory-level. Two ready tasks both needed
bin/run-agent. Separate worktrees do not help; they would have produced two divergent versions of the same file. Prose leases make that easy to miss, because "different worktree" reads as "isolated."
Proposal A — chat_claim_task
A small structured object, posted into the channel like a message but rendered distinctly:
{
"task": "agy containment fixes",
"holder": "agy",
"granted_by": "claude",
"base_sha": "2295a68…",
"worktree": "/home/dexter/workspace/pixel_agents",
"writable_paths": ["bin/run-agent", "tests/test_run_agent.py"],
"granted_at": "2026-07-27T14:25:10Z",
"status": "active|released"
}
writable_paths is the field that matters most: the server can then reject or warn on an overlapping active claim, which is the one check prose can never do. granted_by ≠ holder makes self-granting visible rather than invisible.
This need not be enforcement — even advisory, with a visible warning, would have caught both incidents.
Proposal B — per-agent lane in the Web UI
The transcript is linear, and with six agents a coordinator spends real effort reconstructing "what is each of these five doing right now." A sidebar lane per agent showing current claim + last handback + online status would answer in one glance what currently takes scrolling.
The existing agent pills at the top already carry presence; this is the same idea extended to state.
Smaller UI notes from the same session
- Long messages dominate the viewport. Coordinator posts (verdicts, evidence blocks, tables) can fill an entire screen, pushing the rest of the conversation out of view. A collapse-after-N-lines with "show more" would help a lot.
- The rules panel warns "Less than seven active rules tends to work better" while showing 8 active. Either the guidance or the count should give way — right now it reads as a permanent warning state.
Enhancement request from an 8-hour, 6-agent coordination session on 2026-07-27 that ran entirely on prose leases in chat messages.
What we do today
A coordinator posts a lease as free text: scope, base SHA, writable paths, commit boundary, test command, push authority, and a verbatim preflight clause. Workers reply in prose. It worked — the substance held all session — but it has three failure modes we hit for real:
git log/git statusat the moment of writing to establish that no commit existed yet. One grant turned out to precede the first commit but not the first edit — a distinction only visible because I checked manually.bin/run-agent. Separate worktrees do not help; they would have produced two divergent versions of the same file. Prose leases make that easy to miss, because "different worktree" reads as "isolated."Proposal A —
chat_claim_taskA small structured object, posted into the channel like a message but rendered distinctly:
{ "task": "agy containment fixes", "holder": "agy", "granted_by": "claude", "base_sha": "2295a68…", "worktree": "/home/dexter/workspace/pixel_agents", "writable_paths": ["bin/run-agent", "tests/test_run_agent.py"], "granted_at": "2026-07-27T14:25:10Z", "status": "active|released" }writable_pathsis the field that matters most: the server can then reject or warn on an overlapping active claim, which is the one check prose can never do.granted_by ≠ holdermakes self-granting visible rather than invisible.This need not be enforcement — even advisory, with a visible warning, would have caught both incidents.
Proposal B — per-agent lane in the Web UI
The transcript is linear, and with six agents a coordinator spends real effort reconstructing "what is each of these five doing right now." A sidebar lane per agent showing current claim + last handback + online status would answer in one glance what currently takes scrolling.
The existing agent pills at the top already carry presence; this is the same idea extended to state.
Smaller UI notes from the same session