Split child of #672
This issue was created by an explicit operator action because the parent plan was estimated at 21 points. It is not approved work. It starts in Inbox and will be independently specified from the latest source only after it is prioritized into a sprint.
Source plan: c5d4dd96f4cf838a26d96f942aebeffbddd4dfb02a8b197e5d770a1e739fecf1
Source base SHA: 4c79ab47bc12287aaae7a785bb25a12424547d2b
Proposed lane: V
Proposed job identity: adapter-672
Parent planning context
Freeze the Codex Desktop channel contract, add installation-scoped exactly-once ctrl-api ingestion and bounded revisioned continuity, ship a supported-hook macOS adapter with a durable outbox and visible health, and admit Codex source events into existing curation without creating a parallel LCM or memory authority.
Proposed paths
packages/hermes/codex-desktop-adapter/**
docs/operators/codex-desktop-channel.md
Contracts read
docs/CODEX-DESKTOP-CHANNEL-CONTRACT.md
packages/hermes/CONTRACT.md
packages/mcp-server/CONTRACT.md
Contracts changed
Proposed dependencies
Acceptance evidence
- The installable Codex plugin uses only the supported session-start/end, user-prompt, private pre-turn context, and terminal-assistant hooks; automatic capture never depends on an MCP tool call.
- Each user or terminal-assistant event is committed to a mode-0600 local SQLite outbox with stable installation/session/sequence identity before its hook reports success; the device credential is read from macOS Keychain, never a transcript or config file.
- The adapter flushes after ten completed turns, after the frozen idle threshold, and on supported session-end/shutdown hooks; launchd performs only retry/restart/health supervision and never derives primary turn counts.
- Offline, killed, and restarted adapter tests preserve pending content and deliver it after recovery; replay uses the same idempotency key, and acknowledged rows follow the frozen retention policy while unacknowledged rows are never silently discarded.
- Every turn performs only the cheap revision check; substantive private context is requested at session start, for a newer revision, topic shift or explicit cross-channel reference, after fifteen minutes idle, or explicit refresh. No-change responses inject nothing.
- Injected text is explicitly framed as authoritative Alfred continuity, remains invisible as fabricated transcript history, honors the six-item/384-token bound, and degrades without blocking ordinary Codex use.
- A local status command reports capture enabled/disabled, last successful delivery, queued event/chunk count, continuity revision/degradation, and last error without displaying transcript content.
- Redaction tests prove that only user prompts and terminal assistant messages enter the outbox, excluded hook/system/tool-result material is not captured, configured sensitive patterns are redacted before persistence, and failures remain visible.
- Operator documentation covers installation, permissions, updates, Keychain provisioning, outbox location/retention, retry supervision, status, revocation, recovery, and separately scoped optional MCP configuration.
Proposed verification
docker compose config -q
Split child of #672
This issue was created by an explicit operator action because the parent plan was estimated at 21 points. It is not approved work. It starts in Inbox and will be independently specified from the latest source only after it is prioritized into a sprint.
Source plan:
c5d4dd96f4cf838a26d96f942aebeffbddd4dfb02a8b197e5d770a1e739fecf1Source base SHA:
4c79ab47bc12287aaae7a785bb25a12424547d2bProposed lane:
VProposed job identity:
adapter-672Parent planning context
Freeze the Codex Desktop channel contract, add installation-scoped exactly-once ctrl-api ingestion and bounded revisioned continuity, ship a supported-hook macOS adapter with a durable outbox and visible health, and admit Codex source events into existing curation without creating a parallel LCM or memory authority.
Proposed paths
packages/hermes/codex-desktop-adapter/**docs/operators/codex-desktop-channel.mdContracts read
docs/CODEX-DESKTOP-CHANNEL-CONTRACT.mdpackages/hermes/CONTRACT.mdpackages/mcp-server/CONTRACT.mdContracts changed
Proposed dependencies
contract-672api-672Acceptance evidence
Proposed verification
docker compose config -q