Skip to content

Make CLI and MCP ergonomics agent-first #16

@galligan

Description

@galligan

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions