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=…, optionallyDAYTONA_API_URLfor a non-default endpoint.- Or store it once
- In the Codewhale secret slot
daytona(OS keyring or the $CODEWHALE_HOME secrets file). TheCWC_DAYTONA_TOKENalias 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
proposedjob is written; the command exits success; Daytona is not called; nothing is pushed. - Confirm, no credentials
- A
refusedjob 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.