Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
623 commits
Select commit Hold shift + click to select a range
4463463
[SLOP(gpt-5)] test(kernel): stress pipe waiter cleanup
NathanFlurry Jun 11, 2026
3fc1504
[SLOP(gpt-5)] fix(kernel): wrap poll notifier generation
NathanFlurry Jun 11, 2026
96c6d8f
[SLOP(gpt-5)] fix(kernel): wrap process pid allocation
NathanFlurry Jun 11, 2026
67ddd66
[SLOP(gpt-5)] fix(kernel): preserve pty input on echo backpressure
NathanFlurry Jun 11, 2026
af36b36
[SLOP(gpt-5)] fix(kernel): bound socket receive queues
NathanFlurry Jun 11, 2026
f7b8a0c
[SLOP(gpt-5)] fix(kernel): bound root filesystem imports
NathanFlurry Jun 11, 2026
02c8527
[SLOP(gpt-5)] test(kernel): document supplementary group policy
NathanFlurry Jun 11, 2026
e032c91
[SLOP(gpt-5)] fix(kernel): fail closed on huge vfs growth
NathanFlurry Jun 11, 2026
65189ef
[SLOP(gpt-5)] fix(kernel): protect agentos hardlink aliases
NathanFlurry Jun 11, 2026
090f1e5
[SLOP(gpt-5)] test(sidecar): cover bridge permission outcomes
NathanFlurry Jun 11, 2026
b28d61e
[SLOP(gpt-5)] test(kernel): bound bridge symlink metadata
NathanFlurry Jun 11, 2026
6b227b1
[SLOP(gpt-5)] test(kernel): cover bounded device pread
NathanFlurry Jun 11, 2026
5f25b5d
[SLOP(gpt-5)] test(kernel): deny dns without network hook
NathanFlurry Jun 11, 2026
f0f358c
[SLOP(gpt-5)] test(kernel): reject command stub traversal
NathanFlurry Jun 11, 2026
3da0ff5
[SLOP(gpt-5)] test(kernel): cover loopback socket limits
NathanFlurry Jun 11, 2026
4ae3e67
[SLOP(gpt-5)] test(kernel): cover poll ownership edges
NathanFlurry Jun 11, 2026
2b2555f
[SLOP(gpt-5)] test(kernel): cover pid wrap allocation
NathanFlurry Jun 11, 2026
2a672de
[SLOP(gpt-5)] test(kernel): cover socket resource accounting
NathanFlurry Jun 11, 2026
f7d2ddc
[SLOP(gpt-5)] test(kernel): cover tcp buffer backpressure
NathanFlurry Jun 11, 2026
1dc9a3f
[SLOP(gpt-5)] test(kernel): cover tcp listener pending cleanup
NathanFlurry Jun 11, 2026
9bb8888
[SLOP(gpt-5)] test(kernel): cover udp queue backpressure
NathanFlurry Jun 11, 2026
4eff9c7
[SLOP(gpt-5)] test(kernel): cover virtual process socket cleanup
NathanFlurry Jun 11, 2026
1820a07
[SLOP(gpt-5)] fix(sidecar-browser): reap failed worker startup processes
NathanFlurry Jun 11, 2026
05d104c
[SLOP(gpt-5)] test(sidecar-browser): cover stdio setup cleanup
NathanFlurry Jun 11, 2026
0ceb8bb
[SLOP(gpt-5)] fix(acp): bound pending permission requests
NathanFlurry Jun 11, 2026
d6a30ae
[SLOP(gpt-5)] fix(acp): reject ambiguous json-rpc envelopes
NathanFlurry Jun 11, 2026
7ba21ed
[SLOP(gpt-5)] chore(acp): format module exports
NathanFlurry Jun 11, 2026
9ee0444
[SLOP(gpt-5)] fix(acp): bound stdout line buffers
NathanFlurry Jun 11, 2026
f41697c
[SLOP(gpt-5)] chore(acp): review timeout diagnostics finding
NathanFlurry Jun 11, 2026
179e4d5
[SLOP(gpt-5)] review(sidecar): triage bootstrap checklist finding
NathanFlurry Jun 11, 2026
f21aa55
[SLOP(gpt-5)] fix(sidecar): fail closed for missing mount-sensitive p…
NathanFlurry Jun 11, 2026
a54738b
[SLOP(gpt-5)] fix(sidecar): route http2 file responses through vm fs
NathanFlurry Jun 11, 2026
39fc26a
[SLOP(gpt-5)] fix(sidecar): confine mapped host materialization
NathanFlurry Jun 11, 2026
1618d16
[SLOP(gpt-5)] review(sidecar): triage lib export finding
NathanFlurry Jun 11, 2026
0fe0cfd
[SLOP(gpt-5)] fix(sidecar): route startup failures through tracing
NathanFlurry Jun 11, 2026
aa9e6b1
[SLOP(gpt-5)] fix(sidecar): bound google drive manifest loading
NathanFlurry Jun 11, 2026
f422faf
[SLOP(gpt-5)] fix(sidecar): bound host dir reads
NathanFlurry Jun 11, 2026
2b7c54e
[SLOP(gpt-5)] fix(sidecar): bound js bridge read payloads
NathanFlurry Jun 11, 2026
5e642b9
[SLOP(gpt-5)] review(sidecar): triage plugin registry finding
NathanFlurry Jun 11, 2026
3c2a214
[SLOP(gpt-5)] fix(sidecar): validate canonical module access roots
NathanFlurry Jun 11, 2026
e598a1d
[SLOP(gpt-5)] fix(sidecar): harden s3 mount endpoints and manifests
NathanFlurry Jun 11, 2026
ef6584d
[SLOP(gpt-5)] fix(sidecar): harden sandbox agent mount boundaries
NathanFlurry Jun 11, 2026
093f06f
[SLOP(gpt-5)] review(sidecar): triage protocol boundary finding
NathanFlurry Jun 11, 2026
4b7242a
[SLOP(gpt-5)] fix(sidecar): bound process event queues
NathanFlurry Jun 11, 2026
0d39437
[SLOP(gpt-5)] fix(sidecar): bound per-process state handles
NathanFlurry Jun 11, 2026
cd542c6
[SLOP(gpt-5)] fix(sidecar): bound stdio frame queues
NathanFlurry Jun 11, 2026
7e08d42
[SLOP(gpt-5)] fix(sidecar): bound toolkit registration
NathanFlurry Jun 11, 2026
ef301d6
[SLOP(gpt-5)] fix(sidecar): bound VM layer store
NathanFlurry Jun 11, 2026
21bd41f
[SLOP(gpt-5)] test(acp): cover client read line cap
NathanFlurry Jun 11, 2026
463e078
[SLOP(gpt-5)] chore(acp): review test module wiring
NathanFlurry Jun 11, 2026
d3495c1
[SLOP(gpt-5)] chore(acp): review integration test entrypoint
NathanFlurry Jun 11, 2026
1077366
[SLOP(gpt-5)] fix(sidecar): bound sidecar callback queues
NathanFlurry Jun 11, 2026
feb401a
[SLOP(gpt-5)] chore(sidecar): review bridge test coverage
NathanFlurry Jun 11, 2026
be8a345
[SLOP(gpt-5)] test(sidecar): bound builtin probe output
NathanFlurry Jun 11, 2026
48c4ba3
[SLOP(gpt-5)] test(sidecar): bound builtin conformance output
NathanFlurry Jun 11, 2026
e4c7b46
[SLOP(gpt-5)] test(sidecar): assert auth rejection leaves no connection
NathanFlurry Jun 11, 2026
7a98471
[SLOP(gpt-5)] test(sidecar): bound crash isolation output
NathanFlurry Jun 11, 2026
ab2c7c6
[SLOP(gpt-5)] test(sidecar): bound fetch undici harness
NathanFlurry Jun 11, 2026
2b71ef4
[SLOP(gpt-5)] test(sidecar): bound filesystem test output
NathanFlurry Jun 11, 2026
a47adeb
[SLOP(gpt-5)] test(sidecar): bound fs watch output
NathanFlurry Jun 11, 2026
29b1cd8
[SLOP(gpt-5)] fix(google-drive): reject escaped manifest chunks
NathanFlurry Jun 11, 2026
73554f3
[SLOP(gpt-5)] test(sidecar): bound guest identity output
NathanFlurry Jun 11, 2026
4c8df25
[SLOP(gpt-5)] chore(sidecar): review host dir tests
NathanFlurry Jun 11, 2026
72e9bae
[SLOP(gpt-5)] test(sidecar): bound kill cleanup output
NathanFlurry Jun 11, 2026
443b7f6
[SLOP(gpt-5)] chore(sidecar): review layer management tests
NathanFlurry Jun 11, 2026
6cd3cbd
[SLOP(gpt-5)] test(sidecar): cover empty pattern permission operations
NathanFlurry Jun 11, 2026
f55ebfb
[SLOP(gpt-5)] test(sidecar): bound posix event waits
NathanFlurry Jun 11, 2026
5f2cf12
[SLOP(gpt-5)] test(sidecar): bound posix path repro output
NathanFlurry Jun 11, 2026
95adb5f
[SLOP(gpt-5)] test(sidecar): bound process isolation output
NathanFlurry Jun 11, 2026
360eb76
[SLOP(gpt-5)] fix(sidecar): preserve pending protocol responses
NathanFlurry Jun 11, 2026
969c949
[SLOP(gpt-5)] test(sidecar): harden python test harness
NathanFlurry Jun 11, 2026
7de8005
[SLOP(gpt-5)] fix(sidecar): reject escaped s3 manifest chunks
NathanFlurry Jun 11, 2026
45955df
[SLOP(gpt-5)] fix(sidecar): normalize sandbox agent base paths
NathanFlurry Jun 11, 2026
2aad9dc
[SLOP(gpt-5)] test(sidecar): bound security audit kill output
NathanFlurry Jun 11, 2026
1099b26
[SLOP(gpt-5)] test(sidecar): bound security hardening output
NathanFlurry Jun 11, 2026
0202451
[SLOP(gpt-5)] test(sidecar): bound service process output
NathanFlurry Jun 11, 2026
7c41963
[SLOP(gpt-5)] test(sidecar): cover same-connection session isolation
NathanFlurry Jun 11, 2026
000427d
[SLOP(gpt-5)] test(sidecar): reject invalid kill signals
NathanFlurry Jun 11, 2026
771551d
[SLOP(gpt-5)] test(sidecar): isolate socket state queries by vm
NathanFlurry Jun 11, 2026
05131d7
[SLOP(gpt-5)] test(sidecar): bound stdio binary readers
NathanFlurry Jun 11, 2026
5574bba
[SLOP(gpt-5)] test(sidecar): bound shared process output collector
NathanFlurry Jun 11, 2026
5de5743
[SLOP(gpt-5)] test(sidecar): assert lifecycle snapshot isolation
NathanFlurry Jun 11, 2026
40a50da
[SLOP(gpt-5)] fix(v8-runtime): bound cbor bridge conversion
NathanFlurry Jun 11, 2026
155385e
[SLOP(gpt-5)] fix(v8-runtime): bound vm context registry
NathanFlurry Jun 11, 2026
6d53fa8
[SLOP(gpt-5)] fix(v8-runtime): bound pending bridge promises
NathanFlurry Jun 11, 2026
951c385
[SLOP(gpt-5)] fix(v8-runtime): avoid bridge buffer reentry borrow
NathanFlurry Jun 11, 2026
47bce22
[SLOP(gpt-5)] fix(v8-runtime): drop embedded runtime cleanly
NathanFlurry Jun 11, 2026
3badee6
[SLOP(gpt-5)] fix(v8-runtime): fail invalid globals payloads
NathanFlurry Jun 11, 2026
7557568
[SLOP(gpt-5)] fix(v8-runtime): bound module resolution growth
NathanFlurry Jun 11, 2026
3abfd31
[SLOP(gpt-5)] fix(v8-runtime): clear sync bridge call routes
NathanFlurry Jun 11, 2026
a125322
[SLOP(gpt-5)] fix(v8-runtime): reject malformed ipc frames
NathanFlurry Jun 11, 2026
f09120d
[SLOP(gpt-5)] fix(v8-runtime): bound unhandled rejection tracking
NathanFlurry Jun 11, 2026
53a6a00
[SLOP(gpt-5)] fix(v8-runtime): reject unknown protocol variants
NathanFlurry Jun 11, 2026
e283d2c
[SLOP(gpt-5)] fix(v8-runtime): bound session deferred queues
NathanFlurry Jun 11, 2026
f5e72b0
[SLOP(gpt-5)] fix(v8-runtime): cap V8 bridge code size
NathanFlurry Jun 11, 2026
9b78782
[SLOP(gpt-5)] fix(v8-runtime): key snapshots by bridge digest
NathanFlurry Jun 11, 2026
8a528bf
[SLOP(gpt-5)] fix(v8-runtime): handle timeout guard spawn failure
NathanFlurry Jun 11, 2026
9d4fc3a
[SLOP(gpt-5)] fix(v8-runtime): normalize zero CPU timeouts
NathanFlurry Jun 11, 2026
b908583
[SLOP(gpt-5)] test(v8-runtime): bound event loop tests
NathanFlurry Jun 11, 2026
39ba9d5
[SLOP(gpt-5)] fix(wasi-ext): validate poll ready counts
NathanFlurry Jun 11, 2026
d6df92f
[SLOP(gpt-5)] fix(awk): fail on stdout flush errors
NathanFlurry Jun 11, 2026
75c397a
[SLOP(gpt-5)] fix(cat): fail on stdout flush errors
NathanFlurry Jun 11, 2026
51f0bc1
[SLOP(gpt-5)] fix(codex): bound TUI state and restore terminal
NathanFlurry Jun 11, 2026
a809564
[SLOP(gpt-5)] fix(codex-exec): bound prompts and avoid echoing
NathanFlurry Jun 11, 2026
d32b166
[SLOP(gpt-5)] fix(curl): validate header arguments
NathanFlurry Jun 11, 2026
bc95625
[SLOP(gpt-5)] fix(grep): fail on stdout flush errors
NathanFlurry Jun 11, 2026
6eaec88
[SLOP(gpt-5)] fix(head): fail on stdout flush errors
NathanFlurry Jun 11, 2026
ceb83f6
[SLOP(gpt-5)] fix(http-test): validate headers and bound sse
NathanFlurry Jun 11, 2026
282b52e
[SLOP(gpt-5)] fix(jq): fail on stdout flush errors
NathanFlurry Jun 11, 2026
54c38f5
[SLOP(gpt-5)] fix(mv): guard recursive and same-file moves
NathanFlurry Jun 11, 2026
f03216b
[SLOP(gpt-5)] test(nohup): clean up streaming child
NathanFlurry Jun 12, 2026
8731958
[SLOP(gpt-5)] chore(review): close rmdir triage
NathanFlurry Jun 12, 2026
af67f89
[SLOP(gpt-5)] fix(sed): fail on stdout flush errors
NathanFlurry Jun 12, 2026
1322cc7
[SLOP(gpt-5)] chore(review): close seq triage
NathanFlurry Jun 12, 2026
da3aa30
[SLOP(gpt-5)] chore(review): close sh triage
NathanFlurry Jun 12, 2026
0585679
[SLOP(gpt-5)] chore(review): close sha1sum triage
NathanFlurry Jun 12, 2026
b59d6fb
[SLOP(gpt-5)] chore(review): close sha224sum triage
NathanFlurry Jun 12, 2026
03566be
[SLOP(gpt-5)] chore(review): close sha256sum triage
NathanFlurry Jun 12, 2026
f2d2e5d
[SLOP(gpt-5)] chore(review): close sha384sum triage
NathanFlurry Jun 12, 2026
622333a
[SLOP(gpt-5)] chore(review): close sha512sum triage
NathanFlurry Jun 12, 2026
d6df856
[SLOP(gpt-5)] chore(review): close shred triage
NathanFlurry Jun 12, 2026
0ac089b
[SLOP(gpt-5)] chore(review): close shuf triage
NathanFlurry Jun 12, 2026
fe097f3
[SLOP(gpt-5)] chore(review): close sleep triage
NathanFlurry Jun 12, 2026
d9c13eb
[SLOP(gpt-5)] fix(sort): fail on stdout flush errors
NathanFlurry Jun 12, 2026
19f126d
[SLOP(gpt-5)] fix(commands): remove test harness commands from defaults
NathanFlurry Jun 12, 2026
b1fb6c0
[SLOP(gpt-5)] chore(review): close split triage
NathanFlurry Jun 12, 2026
3a3f25d
[SLOP(gpt-5)] chore(review): close stat triage
NathanFlurry Jun 12, 2026
df98ade
[SLOP(gpt-5)] chore(review): close stdbuf entrypoint triage
NathanFlurry Jun 12, 2026
6fb497c
[SLOP(gpt-5)] test(stdbuf): clean up streaming child
NathanFlurry Jun 12, 2026
ccc4a5d
[SLOP(gpt-5)] chore(review): close strings entrypoint triage
NathanFlurry Jun 12, 2026
4ff0c01
[SLOP(gpt-5)] chore(review): close sum triage
NathanFlurry Jun 12, 2026
d9a1091
[SLOP(gpt-5)] chore(review): close tac triage
NathanFlurry Jun 12, 2026
81b0b7f
[SLOP(gpt-5)] chore(review): close tail triage
NathanFlurry Jun 12, 2026
534eae1
[SLOP(gpt-5)] chore(review): close tar entrypoint triage
NathanFlurry Jun 12, 2026
4c7633c
[SLOP(gpt-5)] chore(review): close tee triage
NathanFlurry Jun 12, 2026
1eb605c
[SLOP(gpt-5)] chore(review): close test entrypoint triage
NathanFlurry Jun 12, 2026
61b6419
[SLOP(gpt-5)] chore(review): close timeout entrypoint triage
NathanFlurry Jun 12, 2026
1b66384
[SLOP(gpt-5)] chore(review): close touch triage
NathanFlurry Jun 12, 2026
fd56e17
[SLOP(gpt-5)] chore(review): close tr triage
NathanFlurry Jun 12, 2026
b8bca62
[SLOP(gpt-5)] chore(review): close tree entrypoint triage
NathanFlurry Jun 12, 2026
882ee7b
[SLOP(gpt-5)] chore(review): close true triage
NathanFlurry Jun 12, 2026
3eca435
[SLOP(gpt-5)] chore(review): close truncate triage
NathanFlurry Jun 12, 2026
39867c6
[SLOP(gpt-5)] chore(review): close tsort triage
NathanFlurry Jun 12, 2026
1a4099c
[SLOP(gpt-5)] chore(review): close uname triage
NathanFlurry Jun 12, 2026
4e50df8
[SLOP(gpt-5)] chore(review): close unexpand triage
NathanFlurry Jun 12, 2026
2c39dcb
[SLOP(gpt-5)] chore(review): close uniq triage
NathanFlurry Jun 12, 2026
4b4c6b8
[SLOP(gpt-5)] chore(review): close unlink triage
NathanFlurry Jun 12, 2026
1a4fe9f
[SLOP(gpt-5)] chore(review): close wc triage
NathanFlurry Jun 12, 2026
8d07f94
[SLOP(gpt-5)] chore(review): close which entrypoint triage
NathanFlurry Jun 12, 2026
3516e4e
[SLOP(gpt-5)] chore(review): close which executable tests
NathanFlurry Jun 12, 2026
88632ed
[SLOP(gpt-5)] chore(review): close whoami entrypoint triage
NathanFlurry Jun 12, 2026
fde6616
[SLOP(gpt-5)] chore(review): close xargs entrypoint triage
NathanFlurry Jun 12, 2026
453c1a3
[SLOP(gpt-5)] fix(coreutils): remove xu test binary from package surface
NathanFlurry Jun 12, 2026
77852ed
[SLOP(gpt-5)] chore(review): close yes entrypoint triage
NathanFlurry Jun 12, 2026
36e9d45
[SLOP(gpt-5)] chore(review): close yq entrypoint triage
NathanFlurry Jun 12, 2026
c205fac
[SLOP(gpt-5)] chore(review): close awk library triage
NathanFlurry Jun 12, 2026
29a3454
[SLOP(gpt-5)] fix(builtins): harden sleep mediation
NathanFlurry Jun 12, 2026
15fb561
[SLOP(gpt-5)] fix(column): fail on output write errors
NathanFlurry Jun 12, 2026
63a95a9
[SLOP(gpt-5)] fix(diff): check output and directory recursion
NathanFlurry Jun 12, 2026
67faff3
[SLOP(gpt-5)] fix(du): check output and traversal errors
NathanFlurry Jun 12, 2026
fef8b1a
[SLOP(gpt-5)] fix(expr): check output and arithmetic bounds
NathanFlurry Jun 12, 2026
66b1188
[SLOP(gpt-5)] fix(fd): check output and traversal errors
NathanFlurry Jun 12, 2026
1325d80
[SLOP(gpt-5)] fix(file): bound stdin detection and check output
NathanFlurry Jun 12, 2026
6514381
[SLOP(gpt-5)] fix(find): check output and traversal errors
NathanFlurry Jun 12, 2026
c9e0ebb
[SLOP(gpt-5)] fix(git): harden paths and pack parsing
NathanFlurry Jun 12, 2026
89a815c
[SLOP(gpt-5)] fix(grep): check output and bound inputs
NathanFlurry Jun 12, 2026
34f48c5
[SLOP(gpt-5)] fix(rg): check output and bound traversal
NathanFlurry Jun 12, 2026
a15b4cd
[SLOP(gpt-5)] fix(gzip): flush compressed output
NathanFlurry Jun 12, 2026
0323fd0
[SLOP(gpt-5)] fix(jq): check output and bound input
NathanFlurry Jun 12, 2026
018a40a
[SLOP(gpt-5)] fix(rev): bound input line buffering
NathanFlurry Jun 12, 2026
b6bc420
[SLOP(gpt-5)] fix(env): stream child stdio and check output
NathanFlurry Jun 12, 2026
59304f9
[SLOP(gpt-5)] chore(shims): triage module exports
NathanFlurry Jun 12, 2026
71c7933
[SLOP(gpt-5)] fix(nice): check no-command output
NathanFlurry Jun 12, 2026
93feeea
[SLOP(gpt-5)] chore(nohup): triage streaming shim
NathanFlurry Jun 12, 2026
b2874f9
[SLOP(gpt-5)] chore(stdbuf): triage streaming shim
NathanFlurry Jun 12, 2026
dd7a849
[SLOP(gpt-5)] fix(timeout): validate durations and reap child
NathanFlurry Jun 12, 2026
821b05a
[SLOP(gpt-5)] fix(which): check output and stream matches
NathanFlurry Jun 12, 2026
98574e9
[SLOP(gpt-5)] fix(xargs): bound input and check echo output
NathanFlurry Jun 12, 2026
2bb9f67
[SLOP(gpt-5)] fix(strings): stream input and check output
NathanFlurry Jun 12, 2026
7c0c77b
[SLOP(gpt-5)] fix(stubs): check default output
NathanFlurry Jun 12, 2026
7eba941
[SLOP(gpt-5)] fix(tar): stream archives and validate extraction
NathanFlurry Jun 12, 2026
29202e8
[SLOP(gpt-5)] fix(tree): bound traversal and check output
NathanFlurry Jun 12, 2026
0e60c3d
[SLOP(gpt-5)] fix(wasi-http): bound IO and validate protocol fields
NathanFlurry Jun 12, 2026
615299f
[SLOP(gpt-5)] fix(wasi-pty): bound pty capture and cleanup
NathanFlurry Jun 12, 2026
0a4563f
[SLOP(gpt-5)] fix(wasi-spawn): multiplex captured pipes
NathanFlurry Jun 12, 2026
a8a5af3
[SLOP(gpt-5)] fix(yq): bound input xml and output
NathanFlurry Jun 12, 2026
92190f5
[SLOP(gpt-5)] test(codex-network-proxy): lock stub invariants
NathanFlurry Jun 12, 2026
318dae5
[SLOP(gpt-5)] chore(codex-otel): triage config stub
NathanFlurry Jun 12, 2026
4d04f23
[SLOP(gpt-5)] test(codex-otel): cover session telemetry stubs
NathanFlurry Jun 12, 2026
2f37e44
[SLOP(gpt-5)] test(codex-otel): cover metrics client stub invariants
NathanFlurry Jun 12, 2026
b9e5dc7
[SLOP(gpt-5)] test(codex-otel): cover metric name constants
NathanFlurry Jun 12, 2026
37e0912
[SLOP(gpt-5)] chore(uucore): mark checksum validation reviewed
NathanFlurry Jun 12, 2026
b241637
[SLOP(gpt-5)] chore(uucore): triage static color tables
NathanFlurry Jun 12, 2026
05c81eb
[SLOP(gpt-5)] fix(uucore): rollback padded base64 decode errors
NathanFlurry Jun 12, 2026
6127935
[SLOP(gpt-5)] chore(uucore): mark entries identity reviewed
NathanFlurry Jun 12, 2026
0d51199
[SLOP(gpt-5)] chore(uucore): triage extended decimal wrapper
NathanFlurry Jun 12, 2026
d2c1bac
[SLOP(gpt-5)] chore(uucore): triage fast increment helpers
NathanFlurry Jun 12, 2026
b0749e2
[SLOP(gpt-5)] chore(uucore): triage format argument cursor
NathanFlurry Jun 12, 2026
ca76f1e
[SLOP(gpt-5)] chore(uucore): triage format escape parser
NathanFlurry Jun 12, 2026
3e941b4
[SLOP(gpt-5)] chore(uucore): triage human size formatter
NathanFlurry Jun 12, 2026
509035e
[SLOP(gpt-5)] chore(uucore): mark parse-time review done
NathanFlurry Jun 12, 2026
d9aa63c
[SLOP(gpt-5)] chore(uucore): mark shortcut parser reviewed
NathanFlurry Jun 12, 2026
8e39c8b
[SLOP(gpt-5)] chore(uucore): mark permissions review done
NathanFlurry Jun 12, 2026
d76a455
[SLOP(gpt-5)] chore(uucore): mark pipes review done
NathanFlurry Jun 12, 2026
635566e
[SLOP(gpt-5)] chore(uucore): mark proc info review done
NathanFlurry Jun 12, 2026
b2e1383
[SLOP(gpt-5)] chore(uucore): mark process helpers reviewed
NathanFlurry Jun 12, 2026
a2aed4e
[SLOP(gpt-5)] chore(uucore): mark c quoter reviewed
NathanFlurry Jun 12, 2026
27980c3
[SLOP(gpt-5)] chore(uucore): mark escaped char reviewed
NathanFlurry Jun 12, 2026
ecb57be
[SLOP(gpt-5)] chore(uucore): mark quoting style reviewed
NathanFlurry Jun 12, 2026
3ffa300
[SLOP(gpt-5)] chore(uucore): mark shell quoter reviewed
NathanFlurry Jun 12, 2026
c0a3e5e
[SLOP(gpt-5)] chore(uucore): mark ring buffer reviewed
NathanFlurry Jun 12, 2026
d9d3851
[SLOP(gpt-5)] chore(audit): normalize checklist completion statuses
NathanFlurry Jun 12, 2026
c5beef0
[SLOP(claude-fable-5)] fix(kernel): remove drained pty read waiters f…
NathanFlurry Jun 12, 2026
1c833a3
[SLOP(claude-fable-5)] fix(v8-runtime): join destroyed session thread…
NathanFlurry Jun 12, 2026
500a408
[SLOP(claude-fable-5)] fix(unzip): harden fallback zip parser bounds,…
NathanFlurry Jun 12, 2026
be4dda4
[SLOP(claude-fable-5)] fix(client): wire sidecar permission requests …
NathanFlurry Jun 12, 2026
574112a
[SLOP(claude-fable-5)] fix(sort): soft-skip unsupported ctrlc registr…
NathanFlurry Jun 12, 2026
2a2063b
[SLOP(claude-fable-5)] fix(pi): preserve require error when inline ex…
NathanFlurry Jun 12, 2026
a92d8d6
[SLOP(claude-fable-5)] fix(v8-runtime): restore bounded runtime cjs e…
NathanFlurry Jun 13, 2026
56bf445
[SLOP(claude-fable-5)] refactor(sidecar): enumerate prompt-interrupt …
NathanFlurry Jun 13, 2026
454933b
[SLOP(claude-fable-5)] style(core): re-indent browserbase e2e and run…
NathanFlurry Jun 13, 2026
66b52f1
[SLOP(claude-fable-5)] docs(claude): add review-derived constraints f…
NathanFlurry Jun 13, 2026
c9187f1
[SLOP(claude-fable-5)] refactor(sidecar): route shell-mode child_proc…
NathanFlurry Jun 13, 2026
6e78f5d
[SLOP(claude-fable-5)] refactor(execution): drop guest exec redirect …
NathanFlurry Jun 13, 2026
1955a8b
[SLOP(claude-fable-5)] refactor(core): route rpc-client shell exec an…
NathanFlurry Jun 13, 2026
e910d51
[SLOP(claude-fable-5)] test(registry): cover shell-mode exec redirect…
NathanFlurry Jun 13, 2026
d07d021
[SLOP(claude-fable-5)] fix(execution): feed shell stdin file redirect…
NathanFlurry Jun 13, 2026
4fba9f0
[SLOP(claude-fable-5)] fix(kernel): mount nested filesystems under re…
NathanFlurry Jun 13, 2026
ee228eb
[SLOP(claude-fable-5)] fix(kernel): give each memory filesystem insta…
NathanFlurry Jun 13, 2026
c797b15
[SLOP(claude-fable-5)] fix(sidecar): implement pid and process-group …
NathanFlurry Jun 13, 2026
a6be200
[SLOP(claude-fable-5)] fix(execution): surface errno codes from proce…
NathanFlurry Jun 13, 2026
0bd1a88
[SLOP(claude-fable-5)] test(core): cover detached shell spawn and gro…
NathanFlurry Jun 13, 2026
7cd46fa
[SLOP(claude-opus-4-8)] refactor(pi): drop agent-os bash operations o…
NathanFlurry Jun 13, 2026
36bd435
[SLOP(claude-opus-4-8)] test(core): add vanilla Pi bash integration c…
NathanFlurry Jun 13, 2026
272d530
[SLOP(claude-opus-4-8)] test(core): skip pi bash redirect cases pendi…
NathanFlurry Jun 13, 2026
91d8ba5
[SLOP(claude-opus-4-8)] feat(sidecar): add VmLimits typed limits conf…
NathanFlurry Jun 13, 2026
02d6426
[SLOP(claude-opus-4-8)] test(sidecar): add limits inventory audit tes…
NathanFlurry Jun 13, 2026
ee757b5
[SLOP(claude-opus-4-8)] docs: add limit constant classification rule …
NathanFlurry Jun 13, 2026
7fb7e6a
[SLOP(claude-opus-4-8)] chore: stop gitignore core-dump rule from ign…
NathanFlurry Jun 13, 2026
7c8f1a6
[SLOP(claude-opus-4-8)] feat(core): add limits option to AgentOsOptio…
NathanFlurry Jun 13, 2026
efc4ce0
[SLOP(claude-opus-4-8)] docs: add shell-grammar and linux-semantics c…
NathanFlurry Jun 13, 2026
2762d33
[SLOP(claude-opus-4-8)] chore: ignore transient repro and vitest time…
NathanFlurry Jun 13, 2026
5981e5b
[SLOP(claude-opus-4-8)] merge: reconcile review/fix stack with origin…
NathanFlurry Jun 13, 2026
a92a3a5
[SLOP(claude-opus-4-8)] feat(protocol): add additional_instructions a…
NathanFlurry Jun 13, 2026
3777eb9
[SLOP(claude-opus-4-8)] feat(sidecar): embed AGENTOS_SYSTEM_PROMPT an…
NathanFlurry Jun 13, 2026
dd60433
[SLOP(claude-opus-4-8)] refactor(core,client): pass only additional/s…
NathanFlurry Jun 13, 2026
6241da8
[SLOP(claude-opus-4-8)] chore: drop baked /etc/agentos/instructions.m…
NathanFlurry Jun 13, 2026
d7bc93d
[SLOP(claude-opus-4-8)] refactor(registry): drop obsolete prepareInst…
NathanFlurry Jun 13, 2026
4727c20
[SLOP(claude-opus-4-8)] test: cover sidecar-owned dynamic system prom…
NathanFlurry Jun 13, 2026
37c45a1
[SLOP(claude-opus-4-8)] revert(client): keep flat-only package resolv…
NathanFlurry Jun 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -74,3 +74,7 @@ packages/browser/.cache/
# Vendored V8 bridge bundles staged at release time for crates.io publishing
crates/execution/assets/generated/
crates/v8-runtime/assets/generated/

