cyboflow Home Features Docs Blog Changelog Download

Sessions and worktrees.

By default a session gets its own git worktree: a real checkout of your repo on its own branch. Agents work there, you review there, and nothing reaches your default branch until you merge. Start a quick session in place and it works in your checkout instead.

01Worktree isolation

Press ⌘N to open Start a new session, a three-step wizard: Project, Workflow, Configure. Windows uses Ctrl in place of ⌘ throughout this page.

By default the session gets a real git worktree: a checkout on its own branch, under the project’s worktrees/ folder unless the project points somewhere else. A quick session’s branch is named like happy-swan-20260917.

Several flows and chats run against the same project at once, without touching each other’s files or your uncommitted work. A Sprint’s per-task subagents share their session’s one worktree, landing one commit per task.

A quick session can also run in place, in your project checkout. No worktree, no isolation.

Global defaultSettings → AI → Session settings → Quick Sessions, offering Own worktree (default) and Project checkout (in place)
Per sessionThe wizard’s Advanced → Workspace radio group: Use global setting, Own worktree, In place (project checkout)
Base branchThe branch the worktree is cut from, default Project default
Limit An in-place session can never host a flow run. Launching a flow from one raises a confirm headed Workflows run in their own worktree, then opens it in a fresh worktree-backed session.

Merging writes the work onto the project’s default branch. Dismissing throws the worktree away. Other sessions are untouched either way.

02Quick sessions

Start a quick session is the featured card in the wizard’s Workflow step: an ad-hoc agent session against your repo, with no structured flow and no review steps. ⌘⇧S starts one from your defaults and skips the wizard.

Pick the provider on the Runtime row, which lists what you turned on at Settings → Integrations (Claude and Codex on a default install). The Mode row picks Chat or CLI.

New quick sessions open the interactive CLI terminal rather than the chat. The default lives at Settings → AI → Session settings → Quick Session Runtime, with the two choices Interactive terminal (default) and SDK. It decides only while Default Agent Runtime above it is left on Built-in default. Pinning a Claude runtime there decides whether the session starts on the terminal or the SDK, and outranks it.

MCP servers and plugins are a session-start decision too, made in the wizard’s Advanced section.

An in-place session hides Merge and Create PR, and offers only Dismiss.

03The composer

Flow runs, quick sessions, and the assistant share one composer. On an idle quick Chat session it carries Attach, Model, Permission, Effort, and Compact context once there is conversation to compact, plus Fast while Opus is the selected model.

On a CLI session the whole composer hides behind a hint strip until you press ⌃G or click Show input →. Revealed, the only pill is Permission, plus a read-only effort: ultracode label if the session was launched in ultracode.

ModelThe model for the session’s provider. A live picker only on an idle quick Chat session; a flow run’s model is pinned at launch. See models.
FastA Claude-only toggle for faster output. Off by default, applies from your next message, and shows a warning triangle when the CLI declines.
PermissionThe session’s permission mode. Applies from your next message on a Chat session, and when the terminal restarts on a CLI one.
EffortReasoning effort for the next turn, on a scale that follows the provider.
Compact contextSummarizes the conversation so it continues in a fresh window.

A quick session’s primary button is Send. While a turn runs it gives way: with a draft in the box you get Queue, Interrupt & send (⌘⇧⏎, Ctrl+Shift+Enter on Windows), and Stop (Esc). With no draft, only Stop.

In a flow run the primary button reads Queue while an SDK run is executing, and Send otherwise.

Chat sessions take image attachments by paste, drop, or the paperclip, 10 MB each. A pasted block over 5,000 characters becomes a text attachment, and typing @ autocompletes file paths from the worktree.

04Chats and terminals

A session can hold several chat panels and several terminal panels as tabs. The panel tab bar has Add terminal panel and an Add chat panel dropdown whose choices set that panel’s runtime: Inherit session, the provider’s SDK, or CLI (interactive). The provider itself is session-wide.

