Argus
0:argus* open source · self-hosted · MIT

A hundred eyes on your AI agents.

A web workspace for the coding agents you already run in tmux. See which one is working and which is waiting for you, open what it wrote in one click, and answer from your phone.

$ curl -fsSLO https://raw.githubusercontent.com/andreaderuvo/argus/master/install.sh && bash install.sh

Works with Claude Code, Codex, Gemini CLI, Aider, OpenCode, and anything else that runs in a terminal.

A sketch of an Argus desk: an agent that is working, one that is waiting for you, the report it wrote opened beside it, and the same session on a phone. lab-box:8090 · desk “api” claude · api-cache ● working *Refactoring the cache… 1m 12s Read src/cache.py Edit src/cache.py +42 −7 Ran tests · 48 passed wrote results/report.md codex · docs waiting for you · 4m Two ways to keep the index: 1. in memory 2. on disk Which one do you want? › _ results/ distances.tsv report.md tree.png report.md Cluster report api-cache ● working docs waiting shell CtrlEsc ↑↓ click it —it opens here it knows who is working… …and who is waiting for you the same session, on your phone
1:at-work*

Seven things it does, on a lab that does not exist.

Real screenshots of Argus, taken by a script on an invented lab: a Salmonella study and a small web shop, with agents on both. Every name, path and number in them is made up.

Argus: every agent at a glance — Four agents on one shop, each in its own window: two working, one waiting with a question you answer right there, in the corner.
Every agent at a glance. Four agents on one shop, each in its own window: two working, one waiting with a question you answer right there, in the corner.
1 / 7
2:why*

Agents work for minutes. Then they stop and wait for you.

You find out forty minutes later, over ssh, squinting at a pane. Argus takes care of the part of the job that is not typing: knowing, seeing, answering.

  • Know when one needs you

    Every session says working or waiting for you, worked out from the pane itself. There is nothing to install in the agent.

  • See what it produced

    Every path an agent prints is a link. The report, the plot and the PDF open beside the session that made them, already rendered.

  • Answer from anywhere

    The same sessions, still running, on your phone, with a key bar for Ctrl, Esc and the arrows. Close the tab and the work carries on.

A sketch of the session list: two agents working, one waiting for you for twelve minutes, and a plain shell. Sessions api-cacheclaude · up 2h · 1.4 GB ● working docscodex · up 40m waiting for you · 12m listeria-rungemini · up 5h ● working shellbash · up 3d no agent, no label
3:how*

It attaches to the sessions you already have.

Argus is one more client of your tmux server. It does not wrap your agent or move your work, and closing the browser never stops anything.

  1. Install it where your agents runA workstation, a server, a box in a cloud. One script, Docker, or pip.
  2. Open the link it printsIt carries a private token, and there is a QR code for the phone. No account.
  3. Your sessions are already thereEvery tmux session, with its files and reports. You can start new agents from the page too, with their first instruction typed in.
How it fits: on your machine, tmux holds the agent sessions and Argus sits beside it; a laptop and a phone reach Argus with a token; nothing goes to a cloud. your machine tmux claude● codex shell argus :8090 laptop phone token nothing leaves this box
4:hand-offs*

Pass work from one agent to the next.

Keep your prompts in a library, with placeholders filled in for each project. Drag one onto a session and it is typed there. The Enter is left for you, so the last word is yours.

  • Desks, not tabs

    Terminals, folders and documents side by side, one desk per project, kept between visits.

  • Select, and hand it over

    Select what one agent said and a button offers the other sessions of the desk. While you write a prompt, one press sends it to another agent as well.

  • Start an agent from the page

    In a folder, with its first instruction, and its options in words: what it may do without asking, which model, how hard it thinks.

A saved prompt card called Referee being dragged onto a second agent's session, where it is typed and waits for Enter. Referee prompt Review the change in {folder}; end with VERDICT: OK or REDO codex · review applied two of the three left the threshold alone › Review the change in ~/projects/salmonella-2026 drag it onto a session you press Enter
5:team*

