Skip to content

Register ec2-firecrab as a direct-mode sandbox provider - #542

Merged
kisernl merged 10 commits into
masterfrom
add-ec2-firecrab-provider
Oct 23, 2026
Merged

kisernl merged 10 commits into
masterfrom
add-ec2-firecrab-provider

Conversation

@kisernl

@kisernl kisernl commented Oct 23, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Registers ec2-firecrab as a traditional direct-mode sandbox provider so the sandbox TTI bench can run against Firecracker microVMs on our firecrab-on-EC2 hosts — manual dispatch only, never on push/schedule or an "all providers" dispatch.

  • benchmarks/sandbox/providers.ts — new direct-mode entry after e2b: createCompute builds ec2Firecrab({sshTargets, sshIdentityPem, microNetwork, template, cpus:1, memoryMib:256, diskGb:2, egressPolicy:'internet'}) from env — sized for the node -v TTI probe. One SSH target list + key is the whole credential — the adapter self-opens an SSH local-forward per host for the loopback API and derives the guest-exec jumphost from the same credentials, so no tunnel step is needed in the workflow. microNetwork takes a network name (lab), resolved to its UUID via the API. destroyTimeoutMs: 90_000 since stop is ~30s graceful ACPI. manualOnly: true keeps it out of benchmarks-daily's derived matrix (computesdk/benchmarks-daily#45).
  • .github/workflows/sandbox-tti-benchmarks.yml — ec2-firecrab is active in the matrix but its leg is gated in SHOULD_RUN: it runs only on workflow_dispatch with provider: ec2-firecrab. Push, Friday cron, and blank-provider "all" dispatches all skip it. New host_count input: 0 (default) uses the vault's standing EC2_FIRECRAB_SSH_TARGETS; >0 launches a fresh pool in-job — loads AWS creds + FIRECRAB_* launch config from vault, checks out computesdk/ec2-firecrab, runs host/pool-up.sh N (targets flow to the bench via POOL_SSH_TARGETS), and pool-down.sh terminates under if: always(). EC2_FIRECRAB_* is loaded only in the firecrab leg — the host SSH key never reaches other providers' env.
  • benchmarks/scripts/provider-vars.json — vault declaration for the suite: EC2_FIRECRAB_* plus the pool vars (AWS_*, FIRECRAB_*, FIRECRAB_REPO_TOKEN).
  • package.json — @computesdk/ec2-firecrab: ^1.0.0 (published via computesdk#1004 → #1005).

Vault vars needed

Static (always): EC2_FIRECRAB_SSH_KEY (PEM for the hosts' ubuntu user), EC2_FIRECRAB_MICRO_NETWORK (lab), EC2_FIRECRAB_TEMPLATE (catthehacker-ubuntu-act-latest), EC2_FIRECRAB_SSH_TARGETS (a standing host like ubuntu@x.y.z.w — used when host_count=0).
Pool runs additionally need: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION, FIRECRAB_AMI_ID, FIRECRAB_KEY_NAME, FIRECRAB_SG_ID, FIRECRAB_SUBNET_ID, FIRECRAB_REPO_TOKEN (checkout for the private ec2-firecrab repo).

To run it

Standing host: vault EC2_FIRECRAB_SSH_TARGETS=ubuntu@<ip> → Actions → Sandbox TTI → provider: ec2-firecrab, host_count: 0.
Ephemeral pool: dispatch with provider: ec2-firecrab, host_count: N — everything else is automatic.

Verified live on the spike host (burst-2 smoke through the real tti.bench.ts): 2/2 concurrent sandboxes, TTI ~36.9s each.

Link to Devin session: https://app.devin.ai/sessions/6a5fd0700bcf437c8f189d45b35e4cd4
Open in Devin Desktop: https://app.devin.ai/desktop/session/6a5fd0700bcf437c8f189d45b35e4cd4?variant=devin
Requested by: @kisernl

Co-Authored-By: Noah Kiser <noah@computesdk.com>
@devin-ai-integration

Copy link
Copy Markdown
Contributor

I'll fix CI failures and address comments from users with write access. I'll skip comments containing "(aside)".

  • Disable automatic comment, CI, and merge conflict monitoring

devin-ai-integration Bot and others added 7 commits October 23, 2026 17:09
…phost

Co-Authored-By: Noah Kiser <noah@computesdk.com>
Co-Authored-By: Noah Kiser <noah@computesdk.com>
Co-Authored-By: Noah Kiser <noah@computesdk.com>
Co-Authored-By: Noah Kiser <noah@computesdk.com>
The provider stays in the matrix so a manual dispatch can select it, but
SHOULD_RUN now requires workflow_dispatch + provider='ec2-firecrab' for
its leg — it never runs on push/schedule, and a blank-provider 'all'
dispatch skips it too (its host pool is spun up per manual run).
Also adds EC2_FIRECRAB_* to the vault secret regex so a dispatched leg
actually receives its env.

Co-Authored-By: Noah Kiser <noah@computesdk.com>
benchmarks-daily builds its scheduled matrix by iterating this providers
list; the flag keeps dispatch-only providers out of those legs.

Co-Authored-By: Noah Kiser <noah@computesdk.com>
Co-Authored-By: Noah Kiser <noah@computesdk.com>
@kisernl
kisernl marked this pull request as ready for review October 23, 2026 19:27
@open-cla

open-cla Bot commented Oct 23, 2026

Copy link
Copy Markdown

Contributor License Agreement

All contributors are covered by a CLA.

@superagent-security superagent-security Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Superagent found 1 security concern(s).

Comment thread .github/workflows/sandbox-tti-benchmarks.yml Outdated
devin-ai-integration Bot and others added 2 commits October 23, 2026 19:38
The shared regex exported the host SSH private key into every provider
leg's env while every provider package runs in-process. Matches the
sandbox-capabilities.yml pattern of per-provider vault scoping.
Also adds the host_count pool steps (pool creds step is already gated
to the firecrab leg via FIRECRAB_POOL).

Co-Authored-By: Noah Kiser <noah@computesdk.com>
Co-Authored-By: Noah Kiser <noah@computesdk.com>
@kisernl
kisernl merged commit 484c441 into master Oct 23, 2026
6 checks passed
@github-actions

github-actions Bot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Sandbox Benchmark Results

Burst

# Provider Score Median TTI P95 P99 Status
1 miosa 99.6 0.03s 0.04s 0.04s 10/10
2 promigence 99.6 0.04s 0.04s 0.04s 10/10
3 createos 99.2 0.08s 0.09s 0.09s 10/10
4 declaw 98.5 0.14s 0.16s 0.16s 10/10
5 isorun 98.2 0.18s 0.19s 0.19s 10/10
6 superserve 98.1 0.18s 0.19s 0.19s 10/10
7 buddy 97.7 0.21s 0.27s 0.27s 10/10
8 givemeanode 97.6 0.22s 0.27s 0.27s 10/10
9 arker 97.5 0.24s 0.27s 0.27s 10/10
10 daytona 97.2 0.22s 0.37s 0.37s 10/10
11 archil 97.1 0.23s 0.36s 0.36s 10/10
12 blaxel 96.7 0.32s 0.34s 0.34s 10/10
13 beam 96.5 0.34s 0.35s 0.35s 10/10
14 upstash 96.0 0.40s 0.42s 0.42s 10/10
15 vercel 93.9 0.32s 1.04s 1.04s 10/10
16 cloudflare 93.8 0.56s 0.70s 0.70s 10/10
17 mosaic 92.9 0.64s 0.83s 0.83s 10/10
18 tenki 91.9 0.78s 0.86s 0.86s 10/10
19 novita 90.5 0.89s 1.05s 1.05s 10/10
20 modal 89.7 0.71s 1.52s 1.52s 10/10
21 tensorlake 85.1 1.40s 1.62s 1.62s 10/10
22 sandbox0 83.9 1.45s 1.86s 1.86s 10/10
23 e2b 82.7 1.57s 1.97s 1.97s 10/10
24 sail 78.7 2.06s 2.23s 2.23s 10/10
25 microsandbox 77.7 1.94s 2.68s 2.68s 10/10
26 freestyle 75.0 2.38s 2.69s 2.69s 10/10
27 cloud-run 74.9 2.32s 2.80s 2.80s 10/10
28 codesandbox 66.5 3.08s 3.75s 3.75s 10/10
29 gravixlayer 0.0 0.00s 0.00s 0.00s 0/10
30 hopx 0.0 0.00s 0.00s 0.00s 0/10
31 northflank 0.0 0.00s 0.00s 0.00s 0/10
32 run-cloud 0.0 11.04s 14.38s 14.38s 10/10

View full run · SVGs available as build artifacts

@computesdk

computesdk Bot commented Oct 23, 2026

Copy link
Copy Markdown

Sandbox Dax Benchmark Results

Provider Phases Total Prepare Clone Install Typecheck Status
archil 0/7 0.00s 0.00s 0.00s 0.00s 0.00s 0/1 OK
arker 7/7 66.33s 7.48s 1.77s 11.54s 40.79s 1/1 OK
beam 7/7 127.42s 12.93s 2.97s 60.74s 32.69s 1/1 OK
blaxel 7/7 116.28s 1.83s 1.65s 66.09s 35.05s 1/1 OK
buddy 7/7 75.73s 4.54s 1.52s 29.90s 28.00s 1/1 OK
cloud-run 2/7 1.08s 0.28s 0.00s 0.00s 0.00s 0/1 OK
cloudflare 7/7 176.19s 11.81s 3.88s 64.28s 72.96s 1/1 OK
codesandbox 6/7 22.47s 192062.88s 3.51s 7.71s 0.00s 0/1 OK
createos 7/7 51.04s 6.11s 2.80s 12.54s 24.53s 1/1 OK
daytona 7/7 72.66s 8.20s 1.66s 14.08s 36.53s 1/1 OK
declaw 7/7 227.74s 15.34s 4.07s 47.12s 144.95s 1/1 OK
e2b 5/7 24.52s 5.08s 3.15s 0.00s 0.00s 0/1 OK
freestyle 6/7 302.12s 17.98s 10.38s 35.38s 0.00s 0/1 OK
givemeanode 2/7 1.80s 1.32s 0.00s 0.00s 0.00s 0/1 OK
gravixlayer 7/7 52.56s 5.41s 3.32s 10.99s 27.42s 1/1 OK
hopx -- 0.00s 0.00s 0.00s 0.00s 0.00s 0/1 OK
isorun 7/7 66.92s 2.42s 1.01s 40.10s 18.87s 1/1 OK
microsandbox 7/7 67.44s 3.60s 3.09s 26.62s 24.99s 1/1 OK
miosa 7/7 35.60s 0.38s 1.81s 10.08s 18.55s 1/1 OK
modal 7/7 84.35s 7.33s 2.58s 22.32s 44.84s 1/1 OK
mosaic 7/7 86.43s 1.55s 2.19s 40.11s 31.07s 1/1 OK
namespace 7/7 55.40s 3.20s 1.09s 23.41s 20.61s 1/1 OK
northflank -- 0.00s 0.00s 0.00s 0.00s 0.00s 0/1 OK
novita 7/7 85.62s 20.89s 4.67s 17.72s 30.63s 1/1 OK
promigence 7/7 34.82s 1.78s 1.88s 9.44s 18.98s 1/1 OK
run-cloud -- 0.00s 0.00s 0.00s 0.00s 0.00s 0/1 OK
sail 7/7 64.76s 7.60s 2.86s 14.62s 31.39s 1/1 OK
sandbox0 7/7 97.97s 27.66s 2.10s 22.79s 39.87s 1/1 OK
superserve 7/7 61.53s 2.62s 1.84s 10.43s 43.30s 1/1 OK
tenki 7/7 53.88s 4.37s 2.76s 15.47s 21.87s 1/1 OK
tensorlake 7/7 74.86s 16.31s 2.94s 11.25s 38.70s 1/1 OK
upstash 7/7 56.56s 6.41s 1.64s 11.67s 26.09s 1/1 OK
vercel 7/7 65.92s 12.46s 1.72s 11.86s 33.41s 1/1 OK
opencomputer -- 0.00s 0.00s 0.00s 0.00s 0.00s 0/1 OK

View full run

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant