ai-whisper 0.13.0 → 0.15.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.
Files changed (44) hide show
  1. package/README.md +9 -6
  2. package/dist/bin/broker-daemon.js +2 -2
  3. package/dist/bin/companion-agent.js +366 -43
  4. package/dist/bin/relay-monitor.js +9 -3
  5. package/dist/bin/whisper.js +848 -112
  6. package/package.json +5 -4
  7. package/skills/ai-whisper-bugfix/SKILL.md +47 -147
  8. package/skills/ai-whisper-bugfix/evals/evals.json +36 -0
  9. package/skills/ai-whisper-bugfix/evals/files/bug-report.md +10 -0
  10. package/skills/ai-whisper-bugfix/evals/triggers.json +21 -0
  11. package/skills/ai-whisper-code-review/SKILL.md +93 -33
  12. package/skills/ai-whisper-code-review/evals/evals.json +62 -0
  13. package/skills/ai-whisper-code-review/evals/triggers.json +25 -0
  14. package/skills/ai-whisper-deliberation/SKILL.md +52 -145
  15. package/skills/ai-whisper-deliberation/evals/evals.json +36 -0
  16. package/skills/ai-whisper-deliberation/evals/files/seed-idea.md +2 -0
  17. package/skills/ai-whisper-deliberation/evals/triggers.json +21 -0
  18. package/skills/ai-whisper-deliberation-craft/SKILL.md +117 -16
  19. package/skills/ai-whisper-deliberation-craft/evals/evals.json +54 -0
  20. package/skills/ai-whisper-deliberation-craft/evals/triggers.json +25 -0
  21. package/skills/ai-whisper-plan-execution/SKILL.md +135 -31
  22. package/skills/ai-whisper-plan-execution/evals/evals.json +50 -0
  23. package/skills/ai-whisper-plan-execution/evals/files/rename-target.ts +5 -0
  24. package/skills/ai-whisper-plan-execution/evals/triggers.json +25 -0
  25. package/skills/ai-whisper-quick-task/SKILL.md +150 -41
  26. package/skills/ai-whisper-quick-task/evals/evals.json +63 -0
  27. package/skills/ai-whisper-quick-task/evals/files/notes.md +11 -0
  28. package/skills/ai-whisper-quick-task/evals/files/pagination.ts +3 -0
  29. package/skills/ai-whisper-quick-task/evals/triggers.json +25 -0
  30. package/skills/ai-whisper-ralph/SKILL.md +48 -147
  31. package/skills/ai-whisper-ralph/evals/evals.json +36 -0
  32. package/skills/ai-whisper-ralph/evals/files/GOAL.md +8 -0
  33. package/skills/ai-whisper-ralph/evals/triggers.json +21 -0
  34. package/skills/ai-whisper-sdd/SKILL.md +46 -139
  35. package/skills/ai-whisper-sdd/evals/evals.json +36 -0
  36. package/skills/ai-whisper-sdd/evals/files/approved-spec.md +9 -0
  37. package/skills/ai-whisper-sdd/evals/triggers.json +21 -0
  38. package/skills/ai-whisper-workflow/SKILL.md +302 -0
  39. package/skills/ai-whisper-workflow/evals/evals.json +47 -0
  40. package/skills/ai-whisper-workflow/evals/files/GOAL.md +8 -0
  41. package/skills/ai-whisper-workflow/evals/files/cache-design-spec.md +9 -0
  42. package/skills/ai-whisper-workflow/evals/files/empty-idea.md +0 -0
  43. package/skills/ai-whisper-workflow/evals/triggers.json +25 -0
  44. package/skills/ai-whisper-workflow/references/workflow-types.md +29 -0
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # ai-whisper
2
2
 
3
- ai-whisper pairs two coding agents — mount any two of Claude, Codex, ezio, and agy — into a terminal-native pair that hand work back and forth under a single baton, so one agent implements while the other reviews, and a structured workflow drives the loop to a finished, reviewed deliverable without a human babysitting every round.
3
+ ai-whisper pairs two coding agents — mount any two of Claude, Codex, ezio, agy, and Cursor — into a terminal-native pair that hand work back and forth under a single baton, so one agent implements while the other reviews, and a structured workflow drives the loop to a finished, reviewed deliverable without a human babysitting every round.
4
4
 
5
5
  ## Magic moment
6
6
 
@@ -13,6 +13,8 @@ whisper collab mount claude
13
13
  whisper collab mount codex
14
14
  ```
15
15
 
16
+ Swap in any of the four agents — `whisper collab mount cursor` drives Cursor's `agent` CLI the same way, so e.g. `claude` + `cursor` is a valid pair.
17
+
16
18
  Then, from inside either agent's session, kick off a structured workflow against a spec — just ask in plain language:
17
19
 
18
20
  ```text
@@ -52,10 +54,11 @@ It is **not** for:
52
54
 
53
55
  ## Prerequisites
54
56
 
55
- You pair any two of four agents — `claude`, `codex`, `ezio`, and `agy`. ai-whisper drives the *real* Claude, Codex, and Antigravity CLIs, so install and authenticate whichever of those you plan to mount first; `ezio` is protocol-native and ships with ai-whisper.
57
+ You pair any two of five agents — `claude`, `codex`, `ezio`, `agy`, and `cursor`. ai-whisper drives the *real* Claude, Codex, Antigravity, and Cursor CLIs, so install and authenticate whichever of those you plan to mount first; `ezio` is protocol-native and ships with ai-whisper, so it needs no separate CLI.
56
58
 