A team of agents on one goal.

Write the goal in words and pick a shape. Argus prompts each agent in turn, runs your tests or your benchmark between turns, and moves on from the numbers and the reviewer's verdict. It keeps going with every browser shut.

  • A graph, not a chat

    Steps and arrows. Two agents try two ideas at once, each in its own git worktree, and a join waits for both before the reviewer keeps the better one.

  • The numbers decide

    A check is a command: tests, a benchmark. Its exit code says pass or fail, and a failure goes straight back to the agent with the output in front of it.

  • Click it, or write it in Mermaid

    Start from Optimise, Fix a bug, Write, Build and review and three more. Click a step to change it, or write the team as a Mermaid flowchart and watch it drawn as you type. Save the shape as your own, or keep it in the repository as team.yaml.

  • Agents that report, not a screen read

    With the Argus plugin each agent asks for its task and reports its turn through a tool, with its verdict. An agent that tries to stop without reporting is sent back to do it. Every turn is written to TEAM.argus.md in the project.

  • Or ask an agent to design it

    "Make me a team that speeds up the parser." The agent writes the team, checks it, and leaves it in the project for you: one tap opens it, ready to start.

  • As much on its own as you like

    A press at every round, until something fails, or until the goal is met.

A team drawn as a graph: a planner hands two ideas to two executors working in parallel, each checked by a benchmark, then a join and a reviewer who keeps the faster one; a dashed arrow back to the planner starts the next round. goal make the aligner faster, same results planner claude executor-a claude executor-b codex cargo bench 41.2 s pass cargo bench 33.8 s pass reviewer keeps b done redo · the next round two ideas, two worktrees the numbers decide
6:plugin*

Ask your agent. It sets up the desk.

Install the Argus plugin in Claude Code or Codex and Argus becomes one of the agent's own tools. Say open a desk called pippo with a Claude and a Codex and the tab appears with both of them running. The agent also tells Argus when it starts, when it finishes and when it needs you.

  • One install

    /plugin marketplace add andreaderuvo/argus, then /plugin install argus@argus. Codex reads the same plugin.

  • In your own words

    Open, rename and fill desks. Start agents with their options, each in its own worktree. Ask you a question and wait for the tap on your phone.

  • The agent says what it is doing

    A turn starting, a turn ending with its last words, a wait for you naming the command it wants to run. The lights on the tabs come from the agent, not from a guess.

  • Your decisions stay yours

    It cannot answer its own questions, start an agent that asks nobody anything, or remove a desk.

On the left, an agent's terminal where someone typed "open a desk called pippo with a Claude and a Codex", and the agent calling open_desk and start_agent twice. On the right, the browser with a new tab called pippo holding two windows, claude and codex, both working. claude · ~/work › open a desk called pippo with a Claude and a Codex ● argus · open_desk(pippo) ● argus · start_agent(Claude Code) ● argus · start_agent(Codex) pippo is open, both are running. argus cgDist pippo claude codex hooks: start · done · needs you you just say it and the desk is there
7:phone*

Your desk, in your pocket.

It is the session that was already running, not a copy of it. You get a key bar for the keys a phone has not got, a long press to open a path, and a box to write a line in when the keyboard fights the terminal.

And it reaches you with the browser closed. Point Argus at ntfy, the public server or one of your own, and the phone buzzes when an agent finishes or asks: "cgdist: needs your permission to use Bash", on the lock screen, with the tab long shut.

A phone showing an agent asking a question, with a key bar of Ctrl, Esc, Tab and arrows under it. docs waiting · 4m Two ways to keep the index: 1. in memory 2. on disk Which one? › 2 CtrlEsc Tab↑↓ answered from the train the keys a phone has not got
8:more*

Everything an agent's work points at.

