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.
- package/.github/ISSUE_TEMPLATE/persona-feedback.yml +75 -0
- package/README.md +119 -16
- package/agents/cards/anuj.md +6 -0
- package/agents/cards/arjun.md +6 -0
- package/agents/cards/kavi.md +1 -1
- 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 +8 -2
- package/agents/deliberation-schema.json +44 -0
- package/agents/manifests/kavi.json +1 -1
- package/agents/router.json +2 -2
- package/agents/session-schema.json +30 -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 -0
- package/dist/lib/feedback.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/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/package.json +4 -2
- package/skills/anuj/SKILL.md +2 -0
- package/skills/arjun/SKILL.md +2 -0
- package/skills/collect-knowledge/SKILL.md +7 -138
- package/skills/deliberation-protocol/SKILL.md +124 -0
- package/skills/design-critic/SKILL.md +19 -6
- package/skills/design-director/SKILL.md +15 -3
- package/skills/getting-started/SKILL.md +10 -3
- package/skills/kavi/SKILL.md +118 -0
- package/skills/meera/SKILL.md +2 -0
- package/skills/noor/SKILL.md +2 -0
- package/skills/persona-orchestrator/SKILL.md +48 -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 +10 -0
- package/supabase/feedback-config.example.json +7 -0
- 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` | `/
|
|
41
|
-
| Windsurf Cascade | `~/.codeium/windsurf/skills/<name>/SKILL.md` | `@
|
|
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
|
-
| `/
|
|
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
|
|
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
|
-
| `/
|
|
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.
|
|
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
|
-
|
|
104
|
+
Adversarial deliberation (parallel objection rounds, low satisfaction default)
|
|
105
105
|
↓
|
|
106
|
-
|
|
106
|
+
MoE subset (default) OR full chain (explicit "full")
|
|
107
107
|
↓
|
|
108
|
-
|
|
108
|
+
Raj on stalemate (2+ blocking objections)
|
|
109
|
+
↓
|
|
110
|
+
Hard gates: DS → Hierarchy → Verify
|
|
111
|
+
↓
|
|
112
|
+
SHIP / REVISE / BLOCK
|
|
109
113
|
```
|
|
110
114
|
|
|
111
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
/
|
|
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
|
-
|
|
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
|
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`.
|
package/agents/cards/kavi.md
CHANGED
|
@@ -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/
|
|
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`).
|
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,
|
|
@@ -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
|
+
}
|
package/agents/router.json
CHANGED
|
@@ -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 /
|
|
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
|
}
|