Why
Dispatch is used by humans and agents. The current op-derived surfaces work, but the user-facing grammar still feels too raw in places (goal-get, repeated --lane @docs, roster, unclear brief). The next pass should preserve the contract-first foundation while making the surface nicer and more stable for real operator loops.
There is no public compatibility burden yet, so prefer the right surface over keeping awkward top-level aliases.
Scope
Improve CLI/MCP ergonomics without reintroducing drift. Prefer derived command groups, resolvers, and surface projections over hand-written per-op behavior.
Acceptance criteria
- Design and implement a consistent command grammar for related operations:
- Prefer grouped forms such as
dispatch goal see|set|clear over top-level goal-get|goal-set|goal-clear.
- Do not keep old command aliases solely for backwards compatibility; no one depends on them yet.
- Revisit trigger commands in the same style (
dispatch trigger add|list|rm|pause|resume) or explicitly defer to the trigger issue.
- Add a universal lane/thread resolver for lane arguments:
- Resolve current handles like
@docs.
- Resolve dispatch lane ids.
- Resolve full Codex thread ids.
- Resolve unique truncated thread/lane ids with conflict detection.
- Preserve and resolve handle/name history so renamed sessions remain findable.
- On ambiguity, return actionable candidates instead of guessing.
- Choose and document a stable short-id display format.
- Clarify
lane vs thread language:
thread is the Codex/App Server identity.
lane is dispatch's managed/control-plane view of a thread.
- Update docs/skills/help text so this distinction is clear without being noisy.
- Revisit message/context operation names:
- Decide whether
brief should remain or be replaced by a clearer send/context verb.
- Explore collapsing turn-starting send and non-turn-starting context injection under one verb with an explicit mode/flag, while keeping the App Server semantics clear.
- Clarify
send, steer, and any replacement for brief in help text and MCP tool guidance.
- Revisit overview/listing commands:
- Decide whether
roster should become dispatch list or be replaced by a more operational overview command.
- Decide whether
discover should remain separate from managed-lane listing, or whether one command can show both managed lanes and attachable Codex threads with clear state/source fields.
- Consider a more operationally minded command such as
sitrep for overseeing lanes: current known state, recency, active turn/goal, and last N actions.
- Confirm
dispatch status remains daemon health, or split lane/list/status semantics if needed.
- Make CLI output more agent-friendly:
- Stable JSON schemas for key commands.
- Consistent field names across CLI/MCP.
- jq-friendly examples in docs.
- Reshape MCP tools around ergonomic grouped tools rather than tool sprawl where that improves agent behavior, while keeping read/write/destructive hints truthful.
- Add tests proving command grammar, resolver behavior, ambiguity handling, MCP grouping, and docs examples stay in parity.
Notes
This should not become a hand-written CLI fork. The important design constraint is still: author once, derive what can be derived, and override only where the user experience is genuinely better.
Why
Dispatch is used by humans and agents. The current op-derived surfaces work, but the user-facing grammar still feels too raw in places (
goal-get, repeated--lane @docs,roster, unclearbrief). The next pass should preserve the contract-first foundation while making the surface nicer and more stable for real operator loops.There is no public compatibility burden yet, so prefer the right surface over keeping awkward top-level aliases.
Scope
Improve CLI/MCP ergonomics without reintroducing drift. Prefer derived command groups, resolvers, and surface projections over hand-written per-op behavior.
Acceptance criteria
dispatch goal see|set|clearover top-levelgoal-get|goal-set|goal-clear.dispatch trigger add|list|rm|pause|resume) or explicitly defer to the trigger issue.@docs.lanevsthreadlanguage:threadis the Codex/App Server identity.laneis dispatch's managed/control-plane view of a thread.briefshould remain or be replaced by a clearer send/context verb.send,steer, and any replacement forbriefin help text and MCP tool guidance.rostershould becomedispatch listor be replaced by a more operational overview command.discovershould remain separate from managed-lane listing, or whether one command can show both managed lanes and attachable Codex threads with clear state/source fields.sitrepfor overseeing lanes: current known state, recency, active turn/goal, and last N actions.dispatch statusremains daemon health, or split lane/list/status semantics if needed.Notes
This should not become a hand-written CLI fork. The important design constraint is still: author once, derive what can be derived, and override only where the user experience is genuinely better.