Git
The Git page (/git) is a real working git client over any of your registered projects, plus the ledger of every agent work session running against them. It's tabbed: Repository and Work Sessions (the active tab is in the URL as ?tab=).
Repository
The Repository tab is where you pick a project (and optionally a task), browse the live state of its workspace — status, branches, commit log, and diffs — and run git operations directly from the panel. It's how you inspect what the agents are doing in git, and step in by hand when you need to.
Picking a project
Choose a project from the dropdown to load its repository. The selection is held in the URL, so a given project's git view is shareable and back-button-safe. Until you pick one, the page prompts you to choose. You can also scope to a specific task.
Git operations run server-side against the agent workspaces, so this page needs the orchestrator running. With the backend down it shows an offline state with a retry rather than failing silently.
Browsing the repository
Once a project is loaded you get live, refreshable views:
- Status — staged and unstaged changes in the workspace.
- Branches — the branch list (including remotes).
- Log — the recent commit history.
- Diff — the staged/unstaged diff viewer for the working tree.
A Refresh re-pulls status, log, and branches together.
Operations you can run
The page wires up the full set of git operations against the selected project:
| Operation | What it does |
|---|---|
| Commit | commit staged changes (returns the new commit hash) |
| Push | push the current branch to the remote |
| Create branch | cut a new hierarchical branch for a task (by branch type) |
| Checkout | switch to an existing branch |
| Create PR | open a pull request (returns the PR number) |
| Merge PR | merge a PR into its target branch |
| Pull | pull the current branch from the remote |
| Fetch | fetch from the remote |
| Rebase | rebase the current branch onto a target branch |
| Clean Up Stale Branches | sweep the project's completed/cancelled tasks and delete their spent branches, remote and local |
Each action confirms with a toast on success (or a clear failure message) and refreshes the relevant view. Rebase refuses onto master/main or any of the project's own declared protected branches — the same floor a task's own force-push sync (sync_branch) respects.
These operations act on the real workspace clone and your real remote — a merge here merges for real. The same branch/PR/merge actions are also available, task-scoped, from the Task Detail page, where they run as agent id ceo. Remember that only the CEO merges to master; see the merge model.
Git authentication uses the project's encrypted git token, which you set when you register the project — the panel never holds or shows the token. The same operations table above works identically whether the project's forge is GitHub, Gitea, or GitLab.
Cleaning up stale branches
Every task branch an agent cuts eventually outlives its purpose — the task completes or gets cancelled, but the branch itself sits on the remote (and in every agent's local clone) forever unless something removes it. Clean Up Stale Branches, in the actions panel, sweeps a project's completed/cancelled tasks and deletes their branches — remote and local — in one confirmed action.
- PM and CEO only. Cell PM, Main PM, and CEO can run it; other roles are refused.
- Never touches the default branch, an operator-declared protected branch, or an environment-ladder rung. A branch still serving as a head/qa/stag/prod rung — or named in the project's Protected Branches list — is skipped even if some task happens to share its name.
- Skips a branch with open dependent PRs — one still serving as another PR's base is left alone rather than stranding that in-flight work.
- Capped per run, with a resume cursor. A sweep processes up to 200 candidate branches at a time; if a project has more, the confirmation toast says so and clicking Clean Up Stale Branches again continues exactly where the last run stopped, instead of re-scanning from the top.
The button opens a confirmation dialog before it deletes anything, and the toast that follows reports what happened: how many remote branches were deleted, how many local ones, how many were skipped (no resolvable local clone to clean up), and how many hit an error.
Finished tasks also clean up after themselves automatically, with no button required: on completion or cancellation, a task's local branch ref and its video-render preview files are removed from the assignee's clone as part of the normal lifecycle transition — so a long-running clone doesn't quietly accumulate cruft from every task that ever ran through it.
Work Sessions
The Work Sessions tab is the read-only ledger of active agent work sessions — a WorkSession links an agent's work to a task and tracks its git footprint: branch name, base and target branches, the PR number/URL, and merge status.
- Search and filter — search by branch name, and narrow by status (state lives in the URL, same as the rest of the panel).
- Active Session Starts — a chart of when today's active sessions began, bucketed by hour if they all fall within a 36-hour span, otherwise by day, so you can see whether work is clustering in bursts or spread out.
This tab shows currently active work sessions — it isn't a historical archive of every session a project has ever had. A session that finished (merged or abandoned) drops off the list.
For the lifecycle of a branch from cut to merge, see the merge model.
Next
→ Agents & work sessions to tie sessions back to the agents that ran them, or Workstation to manage the repositories themselves.