Claude worker seat: live hire, message and completion (VUH-1458)
2026-09-30, Claude Code 2.1.285, herdr 0.9.1, this Mac. Code at 8be22bee
(adapter, plugin hooks, clankie seat-hook) and 7431b8c8 (hire wiring).
What ran
live-hire.mts hires a real interactive Claude Code seat
through HerdrWatchStore.spawnSeat with the Claude worker adapter and this
Mac's real consent state, in a gitignored scratch directory inside the trusted
checkout. Claude's folder-trust prompt blocks a fresh /tmp directory, and
that decision was left alone. It then messages the seat, arms a completion
watch, reads the native transcript, and closes the pane. The service was not
restarted; hook posts went to a local capture server in the script.
The harness changed two things on purpose, logged as START_ARGS:
- It dropped the fallback's
--dangerously-load-development-channels server:clankie-seat, so no script accepted the owner's development-channel warning. - It loaded the worker plugin inline (
--plugin-dir, hooks only, no channel) to prove the Stop hook chain in the real TUI.
Result (live-hire.txt)
- Hire:
spawned, withcontrol: { mode: "terminal", reason: "consent_required", detail: "clankie-worker@clankie is not installed.", fix }. The adapter blocked before launching anything, and the hire took the terminal lane in the same pane, as designed. - Brief: pasted and verified in the native transcript; Claude answered
brief-done. - Message:
sendToSeatdelivered; Claude answeredfollow-up-done. - Completion: the watch armed on the running turn and woke when it settled.
- Hooks: the plugin's real
SessionStart,UserPromptSubmitandStophooks reachedclankie seat-hook, which posted/v1/fleet/seats/<pane>/hookwith the right session and Claude's own final text (lastMessage: "brief-done", then"follow-up-done"). - Cleanup: pane closed (
CLOSE true), scratch directory removed.
An earlier run with a brief that wrote a file blocked on Claude's own
permission prompt. The seat read blocked, and the follow-up was refused
rather than typed into the prompt.
Not yet verified live
Channel delivery (brief and messages as clankie-worker channel events, with
the adapter holding the seat and settling watches from Stop hooks) needs James's
one-time consent: install the plugin (disabled) and approve it in managed
settings, both named in the hire's fix. Unit tests cover that path
(apps/clankie/test/claude-worker-seat.test.ts, seat-adapter-hire.test.ts).
After approval, rerun the script without the harness's startAgent override and
expect control.mode: "adapter".
