analyzthis_design 1.15.0 → 1.19.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 (51) hide show
  1. package/.github/ISSUE_TEMPLATE/persona-feedback.yml +75 -0
  2. package/README.md +119 -16
  3. package/agents/cards/anuj.md +6 -0
  4. package/agents/cards/arjun.md +6 -0
  5. package/agents/cards/kavi.md +1 -1
  6. package/agents/cards/meera.md +6 -0
  7. package/agents/cards/noor.md +6 -0
  8. package/agents/cards/priya.md +6 -0
  9. package/agents/cards/raj.md +6 -0
  10. package/agents/cards/zara.md +6 -0
  11. package/agents/chain.json +8 -2
  12. package/agents/deliberation-schema.json +44 -0
  13. package/agents/manifests/kavi.json +1 -1
  14. package/agents/router.json +2 -2
  15. package/agents/session-schema.json +30 -1
  16. package/dist/bin/cli.js +1 -1
  17. package/dist/lib/cache.js +1 -1
  18. package/dist/lib/collect.js +1 -1
  19. package/dist/lib/cost.js +1 -1
  20. package/dist/lib/deliberation.js +1 -0
  21. package/dist/lib/design-spec.js +1 -1
  22. package/dist/lib/export.js +1 -1
  23. package/dist/lib/feedback-submit.js +1 -0
  24. package/dist/lib/feedback.js +1 -0
  25. package/dist/lib/install.js +1 -1
  26. package/dist/lib/knowledge.js +1 -1
  27. package/dist/lib/orchestrator/run.js +1 -1
  28. package/dist/lib/platforms.js +1 -1
  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/package.json +4 -2
  34. package/skills/anuj/SKILL.md +2 -0
  35. package/skills/arjun/SKILL.md +2 -0
  36. package/skills/collect-knowledge/SKILL.md +7 -138
  37. package/skills/deliberation-protocol/SKILL.md +124 -0
  38. package/skills/design-critic/SKILL.md +19 -6
  39. package/skills/design-director/SKILL.md +15 -3
  40. package/skills/getting-started/SKILL.md +10 -3
  41. package/skills/kavi/SKILL.md +118 -0
  42. package/skills/meera/SKILL.md +2 -0
  43. package/skills/noor/SKILL.md +2 -0
  44. package/skills/persona-orchestrator/SKILL.md +48 -13
  45. package/skills/priya/SKILL.md +2 -0
  46. package/skills/raj/SKILL.md +2 -0
  47. package/skills/ux-ideator/SKILL.md +11 -5
  48. package/skills/zara/SKILL.md +2 -0
  49. package/supabase/deliberation-config.example.json +10 -0
  50. package/supabase/feedback-config.example.json +7 -0
  51. package/supabase/migrations/001_persona_feedback.sql +54 -0
@@ -0,0 +1,75 @@
1
+ name: Persona feedback
2
+ description: Report when a design persona got it wrong or you had to correct it
3
+ title: "[feedback] "
4
+ labels: ["persona-feedback"]
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: |
9
+ Help improve analyzthis_design personas. Prefer CLI submit when possible:
10
+ `npx analyzthis_design feedback record ...` then `npx analyzthis_design feedback submit --yes`
11
+
12
+ - type: dropdown
13
+ id: persona
14
+ attributes:
15
+ label: Persona
16
+ options:
17
+ - arjun
18
+ - meera
19
+ - priya
20
+ - zara
21
+ - raj
22
+ - noor
23
+ - anuj
24
+ - design-director
25
+ - other
26
+ validations:
27
+ required: true
28
+
29
+ - type: dropdown
30
+ id: rating
31
+ attributes:
32
+ label: How happy were you with the output?
33
+ options:
34
+ - "1 — very unhappy"
35
+ - "2 — unhappy"
36
+ - "3 — okay"
37
+ - "4 — good"
38
+ - "5 — great"
39
+ validations:
40
+ required: true
41
+
42
+ - type: checkboxes
43
+ id: tags
44
+ attributes:
45
+ label: What went wrong?
46
+ options:
47
+ - label: wrong_hierarchy
48
+ - label: invented_tokens
49
+ - label: missed_ds
50
+ - label: too_verbose
51
+ - label: bad_ia
52
+ - label: off_brief
53
+ - label: other
54
+
55
+ - type: textarea
56
+ id: comment
57
+ attributes:
58
+ label: What was wrong?
59
+ placeholder: The persona suggested colors that aren't in our design system...
60
+ validations:
61
+ required: true
62
+
63
+ - type: textarea
64
+ id: correction
65
+ attributes:
66
+ label: What did you want instead? (how you corrected it)
67
+ placeholder: Use --color-primary from tokens.css; primary CTA should be top-right...
68
+ validations:
69
+ required: true
70
+
71
+ - type: input
72
+ id: version
73
+ attributes:
74
+ label: Package version (optional)
75
+ placeholder: "1.17.0"
package/README.md CHANGED
@@ -37,8 +37,8 @@ npx analyzthis_design --target all --force
37
37
  | Cursor | `~/.cursor/skills/<name>/SKILL.md` | `/getting-started` |
