agent-dag 3.6.0 → 3.7.0

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
@@ -2,9 +2,9 @@
2
2
 
3
3
  # ccdeck
4
4
 
5
- **An agent session is a tree. Your terminal shows it as a scroll.**
5
+ **Know which agent is waiting on you, and for how long.**
6
6
 
7
- **ccdeck draws the tree** — Claude Code and OpenAI Codex on one live canvas, with every Claude Code subagent on a node of its own.
7
+ **ccdeck keeps them in one queue** — every session stopped on a human, longest wait first, and the count in the topbar is one click to the oldest. That queue is Claude Code's, because Codex emits no such signal; the canvas under it is both, with every Claude Code subagent on a node of its own.
8
8
 
9
9
  [![npm](https://img.shields.io/npm/v/ccdeck?color=cb3837&logo=npm&logoColor=white)](https://www.npmjs.com/package/ccdeck)
10
10
  [![agents-deck downloads](https://img.shields.io/npm/dm/agents-deck?color=blue&label=agents-deck%20downloads)](https://www.npmjs.com/package/agents-deck)
@@ -20,7 +20,7 @@ npx ccdeck
20
20
 
21
21
  *A generated session, drawn by the deck itself — see `assets/canvas-demo.mjs`. Click through for full size.*
22
22
 
23
- tool calls · cost · quota · who is blocked on you · one canvas · local · no telemetry
23
+ who is blocked on you · tool calls · one canvas · cost · quota · local · no telemetry
24
24
 
25
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)
26
26
 
@@ -31,7 +31,11 @@ tool calls · cost · quota · who is blocked on you · one canvas · local · n
31
31
 
32
32
  ## Why
33
33
 
34
- An agent session is a tree, but a terminal shows it as a scroll. Five subagents working in parallel arrive as one interleaved column of text, and the questions you actually have*what is running right now, what did that subagent do, which one is stuck, what is this costing* are the ones the scroll answers worst.
34
+ Four agents running, and the machine has been quiet for twenty minutes. One of them stopped to ask something and you did not see it go by. From the outside every terminal tab looks the same the one that is working and the one that has been holding a permission prompt since the coffeeso you find it by clicking through them, and the agent that was closest to finished is the one that has been waiting longest.
35
+
36
+ ccdeck answers that in one place: every session stopped on a human is at the top of the sidebar with the wait beside it, longest first, and the count in the topbar goes straight to the oldest one. The question stops being *which tab* and becomes *this one*.
37
+
38
+ That is the sharp end of a wider problem. An agent session is a tree, but a terminal shows it as a scroll: five subagents working in parallel arrive as one interleaved column of text, and the questions you actually have — *what is running right now, what did that subagent do, which one is stuck, what is this costing* — are the ones the scroll answers worst.
35
39
 
36
40
  ccdeck draws the tree instead. It is local and needs no configuration: it registers a hook, listens, and paints.
37
41
 
@@ -41,10 +45,10 @@ One canvas. No tabs. No kanban.
41
45
 
42
46
  | | |
43
47
  |---|---|
44
- | **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, and puts a count in the topbar that jumps to the oldest one. Claude Code only — Codex emits no such signal. |
45
- | **Cost and quota, live** | Spend per model and per session, plus Claude and Codex quota windows as they refill. |
48
+ | **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. |
46
49
  | **Live DAG** | Nodes are agents, edges are spawns and tool calls. In-flight edges animate, settled ones fade. |
47
50
  | **Both providers, one canvas** | Claude Code through hooks, Codex through its rollout log. The model chip (`Opus 5`, `GPT-5.5`) tells them apart. |
51
+ | **Cost and quota, live** | Spend per model and per session, plus Claude and Codex quota windows as they refill. |
48
52
  | **Click to inspect** | Any node opens its prompt, tool calls, token usage and timing. |
49
53
  | **Survives restarts** | Events are appended to `~/.claude/agent-dag/events.jsonl` and replayed on open. |
50
54
  | **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. |
@@ -61,6 +65,8 @@ Opens **http://127.0.0.1:4317** and registers the Claude Code hook on first run.
61
65
 
62
66
  No config file. No account. No telemetry — nothing about your sessions is reported anywhere.
63
67
 
68
+ **The deck cannot steer your agent.** The hook it installs is a one-way forwarder: it POSTs the event, exits `0`, and writes nothing to stdout. Those are the two channels Claude Code's hook protocol gives a hook for allowing, denying, deferring or rewriting the tool call it was told about, and this one uses neither — it has no way to answer at all. `src/web/__tests__/hook-read-only.test.ts` pins both halves, over the source and by running the real script.
69
+
64
70
  What the deck does write, and the short list of what does leave the machine, is in [What it touches](#what-it-touches).
65
71
 
66
72
  ## Requirements
@@ -201,6 +207,7 @@ Environment:
201
207
  | `AGENTS_DECK_NO_DOWNLOAD=1` | Never download the `uv` binary, but keep the managed installs |
202
208
  | `AGENTS_DECK_NO_UPDATE_CHECK=1` | Don't ask npm about releases, but keep everything else |
203
209
  | `AGENTS_DECK_NO_FRESHEN=1` | Never nudge claude-swap to collect usage early |
210
+ | `AGENTS_DECK_NO_NOTIFY=1` | Never raise a desktop notification when a session blocks and no page is open |
204
211
  | `AGENTS_DECK_CSWAP` | Full path to `cswap`, when it lives somewhere unusual |
205
212
  | `AGENTS_DECK_CLAUDE` | Full path to the `claude` CLI |
206
213
  | `AGENTS_DECK_CCUSAGE` | Full path to your own `ccusage`, used ahead of everything else |