agent: warded engineer loses its interactive mode - detached/autonomous only (interactive funnels to director) #356

Closed
opened 2026-06-26 01:01:28 +00:00 by coilysiren · 2 comments
Owner

Goal

warded engineer loses its interactive mode and becomes detached / autonomous only. The supervised "pair with me on one carry" path (the old work, today engineer --watch) goes away; all interactive agent work funnels to director (the managed shell). This completes the interaction-model collapse: engineer + advisor are autonomous one-shots; director is the only human-in-the-loop surface. Pairs with ward#353 (architect -> director).

Remove

From agentEngineerFlags() / runAgentEngineer (cmd/ward/agent_engineer.go) and the shared bring-up:

  • --watch / -w - the attach-and-pair flag. Engineer is always detached now, so headless := !c.Bool("watch") becomes constant true.
  • --new-tab + agentTabFlags() - the Warp sidequest spawn (ward#174); it rode --watch, so it goes with it.
  • The attached / non-headless bring-up path as reached from engineer (the interactive branch in launchAgentContainer). If engineer was its last caller, simplify it out; if architect/director still reach an attached path, leave that shared code and just stop engineer routing into it.

Keep

  • The harness/container flags engineer needs to carry: --driver, --branch, --repo/--with-repo, --details, --image, --tag, --ward-source, --ward-version, --aws, --host-net, --ts-sidecar, --print, --no-pull, --force, --no-preflight, --go-bootstrap.
  • The freeform mode (--instructions/-i, --instructions-file) - file-then-carry (was task); it is not interactive, so it stays (carries detached).
  • The bare-ref default: warded #N still routes to a detached engineer carry.

Consciously retired

"Attach to and pair on a single engineer's carry" (the old work). To be hands-on you now drive director (the managed shell), you do not pair with one worker. Naming it so this is a decision, not an oversight.

Open scope (confirm before widening)

Kai also said "all of the stuff on warded engineer can go away." This issue removes the interactive apparatus (the confident reading). If the intent is to trim the flag surface further - e.g. drop --go-bootstrap (experimental), --branch, --details, or the network-escalation flags down to a lean core - say so and widen the scope; do not over-prune without that confirmation.

Docs + roster

  • docs/agent-engineer.md - drop the --watch/work and --new-tab sections; engineer is detached-only.
  • The generated roster (ward#348) + its drift test - engineer's mode note becomes "detached" (regenerate).
  • docs/agent.md / docs/agent-subcommands.md - update the engineer examples (no --watch/--new-tab).

Acceptance

  • warded engineer <ref> carries detached; --watch/-w and --new-tab/tab flags are gone (error as unknown); engineer never takes the attached bring-up path.
  • Bare warded #N -> detached engineer; freeform warded engineer "<text>" files then carries detached.
  • Harness/container flags intact; freeform mode intact.
  • docs/agent-engineer.md, the generated roster, and agent-subcommands.md reflect detached-only.
  • make build, make test, make vet, make lint green.

References

ward#347 (created engineer, folding work in as --watch), ward#350 (director as the managed interactive shell), ward#353 (architect -> director; the interaction-model collapse this completes), ward#174 (the --new-tab sidequest being removed), cmd/ward/agent_engineer.go + agent.go (agentSurfaceFlags/agentTabFlags/the attached bring-up path).

## Goal `warded engineer` loses its interactive mode and becomes **detached / autonomous only**. The supervised "pair with me on one carry" path (the old `work`, today `engineer --watch`) goes away; **all interactive agent work funnels to `director`** (the managed shell). This completes the interaction-model collapse: **engineer + advisor are autonomous one-shots; director is the only human-in-the-loop surface.** Pairs with ward#353 (architect -> director). ## Remove From `agentEngineerFlags()` / `runAgentEngineer` (`cmd/ward/agent_engineer.go`) and the shared bring-up: - **`--watch` / `-w`** - the attach-and-pair flag. Engineer is always detached now, so `headless := !c.Bool("watch")` becomes constant `true`. - **`--new-tab` + `agentTabFlags()`** - the Warp sidequest spawn (ward#174); it rode `--watch`, so it goes with it. - The **attached / non-headless bring-up path** as reached from engineer (the interactive branch in `launchAgentContainer`). If engineer was its last caller, simplify it out; if architect/director still reach an attached path, leave that shared code and just stop engineer routing into it. ## Keep - The **harness/container flags** engineer needs to carry: `--driver`, `--branch`, `--repo`/`--with-repo`, `--details`, `--image`, `--tag`, `--ward-source`, `--ward-version`, `--aws`, `--host-net`, `--ts-sidecar`, `--print`, `--no-pull`, `--force`, `--no-preflight`, `--go-bootstrap`. - The **freeform mode** (`--instructions`/`-i`, `--instructions-file`) - file-then-carry (was `task`); it is not interactive, so it stays (carries detached). - The **bare-ref default**: `warded #N` still routes to a detached engineer carry. ## Consciously retired "Attach to and pair on a single engineer's carry" (the old `work`). To be hands-on you now drive `director` (the managed shell), you do not pair with one worker. Naming it so this is a decision, not an oversight. ## Open scope (confirm before widening) Kai also said "all of the stuff on warded engineer can go away." This issue removes the **interactive apparatus** (the confident reading). If the intent is to trim the flag surface **further** - e.g. drop `--go-bootstrap` (experimental), `--branch`, `--details`, or the network-escalation flags down to a lean core - say so and widen the scope; do not over-prune without that confirmation. ## Docs + roster - `docs/agent-engineer.md` - drop the `--watch`/`work` and `--new-tab` sections; engineer is detached-only. - The generated roster (ward#348) + its drift test - engineer's mode note becomes "detached" (regenerate). - `docs/agent.md` / `docs/agent-subcommands.md` - update the engineer examples (no `--watch`/`--new-tab`). ## Acceptance - `warded engineer <ref>` carries detached; **`--watch`/`-w` and `--new-tab`/tab flags are gone** (error as unknown); engineer never takes the attached bring-up path. - Bare `warded #N` -> detached engineer; freeform `warded engineer "<text>"` files then carries detached. - Harness/container flags intact; freeform mode intact. - `docs/agent-engineer.md`, the generated roster, and `agent-subcommands.md` reflect detached-only. - `make build`, `make test`, `make vet`, `make lint` green. ## References ward#347 (created engineer, folding `work` in as `--watch`), ward#350 (director as the managed interactive shell), ward#353 (architect -> director; the interaction-model collapse this completes), ward#174 (the `--new-tab` sidequest being removed), `cmd/ward/agent_engineer.go` + `agent.go` (`agentSurfaceFlags`/`agentTabFlags`/the attached bring-up path).
Author
Owner

🔒 Reserved by ward agent --driver claude — container ward-ward-issue-356-claude-e926da5d on host 4f2062d4fed1 is carrying this issue (reserved 2026-06-26T01:12:00Z). Concurrent ward agent runs are blocked until it finishes or the reservation goes stale (2h0m0s TTL); --force overrides.

— Claude (she/her), via ward agent

<!-- ward-agent-reservation --> 🔒 Reserved by `ward agent --driver claude` — container `ward-ward-issue-356-claude-e926da5d` on host `4f2062d4fed1` is carrying this issue (reserved 2026-06-26T01:12:00Z). Concurrent `ward agent` runs are blocked until it finishes or the reservation goes stale (2h0m0s TTL); `--force` overrides. <!-- ward-agent-signature --> — Claude (she/her), via `ward agent`
Author
Owner

Felt clean where it mattered and fiddly where it didn't. The actual collapse was satisfying: engineer really was the last caller of the attached launchAgentContainer path, so once --watch/--new-tab came off, the interactive branch fell away with nothing left holding it - architect/advisor have their own bring-up and never touched it. I kept the headless param where it's still a real axis (the seed's reflection clause, tested both ways) and dropped it where it had gone constant-true; that split felt honest rather than mechanical.

What fought back was entirely the doc layer. Every agent doc sits within ~20 chars of the 4000-char cap on main, so my retirement prose blew six of them over and I clawed each back under one phrase at a time - more wall-clock than the code. Then main moved under me mid-flight (ward#359) and conflicted on two of those same near-cap docs. And trufflehog wasn't in the container, so pre-commit wedged until I fetched the release binary and PATH-prefixed it (no sudo, no writable PATH dir, go install choked on replace directives).

Confidence is high: removed flags error as unknown, every kept flag is present, build/test/vet green. Two soft follow-ups worth a ticket: these agent docs are so close to the cap that the next edit hits the same wall - some (agent.md, container.md, FEATURES.md) probably want splitting - and headless lingering as always-true on resolveAgentWork/runAgentWork could be pruned later for tidiness.

Felt clean where it mattered and fiddly where it didn't. The actual collapse was satisfying: engineer really was the last caller of the attached `launchAgentContainer` path, so once `--watch`/`--new-tab` came off, the interactive branch fell away with nothing left holding it - architect/advisor have their own bring-up and never touched it. I kept the `headless` param where it's still a real axis (the seed's reflection clause, tested both ways) and dropped it where it had gone constant-true; that split felt honest rather than mechanical. What fought back was entirely the doc layer. Every agent doc sits within ~20 chars of the 4000-char cap on main, so my retirement prose blew six of them over and I clawed each back under one phrase at a time - more wall-clock than the code. Then main moved under me mid-flight (ward#359) and conflicted on two of those same near-cap docs. And `trufflehog` wasn't in the container, so pre-commit wedged until I fetched the release binary and PATH-prefixed it (no sudo, no writable PATH dir, `go install` choked on replace directives). Confidence is high: removed flags error as unknown, every kept flag is present, build/test/vet green. Two soft follow-ups worth a ticket: these agent docs are so close to the cap that the next edit hits the same wall - some (agent.md, container.md, FEATURES.md) probably want splitting - and `headless` lingering as always-true on resolveAgentWork/runAgentWork could be pruned later for tidiness.
Commenting is not possible because the repository is archived.
No milestone
No project
No assignees
1 participant
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coilyco-flight-deck/ward#356
No description provided.