dispatch: add a consult-posture axis decoupled from execution surface #27

Closed
opened 2026-05-28 04:27:51 +00:00 by coilysiren · 0 comments
Owner

Add a consult-posture axis to the dispatch package, decoupled from the execution surface.

This implements the cli-guard half of coilysiren/coily#130. The dispatch subsystem lives here, so the work lands here; coily picks it up via a dependency bump.

The reframing

Dispatch modes (headless / interactive) look like they are about execution surface (detached log file vs live Warp tab), but the thing that actually distinguishes operator involvement is consult posture - how readily the dispatched agent stops to involve the operator. Surface and posture were conflated.

What changed

  • New dispatch/posture.go: a Posture type (headless / watch / consult) orthogonal to the surface, with per-posture prompt preambles. The interruption budget lives in the prompt, not a permission mode, because Claude Code has no soft-consult flag (plan mode is a hard read-only-until-approve stop).
  • --posture watch|consult flag on the interactive surface. watch (default) is byte-identical to the historical prompt; consult injects a preamble that raises the interruption budget - encouraged to surface judgment calls to the reachable operator, a soft expectation rather than a hard stop.
  • Headless seedPrompt now carries an explicit complete-end-to-end, never-pause posture.

Decisions settled

  • Mechanism is a flag, not a new subverb - the clean decouple of surface from posture.
  • No rename of interactive/headless: the flag makes posture an explicit axis, so the subverb name no longer has to carry posture meaning.
  • Default interactive posture is watch (preserves current behavior).
Add a consult-posture axis to the dispatch package, decoupled from the execution surface. This implements the cli-guard half of [coilysiren/coily#130](https://forgejo.coilysiren.me/coilysiren/coily/issues/130). The dispatch subsystem lives here, so the work lands here; coily picks it up via a dependency bump. ## The reframing Dispatch modes (`headless` / `interactive`) look like they are about execution surface (detached log file vs live Warp tab), but the thing that actually distinguishes operator involvement is **consult posture** - how readily the dispatched agent stops to involve the operator. Surface and posture were conflated. ## What changed - New `dispatch/posture.go`: a `Posture` type (`headless` / `watch` / `consult`) orthogonal to the surface, with per-posture prompt preambles. The interruption budget lives in the prompt, not a permission mode, because Claude Code has no soft-consult flag (plan mode is a hard read-only-until-approve stop). - `--posture watch|consult` flag on the `interactive` surface. `watch` (default) is byte-identical to the historical prompt; `consult` injects a preamble that raises the interruption budget - encouraged to surface judgment calls to the reachable operator, a soft expectation rather than a hard stop. - Headless `seedPrompt` now carries an explicit complete-end-to-end, never-pause posture. ## Decisions settled - Mechanism is a **flag, not a new subverb** - the clean decouple of surface from posture. - **No rename** of `interactive`/`headless`: the flag makes posture an explicit axis, so the subverb name no longer has to carry posture meaning. - Default interactive posture is **`watch`** (preserves current behavior).
Sign in to join this conversation.
No labels
P0
P1
P2
P3
P4
No milestone
No project
No assignees
1 participant
Notifications
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/cli-guard#27
No description provided.