How it works
Defenses
Attack Patterns MCP Attack Atlas What we catch Hardening manual OWASP LLM Top 10 MITRE ATLAS
Learn
Encyclopedia (new) Agent Security 101 Blog Reports CVP runs Thesis
Resources
Docs vs Lakera vs Promptfoo Team
Theme
Warroom: open source shell scripts that let several Claude Code sessions share one text file as their chat. A seat sleeps in a background shell and wakes only when a line starting with its name and ACTION is posted. Long jobs leave a receipt. Not a framework, not a model caller, does not change plan limits.
Warroom · open source

One text file. Many Claude Code seats.

A shared file is the chat · a seat wakes only when a line says its name
4
Seats in the example
1
File is the chat
0
Model calls by the scripts
MIT
License

Run a boss, a manager and two workers in Claude Code all day on one subscription: a shared text file is the chat, a seat wakes only when a line says its name, every long job leaves a receipt.

What it is for

Several terminals, no copy-paste

warroom://what-it-is-for
You have

More than one Claude Code terminal at the same time.

They need

To hand work to each other without you copying text between windows.

You avoid

Polling. Every poll is paid tokens.

Why use it

Five facts

board.md

A text file is the chat

One file. Every seat appends a stamped line and reads what is new.

waiter.sh

Nobody polls

A seat starts one background waiter and then sleeps.

shell loop

A sleeping seat costs no tokens

The waiter is a shell loop, not a model call. It exits only when a line names its seat.

receipts

A merge leaves a receipt

A merge writes a file and a final line, POSTCONDITION PASS or POSTCONDITION FAIL. A finished long job wakes its owner.

reopen.sh

Fresh sessions keep the thread

Each seat writes a card, then one paste message per seat is built.

How to use it

Two doors

warroom://door-1-install-it-yourself
Clone

git clone <this repo> && cd warroom

Look first

bash install.sh --dry-run prints every step and writes nothing.

Install

bash install.sh writes warroom.env, backs up your Claude Code settings and adds the hooks.

Then

The installer ends by printing one first message per seat. Paste each into that seat's own Claude Code session.

warroom://door-2-show-the-repo-to-your-ai
Paste

Read this repo. Install the war room into my Claude Code: seats BOSS MANAGER W1 W2, then show me how to post my first board line.

Note

Nothing in the repo is piped from the internet into a shell. Read install.sh first; it is short.

What a day looks like

A synthetic board

Only a line that starts with @SEAT ACTION: wakes a seat. A plain @SEAT in a sentence wakes nobody.

examples/4-seat/sample-board.md
09:00 BOSS

Day start. Rows: R1 add the export flag, R2 write its test, R3 update the changelog line.

BOSS

@W1 ACTION: take R1. Branch off main, one commit, post the diff stat when done.

09:02 W1

TAKEN R1.

09:31 W1

R1 done. Flag is --export. 1 file, +14/-2. Receipt receipts/r1.md

W1

@W2 ACTION: R2 can start, flag name above.

10:13 MANAGER

@BOSS ACTION: R1 and R2 are ready for your read. PR 12.

10:34 BOSS

POSTCONDITION PASS merge of PR 12: merged (receipt receipts/merge_12.md)

How it fits together

One file, one sleeping shell per seat

warroom://flow
1 · Paste

You paste one first message per seat into four Claude Code sessions: BOSS, MANAGER, W1, W2.

2 · Post

Each seat posts with board.sh post SEAT "text" into board.md, one text file that is the chat.

3 · Sleep

Each seat runs waiter.sh SEAT, one sleeping shell. It exits only when a new @SEAT ACTION: line names that seat.

4 · Wake

That session is told its job finished, reads the line, acts and re-arms the waiter.

Beside it

pids.sh wakes the owner of a finished long job once.

Beside it

merge-daemon.sh waits for green, merges once and writes a receipt.

Beside it

cpu-sentinel.py names a runaway process on the board.

Beside it

reopen.sh gives fresh sessions the same thread.

What it is not

Four things it is not

warroom://scope
Not

A framework or an agent library. No code of yours imports it.

Not

A chat API or a server. The whole thing is one file and a few shell scripts.

Not

A model caller. No script here calls a model; the only model calls are your own Claude Code sessions.

Not

A way to get more from your plan. It avoids paying for polling; it does not change your limits.

The story

Why it exists

Built to stop copy-pasting

I am not a programmer. I started building with Claude Code, and one terminal turned into several. They needed to talk to each other, and I was the one copying text between windows. Then the usage meter showed that my agents waiting on each other was the expensive part. So I replaced the waiting with one text file and one sleeping shell per seat. This is that file and those scripts. I use it every day to build Sunglasses, a scanner for AI-agent input.

Get it

Read install.sh, then run it

Warroom is MIT and runs on bash and python3. Start with the dry run: it prints every step and writes nothing.

FAQ

Frequently Asked Questions

Does it work with one seat?

Yes. One seat gets the board, the receipts and the job ledger. The wake lines matter once there is a second seat.

Does it need a particular plan?

Not tested on every plan. It uses Claude Code sessions you already have; how many you can run depends on your plan.

Windows?

Not yet. The scripts need bash and python3.

pip or pipx?

Roadmap, not in v0.1.

Where do I ask a question?

Discussions on the warroom repository (Q&A).