Claude Fleet
One local page showing every Claude Code session running on your machine, so you stop cycling through terminals to find the one waiting on you. It also tells you where your sessions are quietly overwriting each other's memory.
Screenshots show --demo data. Nothing real appears in them.
Python standard library only. No dependencies, no build step, no network calls.
Install and run
uvx claude-fleet # no install
pipx install claude-fleet # or keep it around
claude-fleet
Try it before you trust it:
claude-fleet --demo # a fabricated fleet, reads nothing on your machine
It prints a URL carrying a one-time key. Open that URL.
Claude Fleet: http://127.0.0.1:8799/?t=Wc3l...
read-only; --enable-send to allow sending. Tested against Claude Code 2.1.266.
What it shows
Sessions sort so the ones needing you come first.
| bucket | meaning |
|---|---|
| waiting for you | the turn finished and it is sitting at the prompt |
| working | mid-turn. "silent for Nm" usually means a permission prompt is blocking it |
| parked | someone dropped that session to a shell |
| unlabelled | a live claude process that never registered a status, typically a session another session started |
Each card names the terminal the session lives in, so once you know which one wants you, you know which tab to switch to. Click a card to replay its recent turns: your prompts, the replies, thinking, tool calls and truncated tool output.
Tick notify me for a browser notification the moment a session starts waiting.
Memory conflicts
Claude Code keys a session's memory folder to the directory the session started in.
Run several sessions from one parent directory and they share a memory folder, where a
save rewrites the whole file with no locking. The last writer wins and the others are
lost silently. The memory: pill counts what it finds.
| finding | meaning |
|---|---|
| written by several sessions | one memory file, or one MEMORY.md, has more than one author |
| duplicate index line | a MEMORY.md links the same file twice |
| broken index link | a MEMORY.md links a file that is gone |
| missing from the index | a memory file no MEMORY.md line points at |
| differs between projects | the same memory name says different things in different projects |
Expanding a finding lists every write with its time, the session behind it, and whether
that version survived. Rows are labelled by evidence quality: file-history is exact,
shell is inferred from the session's own transcript, observed means the watcher saw
a change nothing else explains. The panel never writes inside a memory directory, and a
test asserts it.
Sending commands
Off by default. Start with --enable-send to turn the composer on.
Tick the checkbox on any card to add it as a recipient, or leave them all clear to address the session you are viewing. Enter sends, Shift+Enter starts a new line.
Delivery goes through Claude Code's own peer messaging. Each send spawns a one-shot
claude -p that calls SendMessage, which takes a few seconds and costs one small
Claude call. The recipient sees a short-lived relay session as the sender and starts
acting on the message immediately.
Security
The dashboard is single-user and local, and it is guarded as such.
- Every route requires the per-run token, compared with
secrets.compare_digest. - Cross-site requests are refused by
Origin, so no page you browse can drive it. - A non-loopback
Hostis refused, which blocks DNS rebinding. - The cookie it sets is
SameSite=Strict.
Two things to know if you share the machine with other people. The token is printed on
startup, so redirecting that output into a log file leaves it there. And a relayed
message is passed to claude -p as a command line argument, which means its text is
visible in ps to any other user while the send is in flight. Neither matters on a
single-user machine; on a shared one, avoid --enable-send.
Sending stays off unless you ask for it. Anyone who can already run code as your user
can read ~/.claude directly, so the dashboard adds no exposure beyond that.
Compatibility
Tested against Claude Code 2.1.266 on Linux. macOS support is implemented and unit tested but has not been run on real macOS hardware; reports welcome. Windows is not supported, because this depends on POSIX process listing and on Claude Code's Unix domain sockets.
This reads files Claude Code does not document: the session registry, transcripts and file-history backups. A Claude Code upgrade may change them and break this tool. It degrades rather than crashing when a file looks unfamiliar, but expect to update it.
Where the data comes from
~/.claude/sessions/<pid>.json— live registry: pid, session id, cwd, name, status~/.claude/projects/<slug>/<session-id>.jsonl— transcripts~/.claude/file-history/<session-id>/<sha256 of path>@vN— past versions of edited filesps, and/procon Linux orlsofon macOS — liveness, terminal, uptime
Only the tail of each transcript is parsed for the list, so files of tens of megabytes stay cheap to poll.
Endpoints
| route | purpose |
|---|---|
GET /api/sessions |
every live session with status and summary |
GET /api/session/<id> |
recent events for one session |
GET /api/memory |
memory conflict findings across all projects |
GET /api/outbox |
recent sends and their state |
POST /api/send |
{"targets": ["<session-id>"], "text": "…"} |
--demo serves fabricated payloads on all of these, starts no watchers, and refuses
to send.
Development
git clone https://github.com/harry329/claude-fleet && cd claude-fleet
python -m unittest discover -s tests -v
python -m claude_fleet --port 8799
Work here is spec driven. Each change starts as specs/NNN-slug.md, and the tests are
its acceptance criteria, one test per criterion. See specs/README.md.
Licence
MIT.
Metadata
Release files for claude-fleet 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| claude_fleet-0.1.0.tar.gz | 45.3 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| claude_fleet-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 81.4 kB
Release files / claude_fleet-0.1.0.tar.gz
| Download URL | claude_fleet-0.1.0.tar.gz |
|---|---|
| Size | 45.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7eb3ea6a64e0e61fe172f329b4f5e47c6398b3056f2107f3f5e9db185bafff22
|
|
BLAKE2b-256 checksum How to use checksums |
7cdace1ac0c205b733ba3a6f2f076803c06bf25f96431eab30f908a9e8d7e448
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.
Transparency logRelease files / claude_fleet-0.1.0-py3-none-any.whl
| Download URL | claude_fleet-0.1.0-py3-none-any.whl |
|---|---|
| Size | 36.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e0b959b134c75e7af5b1a3508fc76d3022abe8a852b160c29efee03b6f7b0908
|
|
BLAKE2b-256 checksum How to use checksums |
9673d9921dd80949c3d331906e8ab52270eecc00fdd5a1861bcd2aa07aaba34a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.
Transparency logSecurity for claude-fleet 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for claude_fleet-0.1.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.