尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Agent Fleet by Optimal Data Inc. Run Claude Code, Codex, Cursor, Copilot and Antigravity side by side, keep them alive, answer them from your phone.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗by Optimal Data Inc. · MIT licensed
Run Claude Code, Codex, Cursor, Copilot and Antigravity side by side, keep them alive when the terminal or SSH connection drops, and answer them from your phone. It all runs on your own Mac: no account, no cloud relay, and the AI features use the subscriptions you already have.
git clone https://github.com/wgrazz/agent-fleet
ln -s "$PWD/agent-fleet/fleet" ~/.local/bin/fleet # anywhere on PATH
fleet new my-task # a protected session in this folder: run claude / codex / agent inside it
fleet dash install # the dashboard, at login (add --local if you don't use Tailscale)
The CLI needs Python 3.9+, tmux, and lsof/ps (present on macOS and Linux). caffeinate is
used when present, so Linux works too; it just doesn't block sleep. The dashboard needs macOS
and Node.js 24+.
$ fleet
PID TOOL STATUS AGE WHERE DIR TASK
41922 claude working 2:14:07 safe · api · background shop-app [busy] Add rate limiting to /search
43310 codex needs you 31:50 dies with window landing Trim the hero copy
+ 3 background helpers (fleet all)
WAITERS
PID OWNER AGE COMMAND
42001 claude 41922 1:03:12 /bin/sh -c until ssh server 'test -f /tmp/done'; do sleep 300; done
Agents started in a plain terminal die when that window closes or a Termius / SSH connection
drops, along with the hour of work they were in the middle of. fleet new NAME starts a
protected tmux session (with caffeinate on macOS so the laptop doesn't sleep) and you run the
agent inside it. fleet then shows every agent on the box, whether it is protected, what it is
working on, and any follow-up waiters it armed. fleet kill cleans up.
| Command | What it does |
|---|---|
fleet new NAME | Start a protected session called NAME in the current folder, then run claude / codex / agent inside it |
fleet new NAME --tool T [--model M] [--effort E] [--profile P] [--detach] [PROMPT] | Start NAME already running claude, codex, cursor, copilot or agy, optionally with a first prompt (--resume ID continues a past conversation) |
fleet pause NAME | Stop NAME's agent but keep its conversation; fleet paused lists, fleet unpause ID|NAME brings it back |
fleet idea [-l LIST] [-p low|medium|high] TEXT | Jot an idea into ~/.fleet/fleet.db (Brain Dump unless you name a list), optionally with a priority |
fleet import-notes [--dry-run] | Copy your numbered Apple Notes checklists into Ideas, checked items as done (needs Full Disk Access) |
fleet rename OLD NEW | Rename a session |
fleet json | The agent list as JSON (what the dashboard reads) |
fleet dash | Open the dashboard |
fleet hooks install / uninstall | Add or remove the Claude Code hooks that report status to the dashboard |
fleet mac … | Jarvis's Mac abilities: music, calendar, event, reminders, remind, draft, apps, open, window, screen, hotkey install |
fleet tts install | A natural voice for Jarvis (Kokoro, runs on this Mac, ~350 MB in ~/.fleet/tts) |
fleet resume [NAME] | Reattach (no name: the only session, or a list) |
fleet peek NAME | Print the last 40 lines of NAME's screen without attaching |
fleet | Agents you started, what they're doing, and any waiters |
Inside a session: Ctrl-b d detaches (the agent keeps running), Ctrl-b [ scrolls.
The TASK column reads Claude Code's session files (~/.claude/sessions/<pid>.json and the
transcript title) and Codex's thread database (~/.codex/state_*.sqlite). Cursor shows no task.
A web page for the same agents, on the Mac and as an iPhone home-screen app over Tailscale.
fleet dash install # runs the server at login (launchd) and publishes it to your tailnet
fleet hooks install # optional: exact status from Claude Code instead of reading its screen
fleet dash # open it on this Mac
fleet dash app # open it in Safari, then File → Add to Dock for a Mac app
fleet dash update # after changing the dashboard's code: rebuild + restart
fleet dash install prints two links that end in ?key=…. Open one once per device and the key
is remembered. Without it the page shows "Fleet is locked". The key, push keys, profiles, paused
sessions, folders and ideas live in ~/.fleet/ (readable only by you). None of it is in this repo.
Agents
fleet adopt PID) stops one and continues the same conversation inside
Fleet.New agent
docs/ideas/ and adds it to Priority.Ideas
fleet idea "…", or Jarvis.fleet import-notes (or Ideas ⋯ → Import from Apple Notes) copies your numbered checklist
notes, with checked items in Done. macOS only allows this from an app with Full Disk Access.History. Every past Claude and Codex conversation: search, read as chat, resume, file into folders.
Team. Roles are assistants that run on a schedule, such as a daily chief of staff or a weekly clerk.
Each run is a headless claude -p on your subscription. Each role's page has its questions for you
(answer in place), its tasks for you (check off or dismiss), a box to tell it something, every run's
summary and cost, and its settings:
A role only answers in JSON. The server writes its items and memory and sends a push, so a role never edits your ideas. Fleet's server runs the schedule, and a run missed while the Mac slept happens on wake.
Ask Jarvis "what does the clerk need from me?" and it reads the questions out. Answer it, tell a role
something, or say "run the clerk now". From a terminal: fleet role lists roles, fleet role NAME
shows what it needs, and fleet role NAME answer N TEXT, tell TEXT and run do the same.
Usage. 5-hour and weekly limits:
statusline.sh writes ~/.fleet/claude-usage.json.Jarvis. The mic in the sidebar, the middle of the phone tab bar, or J. Type or talk.
~/.fleet/jarvis-memory.md.jarvis_warn_pct / jarvis_max_pct in ~/.fleet/config.json).
The share is computed from what every Claude session cost this week.fleet tts install adds Kokoro, an open-weight voice model that runs on your
Mac. Audio is made there and played on whichever device you're using. Pick a voice (British
George, Fable, Daniel, Lewis, and more) under Settings → Jarvis's voice. Mac voices and the
device's own voice are there too.Jarvis on your Mac. One assistant for agents and your day, from your phone or the Mac.
fleet mac hotkey install).Reading things and music happen right away. Calendar events, reminders and email drafts show an Approve card first. Each ability asks macOS for permission once: Settings → Mac access → Set up all, while you're at the Mac.
Jarvis outside the dashboard. fleet ask "what needs me?" talks to the same Jarvis, with the
same memory, cost cap and actions, from any terminal or script. That makes it easy to connect to:
Siri, hands-free on the iPhone. On the phone, open Settings → Hey Siri → Add the Jarvis
shortcut (or run fleet dash siri on the Mac and AirDrop the file). Say "Hey Siri, Jarvis", then
talk; Siri reads the answer and listens again until you stop talking. To build it by hand instead,
make a shortcut named "Jarvis":
https://<your-mac>.<tailnet>.ts.net/api/jarvisX-Fleet-Key: <your key>text = Dictated Textsay.Then say "Hey Siri, Jarvis". Tailscale must be on.
Share to Fleet from any app. On the phone, open Settings → Share to Fleet → Add the Save
to Fleet shortcut (or fleet dash share on the Mac and AirDrop it). Then in Instagram, TikTok,
Safari or anything else: Share → Save to Fleet, and the link lands in the Shared list and gets
its own agent, under Team → Shared. It watches the post (the video and caption via yt-dlp, frames via
ffmpeg, what's said via whisper-cli with ~/.cache/whisper-cpp/ggml-small.bin if present, claims
checked on the web) and gives its take: a verdict (worth doing, maybe, skip, just a note), what the post
says and shows, and an answer to anything you typed with it. Its page has the video at the top and the
conversation below, so you can keep asking it about that one post. A few cents a post. Run on its own it saves your
clipboard. Tailscale must be on.
Keys:
| Key | Action |
|---|---|
| ⌘K | Jump anywhere |
| ⌘I | New idea |
| N | New agent |
| J | Jarvis |
| ↑ / ↓ | Move through agents |
| 1-9 | Answer menus |
| / | Reply box |
The smart features (Improve, Suggest, Sort, Interview, Jarvis) run on your own Claude
subscription through the Claude Code CLI (claude -p, Sonnet by default; set FLEET_AI_MODEL
to change it). They don't use an API key.
iPhone:
You get a push when an agent needs you, finishes or crashes, and tapping it opens that agent.
iOS only allows web push over HTTPS, so enable HTTPS certificates in the Tailscale admin console
(DNS page) before running fleet dash install. Without Tailscale, use
fleet dash install --local for a Mac-only dashboard.
How status works: Claude Code reports exactly through its hooks. Codex, Cursor, Copilot and
Antigravity are read from their screens every 2 seconds, using patterns taken from real captures
(dashboard/test/fixtures/). When a guess is wrong, save the screen
(tmux capture-pane -p -t =NAME: > dashboard/test/fixtures/<tool>/<state>-<label>.txt) and fix
the pattern in dashboard/server/detect.ts. Agents started in a plain terminal window show up
(Claude and Codex ones with their chat), but only agents in tmux (fleet new or the dashboard)
can be answered from it.
Needs Node.js 24+. In dashboard/:
npm test runs the detector, Ideas and end-to-end tests.npm run typecheck checks types.npm run dev serves the page with hot reload against a running server.A small companion: agents call it when a long job finishes, blocks, or gives up, so you get
a ping instead of checking back. It goes to your phone through the dashboard's push
(POST /api/notify) when the dashboard runs on this machine and a device is subscribed,
and falls back to Discord otherwise (another machine, dashboard down, no phone set up).
export DISCORD_AGENT_WEBHOOK=https://discord.com/api/webhooks/... # optional fallback
AGENT_NAME=claude ./agent-notify.sh "Nightly import finished: 347 rows loaded"
# → claude @ shop-app: Nightly import finished: 347 rows loaded
It never fails the caller: a failed post only warns on stderr.
Tell your agents (in AGENTS.md) that when they start something that takes more than a few
minutes they should arm a follow-up — a background until <check>; do sleep 300; done loop
that re-wakes the session — say so in one line, and notify on result. fleet shows those
waiters under their owning agent, and fleet new is what lets them survive a dropped
connection. See polyagent-kit for the rule text.
MIT
fleet all | Same, plus background helpers (desktop apps, Codex service, chrome bridge, claude-mem) |
fleet kill PID|NAME | Stop one agent or waiter, or a whole session |
fleet kill --all | Stop every agent and waiter you started, after a y/N prompt |
fleet selftest | Offline check of the process-tree logic |