ai-whisper 0.12.1 → 0.14.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
@@ -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
 
@@ -100,7 +103,7 @@ whisper collab mount claude
100
103
  whisper collab mount codex
101
104
  ```
102
105
 
103
- The first `mount` creates the collab and starts the broker daemon for the workspace; the second binds the other agent. From either session, start a workflow against a spec or goal file — `spec-driven-development` for a spec, `ralph-loop` for an open-ended goal, plus `complex-bug-fixing` and `deliberation` (see [Workflows](docs/workflows.md)). Watch it run with:
106
+ The first `mount` creates the collab and starts the broker daemon for the workspace; the second binds the other agent. From either session, start a workflow against a spec or goal file — `spec-driven-development` for a spec, `ralph-loop` for an open-ended goal, plus `quick-task`, `complex-bug-fixing`, and `deliberation` (see [Workflows](docs/workflows.md)). Watch it run with:
104
107
 
105
108
  ```bash
106
109
  whisper collab dashboard
@@ -124,19 +127,19 @@ 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
 
139
- - [Workflows](docs/workflows.md) — how to use the four workflows well: choosing between `spec-driven-development`, `ralph-loop`, `complex-bug-fixing`, and `deliberation`, and authoring the spec, goal, bug report, or seed that drives the run.
142
+ - [Workflows](docs/workflows.md) — how to use the five workflows well: choosing between `spec-driven-development`, `quick-task`, `ralph-loop`, `complex-bug-fixing`, and `deliberation`, and authoring the spec, task brief, goal, bug report, or seed that drives the run.
140
143
  - [Concepts](docs/concepts.md) — the mental model: baton handoff, real mounted sessions, supervised autonomy, workflow-first execution.
141
144
  - [Relay & handoff flows](docs/relay-handoff-flows.md) — the complete handoff state machine, capture-status table, hotkey reference, per-step verdicts, and troubleshooting.
142
145
  - [Evaluator configuration](docs/evaluator-configuration.md) — required credentials and options for the LLM evaluator that gates workflows.
@@ -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),
@@ -2808,6 +2808,47 @@ var DELIBERATION = {
2808
2808
  }
2809
2809
  ]
2810
2810
  };
2811
+ var QUICK_TASK_KICKOFF = `You are the implementer in an autonomous quick-task workflow. No human is in the loop \u2014 never ask for confirmation, permission, or clarification; do the work yourself.
2812
+
2813
+ Read the task brief at {specPath}. It was written after a human approved the approach \u2014 treat it as the ratified contract: implement the "Approved approach" section as written; do NOT redesign it.
2814
+
2815
+ 1. The files under "Scope" are the declared blast radius. Implement the task, add or adjust the tests the brief's "Acceptance checks" imply, run the project's verification command and ensure it passes.
2816
+ 2. Commit your changes (do NOT commit the task brief; .ai-whisper/ is gitignored).
2817
+
2818
+ Scope guard: if the work is materially bigger than the brief \u2014 you need to touch non-test files beyond the "Scope" list, the approved approach does not survive contact with the code, or a hidden dependency/migration appears \u2014 do NOT push through. Hand back that you CANNOT PROCEED, naming what exploded; the run halts to the human, who re-scopes or escalates to spec-driven-development.
2819
+
2820
+ Hand back the commit SHAs and the verification output, plus a 1-2 sentence summary; your reply must be at least two sentences, well over 100 characters \u2014 never hand back only a single word.`;
2821
+ var QUICK_TASK_REVIEW = `The implementer claims the task in the brief at {specPath} is complete \u2014 the changes are commits {commitRange}. The upper bound is a LIVE \`HEAD\`: resolve it against the current repository at review time and INCLUDE any commits added during this review round (e.g. fixes for your prior findings); do not pin the review to an earlier tip. Verify against the brief's "Acceptance checks" and confirm the change stays inside the brief's "Scope": touching non-test files beyond the declared Scope list is a blocking finding \u2014 the implementer should have halted instead. Run the project's verification/tests yourself. This is an autonomous workflow with no human in the loop.
2822
+
2823
+ ` + CODE_REVIEW_SKILL_GUIDANCE + WORKFLOW_REVIEW_PROTOCOL;
2824
+ var QUICK_TASK_FIX = "Apply the reviewer's findings to commits {commitRange} now (amend or add commits as needed). This is an autonomous workflow \u2014 no human will respond. Do the work yourself and hand back the updated commit SHAs and verification output; never ask for confirmation, permission, or clarification. End your handback with a 1-2 sentence summary of what you changed; your reply must be at least two sentences, well over 100 characters \u2014 never hand back only a single word.";
2825
+ var QUICK_TASK = {
2826
+ type: "quick-task",
2827
+ displayName: "Quick Task",
2828
+ description: "Human-approved task brief \u2192 implement \u2192 acceptance review, hard-gated to small pre-scoped tasks",
2829
+ defaultImplementer: "claude",
2830
+ defaultReviewer: "codex",
2831
+ phases: [
2832
+ {
2833
+ name: "implement-and-review",
2834
+ implementerRole: "implementer",
2835
+ reviewerRole: "reviewer",
2836
+ maxRounds: 5,
2837
+ initialHandoffStep: "implement",
2838
+ kickoffTemplate: QUICK_TASK_KICKOFF,
2839
+ stepTemplates: {
2840
+ implement: QUICK_TASK_KICKOFF,
2841
+ review: QUICK_TASK_REVIEW,
2842
+ fix: QUICK_TASK_FIX
2843
+ },
2844
+ reviewMode: "acceptance-review",
2845
+ evaluatorPromptKey: "review-loop",
2846
+ artifactOut: { kind: "commit-range" },
2847
+ anchorCommitBaseOnEntry: true,
2848
+ renderFixTemplateOnFindings: true
2849
+ }
2850
+ ]
2851
+ };
2811
2852
  function withOperatorControl(def) {
2812
2853
  return {
2813
2854
  ...def,
@@ -2823,7 +2864,8 @@ var REGISTRY = {
2823
2864
  [SPEC_DRIVEN_DEVELOPMENT.type]: withOperatorControl(SPEC_DRIVEN_DEVELOPMENT),
2824
2865
  [RALPH_LOOP.type]: withOperatorControl(RALPH_LOOP),
2825
2866
  [COMPLEX_BUG_FIXING.type]: withOperatorControl(COMPLEX_BUG_FIXING),
2826
- [DELIBERATION.type]: withOperatorControl(DELIBERATION)
2867
+ [DELIBERATION.type]: withOperatorControl(DELIBERATION),
2868
+ [QUICK_TASK.type]: withOperatorControl(QUICK_TASK)
2827
2869
  };
2828
2870
  function ralphRunDir(workspaceRoot, workflowId) {
2829
2871
  return join(workspaceRoot, ".ai-whisper", "ralph", workflowId);