analyzthis_design 1.7.0 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +250 -111
- package/agents/cards/anuj.md +22 -0
- package/agents/cards/arjun.md +23 -0
- package/agents/cards/meera.md +21 -0
- package/agents/cards/noor.md +22 -0
- package/agents/cards/priya.md +21 -0
- package/agents/cards/raj.md +23 -0
- package/agents/cards/zara.md +24 -0
- package/agents/chain.json +55 -0
- package/agents/manifests/anuj.json +31 -0
- package/agents/manifests/arjun.json +46 -0
- package/agents/manifests/design-critic.json +21 -0
- package/agents/manifests/meera.json +31 -0
- package/agents/manifests/noor.json +32 -0
- package/agents/manifests/persona-orchestrator.json +17 -0
- package/agents/manifests/priya.json +31 -0
- package/agents/manifests/raj.json +30 -0
- package/agents/manifests/ux-story-gate.json +23 -0
- package/agents/manifests/zara.json +32 -0
- package/agents/router.json +64 -0
- package/agents/session-schema.json +61 -0
- package/dist/bin/cli.js +1 -1
- package/dist/lib/cache.js +1 -0
- package/dist/lib/cost.js +1 -0
- package/dist/lib/export.js +1 -0
- package/dist/lib/install.js +1 -1
- package/dist/lib/knowledge.js +1 -1
- package/dist/lib/orchestrator/run.js +2 -0
- package/dist/lib/research.js +2 -0
- package/dist/lib/retrieve.js +1 -0
- package/dist/lib/session.js +2 -0
- package/package.json +9 -3
- package/skills/anuj/SKILL.md +10 -0
- package/skills/arjun/SKILL.md +10 -0
- package/skills/design-critic/SKILL.md +6 -0
- package/skills/meera/SKILL.md +10 -0
- package/skills/noor/SKILL.md +10 -0
- package/skills/persona-orchestrator/SKILL.md +141 -0
- package/skills/priya/SKILL.md +10 -0
- package/skills/raj/SKILL.md +10 -0
- package/skills/ux-story-gate/SKILL.md +115 -3
- package/skills/zara/SKILL.md +10 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
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
|
+
"default_expert_budget": 2,
|
|
4
|
+
"default_chain": [
|
|
5
|
+
{ "step": 1, "persona": "arjun", "handoff_from": null, "handoff_to": "meera", "parallel_safe_with": [] },
|
|
6
|
+
{ "step": 2, "persona": "meera", "handoff_from": "arjun", "handoff_to": "priya", "parallel_safe_with": ["priya"] },
|
|
7
|
+
{ "step": 3, "persona": "priya", "handoff_from": "meera", "handoff_to": "zara", "parallel_safe_with": ["meera"] },
|
|
8
|
+
{ "step": 4, "persona": "zara", "handoff_from": "priya", "handoff_to": null, "parallel_safe_with": [] }
|
|
9
|
+
],
|
|
10
|
+
"ideation_chain": [
|
|
11
|
+
{ "step": 1, "persona": "meera", "handoff_to": ["noor", "anuj"], "parallel_safe_with": [] },
|
|
12
|
+
{ "step": 2, "persona": "noor", "handoff_from": "meera", "handoff_to": "arjun", "parallel_safe_with": ["anuj"] },
|
|
13
|
+
{ "step": 2, "persona": "anuj", "handoff_from": "meera", "handoff_to": "arjun", "parallel_safe_with": ["noor"] },
|
|
14
|
+
{ "step": 3, "persona": "arjun", "handoff_from": ["noor", "anuj"], "handoff_to": "zara", "parallel_safe_with": [] },
|
|
15
|
+
{ "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": [] }
|
|
18
|
+
],
|
|
19
|
+
"tiers": {
|
|
20
|
+
"router": null,
|
|
21
|
+
"extract": { "provider": "openai", "model": "gpt-4o-mini" },
|
|
22
|
+
"structured": { "provider": "openai", "model": "gpt-4o-mini" },
|
|
23
|
+
"critique": { "provider": "anthropic", "model": "claude-sonnet-4-20250514" },
|
|
24
|
+
"arbitrate": { "provider": "anthropic", "model": "claude-sonnet-4-20250514" }
|
|
25
|
+
},
|
|
26
|
+
"max_output_tokens": {
|
|
27
|
+
"structured": 900,
|
|
28
|
+
"critique": 1800,
|
|
29
|
+
"arbitrate": 1200
|
|
30
|
+
},
|
|
31
|
+
"effort_matrix": {
|
|
32
|
+
"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 },
|
|
34
|
+
"standard": { "provider": "google", "model": "gemini-2.5-flash", "max_output_tokens": 1200 },
|
|
35
|
+
"hard": { "provider": "anthropic", "model": "claude-sonnet-5", "max_output_tokens": 1800 }
|
|
36
|
+
},
|
|
37
|
+
"gate_override": {
|
|
38
|
+
"description": "Gates are safety nets — never run on a downgraded model. Any step whose gateName is listed here is pinned to use_effort regardless of the classified effort.",
|
|
39
|
+
"applies_to": ["ds_gate", "information_hierarchy_gate", "verify_gate"],
|
|
40
|
+
"use_effort": "hard"
|
|
41
|
+
},
|
|
42
|
+
"gates": [
|
|
43
|
+
{ "name": "ds_gate", "runs": "before persona chain (ux-story-gate Phase 0.5); on failure, chain stops after arjun_color_system_only" },
|
|
44
|
+
{ "name": "information_hierarchy_gate", "runs": "after persona chain, before re-evaluation/BLOCK escalation" },
|
|
45
|
+
{ "name": "verify_gate", "runs": "after persona chain, before synthesis (ux-story-gate Phase 4.5); skipped (not_run) when assess_only with no URL" }
|
|
46
|
+
],
|
|
47
|
+
"escalation": {
|
|
48
|
+
"condition": "stalemate or BLOCK verdict from any persona",
|
|
49
|
+
"route_to": "raj"
|
|
50
|
+
},
|
|
51
|
+
"re_evaluation": {
|
|
52
|
+
"mode": "delta_only",
|
|
53
|
+
"description": "On any follow-up after REVISE, re-run only the persona(s) assigned to the prior Top 3 actionable changes — never the full chain. See design-critic Re-evaluation Protocol."
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "anuj",
|
|
3
|
+
"role": "power_user",
|
|
4
|
+
"system_skill": "skills/anuj/SKILL.md",
|
|
5
|
+
"system_card": "agents/cards/anuj.md",
|
|
6
|
+
"tier": "critique",
|
|
7
|
+
"max_output_tokens": 1500,
|
|
8
|
+
"parallel_safe_with": ["noor"],
|
|
9
|
+
"inputs": ["task_map", "session_context", "information_hierarchy"],
|
|
10
|
+
"outputs": ["concept_b_wireframe"],
|
|
11
|
+
"allowed_tools": ["design-reference", "stacks"],
|
|
12
|
+
"allowed_jobs": [
|
|
13
|
+
"audit density, bulk actions, keyboard shortcuts for daily-use surfaces",
|
|
14
|
+
"produce Concept B wireframe",
|
|
15
|
+
"keep rank #1 of the declared information hierarchy prominent even at full density"
|
|
16
|
+
],
|
|
17
|
+
"forbidden_jobs": [
|
|
18
|
+
"propose density audits for surfaces with task Frequency != daily/weekly",
|
|
19
|
+
"implement code without explicit build approval"
|
|
20
|
+
],
|
|
21
|
+
"routing_triggers": ["daily_use", "data_density", "bulk_actions", "keyboard_shortcuts"],
|
|
22
|
+
"never_route_for": ["one_time_use_surfaces", "learning_products_without_daily_frequency"],
|
|
23
|
+
"chain_position": 1,
|
|
24
|
+
"handoff_from": [],
|
|
25
|
+
"handoff_to": ["arjun"],
|
|
26
|
+
"requires_session_state": true,
|
|
27
|
+
"effort_overrides": {
|
|
28
|
+
"trivial": { "when": "shortcuts-only audit", "max_output_tokens": 700 },
|
|
29
|
+
"hard": { "when": "bulk-action state design", "max_output_tokens": 1500 }
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "arjun",
|
|
3
|
+
"role": "ux_visual",
|
|
4
|
+
"system_skill": "skills/arjun/SKILL.md",
|
|
5
|
+
"system_card": "agents/cards/arjun.md",
|
|
6
|
+
"tier": "critique",
|
|
7
|
+
"max_output_tokens": 1800,
|
|
8
|
+
"parallel_safe_with": [],
|
|
9
|
+
"inputs": ["task_map", "session_context", "ds_checklist", "figma_context", "information_hierarchy"],
|
|
10
|
+
"outputs": ["ux_critique", "visual_audit", "combined_score"],
|
|
11
|
+
"allowed_tools": ["design-reference", "browser_verify", "figma_mcp"],
|
|
12
|
+
"allowed_jobs": [
|
|
13
|
+
"UX Honeycomb critique",
|
|
14
|
+
"Visual Design Audit (hierarchy, color, typography, spacing, components, style fit, micro-interactions)",
|
|
15
|
+
"diagnose visual issues against declared information hierarchy and DS tokens"
|
|
16
|
+
],
|
|
17
|
+
"forbidden_jobs": [
|
|
18
|
+
"brand-system recovery as a primary job (diagnostic only — cite tokens, do not ship !important overrides)",
|
|
19
|
+
"delight pass (hand off to Zara)",
|
|
20
|
+
"implement code without explicit build approval"
|
|
21
|
+
],
|
|
22
|
+
"routing_triggers": ["ux", "accessibility", "responsive", "interaction_bug", "visual_quality"],
|
|
23
|
+
"never_route_for": ["business_priority", "build_effort", "delight_moment"],
|
|
24
|
+
"chain_position": 2,
|
|
25
|
+
"handoff_from": ["noor"],
|
|
26
|
+
"handoff_to": ["meera"],
|
|
27
|
+
"requires_session_state": true,
|
|
28
|
+
"hard_gates": ["ds_gate", "information_hierarchy_gate"],
|
|
29
|
+
"scoped_modes": {
|
|
30
|
+
"arjun_color_system_only": {
|
|
31
|
+
"description": "Restricted scope used on DS Gate early-exit: only Color System + Typography contrast dimensions from the Visual Design Audit run, not the full Honeycomb + Visual Audit.",
|
|
32
|
+
"dimensions": ["color_system", "typography_contrast"],
|
|
33
|
+
"max_output_tokens": 700
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"effort_overrides": {
|
|
37
|
+
"trivial": {
|
|
38
|
+
"when": "scoped_mode == arjun_color_system_only (single-dimension color/contrast diagnostic)",
|
|
39
|
+
"max_output_tokens": 700
|
|
40
|
+
},
|
|
41
|
+
"hard": {
|
|
42
|
+
"when": "full_chain == true || problem_type == full_screen_review (full Honeycomb + Visual Audit)",
|
|
43
|
+
"max_output_tokens": 1800
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "design-critic",
|
|
3
|
+
"role": "orchestrator",
|
|
4
|
+
"system_skill": "skills/design-critic/SKILL.md",
|
|
5
|
+
"inputs": ["task_map", "session_context", "figma_context", "ds_checklist"],
|
|
6
|
+
"outputs": ["composite_score", "task_finding_table", "verdict"],
|
|
7
|
+
"allowed_tools": ["design-reference", "browser_verify", "figma_mcp"],
|
|
8
|
+
"allowed_jobs": [
|
|
9
|
+
"run the full persona chain (Arjun -> Meera -> Priya -> Zara) for a full screen review",
|
|
10
|
+
"enforce the Information Hierarchy Gate",
|
|
11
|
+
"escalate to Raj on stalemate/BLOCK"
|
|
12
|
+
],
|
|
13
|
+
"forbidden_jobs": [
|
|
14
|
+
"run without a completed ux-story-gate pass",
|
|
15
|
+
"implement code without explicit build approval"
|
|
16
|
+
],
|
|
17
|
+
"routing_triggers": ["full_screen_review", "multi_persona_critique"],
|
|
18
|
+
"chain": ["arjun", "meera", "priya", "zara"],
|
|
19
|
+
"escalates_to": "raj",
|
|
20
|
+
"requires_session_state": true
|
|
21
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "meera",
|
|
3
|
+
"role": "business",
|
|
4
|
+
"system_skill": "skills/meera/SKILL.md",
|
|
5
|
+
"system_card": "agents/cards/meera.md",
|
|
6
|
+
"tier": "critique",
|
|
7
|
+
"max_output_tokens": 1200,
|
|
8
|
+
"parallel_safe_with": ["priya"],
|
|
9
|
+
"inputs": ["task_map", "session_context", "arjun_output", "information_hierarchy"],
|
|
10
|
+
"outputs": ["business_impact", "hierarchy_metric_check"],
|
|
11
|
+
"allowed_tools": ["design-reference"],
|
|
12
|
+
"allowed_jobs": [
|
|
13
|
+
"north-star metric impact assessment",
|
|
14
|
+
"segment / GTM / retention analysis",
|
|
15
|
+
"check that rank #1 on screen matches the actual business-critical driver"
|
|
16
|
+
],
|
|
17
|
+
"forbidden_jobs": [
|
|
18
|
+
"visual or UX critique (route to Arjun)",
|
|
19
|
+
"implement code without explicit build approval"
|
|
20
|
+
],
|
|
21
|
+
"routing_triggers": ["business_priority", "pricing", "access_control", "monetization", "retention"],
|
|
22
|
+
"never_route_for": ["visual_quality", "ia_structure"],
|
|
23
|
+
"chain_position": 3,
|
|
24
|
+
"handoff_from": ["arjun"],
|
|
25
|
+
"handoff_to": ["priya"],
|
|
26
|
+
"requires_session_state": true,
|
|
27
|
+
"effort_overrides": {
|
|
28
|
+
"trivial": { "when": "single GTM lever / retention check", "max_output_tokens": 500 },
|
|
29
|
+
"hard": { "when": "north-star tradeoff or cross-metric conflict", "max_output_tokens": 1200 }
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "noor",
|
|
3
|
+
"role": "information_architect",
|
|
4
|
+
"system_skill": "skills/noor/SKILL.md",
|
|
5
|
+
"system_card": "agents/cards/noor.md",
|
|
6
|
+
"tier": "critique",
|
|
7
|
+
"max_output_tokens": 1500,
|
|
8
|
+
"parallel_safe_with": ["anuj"],
|
|
9
|
+
"inputs": ["task_map", "session_context", "figma_context"],
|
|
10
|
+
"outputs": ["concept_a_wireframe", "information_hierarchy"],
|
|
11
|
+
"allowed_tools": ["design-reference"],
|
|
12
|
+
"allowed_jobs": [
|
|
13
|
+
"declare ranked information hierarchy",
|
|
14
|
+
"propose minimalist IA / progressive disclosure structure",
|
|
15
|
+
"produce Concept A wireframe"
|
|
16
|
+
],
|
|
17
|
+
"forbidden_jobs": [
|
|
18
|
+
"brand token recovery",
|
|
19
|
+
"contrast / accessibility fixes (route to Arjun)",
|
|
20
|
+
"implement code without explicit build approval"
|
|
21
|
+
],
|
|
22
|
+
"routing_triggers": ["structure", "ia", "navigation", "nested_ui", "wizard", "form"],
|
|
23
|
+
"never_route_for": ["brand", "contrast", "design_system_compliance"],
|
|
24
|
+
"chain_position": 1,
|
|
25
|
+
"handoff_from": [],
|
|
26
|
+
"handoff_to": ["arjun", "anuj"],
|
|
27
|
+
"requires_session_state": true,
|
|
28
|
+
"effort_overrides": {
|
|
29
|
+
"trivial": { "when": "hierarchy-only declaration", "max_output_tokens": 700 },
|
|
30
|
+
"hard": { "when": "multi-screen IA", "max_output_tokens": 1500 }
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "persona-orchestrator",
|
|
3
|
+
"role": "entry_point",
|
|
4
|
+
"system_skill": "skills/persona-orchestrator/SKILL.md",
|
|
5
|
+
"inputs": ["user_ask", "figma_url"],
|
|
6
|
+
"outputs": ["session_state", "task_finding_table", "verdict"],
|
|
7
|
+
"allowed_tools": ["design-reference", "figma_mcp", "browser_verify", "knowledge-bank"],
|
|
8
|
+
"allowed_jobs": [
|
|
9
|
+
"single entry point for agentic runs: load router + session, run ux-story-gate, execute chain or MoE subset, run gates, synthesize verdict"
|
|
10
|
+
],
|
|
11
|
+
"forbidden_jobs": [
|
|
12
|
+
"bypass ux-story-gate phases 0-1.5",
|
|
13
|
+
"implement code without explicit build approval (respect assess-only mode)"
|
|
14
|
+
],
|
|
15
|
+
"reads": ["agents/router.json", "agents/chain.json", "agents/session-schema.json"],
|
|
16
|
+
"requires_session_state": true
|
|
17
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "priya",
|
|
3
|
+
"role": "feasibility",
|
|
4
|
+
"system_skill": "skills/priya/SKILL.md",
|
|
5
|
+
"system_card": "agents/cards/priya.md",
|
|
6
|
+
"tier": "structured",
|
|
7
|
+
"max_output_tokens": 900,
|
|
8
|
+
"parallel_safe_with": ["meera"],
|
|
9
|
+
"inputs": ["task_map", "session_context", "meera_output", "tech_stack"],
|
|
10
|
+
"outputs": ["feasibility_analysis"],
|
|
11
|
+
"allowed_tools": ["design-reference", "stacks"],
|
|
12
|
+
"allowed_jobs": [
|
|
13
|
+
"T-shirt sizing (two-axis: UI x State)",
|
|
14
|
+
"risk and blocker identification",
|
|
15
|
+
"simpler-alternative sizing (modal vs accordion vs wizard, etc.)"
|
|
16
|
+
],
|
|
17
|
+
"forbidden_jobs": [
|
|
18
|
+
"visual or business critique",
|
|
19
|
+
"implement code without explicit build approval"
|
|
20
|
+
],
|
|
21
|
+
"routing_triggers": ["build_effort", "implementation_risk", "modal_vs_wizard", "state_machine"],
|
|
22
|
+
"never_route_for": ["visual_quality", "delight_moment"],
|
|
23
|
+
"chain_position": 4,
|
|
24
|
+
"handoff_from": ["meera"],
|
|
25
|
+
"handoff_to": ["zara"],
|
|
26
|
+
"requires_session_state": true,
|
|
27
|
+
"effort_overrides": {
|
|
28
|
+
"trivial": { "when": "single feature T-shirt sizing (structured extract)", "max_output_tokens": 500 },
|
|
29
|
+
"hard": { "when": "architecture / state-machine risk", "max_output_tokens": 900 }
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "raj",
|
|
3
|
+
"role": "arbitrator",
|
|
4
|
+
"system_skill": "skills/raj/SKILL.md",
|
|
5
|
+
"system_card": "agents/cards/raj.md",
|
|
6
|
+
"tier": "arbitrate",
|
|
7
|
+
"max_output_tokens": 1200,
|
|
8
|
+
"parallel_safe_with": [],
|
|
9
|
+
"inputs": ["session_context", "persona_outputs"],
|
|
10
|
+
"outputs": ["arbitration_verdict"],
|
|
11
|
+
"allowed_tools": ["design-reference"],
|
|
12
|
+
"allowed_jobs": [
|
|
13
|
+
"resolve stalemates between personas using the 5 product principles",
|
|
14
|
+
"issue final SHIP / REVISE / BLOCK when personas disagree"
|
|
15
|
+
],
|
|
16
|
+
"forbidden_jobs": [
|
|
17
|
+
"run when there is no stalemate or BLOCK condition",
|
|
18
|
+
"implement code without explicit build approval"
|
|
19
|
+
],
|
|
20
|
+
"routing_triggers": ["stalemate", "block", "conflicting_verdicts"],
|
|
21
|
+
"never_route_for": ["routine_single_persona_critique"],
|
|
22
|
+
"chain_position": 6,
|
|
23
|
+
"handoff_from": ["zara", "arjun", "meera", "priya", "noor", "anuj"],
|
|
24
|
+
"handoff_to": [],
|
|
25
|
+
"requires_session_state": true,
|
|
26
|
+
"effort_overrides": {
|
|
27
|
+
"standard": { "when": "principle ranking (one verdict, never first)", "max_output_tokens": 1200 },
|
|
28
|
+
"hard": { "when": "cross-persona stalemate", "max_output_tokens": 1200 }
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "ux-story-gate",
|
|
3
|
+
"role": "orchestrator",
|
|
4
|
+
"system_skill": "skills/ux-story-gate/SKILL.md",
|
|
5
|
+
"inputs": ["user_ask", "prd_sources", "figma_context", "knowledge_bank"],
|
|
6
|
+
"outputs": ["task_map", "ds_checklist", "routing_decision", "session_state"],
|
|
7
|
+
"allowed_tools": ["design-reference", "figma_mcp", "browser_verify", "knowledge-bank"],
|
|
8
|
+
"allowed_jobs": [
|
|
9
|
+
"Phase 0: discover PRDs/user stories, build task map",
|
|
10
|
+
"Phase 0.5: DS/Figma discovery, DS token checklist",
|
|
11
|
+
"Phase 1: mental model of user personas",
|
|
12
|
+
"Phase 1.5: MoE routing decision",
|
|
13
|
+
"Phase 4.5: browser verify gate",
|
|
14
|
+
"Phase 5.5: assess-only mode gate"
|
|
15
|
+
],
|
|
16
|
+
"forbidden_jobs": [
|
|
17
|
+
"skip phases 0-1.5 before handing off to persona chain"
|
|
18
|
+
],
|
|
19
|
+
"routing_triggers": ["any_screen_or_flow_review"],
|
|
20
|
+
"hands_off_to": "persona-orchestrator",
|
|
21
|
+
"requires_session_state": true,
|
|
22
|
+
"mandatory_first_step": true
|
|
23
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "zara",
|
|
3
|
+
"role": "delight",
|
|
4
|
+
"system_skill": "skills/zara/SKILL.md",
|
|
5
|
+
"system_card": "agents/cards/zara.md",
|
|
6
|
+
"tier": "critique",
|
|
7
|
+
"max_output_tokens": 1200,
|
|
8
|
+
"parallel_safe_with": [],
|
|
9
|
+
"inputs": ["task_map", "session_context", "priya_output", "ds_checklist"],
|
|
10
|
+
"outputs": ["delight_pass"],
|
|
11
|
+
"allowed_tools": ["design-reference"],
|
|
12
|
+
"allowed_jobs": [
|
|
13
|
+
"identify exactly ONE structural or surface delight moment",
|
|
14
|
+
"add delight on top of an already DS-compliant, hierarchy-correct foundation"
|
|
15
|
+
],
|
|
16
|
+
"forbidden_jobs": [
|
|
17
|
+
"contrast fixes, token drift correction, or any brand/design-system recovery — these are out of scope for Zara; refuse and route to the DS Gate + Arjun",
|
|
18
|
+
"run before the ds_gate has passed",
|
|
19
|
+
"implement code without explicit build approval"
|
|
20
|
+
],
|
|
21
|
+
"routing_triggers": ["delight_moment", "onboarding", "empty_state", "first_impression"],
|
|
22
|
+
"never_route_for": ["contrast", "brand_tokens", "design_system_compliance", "accessibility_fix"],
|
|
23
|
+
"requires_ds_gate_pass": true,
|
|
24
|
+
"chain_position": 5,
|
|
25
|
+
"handoff_from": ["priya"],
|
|
26
|
+
"handoff_to": [],
|
|
27
|
+
"requires_session_state": true,
|
|
28
|
+
"effort_overrides": {
|
|
29
|
+
"standard": { "when": "delight pass (one peak moment)", "max_output_tokens": 1200 },
|
|
30
|
+
"hard": { "when": "novel interaction design", "max_output_tokens": 1200 }
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "MoE routing table — maps a classified problem type to the expert(s) that should run, and the experts that must never run for that problem type. Used by ux-story-gate Phase 1.5 and persona-orchestrator.",
|
|
3
|
+
"rules": [
|
|
4
|
+
{
|
|
5
|
+
"problem_type": "structure_ia",
|
|
6
|
+
"signals": ["structure", "ia", "navigation", "nested_ui", "information architecture", "wizard", "form flow"],
|
|
7
|
+
"route_to": ["noor"],
|
|
8
|
+
"never_route_to": ["zara"]
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"problem_type": "ux_friction",
|
|
12
|
+
"signals": ["ux friction", "accessibility", "responsive", "interaction bug", "usability"],
|
|
13
|
+
"route_to": ["arjun"],
|
|
14
|
+
"never_route_to": ["zara"],
|
|
15
|
+
"notes": "Zara is never used for contrast fixes."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"problem_type": "brand_design_system",
|
|
19
|
+
"signals": ["brand", "tokens", "contrast", "design system", "ds compliance", "hex", "!important"],
|
|
20
|
+
"route_to": ["ds_gate", "arjun_color_system_only"],
|
|
21
|
+
"never_route_to": ["zara", "noor_alone"],
|
|
22
|
+
"notes": "DS Gate runs first; Arjun is scoped to Color System diagnostic only, not a general critique."
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"problem_type": "business_priority",
|
|
26
|
+
"signals": ["business priority", "metric alignment", "north-star", "monetization", "retention", "pricing"],
|
|
27
|
+
"route_to": ["meera"],
|
|
28
|
+
"never_route_to": []
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"problem_type": "build_effort",
|
|
32
|
+
"signals": ["build size", "modal vs wizard", "feasibility", "effort sizing", "state machine"],
|
|
33
|
+
"route_to": ["priya"],
|
|
34
|
+
"never_route_to": []
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"problem_type": "delight",
|
|
38
|
+
"signals": ["delight", "onboarding", "peak moment", "empty state", "first impression"],
|
|
39
|
+
"route_to": ["zara"],
|
|
40
|
+
"never_route_to": [],
|
|
41
|
+
"notes": "Only after the DS Gate has passed."
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"problem_type": "daily_use_density",
|
|
45
|
+
"signals": ["daily use", "bulk actions", "density", "keyboard shortcuts", "power user"],
|
|
46
|
+
"route_to": ["anuj"],
|
|
47
|
+
"never_route_to": [],
|
|
48
|
+
"notes": "Not for learning products unless usage frequency is daily/weekly."
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"problem_type": "stalemate",
|
|
52
|
+
"signals": ["stalemate", "block", "conflicting verdicts"],
|
|
53
|
+
"route_to": ["raj"],
|
|
54
|
+
"never_route_to": []
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"problem_type": "full_screen_review",
|
|
58
|
+
"signals": ["full screen review", "critique this screen", "review this page"],
|
|
59
|
+
"route_to": ["design-critic_chain"],
|
|
60
|
+
"never_route_to": ["direct_noor_without_gate"],
|
|
61
|
+
"notes": "Always enter through ux-story-gate, never call /noor directly without the gate."
|
|
62
|
+
}
|
|
63
|
+
]
|
|
64
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Shape of session-state.json, persisted per project so Ask/Agent turns and persona hand-offs never re-derive context that was already gathered.",
|
|
3
|
+
"path": "~/.analyzthis_design/sessions/{project-id}/session-state.json",
|
|
4
|
+
"shape": {
|
|
5
|
+
"project_id": "string — derived from cwd or explicit --project flag",
|
|
6
|
+
"created_at": "ISO 8601 timestamp",
|
|
7
|
+
"updated_at": "ISO 8601 timestamp",
|
|
8
|
+
"task_map": [
|
|
9
|
+
{
|
|
10
|
+
"task": "string — primary user task",
|
|
11
|
+
"frequency": "daily | weekly | monthly | one_time",
|
|
12
|
+
"priority": "string"
|
|
13
|
+
}
|
|
14
|
+
],
|
|
15
|
+
"figma_node": { "url": "string", "confirmed": "boolean" },
|
|
16
|
+
"content_sources": ["string — e.g. ppt, docx, prd, figma"],
|
|
17
|
+
"ds_checklist": {
|
|
18
|
+
"no_invented_hex": "boolean | null",
|
|
19
|
+
"no_important_overrides": "boolean | null",
|
|
20
|
+
"kit_components_preferred": "boolean | null",
|
|
21
|
+
"light_dark_from_tokens_only": "boolean | null",
|
|
22
|
+
"contrast_checked_against_wcag": "boolean | null"
|
|
23
|
+
},
|
|
24
|
+
"information_hierarchy": {
|
|
25
|
+
"declared_by": "noor | undeclared",
|
|
26
|
+
"ranking": ["string — rank #1 first"]
|
|
27
|
+
},
|
|
28
|
+
"routing_decision": {
|
|
29
|
+
"problem_type": "string — from agents/router.json",
|
|
30
|
+
"experts": ["string — persona ids"],
|
|
31
|
+
"reason": "string"
|
|
32
|
+
},
|
|
33
|
+
"persona_outputs": {
|
|
34
|
+
"<persona_id>": "object — structured output block per agents/manifests/<persona_id>.json"
|
|
35
|
+
},
|
|
36
|
+
"verify_results": {
|
|
37
|
+
"primary_task": "pass | fail | not_run",
|
|
38
|
+
"screenshots": ["string — file paths"],
|
|
39
|
+
"reason": "string — why not_run, when applicable (e.g. 'assess_only, no URL')"
|
|
40
|
+
},
|
|
41
|
+
"mode": "assess_only | build_approved",
|
|
42
|
+
"digest": {
|
|
43
|
+
"task_map_summary": "string — short summary passed to persona calls instead of the full task_map/persona_outputs history",
|
|
44
|
+
"hierarchy_top3": ["string — top 3 ranked hierarchy items, if declared"],
|
|
45
|
+
"ds_at_risk": ["string — ds_checklist keys currently at risk"],
|
|
46
|
+
"experts": ["string — persona ids selected for this run"],
|
|
47
|
+
"prior_scores": { "<persona_id>": "number | string — last known score for delta re-evaluation" },
|
|
48
|
+
"mode": "assess_only | build_approved"
|
|
49
|
+
},
|
|
50
|
+
"metrics": {
|
|
51
|
+
"llm_calls": "number — persona calls made in the last run",
|
|
52
|
+
"experts_run": ["string — persona ids actually executed"],
|
|
53
|
+
"input_tokens_est": "number — estimated input tokens across the last run",
|
|
54
|
+
"output_tokens_est": "number — estimated output tokens across the last run",
|
|
55
|
+
"cache_hits": "number — retrieve/cache hits during the last run",
|
|
56
|
+
"mode": "lite | full",
|
|
57
|
+
"effort_log": [{ "persona": "string", "effort": "trivial|standard|hard", "model": "string|null", "scoped_mode": "string|null" }],
|
|
58
|
+
"cost_usd": "number — estimated $ cost of the run from config.pricing (0 when pricing missing)"
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|