# Transient repro scratch files and Vite/Vitest config timestamp artifacts
.tmp-*
*.timestamp-*.mjs
23 changes: 22 additions & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ Agent OS is a **fully virtualized operating system**. The kernel, written as a R
- **Base filesystem rebuild flow:** `pnpm --dir packages/core snapshot:alpine-defaults` writes `alpine-defaults.json`, then `pnpm --dir packages/core build:base-filesystem` rewrites AgentOs-specific values and emits `base-filesystem.json`.
- **The default VM filesystem model should be Docker-like.** Layered overlay view with one writable upper layer on top of one or more immutable lower snapshot layers.
- **Everything runs inside the VM.** Agent processes, servers, network requests -- all spawned inside the Agent OS kernel, never on the host. This is a hard rule with no exceptions.
- **Present normal Linux semantics to tools.** Never bend agent SDKs, shell tools, or adapters around Agent OS quirks when the correct fix is implementing standard Linux/Node/POSIX behavior in the runtime. Agent-specific patches are acceptable only for explicit product policy, configuration, or upstream SDK bugs.

## Native Binary Distribution

Expand Down Expand Up @@ -145,11 +146,17 @@ When the user asks to track something in a note, store it in `~/.agents/notes/`
## Error Handling

- Always return anyhow errors from failable Rust functions. Do not glob-import from anyhow. Prefer `.context()` over the `anyhow!` macro.
- A failing fallback path must rethrow the original error with the fallback's failure attached as context. Never let the fallback's error replace the original.

