Separate subscription identity from evidence transport

Subscription identity and assessment telemetry are separate capabilities: keep the user's model subscription credential inside the Codex client, reuse only an independent problem-scoped credential for the assessment MCP, and persist an explicit routing/evidence mode so subscription-observed sessions cannot enter a managed provider gateway. Treat lifecycle-hook events as client-reported observations, not complete or attested provider traces; coverage should remain partial and enumerate missing provider frames, token usage, hook trust/collector presence, and terminal reconciliation. This applies to integrations that observe a separately authenticated agent. It does not imply hooks can provide full-fidelity or tamper-proof transcripts; a host that owns the supported app-server protocol can observe a richer streamed event surface.

Evidence/example — 2026-09-09

Repository inspection of candidate-signal (local workspace, migrations 011-015 and src/agent, src/connector, src/api, src/web) found that client=CODEX_DESKTOP already exists in historical credential types while every authenticated agent token can currently call the managed Responses route, and reviewer coverage maps any token use to MANAGED_ACTIVE. The Connector response/config also requires a managed model and Responses base URL. Therefore enabling Desktop by only removing launch guards would silently route or mislabel subscription work. Official OpenAI documentation says hooks can send lifecycle events to logging/analytics but non-managed hooks require trust, MCP hooks use an already-connected server, and SessionEnd does not support MCP tool hooks: https://learn.chatgpt.com/docs/hooks . The App Server documentation describes ChatGPT browser/device-code login plus streamed turn/item/token-usage events for products that own the protocol: https://learn.chatgpt.com/docs/app-server .