sandbox_child_nproc_limit` (PR #1497) merged 2026-05-27 but absent from all release binaries through v0.0.82
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 8.7k
- Forks
- 1.3k
- Avg merge
- 2d 11h
- Merged PRs (30d)
- 253
Description
Agent Diagnostic
- Investigated with Claude (agent-driven diagnosis on a 19-sandbox Docker-driver fleet)
- Tested OpenShell v0.0.72 (CLI/gateway/sandbox from GitHub release assets, x86_64-unknown-linux-gnu)
- Checked latest releases: downloaded release assets v0.0.74/76/78/80/82 and scanned both
openshell-gateway and openshell-sandbox binaries withstrings— no
sandbox_child_nproc_limit/nproc_limit/ RLIMIT_NPROC-related config token in any of them
(only Z3 "inprocess" noise in the gateway) - Cross-checked GitHub: PR #1497 merged into main 2026-05-27 (commit 9bfcad4); the
branch_commits/tag-containment view lists it as reachable from v0.0.51+, contradicting the
binary contents - Functional test on v0.0.72: added
sandbox_child_nproc_limit = 4096under
[openshell.drivers.docker] and [openshell.gateway] — gateway starts either way, but a bogus
test field is also silently accepted in both tables, so acceptance proves nothing - Recreated a sandbox from scratch after the config change: in-sandbox sessions still show
Max processes 512in /proc//limits - Searched existing issues for
sandbox_child_nproc_limit/ nproc: found #1390 / #1325
(shared-UID fleet reports) and PR #1497 itself, but no issue about the feature missing from
release binaries - Cannot upgrade to a fixed version because no published release contains the feature (verified
through v0.0.82)
Description
Summary
PR #1497 ("Make sandbox child nproc limit configurable", merged into main on 2026-05-27 as commit 9bfcad4) adds the sandbox_child_nproc_limit setting to lift the hardcoded RLIMIT_NPROC=512 for shared-UID fleet deployments. GitHub's tag-containment view lists the commit as reachable from tags v0.0.51 onward, but the published release binaries do not contain the feature.
Evidence
- String scan:
strings openshell-gateway | grep -i nproc(and the same foropenshell-sandbox) on release assets v0.0.72, v0.0.74, v0.0.76, v0.0.78, v0.0.80, v0.0.82 (*-x86_64-unknown-linux-gnu.tar.gz) shows nonproc_limit/RLIMIT_NPROC/sandbox_child_nproctoken — only Z3inprocessnoise in the gateway. - Functional test on v0.0.72 (Docker driver): adding
sandbox_child_nproc_limit = 4096under[openshell.drivers.docker]or[openshell.gateway]is silently accepted (note: a bogus test field is also silently accepted in both tables, so unknown TOML fields appear to be ignored), and a freshly recreated sandbox still showsMax processes 512for all in-sandbox sessions.
Expected
A published release ships PR #1497, so sandbox_child_nproc_limit = 4096 (or 0 to defer to the container cgroup pids limit) takes effect for newly created sandbox sessions.
Questions
- Which release is expected to ship PR #1497?
- Are the GitHub release assets built from a branch other than the tagged
mainhistory? (Tag-containment view vs. binary content disagree.) - Is the silent acceptance of unknown fields in
[openshell.gateway]/[openshell.drivers.docker]intended? v0.0.54 notes say unknown fields in nested gateway config tables are rejected.
Context / impact
19-sandbox single-host fleet (Docker driver); all sandbox inner sessions share one UID. At ~30–50 threads per sandbox the fleet saturates the hardcoded 512 and any new fork fails with EAGAIN (see also #1390 / #1325). We currently mitigate with a periodic prlimit --nproc=8192 systemd timer and would like to retire it.
Environment: openshell 0.0.72 (CLI/gateway/sandbox from GitHub release assets), Docker driver, Ubuntu host, NemoClaw v0.0.81+ (source main).
Reproduction Steps
Summary
PR #1497 ("Make sandbox child nproc limit configurable", merged into main on 2026-05-27 as commit 9bfcad4) adds the sandbox_child_nproc_limit setting to lift the hardcoded RLIMIT_NPROC=512 for shared-UID fleet deployments. GitHub's tag-containment view lists the commit as reachable from tags v0.0.51 onward, but the published release binaries do not contain the feature.
Evidence
- String scan:
strings openshell-gateway | grep -i nprocand same foropenshell-sandboxfrom release assets v0.0.72, v0.0.74, v0.0.76, v0.0.78, v0.0.80, v0.0.82 (*-x86_64-unknown-linux-gnu.tar.gz) show nonproc_limit/RLIMIT_NPROC/sandbox_child_nproctoken (only Z3inprocessnoise in the gateway). - Functional test on v0.0.72 (Docker driver): adding
sandbox_child_nproc_limit = 4096under[openshell.drivers.docker]or[openshell.gateway]is silently accepted (note: unknown TOML fields appear to be silently ignored in both tables — a bogus test field is also accepted), and a freshly recreated sandbox still showsMax processes 512for all in-sandbox sessions.
Questions
- Which release is expected to ship PR #1497?
- Are the GitHub release assets built from a branch other than the tagged
mainhistory? (Tag-containment view vs. binary content disagree.) - Is the silent acceptance of unknown fields in
[openshell.gateway]/[openshell.drivers.docker]intended? v0.0.54 notes say unknown fields in nested gateway config tables are rejected; that made our config validation attempts inconclusive.
Context / impact
19-sandbox single-host fleet, all sandbox inner sessions share one UID; at ~30–50 threads per sandbox the fleet saturates the hardcoded 512 and any new fork fails with EAGAIN (see also #1390 / #1325). We currently mitigate with a periodic prlimit --nproc=8192 systemd timer and would like to retire it.
Environment: openshell 0.0.72 (CLI/gateway/sandbox from GitHub release assets), Docker driver, Ubuntu host, NemoClaw v0.0.81+ (source main).
Environment
- OS: Ubuntu 24.04 (Nutanix VM)
- Docker: Docker Engine 29.1.3 (Docker driver)
- OpenShell: v0.0.72 (
openshell 0.0.72; CLI/gateway/sandbox binaries from GitHub release assets) - Latest release checked: yes — downloaded and string-scanned release assets up to v0.0.82; feature absent in all of them
- Possible duplicates checked: yes — found #1390 / #1325 (shared-UID nproc saturation reports) and PR #1497 itself; no existing issue about the feature missing from release binaries
- Agent stack: NemoClaw v0.0.81+ (source main) with Hermes Agent v0.18.0, 19-sandbox fleet
Logs
# String scan of v0.0.82 release assets (same result for v0.0.74–v0.0.80 and v0.0.72):
$ strings openshell-gateway | grep -ioE "[a-z_]*nproc[a-z_]*" | sort -u
inprocess
inprocessing
(only Z3 solver noise; no config token)
$ strings openshell-sandbox | grep -ioE "[a-z_]*nproc[a-z_]*" | sort -u
(no matches)
$ grep -ac "nproc_limit" openshell openshell-gateway openshell-sandbox
openshell:0
openshell-gateway:0
openshell-sandbox:0
# Functional test on v0.0.72: config accepted, no effect
$ grep -n nproc openshell-gateway.toml
32:sandbox_child_nproc_limit = 4096
$ pgrep -af openshell-gateway # gateway starts fine with the field present
2592034 openshell-gateway[nemoclaw=nemoclaw;port=8080]
# Freshly recreated sandbox after the config change:
$ docker exec <sandbox> sh -c 'for p in $(pgrep -f "hermes|socat"|head -3); do grep -i processes /proc/$p/limits; done'
Max processes 512 512 processes
Max processes 512 512 processes
Max processes 512 512 processes
# Bogus-field control test (shows unknown fields are silently ignored, both tables):
$ grep -n bogus openshell-gateway.toml
33:bogus_test_field_xyz = 1
$ pgrep -af openshell-gateway # still starts
2592100 openshell-gateway[nemoclaw=nemoclaw;port=8080]
Agent-First Checklist
- I pointed my agent at the repo and had it investigate this issue
- I loaded relevant skills (e.g.,
debug-openshell-cluster,debug-inference,openshell-cli) - I checked the latest OpenShell release and either reproduced the issue there or explained why I cannot upgrade/test it
- I searched existing issues for possible duplicates or explained why I could not
- My agent could not resolve this — the diagnostic above explains why
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by tracing PR #1497 at commit 9bfcad4 through the release assets for v0.0.72–v0.0.82 and the tagged build history. Compare the binaries with the source behavior for sandbox_child_nproc_limit and inspect how unknown configuration fields are handled in the gateway and Docker driver. Done means identifying the release/build discrepancy and confirming a published binary applies the setting and validates configuration as intended.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- docker, rust
- Domain
- build-system, release
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100