## Runtime Limits

- **Every new limit-shaped constant must be classified.** Any `MAX_*` / `*_LIMIT` / `*_CAPACITY` / retention / sizing constant added under the scanned roots must get an entry in `crates/sidecar/tests/fixtures/limits-inventory.json`: either `policy` (wired through `VmLimits` with a `wired` field naming its config field) or `invariant`/`policy-deferred` with a one-line rationale. The `cargo test -p agent-os-sidecar --test limits_audit` audit fails when a qualifying constant is unclassified.

## Fail-By-Default Runtime

- Avoid silent no-ops for required runtime behavior. If a capability is required, validate it and throw an explicit error with actionable context instead of returning early.
- Do not use optional chaining for required lifecycle and bridge operations. Optional chaining is acceptable only for best-effort diagnostics and cleanup paths (logging hooks, dispose/release cleanup).
- Never land a public callback, stream, or event API without a wired delivery source. If the source is not wired yet, the doc comment must say so explicitly so callers do not wait on a stream that never yields.

## Async Rust Locks

Expand All @@ -167,6 +174,9 @@ When the user asks to track something in a note, store it in `~/.agents/notes/`
- Reserve `tokio::time::sleep` for per-call timeouts, retry/reconnect backoff, deliberate debounce windows, or `sleep_until(deadline)` arms in an event-select loop. A `loop { check; sleep }` body is polling and should be event-driven instead.
- `scc` async methods do not hold locks across `.await` points. Use `entry_async` for atomic read-then-write.
- Never add unexplained wall-clock defers like `sleep(1ms)` to decouple a spawn from its caller. Use `tokio::task::yield_now().await` or rely on the spawn itself.
- Polling is forbidden in every language and layer, not just Rust. Never wait for a state change by re-checking in a loop in TypeScript, tests, or shell. Wait on an event: a Notify/watch channel, promise, callback, process exit, or stream EOF. If an external system genuinely offers no event signal, bound the poll with a deadline and justify it in a comment.
- Never block while holding a lock. No bounded-channel sends, thread joins, or IO under any lock guard. Remove or copy the needed state under the lock, release it, then do the blocking work.
- Code that registers a waiter or pending entry in a shared queue must remove it on every exit path: success, early drain, timeout, and error.

## Memory Leaks

Expand All @@ -176,6 +186,11 @@ When the user asks to track something in a note, store it in `~/.agents/notes/`
- `std::mem::forget` is only acceptable when an FFI handle cannot be dropped in the current context; document the constraint inline, prove the leak is bounded, and prefer routing cleanup through an Env-bearing owner.
- Spawned futures that capture JS callbacks or other heavy resources must have a guaranteed completion path (e.g. a `CancellationToken` whose clones are guaranteed to drop). A `spawn_local(async move { token.cancelled().await; ... })` only drains if every clone of the token is dropped or cancelled.

## Untrusted Input

- Write parser bounds checks in subtraction form after an explicit minimum-length guard (`len >= off && len - off >= n`), never `off + n > len`, which wraps on 32-bit targets.
- Cap any allocation whose size derives from untrusted input before allocating.

## Testing

- **Never use `vi.mock`, `jest.mock`, or module-level mocking.** Write tests against real infrastructure (real kernel, real filesystems, real processes). For LLM calls, use `@copilotkit/llmock` to run a mock LLM server. For protocol-level test doubles (e.g., ACP adapters), write hand-written scripts that run as real processes. `vi.fn()` for simple callback tracking is acceptable.
Expand All @@ -186,10 +201,15 @@ When the user asks to track something in a note, store it in `~/.agents/notes/`

- This repo uses jj (Jujutsu) on top of git. **jj's workflow is inverted from git:** the working copy is itself a revision that auto-tracks edits, so you create a new revision *before* making changes (with `jj new`) rather than committing *after* (`git commit`). The description is set separately via `jj describe`. There is no staging step.
- Before making changes, check whether jj is initialized by running `jj status`. If it fails (e.g. "There is no jj repo in '.'"), run `jj git init --colocate` from the repo root so jj lives alongside the existing `.git` directory. Do NOT run `jj git init` without `--colocate` — that creates a standalone jj repo and breaks the git workflow.
- **MUST run `jj new` before making any file edits for a new task.** This is the first step of any task that touches files. Run it before reading, before planning, before editing. The only exception is when you are directly fixing or finishing the change at `@` that you just made in this same session. In that case use `jj squash --into <rev>` or `jj edit <rev>`. If you already started editing without running `jj new`, stop and split the changes with `JJ_EDITOR=true jj split <paths>` before continuing. Each revision must be one self-contained change reviewable on its own. Never mix unrelated work into one revision.
- **One revision = one self-contained change. MUST run `jj new` before starting each change**, before reading, planning, or editing. The unit is the *change*, not the *task*, *request*, or *session*. A single user request routinely contains several unrelated changes (a fix here, a refactor there, a test update); each one is its own revision, so run `jj new` again the moment you move on to the next change. Do not let edits pile up in one revision just because they came from one prompt or one work session.
- **Heuristic for "is this one revision or several?"** If a single `jj describe` line cannot honestly describe the whole diff without the word "and", or the diff spans unrelated subsystems/concerns (e.g. a test fix plus a build change plus an adapter tweak), it is more than one revision. Err toward more, smaller revisions. A revision touching a dozen files across many subsystems under a vague message like "triage failed tests" is the anti-pattern, not the goal.
- Run it before reading, before planning, before editing. The only exception is when you are directly fixing or finishing the change at `@` that you just made in this same session. In that case use `jj squash --into <rev>` or `jj edit <rev>`. If you already started editing and find the working copy now mixes unrelated changes, stop immediately and split them apart with `JJ_EDITOR=true jj split <paths>` before continuing. Never mix unrelated work into one revision.
- Set the revision description with `jj describe -m "[SLOP({full-model-id}-{reasoning})] {conventional commit message}"`. Use conventional commits (`feat`, `fix`, `chore`, `docs`, `refactor`, etc.) with a single-line message. `{full-model-id}` is the canonical model ID (e.g. `claude-opus-4-7`, `claude-sonnet-4-6`, `claude-haiku-4-5`). `{reasoning}` is the reasoning effort (`high`, `medium`, `low`, `off`) — include it only if the runtime exposes it; otherwise omit the `-{reasoning}` suffix entirely.
- Examples: `[SLOP(claude-opus-4-7-high)] feat(metrics): record depot sqlite phase timings` or, when reasoning is not known, `[SLOP(claude-opus-4-7)] fix(pegboard): handle empty ack batch`.
- **Never add a co-author trailer** (no `Co-Authored-By: ...` line). Descriptions are single-line only.
- **A revision description must describe its actual diff.** Check the message against `jj diff -r <rev> --stat` before running `jj describe`.
- Abandon stray empty undescribed revisions before ending a session. Do not leave `jj new` artifacts in the branch.
- Never commit fetched or vendored source trees. Add the ignore entry before fetching.
- **Never push to `main` unless explicitly specified by the user.**
- **Safety:** Never run destructive jj or git commands (`jj git push`, `jj abandon`, `jj squash` into a non-current revision, `jj op restore`, `jj op undo` past your own work, `jj rebase -d main`, `git push --force`, `git reset --hard`) unless the user explicitly requests it.

