Codewhale documentation
Release truthLatest release v0.9.12 · Sep 5, 2026These pages describe v0.9.12, the published release.Changelog →

Cloud computers

A local session can offload a coding task to a cloud computer the way an editor sends a cloud agent: the remote job raises a branch and is meant to open a pull request against an explicit forge. Local stays responsive. Spend and push never happen silently — a proposal is written first, and nothing creates a sandbox or pushes a branch until you confirm it.

Propose, then confirm

The first command writes a proposal and exits. The second confirms it by id. The TUI has the same two steps as slash commands, and the codewhale cloud-agent spelling is an alias of codewhale dispatch.

codewhale dispatch "open a PR that fixes the flake" --remote github
codewhale dispatch --confirm cloud_<id>

# the same two steps inside the TUI
/dispatch open a PR that fixes the flake --remote github
/dispatch confirm cloud_<id>

Cloud jobs are first-class on the existing jobs surface as kind=cloud. List, show, and cancel them from the TUI or the CLI:

/jobs list
/dispatch list
/dispatch show <id>
/dispatch cancel <id>
codewhale dispatch --list

Explicit forges

A remote is never assumed to be GitHub. A remote named after a forge is that forge; any other remote is classified by its URL host. If more than one forge is present, pass --remote.

github · cnb · gitee (by remote name)
that forge, whatever the URL
origin or other → github.com
github
origin or other → cnb.cool
cnb
origin or other → gitee.com
gitee

Enable a Daytona computer

Credentials live in the process environment or in the Codewhale secret store — never in config.toml or models.toml, and never committed.

Create an API key
In the Daytona dashboard under API keys.
Export it for the session
export DAYTONA_API_KEY=…, optionally DAYTONA_API_URL for a non-default endpoint.
Or store it once
In the Codewhale secret slot daytona (OS keyring or the $CODEWHALE_HOME secrets file). The CWC_DAYTONA_TOKEN alias is also accepted.

An installed daytona CLI is not a credential. codewhale dispatch --status and a bare /dispatch report CLI presence separately from credential presence.

Fail-closed rules

No confirm
A proposed job is written; the command exits success; Daytona is not called; nothing is pushed.
Confirm, no credentials
A refused job is written; the command exits failure; no sandbox exists.
Confirm with credentials
A Daytona sandbox is created, labelled with the job id and forge. This slice does not claim a GitHub, CNB, or Gitee PR URL, and a missing forge token fails closed the same way.

Who can dispatch

Managed Agent surfaces authenticate to the same Codewhale membership — the codewhale login account session. Membership gates cloud agents, not local dispatch: `codewhale dispatch` with Daytona and forge credentials needs no account. Provider brands stay internal, and installing or running the local runtime needs no account at all.

Not built yet

Live watch
A log tail of a running sandbox.
Cancel that tears down
Cancelling a paid Daytona sandbox from the job surface.
Auto-decide
Codewhale may propose a dispatch; it must not confirm its own proposal.
The remote runner
The agent that actually raises the branch and opens the pull request.

Source documents: docs/DAYTONA_CLOUD_DISPATCH.md, docs/CODEWHALE_AGENT.md · Update docs-map.ts when changing.