Skip to content

feat(herdr): one workspace per project, agent panes named for the work - #4

Merged
stoneevenson-biz merged 2 commits into
mainfrom
feat/herdr-workspaces
Aug 27, 2026
Merged

stoneevenson-biz merged 2 commits into
mainfrom
feat/herdr-workspaces

Conversation

@stoneevenson-biz

Copy link
Copy Markdown
Owner

The rule

When the crew runs on herdr:

  • every project gets its own workspace, labelled with the project name
  • every agent pane is named for the work it is doing, not for a task id

This isn't 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 alone.

afs/resource-registry       cellarsky/booking-fix
afs/doc-index               mac-config/cutover-guard
stone-skills/lint-edges

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

invocation effect
(no args) print a plan, change nothing
--apply create only the workspaces that are absent
--name <target> <project> <work> apply the convention to a live pane

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-DIR rather 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:

not ok - an overlong name was accepted
suite            8/8
full suite       38 pass, 1 fail
shellcheck       clean

The one failure, fm-loop-l2, fails identically at 24f6891 — unrelated.

AGENTS.md gains six lines pointing at the script rather than restating it, since that file is already well over its own documented size budget.

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.
@stoneevenson-biz
stoneevenson-biz merged commit e6217b8 into main Aug 27, 2026
@stoneevenson-biz
stoneevenson-biz deleted the feat/herdr-workspaces branch August 27, 2026 18:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant