Repository navigation
Expand file tree
/
Copy pathai-sandboxes.yaml
More file actions
1799 lines (1743 loc) · 127 KB
/
Copy pathai-sandboxes.yaml
File metadata and controls
1799 lines (1743 loc) · 127 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
# =============================================================================
# AI Agent Sandboxes — structured dataset (evidence-carrying edition)
#
# Derived from: "AI Sandboxes and Adjacent Approaches from the Clawk Hacker
# News Thread" (HN item 48892859) plus the official docs cited therein.
#
# v0.2.0 change: no bare ratings. Every non-identity field is a CLAIM that
# carries its evidence. Fields with no evidentiary basis were deleted
# (the v0.1 setup_burden / approval_friction / state_ergonomics scales).
#
# v0.2.1 change: primary-source audit pass (2026-07-14). Fixed stale version
# bases, wrong credential/network classifications, overclaimed agent lists,
# and promoted aide from adjacent-orchestrator to a principal sandbox entry.
#
# v0.2.2 change: added nono.sh and strongdm/leash (2026-07-20), both sourced
# from a user-submitted recommendation (private email) rather than the HN
# thread — see their thread_status fields.
#
# v0.2.3 change: full primary-source re-audit (2026-07-20), fanned out across
# parallel research agents plus an independent codex CLI cross-check (grok
# unavailable — not authenticated in this box). Fixes: added agents shipped
# since the last audit (clawk: opencode; flar, yolobox: kimi_code; agentjail
# version bump to v0.9.0 + Monitor Mode); fixed a dead instavm_coderunner blog
# link; upgraded exe_dev.credential_mediation from unspecified to
# managed_integration (Integrations docs); noted the sprites.dev -> fly.io/
# sprites redirect; corrected claude_code_sandbox's maturity (no longer beta —
# that label now belongs to a separate @anthropic-ai/sandbox-runtime package),
# added missing windows_wsl2 platform, replaced an unsupported os_keyring
# credential_mediation claim with the actual ambient/deny/mask mechanism, and
# corrected an overclaimed compliance field (ISO/IEC 42001 is aspirational
# only, no active certifications); replaced codex_sandbox's same unsupported
# os_keyring claim with unspecified; resolved nono's network-default hedge and
# noted its --env-credential fallback mode; corrected nix_opencode_with_mitm's
# overclaimed token-injection feature (aspirational in the source, not
# shipped); re-sourced wasm_substrates' container2wasm link to its own repo.
# Also fixed a pre-existing, dataset-wide YAML correctness bug: 23 inline
# flow-mapping values contained an unquoted comma, which any standards-
# compliant YAML parser (confirmed via Python's PyYAML, not just this repo's
# lenient yq) silently splits into a truncated string plus a bogus null-valued
# key — corrupting data for any real consumer, not just a display quirk.
# Quoted every affected value; verified zero remain via an automated scan.
#
# v0.2.4 change: grok CLI came back online after v0.2.3 shipped, so it ran
# the same 5-question second opinion pass codex had already done for
# claude_code_sandbox/codex_sandbox. All 5 answers matched codex and this
# dataset's edits. One refinement from grok's answer: reworded
# claude_code_sandbox.compliance so it's scoped to what the two cited
# engineering posts say, not read as "Anthropic holds no certifications
# anywhere" — Anthropic's separate Trust Center does document an actual
# SOC 2 Type II report and ISO 27001 certificate at the company level; the
# two sandboxing/containment posts just don't discuss it.
#
# v0.2.5 change: closed the agents_supported and platforms taxonomies. Both
# were free text — 31 distinct agent ids and 16 platform ids across the
# sandboxes, full of near-duplicates (claude/claude_code/claude_code_cited;
# gemini/gemini_cli; macos/macos_cloud/macos_apple_silicon; wsl/windows_wsl2)
# that made the site's facet filters noisy rather than useful. Added closed
# `taxonomy.agents_supported` (21 ids) and `taxonomy.platforms` (11 ids) lists
# and migrated every sandbox entry onto them. Nowhere was data silently
# dropped: any nuance an old id used to carry alone (virtdev's
# claude_code_cited meaning "mentioned in passing, not a real integration";
# instavm_coderunner's macos_apple_silicon meaning "Apple Silicon only, not
# Intel") now lives explicitly in that field's basis text instead.
#
# v0.2.6 change: added three sandboxes entries (2026-07-20). Greywall
# (GreyhavenHQ) -- container-free deny-by-default OS sandbox (bubblewrap/
# Landlock/seccomp/eBPF + kernel-level TUN network capture on Linux, Seatbelt
# on macOS) with host-side credential substitution; user-submitted
# recommendation. Fence (fencesandbox, formerly Use-Tusk) -- the lighter-weight
# sandbox Greywall's authors evaluated and moved away from, added while
# investigating that history; default network policy turned out to be
# kernel-enforced on both platforms (not cooperation-dependent, as first
# assumed), but credentials stay ambient -- no substitution mechanism.
# Omnigent/Omnibox (Databricks) -- OS-sandbox feature bundled inside an
# open-source multi-agent meta-harness (classified runtime_feature, not a
# standalone tool); its Windows backend turned out to provide only
# process-tree kill-on-close, not the CPU/memory ceilings its own docs
# describe. All three: ships profiles/integrations for several agents with no
# id in the closed agents_supported taxonomy (Amp, Cline, Kilo, Auggie, Droid,
# Crush, Kiro) -- recorded in each entry's basis text rather than growing that
# taxonomy per-agent, a deliberate call not to chase every individual agent
# id. A fourth candidate (XaresAICoder, a self-hosted browser IDE bundling
# several agent CLIs) was investigated and deliberately left out: real,
# actively maintained project, but a generic dev-environment container (like
# github_codespaces) rather than a boundary purpose-built around an agent's
# threat model -- no default egress policy, no credential mediation, and
# seccomp explicitly disabled for debugger compatibility.
#
# v0.2.7 change: finished the v0.2.3 unquoted-comma fix. 19 more inline
# flow-mapping values (in flar, virtdev, exe_dev, agentcage, bitrise_rde,
# github_codespaces, byre, nono, vm_substrates, and three taxonomy labels) were
# still being split by YAML parsers into a truncated string plus a bogus
# null-valued key. Quoted them; a full-file scan now finds no unexpected nulls.
#
# v0.2.8 change: added discobox (2026-10-01), sourced from an inclusion
# request rather than the HN thread — see its thread_status field.
#
# v0.2.9 change: added docker_sandboxes (Docker Sandboxes / sbx), contributed
# by an outside contributor (PR #2, 2026-08-28) and corrected against
# docs.docker.com on 2026-10-01: maturity, cloud mode (hybrid locus), network
# presets, pricing note, Devin in the agent list, license, and the shared
# skills default.
# =============================================================================
meta:
title: AI Agent Sandboxes & Adjacent Approaches
version: "0.2.9"
generated: "2026-07-14"
updated: "2026-10-01"
primary_thread:
title: "Show HN: Clawk – Give coding agents a disposable Linux VM, not your laptop"
url: "https://news.ycombinator.com/item?id=48892859"
evidence_levels:
official: Stated in the product's own docs, README, or vendor engineering posts.
thread: Asserted by commenters in the HN thread; not vendor-confirmed.
editorial: Inference by the dataset authors; must show its basis.
conventions: >-
Any classification/risk/cost/convenience field is either a plain
scalar/list (SHORTHAND) or a CLAIM OBJECT. Shorthand means evidence level
"official", sourced from the entry's default_source. Claim objects have
keys {value, ev, src, basis, derived_from}; ev defaults to official and
src defaults to default_source when omitted. Every ev: editorial claim
MUST carry a basis and, where applicable, derived_from listing the
documented fields it was inferred from. A renderer's "official claims
only" toggle hides any claim whose effective ev is not official.
The literal string "unspecified" means primary sources were silent —
render it as a visible badge, never a blank cell.
# -----------------------------------------------------------------------------
# Taxonomy — closed vocabularies for filterable facets.
# (v0.1's editorial cost/convenience ordinal scales are gone; only facets that
# can be grounded in documentation remain.)
# -----------------------------------------------------------------------------
taxonomy:
product_role:
- {id: runtime, label: Sandbox runtime, description: Directly creates and owns the execution boundary.}
- {id: runtime_feature, label: Built-in sandbox feature, description: Sandboxing shipped inside a larger agent product.}
- {id: policy_wrapper, label: Policy wrapper, description: Intercepts or supervises another runtime's tool calls.}
- {id: remote_workspace, label: Remote workspace, description: Hosted dev environment usable as an agent sandbox.}
- {id: orchestrator, label: Orchestrator, description: Launches or supervises agents; not itself the trust boundary.}
- {id: template, label: Template / recipe, description: Reusable setup pattern built on other substrates.}
- {id: pattern, label: DIY pattern, description: "An approach, not a product."}
execution_locus:
- {id: local, label: Local (user's machine)}
- {id: self_hosted_remote, label: Self-hosted remote}
- {id: vendor_cloud, label: Vendor-managed cloud}
- {id: hybrid, label: Hybrid local + cloud}
isolation_boundary:
# Ordered weakest -> strongest always-on boundary. `strength` lets the UI
# derive footprint/credibility framing from the documented boundary itself
# instead of storing per-entry editorial ratings.
- {id: user, label: Separate OS user, strength: 1}
- {id: os_sandbox, label: OS sandbox (Seatbelt / Bubblewrap / seccomp), strength: 2}
- {id: container, label: Container / namespace, strength: 3}
- {id: microvm, label: MicroVM (Firecracker / QEMU microVM / Apple container), strength: 4}
- {id: vm, label: Full VM (KVM / QEMU / hypervisor), strength: 5}
- {id: layered, label: Layered (multiple essential boundaries), strength: null}
state_model:
- {id: ephemeral, label: Ephemeral — resets by design}
- {id: resumable, label: Resumable — sessions/snapshots survive}
- {id: persistent, label: Persistent — disks/volumes survive indefinitely}
- {id: copy_apply, label: Copy/diff/apply — changes staged in a clone}
- {id: configurable, label: Configurable per mode}
network_policy:
- {id: open, label: Open outbound by default}
- {id: allowlist, label: Outbound allowlist}
- {id: proxy_mediated, label: Inspecting / mediating proxy}
- {id: none, label: No network}
- {id: operator_managed, label: Operator/vendor-managed policy}
- {id: configurable, label: Configurable (open/allowlist/none modes)}
credential_mediation:
- {id: ambient, label: Ambient — host env visible to agent}
- {id: mounted, label: Mounted — secret present inside runtime as file/env}
- {id: forwarded, label: "Forwarded — e.g. SSH agent socket, key stays off-guest"}
- {id: host_side_injection, label: Host-side injection — secret added only on egress}
- {id: os_keyring, label: OS keyring — agent auth in system keychain}
- {id: managed_integration, label: Managed integration — vendor service connector}
- {id: unspecified, label: Unspecified in primary sources}
threat_tier:
- id: t1_accidents
label: Accidents
description: Agent runs a destructive command in the wrong place.
- id: t2_exfiltration
label: Prompt-injection exfiltration
description: Agent tricked into shipping secrets or data out; needs egress control and/or credential mediation.
- id: t3_hostile_escape
label: Hostile code escape
description: Malicious code attempts to break the boundary; hypervisor-class isolation is the broadly credible answer.
design_intent:
- {id: constrain, label: Constrain the agent, description: "Check, gate, or block agent actions."}
- {id: liberate, label: Liberate the agent, description: Build a wall so the agent can run unsupervised inside it.}
- {id: both, label: Both / configurable}
pricing_model:
# Factual, documentable. Replaces v0.1's editorial cost block.
- {id: free_oss, label: Free / open source}
- {id: free_tier_plus_usage, label: Free tier + pay-as-you-go}
- {id: paid_usage, label: Usage-based paid}
- {id: paid_subscription, label: Subscription (may add usage)}
- {id: contact_sales, label: Contact sales / pricing in flux}
- {id: product_feature, label: Bundled feature of a paid product}
- {id: unspecified, label: Unspecified in primary sources}
# Closed v0.2.5 -- previously free text (31 distinct ids for agents, 16 for
# platforms, full of near-duplicates like claude/claude_code/claude_code_cited
# or macos/macos_cloud/macos_apple_silicon). Every entry's agents_supported
# and platforms values now resolve to one of these ids; any nuance an old id
# used to carry alone (e.g. "cited as an example, not a first-class
# integration") now lives in that field's basis text instead.
agents_supported:
- {id: claude_code, label: Claude Code}
- {id: codex, label: Codex CLI}
- {id: gemini_cli, label: Gemini CLI}
- {id: copilot, label: GitHub Copilot}
- {id: cursor, label: Cursor}
- {id: aider, label: Aider}
- {id: opencode, label: OpenCode}
- {id: pi, label: Pi}
- {id: qwen_code, label: Qwen Code}
- {id: grok, label: Grok}
- {id: goose, label: Goose}
- {id: antigravity, label: Antigravity}
- {id: openclaw, label: OpenClaw}
- {id: hermes, label: Hermes}
- {id: reasonix, label: Reasonix}
- {id: kimi_code, label: Kimi Code}
- {id: shelley, label: Shelley (web agent)}
- {id: moltbot, label: Moltbot (Clawdbot)}
- {id: mcp_orchestrated, label: MCP-orchestrated agents (generic), description: Named as supporting agents driven via MCP rather than a specific product.}
- {id: generic_command_execution, label: Generic command execution, description: Runs arbitrary shell commands; not tied to any named agent.}
- {id: agent_agnostic, label: Any agent (agent-agnostic), description: "Stated to work with whatever agent you point at it, without naming specific ones."}
# Platforms conflates host OS with access method by design of the source
# data (e.g. exe.dev and Fly Sprites are fully remote, so "platform" means
# how you reach them, not an OS) -- rather than force a schema split, this
# stays one closed list, disambiguated by label. Hosting/locus (local vs.
# vendor-cloud) is already classification.execution_locus's job, so the old
# macos_cloud/linux_cloud/arch_linux_host/macos_apple_silicon ids collapse
# to their base OS here, with any real constraint (Arch specifically,
# Apple Silicon specifically) kept in that entry's platforms basis.
platforms:
- {id: macos, label: macOS}
- {id: linux, label: Linux}
- {id: windows_wsl2, label: Windows (WSL2)}
- {id: windows_powershell, label: "Windows (native, PowerShell)"}
- {id: cloud, label: Cloud (hosted execution mode)}
- {id: browser, label: Browser}
- {id: vscode, label: VS Code}
- {id: cli, label: CLI}
- {id: api, label: API}
- {id: sdk, label: SDK}
- {id: ssh, label: SSH}
# -----------------------------------------------------------------------------
# Sources registry — claims reference these by id via `src`.
# -----------------------------------------------------------------------------
sources:
hn_thread: {url: "https://news.ycombinator.com/item?id=48892859", title: "Show HN: Clawk (HN thread)"}
clawk_repo: {url: "https://github.com/clawkwork/clawk", title: "Clawk README"}
agentjail_repo: {url: "https://github.com/LuD1161/agentjail", title: "agentjail README"}
gondolin_docs: {url: "https://earendil-works.github.io/gondolin/", title: "Gondolin documentation"}
gondolin_repo: {url: "https://github.com/earendil-works/gondolin", title: "Gondolin repo (verified 2026-07-14)"}
gondolin_security: {url: "https://github.com/earendil-works/gondolin/security", title: "Gondolin security design"}
flar_repo: {url: "https://github.com/swelljoe/flar", title: "flar README"}
yoloai_repo: {url: "https://github.com/kstenerud/yoloai", title: "yoloAI README"}
virtdev_repo: {url: "https://github.com/matheusmoreira/virtdev", title: "virtdev README"}
exe_dev_site: {url: "https://exe.dev/", title: "exe.dev site & docs"}
exe_dev_pricing: {url: "https://exe.dev/pricing", title: "exe.dev pricing"}
exe_dev_blog: {url: "https://blog.exe.dev/meet-exe.dev", title: "Meet exe.dev (blog)"}
sprites_docs: {url: "https://docs.sprites.dev/", title: "Fly.io Sprites docs"}
agentcage_repo: {url: "https://github.com/agentcage/agentcage", title: "agentcage README"}
coderunner_repo: {url: "https://github.com/instavm/coderunner", title: "InstaVM CodeRunner README"}
instavm_blog: {url: "https://instavm.io/blog/nixos-reproducible-dev-environments-on-instavm", title: "InstaVM NixOS sandboxes (blog)"}
yolobox_repo: {url: "https://github.com/finbarr/yolobox", title: "yolobox README & security model"}
bitrise_rde: {url: "https://bitrise.io/platform/remote-dev-environments", title: "Bitrise RDE product page & docs"}
codespaces_docs: {url: "https://github.com/features/codespaces", title: "GitHub Codespaces docs"}
anthropic_sandboxing: {url: "https://www.anthropic.com/engineering/claude-code-sandboxing", title: "Anthropic: Claude Code sandboxing"}
anthropic_containment: {url: "https://www.anthropic.com/engineering/how-we-contain-claude", title: "Anthropic: How we contain Claude"}
codex_security: {url: "https://learn.chatgpt.com/docs/agent-approvals-security", title: "OpenAI: Agent approvals & security"}
codex_sandboxing: {url: "https://learn.chatgpt.com/docs/sandboxing?surface=app", title: "OpenAI: Codex sandboxing docs"}
byre_repo: {url: "https://github.com/pjlsergeant/byre", title: "byre README"}
paseo_docs: {url: "https://paseo.sh/docs/providers", title: "Paseo providers docs"}
skynot_repo: {url: "https://github.com/tarsgate/skynot", title: "skynot README"}
takeaicontrol_repo: {url: "https://github.com/daitangio/take-ai-control", title: "take-ai-control README"}
aide_repo: {url: "https://github.com/jskswamy/aide/", title: "Aide README"}
scratch_repo: {url: "https://github.com/housecat-inc/scratch", title: "scratch README"}
katsuobushi_repo: {url: "https://github.com/cdata/katsuobushi/tree/main/lib/sandbox", title: "katsuobushi sandbox"}
nix_mitm_repo: {url: "https://github.com/riedel/nix-opencode-with-mitm", title: "nix-opencode-with-mitm README"}
nono_repo: {url: "https://github.com/nolabs-ai/nono", title: "nono README"}
nono_site: {url: "https://nono.sh/", title: "nono site"}
nono_docs: {url: "https://nono.sh/docs/llms.txt", title: "nono docs (llms.txt)"}
leash_repo: {url: "https://github.com/strongdm/leash", title: "Leash (strongDM) README"}
leash_disclaimer: {url: "https://raw.githubusercontent.com/strongdm/leash/main/DISCLAIMER.txt", title: "Leash DISCLAIMER.txt"}
claude_code_sandbox_docs: {url: "https://code.claude.com/docs/en/sandboxing", title: "Claude Code docs: Configure the sandboxed Bash tool (post-migration canonical doc)"}
claude_code_security_docs: {url: "https://code.claude.com/docs/en/security", title: "Claude Code docs: Security"}
anthropic_trust_center: {url: "https://trust.anthropic.com", title: "Anthropic Trust Center"}
exe_dev_docs: {url: "https://exe.dev/docs/integrations", title: "exe.dev docs: Integrations"}
user_email_2026_07_20: {url: null, title: "User-submitted comparison, private email, 2026-07-20 (not part of the HN thread)"}
greywall_repo: {url: "https://github.com/GreyhavenHQ/greywall", title: "Greywall README"}
greywall_site: {url: "https://greywall.io/", title: "Greywall site"}
greywall_docs: {url: "https://docs.greywall.io/greywall", title: "Greywall docs: Install & Platform Support"}
greywall_agent_profiles_tree: {url: "https://github.com/GreyhavenHQ/greywall/tree/main/internal/profiles/agents", title: "Greywall repo: internal/profiles/agents (verified 2026-07-20)"}
greywall_credentials: {url: "https://docs.greywall.io/greywall/credential-protection", title: "Greywall docs: Credential Protection"}
greyhaven_origin_post: {url: "https://greyhaven.co/insights/why-we-built-our-own-sandboxing-system", title: "Greyhaven: Why we built our own sandboxing system"}
greywall_github_api: {url: "https://api.github.com/repos/GreyhavenHQ/greywall", title: "GreyhavenHQ/greywall GitHub API metadata (verified 2026-07-20)"}
agent_research_2026_07_20: {url: null, title: "Follow-up research triggered by investigating Greywall's stated influences, 2026-07-20 session"}
fence_repo: {url: "https://github.com/fencesandbox/fence", title: "Fence README (moved from github.com/Use-Tusk/fence)"}
fence_why: {url: "https://github.com/fencesandbox/fence/blob/main/docs/why-fence.md", title: "Fence docs: Why Fence (design philosophy & explicit non-goals)"}
fence_architecture: {url: "https://github.com/fencesandbox/fence/blob/main/ARCHITECTURE.md", title: "Fence ARCHITECTURE.md"}
fence_agents_docs: {url: "https://github.com/fencesandbox/fence/blob/main/docs/agents.md", title: "Fence docs: supported coding agents"}
fence_configuration_docs: {url: "https://github.com/fencesandbox/fence/blob/main/docs/configuration.md", title: "Fence docs: configuration (templates, denied-credential rules)"}
fence_github_api: {url: "https://api.github.com/repos/fencesandbox/fence", title: "fencesandbox/fence GitHub API metadata (verified 2026-07-20)"}
user_submitted_links_2026_07_20: {url: null, title: "User-submitted URLs (Databricks blog + Omnibox docs), pasted directly in session, 2026-07-20 (not part of the HN thread)"}
omnigent_databricks_blog: {url: "https://www.databricks.com/blog/introducing-omnigent-meta-harness-combine-control-and-share-your-agents", title: "Databricks blog: Introducing Omnigent"}
omnigent_docs_omnibox: {url: "https://omnigent.ai/docs/omnibox", title: "Omnigent docs: Omnibox"}
omnigent_repo: {url: "https://github.com/omnigent-ai/omnigent", title: "omnigent-ai/omnigent README & source (verified 2026-07-20)"}
omnigent_github_api: {url: "https://api.github.com/repos/omnigent-ai/omnigent", title: "omnigent-ai/omnigent GitHub API metadata (verified 2026-07-20)"}
discobox_repo: {url: "https://github.com/discobox-ai/discobox", title: "Discobox README (verified at commit 4a7f956, 2026-10-01)"}
discobox_adr_userns: {url: "https://github.com/discobox-ai/discobox/blob/4a7f956d65f44080c4c3cc6575ce3aa72001bed0/docs/adr/0004-user-namespaces-are-the-default-isolation.md", title: "Discobox ADR 0004: user namespaces as default isolation (Status: Proposed)"}
discobox_proxy: {url: "https://github.com/discobox-ai/discobox/blob/4a7f956d65f44080c4c3cc6575ce3aa72001bed0/proxy/DESIGN.md", title: "Discobox proxy design (destination policy, MITM, sentinel swap)"}
discobox_vz: {url: "https://github.com/discobox-ai/discobox/blob/4a7f956d65f44080c4c3cc6575ce3aa72001bed0/server/providers/vz/provider.go", title: "Discobox source: macOS vz pool VM, /Users exported read-only"}
discobox_installer: {url: "https://github.com/discobox-ai/discobox/blob/4a7f956d65f44080c4c3cc6575ce3aa72001bed0/installer/install.sh", title: "Discobox install script (refuses Intel Macs)"}
inclusion_request_2026_10_01: {url: null, title: "Inclusion request for Discobox sent to the dataset maintainer, 2026-10-01 (not part of the HN thread)"}
docker_sandboxes_docs: {url: "https://docs.docker.com/ai/sandboxes/", title: "Docker Sandboxes documentation"}
docker_sandboxes_security: {url: "https://docs.docker.com/ai/sandboxes/security/", title: "Docker Sandboxes security model"}
docker_sandboxes_architecture: {url: "https://docs.docker.com/ai/sandboxes/architecture/", title: "Docker Sandboxes architecture"}
docker_sandboxes_agents: {url: "https://docs.docker.com/ai/sandboxes/agents/", title: "Docker Sandboxes supported agents"}
docker_sandboxes_install: {url: "https://docs.docker.com/ai/sandboxes/install/", title: "Docker Sandboxes installation guide"}
docker_sandboxes_defaults: {url: "https://docs.docker.com/ai/sandboxes/security/defaults", title: "Docker Sandboxes default security posture"}
docker_sandboxes_release_notes: {url: "https://docs.docker.com/ai/sandboxes/release-notes/", title: "Docker Sandboxes release notes"}
docker_sandboxes_local_policy: {url: "https://docs.docker.com/ai/sandboxes/governance/access-controls/local/", title: "Docker Sandboxes local network policy presets"}
docker_sandboxes_faq: {url: "https://docs.docker.com/ai/sandboxes/faq/", title: "Docker Sandboxes FAQ"}
contributor_submission_2026_08_28: {url: "https://github.com/pjlsergeant/ai-sandboxes/pull/2", title: "Contributor-submitted Docker Sandboxes entry, PR #2, 2026-08-28 (not part of the HN thread)"}
# -----------------------------------------------------------------------------
# UI hints. The decision funnel keys off documented fields only.
# -----------------------------------------------------------------------------
ui:
primary_filters: [classification.isolation_boundary, classification.execution_locus,
classification.network_policy, classification.credential_mediation,
pricing.model, agents_supported, platforms]
compare_view_row_order:
- classification.isolation_boundary
- classification.network_policy
- classification.credential_mediation
- classification.state_model
- risk.stated_scope
- risk.assessed_tiers
- pricing.model
- maturity
- limitations
evidence_rendering:
official: plain text, source-linked
thread: chip labeled "per HN commenters", source-linked
editorial: chip labeled "our assessment", basis shown on hover/expand
toggle_official_only: hide any claim whose effective ev != official
decision_funnel:
- question: What are you afraid of?
maps_to: [risk.stated_scope, risk.assessed_tiers, classification.isolation_boundary]
effect: Sets the minimum acceptable boundary strength (taxonomy.isolation_boundary.strength).
- question: What will it cost you, in money and machine?
maps_to: [pricing, classification.isolation_boundary, footprint_notes]
effect: Boundary strength implies local footprint; pricing.model covers the monetary side.
- question: Where must code run?
maps_to: classification.execution_locus
effect: Local ownership vs off-laptop persistence and concurrency.
# -----------------------------------------------------------------------------
# Principal sandboxes. Shorthand scalar = {ev: official, src: default_source}.
# -----------------------------------------------------------------------------
sandboxes:
- id: clawk
name: Clawk
default_source: clawk_repo
tagline: Disposable, network-restricted Linux VMs for coding agents.
urls: {repo: "https://github.com/clawkwork/clawk"}
license: Apache-2.0
maturity: {value: pre_1_0_active, basis: Repo is pre-1.0 and under active development.}
thread_status: {value: directly_linked, src: hn_thread}
platforms:
value: [macos, linux]
basis: macOS first-class; Linux provider explicitly experimental.
agents_supported: [claude_code, codex, opencode, generic_command_execution]
classification:
role: runtime
execution_locus: local
isolation_boundary: {value: vm, basis: Hypervisor-backed Linux guest per repo or multi-repo worktree.}
state_model: {value: resumable, basis: VM disk disposable except snapshots; Linux provider adds disk persistence; repo and conversations live on host.}
network_policy: {value: allowlist, basis: Outbound allowlist documented in README.}
credential_mediation: {value: forwarded, basis: SSH-agent forwarding keeps private keys off the guest.}
risk:
stated_scope:
value: [t1_accidents, t2_exfiltration, t3_hostile_escape]
basis: README claims center on the VM boundary plus network allowlist, while stating that anything mounted or allowlisted is exposed to the agent.
assessed_tiers:
value: [t1_accidents, t2_exfiltration, t3_hostile_escape]
ev: editorial
derived_from: [classification.isolation_boundary, classification.network_policy, classification.credential_mediation]
basis: Hypervisor boundary (official) + egress allowlist (official) + off-guest keys (official) plausibly cover all three tiers; no independent audit exists.
design_intent:
value: liberate
basis: Product framing is giving agents a disposable VM instead of your laptop.
pricing: {model: free_oss}
footprint_notes:
value: One VM per repo or multi-repo worktree.
basis: Documented deployment unit; RAM/disk implications follow from the VM boundary, not from a stored rating.
convenience_notes:
- {value: Worktree workflow and ticket mode built in.}
integrations: [oci_image_rootfs, git_worktrees, ticket_mode, cli]
audience: [individual_developer, small_team]
limitations:
- {value: macOS-first; Linux path experimental.}
- {value: Anything mounted or allowlisted is exposed to the agent.}
compliance: {value: none_stated}
- id: agentjail
name: agentjail
default_source: agentjail_repo
tagline: Policy guardrails that check every agent tool call before it runs.
urls: {repo: "https://github.com/LuD1161/agentjail"}
license: Apache-2.0
maturity: {value: early_active, basis: "v0.9.0 released 2026-07-16 (Monitor Mode, verified attestation, control-plane auth between daemon/netproxy/secrets-broker); still pre-1.0 and shipping rapidly."}
thread_status: {value: directly_linked, src: hn_thread}
platforms: [macos, linux]
agents_supported: [claude_code, codex, cursor]
classification:
role: policy_wrapper
execution_locus: local
isolation_boundary: {value: os_sandbox, basis: Hook-based policy checks with optional kernel sandbox (agentjail-shield).}
state_model: {value: resumable, basis: Per-project overlays and sessions; policies and daemon on host.}
network_policy: {value: proxy_mediated, basis: Session-aware net proxy; opt-in / interim in some flows.}
credential_mediation:
value: host_side_injection
basis: v0.6+ ships a credential broker and secrets vault; shield path strips ambient env; secrets role mediates access rather than leaving keys ambient in the agent environment.
risk:
stated_scope:
value: [t1_accidents, t2_exfiltration]
basis: README frames the goal as preventing unsafe tool calls before they run, with a fail-closed policy posture and defense in depth; it does not claim a VM boundary.
assessed_tiers:
value: [t1_accidents, t2_exfiltration]
ev: editorial
derived_from: [classification.isolation_boundary, classification.network_policy, classification.credential_mediation]
basis: Policy + OS sandbox + proxy + credential broker address accidents and exfiltration; hostile escape is out of scope without a hypervisor boundary.
design_intent:
value: constrain
basis: Every tool call is checked locally before it runs, per the repo description.
pricing: {model: free_oss}
footprint_notes:
value: Runs as hooks and a host daemon; no VM or container required.
basis: Documented architecture.
convenience_notes:
- {value: Stated goal includes reducing approval fatigue.}
integrations: [hooks, opa_policies, mcp_scan, daemon, net_proxy_opt_in, secrets_broker, monitor_mode, control_plane_auth]
audience: [individual_developer]
limitations:
- {value: Not a full VM.}
- {value: Proxy path interim / opt-in in some flows.}
compliance: {value: none_stated}
- id: gondolin
name: Gondolin
default_source: gondolin_docs
tagline: Local microVMs with a programmable (TypeScript) network and filesystem policy layer.
urls: {repo: "https://github.com/earendil-works/gondolin", docs: "https://earendil-works.github.io/gondolin/", security: "https://github.com/earendil-works/gondolin/security"}
license: {value: Apache-2.0, src: gondolin_repo}
maturity: {value: experimental_active, src: gondolin_repo, basis: Self-described as experimental; @earendil-works/gondolin package at v0.12.0 as of mid-2026.}
thread_status: {value: directly_linked, src: hn_thread}
platforms: [macos, linux]
agents_supported: [generic_command_execution, pi]
classification:
role: runtime
execution_locus: local
isolation_boundary: {value: microvm, basis: QEMU microVM by default; experimental libkrun backend.}
state_model: {value: configurable, basis: Copy-on-write root disk; persistence governed by host-side VFS policy; custom images optional.}
network_policy: {value: proxy_mediated, basis: Host-side JS network stack mediates traffic; allowlisting expressible in the policy layer.}
credential_mediation: {value: host_side_injection, src: gondolin_repo, basis: Guest sees only a placeholder token; host injects the real secret solely for allowed destinations.}
risk:
stated_scope:
value: [t1_accidents, t2_exfiltration, t3_hostile_escape]
src: gondolin_security
basis: Security design doc states an explicit threat model, and explicitly trusts the host Node process and QEMU boundary, with no full DoS isolation.
assessed_tiers:
value: [t1_accidents, t2_exfiltration, t3_hostile_escape]
ev: editorial
derived_from: [classification.isolation_boundary, classification.network_policy, classification.credential_mediation]
basis: MicroVM boundary + mediated egress + host-side secret injection cover all three tiers within the stated trust assumptions.
design_intent:
value: both
ev: editorial
basis: Programmable policy layer supports both gating (constrain) and walled autonomy (liberate); docs do not pick a side.
pricing: {model: free_oss}
footprint_notes:
value: MicroVM per sandbox with copy-on-write root disk.
basis: Documented architecture.
convenience_notes:
- {value: Early-stage ergonomics acknowledged in its own docs.}
integrations: [typescript_policy_layer, vfs_providers, custom_images, pi_extension]
audience: [platform_builder, individual_developer]
limitations:
- {value: Trusts host Node process and QEMU boundary., src: gondolin_security}
- {value: No full DoS isolation., src: gondolin_security}
compliance: {value: none_stated}
- id: flar
name: flar
default_source: flar_repo
tagline: Fast, light Bubblewrap-based agent restriction with minimal startup overhead.
urls: {repo: "https://github.com/swelljoe/flar"}
license: Apache-2.0
maturity: {value: very_early, basis: "No published releases at fetch time, per its own README."}
thread_status: {value: directly_linked, src: hn_thread}
platforms: [linux]
agents_supported: {value: [claude_code, antigravity, codex, copilot, reasonix, kimi_code], basis: "Kimi Code added via PR #3, merged 2026-07-17."}
classification:
role: runtime
execution_locus: local
isolation_boundary: {value: os_sandbox, basis: Bubblewrap in an unprivileged user namespace; read-only system paths; project bind mount.}
state_model: {value: resumable, basis: Temporary copied config plus bound per-project transcript stores; host config untouched.}
network_policy: {value: configurable, basis: Isolated by default with optional host/shared network.}
credential_mediation: {value: mounted, basis: Config is copied in; the chosen agent's credential token remains accessible to that agent.}
risk:
stated_scope:
value: [t1_accidents]
basis: README markets tighter-than-in-agent sandboxing but is candid that the project is far less tested and that the agent's own token stays reachable.
assessed_tiers:
value: [t1_accidents]
ev: editorial
derived_from: [classification.credential_mediation, classification.isolation_boundary]
basis: In-runtime token access undermines the exfiltration tier; OS-sandbox boundary is below hypervisor grade.
design_intent:
value: constrain
basis: A restrictor by name and framing.
pricing: {model: free_oss}
footprint_notes:
value: Namespace-based; minimal startup overhead is the stated point of the project.
basis: README framing (Fast Light Agent Restrictor).
convenience_notes:
- {value: Session seeding / shadow homes; host-side proxy.}
integrations: [host_side_proxy, config_copying, session_seeding_shadow_homes]
audience: [individual_developer]
limitations:
- {value: Linux-only.}
- {value: "Far less tested, per its own README; no releases at fetch time."}
- {value: Agent's own credential token reachable by that agent.}
compliance: {value: none_stated}
- id: yoloai
name: yoloAI
default_source: yoloai_repo
tagline: One sandbox wrapper across many backends, with a copy/diff/apply review workflow.
urls: {repo: "https://github.com/kstenerud/yoloai"}
license: MIT
maturity: {value: public_beta}
thread_status: {value: directly_linked, src: hn_thread}
platforms: [linux, macos, windows_wsl2]
agents_supported: [claude_code, codex, gemini_cli, aider, opencode, generic_command_execution]
classification:
role: runtime
execution_locus: local
isolation_boundary:
value: layered
basis: Backends span Docker, Podman, containerd/Kata, Apple container, Tart, Seatbelt; isolation modes from namespaces through gVisor to Kata/Firecracker.
state_model: {value: copy_apply, basis: Sandbox changes are reviewed with diff and applied; state lives in ~/.yoloai/.}
network_policy: {value: configurable, basis: Documented open / allowlist / none modes.}
credential_mediation:
value: host_side_injection
basis: Credential brokering documented, but provider-specific rather than universal; otherwise mounted.
risk:
stated_scope:
value: [t1_accidents, t2_exfiltration]
basis: README claims no ambient data, credential brokering, and network none/allowlist modes.
assessed_tiers:
value: [t1_accidents, t2_exfiltration, t3_hostile_escape]
ev: editorial
derived_from: [classification.isolation_boundary, classification.network_policy]
basis: Tier credibility depends on the chosen backend — namespaces reach t1; Kata/Firecracker backends are t3-grade.
design_intent:
value: both
ev: editorial
basis: Copy/diff/apply gates changes (constrain) while backends enable walled autonomy (liberate).
pricing: {model: free_oss}
footprint_notes:
value: Footprint tracks the chosen backend, from shared-kernel namespaces to Firecracker microVMs.
basis: Documented backend list.
convenience_notes:
- {value: Diff/apply adds a review step to every change in exchange for safety., ev: editorial, derived_from: [classification.state_model], basis: Direct implication of the documented copy/diff/apply workflow.}
integrations: [go_api, mcp_bidirectional, vscode_tunnel, profiles, extensions]
audience: [individual_developer]
limitations:
- {value: Complexity from many backends., ev: thread, src: hn_thread}
- {value: Credential brokering not universal across providers.}
compliance: {value: none_stated}
- id: virtdev
name: virtdev
default_source: virtdev_repo
tagline: Per-project Arch Linux KVM/QEMU VMs with nftables egress zones.
urls: {repo: "https://github.com/matheusmoreira/virtdev"}
license: AGPL-3.0
maturity: {value: active_personal_project}
thread_status: {value: directly_linked, src: hn_thread}
platforms: {value: [linux], basis: "Requires an Arch Linux host specifically, not just any Linux distro."}
agents_supported:
value: [agent_agnostic, claude_code]
basis: "Agent-agnostic in general; Claude Code is mentioned only as a passing example (\"wan is the usual working zone (package managers, Claude Code)\"), not documented as a first-class integration."
classification:
role: runtime
execution_locus: local
isolation_boundary: {value: vm, basis: "KVM/QEMU virtual machines, locked by default."}
state_model: {value: persistent, basis: Shared sealed base image with per-project qcow2 deltas.}
network_policy: {value: configurable, basis: nftables egress zones via passt — none/wan/lan/full plus optional custom single-port holes; default zone is none (no network beyond SSH).}
credential_mediation: unspecified
risk:
stated_scope:
value: [t1_accidents, t3_hostile_escape]
basis: Security focus documented as hypervisor boundary plus egress zones; no built-in policy engine or secret injection yet.
assessed_tiers:
value: [t1_accidents, t3_hostile_escape]
ev: editorial
derived_from: [classification.isolation_boundary, classification.network_policy, classification.credential_mediation]
basis: Hypervisor boundary and zoning are strong, but with credential handling unspecified, exfiltration protection depends entirely on what the user places in the VM and which zone they choose.
design_intent:
value: liberate
ev: editorial
basis: Walled per-project VMs for autonomous work; no per-call gating layer.
pricing: {model: free_oss}
footprint_notes:
value: Full VM per project, deduplicated via a shared sealed base plus qcow2 deltas.
basis: Documented storage architecture.
convenience_notes:
- {value: Root needed at least once to apply the firewall.}
integrations: [cli, custom_zones, user_mode_systemd]
audience: [linux_power_user]
limitations:
- {value: Arch-host requirement.}
- {value: Credential injection not yet built in.}
compliance: {value: none_stated}
- id: exe_dev
name: exe.dev
default_source: exe_dev_site
tagline: Hosted persistent Linux VMs that keep working when your laptop is closed.
urls: {official: "https://exe.dev/", pricing: "https://exe.dev/pricing", blog: "https://blog.exe.dev/meet-exe.dev"}
license: proprietary_service
maturity: {value: public_service, basis: Active docs and pricing; developer-preview origins.}
thread_status: {value: mentioned_in_report_sources, src: hn_thread}
platforms: [browser, ssh, vscode]
agents_supported:
value: [claude_code, codex, pi, shelley, agent_agnostic]
basis: Official Running Agents docs accessed 2026-07-14 state that Claude, Codex, Pi, and Shelley are preinstalled on newly created VMs; other agents can also be installed and run.
classification:
role: runtime
execution_locus: vendor_cloud
isolation_boundary: {value: vm, basis: "Full hosted Linux VMs with root, apt/systemd, HTTPS proxy, and SSH access."}
state_model: {value: persistent, basis: Persistent disks; disks backed up; stopped VMs keep their disk.}
network_policy: {value: operator_managed, basis: VMs private by default; access via proxy/SSH; integrations govern reachability.}
credential_mediation:
value: managed_integration
src: exe_dev_docs
basis: "Integrations docs describe network-level secret injection that keeps tokens off the VM: GitHub Integration avoids VM-side tokens, AWS/GCP Workload Identity Federation issues short-lived OIDC credentials rather than placing access keys on the VM, and an LLM Gateway removes the need for API keys on the VM."
risk:
stated_scope:
value: [t1_accidents, t3_hostile_escape]
basis: Claims include private-by-default access, real VMs, maintained images, and no exposed ports by default.
assessed_tiers:
value: [t1_accidents, t3_hostile_escape]
ev: editorial
derived_from: [classification.isolation_boundary, classification.credential_mediation]
basis: "Full VM boundary is credible for accidents and hostile escape; exfiltration tier remains unassessed by default because Integrations-mediated credentials (GitHub, AWS/GCP WIF, LLM Gateway) only cover secrets routed through those specific connectors, general VM egress has no documented allowlist/policy, and the vendor sits inside the trust boundary."
design_intent:
value: liberate
ev: editorial
basis: Persistent off-laptop VMs for agents to work in unattended.
pricing:
model: paid_subscription
src: exe_dev_pricing
notes: {value: Subscription plus usage-based options.}
footprint_notes:
value: Runs on vendor hardware; local footprint is zero, cost is monetary.
basis: Managed-service model.
convenience_notes:
- {value: "Maintained images; VS Code, regions, GitHub and proxy integrations."}
integrations: [ssh_api, https_api, github, http_proxy, llm_integrations, reflection, regions, vscode, agent_skill]
audience: [individual_developer, small_team]
limitations:
- {value: Not self-hostable.}
- {value: Region tied per account.}
compliance: {value: none_stated_in_fetched_docs}
- id: fly_sprites
name: Fly.io Sprites
default_source: sprites_docs
tagline: Persistent, hardware-isolated Firecracker microVM "sandbox computers."
urls: {official: "https://sprites.dev/", docs: "https://docs.sprites.dev/"}
license: proprietary_service
maturity: {value: new_official_product, basis: Docs described as work-in-progress early on.}
thread_status: {value: mentioned_only, src: hn_thread}
platforms: [api, cli, sdk]
agents_supported:
value: [agent_agnostic, claude_code, moltbot]
basis: "Agent-agnostic generally; Claude Code and Moltbot (Clawdbot) are documented via a dedicated reference-implementation repo and a blog post respectively, not confirmed preinstalled/first-class the way exe.dev documents its agents."
classification:
role: runtime
execution_locus: vendor_cloud
isolation_boundary: {value: microvm, basis: Hardware-isolated Firecracker microVMs with private filesystems and networking.}
state_model: {value: persistent, basis: Filesystem and memory persist between runs; sleep when idle; checkpoints and restore.}
network_policy:
value: configurable
basis: Outbound is unrestricted by default; an opt-in DNS-based allowlist policy can tighten egress from outside the Sprite.
credential_mediation:
value: managed_integration
basis: Connectors route external API calls through a gateway that holds tokens for the Sprite; not ambient in-guest secrets by default for those paths. General secret handling beyond Connectors is lightly documented.
risk:
stated_scope:
value: [t1_accidents, t3_hostile_escape]
basis: Strong isolation claims for arbitrary and user-submitted code; optional DNS egress policy and Connectors for credentialed egress.
assessed_tiers:
value: [t1_accidents, t3_hostile_escape]
ev: editorial
derived_from: [classification.isolation_boundary, classification.network_policy]
basis: Firecracker boundary covers accidents and hostile escape; default-open egress means t2 is configuration-dependent (apply network policy + Connectors), so it is not assessed by default.
design_intent:
value: liberate
ev: editorial
basis: Built as a platform primitive for hosting agent runtimes and untrusted code.
pricing:
model: paid_usage
notes: {value: Usage-based; idle sleep limits standing cost.}
footprint_notes:
value: Vendor hardware; sleep-when-idle and checkpoint/restore documented.
basis: Sprites docs.
convenience_notes:
- {value: Checkpoint and restore; JS and Go SDKs.}
integrations: [cli, rest_api, js_sdk, go_sdk, network_policies, connectors]
audience: [platform_builder, individual_developer]
limitations:
- {value: Managed service only.}
- {value: Outbound unrestricted until an egress policy is applied.}
- {value: Operational limits and region selection still evolving.}
- {value: "https://sprites.dev/ now 301-redirects to https://fly.io/sprites (product fully absorbed into Fly.io's own branding); docs.sprites.dev is unaffected and remains independent.", ev: editorial, basis: Observed 2026-07-20.}
compliance: {value: none_stated_in_fetched_docs}
- id: agentcage
name: agentcage
default_source: agentcage_repo
tagline: Defense-in-depth sandbox with an inspecting, fail-closed proxy against exfiltration.
urls: {repo: "https://github.com/agentcage/agentcage"}
license: MIT
maturity: {value: experimental, basis: README warns the project is experimental and not audited; many releases.}
thread_status: {value: directly_linked, src: hn_thread}
platforms: [macos, linux]
agents_supported: [claude_code, codex, pi, openclaw]
classification:
role: runtime
execution_locus: local
isolation_boundary:
value: layered
basis: Rootless Podman container, Lima VM, or Apple-container microVM backend, plus internal-only network, inspecting proxy, and DNS sidecar.
state_model: {value: ephemeral, basis: Ephemeral sessions tear down but preserve audit logs; persistent cages optional and keep auth.}
network_policy: {value: proxy_mediated, basis: Inspecting proxy with fail-closed traffic default.}
credential_mediation: {value: host_side_injection, basis: Secret scanning plus placeholder injection with outbound substitution.}
risk:
stated_scope:
value: [t1_accidents, t2_exfiltration]
basis: Explicit exfiltration-blocking design — placeholders, fail-closed traffic, audit logs — alongside an explicit not-audited warning.
assessed_tiers:
value: [t1_accidents, t2_exfiltration]
ev: editorial
derived_from: [classification.isolation_boundary, classification.credential_mediation]
basis: Exfiltration is the design center; escape-tier credibility depends on which backend (container vs VM) is chosen.
design_intent:
value: constrain
basis: Every outbound byte passes an inspecting, fail-closed proxy.
pricing: {model: free_oss}
footprint_notes:
value: Adds proxy and DNS sidecar processes on top of the chosen backend.
basis: Documented architecture.
convenience_notes:
- {value: Operational complexity is the acknowledged trade for depth.}
integrations: [cli, scaffolds, custom_inspectors, cage_audit_logs, config_driven_cages]
audience: [security_minded_developer, operator]
limitations:
- {value: "Not audited; experimental, per its own README."}
compliance: {value: none_stated}
- id: instavm_coderunner
name: InstaVM CodeRunner
default_source: coderunner_repo
tagline: Local Apple-container sandbox for AI agents on Apple Silicon, with a cloud path.
urls: {repo: "https://github.com/instavm/coderunner", related_blog: "https://instavm.io/blog/nixos-reproducible-dev-environments-on-instavm"}
license: Apache-2.0
maturity: {value: active_company_backed}
thread_status: {value: directly_linked, src: hn_thread}
platforms:
value: [macos]
basis: "Apple Silicon (M1/M2/M3/M4) specifically — the Apple container runtime requires it; Intel Macs are not supported."
agents_supported: {value: [claude_code, agent_agnostic], basis: "Claude Code named explicitly; broader agent support stated without an exact engine list."}
classification:
role: runtime
execution_locus: local
isolation_boundary: {value: microvm, basis: Apple container runtime / VM-level isolation.}
state_model:
value: resumable
basis: Documented stop/start preserves uploads, kernels, and installed packages in the same container; delete + reinstall for a clean slate.
network_policy: unspecified
credential_mediation: unspecified
risk:
stated_scope:
value: [t1_accidents]
basis: Claims 100% local execution and zero cloud uploads for local testing; no documented network or credential posture.
assessed_tiers:
value: [t1_accidents, t3_hostile_escape]
ev: editorial
derived_from: [classification.isolation_boundary]
basis: VM-level isolation supports containment tiers, but exfiltration credibility cannot be assessed with network and credential posture unspecified.
design_intent:
value: liberate
ev: editorial
basis: A box to run agents in, not a per-call gate.
pricing: {model: free_oss}
footprint_notes:
value: Apple-container VM per sandbox on Apple Silicon.
basis: Documented runtime.
convenience_notes: []
integrations: [coderunner_ui, instavm_ecosystem, cloud_compatible_workflow, mcp_server]
audience: [mac_developer]
limitations:
- {value: Apple-centric.}
- {value: Fetched sources light on network and credential policy detail., ev: editorial, basis: Comparative observation across this dataset's entries.}
compliance: {value: none_stated}
- id: yolobox
name: yolobox
default_source: yolobox_repo
tagline: Let the agent work freely inside a container; keep your home directory out of it.
urls: {repo: "https://github.com/finbarr/yolobox"}
license: MIT
maturity: {value: active_0x}
thread_status: {value: directly_linked, src: hn_thread}
platforms: [macos, linux]
agents_supported:
value: [claude_code, codex, kimi_code, gemini_cli, antigravity, opencode, copilot, pi, agent_agnostic]
basis: First-class CLI shortcuts documented for Claude, Codex, Kimi Code, Gemini, Antigravity, OpenCode, Copilot, and Pi (Claude/Codex/Kimi Code get built-in yolobox guidance); shell/run cover other harnesses.
classification:
role: runtime
execution_locus: local
isolation_boundary: {value: container, basis: Container-based; agent gets sudo inside the container.}
state_model: {value: persistent, basis: Named volumes preserve setup across sessions.}
network_policy: {value: open, basis: Open network by default; --no-network available per command.}
credential_mediation: {value: mounted, basis: "Passed-in secrets are exposed to the agent, per its own security notes."}
risk:
stated_scope:
value: [t1_accidents]
basis: README is explicit that it protects against accidents more than hostile-code escape, and recommends rootless Podman or a VM for tighter threat models.
assessed_tiers:
value: [t1_accidents]
ev: editorial
derived_from: [risk.stated_scope]
basis: Matches the vendor's own honest scoping; no reason to assess beyond it.
design_intent:
value: liberate
basis: The product's framing is letting the agent run freely inside the box.
pricing: {model: free_oss}
footprint_notes:
value: Single shared-kernel container with named volumes.
basis: Documented architecture.
convenience_notes:
- {value: One-command ergonomics with hardening options documented.}
integrations: [cli_flags, hardening_options, security_model_docs]
audience: [individual_developer]
limitations:
- {value: Not positioned as a strong escape barrier.}
- {value: Project dir and passed-in secrets remain exposed.}
- {value: Open network by default.}
compliance: {value: none_stated}
- id: bitrise_rde
name: Bitrise Remote Dev Environments
default_source: bitrise_rde
tagline: Hosted isolated VMs (macOS and Linux) for remote dev and agent sessions on CI infrastructure.
urls: {official: "https://bitrise.io/platform/remote-dev-environments"}
license: proprietary_service
maturity: {value: beta, basis: Product page positions RDE as in beta with free trial / talk-to-us packaging.}
thread_status: {value: directly_linked, src: hn_thread}
platforms: {value: [macos, linux], basis: "Vendor-hosted macOS and Linux cloud environments on Bitrise CI stacks — hosting model is already captured by classification.execution_locus: vendor_cloud; these ids denote OS only."}
agents_supported: {value: [claude_code, codex, gemini_cli, mcp_orchestrated], basis: "Product page lists Claude Code, Codex, Gemini CLI, and MCP-orchestrated agents among supported tools."}
classification:
role: remote_workspace
execution_locus: vendor_cloud
isolation_boundary: {value: vm, basis: Cloud VMs on the same stacks/caches as Bitrise CI; one machine per task.}
state_model: {value: persistent, basis: Persistent on-demand VMs; sessions can be archived and restored.}
network_policy: operator_managed
credential_mediation:
value: unspecified
basis: Product page says credentials are scoped to the session and agents use user-supplied API keys; that is lifetime/scope control, not documented mediation that keeps secrets off the guest (managed_integration).
risk:
stated_scope:
value: [t1_accidents, t3_hostile_escape]
basis: Security framing emphasizes per-session isolation and the same posture as Bitrise CI infrastructure; public page does not document egress or host-side secret injection for agents.
assessed_tiers:
value: [t1_accidents, t3_hostile_escape]
ev: editorial
derived_from: [classification.isolation_boundary, classification.credential_mediation]
basis: VM isolation is credible for accidents and hostile escape; t2 left unasserted because session-scoped keys still land with the agent and egress control is not documented on the public page; vendor sits inside the trust boundary.
design_intent:
value: liberate
ev: editorial
basis: Off-laptop machines for agents to work in, one per task.
pricing:
model: contact_sales
notes: {value: Product page offers free trial and says talk-to-us for fit; packaging still in flux during beta.}
footprint_notes:
value: Vendor hardware, including cloud macOS — rare in this space.
basis: Product page.
convenience_notes:
- {value: "SSH, VNC, web terminal, VS Code plugin, MCP server, API."}
integrations: [cli, web_ui, mcp_server, api, vscode_plugin, ssh, vnc, web_terminal]
audience: [team, mobile_team, enterprise]
limitations:
- {value: Pricing/packaging moving during beta.}
- {value: No self-hosted RDE equivalent surfaced., ev: editorial, basis: Not found in fetched sources; Bitrise supports on-prem runners for builds generally.}
compliance: {value: none_stated_for_rde_specifically}
- id: github_codespaces
name: GitHub Codespaces
default_source: codespaces_docs
tagline: Hosted VM + devcontainer dev environments, commonly repurposed as agent sandboxes.
urls: {official: "https://github.com/features/codespaces"}
license: proprietary_service
maturity: {value: mature_ga}
thread_status: {value: directly_linked, src: hn_thread}
platforms: [browser, vscode]
agents_supported: [agent_agnostic]
classification:
role: remote_workspace
execution_locus: vendor_cloud
isolation_boundary: {value: layered, basis: Development container hosted on a VM; isolated virtual network per codespace.}
state_model: {value: persistent, basis: "Saved changes persist across stops; 30-minute idle timeout default; inactive stopped codespaces delete after 30 days by default, configurable."}
network_policy: {value: open, basis: Outbound internet allowed by default.}
credential_mediation: {value: unspecified, basis: Standard GitHub secrets model; no agent-native mediation story documented.}
risk:
stated_scope:
value: [t1_accidents]
basis: Official docs claim isolated virtual networking and enterprise auditability; positioning is dev environments, not agent safety.
assessed_tiers:
value: [t1_accidents, t3_hostile_escape]
ev: editorial
derived_from: [classification.isolation_boundary, classification.network_policy]
basis: The VM contains damage to the codespace, but open outbound by default and no agent-native secret mediation leave the exfiltration tier unaddressed.
design_intent:
value: liberate
ev: editorial
basis: A general dev environment repurposed as a wall, with no agent gating layer.
pricing:
model: free_tier_plus_usage
notes: {value: "Free allowance for individuals, then pay-as-you-go."}
footprint_notes:
value: Vendor hardware; prebuilds shorten startup at extra cost.
basis: Codespaces docs.
convenience_notes:
- {value: "Devcontainer features, prebuilds, browser and VS Code access."}
integrations: [rest_api, vscode, browser, devcontainer_features, prebuilds, octokit]
audience: [individual_developer, team, enterprise]
limitations:
- {value: Not self-hostable.}
- {value: Outbound internet allowed by default.}
- {value: "Isolation is dev-environment-grade, not agent-specific safety control.", ev: editorial, derived_from: [classification.network_policy, classification.credential_mediation], basis: "No egress policy or credential mediation aimed at agent threat models."}
compliance: {value: inherits_github_enterprise_posture}
- id: claude_code_sandbox
name: Claude Code sandbox
default_source: claude_code_sandbox_docs
tagline: OS-native sandboxing built into Claude Code for safer autonomy with fewer prompts.
urls: {docs: "https://code.claude.com/docs/en/sandboxing", engineering: "https://www.anthropic.com/engineering/claude-code-sandboxing", containment: "https://www.anthropic.com/engineering/how-we-contain-claude"}
license: product_feature
maturity:
value: mature_no_beta_label
ev: editorial
basis: "As of 2026-07-20, the current canonical docs (code.claude.com/docs/en/sandboxing) no longer label the built-in sandboxed Bash tool beta or research preview; that label now applies only to the separate, standalone @anthropic-ai/sandbox-runtime package (which wraps the whole Claude Code process, not just Bash). The 2026 engineering post's beta wording described that earlier, narrower rollout. Anthropic does not explicitly call the built-in tool GA either — this is an absence of a beta label, not a confirmed GA announcement. Cross-checked independently via codex CLI, which reached the same conclusion."
thread_status: {value: directly_linked, src: hn_thread}
platforms: {value: [macos, linux, windows_wsl2], basis: "Seatbelt on macOS; Bubblewrap on both Linux and WSL2. WSL1 and native Windows are not supported."}
agents_supported: [claude_code]
classification:
role: runtime_feature
execution_locus: local
isolation_boundary: {value: os_sandbox, basis: "OS-native filesystem and network sandboxing — Seatbelt on macOS, Bubblewrap on Linux and WSL2."}
state_model: {value: persistent, basis: Local repo/workspace state persists; sandbox applies to bash commands and FS/network boundaries.}
network_policy: {value: configurable, basis: Sandbox-configured network boundaries.}
credential_mediation:
value: ambient