Work with several coding agents at once. Know which one needs you.

cicoria is a terminal workspace for the coding agents you already use. Each one runs in a session of its own. cicoria tells you which one is waiting, shows what each one changed, and sends your review back as one message.

curl -fsSL https://henomis.github.io/cicoria/install.sh | sh
Sessions
    Files
    ▾ api/
      orders.go
      receipt_test.go
    ▸ web/
      openapi.yaml
    session
    ›
    Changes
      Queue
        ctrl+a a next that needs you

        This workspace is running. When a session turns ▲, press ctrl+a then a to go to it, or click it, and answer. ctrl+a 1–4 goes to a session by its number.

        A real session, one minute long

        Recorded in a terminal, with the real Claude Code running inside cicoria.

        Claude Code writes a small Go HTTP server while a README waits in the queue. A second session, split below, counts the lines of main.go. A note on the diff then asks the first session for a new endpoint, and it adds it.

        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.

        api · claude · working · ~/src/shop · main
        ● Adding the empty-cart case to GET /orders…
        web · codex · idle · ~/src/web · main
        ● 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
        fix-login · claude · starting
        ~/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.

        Changes (3) · 2 commits
        M api/orders.go          +42 -3
        A api/receipt_test.go    +58
        M openapi.yaml           +24
        Commits (2)
        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.

        Queue (2)
        ▸ then run the linter
          update the changelog

        Ask 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

        1. 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
        2. Open it on a project. The first session starts with Claude Code, and what you type goes to the agent.

          cd ~/src/app
          cicoria
        3. Press ctrl+a then c for another session: pick the agent, the directory it works in, and a name.

        4. 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