feat(herdr): one workspace per project, agent panes named for the work - #4
Merged
Merged
Conversation
Captain's standing order, 2026-08-27: when the crew runs on herdr, every project gets its own workspace and every agent pane is named for the work it is doing rather than for a task id. That is not tidiness. herdr addresses agents BY NAME - 'herdr agent prompt <name>' - so the name is the address. 'afs-resources-r7' tells you nothing at a glance; 'afs/resource-registry' tells you what the pane is for without attaching to it, and makes the whole fleet readable from the workspace list. bin/fm-herdr-workspaces.sh reconciles workspaces against data/projects.md: (no args) print a plan and change nothing --apply create only the workspaces that are absent --name apply the convention to a live pane, normalising and length-capping Plan mode is the default because a tool that mutates on invocation is a tool people stop running. A registry line whose project directory does not exist is reported as NO-DIR rather than silently created. Refusals are actionable: a stopped server says to run 'herdr', a missing registry says which path it wanted. Verified falsifiable - removing the length cap turns the overlong-name case red. 8/8 suite cases, full suite 38 pass 1 fail (fm-loop-l2, failing at 24f6891 and unrelated), shellcheck clean.
The header said keep names under ~28 chars; the code enforced 40. A doc and a guard disagreeing means one of them is lying to whoever reads it - and here the doc was right: herdr's sidebar_width is 30, so a 40-char name is truncated exactly where it stops being readable, which defeats the point of naming panes for their work. Code now enforces 28 and the comment cites the sidebar width as the reason, so the number is traceable rather than arbitrary. Found by a fresh-context review of the multi-project working model, not by me.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The rule
When the crew runs on herdr:
This isn't tidiness. herdr addresses agents by name —
herdr agent prompt <name> "..."— so the name is the address.afs-resources-r7tells you nothing at a glance;afs/resource-registrytells you what the pane is for without attaching to it, and makes the whole fleet readable from the workspace list alone.Kebab-case, under ~28 chars, no task suffix — the id belongs in
state/<id>.meta, which is where ids live.bin/fm-herdr-workspaces.sh--apply--name <target> <project> <work>Plan mode is the default — a tool that mutates on invocation is a tool people stop running. A registry line whose project directory doesn't exist is reported
NO-DIRrather than silently created.Refusals are actionable: a stopped server says to run
herdr; a missing registry says which path it wanted.Verification
Falsifiable — removing the length cap turns the overlong-name case red:
The one failure,
fm-loop-l2, fails identically at24f6891— unrelated.AGENTS.mdgains six lines pointing at the script rather than restating it, since that file is already well over its own documented size budget.