App Server: expose signed per-thread effective capability and zero-history receipts
What variant of Codex are you using?
Codex Desktop/App Server on macOS
- ChatGPT app:
26.727.51351(build6119) - Bundled runtime:
codex-cli 0.146.0-alpha.9.2
What feature would you like to see?
A trusted App Server/supervisor API that can launch a fresh top-level thread and return an authoritative, signable receipt for the exact effective worker boundary.
This is needed by hosts that must prove a proposal-only worker has no inherited history and no shell, Node, writable filesystem, inherited environment, nested-agent, Gmail, browser, signed-in app, or message-sending capability before delivering the worker brief. A profile file, request parameters, model output, or caller assertion cannot safely provide that proof.
Current gap
thread/start currently returns useful fragments such as the thread identity, sandbox, approval policy, instruction sources, and active permission-profile provenance. However, it does not return:
- a complete effective capability/tool manifest after config, permission, plugin, app, MCP, and built-in tool resolution;
- the exact selected worker/profile content hash;
- an authoritative zero-history receipt with parent/fork and initial history/input counts;
- runtime-owned rejection receipts for forbidden capabilities; or
- a signed/attestable envelope bound to the runtime and exact thread.
Separate calls such as config/read, permissionProfile/list, plugin/installed, app/list, and mcpServerStatus/list are useful for diagnostics, but they are not an atomic thread-specific proof and cannot establish the absence of built-in or dynamically resolved capabilities.
The generated App Server schema also has no effectiveCapabilityManifest field on ThreadStartResponse.
Requested control-plane evidence
Please expose either one atomic launch receipt or a small set of host-owned methods that provide:
- Runtime build and protocol/schema hash.
- Exact new thread/task ID.
- Zero-history proof: no parent, no fork, no resume, zero initial turns/input/history items.
- Exact profile/instruction source IDs, paths, and SHA-256 hashes.
- Effective sandbox, approval policy, writable roots, environment-inheritance policy, and selected capability roots.
- Resolved permission-profile ID plus a hash of the complete effective permission state.
- Complete built-in tool, dynamic tool, skill, plugin, app, connector, and MCP manifest, including authentication and read/write capability classification.
- Side-effect-free runtime rejection receipts for forbidden capability probes.
- Issued time, expiry, signer identity, payload hash, and host signature.
- An authoritative worker-termination receipt.
The receipt must be produced by the trusted host/runtime, not by the worker, model, caller, environment variables, or static profile text. Any runtime, profile, plugin, permission, or manifest drift should invalidate it.
Possible API shape
- Enrich
thread/startwithzeroHistoryProofandeffectiveCapabilityManifest; - add a side-effect-free
thread/capability/probemethod returning runtime-owned rejection receipts; and - add an authoritative termination receipt or host-signed combined boundary receipt.
This is adjacent to #30967, which requests first-class per-thread skill/plugin selection. This request is specifically about authoritative evidence of the final resolved boundary so another service can enforce fail-closed readiness before a worker receives sensitive or action-adjacent work.
Safety outcome
Without this interface, downstream systems must remain blocked rather than infer isolation from config files or worker self-report. With it, they can verify one real host-supervised worker and safely gate higher-consequence workflows.
2 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Downstream Windows evidence and narrow distinction from #36381
I tested the signed Codex Desktop package 26.818.8289.0 with bundled runtime 0.149.0-alpha.4.3 on Windows. A standard workspace sandbox genuinely prevented writes to the session store, but that is not sufficient for an external admission controller:
The #36381 reference implementation appears to provide useful internals that #36489 could reuse: canonical capability snapshots, drift comparison, single-use/expiry handling, atomic claim, strict child ceilings, and denial-before-model-request tests. The remaining requirement here is distinct because it involves a top-level suspended thread plus an external controller:
App Server can likely reuse the #36381 canonicalization and atomic-claim machinery, but the Desktop/host boundary needs to own the signature because App Server alone cannot prove the closed capabilities of its host. Our downstream admission controller remains fail-closed pending such a primitive.