Tusko is an open-source agentic platform you can run yourself. Chat, planning, and lookups
answer without a container. An isolated OpenSandbox container spawns on the first write or
execute call, and a Steel browser on the first browse.
trace · one chat turn“Create a 6-slide Q3 deck with speaker notes.”
sandboxes1
span
0s2s4s6s8s
duration
chatturn
tier
fast
history
postgres
model
server-side allowlist
rate_limit
30 / min per user (default)
agentplan_task
tier
fast
sandbox
none
output
named goal + 3 to 5 milestones, shown inline
utopiasearch_chunks
tier
fast
sandbox
none
source
knowledge graph + long-term memory
workspacelist_files
tier
fast
sandbox
none
lookup
getExistingOpenSandbox
note
reads never spawn a container
toolwrite_file generate_slides.py
tier
sandbox
path
/workspace/generate_slides.py
guards
path traversal + NUL bytes rejected
sandboxspawn
tier
sandbox
trigger
first write to /workspace this session
call
getOrCreateOpenSandbox
pool
warm · Docker or Kubernetes
quota
1 of 5 live per user (default)
credentials
fail-closed, from env only
idle_ttl
30m, then reaped
toolexecute_command python3 generate_slides.py
tier
sandbox
cwd
/workspace
libs
python-pptx · openpyxl · pandas · python-docx
state
variables and files persist across turns
chatartifact presentation.pptx
tier
fast
file
presentation.pptx
content
6 slides · 16:9 · speaker notes
delivery
preview and download in chat
lanesandbox
sandbox
opensandbox
allocated_at
first write, not first message
workspace
/workspace, stateful
idle_ttl
30 min, then reaped
Fast lane: runs in the chat process, no containerSandbox lane: isolated OpenSandbox containerSpan structure follows the product; timings are illustrative.
Two lanes. Only one of them costs a container.
Most of a conversation is talking, planning, and looking things up. Tusko keeps that work in the
chat process. A sandbox is allocated the moment a tool has to write or run something, and stays
alive for the rest of the session.
Fast lane
In the chat process. No container.
plan_task
A named goal and 3 to 5 milestones, shown inline before anything runs.
search_chunks
Lookups in Utopia, the built-in knowledge graph and long-term memory.
delegate_subagent
Splits larger jobs across Researcher, Coder, and Reviewer roles.
list_files · preview
Reads use getExistingOpenSandbox, so they can never start a container.
Sandbox lane
In an isolated OpenSandbox container, per session.
execute_command
Runs in /workspace. Variables, dataframes, and files persist across turns.
write_file
Office libraries are preinstalled: python-pptx, openpyxl, pandas, python-docx, pypdf.
Steel browser
Navigation, screenshots, and multi-step actions, with a live watch view in the side panel.
warm pool
Docker or Kubernetes keeps the first execution fast. Idle sandboxes are reaped after 30 min.
Each guardrail below is enforced on the server and documented, with the setting that controls it.
Read the source if you would rather check than trust.
Fail-closed credentials
The sandbox service needs OPENSANDBOX_URL and OPENSANDBOX_API_KEY from the environment. Without them, nothing executes. There are no hardcoded keys or fallback gateways.
Chat requires an SSO session. Models come from a server-side allowlist. Requests carry at most the last 200 messages and an 8,000-character system prompt.
Decks, spreadsheets, and reports are generated by real code with python-pptx, openpyxl, and python-docx, then previewed and downloaded in chat. PDFs can be parsed and two files compared side by side.
Type / to start a skill: presentation, financial model, Word report, security audit, code review. Skills follow the open SKILL.md format. Larger jobs are split across Researcher, Coder, and Reviewer subagents.
Utopia keeps a knowledge graph with dated facts and long-term memory. Tasks can run on a cron schedule, notify you on Telegram, and snapshot the workspace to S3 or MinIO.
Tusko is a Next.js app on Postgres, released under the BSD 3-Clause license. Point it at an
OpenSandbox service for execution and a Steel browser for the web. If you leave the sandbox
credentials unset, execution stays off instead of falling back to something less safe.