57
59
  - **[Claude Code CLI](https://claude.com/claude-code)** — the `claude` command, signed in.
58
60
  - **[Codex CLI](https://github.com/openai/codex)** — the `codex` command, signed in.
61
+ - **[Cursor CLI](https://cursor.com/cli)** — the `agent` command, signed in. (Override the binary with `AI_WHISPER_CURSOR_CMD` if it is on your PATH under a different name.)
59
62
  - **ezio** *(optional)* — bundled with ai-whisper; mount it with `whisper collab mount ezio`, no separate install.
60
63
  - **agy** *(optional)* — the `agy` command (Antigravity CLI), signed in. Mount it with `whisper collab mount agy` (manual-mount parity; no auto-launch via `collab start`).
61
64
  - **Node.js 22+**.
@@ -66,7 +69,7 @@ You pair any two of four agents — `claude`, `codex`, `ezio`, and `agy`. ai-whi
66
69
 
67
70
  ## Safety & permissions
68
71
 
69
- ai-whisper launches each agent in **full-autonomy mode** so the relay can drive it unattended — `claude --dangerously-skip-permissions` and `codex --dangerously-bypass-approvals-and-sandbox`. Inside the mounted workspace the agents read, write, and run commands without prompting. Point it at code you're willing to let two agents change autonomously, watch the run on the dashboard, and remember you are the final gatekeeper — review the result before you ship it. The deeper rationale is in [Concepts](docs/concepts.md).
72
+ ai-whisper launches each agent in **full-autonomy mode** so the relay can drive it unattended — `claude --dangerously-skip-permissions`, `codex --dangerously-bypass-approvals-and-sandbox`, and `agent --force` (Cursor). Inside the mounted workspace the agents read, write, and run commands without prompting. Point it at code you're willing to let two agents change autonomously, watch the run on the dashboard, and remember you are the final gatekeeper — review the result before you ship it. The deeper rationale is in [Concepts](docs/concepts.md).
70
73
 
71
74
  ## Quickstart
72
75
 
@@ -124,15 +127,15 @@ A run that stops short usually **escalates** — it does not crash. When the eva
124
127
 
125
128
  ai-whisper is **not a swarm**. The agents never type at once — work moves by a single baton, one owner at a time. Mounted sessions are *real* agent sessions in your terminal — Claude or Codex CLIs, ezio, or agy — and those sessions are the source of truth. Autonomy is supervised: every handoff, verdict, and round is inspectable, and runs are resumable rather than fire-and-forget. Work is organized as structured workflows — explicit loops and state transitions, not a free-form chat.
126
129
 
127
- Claude, Codex, ezio, and agy are supported today — you mount any two of them; the architecture is provider-agnostic by design, so other coding-agent CLIs can be added behind the same relay.
130
+ Claude, Codex, ezio, agy, and Cursor are supported today — you mount any two of them; the architecture is provider-agnostic by design, so other coding-agent CLIs can be added behind the same relay.
128
131
 
129
132
  For the full mental model, read [Concepts](docs/concepts.md).
130
133
 
131
134
  ## Duo characters
132
135
 
133
- Every collab casts its two agents as a classic movie duo. The first `whisper collab mount` rolls a pair — Sherlock & Watson, Batman & Robin, Walter White & Jesse Pinkman, and four more — and each mount summons its character with ASCII art and an iconic one-liner before the agent CLI starts. The assignment sticks for the lifetime of the collab: the dashboard and relay chrome show `Batman (claude)` instead of a bare vendor name, and the agents themselves are told who they are (character flavor stays in conversational prose only — never in code, commits, or workflow verdicts).
136
+ When enabled, a collab casts its two agents as a classic movie duo. The first `whisper collab mount` rolls a pair — Sherlock & Watson, Batman & Robin, Walter White & Jesse Pinkman, and four more — and each mount summons its character with ASCII art and an iconic one-liner before the agent CLI starts. The assignment sticks for the lifetime of the collab: the dashboard and relay chrome show `Batman (claude)` instead of a bare vendor name, and the agents themselves are told who they are (character flavor stays in conversational prose only — never in code, commits, or workflow verdicts).
134
137
 
135
- It's cosmetic and entirely optional. Turn it off per mount with `--no-duo`, or permanently with `AI_WHISPER_DUO=off` in your environment; an opted-out mount rolls nothing, shows nothing, and falls back to plain vendor names everywhere.
138
+ It's cosmetic and **off by default** a plain `whisper collab mount` rolls nothing, shows nothing, and uses plain vendor names everywhere. Opt in by setting `AI_WHISPER_DUO=on` (also accepts `1`, `true`, `yes`) in your environment; once enabled, silence a single mount with `--no-duo`, which overrides the environment for that mount.
136
139
 
137
140
  ## Learn more
138
141
 
@@ -63,7 +63,7 @@ var threadStates = [
63
63
  "failed"
64
64
  ];
65
65
  var collabStates = ["active", "stopped"];
66
- var agentTypes = ["codex", "claude", "ezio", "agy"];
66
+ var agentTypes = ["codex", "claude", "ezio", "agy", "cursor"];
67
67
  var sessionRegistrationStates = ["registered"];
68
68
  var workItemStates = [
69
69
  "queued",
@@ -332,7 +332,7 @@ var mockProviderReplySchema = z14.object({
332
332
 
333
333
  // ../shared/dist/relay-host.js
334
334
  import { z as z15 } from "zod";
335
- var relayTargets = ["codex", "claude", "ezio", "agy", "pull"];
335
+ var relayTargets = ["codex", "claude", "ezio", "agy", "cursor", "pull"];
336
336
  var relayDirectiveSchema = z15.object({
337
337
  raw: z15.string().min(1),
338
338
  target: z15.enum(relayTargets),