Summary
When Coro Code receives a shell tool call that starts a detached child process, the CLI reports task completion while the tool-started child process remains alive. The standalone reproducer downloads public coro-code v0.0.8, starts a local OpenAI-compatible mock provider, sends a child-spawning shell tool call, and verifies the behavior without requiring this repository or any private fuzzing harness.
Affected target
- Target:
Blushyes/coro-code
- Affected version checked with the public reproducer:
0.0.8
- Current public latest checked on 2026-06-22: GitHub release
v0.0.8
- Environment: Linux x86_64 Docker, public release asset
- Provider/model: local OpenAI-compatible mock provider,
gpt-4o
Steps to reproduce
Prerequisites: Docker, Python 3, and the GitHub CLI (gh) for the clone command below. The linked reproducer is self-contained and uses only Python standard-library modules plus Docker. It downloads the affected public Linux release asset, starts a local mock provider, and runs the CLI in an isolated workspace. The Docker run is limited to 2 CPUs and 4 GiB RAM by default.
Complete self-contained reproducer: https://gist.github.com/N0zoM1z0/b4743d539603fa8e5ad304b080174c8d
The Gist contains coro-code-child-process-cleanup.reproduce.py. Download and run:
gh gist clone b4743d539603fa8e5ad304b080174c8d coro-code-child-process-cleanup-reproducer
cd coro-code-child-process-cleanup-reproducer
python3 coro-code-child-process-cleanup.reproduce.py
To reuse an already-built local image:
python3 coro-code-child-process-cleanup.reproduce.py --skip-build
Key output from a local run against the affected version:
provider_requests_at_least: observed=... expected>=1
side_effect_file_exists detached-child.pid: bytes=... expected>=1
pid_file_alive detached-child.pid: pid=... observed=True
REPRODUCED
Actual behavior
Coro Code accepts the child-spawning shell tool call, records the detached child PID side effect, reports the task as completed, and leaves the child process alive. The reproducer prints REPRODUCED only when provider traffic is observed, the child-spawning command records its PID, and the post-run probe can still signal that PID.
Expected behavior
Coro Code should track, terminate, and reap tool-started child processes before reporting the task complete.
Public upstream status: This report targets stock public coro-code v0.0.8 from the GitHub release asset. It is separate from the cancellation report because this issue is about generic detached child-process cleanup without a user interrupt. No upstream issue has been filed from this draft yet.
Summary
When Coro Code receives a shell tool call that starts a detached child process, the CLI reports task completion while the tool-started child process remains alive. The standalone reproducer downloads public
coro-code v0.0.8, starts a local OpenAI-compatible mock provider, sends a child-spawning shell tool call, and verifies the behavior without requiring this repository or any private fuzzing harness.Affected target
Blushyes/coro-code0.0.8v0.0.8gpt-4oSteps to reproduce
Prerequisites: Docker, Python 3, and the GitHub CLI (
gh) for the clone command below. The linked reproducer is self-contained and uses only Python standard-library modules plus Docker. It downloads the affected public Linux release asset, starts a local mock provider, and runs the CLI in an isolated workspace. The Docker run is limited to 2 CPUs and 4 GiB RAM by default.Complete self-contained reproducer: https://gist.github.com/N0zoM1z0/b4743d539603fa8e5ad304b080174c8d
The Gist contains
coro-code-child-process-cleanup.reproduce.py. Download and run:gh gist clone b4743d539603fa8e5ad304b080174c8d coro-code-child-process-cleanup-reproducer cd coro-code-child-process-cleanup-reproducer python3 coro-code-child-process-cleanup.reproduce.pyTo reuse an already-built local image:
Key output from a local run against the affected version:
Actual behavior
Coro Code accepts the child-spawning shell tool call, records the detached child PID side effect, reports the task as completed, and leaves the child process alive. The reproducer prints
REPRODUCEDonly when provider traffic is observed, the child-spawning command records its PID, and the post-run probe can still signal that PID.Expected behavior
Coro Code should track, terminate, and reap tool-started child processes before reporting the task complete.
Public upstream status: This report targets stock public
coro-code v0.0.8from the GitHub release asset. It is separate from the cancellation report because this issue is about generic detached child-process cleanup without a user interrupt. No upstream issue has been filed from this draft yet.