Run Claude Code sessions inside E2B sandboxes over the A2A protocol.
mix deps.get
mix escript.build
Produces a standalone ./throng_cli (requires Erlang/Elixir installed).
E2B_API_KEY— required, for the E2B API.- Any
${VAR}referenced in your config (e.g.ANTHROPIC_API_KEY,GITHUB_TOKEN).
throng_cli create --config example.json [--name api-work] [--template <id>] [--keep] [--debug]
throng_cli connect <alias|id> [--debug]
throng_cli list
throng_cli stop <alias|id>
create spins up a sandbox from the template
(throng-dev/throng-agent by default — the combined multi-engine image; use
--template throng-dev/throng-agent-elixir for Elixir workspaces), initialises
the agent from your config, and drops you into an interactive prompt. On exit the
sandbox is killed unless --keep is given.
JSON that maps to the agent's /api/initialise manifest. Every string value is
${VAR}-interpolated from the environment:
{
"repos": [
{ "url": "https://github.com/org/repo.git", "ref": "main", "dest": "app",
"primary": true, "token": "${GITHUB_TOKEN}" }
],
"setup_commands": ["npm ci"],
"agent": {
"platform": "claude",
"model": "claude-sonnet-5",
"permission_mode": "acceptEdits",
"api_key": "${ANTHROPIC_API_KEY}"
}
}
Exactly one repo must have "primary": true. agent.platform selects the engine
(claude or codex) and agent.api_key is the LLM credential — the combined
throng-agent image maps it to the engine's own env var.