agent-dag 3.20.0 → 3.21.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  <div align="center">
2
2
 
3
- # ccdeck
3
+ # ccdeck — a live dashboard for Claude Code and Codex
4
4
 
5
5
  **Know which agent is waiting on you, and for how long.**
6
6
 
@@ -22,7 +22,7 @@ npx ccdeck
22
22
 
23
23
  who is blocked on you · tool calls · one canvas · cost · quota · local · no telemetry
24
24
 
25
- [What you get](#what-you-get) · [Quick start](#quick-start) · [How it works](#how-it-works) · [What it touches](#what-it-touches) · [Accounts](#accounts) · [Options](#options)
25
+ [What you get](#what-you-get) · [Quick start](#quick-start) · [How it works](#how-it-works) · [What it touches](#what-it-touches) · [Accounts](#accounts) · [Local network](#local-network) · [Options](#options) · [FAQ](#questions-people-ask)
26
26
 
27
27
 
28
28
  </div>
@@ -43,6 +43,43 @@ ccdeck draws the tree instead. It is local and needs no configuration: it regist
43
43
 
44
44
  One canvas. No tabs. No kanban.
45
45
 
46
+ The deck opens on these eight pictures the first time it runs — they are the whole tour, and `Take the tour` on an empty canvas brings them back.
47
+
48
+ <table>
49
+ <tr>
50
+ <td><img src="assets/guide/welcome-1.svg" width="440" alt="Sessions waiting on you rise to the top, longest wait first."></td>
51
+ <td><img src="assets/guide/welcome-2.svg" width="440" alt="Every agent and subagent is a node. Tool calls light up as they run."></td>
52
+ </tr>
53
+ <tr>
54
+ <td align="center"><sub>Sessions waiting on you rise to the top, longest wait first.</sub></td>
55
+ <td align="center"><sub>Every agent and subagent is a node. Tool calls light up as they run.</sub></td>
56
+ </tr>
57
+ <tr>
58
+ <td><img src="assets/guide/welcome-3.svg" width="440" alt="Click any node: its prompt, every tool call, tokens and timing."></td>
59
+ <td><img src="assets/guide/welcome-4.svg" width="440" alt="What each session costs, and how much quota is left."></td>
60
+ </tr>
61
+ <tr>
62
+ <td align="center"><sub>Click any node: its prompt, every tool call, tokens and timing.</sub></td>
63
+ <td align="center"><sub>What each session costs, and how much quota is left.</sub></td>
64
+ </tr>
65
+ <tr>
66
+ <td><img src="assets/guide/welcome-5.svg" width="440" alt="Cores, memory and heat while the agents run, and what is hogging them."></td>
67
+ <td><img src="assets/guide/welcome-6.svg" width="440" alt="Several Claude accounts: switch, add one, share one to another machine."></td>
68
+ </tr>
69
+ <tr>
70
+ <td align="center"><sub>Cores, memory and heat while the agents run, and what is hogging them.</sub></td>
71
+ <td align="center"><sub>Several Claude accounts: switch, add one, share one to another machine.</sub></td>
72
+ </tr>
73
+ <tr>
74
+ <td><img src="assets/guide/welcome-7.svg" width="440" alt="Your machines repair each other's expired logins over the local network."></td>
75
+ <td><img src="assets/guide/welcome-8.svg" width="440" alt="Run claude or codex in any folder. It shows up here on its own."></td>
76
+ </tr>
77
+ <tr>
78
+ <td align="center"><sub>Your machines repair each other's expired logins over the local network.</sub></td>
79
+ <td align="center"><sub>Run <code>claude</code> or <code>codex</code> in any folder. It shows up here on its own.</sub></td>
80
+ </tr>
81
+ </table>
82
+
46
83
  | | |
47
84
  |---|---|
48
85
  | **Blocked on you** | A permission prompt, or a finished turn waiting for your next instruction, sorts that session to the top of the sidebar with how long it has been stuck — longest wait first, so the oldest block is the first row. A permission prompt also puts a count in the topbar that jumps straight to it. Claude Code only — Codex emits no such signal. |
@@ -52,6 +89,7 @@ One canvas. No tabs. No kanban.
52
89
  | **Click to inspect** | Any node opens its prompt, tool calls, token usage and timing. |
53
90
  | **Survives restarts** | Events are appended to `~/.claude/agent-dag/events.jsonl` and replayed on open. |
54
91
  | **Accounts without a terminal** | Sign a new Claude account in, move one or your whole set to another machine, rename, reorder, remove — from the panel. |
92
+ | **Logins that repair each other** | A Claude login that expires on one of your machines is copied back from another machine on the same network that still has it — see [Local network](#local-network). |
55
93
  | **Knows when it is stale** | Node caches modules at startup, so an upgraded-while-running deck keeps executing old code. This one says so, and can restart itself when nothing is running. |
56
94
  | **Workspace scoping** | `--scope` for the current directory, `--workspace <path>` for any subtree — for Claude Code and Codex alike. |
57
95
 
@@ -61,7 +99,12 @@ One canvas. No tabs. No kanban.
61
99
  npx ccdeck # or: npx agents-deck · npx agent-dag — same deck
62
100
  ```
63
101
 
64
- Opens **http://127.0.0.1:4317** and registers the Claude Code hook on first run. If something else already holds 4317, the deck takes a port between 4318 and 4400 instead and prints the address it ended up on — that line in the terminal is the one to trust. Start any Claude Code or Codex session and the graph fills in live. `Ctrl+C` stops it.
102
+ Opens **http://127.0.0.1:4317**, shows an eight-picture tour the first time, and registers the Claude Code hook on first run. If something else already holds 4317, the deck takes a port between 4318 and 4400 instead and prints the address it ended up on — that line in the terminal is the one to trust. Start any Claude Code or Codex session and the graph fills in live.
103
+
104
+ The deck keeps running after you close the terminal, and starts again when you
105
+ log in. **`ccdeck --stop` is the off switch**; `Ctrl+C` only cancels a start that
106
+ is still printing. `ccdeck --status` says what is running, and `--foreground`
107
+ holds the terminal the way every version before 3.20 did.
65
108
 
66
109
  No config file. No account. No telemetry — nothing about your sessions is reported anywhere.
67
110
 
@@ -158,6 +201,37 @@ An import adds what is missing and leaves a working account exactly as it is. Th
158
201
 
159
202
  Renaming, reordering and removing are on the same row menu. Removal takes two clicks and cannot be undone.
160
203
 
204
+ ## Local network
205
+
206
+ A Claude login expires on the machine that has not used it for a while, and stays alive on the one that has. With two or three machines that is a `claude login` a week, each time on the machine you are not sitting at. **Local network** is the last section of the Claude accounts panel, and it is that chore done for you: decks on one network find each other, pair, and a login that has expired on one is copied back from another that still has it.
207
+
208
+ Four pictures, which are also the guide the section opens from `See how it works`:
209
+
210
+ <table>
211
+ <tr>
212
+ <td><img src="assets/guide/lan-1.svg" width="440" alt="A login can expire on one machine while it still works on another."></td>
213
+ <td><img src="assets/guide/lan-2.svg" width="440" alt="Turn this on, on both machines. They find each other and pair."></td>
214
+ </tr>
215
+ <tr>
216
+ <td align="center"><sub><b>1.</b> A login can expire on one machine while it still works on another.</sub></td>
217
+ <td align="center"><sub><b>2.</b> Turn this on, on both machines. They find each other and pair.</sub></td>
218
+ </tr>
219
+ <tr>
220
+ <td><img src="assets/guide/lan-3.svg" width="440" alt="Tick which logins this machine may hand out. Nothing is shared until you do."></td>
221
+ <td><img src="assets/guide/lan-4.svg" width="440" alt="An expired login is copied from a paired machine within a minute."></td>
222
+ </tr>
223
+ <tr>
224
+ <td align="center"><sub><b>3.</b> Tick which logins this machine may hand out. Nothing is shared until you do.</sub></td>
225
+ <td align="center"><sub><b>4.</b> An expired login is copied from a paired machine within a minute.</sub></td>
226
+ </tr>
227
+ </table>
228
+
229
+ **On each machine, in order:** open the Claude accounts panel (`A`), switch **Local network** on, and in the dialog that opens tick the logins this machine may hand out. That is all — the two decks find each other over a UDP beacon on port 45317, pair on their own, and from then on every paired deck is asked once a minute for anything this deck's expired logins need.
230
+
231
+ **When they do not find each other** — a VPN, a guest network, two subnets — `+` at the top of the section reaches a deck by address, or with an invite the other deck minted. An invite is the route when the machine that cannot be seen is this one.
232
+
233
+ **What is shared, and with whom.** Nothing until you tick a login, and then only that login, and only with decks somebody at this machine accepted — the deck asks the machines it finds and says yes to the ones that ask, and both switches are in the same dialog if you would rather press `accept` yourself. A paired deck can fill an *expired* slot of this deck's and nothing else: it cannot overwrite a login that still works here. What crosses the wire is the same live credential a share carries, sealed to the deck it is addressed to, so treat the pairing decision as the moment that matters. Unpairing stops future rounds; a login already copied stays where it went.
234
+
161
235
  ## Options
162
236
 
163
237
  ```
@@ -287,7 +361,7 @@ Being told to restart after an upgrade is local only — no network involved —
287
361
  npx ccdeck --uninstall
288
362
  ```
289
363
 
290
- Removes every hook entry ccdeck injected from `~/.claude/settings.json`, and `~/.codex/hooks.json` if present.
364
+ Removes every hook entry ccdeck injected from `~/.claude/settings.json`, and `~/.codex/hooks.json` if present — and the login item, if this machine had one. That one exception to the narrowness below is deliberate: a login item left behind would keep starting a deck whose hooks had just been removed.
291
365
 
292
366
  It removes the hook entries and nothing else. The forwarder script
293
367
  (`~/.claude/agent-dag/hook.js`), the discovery directory around it, the events
@@ -315,7 +389,7 @@ Nothing is ever installed unless you click, the argument vector is fixed in the
315
389
 
316
390
  ### Restarting
317
391
 
318
- ccdeck runs as a two-process pair: a supervisor that owns nothing but the lifecycle, and the deck itself. When newer code is found, the deck exits with code 75 and the supervisor brings it back **on the port it actually bound**, which is not always the one it asked for. Ctrl+C, stdout and exit codes behave exactly as before — same terminal, same process group.
392
+ ccdeck runs as a two-process pair: a supervisor that owns nothing but the lifecycle, and the deck itself. When newer code is found, the deck exits with code 75 and the supervisor brings it back **on the port it actually bound**, which is not always the one it asked for. Both live in their own process group since 3.20, so stdout goes to `deck.log` rather than to the terminal you started from — `ccdeck --logs` reads it back. The supervisor also puts the deck back after a crash, five times in ten minutes with the wait doubling, and then stops and says why rather than spinning.
319
393
 
320
394
  It restarts on its own only after 30 seconds with nothing running, because hook events are fire-and-forget and anything fired during the gap is lost. The toggle in the banner turns that off; the preference is per-browser. Under `--no-persist` a restart is refused outright — with no event log there is nothing to replay, and the canvas would be gone.
321
395
 
@@ -349,6 +423,40 @@ It is now the same build as the other two.
349
423
  The repository was previously named `agents-deck`; the old URL redirects here,
350
424
  so existing clones, links and bookmarks keep working.
351
425
 
426
+ ## Questions people ask
427
+
428
+ **Does it work with Codex, or only Claude Code?**
429
+ Both, on one canvas. Claude Code arrives through a hook, Codex through its
430
+ rollout log, and the model chip tells them apart. The *blocked on you* queue is
431
+ Claude Code only — Codex emits no signal for it.
432
+
433
+ **Does anything leave my machine?**
434
+ Your sessions, never. The deck binds `127.0.0.1` and has no telemetry. The only
435
+ outbound requests are a ~20-byte version check to the npm registry at most once
436
+ an hour, and whatever the usage panels ask Anthropic and OpenAI for about your
437
+ own quota. [What it touches](#what-it-touches) lists all of it.
438
+
439
+ **Can it interfere with what my agent does?**
440
+ No. The hook it installs is a one-way forwarder: it POSTs the event, exits `0`,
441
+ and writes nothing to stdout — the two channels Claude Code's hook protocol
442
+ gives a hook for allowing, denying or rewriting a tool call. It uses neither, so
443
+ it has no way to answer at all, and a test pins both halves.
444
+
445
+ **Does it need an account, an API key or a config file?**
446
+ None of the three. `npx ccdeck` and it runs.
447
+
448
+ **macOS, Linux, Windows?**
449
+ All three, and each release is tested on all three.
450
+
451
+ **What is the difference between `ccdeck`, `agents-deck` and `agent-dag`?**
452
+ One deck, three names on npm. `ccdeck` is the one to use; the other two are the
453
+ names it shipped under before, kept working so nobody's command breaks. See
454
+ [Names](#names).
455
+
456
+ **Do I have to keep a terminal open?**
457
+ No. Since 3.20 the deck runs in the background, survives the terminal closing,
458
+ and starts again when you log in. `ccdeck --stop` ends it.
459
+
352
460
  ## License
353
461
 
354
462
  MIT © [Bargan Constantin](https://github.com/BarganConstantin)