38
38
  | Claude Code | `~/.claude/skills/<name>/SKILL.md` (+ legacy `~/.claude/commands/`) | `/getting-started` |
39
39
  | Codex CLI | `~/.codex/skills/<name>/SKILL.md` | skill name / AGENTS.md |
40
- | Grok Build | `~/.grok/skills/<name>/SKILL.md` | `/collect-knowledge` |
41
- | Windsurf Cascade | `~/.codeium/windsurf/skills/<name>/SKILL.md` | `@collect-knowledge` |
40
+ | Grok Build | `~/.grok/skills/<name>/SKILL.md` | `/kavi` |
41
+ | Windsurf Cascade | `~/.codeium/windsurf/skills/<name>/SKILL.md` | `@kavi` |
42
42
  | Cross-agent | `~/.agents/skills/<name>/SKILL.md` | discovered by multiple hosts |
43
43
 
44
44
  All skills use the **Agent Skills** `SKILL.md` standard — same files work across Cursor, Claude, Grok, Windsurf, and Codex. The CLI (`collect`, `run`, `sync`) is host-agnostic; only *where skills are discovered* differs.
@@ -62,18 +62,18 @@ All skills use the **Agent Skills** `SKILL.md` standard — same files work acro
62
62
 
63
63
  | Command | What it does |
64
64
  |---|---|
65
- | `/collect-knowledge` | **Kavi — Knowledge Archivist.** Scans the codebase, builds an Obsidian vault, LLM-enriches notes, syncs into the knowledge bank. Run once per project before critiques. |
65
+ | `/kavi` | **Kavi — Knowledge Archivist.** Scans the codebase, builds an Obsidian vault, LLM-enriches notes, syncs into the knowledge bank. Run once per project before critiques. _(Alias: `/collect-knowledge`)_ |
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
69
 
70
70
  ### 8 Personas
71
71
 
72
- 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 `/collect-knowledge` first so they have project context.
72
+ 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
73
 
74
74
  | Command | Persona | What they evaluate |
75
75
  |---|---|---|
76
- | `/collect-knowledge` | Kavi — Knowledge Archivist | Scan repo → Obsidian vault → enrich → sync knowledge bank (producer, not a critic) |
76
+ | `/kavi` | Kavi — Knowledge Archivist | Scan repo → Obsidian vault → enrich → sync knowledge bank (producer, not a critic) |
77
77
  | `/arjun` | UX + Visual Design | UX Honeycomb + Visual Design Audit (hierarchy, color, type, spacing, components, style fit, micro-interactions) |
78
78
  | `/meera` | Business Agent | Retention, ARR, GTM lever, adoption risk; hierarchy vs north-star check |
79
79
  | `/priya` | Feasibility Agent | Engineering effort (T-shirt sizing, 2-axis model), state machine traps |
@@ -92,7 +92,7 @@ Invoke critique personas for targeted, already-grounded questions. For **wirefra
92
92
 
93
93
  ---
94
94
 
95
- ## Agentic system (v1.15)
95
+ ## Agentic system (v1.19)
96
96
 
97
97
  ```
98
98
  User ask / Figma URL
@@ -101,14 +101,43 @@ User ask / Figma URL
101
101
 
102
102
  ux-story-gate Phases 0–1.5 (PRD + DS/Figma + MoE router)
103
103
 
104
- MoE subset (default, 1–2 experts) OR design-critic / ideation chain (explicit "full")
104
+ Adversarial deliberation (parallel objection rounds, low satisfaction default)
105
105
 
106
- Hard gates: DS tokens Information Hierarchy → Browser verify (skipped if assess_only + no URL)
106
+ MoE subset (default) OR full chain (explicit "full")
107
107
 
108
- Session state + cost metrics persisted → SHIP / REVISE / BLOCK
108
+ Raj on stalemate (2+ blocking objections)
109
+
110
+ Hard gates: DS → Hierarchy → Verify
111
+
112
+ SHIP / REVISE / BLOCK
109
113
  ```
110
114
 
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.
115
+ ### Adversarial deliberation (v1.19)
116
+
117
+ Personas **debate** grounded in real task_map, PRD, and UI context — they do not pass generic handoff documents.
118
+
119
+ | Knob | Default | Meaning |
120
+ |------|---------|---------|
121
+ | `satisfaction_threshold` | 0.4 | Personas hard to please — must see evidence before `accepts_prior: true` |
122
+ | `max_rounds` | 3 | Cap on objection rounds (token-bounded) |
123
+ | `parallel_pairs` | Noor∥Anuj, Meera∥Priya | Adversarial critique in parallel |
124
+
125
+ ```bash
126
+ npx analyzthis_design run --task "Review onboarding" --full --dry-run # see deliberation groups
127
+ npx analyzthis_design run --task "..." --satisfaction 0.3 # even harder to satisfy
128
+ npx analyzthis_design run --task "..." --no-deliberate # legacy sequential mode
129
+ npx analyzthis_design metrics # deliberation_rounds, objections
130
+ ```
131
+
132
+ Config: `~/.analyzthis_design/config.json` → `deliberation` block (see `supabase/deliberation-config.example.json`).
133
+
134
+ Skill: `/deliberation-protocol` | Schema: `agents/deliberation-schema.json`
135
+
136
+ **Low satisfaction ≠ unlimited tokens.** Objection rounds use lite schema + 600-token cap; synthesis and Raj use full models.
137
+
138
+ ---
139
+
140
+ **Shared session state** lives at `~/.analyzthis_design/sessions/{project-id}/session-state.json` (includes `deliberation.round_log` after adversarial runs).
112
141
 
113
142
  ```bash
114
143
  npx analyzthis_design session init
@@ -139,6 +168,7 @@ npx analyzthis_design run --task "Review this screen" --figma https://figma.com/
139
168
  # Force the full design-critic chain, or bypass the router entirely
140
169
  npx analyzthis_design run --task "Full critique of onboarding" --full
141
170
  npx analyzthis_design run --task "Just check spacing" --experts arjun
171
+ npx analyzthis_design run --task "..." --max-rounds 2 --satisfaction 0.5 --no-deliberate
142
172
  ```
143
173
 
144
174
  Provider defaults live in `~/.analyzthis_design/config.json`:
@@ -282,11 +312,70 @@ analyzthis_design is a design **critique** layer, not a design generator. The pe
282
312
  **LoRA readiness (export hook only — no training in this release):**
283
313
 
284
314
  ```bash
285
- npx analyzthis_design session accept --persona arjun # mark the last output as a good example
315
+ # Good examples (positive pairs)
316
+ npx analyzthis_design session accept --persona arjun
286
317
  npx analyzthis_design export-training --persona arjun --all
318
+
319
+ # Bad output + how you corrected it (negative / DPO pairs) — v1.16
320
+ npx analyzthis_design session accept --persona arjun --reject \
321
+ --comment "Invented tokens not in our DS" \
322
+ --correction "Use --color-primary and spacing-4 from tokens.css" \
323
+ --rating 2 --tags invented_tokens,missed_ds
324
+
325
+ npx analyzthis_design feedback record --persona arjun --rating 2 \
326
+ --comment "Hierarchy wrong — CTA buried" \
327
+ --correction "Primary action should be top-right, above the fold"
328
+
329
+ npx analyzthis_design feedback list
330
+ npx analyzthis_design feedback export --persona arjun --all
287
331
  ```
