A real session, one minute long
Recorded in a terminal, with the real Claude Code running inside cicoria.
Run them side by side, each one untouched
An agent in cicoria is the same program you run on its own, in a real terminal. Its interface, its keys and its slash commands all work as they always do.
- Claude CodeStatus, end of turn and the files it edits, reported through hooks. Its conversation resumes after a restart.
- GitHub Copilot CLIStatus and edited files through a plugin cicoria loads only for the sessions it starts.
- Codex CLIStatus, answers and patched files through hooks passed on its command line.
- Anything elseAny command line, such as aider. Its status is read from the terminal: output, quiet, or the bell.
Your own agent settings are never touched. The hooks are given to the processes cicoria launches, and to nothing else.
Two agents on one screen
ctrl+a - splits the agent pane and shows a second session below the first. ctrl+a tab or a click moves the keys between them, and the side panels follow the one you are typing to.
● Adding the empty-cart case to GET /orders…
● The client now shows an empty cart.
One repository, a worktree for each agent
Start a session where another one already works and cicoria offers it a git worktree and a branch of its own, so two agents never write over each other. Closing the session offers to remove the worktree. The branch stays.
api already works in this repository: give
this session a worktree of its own? [y/N] y
~/src/shop.worktrees/fix-login cicoria/fix-login
Stop checking on them. They tell you.
Every session carries a mark and how long it has had it. ctrl+a a goes to the next one waiting for you, and a desktop notification tells you when one you are not looking at starts waiting.
- ●
- Working
- ▲
- Needs input: a question or a permission
- ✓
- Finished while you were looking elsewhere
- ○
- Idle
- ✕
- The agent exited; one key restarts it
Close the terminal, pick up where you left off
Sessions come back with their names, directories, notes and queues, and Claude Code, Copilot CLI and Codex CLI resume their conversation. Queues return paused, so opening cicoria never sends anything by itself. ctrl+a w opens another saved workspace.
workspace › ~/src/shop 3 sessions ~/src/worker 1 session ~/src/site 1 session open elsewhere
Review what they did, and say what you think
Read the agent's work the way you read a pull request, beside the agent that wrote it.
Everything it changed, commits included
The changes panel shows what is not committed, or with one key everything since the commit the session started on, so work the agent already committed is still there to read. Under it, the commits it made, each one a key away from its own diff. Diffs open on the whole screen, with search and jumps between hunks.
M api/orders.go +42 -3 A api/receipt_test.go +58 M openapi.yaml +24
e41a07c Document the receipt endpoint 4m 9b2f3d1 Add GET /orders/{id}/receipt 9m
Notes on lines, sent as one message
Select lines in a file or a diff and write what you think. When you are done, t sends every note to the agent together: each file, its lines, the code quoted and your words.
41 if tok == "" {
* 42 return nil
* 43 }
note on api/auth.go:42-43 › return an error, the caller ignores nil
Review notes:
api/auth.go:42-43
> return nil
> }
return an error, the caller ignores nil
Line up what comes next
Stop waiting for a turn to end before you type the next thing. ctrl+a m queues a message, and each one goes out when the agent ends its turn. Nothing is sent while it waits for a permission.
▸ then run the linter
update the changelogAsk one session about another's work
ctrl+a k puts your question to another session. Its answer comes back to the session you asked from, with your question and what to do with it, so you stop copying between panes.
I asked the session "api": > What does GET /orders return when the cart is empty? It answered: > A 200 with an empty `items` array, never a 404. Update the client to handle it.
An interface for you, not an orchestrator.
Every message is yours. An agent gets only what you write or queue. No workflow runs between agents.
Agents never talk behind your back. A question goes from one session to another only when you ask it.
Nothing runs without you. The agents stop when cicoria closes, and queues come back paused.
The first minute
Install it. You need git and the agents you want to run. It is tested on Linux, has builds for macOS, and runs on Windows in WSL2.
curl -fsSL https://henomis.github.io/cicoria/install.sh | sh
Open it on a project. The first session starts with Claude Code, and what you type goes to the agent.
cd ~/src/app cicoria
Press ctrl+a then c for another session: pick the agent, the directory it works in, and a name.
Press ctrl+a then ? for every key, or ctrl+a then space to find a command by name. The mouse works too. The rest is in the guide.
Start the agents, keep working, and switch to the one that needs you.
curl -fsSL https://henomis.github.io/cicoria/install.sh | sh