Codex Print-Mode Stall Salvage
Use when a delegated Codex -p implementation run is launched in a worktree and appears to hang with little/no stdout, an empty tee log, or long-running internal shell scans.
Trigger signs
Codex -p ... | tee <log> has an empty or near-empty log for several minutes.
- The process is still running, but the log is not growing.
ps shows Codex or a child process running a broad command such as rg, git status, or repo-wide scans.
git status --short -- <owned paths> shows useful partial edits despite no final Codex summary.
- The delegated run has exceeded the expected wall-clock budget for a bounded issue.
Recovery workflow
Inspect state before killing:
find tmp/Codex-logs -type f -printf '%f %s bytes\n'
ps -ef | grep '<worktree-or-prompt-id>' | grep -v grep
git status --short -- <owned paths>
If useful partial edits exist and stdout is still stalled, stop the delegated run:
- kill the tracked Hermes background process if available, or kill the exact Codex subprocess/process group.
- If Codex is stalled inside a child command such as
git push, inspect ps -eo pid,ppid,pgid,stat,comm,args first and terminate exact PIDs/negative PGIDs; avoid pkill -f patterns that can match the invoking shell and kill the recovery command itself.
- preserve in-scope edits; do not reset the worktree blindly.
Verify path contract immediately:
git status --short
- confirm only approved/owned paths changed.
- remove or revert runtime artifacts/logs unless they are explicitly in scope.
Finish centrally if the remaining work is small:
- inspect the partial diff.
- complete only the approved scope.
- run the exact targeted validator from the approved plan.
Run independent review before landing:
- include that Codex produced partial work but stalled.
- ask reviewer to check scope, acceptance coverage, and path-contract compliance.
In closeout, be transparent:
- execution mode was delegated/hybrid.
- Codex produced initial partial work but stalled.
- orchestrator completed recovery, verification, commit/push, and closeout.
Important details
- Do not judge a
Codex -p run by stdout alone. Verify with git/file state.
- Do not let a stalled delegated process monopolize the worktree indefinitely.
- Prefer preserving good partial edits over restarting from scratch when the path contract is clean.
- If a repo-wide Python test or scan is slow because it walks ignored/untracked/generated files, prefer tracked-file approaches such as
git ls-files or git grep in tests and validators.
Example checks
find tmp/Codex-logs -type f -maxdepth 1 -printf '%f %s bytes\n' | sort
ps -ef | grep '/mnt/local-analysis/worktrees/ws-2311-exec' | grep -v grep
git status --short -- tests/docs/test_stage_transition_reference_confinement.py tests/helpers/stale_reference_docs.py
Closeout wording pattern
Execution mode: delegated/hybrid. Codex was launched in isolated worktree <path> and produced the initial targeted helper/test work. The non-interactive run stalled with no useful stdout, so the orchestrator stopped it, preserved in-scope partial edits, completed the minimal remaining changes, ran validation/review, committed, pushed, and closed.
1---2name: codex-print-stall-salvage3description: Recover delegated Codex print-mode runs that stall silently or produce partial edits in large worktrees.4---56# Codex Print-Mode Stall Salvage78Use when a delegated `Codex -p` implementation run is launched in a worktree and appears to hang with little/no stdout, an empty tee log, or long-running internal shell scans.910## Trigger signs1112- `Codex -p ... | tee <log>` has an empty or near-empty log for several minutes.13- The process is still running, but the log is not growing.14- `ps` shows Codex or a child process running a broad command such as `rg`, `git status`, or repo-wide scans.15- `git status --short -- <owned paths>` shows useful partial edits despite no final Codex summary.16- The delegated run has exceeded the expected wall-clock budget for a bounded issue.1718## Recovery workflow19201. Inspect state before killing:21 - `find tmp/Codex-logs -type f -printf '%f %s bytes\n'`22 - `ps -ef | grep '<worktree-or-prompt-id>' | grep -v grep`23 - `git status --short -- <owned paths>`24252. If useful partial edits exist and stdout is still stalled, stop the delegated run:26 - kill the tracked Hermes background process if available, or kill the exact Codex subprocess/process group.27 - If Codex is stalled inside a child command such as `git push`, inspect `ps -eo pid,ppid,pgid,stat,comm,args` first and terminate exact PIDs/negative PGIDs; avoid `pkill -f` patterns that can match the invoking shell and kill the recovery command itself.28 - preserve in-scope edits; do not reset the worktree blindly.29303. Verify path contract immediately:31 - `git status --short`32 - confirm only approved/owned paths changed.33 - remove or revert runtime artifacts/logs unless they are explicitly in scope.34354. Finish centrally if the remaining work is small:36 - inspect the partial diff.37 - complete only the approved scope.38 - run the exact targeted validator from the approved plan.39405. Run independent review before landing:41 - include that Codex produced partial work but stalled.42 - ask reviewer to check scope, acceptance coverage, and path-contract compliance.43446. In closeout, be transparent:45 - execution mode was delegated/hybrid.46 - Codex produced initial partial work but stalled.47 - orchestrator completed recovery, verification, commit/push, and closeout.4849## Important details5051- Do not judge a `Codex -p` run by stdout alone. Verify with git/file state.52- Do not let a stalled delegated process monopolize the worktree indefinitely.53- Prefer preserving good partial edits over restarting from scratch when the path contract is clean.54- If a repo-wide Python test or scan is slow because it walks ignored/untracked/generated files, prefer tracked-file approaches such as `git ls-files` or `git grep` in tests and validators.5556## Example checks5758```bash59find tmp/Codex-logs -type f -maxdepth 1 -printf '%f %s bytes\n' | sort60ps -ef | grep '/mnt/local-analysis/worktrees/ws-2311-exec' | grep -v grep61git status --short -- tests/docs/test_stage_transition_reference_confinement.py tests/helpers/stale_reference_docs.py62```6364## Closeout wording pattern6566```text67Execution mode: delegated/hybrid. Codex was launched in isolated worktree <path> and produced the initial targeted helper/test work. The non-interactive run stalled with no useful stdout, so the orchestrator stopped it, preserved in-scope partial edits, completed the minimal remaining changes, ran validation/review, committed, pushed, and closed.68```