Expand All @@ -207,3 +227,4 @@ pnpm lint # biome check
- CI and release automation must install the pnpm workspace with `--frozen-lockfile` before Cargo builds that generate V8 bridge assets into `OUT_DIR`. Fork pull requests should run the same `pnpm test` command without `AGENTOS_E2E_NETWORK=1`.
- When changing V8 bridge registration or snapshot bootstrap code under `crates/v8-runtime/`, rebuild `agent-os-v8-runtime` before rerunning sidecar V8 integration tests. `cargo test -p agent-os-sidecar` can otherwise reuse stale embedded-runtime objects from `target/`.
- The `crates/v8-runtime` snapshot test (`snapshot::tests::snapshot_consolidated_tests`) currently has to run in isolation: use `cargo test -p agent-os-v8-runtime -- --test-threads=1` for the main suite and `cargo test -p agent-os-v8-runtime snapshot::tests::snapshot_consolidated_tests -- --exact --ignored` separately until the shared test binary teardown SIGSEGV is fixed.
- Biome honors `.gitignore` (`vcs.useIgnoreFile`), and the core-dump patterns (`**/core`) match `packages/core`, so `pnpm lint` silently skips that entire package. Do not treat a green lint as proof those files were checked. Fixing the pattern requires first cleaning up the package's accumulated lint debt (tracked in `~/.agents/todo/`).
69 changes: 69 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