⌘⇧C jumps to the chat panel, opening one if the session has none. ⌘⇧` adds a terminal.

When an interactive terminal has died, the chat shows a red Terminal not running card with a Retry button that opens a new terminal in the same worktree. If the worktree is gone from disk, the card explains that and offers no retry. A refused resume also explains itself, and offers to resume anyway.

05The terminal dock

The terminal dock sits at the bottom of the center pane, and the chat is one of its tabs, so collapsing the dock collapses the chat with it.

It has three levels: a collapsed grip strip, a draggable standard height it remembers, and full, covering the center pane. Collapsing hides the terminals rather than unmounting them, so scrollback and live processes survive.

In a run the dock hosts Chat, Agent (interactive runs), Terminal, and Data Stream. The + button adds Terminal 2, Terminal 3, and so on as further tabs.

Those terminals are plain $SHELL processes in the run’s worktree, with none of the guardrails an agent runs under. They keep running across tab switches and past the end of the run, so a dev server you started stays up, and they replay a 256 KB backlog. Closing a tab kills that one; merge, dismiss, or app quit kills them all.

06Run controls and the summary panel

Run controls sit apart from the session close-out and touch no git. Cancel stops the agent and marks the run cancelled.

Pause parks a running or awaiting-review SDK run and keeps its resume handle; Resume re-drives it. On an interactive CLI run, Pause renders disabled with the tooltip Pause/Resume is SDK-only.

When a run finishes, or parks at a human gate, the center pane shows one of three summaries.

Workflow completeComplete workflow, plus Request changes on interactive runs
Workflow failedRestart flow and Close out, plus Retry failed step on programmatic runs
Ready for reviewThe run is still open at a human gate, so there is no Complete button and no dismissing it

Each one breaks token usage into Input, Output, Cache write, and Cache read. On a Sprint or Ship run that reached review or completion it also carries an advisory Score summary from the code-review eval, described in Insights. A failed run shows no score.

A finished run’s summary can be dismissed. Back to run puts the run view back, and Continue in chat jumps to the session’s follow-up chat when it has one. A View completion summary pill brings it back.

07The run monitor

Every programmatic flow run carries a live monitor agent you can chat with mid-run. These are chat requests, not buttons.

  • Skip the running step, or steer it.
  • Rewind the whole run to an earlier step.
  • Rewind a single Sprint lane, leaving the lanes beside it running.

The monitor can also stage a confirm-gated action itself, which then waits on you.

Rewinds only go backward. Asking to rewind to a step ahead of the run is refused, with a message telling you to skip the intervening steps instead. A lane that has already integrated refuses a lane rewind.

Which runs are programmatic is set by Workflow Orchestration; see how a flow runs.

08The diff rail

The right rail has four tabs: Workflow Progress, File Explorer, Diff, and Artifacts.

Diff renders four sticky, collapsible groups, each with its own +n / −n rollup: Unstaged, Staged, Untracked, and Committed.

Above them a base selector reads vs <label> · <ref> and offers four bases.

Branch pointThe default, trailed by the short SHA
<default branch> (local)Trailed by a −n behind count once your local copy has moved ahead
origin/<default branch>With a last-fetch label. Cyboflow resolves that freshness itself and never issues a git fetch of its own.
Another branchAnything else in the repo

The choice is remembered per session and per run. Under the selector, a working-tree strip shows N uncommitted with a ↻ refresh, a Commit… action that stages everything and commits with a message you type, and a destructive Restore behind a confirm. A commit is refused, naming the paths, when the live index holds a conflict.

Clicking a file opens it as a center-pane tab with Diff, Split, and Preview. Artifacts the session’s runs produced open as their own tabs, for a resting quick session as much as for a flow run.

09Merge, PR, dismiss

The close-out bar carries three buttons: Merge, Create PR, and Dismiss. Merge and Create PR check for live work in the session before they act.

Merge opens Merge session changes with two cards: Squash merge, with a message prefilled from the branch’s own commit subjects, and Preserve commits. The target is the project’s effective default branch, detected from the repo and shown read-only in project settings, so it is not always main.

  • Rebase required. If the target branch has gained commits since yours started, both paths stop with “Rebase required before merging.” Cyboflow refuses to rebase for you, and a failed merge shows git’s own output.
  • Nothing left to merge. If the work already landed, the dialog says so and offers Mark session complete.

Create PR pushes the session branch to the remote and opens the GitHub compare page, where you open the pull request yourself. A non-GitHub remote falls back to showing the branch name to copy. Afterwards you choose Keep session open or Mark complete.

Dismiss removes the worktree, deletes the session branch, and archives the session, warning first that unmerged changes are lost. If the work looks merged already, the dialog offers Mark complete, which keeps the session’s findings, beside Dismiss anyway.

Note Merging a Sprint moves its integrated tasks to Done on the board. Lanes that failed, were blocked, or never started revert to the stage they came from, and the close-out is fail-soft, so none of it can undo a merge that succeeded.

Cyboflow keeps its own git ignore rules in .git/info/exclude, never in your tracked .gitignore. A session’s pending verification requests are cancelled when it is merged, dismissed, or has a PR created.

10Keeping track of several sessions

The review home groups live sessions into three bands, attention first: Needs your input, Ready for review, and Working. A just-finished session gets a grace window before it counts as quiet.

Sessions can be renamed in place from the rail, and dragged into the order you want.

An idle quick session writes itself a short summary on its canvas, as a Summary node that becomes Summary & History once there is per-sitting history, listed open and collapsible.

It is written by a Haiku call once the session has been idle for 5 minutes. Turn summaries off at Settings → Assistant → Session summaries. Codex and OMP chat sessions get summaries too.