analyzthis_design 1.18.0 → 1.20.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 +160 -18
- package/agents/cards/anuj.md +6 -0
- package/agents/cards/arjun.md +6 -0
- package/agents/cards/devi.md +15 -0
- package/agents/cards/meera.md +6 -0
- package/agents/cards/noor.md +6 -0
- package/agents/cards/priya.md +6 -0
- package/agents/cards/raj.md +6 -0
- package/agents/cards/zara.md +6 -0
- package/agents/chain.json +9 -3
- package/agents/deliberation-schema.json +44 -0
- package/agents/manifests/devi.json +31 -0
- package/agents/session-schema.json +34 -1
- package/dist/bin/cli.js +1 -1
- package/dist/lib/cache.js +1 -1
- package/dist/lib/collect.js +1 -1
- package/dist/lib/cost.js +1 -1
- package/dist/lib/deliberation.js +1 -0
- package/dist/lib/design-spec.js +1 -1
- package/dist/lib/export.js +1 -1
- package/dist/lib/feedback-submit.js +1 -1
- package/dist/lib/feedback.js +1 -1
- package/dist/lib/host-llm.js +1 -0
- package/dist/lib/install.js +1 -1
- package/dist/lib/knowledge.js +1 -1
- package/dist/lib/orchestrator/run.js +1 -1
- package/dist/lib/platforms.js +1 -1
- package/dist/lib/provider.js +1 -0
- package/dist/lib/research.js +1 -1
- package/dist/lib/retrieve.js +1 -1
- package/dist/lib/session.js +1 -1
- package/dist/lib/source-discovery.js +1 -1
- package/dist/lib/synthesis.js +1 -0
- package/dist/lib/token-gate.js +1 -0
- package/package.json +2 -2
- package/skills/anuj/SKILL.md +2 -0
- package/skills/arjun/SKILL.md +2 -0
- package/skills/deliberation-protocol/SKILL.md +131 -0
- package/skills/design-critic/SKILL.md +19 -6
- package/skills/design-director/SKILL.md +13 -1
- package/skills/devi/SKILL.md +114 -0
- package/skills/getting-started/SKILL.md +18 -0
- package/skills/meera/SKILL.md +2 -0
- package/skills/noor/SKILL.md +2 -0
- package/skills/persona-orchestrator/SKILL.md +22 -13
- package/skills/priya/SKILL.md +2 -0
- package/skills/raj/SKILL.md +2 -0
- package/skills/ux-ideator/SKILL.md +11 -5
- package/skills/zara/SKILL.md +2 -0
- package/supabase/deliberation-config.example.json +15 -0
package/README.md
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
A set of AI design personas and a task-first evaluation framework that plugs into Cursor, Claude Code, and Codex CLI as slash commands — plus an agentic MoE router with shared session state so you can call the same graph from any IDE or from the CLI.
|
|
4
4
|
|
|
5
|
-
Install once. Run structured UX critiques, multi-phase ideation, and task-grounded screen reviews — directly inside your AI chat.
|
|
5
|
+
Install once. Run structured UX critiques, multi-phase ideation, and task-grounded screen reviews — directly inside your AI chat. **No external LLM API keys required** for CLI orchestrator runs: **`/devi`** voices each persona from your host IDE (Cursor, Claude, etc.).
|
|
6
6
|
|
|
7
|
-
**npm:** [analyzthis_design](https://www.npmjs.com/package/analyzthis_design)
|
|
7
|
+
**npm:** [analyzthis_design](https://www.npmjs.com/package/analyzthis_design) · **Current version:** 1.20.0
|
|
8
8
|
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -66,8 +66,9 @@ All skills use the **Agent Skills** `SKILL.md` standard — same files work acro
|
|
|
66
66
|
| `/persona-orchestrator` | **Agentic critique entry point** (not for wireframes). MoE router + session state, ux-story-gate intake, persona chain, DS / hierarchy / verify gates → SHIP/REVISE/BLOCK |
|
|
67
67
|
| `/ux-story-gate` | Task-first gate: PRDs, DS/Figma discovery, MoE routing, browser verify, assess-only mode |
|
|
68
68
|
| `/design-critic` | 4-persona critique → Composite Score + Information Hierarchy Gate |
|
|
69
|
+
| `/deliberation-protocol` | Adversarial review rules — grounding, objection JSON, parallel pairs, Raj escalation |
|
|
69
70
|
|
|
70
|
-
###
|
|
71
|
+
### 9 Personas (+ host runtime)
|
|
71
72
|
|
|
72
73
|
Invoke critique personas for targeted, already-grounded questions. For **wireframes**, use `/ux-ideator`, `/noor`, or `/anuj`. For full screen **critique**, prefer `/persona-orchestrator` or `/ux-story-gate`. Run **`/kavi`** first so they have project context.
|
|
73
74
|
|
|
@@ -81,6 +82,7 @@ Invoke critique personas for targeted, already-grounded questions. For **wirefra
|
|
|
81
82
|
| `/noor` | IA Architect | Minimalist Concept A + declared ranked information hierarchy |
|
|
82
83
|
| `/anuj` | Power-User Advocate | Dense Concept B — bulk actions, keyboard shortcuts, hierarchy kept prominent |
|
|
83
84
|
| `/raj` | Arbitrator | Resolves persona stalemates using 5 ranked product principles. Never speaks first. |
|
|
85
|
+
| `/devi` | Host LLM runtime | Voices other personas when CLI `run` uses host mode (no API keys). Reads pending prompts → writes responses → `--continue` resumes |
|
|
84
86
|
|
|
85
87
|
### Supporting skills
|
|
86
88
|
|
|
@@ -89,10 +91,11 @@ Invoke critique personas for targeted, already-grounded questions. For **wirefra
|
|
|
89
91
|
| `/design-personas` | Session context template — fill in once before a session |
|
|
90
92
|
| `/knowledge-bank` | Auto-populated from your connected vault (or from Kavi collect). All personas read this first. |
|
|
91
93
|
| `/design-reference` | CSV reference data (colors, typography, UX guidelines, stacks, …) |
|
|
94
|
+
| `/collect-knowledge` | Alias for `/kavi` |
|
|
92
95
|
|
|
93
96
|
---
|
|
94
97
|
|
|
95
|
-
## Agentic system (v1.
|
|
98
|
+
## Agentic system (v1.20)
|
|
96
99
|
|
|
97
100
|
```
|
|
98
101
|
User ask / Figma URL
|
|
@@ -101,14 +104,112 @@ User ask / Figma URL
|
|
|
101
104
|
↓
|
|
102
105
|
ux-story-gate Phases 0–1.5 (PRD + DS/Figma + MoE router)
|
|
103
106
|
↓
|
|
104
|
-
|
|
107
|
+
Adversarial deliberation (parallel objection rounds, low satisfaction default)
|
|
105
108
|
↓
|
|
106
|
-
|
|
109
|
+
MoE subset (default) OR full chain (explicit "full")
|
|
107
110
|
↓
|
|
108
|
-
|
|
111
|
+
Zara (delight) → Raj on stalemate (after all groups — never before Zara)
|
|
112
|
+
↓
|
|
113
|
+
Phase 5 synthesis (composite score + hierarchy gate + top 3)
|
|
114
|
+
↓
|
|
115
|
+
Hard gates: DS → Hierarchy → Verify
|
|
116
|
+
↓
|
|
117
|
+
SHIP / REVISE / BLOCK
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Devi — host LLM (no API keys) · v1.20
|
|
121
|
+
|
|
122
|
+
When no `OPENAI_API_KEY` / `ANTHROPIC_API_KEY` / `GEMINI_API_KEY` / `ZAI_API_KEY` is set, **`run` defaults to `provider: host`**. The orchestrator writes each persona step as a prompt file; **`/devi`** (or your host IDE agent) embodies that persona and writes the response back. No paid API calls.
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
# 1. Start run — pauses at first persona with prompt path
|
|
126
|
+
npx analyzthis_design run --task "Review invoice approval screen" --full
|
|
127
|
+
|
|
128
|
+
# 2. In Cursor / Claude: invoke /devi
|
|
129
|
+
# (reads pending/*.json, writes responses/*.md in persona voice)
|
|
130
|
+
|
|
131
|
+
# 3. Check queue + continue
|
|
132
|
+
npx analyzthis_design devi status
|
|
133
|
+
npx analyzthis_design run --continue --task "Review invoice approval screen" --full
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**Prompt queue layout:**
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
~/.analyzthis_design/runs/{project-id}/{run-id}/
|
|
140
|
+
pending/001-arjun.json ← orchestrator writes
|
|
141
|
+
responses/001-arjun.md ← Devi / host IDE writes
|
|
142
|
+
manifest.json
|
|
109
143
|
```
|
|
110
144
|
|
|
111
|
-
**
|
|
145
|
+
**Submit a response manually:**
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
npx analyzthis_design devi respond \
|
|
149
|
+
--run ~/.analyzthis_design/runs/{project-id}/{run-id} \
|
|
150
|
+
--step 001-arjun \
|
|
151
|
+
--file my-arjun-response.md
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
**Override host mode** when you have API keys:
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
export ANTHROPIC_API_KEY=sk-...
|
|
158
|
+
npx analyzthis_design run --task "..." --provider anthropic
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Skill: `/devi` · Implementation: `lib/host-llm.js`, `lib/provider.js`
|
|
162
|
+
|
|
163
|
+
### Phase 5 synthesis · v1.20
|
|
164
|
+
|
|
165
|
+
After deliberation closes, the orchestrator builds a **composite synthesis** automatically:
|
|
166
|
+
|
|
167
|
+
- Per-persona scores (Arjun, Meera, Priya, Zara)
|
|
168
|
+
- **Verdict:** SHIP / REVISE / BLOCK
|
|
169
|
+
- **Top 3 actionable changes** (ranked)
|
|
170
|
+
- **Information Hierarchy Gate** (Arjun visual hierarchy + Meera hierarchy check)
|
|
171
|
+
|
|
172
|
+
Stored in session as `synthesis` (JSON) and `synthesis_markdown` (display block). Printed at end of every completed `run`.
|
|
173
|
+
|
|
174
|
+
### Adversarial deliberation (v1.19+)
|
|
175
|
+
|
|
176
|
+
Personas **debate** grounded in real task_map, PRD, and UI context — they do not pass generic handoff documents.
|
|
177
|
+
|
|
178
|
+
| Knob | Default | Meaning |
|
|
179
|
+
|------|---------|---------|
|
|
180
|
+
| `satisfaction_threshold` | 0.4 | Personas hard to please — must see evidence before `accepts_prior: true` |
|
|
181
|
+
| `max_rounds` | 3 | Cap on objection rounds (token-bounded) |
|
|
182
|
+
| `parallel_pairs` | Noor∥Anuj, Meera∥Priya | Adversarial critique in parallel |
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
npx analyzthis_design run --task "Review onboarding" --full --dry-run # see deliberation groups
|
|
186
|
+
npx analyzthis_design run --task "..." --satisfaction 0.3 # even harder to satisfy
|
|
187
|
+
npx analyzthis_design run --task "..." --no-deliberate # legacy sequential mode
|
|
188
|
+
npx analyzthis_design metrics # deliberation_rounds, objections
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
Config: `~/.analyzthis_design/config.json` → `deliberation` block (see `supabase/deliberation-config.example.json`).
|
|
192
|
+
|
|
193
|
+
Skill: `/deliberation-protocol` | Schema: `agents/deliberation-schema.json`
|
|
194
|
+
|
|
195
|
+
**Low satisfaction ≠ unlimited tokens.** Objection rounds use lite schema + 600-token cap; synthesis and Raj use full produce mode.
|
|
196
|
+
|
|
197
|
+
**Raj order (v1.20):** Raj escalates **after all deliberation groups** complete — Zara always runs before Raj in the critique chain.
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
**Shared session state** lives at `~/.analyzthis_design/sessions/{project-id}/session-state.json`.
|
|
202
|
+
|
|
203
|
+
Key fields after a run:
|
|
204
|
+
|
|
205
|
+
| Field | Contents |
|
|
206
|
+
|---|---|
|
|
207
|
+
| `persona_outputs` | Each persona's text + parsed deliberation JSON |
|
|
208
|
+
| `deliberation` | `round_log`, `open_objections`, `consensus_reached`, `raj_escalated` |
|
|
209
|
+
| `synthesis` | Composite scores, verdict, top 3, hierarchy gate |
|
|
210
|
+
| `synthesis_markdown` | Phase 5 block for display / export |
|
|
211
|
+
| `host_run` | Host-mode checkpoint when paused for Devi (`run_dir`, `checkpoint`) |
|
|
212
|
+
| `metrics` | `llm_calls`, `deliberation_rounds`, `objections_raised`, token estimates |
|
|
112
213
|
|
|
113
214
|
```bash
|
|
114
215
|
npx analyzthis_design session init
|
|
@@ -129,18 +230,29 @@ agents/
|
|
|
129
230
|
**Standalone runtime (v2):**
|
|
130
231
|
|
|
131
232
|
```bash
|
|
132
|
-
# Print routing
|
|
233
|
+
# Print routing + deliberation groups (no LLM calls)
|
|
133
234
|
npx analyzthis_design run --task "Fix contrast on landing page" --dry-run
|
|
134
235
|
|
|
135
|
-
#
|
|
236
|
+
# Host mode (default when no API keys) — Devi voices personas
|
|
237
|
+
npx analyzthis_design run --task "Review invoice screen" --full
|
|
238
|
+
npx analyzthis_design devi status
|
|
239
|
+
npx analyzthis_design run --continue --task "Review invoice screen" --full
|
|
240
|
+
|
|
241
|
+
# External API providers (optional)
|
|
136
242
|
export ANTHROPIC_API_KEY=sk-...
|
|
137
243
|
npx analyzthis_design run --task "Review this screen" --figma https://figma.com/... --provider anthropic
|
|
138
244
|
|
|
139
|
-
# Force
|
|
245
|
+
# Force full chain, bypass router, tune deliberation
|
|
140
246
|
npx analyzthis_design run --task "Full critique of onboarding" --full
|
|
141
247
|
npx analyzthis_design run --task "Just check spacing" --experts arjun
|
|
248
|
+
npx analyzthis_design run --task "..." --max-rounds 2 --satisfaction 0.5
|
|
249
|
+
npx analyzthis_design run --task "..." --no-deliberate # legacy sequential handoff
|
|
142
250
|
```
|
|
143
251
|
|
|
252
|
+
**Provider resolution order:** explicit `--provider` → config → first available API key → **`host`** (Devi).
|
|
253
|
+
|
|
254
|
+
Supported providers: `host` | `anthropic` | `openai` | `google` | `zai`
|
|
255
|
+
|
|
144
256
|
Provider defaults live in `~/.analyzthis_design/config.json`:
|
|
145
257
|
|
|
146
258
|
```json
|
|
@@ -209,7 +321,7 @@ flowchart TB
|
|
|
209
321
|
Router -->|effort| Resolve[resolveModel persona effort]
|
|
210
322
|
Resolve -->|gate? hard override| Matrix[effort_matrix in chain.json]
|
|
211
323
|
Resolve -->|persona| Overrides[manifest.effort_overrides]
|
|
212
|
-
Matrix --> Call[callLlm
|
|
324
|
+
Matrix --> Call[callLlm host or API provider]
|
|
213
325
|
Overrides --> Call
|
|
214
326
|
Call --> Metrics[metrics.effort_log + cost_usd]
|
|
215
327
|
Metrics --> CostCmd[npx analyzthis_design cost]
|
|
@@ -226,9 +338,9 @@ Classifier rules (first match wins, safety rules before savings rules):
|
|
|
226
338
|
**Gates never downgrade.** `ds_gate`, `information_hierarchy_gate`, and `verify_gate` are pinned to `hard` via `chain.gate_override` regardless of the classified effort — they're the safety net that makes downgrading persona work safe.
|
|
227
339
|
|
|
228
340
|
Default effort matrix (in `agents/chain.json`):
|
|
229
|
-
- trivial → `
|
|
230
|
-
- standard → `gemini-2.5-flash` or `gpt-4o-mini`, ~1200-token cap
|
|
231
|
-
- hard → `claude-sonnet-5` or `gpt-5`, ~1800-token cap
|
|
341
|
+
- **trivial** → `host` / Devi (~600-token cap for objection rounds) — or API model when keys set
|
|
342
|
+
- **standard** → `gemini-2.5-flash` or `gpt-4o-mini`, ~1200-token cap
|
|
343
|
+
- **hard** → `claude-sonnet-5` or `gpt-5`, ~1800-token cap
|
|
232
344
|
|
|
233
345
|
Per-persona `effort_overrides` in each manifest refine this (e.g. Arjun's `trivial` is the color-system-only scoped mode at 700 tokens; his `hard` is the full Honeycomb + Visual Audit at 1800).
|
|
234
346
|
|
|
@@ -520,8 +632,14 @@ npx analyzthis_design research --query <text>
|
|
|
520
632
|
npx analyzthis_design retrieve --file <csv> --column <col> --keywords a,b [--limit N]
|
|
521
633
|
|
|
522
634
|
# Standalone orchestrator
|
|
523
|
-
npx analyzthis_design run --task "..." [--figma URL] [--provider anthropic|openai|google|zai] [--dry-run] [--output path]
|
|
635
|
+
npx analyzthis_design run --task "..." [--figma URL] [--provider host|anthropic|openai|google|zai] [--dry-run] [--output path]
|
|
524
636
|
npx analyzthis_design run --task "..." [--lite | --full] [--experts a,b]
|
|
637
|
+
npx analyzthis_design run --task "..." [--deliberate | --no-deliberate] [--max-rounds N] [--satisfaction 0.4]
|
|
638
|
+
npx analyzthis_design run --continue --task "..." # resume host-mode run after /devi
|
|
639
|
+
|
|
640
|
+
# Devi — host LLM queue (v1.20)
|
|
641
|
+
npx analyzthis_design devi status [--run path]
|
|
642
|
+
npx analyzthis_design devi respond --run <run-dir> --step 001-arjun --file response.md
|
|
525
643
|
|
|
526
644
|
# Efficiency / cost
|
|
527
645
|
npx analyzthis_design metrics [--project id] [--all]
|
|
@@ -551,13 +669,23 @@ lib/
|
|
|
551
669
|
export.js LoRA training-pair export hook
|
|
552
670
|
feedback.js Persona unhappiness + correction logging (session + global JSONL)
|
|
553
671
|
feedback-submit.js Opt-in anonymized submit to Supabase (community feedback)
|
|
672
|
+
deliberation.js Adversarial satisfaction loops, context pack, Raj escalation
|
|
673
|
+
host-llm.js Devi bridge — pending/response queue, checkpoint on pause
|
|
674
|
+
provider.js Auto-detect API keys or default to host
|
|
675
|
+
synthesis.js Phase 5 composite score + hierarchy gate + top 3
|
|
554
676
|
cost.js $-cost report from metrics × config.pricing
|
|
555
|
-
orchestrator/run.js Standalone
|
|
677
|
+
orchestrator/run.js Standalone runtime (v2) — MoE, host/API providers, synthesis
|
|
678
|
+
scripts/
|
|
679
|
+
run-live-quality.js Host-mode quality test (fixtures through real engine)
|
|
680
|
+
quality-check.js Validate persona outputs vs skill + deliberation protocol
|
|
681
|
+
demo-fictional-deliberation.js Dry-run walkthrough for FlowPay scenario
|
|
556
682
|
scripts/obfuscate.js Build step → dist/
|
|
557
683
|
skills/
|
|
684
|
+
devi/ Host LLM runtime — voices personas from pending prompts
|
|
558
685
|
kavi/ Kavi — Knowledge Archivist (/kavi)
|
|
559
686
|
collect-knowledge/ Alias for Kavi (backward compatible)
|
|
560
687
|
persona-orchestrator/ Agentic critique entry point
|
|
688
|
+
deliberation-protocol/ Adversarial review rules (v1.19+)
|
|
561
689
|
ux-story-gate/ Task-first gate + DS/MoE/verify/assess phases
|
|
562
690
|
design-critic/ 4-persona critique + hierarchy gate
|
|
563
691
|
ux-ideator/ 6-phase ideation
|
|
@@ -571,7 +699,21 @@ skills/
|
|
|
571
699
|
|
|
572
700
|
- Node.js 16+
|
|
573
701
|
- Any Agent Skills–compatible host: [Cursor](https://cursor.com), [Claude Code](https://code.claude.com), Codex CLI, [Grok Build](https://x.ai), or Windsurf Cascade
|
|
574
|
-
-
|
|
702
|
+
- **CLI `run`:** works without API keys via **`/devi`** host mode (default). Optional keys for automated API runs: `ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, `GEMINI_API_KEY`, `ZAI_API_KEY`
|
|
703
|
+
- **Kavi `collect` enrichment:** optional — same keys as above; without keys, draft vault + sync still run
|
|
704
|
+
|
|
705
|
+
---
|
|
706
|
+
|
|
707
|
+
## What's new in v1.20
|
|
708
|
+
|
|
709
|
+
| Feature | Description |
|
|
710
|
+
|---------|-------------|
|
|
711
|
+
| **`/devi` host LLM** | No API keys needed — orchestrator writes prompts, host IDE voices personas |
|
|
712
|
+
| **`run --continue`** | Resume after Devi fills `responses/*.md` |
|
|
713
|
+
| **Phase 5 synthesis** | Auto composite score, verdict, top 3, hierarchy gate in session |
|
|
714
|
+
| **Raj ordering fix** | Zara always runs before Raj; Raj escalates after all groups |
|
|
715
|
+
| **Rebuttal rounds** | Prompts require new evidence — no verbatim repeat on objection re-runs |
|
|
716
|
+
| **`devi status` / `devi respond`** | CLI helpers for the prompt queue |
|
|
575
717
|
|
|
576
718
|
---
|
|
577
719
|
|
package/agents/cards/anuj.md
CHANGED
|
@@ -20,3 +20,9 @@ Top fix: [one line]
|
|
|
20
20
|
Full Concept B text wireframe (hierarchy check, primary action, nav level, visible-on-load at full density, keyboard shortcuts, progressive disclosure, rationale) — see `skills/anuj/SKILL.md` "Output — Concept B". Use deep mode for ideation runs or full/deep critiques.
|
|
21
21
|
|
|
22
22
|
**Citation:** `[filename, row N: "exact quoted value"]` — e.g. `[ux-guidelines.csv, row 22: "..."]`. Only run this persona when task Frequency = daily/weekly.
|
|
23
|
+
|
|
24
|
+
## Deliberation modes (v1.19)
|
|
25
|
+
|
|
26
|
+
**Review mode (rounds 0–N-1):** Critique prior output with grounded objections. Default `accepts_prior: false`. Include deliberation JSON block.
|
|
27
|
+
|
|
28
|
+
**Produce mode (final round):** Full output schema after consensus or Raj. See `skills/deliberation-protocol/SKILL.md`.
|
package/agents/cards/arjun.md
CHANGED
|
@@ -21,3 +21,9 @@ Combined score: [X/5]
|
|
|
21
21
|
Full UX Critique + Visual Design Audit blocks with per-dimension reasons — see `skills/arjun/SKILL.md` "Output format". Use deep mode when the user asks for a full/deep critique, any dimension scores C or below and needs the full rubric quoted, or `default_chain` is running.
|
|
22
22
|
|
|
23
23
|
**Citation:** `[filename, row N: "exact quoted value"]`. Consult `skills/arjun/SKILL.md` Grade Rubric tables when scoring C or below and rubric detail is needed.
|
|
24
|
+
|
|
25
|
+
## Deliberation modes (v1.19)
|
|
26
|
+
|
|
27
|
+
**Review mode (rounds 0–N-1):** Critique prior output with grounded objections. Default `accepts_prior: false`. Include deliberation JSON block.
|
|
28
|
+
|
|
29
|
+
**Produce mode (final round):** Full output schema after consensus or Raj. See `skills/deliberation-protocol/SKILL.md`.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Devi — Host LLM runtime (card)
|
|
2
|
+
|
|
3
|
+
Meta-agent that **voices** other personas when the orchestrator runs in `host` mode (no external API keys).
|
|
4
|
+
|
|
5
|
+
**Allowed:** read pending orchestrator prompts; embody any persona skill/card; write response files; batch-process a run directory; resume orchestrator via `--continue`.
|
|
6
|
+
|
|
7
|
+
**Forbidden:** produce final code edits; skip deliberation JSON; speak as Devi in persona output (always write as the target persona).
|
|
8
|
+
|
|
9
|
+
## Quick flow
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
run --task "..." → pending/001-arjun.json → /devi → responses/001-arjun.md → run --continue
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
See `skills/devi/SKILL.md` for the full protocol.
|
package/agents/cards/meera.md
CHANGED
|
@@ -19,3 +19,9 @@ Score: [1-5]
|
|
|
19
19
|
Full Business Impact block (metric impact, hierarchy check, segment, GTM lever, retention hook, adoption risk, verdict) — see `skills/meera/SKILL.md` "Output format". Use deep mode for full/deep critiques or when `default_chain` is running.
|
|
20
20
|
|
|
21
21
|
**Citation:** `[filename, row N: "exact quoted value"]` — e.g. `[products.csv, row 6: "..."]`. Consult `skills/meera/SKILL.md` for the full reference-data table when a specific product-type match is needed.
|
|
22
|
+
|
|
23
|
+
## Deliberation modes (v1.19)
|
|
24
|
+
|
|
25
|
+
**Review mode (rounds 0–N-1):** Critique prior output with grounded objections. Default `accepts_prior: false`. Include deliberation JSON block.
|
|
26
|
+
|
|
27
|
+
**Produce mode (final round):** Full output schema after consensus or Raj. See `skills/deliberation-protocol/SKILL.md`.
|
package/agents/cards/noor.md
CHANGED
|
@@ -20,3 +20,9 @@ Rationale: [one line, Hick's Law / progressive disclosure]
|
|
|
20
20
|
Full Concept A text wireframe (hierarchy, primary action, nav level, visible-on-load, progressive disclosure, nav path, rationale) — see `skills/noor/SKILL.md` "Output — Concept A". Use deep mode for ideation runs or full/deep critiques.
|
|
21
21
|
|
|
22
22
|
**Citation:** `[filename, row N: "exact quoted value"]` — e.g. `[stacks/shadcn.csv, row 8: "..."]`. Consult `skills/noor/SKILL.md` when naming specific components.
|
|
23
|
+
|
|
24
|
+
## Deliberation modes (v1.19)
|
|
25
|
+
|
|
26
|
+
**Review mode (rounds 0–N-1):** Critique prior output with grounded objections. Default `accepts_prior: false`. Include deliberation JSON block.
|
|
27
|
+
|
|
28
|
+
**Produce mode (final round):** Full output schema after consensus or Raj. See `skills/deliberation-protocol/SKILL.md`.
|
package/agents/cards/priya.md
CHANGED
|
@@ -19,3 +19,9 @@ Score: [1-5]
|
|
|
19
19
|
Full Feasibility Analysis block (score, blockers, ranked risks, effort, simpler alternative) — see `skills/priya/SKILL.md` "Output format". Use deep mode for full/deep critiques or when `default_chain` is running.
|
|
20
20
|
|
|
21
21
|
**Citation:** `[filename, row N: "exact quoted value"]` — e.g. `[stacks/nextjs.csv, row 12: "..."]`. Consult `skills/priya/SKILL.md` for the stack-file table matching the session's tech stack.
|
|
22
|
+
|
|
23
|
+
## Deliberation modes (v1.19)
|
|
24
|
+
|
|
25
|
+
**Review mode (rounds 0–N-1):** Critique prior output with grounded objections. Default `accepts_prior: false`. Include deliberation JSON block.
|
|
26
|
+
|
|
27
|
+
**Produce mode (final round):** Full output schema after consensus or Raj. See `skills/deliberation-protocol/SKILL.md`.
|
package/agents/cards/raj.md
CHANGED
|
@@ -21,3 +21,9 @@ What [losing agent] gives up: [named]
|
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
**Citation:** `[filename, row N: "exact quoted value"]`. Consult `skills/raj/SKILL.md` for the ranked product-principles list (Owner governs, Data honesty, Intentionality over automation, Persona density split, PRD scope boundary) and their worked examples before deciding.
|
|
24
|
+
|
|
25
|
+
## Deliberation modes (v1.19)
|
|
26
|
+
|
|
27
|
+
**Review mode (rounds 0–N-1):** Critique prior output with grounded objections. Default `accepts_prior: false`. Include deliberation JSON block.
|
|
28
|
+
|
|
29
|
+
**Produce mode (final round):** Full output schema after consensus or Raj. See `skills/deliberation-protocol/SKILL.md`.
|
package/agents/cards/zara.md
CHANGED
|
@@ -22,3 +22,9 @@ If high-frequency working surface: output only "no delight needed here — speed
|
|
|
22
22
|
Full Delight Pass block (surface, moment, type, specific addition, why-this-one, cost, design-system pointer) — see `skills/zara/SKILL.md` "Output format". Use deep mode for full/deep critiques or when `default_chain` is running.
|
|
23
23
|
|
|
24
24
|
**Citation:** `[filename, row N: "exact quoted value"]`. Apply the `styles.csv` 5-step filter in `skills/zara/SKILL.md` before citing — never read the full file.
|
|
25
|
+
|
|
26
|
+
## Deliberation modes (v1.19)
|
|
27
|
+
|
|
28
|
+
**Review mode (rounds 0–N-1):** Critique prior output with grounded objections. Default `accepts_prior: false`. Include deliberation JSON block.
|
|
29
|
+
|
|
30
|
+
**Produce mode (final round):** Full output schema after consensus or Raj. See `skills/deliberation-protocol/SKILL.md`.
|
package/agents/chain.json
CHANGED
|
@@ -1,20 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"description": "Default sequential graph for a full multi-persona critique (design-critic). The MoE router in router.json selects a smaller subset of this chain by default; only run this full chain for an explicit full-screen review.",
|
|
3
3
|
"default_expert_budget": 2,
|
|
4
|
+
"deliberation_mode": "adversarial",
|
|
5
|
+
"objection_token_cap": 600,
|
|
4
6
|
"default_chain": [
|
|
5
7
|
{ "step": 1, "persona": "arjun", "handoff_from": null, "handoff_to": "meera", "parallel_safe_with": [] },
|
|
6
8
|
{ "step": 2, "persona": "meera", "handoff_from": "arjun", "handoff_to": "priya", "parallel_safe_with": ["priya"] },
|
|
7
9
|
{ "step": 3, "persona": "priya", "handoff_from": "meera", "handoff_to": "zara", "parallel_safe_with": ["meera"] },
|
|
8
10
|
{ "step": 4, "persona": "zara", "handoff_from": "priya", "handoff_to": null, "parallel_safe_with": [] }
|
|
9
11
|
],
|
|
12
|
+
"deliberation_groups": {
|
|
13
|
+
"critique": [["arjun"], ["meera", "priya"], ["zara"]],
|
|
14
|
+
"ideation": [["meera"], ["noor", "anuj"], ["arjun"], ["zara", "priya"]],
|
|
15
|
+
"lite": [["arjun"], ["meera"]]
|
|
16
|
+
},
|
|
10
17
|
"ideation_chain": [
|
|
11
18
|
{ "step": 1, "persona": "meera", "handoff_to": ["noor", "anuj"], "parallel_safe_with": [] },
|
|
12
19
|
{ "step": 2, "persona": "noor", "handoff_from": "meera", "handoff_to": "arjun", "parallel_safe_with": ["anuj"] },
|
|
13
20
|
{ "step": 2, "persona": "anuj", "handoff_from": "meera", "handoff_to": "arjun", "parallel_safe_with": ["noor"] },
|
|
14
21
|
{ "step": 3, "persona": "arjun", "handoff_from": ["noor", "anuj"], "handoff_to": "zara", "parallel_safe_with": [] },
|
|
15
22
|
{ "step": 4, "persona": "zara", "handoff_from": "arjun", "handoff_to": "priya", "parallel_safe_with": [] },
|
|
16
|
-
{ "step": 5, "persona": "priya", "handoff_from": "zara", "handoff_to":
|
|
17
|
-
{ "step": 6, "persona": "raj", "handoff_from": "priya", "handoff_to": null, "parallel_safe_with": [] }
|
|
23
|
+
{ "step": 5, "persona": "priya", "handoff_from": "zara", "handoff_to": null, "parallel_safe_with": [] }
|
|
18
24
|
],
|
|
19
25
|
"tiers": {
|
|
20
26
|
"router": null,
|
|
@@ -30,7 +36,7 @@
|
|
|
30
36
|
},
|
|
31
37
|
"effort_matrix": {
|
|
32
38
|
"description": "Effort-graded model selection (v1.10). Each persona call is classified trivial|standard|hard and resolved against this matrix. Falls back to the legacy tiers map above when a persona manifest has no effort_overrides for the chosen effort.",
|
|
33
|
-
"trivial": { "provider": "
|
|
39
|
+
"trivial": { "provider": "host", "model": "devi", "max_output_tokens": 600 },
|
|
34
40
|
"standard": { "provider": "google", "model": "gemini-2.5-flash", "max_output_tokens": 1200 },
|
|
35
41
|
"hard": { "provider": "anthropic", "model": "claude-sonnet-5", "max_output_tokens": 1800 }
|
|
36
42
|
},
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Structured output every persona emits during adversarial deliberation rounds (v1.19).",
|
|
3
|
+
"persona_output_block": {
|
|
4
|
+
"grounding": [
|
|
5
|
+
{
|
|
6
|
+
"type": "task_map | prd | ui_region | ds_token | figma",
|
|
7
|
+
"ref": "string — e.g. task_map[0], PRD line, header/CTA, --color-primary",
|
|
8
|
+
"note": "string — why this citation matters"
|
|
9
|
+
}
|
|
10
|
+
],
|
|
11
|
+
"satisfaction_with_prior": "number 0.0–1.0 — how satisfied with prior persona output",
|
|
12
|
+
"accepts_prior": "boolean — true only if satisfaction >= threshold",
|
|
13
|
+
"objections": [
|
|
14
|
+
{
|
|
15
|
+
"target_persona": "string — persona id being challenged",
|
|
16
|
+
"claim": "string — specific claim being contested",
|
|
17
|
+
"evidence_required": "string — what would resolve this",
|
|
18
|
+
"blocking": "boolean — must resolve before synthesis",
|
|
19
|
+
"grounded_in": "string — citation to task/PRD/UI"
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"questions": ["string — contextual questions about UI, PRD, task, JTBD"],
|
|
23
|
+
"revisions": ["string — concrete changes required in prior output"],
|
|
24
|
+
"verdict": "SHIP | REVISE | BLOCK | CONTEST | ACCEPT",
|
|
25
|
+
"synthesis": "string — optional; full produce-mode output on final round only"
|
|
26
|
+
},
|
|
27
|
+
"session_deliberation": {
|
|
28
|
+
"round": "number — current round index",
|
|
29
|
+
"max_rounds": "number",
|
|
30
|
+
"satisfaction_threshold": "number 0.0–1.0",
|
|
31
|
+
"open_objections": ["object — unresolved objections from round_log"],
|
|
32
|
+
"round_log": [
|
|
33
|
+
{
|
|
34
|
+
"round": "number",
|
|
35
|
+
"persona": "string",
|
|
36
|
+
"parsed": "object — parsed deliberation block",
|
|
37
|
+
"raw_length": "number"
|
|
38
|
+
}
|
|
39
|
+
],
|
|
40
|
+
"consensus_reached": "boolean",
|
|
41
|
+
"raj_escalated": "boolean",
|
|
42
|
+
"mode": "adversarial | legacy"
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "devi",
|
|
3
|
+
"role": "host_llm",
|
|
4
|
+
"system_skill": "skills/devi/SKILL.md",
|
|
5
|
+
"system_card": "agents/cards/devi.md",
|
|
6
|
+
"tier": "structured",
|
|
7
|
+
"max_output_tokens": 900,
|
|
8
|
+
"parallel_safe_with": [],
|
|
9
|
+
"inputs": ["pending_prompts", "persona_skills", "session_state"],
|
|
10
|
+
"outputs": ["persona_responses"],
|
|
11
|
+
"allowed_tools": [],
|
|
12
|
+
"allowed_jobs": [
|
|
13
|
+
"read orchestrator pending prompts and embody target personas",
|
|
14
|
+
"write response files for host-mode orchestrator runs",
|
|
15
|
+
"batch-process all pending steps in a run directory"
|
|
16
|
+
],
|
|
17
|
+
"forbidden_jobs": [
|
|
18
|
+
"replace persona critique content with meta-commentary",
|
|
19
|
+
"call external LLM APIs (Devi IS the host LLM)",
|
|
20
|
+
"implement code without explicit build approval"
|
|
21
|
+
],
|
|
22
|
+
"routing_triggers": ["host_llm", "devi", "pending", "continue run"],
|
|
23
|
+
"never_route_for": ["design_critique", "wireframe"],
|
|
24
|
+
"chain_position": 0,
|
|
25
|
+
"handoff_from": [],
|
|
26
|
+
"handoff_to": ["arjun", "meera", "priya", "zara", "noor", "anuj", "raj"],
|
|
27
|
+
"requires_session_state": true,
|
|
28
|
+
"effort_overrides": {
|
|
29
|
+
"trivial": { "provider": "host", "max_output_tokens": 900 }
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -69,6 +69,35 @@
|
|
|
69
69
|
],
|
|
70
70
|
"vault_path": "string — Obsidian vault written by Kavi collect (empty until first collect)",
|
|
71
71
|
"last_collect_at": "ISO 8601 timestamp — last successful collect run",
|
|
72
|
+
"deliberation": {
|
|
73
|
+
"round": "number — current deliberation round",
|
|
74
|
+
"max_rounds": "number",
|
|
75
|
+
"satisfaction_threshold": "number 0.0–1.0",
|
|
76
|
+
"open_objections": ["object — unresolved blocking objections"],
|
|
77
|
+
"round_log": ["object — per-persona per-round parsed output"],
|
|
78
|
+
"consensus_reached": "boolean",
|
|
79
|
+
"raj_escalated": "boolean",
|
|
80
|
+
"mode": "adversarial | legacy"
|
|
81
|
+
},
|
|
82
|
+
"host_run": {
|
|
83
|
+
"run_id": "string — host LLM run directory id",
|
|
84
|
+
"run_dir": "string — absolute path to pending/responses queue",
|
|
85
|
+
"task": "string — task text for --continue",
|
|
86
|
+
"status": "in_progress | pending_devi | complete",
|
|
87
|
+
"last_pending": { "step_id": "string", "persona": "string" },
|
|
88
|
+
"checkpoint": "object | null — deliberation resume state",
|
|
89
|
+
"started_at": "ISO 8601",
|
|
90
|
+
"completed_at": "ISO 8601 | omitted"
|
|
91
|
+
},
|
|
92
|
+
"synthesis": {
|
|
93
|
+
"scores": "object — per-persona scores",
|
|
94
|
+
"total": "number",
|
|
95
|
+
"max_total": "number",
|
|
96
|
+
"verdict": "SHIP | REVISE | BLOCK",
|
|
97
|
+
"top3": ["object — ranked actionable changes"],
|
|
98
|
+
"hierarchy_gate": "object — gate status"
|
|
99
|
+
},
|
|
100
|
+
"synthesis_markdown": "string — Phase 5 composite block for display/export",
|
|
72
101
|
"digest": {
|
|
73
102
|
"task_map_summary": "string — short summary passed to persona calls instead of the full task_map/persona_outputs history",
|
|
74
103
|
"hierarchy_top3": ["string — top 3 ranked hierarchy items, if declared"],
|
|
@@ -86,7 +115,11 @@
|
|
|
86
115
|
"cache_hits": "number — retrieve/cache hits during the last run",
|
|
87
116
|
"mode": "lite | full",
|
|
88
117
|
"effort_log": [{ "persona": "string", "effort": "trivial|standard|hard", "model": "string|null", "scoped_mode": "string|null" }],
|
|
89
|
-
"cost_usd": "number — estimated $ cost of the run from config.pricing (0 when pricing missing)"
|
|
118
|
+
"cost_usd": "number — estimated $ cost of the run from config.pricing (0 when pricing missing)",
|
|
119
|
+
"deliberation_rounds": "number — adversarial rounds executed in last run",
|
|
120
|
+
"objections_raised": "number",
|
|
121
|
+
"objections_resolved": "number",
|
|
122
|
+
"raj_escalations": "number"
|
|
90
123
|
}
|
|
91
124
|
}
|
|
92
125
|
}
|