bb is an agentic IDE that lets users control, customize, and automate a software-development environment through a desktop app, web app, command-line interface, or HTTP API. Developers use it to run work in observable threads that can be steered or handed off to other agents. Its catalogue add-ons provide skills and instructions for working with bb.
Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add get-bb/bb --skill modal-sandboxesgit clone --depth 1 https://github.com/get-bb/bbWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/get-bb/bb/modal-sandboxes)<a href="https://agentmods.dev/skills/get-bb/bb/modal-sandboxes"><img src="https://agentmods.dev/badge/skills/get-bb/bb/modal-sandboxes/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/get-bb/bb/modal-sandboxes"><img src="https://agentmods.dev/badge/skills/get-bb/bb/modal-sandboxes.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00027 | $0.01970 |
| Opus 5.5 | $0.00011 | $0.00788 |
| Sonnet 5.5 | $0.00005 | $0.00394 |
| Haiku 4.5 | $0.00003 | $0.00197 |
Grade A, and why
modal-sandboxes scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 28d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 155 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Modal machines
- Install
builtin:environment-modal-sandboxand configuretokenIdandtokenSecretin plugin Settings. Do not print credentials.appNamedefaults tobb-sandboxes. The plugin page defines named sandbox size presets and images; the initial Default image contains the bundled Dockerfile. - Run
bb modal account inspect --jsonto test the connection without allocating compute. Exit status 1 means configuration or connection failed; the JSON gives a secret-free message. SDK callers use the plugin'smodalRpcContract(account.inspect) throughsdk.plugins.callRpc. - Resolve the project with
bb project list --json. It needs a Git remote, credentials to clone it, and machine server access reachable from Modal. - Create a standalone machine with
bb machine create --provider modal-sandbox --json. SDK:hosts.experimental_create({machineProviderId:"modal-sandbox",key}). Standalone machines remain until explicitly removed. Sandboxes created with a thread retire after their last live thread is archived. Use a stable creation key for retries. Composed thread creation accepts optional configured names as{"preset":"Large","image":"Node 22"}.
Settings edits the Default image's Dockerfile, adds named Dockerfile or Modal
image-ID entries, and adds named CPU/memory presets. Without a preset, new
machines reserve 1 CPU and 2 GiB; Modal lets a sandbox burst above its
reservation and bills whichever is higher. One or zero choices use the
default without adding a composer chip; multiple choices share one chip. Agents
can run
bb modal image show > Dockerfile, edit the file, then run bb modal image set --file ./Dockerfile. bb modal image reset restores the bundled default.
Append --json for structured output. File paths resolve from the CLI directory
on the current thread's host, or the server machine without thread context.
Typed RPCs image.definition, image.set({dockerfile}), and image.reset
return {dockerfile, customized} through sdk.plugins.callRpc.
Only one FROM followed by RUN, ENV, WORKDIR, and USER is supported. Comments and line breaks are preserved; no COPY, ADD, uploaded context, or multi-stage builds. Maximum length is 65,536 characters. Failed validation leaves the saved definition unchanged. Save/reset is plugin-wide and affects new machines only; it does not allocate resources or build. The next launch builds/reuses the content-hashed image. The bundled default supplies tools, not the BB daemon. Core installs the matching daemon during initial bootstrap, then handles machine enrollment, connection and checkout cloning. Creation progress reports build/allocation/bootstrap failures. Cancelling a launch prevents subsequent sandbox allocation, but an already submitted shared image build may finish.
Project dependencies and services belong in .bb-env-setup.sh. Core runs it after
creating the checkout. Restoring a machine does not rerun setup. Core also owns
.bb-env-teardown.sh for owned environments. Attached user-maintained paths skip
both hooks. Configure runtime secrets through core Machine environment settings;
never bake them into the image. There are no user recipes, context uploads, smoke
verification records or promotion commands.
Use bb machine list --json for core suspension state and
bb modal machine inspect HOST_ID --json for Modal expiry and saved-image
status. Idle pause defaults to 15 minutes; compute lifetime is fixed at Modal's
24-hour maximum. There is no retention/keep policy; remove machines explicitly.
Manual and idle pauses drain BB work, stop the daemon, snapshot the filesystem, and durably record the snapshot before terminating compute. Resume restores the saved filesystem without rerunning setup. Core defers idle pause while persisted state ties a starting thread launch or provisioning environment to the machine, or while project checkout setup is pending; the next scheduled sweep retries. Continue interrupted turns explicitly.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 28d ago Changed · +2 lines 91e9bf16200d
- 1mo ago Changed · +6 lines b2bf71f579f2
- 1mo ago Changed 6d9e8aa26278
- 1mo ago Changed · +20 lines 03a1c7f6866b
- 1mo ago First seen · 127 lines · 27 tokens per session scan A 835c680d1643
modal-sandboxes is a skill published in the GitHub repository get-bb/bb (4,656 stars, last pushed today), licensed MIT. It adds 27 tokens to every session and 1,970 once invoked, about $0.0001 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-12.
Other skills, from other repositories
mirrord-db-branching
Helps users configure mirrord.json for database branching, enabling isolated database copies for safe development and testing. Use when the user wants to set up MySQL, MariaDB, PostgreSQL, MSSQL, MongoDB, Redis, DynamoDB, ClickHouse, Google Spanner, Amazon S3, turbopuffer, or generic branches, configure copy modes…
mirrord-prev-env
Help users create and manage mirrord preview environments — running a modified service as an isolated pod in a shared Kubernetes cluster, scoped by an environment key and HTTP/queue traffic filtering, so teams can validate and review changes against real traffic without affecting live services. Use when a developer…
mirrord-kafka
Helps DevOps engineers configure mirrord Operator's Kafka queue splitting feature end-to-end. Generates the MirrordSplitConfig and MirrordPropertyList Kubernetes CRD YAMLs (the current resources; MirrordKafkaTopicsConsumer + MirrordKafkaClientConfig are deprecated but still supported), the matching mirrord.json…
mirrord-operator
Help users install and configure the mirrord Operator for team/enterprise environments. Use when users ask about operator setup, Helm installation, cloud API key or license configuration, air-gapped/offline licensing, enabling features (queue splitting, DB branching, preview environments, multi-cluster), internal…
mirrord-header-propagation
Makes a codebase propagate W3C baggage (the baggage header carrying mirrord-session= ) end to end, so mirrord HTTP filters, preview environments, and queue splitting can route a whole request chain to one developer's session. Detects existing OpenTelemetry, Datadog, or other tracing that can already propagate baggage…
mirrord-temporal
Helps DevOps engineers configure mirrord Operator's Temporal task queue splitting feature end-to-end. Generates the MirrordSplitConfig and MirrordPropertyList Kubernetes CRD YAMLs, the matching mirrord.json splitqueues section with messagefilter and jqfilter, and Helm value guidance. Use this skill whenever the user…