ai-consultants 2.25.2 → 3.0.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/.claude/commands/ai-consultants:consult.md +13 -19
- package/.claude/commands/ai-consultants:help.md +0 -2
- package/.env.example +1 -46
- package/CLAUDE.md +21 -37
- package/README.md +56 -89
- package/SKILL.md +17 -26
- package/docs/COST_RATES.md +1 -1
- package/docs/RECIPES.md +15 -97
- package/docs/SETUP.md +9 -37
- package/docs/SMART_ROUTING.md +0 -114
- package/docs/cost_rates.json +1 -1
- package/docs/releases/v3.0.0.md +71 -0
- package/package.json +2 -1
- package/references/affinity.json +110 -56
- package/references/configuration.md +1 -97
- package/references/details.md +11 -5
- package/scripts/config.sh +4 -107
- package/scripts/configure.sh +1 -1
- package/scripts/consult_all.sh +2 -165
- package/scripts/doctor.sh +9 -24
- package/scripts/lib/api_query.sh +0 -9
- package/scripts/lib/common.sh +6 -122
- package/scripts/lib/personas.sh +1 -8
- package/scripts/lib/routing.sh +3 -75
- package/scripts/synthesize.sh +7 -10
- package/.claude/commands/ai-consultants:debate.md +0 -102
- package/.claude/commands/ai-consultants:roster-audit.md +0 -38
- package/references/calibration_benchmark.json +0 -65
- package/scripts/debate_round.sh +0 -409
- package/scripts/lib/orchestration.sh +0 -402
- package/scripts/lib/stance.sh +0 -70
- package/scripts/lib/voting.sh +0 -647
- package/scripts/peer_review.sh +0 -471
- package/scripts/roster_audit.sh +0 -157
- package/scripts/roster_calibrate.sh +0 -238
- package/scripts/run_calibration.sh +0 -76
- package/scripts/taste_elo.sh +0 -171
package/docs/COST_RATES.md
CHANGED
package/docs/RECIPES.md
CHANGED
|
@@ -17,16 +17,13 @@ must be enabled.
|
|
|
17
17
|
|
|
18
18
|
## 1. Everyday balanced panel
|
|
19
19
|
|
|
20
|
-
Use four complementary CLI consultants
|
|
21
|
-
|
|
20
|
+
Use four complementary CLI consultants and synthesize their answers with the
|
|
21
|
+
default coverage strategy.
|
|
22
22
|
|
|
23
23
|
```dotenv
|
|
24
24
|
DEFAULT_PRESET=balanced
|
|
25
|
-
DEFAULT_STRATEGY=
|
|
25
|
+
DEFAULT_STRATEGY=coverage
|
|
26
26
|
ENABLE_SYNTHESIS=true
|
|
27
|
-
ENABLE_DEBATE=true
|
|
28
|
-
ORCHESTRATION_MODE=auto
|
|
29
|
-
ENABLE_DEBATE_OPTIMIZATION=true
|
|
30
27
|
```
|
|
31
28
|
|
|
32
29
|
```bash
|
|
@@ -35,7 +32,7 @@ ai-consultants "Redis or Memcached for a write-heavy session store?"
|
|
|
35
32
|
|
|
36
33
|
## 2. Fast and inexpensive check
|
|
37
34
|
|
|
38
|
-
The `fast` preset selects two consultants
|
|
35
|
+
The `fast` preset selects two consultants and economy models.
|
|
39
36
|
|
|
40
37
|
```bash
|
|
41
38
|
ai-consultants --preset fast "Is this SQL index definition valid?"
|
|
@@ -51,57 +48,10 @@ MAX_SESSION_COST=0.10
|
|
|
51
48
|
BUDGET_ACTION=stop
|
|
52
49
|
```
|
|
53
50
|
|
|
54
|
-
## 3.
|
|
55
|
-
|
|
56
|
-
Use the dynamic convergence loop for architectural questions. It stops when
|
|
57
|
-
consensus reaches the target, progress stalls, or the round cap is reached.
|
|
58
|
-
|
|
59
|
-
```dotenv
|
|
60
|
-
ENABLE_DEBATE=true
|
|
61
|
-
ORCHESTRATION_MODE=converge
|
|
62
|
-
CONVERGENCE_MAX_ROUNDS=4
|
|
63
|
-
CONVERGENCE_TARGET_CONSENSUS=75
|
|
64
|
-
CONVERGENCE_STALL_EPSILON=5
|
|
65
|
-
ENABLE_DEBATE_OPTIMIZATION=true
|
|
66
|
-
DEBATE_USE_SUMMARIES=true
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
```bash
|
|
70
|
-
ai-consultants --strategy risk_averse \
|
|
71
|
-
"Should this service use an event log or mutable relational state?"
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
## 4. Exactly two debate rounds
|
|
75
|
-
|
|
76
|
-
Use fixed mode when a benchmark or repeatable workflow requires a predictable
|
|
77
|
-
number of calls.
|
|
78
|
-
|
|
79
|
-
```dotenv
|
|
80
|
-
ENABLE_DEBATE=true
|
|
81
|
-
ORCHESTRATION_MODE=fixed
|
|
82
|
-
DEBATE_ROUNDS=2
|
|
83
|
-
ENABLE_DEBATE_OPTIMIZATION=false
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
```bash
|
|
87
|
-
ai-consultants "Review this migration plan" docs/migration.md@PRIMARY
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
`DEBATE_ROUNDS=1` means initial answers only. Values `2` and `3` add one and two
|
|
91
|
-
cross-critique rounds respectively.
|
|
92
|
-
|
|
93
|
-
## 5. Security review with an adversarial gate
|
|
94
|
-
|
|
95
|
-
The adversarial shape forces critique and enables peer review as a refutation
|
|
96
|
-
gate before synthesis.
|
|
51
|
+
## 3. Security review
|
|
97
52
|
|
|
98
53
|
```dotenv
|
|
99
54
|
DEFAULT_STRATEGY=security_first
|
|
100
|
-
ENABLE_DEBATE=true
|
|
101
|
-
ORCHESTRATION_MODE=adversarial
|
|
102
|
-
ENABLE_ADVERSARIAL_VERIFY=true
|
|
103
|
-
ENABLE_PEER_REVIEW=true
|
|
104
|
-
PEER_REVIEW_MIN_RESPONSES=3
|
|
105
55
|
```
|
|
106
56
|
|
|
107
57
|
```bash
|
|
@@ -112,34 +62,17 @@ ai-consultants --preset security \
|
|
|
112
62
|
|
|
113
63
|
Never include credentials, tokens, or private keys in consultation context.
|
|
114
64
|
|
|
115
|
-
##
|
|
116
|
-
|
|
117
|
-
Force tournament mode when the answer must end with one winner.
|
|
118
|
-
|
|
119
|
-
```bash
|
|
120
|
-
ORCHESTRATION_MODE=tournament \
|
|
121
|
-
ENABLE_DEBATE=true \
|
|
122
|
-
ai-consultants --strategy majority \
|
|
123
|
-
"For this API, choose REST or GraphQL and justify one winner"
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
Use `--strategy compare_only` instead when you want the trade-offs without a
|
|
127
|
-
recommendation.
|
|
128
|
-
|
|
129
|
-
## 7. Exhaustive audit
|
|
65
|
+
## 4. Compare two approaches without a recommendation
|
|
130
66
|
|
|
131
|
-
|
|
67
|
+
Use `--strategy compare_only` when you want the trade-offs laid out without a
|
|
68
|
+
single winner.
|
|
132
69
|
|
|
133
70
|
```bash
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
CONVERGENCE_MAX_ROUNDS=4 \
|
|
137
|
-
ai-consultants --preset high-stakes \
|
|
138
|
-
"Find all correctness and failure-mode risks in this worker" \
|
|
139
|
-
src/worker.ts@PRIMARY src/queue.ts@CONTEXT
|
|
71
|
+
ai-consultants --strategy compare_only \
|
|
72
|
+
"For this API, compare REST and GraphQL"
|
|
140
73
|
```
|
|
141
74
|
|
|
142
|
-
##
|
|
75
|
+
## 5. Reliable panel with health gate and quorum
|
|
143
76
|
|
|
144
77
|
Ping selected consultants before the full run and stop when too few respond.
|
|
145
78
|
The health gate adds one small call per selected consultant.
|
|
@@ -159,7 +92,7 @@ ai-consultants "Make a release recommendation from the attached evidence" \
|
|
|
159
92
|
release-notes.md@PRIMARY test-results.md@CONTEXT
|
|
160
93
|
```
|
|
161
94
|
|
|
162
|
-
##
|
|
95
|
+
## 6. Hard budget ceiling
|
|
163
96
|
|
|
164
97
|
Track estimated spend and stop with partial results rather than crossing the
|
|
165
98
|
session limit.
|
|
@@ -179,7 +112,7 @@ ai-consultants --preset cost-capped --strategy cost_capped \
|
|
|
179
112
|
"Propose the smallest safe fix for this regression"
|
|
180
113
|
```
|
|
181
114
|
|
|
182
|
-
##
|
|
115
|
+
## 7. CLI-only operation
|
|
183
116
|
|
|
184
117
|
Keep every switchable consultant on its installed CLI. CLI authentication is
|
|
185
118
|
handled by each provider's own login flow.
|
|
@@ -205,7 +138,7 @@ ai-consultants doctor --live
|
|
|
205
138
|
`KIMI_MODEL` is passed to the Kimi CLI with `--model`, so this recipe uses K3
|
|
206
139
|
even when `~/.kimi/config.toml` still names an older default model.
|
|
207
140
|
|
|
208
|
-
##
|
|
141
|
+
## 8. Hybrid CLI and API panel
|
|
209
142
|
|
|
210
143
|
Enable API transport only where needed. Gemini and MiniMax automatically choose
|
|
211
144
|
API mode when their API key is present unless `*_USE_API` is explicitly set.
|
|
@@ -227,22 +160,7 @@ ENABLE_DEEPSEEK=false
|
|
|
227
160
|
|
|
228
161
|
Keep `~/.config/ai-consultants/.env` at mode `600` because it may contain keys.
|
|
229
162
|
|
|
230
|
-
##
|
|
231
|
-
|
|
232
|
-
Ask the panel to choose from shared stance options so differently worded answers
|
|
233
|
-
can still count as agreement. This adds roughly one LLM call per run.
|
|
234
|
-
|
|
235
|
-
```dotenv
|
|
236
|
-
ENABLE_STANCE_CONSENSUS=true
|
|
237
|
-
STANCE_MAX_OPTIONS=5
|
|
238
|
-
STANCE_TIMEOUT=60
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
```bash
|
|
242
|
-
ai-consultants "Should package lockfiles always be committed for applications?"
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
## 13. Large or awkward prompts
|
|
163
|
+
## 9. Large or awkward prompts
|
|
246
164
|
|
|
247
165
|
Use `--query-file` to avoid shell quoting and argument-size problems. Mark the
|
|
248
166
|
main files with `@PRIMARY` and supporting files with `@CONTEXT`.
|
package/docs/SETUP.md
CHANGED
|
@@ -62,12 +62,11 @@ That's it! You're ready to go.
|
|
|
62
62
|
|
|
63
63
|
## Claude Code Slash Commands
|
|
64
64
|
|
|
65
|
-
AI Consultants provides
|
|
65
|
+
AI Consultants provides 2 slash commands:
|
|
66
66
|
|
|
67
67
|
| Command | Description |
|
|
68
68
|
|---------|-------------|
|
|
69
69
|
| `/ai-consultants:consult` | Main consultation - ask AI consultants a coding question |
|
|
70
|
-
| `/ai-consultants:debate` | Run consultation with multi-round debate |
|
|
71
70
|
| `/ai-consultants:help` | Show all commands and usage |
|
|
72
71
|
|
|
73
72
|
Configuration can be managed with `ai-consultants configure`, including presets,
|
|
@@ -460,8 +459,8 @@ Presets let you quickly configure how many consultants to use.
|
|
|
460
459
|
| `minimal` | 2 (Gemini + Codex) | Quick, cheap |
|
|
461
460
|
| `balanced` | 4 (+ Mistral + Cursor) | Standard |
|
|
462
461
|
| `thorough` | 4 | Comprehensive |
|
|
463
|
-
| `high-stakes` | Expanded panel
|
|
464
|
-
| `security` | Security-focused
|
|
462
|
+
| `high-stakes` | Expanded panel | Critical decisions |
|
|
463
|
+
| `security` | Security-focused | Security reviews |
|
|
465
464
|
| `cost-capped` | Budget-friendly | Low cost |
|
|
466
465
|
|
|
467
466
|
### Set Default Preset
|
|
@@ -491,7 +490,8 @@ Strategies control how consultant responses are combined.
|
|
|
491
490
|
|
|
492
491
|
| Strategy | Description |
|
|
493
492
|
|----------|-------------|
|
|
494
|
-
| `
|
|
493
|
+
| `coverage` | Union of every distinct point/risk across consultants, deduplicated (default) |
|
|
494
|
+
| `majority` | Simple voting, most common answer wins |
|
|
495
495
|
| `risk_averse` | Weight conservative responses higher |
|
|
496
496
|
| `security_first` | Prioritize security-focused insights |
|
|
497
497
|
| `cost_capped` | Prefer simpler, cheaper solutions |
|
|
@@ -522,33 +522,9 @@ DEFAULT_STRATEGY=risk_averse
|
|
|
522
522
|
These examples can be prefixed to one command or saved in
|
|
523
523
|
`~/.config/ai-consultants/.env`.
|
|
524
524
|
|
|
525
|
-
### Dynamic debate
|
|
526
|
-
|
|
527
|
-
```bash
|
|
528
|
-
ENABLE_DEBATE=true \
|
|
529
|
-
ORCHESTRATION_MODE=converge \
|
|
530
|
-
CONVERGENCE_MAX_ROUNDS=4 \
|
|
531
|
-
CONVERGENCE_TARGET_CONSENSUS=75 \
|
|
532
|
-
ai-consultants --strategy risk_averse \
|
|
533
|
-
"Should this service use an event log or mutable relational state?"
|
|
534
|
-
```
|
|
535
|
-
|
|
536
|
-
### Fixed two-round debate
|
|
537
|
-
|
|
538
|
-
```bash
|
|
539
|
-
ENABLE_DEBATE=true \
|
|
540
|
-
ORCHESTRATION_MODE=fixed \
|
|
541
|
-
DEBATE_ROUNDS=2 \
|
|
542
|
-
ENABLE_DEBATE_OPTIMIZATION=false \
|
|
543
|
-
ai-consultants "Review this migration plan" docs/migration.md@PRIMARY
|
|
544
|
-
```
|
|
545
|
-
|
|
546
525
|
### Security gate with a required quorum
|
|
547
526
|
|
|
548
527
|
```bash
|
|
549
|
-
ENABLE_DEBATE=true \
|
|
550
|
-
ORCHESTRATION_MODE=adversarial \
|
|
551
|
-
ENABLE_PEER_REVIEW=true \
|
|
552
528
|
ENABLE_HEALTH_GATE=true \
|
|
553
529
|
QUORUM_MIN=3 \
|
|
554
530
|
QUORUM_ACTION=stop \
|
|
@@ -556,9 +532,8 @@ ai-consultants --preset security --strategy security_first \
|
|
|
556
532
|
"Find authentication bypasses" src/auth.ts@PRIMARY
|
|
557
533
|
```
|
|
558
534
|
|
|
559
|
-
More scenarios—including
|
|
560
|
-
|
|
561
|
-
[`docs/RECIPES.md`](RECIPES.md).
|
|
535
|
+
More scenarios—including CLI-only, hybrid API, hard-budget, and
|
|
536
|
+
large-context runs—are in [`docs/RECIPES.md`](RECIPES.md).
|
|
562
537
|
|
|
563
538
|
---
|
|
564
539
|
|
|
@@ -573,7 +548,7 @@ ai-consultants configure
|
|
|
573
548
|
# Set any supported parameter non-interactively
|
|
574
549
|
ai-consultants configure \
|
|
575
550
|
--set DEFAULT_PRESET=balanced \
|
|
576
|
-
--set
|
|
551
|
+
--set ENABLE_SYNTHESIS=true
|
|
577
552
|
|
|
578
553
|
# Guided or exhaustive review
|
|
579
554
|
ai-consultants configure --interactive
|
|
@@ -643,13 +618,10 @@ MINIMAX_USE_API=false # Default: mmx CLI mode
|
|
|
643
618
|
|
|
644
619
|
# Defaults (v2.8)
|
|
645
620
|
DEFAULT_PRESET=balanced
|
|
646
|
-
DEFAULT_STRATEGY=
|
|
621
|
+
DEFAULT_STRATEGY=coverage
|
|
647
622
|
|
|
648
623
|
# Features
|
|
649
|
-
ENABLE_DEBATE=false
|
|
650
624
|
ENABLE_SYNTHESIS=true
|
|
651
|
-
ENABLE_PANIC_MODE=auto
|
|
652
|
-
ORCHESTRATION_MODE=auto
|
|
653
625
|
ENABLE_HEALTH_GATE=false
|
|
654
626
|
QUORUM_MIN=2
|
|
655
627
|
QUORUM_ACTION=warn
|
package/docs/SMART_ROUTING.md
CHANGED
|
@@ -49,18 +49,10 @@ customization possible without editing bash.
|
|
|
49
49
|
"version": "1.1",
|
|
50
50
|
"default_score": 5,
|
|
51
51
|
"general_score": 8,
|
|
52
|
-
"capability_default": 5,
|
|
53
52
|
"known_consultants": ["Gemini", "Codex", "..."],
|
|
54
53
|
"categories": {
|
|
55
54
|
"CODE_REVIEW": { "Gemini": 7, "Codex": 10, "..." },
|
|
56
55
|
"BUG_DEBUG": { "..." }
|
|
57
|
-
},
|
|
58
|
-
"capabilities": {
|
|
59
|
-
"Gemini": { "intelligence": 8, "taste": 8, "cost": 6 },
|
|
60
|
-
"Codex": { "intelligence": 8, "taste": 5, "cost": 4 }
|
|
61
|
-
},
|
|
62
|
-
"category_axis": {
|
|
63
|
-
"API_DESIGN": "taste", "CODE_REVIEW": "taste", "ALGORITHM": "intelligence"
|
|
64
56
|
}
|
|
65
57
|
}
|
|
66
58
|
```
|
|
@@ -127,112 +119,6 @@ COMPLEXITY_THRESHOLD_MEDIUM=6 # Score 4-6 = use standard models
|
|
|
127
119
|
|
|
128
120
|
See [COST_RATES.md](COST_RATES.md) for model pricing by tier.
|
|
129
121
|
|
|
130
|
-
## Capability-Aware Routing & Voting (v2.20+)
|
|
131
|
-
|
|
132
|
-
Beyond category *fit* (the affinity matrix), v1.1 of `affinity.json` adds a
|
|
133
|
-
per-consultant **capability** score on three axes (1-10): `intelligence`,
|
|
134
|
-
`taste`, and `cost`. A `category_axis` map names the quality axis each category
|
|
135
|
-
stresses — **taste** for design-shaped work (API_DESIGN, ARCHITECTURE,
|
|
136
|
-
CODE_REVIEW, GENERAL), **intelligence** otherwise.
|
|
137
|
-
|
|
138
|
-
Two opt-in features consume this:
|
|
139
|
-
|
|
140
|
-
- **`ENABLE_CAPABILITY_WEIGHTING`** — a consultant's vote weight becomes
|
|
141
|
-
`confidence × (S + capability) / S` (`S = CAPABILITY_WEIGHT_STRENGTH`, default
|
|
142
|
-
10), so on a taste-shaped question a high-taste model's opinion counts for more.
|
|
143
|
-
- **`ENABLE_CAPABILITY_ROUTING`** — panel *eligibility* still uses raw affinity,
|
|
144
|
-
but the *sort rank* becomes `affinity + (capability − CAPABILITY_DEFAULT)`, so
|
|
145
|
-
under a size limit the quality axis reorders which eligible consultants make
|
|
146
|
-
the cut.
|
|
147
|
-
|
|
148
|
-
`cost` is an efficiency axis for budget-aware composition only — **never** a
|
|
149
|
-
vote weight (tie-break order: intelligence > taste > cost). Scores are
|
|
150
|
-
subjective, point-in-time seeds — re-derive them for your own panel. Helpers:
|
|
151
|
-
`get_capability <consultant> <axis>` and `get_category_axis <category>` in
|
|
152
|
-
`lib/routing.sh`.
|
|
153
|
-
|
|
154
|
-
## Roster Audit — Uncorrelated Value (v2.20+)
|
|
155
|
-
|
|
156
|
-
Adding a consultant only helps if it says something the others don't. The
|
|
157
|
-
`scripts/roster_audit.sh` tool measures this across past consultations: a
|
|
158
|
-
consultant's approach is *distinct* in a round when its keyword set has low
|
|
159
|
-
Jaccard overlap (`< --threshold`, default 20%) with **every** other consultant
|
|
160
|
-
that round. A consultant that is rarely distinct is correlated with the panel —
|
|
161
|
-
a candidate to drop or down-weight; one that is often distinct earns its seat on
|
|
162
|
-
diversity.
|
|
163
|
-
|
|
164
|
-
```bash
|
|
165
|
-
# audit specific consultation output dirs
|
|
166
|
-
./scripts/roster_audit.sh /path/to/consultation_dir ...
|
|
167
|
-
|
|
168
|
-
# or the N most recent under the consultations base
|
|
169
|
-
./scripts/roster_audit.sh --recent 30
|
|
170
|
-
|
|
171
|
-
# machine-readable
|
|
172
|
-
./scripts/roster_audit.sh --json --recent 30
|
|
173
|
-
```
|
|
174
|
-
|
|
175
|
-
Read-only; reuses the `voting.sh` keyword/Jaccard machinery. Consultations with
|
|
176
|
-
fewer than two responders are skipped (correlation is undefined). This is the
|
|
177
|
-
model-routing "before a new model earns a row" bar (contribute >=1 thing the
|
|
178
|
-
incumbents miss) applied to the consultation panel instead of a review lane.
|
|
179
|
-
|
|
180
|
-
## Measured Calibration — Replacing the Heuristic Seeds (v2.20+)
|
|
181
|
-
|
|
182
|
-
The `capabilities` scores in `affinity.json` ship as subjective seeds. To
|
|
183
|
-
**measure** them instead of guessing, three tools derive each axis from data the
|
|
184
|
-
tool already produces — sliced by the same `category_axis` that consumes them:
|
|
185
|
-
|
|
186
|
-
| Tool | Derives | From |
|
|
187
|
-
|---|---|---|
|
|
188
|
-
| `scripts/roster_calibrate.sh` | intelligence, taste, cost (**Tier A**) | blind peer-review scores (sliced by axis) + observed `tokens_used` × catalog rate |
|
|
189
|
-
| `scripts/taste_elo.sh` | taste (**Tier B**) | pairwise LLM-as-judge Elo over taste-axis answers (removes peer self-bias) |
|
|
190
|
-
| `references/calibration_benchmark.json` | the question set | 50 questions, 5 per category, balanced across the two axes |
|
|
191
|
-
| `scripts/run_calibration.sh` | the data | runs the benchmark through the panel with `ENABLE_PEER_REVIEW=true`, then calibrates |
|
|
192
|
-
|
|
193
|
-
### Workflow
|
|
194
|
-
|
|
195
|
-
```bash
|
|
196
|
-
# 1. Collect data: run the benchmark through the full panel (real calls — costs money).
|
|
197
|
-
./scripts/run_calibration.sh --limit 10 --dry-run # preview
|
|
198
|
-
./scripts/run_calibration.sh # full 50-question run
|
|
199
|
-
|
|
200
|
-
# 2. Tier A: measured intelligence/taste/cost -> capabilities block
|
|
201
|
-
./scripts/roster_calibrate.sh --recent 50 # print measured block
|
|
202
|
-
./scripts/roster_calibrate.sh --recent 50 --write # merge into affinity.json (keeps unmeasured cells)
|
|
203
|
-
|
|
204
|
-
# 3. Tier B (optional): refine taste via pairwise-judge Elo
|
|
205
|
-
./scripts/taste_elo.sh --recent 50 --write
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
Both `roster_calibrate.sh` and `taste_elo.sh` also accept explicit consultation
|
|
209
|
-
dirs and `--json`, and back up `affinity.json` to `.bak` before `--write`.
|
|
210
|
-
|
|
211
|
-
### How each axis is measured
|
|
212
|
-
|
|
213
|
-
- **cost** — mean *observed* `$/response` (`tokens_used` × catalog rate, 60/40
|
|
214
|
-
input/output split), rank-normalized so the cheapest = 10. This is cost per
|
|
215
|
-
*task* (verbosity + completion), not per-token sticker price — a terse pricey
|
|
216
|
-
model can still rank cheap.
|
|
217
|
-
- **intelligence / taste** — mean **blind peer-review** `quality_score` (already
|
|
218
|
-
1-10), sliced by `category_axis`: intelligence = performance on
|
|
219
|
-
intelligence-axis categories, taste = on taste-axis categories.
|
|
220
|
-
- **taste (Tier B)** — taste has no ground truth, so `taste_elo.sh` measures it
|
|
221
|
-
*relative to a chosen judge*. Each pair of answers on a taste-axis question is
|
|
222
|
-
shown to the judge, which picks the better one on design taste only; wins feed
|
|
223
|
-
an Elo ranking. The judge is pluggable:
|
|
224
|
-
- `JUDGE_CLI` — CLI for the built-in judge (default `claude`).
|
|
225
|
-
- `TASTE_JUDGE_CMD` — external judge `cmd <ctx> <A.json> <B.json>` printing
|
|
226
|
-
`A`/`B` (used by tests and custom judges).
|
|
227
|
-
|
|
228
|
-
### Companion: which consultants earn a seat
|
|
229
|
-
|
|
230
|
-
`roster_audit.sh` (above) answers *who to keep*; calibration answers *how much
|
|
231
|
-
each is worth per axis*. Together they make the roster data-driven: audit to
|
|
232
|
-
prune redundant consultants, calibrate to score the survivors, then enable
|
|
233
|
-
`ENABLE_CAPABILITY_WEIGHTING` / `ENABLE_CAPABILITY_ROUTING` to act on the
|
|
234
|
-
measured scores.
|
|
235
|
-
|
|
236
122
|
## Timeout per Category
|
|
237
123
|
|
|
238
124
|
Timeouts optimized based on category complexity:
|
package/docs/cost_rates.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "
|
|
2
|
+
"version": "3.0.0",
|
|
3
3
|
"updated": "2026-07-16",
|
|
4
4
|
"models": {
|
|
5
5
|
"_comment_units": "All rates are USD per 1,000 tokens (per-1K). lib/costs.sh computes cost as (token_count / 1000) * rate, so every value here MUST be a per-1K rate = (provider $/1M price) / 1000. Do NOT paste $/MTok figures directly.",
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Release v3.0.0
|
|
2
|
+
|
|
3
|
+
**Date:** 2026-07-23
|
|
4
|
+
**Type:** Major — removes the deliberation/consensus machinery; default output is now the coverage union
|
|
5
|
+
**Previous:** v2.25.2
|
|
6
|
+
|
|
7
|
+
## Highlights
|
|
8
|
+
|
|
9
|
+
- **The panel premise was tested and the answer is task-dependent.** A held-out coverage experiment found a single strong model saturates *convergent* defect-finding (it caught 19/19 hard bugs, including real CVEs and a concurrency bug found by formal verification), while a diverse cross-vendor panel materially out-covers it on *breadth* questions — "what could go wrong?", enumerate the risks — winning as a **union of distinct answers**, not through deliberation.
|
|
10
|
+
- **Default output is now the `coverage` union** — the deduplicated set of every distinct point, recommendation, risk, and edge case across the panel, preserving what only one model raised. No more voted single recommendation by default.
|
|
11
|
+
- **The deliberation/consensus machinery is gone**: multi-round debate, dynamic orchestration, voting/consensus scoring, capability weighting, panic mode, peer review, stance consensus, and the capability-calibration tooling.
|
|
12
|
+
- **What made the panel good is kept**: diverse parallel fan-out to all 11 consultants, category-affinity routing, doctor, cost tracking, quorum/health gate, and every adapter.
|
|
13
|
+
- **Simpler and smaller**: 19 files removed (~-4,600 lines), `npm test` 22 → 15 suites, all green.
|
|
14
|
+
|
|
15
|
+
## What's New
|
|
16
|
+
|
|
17
|
+
### Coverage synthesis (the new default)
|
|
18
|
+
|
|
19
|
+
The pipeline is now **classify → route → parallel fan-out → coverage synthesis**. Every selected consultant answers once, in parallel; the synthesizer returns the *union* of their distinct points rather than picking a winner or averaging a vote.
|
|
20
|
+
|
|
21
|
+
| Strategy | Behavior |
|
|
22
|
+
|---|---|
|
|
23
|
+
| `coverage` (default) | Union of every distinct point/recommendation/risk across the panel; credits what only one model raised |
|
|
24
|
+
| `compare_only` | Each consultant side-by-side, no synthesized union |
|
|
25
|
+
| `majority` | A single blended recommendation, weighting all equally |
|
|
26
|
+
| `risk_averse` / `security_first` / `cost_capped` | Emphasis variants |
|
|
27
|
+
|
|
28
|
+
Override per run with `--strategy`, or persist with `DEFAULT_STRATEGY`.
|
|
29
|
+
|
|
30
|
+
### Why
|
|
31
|
+
|
|
32
|
+
Two independent reviews had judged the panel's premise weak: voting and consensus measure *agreement*, not correctness, and the repo had no held-out comparison against one strong model. The A/W/C coverage experiment (maintainer instrumentation, not shipped) measured, on deep 60-point rubrics across three domains:
|
|
33
|
+
|
|
34
|
+
| task | single model | self-consistency (same model ×k) | diverse panel (union) |
|
|
35
|
+
|---|---|---|---|
|
|
36
|
+
| convergent defect-finding | 19/19 (saturates) | — | no headroom to add |
|
|
37
|
+
| breadth / enumeration | 51% | 70% | **93%** |
|
|
38
|
+
|
|
39
|
+
The panel wins on breadth, and it wins as the raw union with deliberation **off** — so the diverse fan-out is the value and the averaging machinery is not.
|
|
40
|
+
|
|
41
|
+
## Breaking Changes
|
|
42
|
+
|
|
43
|
+
- **Default output shape changed** from a voted recommendation to the coverage union.
|
|
44
|
+
- **Removed features and their config** (setting any of these via `configure --set` now fails closed): `ENABLE_DEBATE`/`DEBATE_ROUNDS`, `ORCHESTRATION_MODE`/`CONVERGENCE_*`, `ENABLE_DEBATE_OPTIMIZATION`, `ENABLE_PANIC_MODE`/`PANIC_*`, `ENABLE_ADVERSARIAL_VERIFY`, `ENABLE_PEER_REVIEW`/`PEER_REVIEW_MIN_RESPONSES`, `ENABLE_CAPABILITY_WEIGHTING`/`ENABLE_CAPABILITY_ROUTING`/`CAPABILITY_*`, `ENABLE_STANCE_CONSENSUS`/`STANCE_*`.
|
|
45
|
+
- **Removed outputs**: `voting.json`, `round_N/`, `panic_diagnosis.json`.
|
|
46
|
+
- **Removed slash commands**: `/ai-consultants:debate`, `/ai-consultants:roster-audit` (installers prune them on update).
|
|
47
|
+
- **Removed tooling**: `roster_audit.sh`, `roster_calibrate.sh`, `run_calibration.sh`, `taste_elo.sh`, `doctor --roster-audit`.
|
|
48
|
+
- The affinity matrix keeps its category→consultant routing scores; the `capabilities`/`category_axis` axes are removed.
|
|
49
|
+
|
|
50
|
+
## Upgrade Guide
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
# If installed via git clone
|
|
54
|
+
cd ~/.claude/skills/ai-consultants && git pull
|
|
55
|
+
|
|
56
|
+
# If installed via curl | bash
|
|
57
|
+
curl -fsSL https://raw.githubusercontent.com/matteoscurati/ai-consultants/main/scripts/install.sh | bash
|
|
58
|
+
|
|
59
|
+
# If installed via npx (no install step)
|
|
60
|
+
npx ai-consultants@latest "your question"
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
No configuration change is required. If your `.env` sets a removed variable, delete it — the tool now fans out and returns the coverage union by default. To get a single recommendation instead, use `--strategy majority`; for a raw side-by-side, `--strategy compare_only`.
|
|
64
|
+
|
|
65
|
+
## Note on the evidence
|
|
66
|
+
|
|
67
|
+
The breadth result is **directional** (n=3, hand-validated) alongside the n=19 defect-finding result. The cut is a considered bet on that evidence; a statistically binding breadth claim would need n≥15–20 deep-rubric items (the experiment harness exists on the `experiment/coverage-metric` branch).
|
|
68
|
+
|
|
69
|
+
## Contributors
|
|
70
|
+
|
|
71
|
+
- matteoscurati
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ai-consultants",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"description": "A harness for every question - a panel of up to 11 AI models that picks its own deliberation strategy per question (convergence, adversarial verification, tournament) and checks its work before answering",
|
|
5
5
|
"bin": {
|
|
6
6
|
"ai-consultants": "bin/ai-consultants"
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
"!scripts/test_fixtures/",
|
|
13
13
|
"!scripts/lib/test_helpers.sh",
|
|
14
14
|
"!scripts/release.sh",
|
|
15
|
+
"!scripts/experiment/",
|
|
15
16
|
"templates/",
|
|
16
17
|
".env.example",
|
|
17
18
|
".claude/commands/",
|