288
332
 
289
- Writes `{ system_card, digest, user, assistant }` JSONL pairs to `~/.analyzthis_design/training/<persona>.jsonl` from every session where that persona's output was explicitly accepted. Once a persona accumulates ~100–300 accepted pairs, that data is ready for a future fine-tuning pass on an open model — not part of this package yet.
333
+ Writes `{ system_card, digest, user, assistant }` JSONL pairs to `~/.analyzthis_design/training/<persona>.jsonl` from every session where that persona's output was explicitly accepted.
334
+
335
+ **Correction export** writes `{ assistant_rejected, assistant_preferred, user_comment, tags }` to `~/.analyzthis_design/feedback/<persona>-corrections.jsonl` — useful when users were unhappy or had to rewrite persona output. Every entry is also appended to a global `corrections.jsonl` across projects.
336
+
337
+ Once a persona accumulates ~100–300 accepted pairs (and optionally correction pairs), that data is ready for a future fine-tuning pass on an open model — not part of this package yet.
338
+
339
+ ---
340
+
341
+ ## Persona feedback — corrections & unhappiness (v1.16)
342
+
343
+ When a persona gets it wrong, you can record **what was wrong** and **how you fixed it**. This feeds future fine-tuning (negative / DPO pairs) alongside the existing positive `export-training` path.
344
+
345
+ | Command | Purpose |
346
+ |---------|---------|
347
+ | `feedback record` | Log rating, comment, correction, tags for a persona's last output |
348
+ | `feedback list` | See all feedback for this project (or `--all`) |
349
+ | `feedback export` | Write `{ assistant_rejected, assistant_preferred, … }` JSONL |
350
+ | `session accept --reject --comment …` | Reject + record in one step |
351
+
352
+ Suggested tags: `wrong_hierarchy`, `invented_tokens`, `missed_ds`, `too_verbose`, `bad_ia`, `off_brief`.
353
+
354
+ Stored in `session-state.json` → `feedback_log` and appended globally to `~/.analyzthis_design/feedback/corrections.jsonl`.
355
+
356
+ ### Community collection (v1.17) — opt-in submit
357
+
358
+ For **open-source contributors**, share anonymized corrections with maintainers:
359
+
360
+ ```bash
361
+ npx analyzthis_design feedback record --persona arjun --rating 2 --comment "..." --correction "..."
362
+ npx analyzthis_design feedback submit --dry-run # preview redacted payload
363
+ npx analyzthis_design feedback submit --all --yes # send unsent entries (asks consent once)
364
+ npx analyzthis_design feedback status
365
+ ```
366
+
367
+ **What gets sent:** persona, rating, tags, comment, correction, redacted output snippets, anonymous install id, package version.
368
+
369
+ **What does NOT get sent:** project paths, repo names, emails, API keys, full source trees.
370
+
371
+ **Maintainer setup (Supabase):**
372
+
373
+ 1. Create a Supabase project
374
+ 2. Run `supabase/migrations/001_persona_feedback.sql` in the SQL editor
375
+ 3. Copy `supabase/feedback-config.example.json` into `~/.analyzthis_design/config.json` under `"feedback"` (or set env vars `ANALYZTHIS_FEEDBACK_URL` + `ANALYZTHIS_FEEDBACK_ANON_KEY`)
376
+ 4. View submissions in Supabase Table Editor → `persona_feedback`
377
+
378
+ Users can also file GitHub issues via **Persona feedback** template if they prefer not to use CLI submit.
290
379
 
291
380
  ---
292
381
 
