On macOS, installed codex-cli 0.154.0 help still describes --ephemeral
as disabling session-file persistence. A bounded read-only probe ran with
codex exec --ephemeral --json --sandbox read-only -C <checkout> and inherited
model/reasoning settings. It requested one standby harness_explorer, with
no product reads, writes, or recursive delegation and no retry on spawn failure.
The CLI exited 0 and reported child ID /root/compatibility_probe and its
READY response. The captured JSONL contains a completed wait event and that
final report, but no spawn metadata independently confirming the dispatch.
This is a reported success, not proof of a fixed CLI version, native
parallelism, or a complete Harness workflow. The earlier 0.153.4 failure below
remains a separate observation. Use the actual first-spawn check described in
compatibility for each session.
The same installed CLI also completed the updated ordinary-session regression:
python3 scripts/live_smoke.py run \
--target _workspace/live-tests/issue-1-20260914 \
--baseline-file /tmp/codex-harness-issue-1-20260914-baseline.json --timeout 900The runner exited 0 using its caller-held protected-file baseline. It
verified rejection of the deliberately blocked first run, preservation of
that run and alpha's output, reuse of alpha, rerun of beta and QA, and both
final tests passing. Native tool metadata separately confirmed that alpha's
child ID returned before beta was spawned, with exactly two harness_worker
children and one harness_qa; the first child was reused without an extra
probe. The local verifier still labels transport records as reported; this
recheck does not independently audit all message contents or prove behavior
under the original missing-thread failure. Local evidence is retained under
the ignored fixture's _workspace/ and .harness/runs/issue-1-inputs/.
For this change, independent offline QA passed 94 tests, root and example
structural validation, git diff --check, and the changed documentation's
local links, anchors, and shell examples. These checks remain separate from
native execution evidence.
Checked 2026-09-07 (Asia/Seoul) against upstream revision
cceac68ea1d0ad198ef4b7b906cd238375836387, using Python 3.13.7 and
codex-cli 0.153.4 on macOS.
python3 -m unittest discover -s tests -v: 94 tests passed.python3 scripts/validate.py --project .: 5 agents, 1 skill, 0 errors.python3 scripts/validate.py --project examples/service-migration: 2 agents, 1 skill, 0 errors; the example task graph also passed validation.- The local skill-creator validator accepted the factory and example skills.
- The local plugin-creator validator accepted
.codex-plugin/plugin.jsonand the standardskills/payload. git diff --check: passed.
Tests exercise installation preservation, idempotency, dry runs, conflicts, symlink destinations, rollback, logical role-name collisions, Unicode TOML round trips, installed helper portability, invalid skill metadata, missing references, task dependency cycles and simultaneous write ownership. Runtime regressions additionally cover required check evidence, result/artifact/input freshness, context refresh, immutable prior runs, contract updates through a new plan template, retries, native lifecycle observations, capacity, and stop acknowledgments. Communication tests include 24 concurrent writer processes, Unicode and multiline payloads, correlated replies, corrupt-tail preservation, and separate exports. Live-test evidence checks reject changed checker code and unrelated delivery records; those offline tests do not simulate native agents.
GitHub Actions passed on Ubuntu with Python 3.11 and 3.13 for the first
published migration commit 53660b1: CI run.
Both jobs ran the automated suite, native artifact validation, and whitespace
checks. The authenticated live Codex regression remains outside CI.
Ran the opt-in fixture with codex-cli 0.153.4 in an ordinary
workspace-write session:
python3 scripts/live_smoke.py run \
--target _workspace/live-tests/native-20260907Parent thread: 01a0799c-0bc4-7261-8dae-c1bb7e028575.
The primary session independently reran both product tests and the stronger
evidence verifier against an external baseline covering 30 protected fixture
files. The baseline was captured during the live run and checked afterward;
future run invocations capture their full baseline before launching Codex.
Sanitized native collaboration tool metadata was also checked against all three
reported role IDs and final lifecycle observations. Message bodies and model
analysis are not copied into that metadata extract.
Local evidence lives under
_workspace/live-tests/native-20260907/_workspace/:
verification.json: independent state, preservation, correlation, and test checks.native-tool-metadata.json: inspected native role dispatch and lifecycle metadata.native-report.json,native-events.jsonl,native-result.md: session observations and CLI output.communications/first.jsonl,communications/resumed.jsonl, and corresponding.mdexports.checkpoint.json: the rejected first completion and previous-run hashes.
These artifacts are local and Git-ignored. The standalone verifier labels native
IDs and message delivery as reported; it does not authenticate native
transport or measure execution overlap. The separate metadata review verifies
role dispatch and final lifecycle observations. This run is a small functional
regression, not a throughput benchmark or a guarantee for every Codex client.
The later resume --plan-file option and additional boundary guards were covered
by the offline CLI tests; this live run exercised input-file changes with the
original task graph.
Reproduce with a new disposable target. An authenticated local Codex CLI is required; the live command is deliberately outside unattended CI.
Ran codex exec --strict-config --json --sandbox read-only from the final
checkout with a bounded prompt: start harness_explorer and harness_reviewer
before waiting, assign each one independent file to read, collect their actual
results, and make no project edits or recursive delegations.
Final parent thread: 01a0781b-3657-7811-8ba0-a3ac06a8f0d7.
This confirms custom-role discovery and a small parallel read workflow on the tested local CLI. It does not benchmark throughput or certify every client, write sandbox, domain workflow, or three-worker workload. The service migration example is a validated starter template, not an already migrated application.
An earlier --ephemeral probe discovered the roles but could not spawn them:
the runtime returned collab spawn failed: no thread with id. The ordinary
session above passed. Use an ordinary session for the documented live smoke;
this observation does not establish the behavior of other CLI versions.
For local project invocation use $harness; when loaded as the plugin, the
skill picker can display the namespaced codex-harness:harness name.
