Developer docs Guides
Workspaces & Git
Where task files live: workspaces inside the project sandbox, team-wide file sharing, GitLab-integrated runs, and disposable environments.
One sandbox per project
A project gets one resident sandbox. Workspaces are directories inside it at /workspace/{slug}, and everyone on the team reads and writes the same files. Files survive across runs — a script that writes report.md today finds it still there tomorrow.
Slugs are permanent
A workspace’s slug is generated when the workspace is created and never changes — the slug is the physical directory name, so renaming a workspace would orphan its files. The first workspace (slug default) is where tasks run unless told otherwise.
Choosing a workspace
A meta-task binds its default workspace; a create_task call can override it per run:
tid = create_task(
"indexer",
params={"source": "/workspace/docs/notes.md"},
workspace_slug="docs", # run against the docs workspace instead
)GitLab-integrated workspaces
Bind a GitLab repository to a workspace and tasks there switch to git mode: each run gets its own worktree on a task-{id} branch, and on success the branch is pushed and a merge request is opened automatically — the MR URL lands on the task record.
Disposable sandboxes
Heavy or risky runs can execute in a one-off sandbox instead of the project sandbox: a fresh environment with the same workspace layout, created for the run and deleted when it ends.
Custom environments
When a task needs dependencies beyond the preinstalled SDK, build a custom image from a Dockerfile in the project’s Images tab and bind it to the meta-task (or to a background service). The image replaces the base environment for those runs; the workspace layout stays the same.