27 changes: 11 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
</p>

<p align="center">
A portable open-source operating system for AI agents.<br/>Near-zero cold starts (~6 ms), up to 32x cheaper than sandboxes.<br/>Powered by WebAssembly and V8 isolates.<br/><br/>Supports Pi, Claude Code*, Codex*, Amp*, and OpenCode*<br/><sub>* coming soon</sub>
A portable open-source operating system for AI agents.<br/>Near-zero cold starts (~6 ms), up to 32x cheaper than sandboxes.<br/>Built-in ACP agents: Pi, Claude Code, and OpenCode
</p>

<p align="center">
Expand All @@ -28,11 +28,11 @@ You don't have to choose: agentOS works with sandboxes through the [sandbox exte
## Quick start

```bash
npm install @rivet-dev/agent-os @rivet-dev/agent-os-common @rivet-dev/agent-os-pi
npm install @rivet-dev/agent-os-core @rivet-dev/agent-os-common @rivet-dev/agent-os-pi
```

```ts
import { AgentOs } from "@rivet-dev/agent-os";
import { AgentOs } from "@rivet-dev/agent-os-core";
import common from "@rivet-dev/agent-os-common";
import pi from "@rivet-dev/agent-os-pi";

Expand Down Expand Up @@ -107,13 +107,13 @@ All benchmarks compare agentOS against the fastest/cheapest mainstream sandbox p
## Features

### Agents
- **Multi-agent support**: Run Claude Code, Codex, OpenCode, Amp, Pi, and more with a unified API
- **Multi-agent support**: Run built-in Pi, Claude Code, and OpenCode agents with a unified API, plus install registry command packages such as Codex as VM software
- **[Sessions via ACP](https://rivet.dev/docs/agent-os/sessions)**: Create, manage, and resume agent sessions over the [Agent Communication Protocol](https://agentclientprotocol.com)
- **Universal transcript format**: One transcript format across all agents for debugging, auditing, and comparison
- **[Automatic persistence](https://rivet.dev/docs/agent-os/persistence)**: Every conversation is saved and replayable without extra code

### Infrastructure
- **[Mount anything as a filesystem](https://rivet.dev/docs/agent-os/filesystem)**: S3, Google Drive, SQLite, host directories, or custom backends
- **[Mount external storage as a filesystem](https://rivet.dev/docs/agent-os/filesystem)**: S3-compatible storage, Google Drive, host directories, overlay filesystems, or custom backends
- **[Host tools](https://rivet.dev/docs/agent-os/tools)**: Define JavaScript functions that agents call as CLI commands inside the VM
- **[Cron](https://rivet.dev/docs/agent-os/cron), [webhooks](https://rivet.dev/docs/agent-os/webhooks), and [queues](https://rivet.dev/docs/agent-os/queues)**: Schedule tasks, receive external events, and serialize work with built-in primitives
- **[Sandbox extension](https://rivet.dev/docs/agent-os/sandbox)**: Pair with full sandboxes (E2B, Daytona, etc.) for heavy workloads like browsers or native compilation
Expand All @@ -128,16 +128,11 @@ All benchmarks compare agentOS against the fastest/cheapest mainstream sandbox p
- **[Deny-by-default permissions](https://rivet.dev/docs/agent-os/security)**: Granular control over filesystem, network, process, and environment access
- **[Programmatic network control](https://rivet.dev/docs/agent-os/networking)**: Allow, deny, or proxy any outbound connection
- **[Resource limits](https://rivet.dev/docs/agent-os/security)**: Set precise CPU and memory limits per agent
- **[V8 + WebAssembly isolation](https://rivet.dev/docs/agent-os/architecture)**: Each agent runs in its own isolate with no shared state
- **[VM isolation](https://rivet.dev/docs/agent-os/architecture)**: Each agent runs in its own VM with no shared state

## Architecture

agentOS is built on an in-process operating system kernel written in JavaScript. Three runtimes mount into the kernel:

- **WebAssembly**: POSIX utilities (coreutils, grep, sed, etc.) compiled to WASM
- **V8 isolates**: JavaScript/TypeScript agent code runs in sandboxed V8 contexts

The kernel manages a virtual filesystem, process table, pipes, PTYs, and a virtual network stack. Everything runs inside the kernel -- nothing executes on the host.
agentOS is built on an in-process operating system kernel. The kernel manages a virtual filesystem, process table, pipes, PTYs, and a virtual network stack. Everything runs inside the kernel -- nothing executes on the host.

See the [Architecture docs](https://rivet.dev/docs/agent-os/architecture) for details.

Expand All @@ -146,11 +141,11 @@ See the [Architecture docs](https://rivet.dev/docs/agent-os/architecture) for de
Browse pre-built agents, tools, filesystems, and software packages at the [agentOS Registry](https://rivet.dev/agent-os/registry).

<!-- BEGIN PACKAGE TABLE -->
### WASM Command Packages
### VM Command Packages

| Package | apt Equivalent | Description | Source | Combined Size | Gzipped |
|---------|---------------|-------------|--------|---------------|---------|
| `@rivet-dev/agent-os-codex` | codex | OpenAI Codex integration (codex, codex-exec) | rust | - | - |
| `@rivet-dev/agent-os-codex` | codex | OpenAI Codex command package (codex, codex-exec) | rust | - | - |
| `@rivet-dev/agent-os-coreutils` | coreutils | GNU coreutils: sh, cat, ls, cp, sort, and 80+ commands | rust | - | - |
| `@rivet-dev/agent-os-curl` | curl | curl HTTP client | c | - | - |
| `@rivet-dev/agent-os-diffutils` | diffutils | GNU diffutils (diff) | rust | - | - |
Expand All @@ -177,8 +172,8 @@ Browse pre-built agents, tools, filesystems, and software packages at the [agent

| Package | Description | Includes |
|---------|-------------|----------|
| `@rivet-dev/agent-os-build-essential` | Build-essential WASM command set (standard + make + git + curl) | standard, make, git, curl |
| `@rivet-dev/agent-os-common` | Common WASM command set (coreutils + sed + grep + gawk + findutils + diffutils + tar + gzip) | coreutils, sed, grep, gawk, findutils, diffutils, tar, gzip |
| `@rivet-dev/agent-os-build-essential` | Build-essential VM command set (standard + make + git + curl) | standard, make, git, curl |
| `@rivet-dev/agent-os-common` | Common VM command set (coreutils + sed + grep + gawk + findutils + diffutils + tar + gzip) | coreutils, sed, grep, gawk, findutils, diffutils, tar, gzip |
<!-- END PACKAGE TABLE -->

## License
Expand Down
Loading
Loading