@@ -345,7 +434,7 @@ Schema: `agents/design-spec-schema.json`. Producer orchestration: `/design-direc
345
434
  Kavi is a **producer** persona (not a critic). One command scans the current repo, **discovers Obsidian vaults and knowledge graphs**, **fetches external URLs**, writes an Obsidian vault with dynamic `Sources/*.md` manifests, optionally enriches notes, then auto-connects and syncs everything into the knowledge bank.
346
435
 
347
436
  ```
348
- /collect-knowledge (or npx analyzthis_design collect)
437
+ /kavi (or npx analyzthis_design collect)
349
438
 
350
439
  Scan codebase → draft Obsidian notes
351
440
 
@@ -443,7 +532,15 @@ npx analyzthis_design status
443
532
 
444
533
  # Session (agentic)
445
534
  npx analyzthis_design session init|show|reset [--project id] [--all]
446
- npx analyzthis_design session accept --persona <id> [--reject]
535
+ npx analyzthis_design session accept --persona <id> [--reject] [--comment "..."] [--correction "..."] [--rating 1-5] [--tags a,b]
536
+
537
+ # Persona feedback (v1.16)
538
+ npx analyzthis_design feedback record --persona <id> [--rating 1-5] [--comment "..."] [--correction "..."] [--tags a,b]
539
+ npx analyzthis_design feedback list [--all]
540
+ npx analyzthis_design feedback export [--persona <id>] [--all] [--output path] [--include-positive]
541
+ npx analyzthis_design feedback submit [--persona <id>] [--all] [--yes] [--dry-run]
542
+ npx analyzthis_design feedback status
543
+ npx analyzthis_design feedback revoke
447
544
 
448
545
  # Research
449
546
  npx analyzthis_design research --url <url>
@@ -454,12 +551,13 @@ npx analyzthis_design retrieve --file <csv> --column <col> --keywords a,b [--lim
454
551
 
455
552
  # Standalone orchestrator
456
553
  npx analyzthis_design run --task "..." [--figma URL] [--provider anthropic|openai|google|zai] [--dry-run] [--output path]
457
- npx analyzthis_design run --task "..." [--lite | --full] [--experts a,b]
554
+ npx analyzthis_design run --task "..." [--lite | --full] [--experts a,b] [--deliberate | --no-deliberate] [--max-rounds N] [--satisfaction 0.4]
458
555
 
459
556
  # Efficiency / cost
460
557
  npx analyzthis_design metrics [--project id] [--all]
461
558
  npx analyzthis_design cost [--project id] [--all]
462
559
  npx analyzthis_design export-training --persona <id> [--project id] [--all] [--output path]
560
+ npx analyzthis_design feedback export [--persona <id>] [--project id] [--all] [--output path]
463
561
  ```
464
562
 
465
563
  ---
@@ -481,12 +579,17 @@ lib/
481
579
  retrieve.js Filtered, citation-ready CSV row retrieval
482
580
  cache.js On-disk cache for retrieve/kb slices
483
581
  export.js LoRA training-pair export hook
582
+ feedback.js Persona unhappiness + correction logging (session + global JSONL)
583
+ feedback-submit.js Opt-in anonymized submit to Supabase (community feedback)
584
+ deliberation.js Adversarial satisfaction loops, context pack, Raj escalation
484
585
  cost.js $-cost report from metrics × config.pricing
485
586
  orchestrator/run.js Standalone LLM runtime (v2) — MoE, effort-graded tiers, caps, cache-aware
486
587
  scripts/obfuscate.js Build step → dist/
487
588
  skills/
488
- collect-knowledge/ Kavi — Knowledge Archivist
589
+ kavi/ Kavi — Knowledge Archivist (/kavi)
590
+ collect-knowledge/ Alias for Kavi (backward compatible)
489
591
  persona-orchestrator/ Agentic critique entry point
592
+ deliberation-protocol/ Adversarial review rules (v1.19)
490
593
  ux-story-gate/ Task-first gate + DS/MoE/verify/assess phases
491
594
  design-critic/ 4-persona critique + hierarchy gate
492
595
  ux-ideator/ 6-phase ideation
@@ -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`.
@@ -23,4 +23,4 @@ Knowledge bank: [synced count] → [targets]
23
23
  Next: run /persona-orchestrator or any critique persona — they read this bank first.
24
24
  ```
25
25
 
26
- Consult `skills/collect-knowledge/SKILL.md` for the host workflow. Prefer running `npx analyzthis_design collect` over re-scanning files in chat.
26
+ Consult `skills/kavi/SKILL.md` for the host workflow. Prefer running `npx analyzthis_design collect` over re-scanning files in chat. Invoke as **`/kavi`** (alias: `/collect-knowledge`).
@@ -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,
@@ -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
+ }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "kavi",
3
3
  "role": "knowledge_archivist",
4
- "system_skill": "skills/collect-knowledge/SKILL.md",
4
+ "system_skill": "skills/kavi/SKILL.md",
5
5
  "system_card": "agents/cards/kavi.md",
6
6
  "tier": "structured",
7
7
  "max_output_tokens": 4000,
@@ -76,10 +76,10 @@
76
76
  },
77
77
  {
78
78
  "problem_type": "collect_knowledge",
79
- "signals": ["collect knowledge", "scan codebase", "build vault", "knowledge archivist", "collect-knowledge"],
79
+ "signals": ["kavi", "/kavi", "collect knowledge", "scan codebase", "build vault", "knowledge archivist", "collect-knowledge"],
80
80
  "route_to": ["kavi"],
81
81
  "never_route_to": ["design-critic_chain", "zara", "arjun", "meera", "priya"],
82
- "notes": "Producer only — run /collect-knowledge or `npx analyzthis_design collect`. Never part of a critique chain."
82
+ "notes": "Producer only — run /kavi or `npx analyzthis_design collect`. Never part of a critique chain."
83
83
  }
84
84
  ]
85
85
  }
@@ -52,8 +52,33 @@
52
52
  "spec_verdict": "object — arjun_visual, ds_gate, hierarchy_gate, notes",
53
53
  "updated_at": "ISO 8601"
54
54
  },
55
+ "feedback_log": [
56
+ {
57
+ "id": "string — unique feedback entry id",
58
+ "at": "ISO 8601",
59
+ "persona": "string — persona id",
60
+ "satisfied": "boolean — true if user was happy",
61
+ "rating": "number | null — 1 (very unhappy) to 5 (very happy)",
62
+ "comment": "string — what was wrong or what they liked",
63
+ "correction": "string — how the user corrected or what they wanted instead",
64
+ "tags": ["string — e.g. wrong_hierarchy, invented_tokens, off_brief"],
65
+ "original_output": "string — snapshot of persona output at feedback time",
66
+ "submitted_at": "ISO 8601 | omitted — set when feedback submit succeeds",
67
+ "context": "object — task_map_summary, problem_type, mode"
68
+ }
69
+ ],
55
70
  "vault_path": "string — Obsidian vault written by Kavi collect (empty until first collect)",
56
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
+ },
57
82
  "digest": {
58
83
  "task_map_summary": "string — short summary passed to persona calls instead of the full task_map/persona_outputs history",
59
84
  "hierarchy_top3": ["string — top 3 ranked hierarchy items, if declared"],
@@ -71,7 +96,11 @@
71
96
  "cache_hits": "number — retrieve/cache hits during the last run",
72
97
  "mode": "lite | full",
73
98
  "effort_log": [{ "persona": "string", "effort": "trivial|standard|hard", "model": "string|null", "scoped_mode": "string|null" }],
74
- "cost_usd": "number — estimated $ cost of the run from config.pricing (0 when pricing missing)"
99
+ "cost_usd": "number — estimated $ cost of the run from config.pricing (0 when pricing missing)",
100
+ "deliberation_rounds": "number — adversarial rounds executed in last run",
101
+ "objections_raised": "number",
102
+ "objections_resolved": "number",
103
+ "raj_escalations": "number"
75
104
  }
76
105
  }
77
106
  }