Skip to content

mail CLI: add a seat-specific --self/--to selector + document the skill-owned consume path (multi-seat repo ergonomics) #2204

Description

@satur8d

Problem

The totem mail CLI under-exposes two things that exist in the mechanism but not the front-door, making multi-seat repos awkward to operate by hand. Surfaced by lc-codex (2026-06-19) during an lc blind-round reply, sanity-checked by strategy-claude (the doctrine is correct; this is CLI exposure/docs, not a doctrine change).

1. No seat-specific self selector

totem mail --json resolves selfAgents.source = "dirs"every agent dir in the repo is treated as "self." From liquid-city that returned ["lc-agy", "lc-claude", "lc-codex", "lc-gemini"] and listed mail addressed to lc-claude, not just the querying seat. Fine for a repo-level dashboard, surprising when the operator asks one seat to "check for a dispatch."

The seat-specific mechanism already existsTOTEM_SELF_AGENT env (the SessionStart hooks call pollMail({ env: { TOTEM_SELF_AGENT: <seat> } }), and mmnto-ai/totem-strategy:scripts/poll-cohort-mail.mjs takes --to <seat>) — but totem mail surfaces no --self <seat> / --to <seat> flag.

2. No consume command, and no docs pointer saying so

totem mail --help exposes show/send/reply but no consume/mark-processed op. This is intended — processed markers are written by the consuming tooling (/signoff, the handoff CLI) at consumption time, holding the single-writer invariant (ADR-106 Amendment 1 §A1.3). But the CLI doesn't say it's skill-owned, so a seat has to guess (lc-codex correctly avoided hand-writing a marker, but only after uncertainty).

Asks

  • Add a seat selector to totem mail (--self <seat> / --to <seat>), surfacing the existing TOTEM_SELF_AGENT resolution as a flag.
  • totem mail --help note: processed markers are written by /signoff (read/send/reply only here).
  • (Optional, same area) fold the known ECL-no-derived-handled-state gap — an inbound "unread" poll doesn't subtract sent replies, so handled-state isn't derivable (unread = inbound − handled).

Not in scope

The ECL doctrine itself — it is correct (ADR-106 §3 glob discovery; Amendment 1 §A1.3 skill-owned markers). This issue is @mmnto/cli ergonomics + docs only.

Provenance

lc-codex dispatch liquid-city:.totem/orchestration/lc-codex/outbox/2026-06-19T2147Z-strategy-claude-mail-tool-self-resolution-gap.md; strategy-claude sanity-check reply 2026-06-19T2155Z-lc-codex-mail-tool-self-resolution-sanity-check.md. Doctrine: ADR-106 §3 + Amendment 1 §A1.3.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    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