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.
Files changed (50) hide show
  1. package/README.md +160 -18
  2. package/agents/cards/anuj.md +6 -0
  3. package/agents/cards/arjun.md +6 -0
  4. package/agents/cards/devi.md +15 -0
  5. package/agents/cards/meera.md +6 -0
  6. package/agents/cards/noor.md +6 -0
  7. package/agents/cards/priya.md +6 -0
  8. package/agents/cards/raj.md +6 -0
  9. package/agents/cards/zara.md +6 -0
  10. package/agents/chain.json +9 -3
  11. package/agents/deliberation-schema.json +44 -0
  12. package/agents/manifests/devi.json +31 -0
  13. package/agents/session-schema.json +34 -1
  14. package/dist/bin/cli.js +1 -1
  15. package/dist/lib/cache.js +1 -1
  16. package/dist/lib/collect.js +1 -1
  17. package/dist/lib/cost.js +1 -1
  18. package/dist/lib/deliberation.js +1 -0
  19. package/dist/lib/design-spec.js +1 -1
  20. package/dist/lib/export.js +1 -1
  21. package/dist/lib/feedback-submit.js +1 -1
  22. package/dist/lib/feedback.js +1 -1
  23. package/dist/lib/host-llm.js +1 -0
  24. package/dist/lib/install.js +1 -1
  25. package/dist/lib/knowledge.js +1 -1
  26. package/dist/lib/orchestrator/run.js +1 -1
  27. package/dist/lib/platforms.js +1 -1
  28. package/dist/lib/provider.js +1 -0
  29. package/dist/lib/research.js +1 -1
  30. package/dist/lib/retrieve.js +1 -1
  31. package/dist/lib/session.js +1 -1
  32. package/dist/lib/source-discovery.js +1 -1
  33. package/dist/lib/synthesis.js +1 -0
  34. package/dist/lib/token-gate.js +1 -0
  35. package/package.json +2 -2
  36. package/skills/anuj/SKILL.md +2 -0
  37. package/skills/arjun/SKILL.md +2 -0
  38. package/skills/deliberation-protocol/SKILL.md +131 -0
  39. package/skills/design-critic/SKILL.md +19 -6
  40. package/skills/design-director/SKILL.md +13 -1
  41. package/skills/devi/SKILL.md +114 -0
  42. package/skills/getting-started/SKILL.md +18 -0
  43. package/skills/meera/SKILL.md +2 -0
  44. package/skills/noor/SKILL.md +2 -0
  45. package/skills/persona-orchestrator/SKILL.md +22 -13
  46. package/skills/priya/SKILL.md +2 -0
  47. package/skills/raj/SKILL.md +2 -0
  48. package/skills/ux-ideator/SKILL.md +11 -5
  49. package/skills/zara/SKILL.md +2 -0
  50. 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
- ### 8 Personas
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.15)
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
- MoE subset (default, 1–2 experts) OR design-critic / ideation chain (explicit "full")
107
+ Adversarial deliberation (parallel objection rounds, low satisfaction default)
105
108
 
106
- Hard gates: DS tokens Information Hierarchy → Browser verify (skipped if assess_only + no URL)
109
+ MoE subset (default) OR full chain (explicit "full")
107
110
 
108
- Session state + cost metrics persisted → SHIP / REVISE / BLOCK
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
- **Shared session state** lives at `~/.analyzthis_design/sessions/{project-id}/session-state.json` so Ask→Agent turns do not re-derive the task map, DS checklist, or routing decision.
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 only (no API calls)
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
- # Call Anthropic / OpenAI per persona step (MoE subset, lite schema — the default)
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 the full design-critic chain, or bypass the router entirely
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 provider model maxTokens]
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 → `glm-4.5-flash` (free) or Gemini Flash-Lite, ~500-token cap
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 LLM runtime (v2) — MoE, effort-graded tiers, caps, cache-aware
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
- - For `run` / `collect` enrichment: `ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, `GEMINI_API_KEY`, or `ZAI_API_KEY`
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
 
@@ -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`.
@@ -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.
@@ -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`.
@@ -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`.
@@ -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`.
@@ -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`.
@@ -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": "raj", "parallel_safe_with": [] },
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": "zai", "model": "glm-4.5-flash", "max_output_tokens": 500 },
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
  }