Documents, renderedMarkdown with figures and diagrams, PDF with search, Word, images, and logs that open at the end.
A file browserList or tree, drag and drop, paste a screenshot into a folder. Folders update when a job writes to them.
The machine at a glanceCPU, memory, GPUs, disks and the biggest processes, labelled by you so you remember what they are.
Local portsA dev server on localhost, reachable from your phone through Argus, only if you allow it.
A plugin for your agentsOne install in Claude Code or Codex: the agent tells Argus when it starts, finishes and needs you, and gets Argus as tools: ask you and wait for the tap, start another agent.
Several machinesPanoptes is one page over every Argus you run.
Back after a rebootThe agents a reboot took with it are offered back, each in its folder and its own conversation.
One ring per turnFinished or asking, from a hook or from the pane going quiet: one bell. Seen it? Got it, on every device.
NotesPlain files written in place and saved as you type, Markdown and Mermaid drawn beside them. Your agents read and write them too.
To-dos with a deadlineArgus rings when it is time, and puts the deadline in Google Calendar, Apple Calendar or Outlook. No account, no mail server.
A dock for the deskPut a window away along the bottom and the layout is made of the rest. It keeps running; one press brings it back.
Restart on the new versionAn agent started again in its session, on the version installed now, with the same conversation.

Everything it does, in detail

9:yours*

It runs on your machine, and nothing leaves it.

No cloud

No relay, no account, no telemetry. Code, sessions and files stay where they are.

A token per device

Every request carries a private token. Revoke a phone without touching the others.

A jail for files

Only the folders you name can be read, and writing is off unless you turn it on.

It works best behind a LAN, a VPN or Tailscale. How it is kept safe

10:fleet*

Several machines? Panoptes.

Argus is the workspace for one machine. Panoptes is one page over all of them, ordered by which one needs you: which agents are working, which machine is unhealthy, who is waiting. It holds restricted watcher keys and never sends a machine's key to the browser. Use Argus alone first; add Panoptes when one tab per machine stops scaling.

11:install*

Running in a minute.

Linux and macOS, or Windows through WSL or Docker. It needs Python 3.11 or newer and tmux, and it prints a link: open it, or scan its QR code with your phone.

# read it first, then run it
curl -fsSLO https://raw.githubusercontent.com/andreaderuvo/argus/master/install.sh
less install.sh && bash install.sh
argus --allow-write          # prints a URL with a token in it

Getting started, step by step

12:faq*

Before you try it.

Do I have to change how I use tmux?

No. Argus attaches as one more client to the sessions you already have. What you see in the browser is the same pane you would see over ssh, and closing the tab leaves everything running.

Does it need a plugin in my agent?

No. It reads what the session prints and types into it, the way you do, and it works out working and waiting from the pane. An optional one-line hook lets an agent ring you on its own, and an optional MCP server, argus-mcp, gives it Argus as tools: ask you something and wait for the answer, start another agent, see who else is working.

Will my phone tell me when an agent is done?

Yes, even with every tab shut. The server watches the agents on its own and, with three lines of config, sends each ring to ntfy: install its app, subscribe to your topic, and a finished turn or a question arrives as a notification. On a public server the topic is the password, so pick one nobody can guess, or run ntfy yourself and nothing leaves your network. Off until you set it.

What happens when the machine reboots?

The processes die with tmux, as they would anyway. Argus keeps a note of which agent ran in which folder and which conversation it was in, and offers them back on the Sessions screen: claude --resume and codex resume pick up where they were.

Is it safe to reach from outside?

It gives shell access behind a token, so treat it that way: keep it on a LAN, a VPN or Tailscale. Tailscale also gives you a certificate for free.

How is this different from a web terminal?

A web terminal gives you the terminal. Argus covers the rest of the job: the files the agent writes, the report it produced, the paths it printed, knowing when it needs you, and the phone.

What is it built with?

Python on the server and plain JavaScript in the browser. There is no build step and no database. MIT licensed.

Stop checking on your agents. Let them tell you.