- Boat is the product: the site, the CLI, the API, your account and plan.
- a sandbox is what you create in it: what a “box” used to be. Paths, keys, events and error codes say
sandbox.
Timeline
The rename in one table
Not changed: ids (
bx_...), snapshot ids, the X-Ascii-* headers, Idempotency-Key, sandboxId on API keys (it already said sandbox), and every piece of your data.
1. CLI
boat reads the config box wrote. Then:
- Replace
boxwithboatin scripts and CI. Subcommands are unchanged:boat new,boat list,boat ssh. - Rename
BOX_*variables toBOAT_*. An unsetBOAT_*currently falls back to itsBOX_*twin with a one-line notice on stderr. - Rename
.boxignorefiles to.boatignore(both are currently read;.boatignorewins when a directory has both). boat api-key create --box bx_1is now--sandbox bx_1.
box prints a migration reminder. Move to boat for subsequent updates; legacy binaries are not disabled by a date check.
2. SDKs
- the import:
ascii_box_sdk→boat_sdk,@asciidev/box-sdk→@boatdev/sdk - the base URL:
https://ascii.dev/api/box/v1→https://boat.dev/api/v1 - the client class keeps its product name:
BoxApi→BoatApi(ascii_box_sdk.api.box_api→boat_sdk.api.boat_api) - request and response types say sandbox:
CreateBoxRequest→CreateSandboxRequest,Box→Sandbox,boxId→sandboxId,.box→.sandbox,.boxes→.sandboxes,deleteBox→deleteSandbox - the helpers keep their names: Python
wait_until_ready,wait_until_idle,wait_for_desktop,wait_for_prompt,wait_for_prompt_done,stream_events,stream_prompt,stop_and_remove,read_text,write_text,exec_command; TypeScriptwaitUntilReady,waitUntilIdle,waitForDesktop,waitForPrompt,waitForPromptDone,streamEvents,streamPrompt,stopAndRemove,readText,writeText,execCommand
box/Box/boxes/Boxes → sandbox/Sandbox/sandboxes/Sandboxes covers the types and keys; the package import and BoxApi → BoatApi are the two by hand.
3. Raw HTTP
sandbox / sandboxes / sandboxId, type: "sandbox.created", code: "sandbox_not_found". Request bodies use the new keys too (passSandboxCredentials, sourceSandboxId).
A request to /api/box/* currently answers in box vocabulary and carries:
Sunset to find the calls you have not moved yet.
4. Webhooks
Webhooks you created before the rename keep deliveringbox.* events with box-spelled payloads. To move one, create it again through the Boat API (or boat webhook create) and delete the old one; the new one delivers sandbox.* events and X-Ascii-Event: sandbox.ready. Signatures, headers and retries are unchanged.
5. Hosted URLs
Every hosted route answers under bothhttps://<label>.on.ascii.dev and https://<label>.on.boat.dev, with the same _token. Update the links you have published or embedded to the on.boat.dev form; the retirement policy for the on.ascii.dev form remains unresolved.
6. Inside a sandbox
Theboat CLI is on the PATH of every sandbox, and box still resolves to it. BOAT_ID, BOAT_CURRENT_ID and BOAT_CLI_* are exported next to their BOX_* twins. Agent skills reference the boat skill; a box skill directory is removed on the next start.
Am I done?
- No
Sunsetheader in your API client’s logs. - No
boxbinary invoked by your scripts (the reminder line has stopped). pip show ascii-box-sdk/npm ls @asciidev/box-sdkare empty.- Webhooks listed by
GET /api/v1/webhooksshowsandbox.*events. - Published links say
on.boat.dev.
Appendix: every renamed name
Generated from the API specifications and the CLI source (backend/src/api/boat/inventory.ts), so this is the whole list, not a sample. Anything not in these tables did not change.
API paths
JSON keys (requests and responses)
OpenAPI schema / SDK type names
OpenAPI operation ids / SDK method names
Envelope
type values
Error
code values
Webhook events
CLI environment variables
In-sandbox environment variables (both spellings are exported inside every sandbox)
HTTP headers and query parameters
CLI flags
Files and directories
Retirement policy
The current implementation preserves legacy API routes, binary and environment aliases, and hosted addresses. The October 31 header does not implement a410 Gone, disable installed clients, or remove DNS. The scope and timing of any future retirement still need an explicit policy decision; this guide does not promise either a shutdown on that date or permanent support.
Questions: support@ascii.dev.