@openprd/cli 0.1.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 (154) hide show
  1. package/.openprd/README.md +82 -0
  2. package/.openprd/benchmarks/evidence/milvus-io-ai-code-review-gets-better-when-models-debate-claude-vs-gemini-vs-code.md +14 -0
  3. package/.openprd/benchmarks/evidence/nolanlawson-com-using-ai-to-write-better-code-more-slowly.md +14 -0
  4. package/.openprd/benchmarks/index.md +37 -0
  5. package/.openprd/benchmarks/sources.yaml +56 -0
  6. package/.openprd/config.yaml +50 -0
  7. package/.openprd/discovery/config.json +21 -0
  8. package/.openprd/engagements/active/flows.md +30 -0
  9. package/.openprd/engagements/active/handoff.md +9 -0
  10. package/.openprd/engagements/active/intake.md +15 -0
  11. package/.openprd/engagements/active/prd.md +161 -0
  12. package/.openprd/engagements/active/review.html +61 -0
  13. package/.openprd/engagements/active/roles.md +21 -0
  14. package/.openprd/engagements/work-units/wu-20260524015648-6d33ded7.json +23 -0
  15. package/.openprd/exports/.gitkeep +0 -0
  16. package/.openprd/knowledge/index.json +7 -0
  17. package/.openprd/quality/config.json +229 -0
  18. package/.openprd/reviews/v0001.html +1256 -0
  19. package/.openprd/schema/diagram-architecture.schema.yaml +49 -0
  20. package/.openprd/schema/diagram-product-flow.schema.yaml +52 -0
  21. package/.openprd/schema/prd.schema.yaml +121 -0
  22. package/.openprd/sessions/.gitkeep +0 -0
  23. package/.openprd/standards/config.json +88 -0
  24. package/.openprd/standards/file-manual-template.md +28 -0
  25. package/.openprd/standards/folder-readme-template.md +28 -0
  26. package/.openprd/state/.gitkeep +0 -0
  27. package/.openprd/state/changes.json +12 -0
  28. package/.openprd/state/current.json +169 -0
  29. package/.openprd/state/version-index.json +15 -0
  30. package/.openprd/state/versions/.gitkeep +0 -0
  31. package/.openprd/state/versions/v0001.json +121 -0
  32. package/.openprd/state/versions/v0001.md +161 -0
  33. package/.openprd/templates/agent/intake.md +6 -0
  34. package/.openprd/templates/agent/prd.md +21 -0
  35. package/.openprd/templates/b2b/intake.md +6 -0
  36. package/.openprd/templates/b2b/prd.md +24 -0
  37. package/.openprd/templates/base/intake.md +18 -0
  38. package/.openprd/templates/base/prd.md +67 -0
  39. package/.openprd/templates/company/README.md +10 -0
  40. package/.openprd/templates/consumer/intake.md +6 -0
  41. package/.openprd/templates/consumer/prd.md +19 -0
  42. package/.openprd/templates/diagram/architecture.contract.json +53 -0
  43. package/.openprd/templates/diagram/product-flow.contract.json +76 -0
  44. package/.openprd/templates/industry/README.md +16 -0
  45. package/.openprd/templates/manifest.yaml +27 -0
  46. package/.openprd/templates/project/README.md +14 -0
  47. package/.openprd/templates/session/README.md +14 -0
  48. package/AGENTS.md +44 -0
  49. package/CONTRIBUTING.md +30 -0
  50. package/LICENSE +21 -0
  51. package/README.md +727 -0
  52. package/README_CN.md +583 -0
  53. package/SECURITY.md +23 -0
  54. package/bin/openprd.js +5 -0
  55. package/docs/assets/openprd-capability-overview-en.png +0 -0
  56. package/docs/assets/openprd-capability-overview-zh.png +0 -0
  57. package/docs/assets/openprd-learning-html.png +0 -0
  58. package/docs/assets/openprd-quality-html.png +0 -0
  59. package/docs/assets/openprd-review-html.png +0 -0
  60. package/docs/assets/openprd-scenario-overview.png +0 -0
  61. package/docs/assets/openprd-scenario-overview.svg +114 -0
  62. package/docs/assets/openprd-self-evolving-mechanisms-en.png +0 -0
  63. package/docs/assets/openprd-self-evolving-mechanisms-zh.png +0 -0
  64. package/docs/assets/openprd-visual-compare-case-study-en.png +0 -0
  65. package/docs/assets/openprd-visual-compare-case-study-zh.png +0 -0
  66. package/package.json +59 -0
  67. package/scripts/openprd-dev-check.mjs +5 -0
  68. package/scripts/openprd-review-presentation.mjs +82 -0
  69. package/skills/openprd-benchmark-router/SKILL.md +92 -0
  70. package/skills/openprd-benchmark-router/agents/openai.yaml +4 -0
  71. package/skills/openprd-benchmark-router/references/benchmark-sources.md +74 -0
  72. package/skills/openprd-benchmark-router/references/evaluation-lenses.md +66 -0
  73. package/skills/openprd-benchmark-router/references/source-policy.md +35 -0
  74. package/skills/openprd-diagram-review/SKILL.md +91 -0
  75. package/skills/openprd-diagram-review/agents/openai.yaml +4 -0
  76. package/skills/openprd-diagram-review/examples/architecture-zh.md +8 -0
  77. package/skills/openprd-diagram-review/examples/product-flow-zh.md +7 -0
  78. package/skills/openprd-diagram-review/references/cocoon-patterns.md +17 -0
  79. package/skills/openprd-diagram-review/references/diagram-contracts.md +126 -0
  80. package/skills/openprd-diagram-review/references/review-checklist.md +10 -0
  81. package/skills/openprd-discovery-loop/SKILL.md +196 -0
  82. package/skills/openprd-discovery-loop/agents/openai.yaml +3 -0
  83. package/skills/openprd-harness/SKILL.md +179 -0
  84. package/skills/openprd-harness/agents/openai.yaml +4 -0
  85. package/skills/openprd-harness/examples/full-workflow-zh.md +9 -0
  86. package/skills/openprd-harness/references/command-map.md +71 -0
  87. package/skills/openprd-harness/references/examples.md +26 -0
  88. package/skills/openprd-harness/references/usage-guide.md +335 -0
  89. package/skills/openprd-harness/references/workflow-gates.md +51 -0
  90. package/skills/openprd-learning-review/SKILL.md +75 -0
  91. package/skills/openprd-learning-review/agents/openai.yaml +4 -0
  92. package/skills/openprd-learning-review/references/content-contract.md +125 -0
  93. package/skills/openprd-learning-review/references/ebook-reader.md +46 -0
  94. package/skills/openprd-learning-review/references/evidence-manifest.md +55 -0
  95. package/skills/openprd-learning-review/references/genre-library.md +43 -0
  96. package/skills/openprd-learning-review/references/prompt-engineering.md +71 -0
  97. package/skills/openprd-learning-review/references/quality-rubric.md +28 -0
  98. package/skills/openprd-learning-review/references/retrieval-worked-example.md +40 -0
  99. package/skills/openprd-learning-review/references/style-packs/xianxia-cultivation.prompt.md +67 -0
  100. package/skills/openprd-quality/SKILL.md +101 -0
  101. package/skills/openprd-requirement-intake/SKILL.md +76 -0
  102. package/skills/openprd-requirement-intake/agents/openai.yaml +4 -0
  103. package/skills/openprd-requirement-intake/references/prd-template-lenses.md +105 -0
  104. package/skills/openprd-requirement-intake/references/routing-rubric.md +64 -0
  105. package/skills/openprd-router/SKILL.md +40 -0
  106. package/skills/openprd-shared/SKILL.md +142 -0
  107. package/skills/openprd-shared/agents/openai.yaml +4 -0
  108. package/skills/openprd-shared/references/language-and-review.md +50 -0
  109. package/skills/openprd-shared/references/operating-rules.md +65 -0
  110. package/skills/openprd-shared/references/skill-architecture.md +70 -0
  111. package/skills/openprd-standards/SKILL.md +79 -0
  112. package/skills/openprd-standards/agents/openai.yaml +4 -0
  113. package/src/agent-integration.js +1717 -0
  114. package/src/benchmark.js +873 -0
  115. package/src/cli/args.js +460 -0
  116. package/src/cli/print.js +1423 -0
  117. package/src/codex-hook-runner-template.mjs +2422 -0
  118. package/src/dev-standards.js +372 -0
  119. package/src/diagram-core.js +1047 -0
  120. package/src/diagram-workspace.js +262 -0
  121. package/src/discovery.js +709 -0
  122. package/src/fleet.js +531 -0
  123. package/src/fs-utils.js +83 -0
  124. package/src/growth.js +545 -0
  125. package/src/html-artifacts.js +3803 -0
  126. package/src/knowledge.js +668 -0
  127. package/src/language-policy.js +142 -0
  128. package/src/learning-review.js +1655 -0
  129. package/src/loop.js +1290 -0
  130. package/src/openprd.js +1136 -0
  131. package/src/openspec/change-lifecycle.js +359 -0
  132. package/src/openspec/change-validate.js +248 -0
  133. package/src/openspec/constants.js +12 -0
  134. package/src/openspec/execute.js +300 -0
  135. package/src/openspec/generate.js +692 -0
  136. package/src/openspec/paths.js +111 -0
  137. package/src/openspec/tasks.js +352 -0
  138. package/src/prd-core.js +656 -0
  139. package/src/quality-html-artifact.js +1414 -0
  140. package/src/quality-learning.js +658 -0
  141. package/src/quality.js +1262 -0
  142. package/src/review-presentation.js +240 -0
  143. package/src/run-harness.js +1470 -0
  144. package/src/self-update.js +329 -0
  145. package/src/session-binding.js +140 -0
  146. package/src/source-inventory.js +224 -0
  147. package/src/standards.js +914 -0
  148. package/src/time.js +33 -0
  149. package/src/visual-compare.js +216 -0
  150. package/src/work-unit-migration.js +232 -0
  151. package/src/work-unit.js +88 -0
  152. package/src/workspace-core.js +1706 -0
  153. package/src/workspace-registry.js +162 -0
  154. package/src/workspace-workflow.js +1797 -0
@@ -0,0 +1,114 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="1600" height="920" viewBox="0 0 1600 920" role="img" aria-labelledby="title desc">
2
+ <title id="title">OpenPrd scenario overview</title>
3
+ <desc id="desc">A visual map of OpenPrd usage scenarios from unclear ideas to verified handoff.</desc>
4
+ <defs>
5
+ <linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
6
+ <stop offset="0" stop-color="#f8fafc"/>
7
+ <stop offset="0.45" stop-color="#eef6ff"/>
8
+ <stop offset="1" stop-color="#f7f0ff"/>
9
+ </linearGradient>
10
+ <filter id="shadow" x="-20%" y="-20%" width="140%" height="140%">
11
+ <feDropShadow dx="0" dy="16" stdDeviation="18" flood-color="#0f172a" flood-opacity="0.12"/>
12
+ </filter>
13
+ <marker id="arrow" viewBox="0 0 12 12" refX="11" refY="6" markerWidth="10" markerHeight="10" orient="auto">
14
+ <path d="M2 2 L10 6 L2 10 Z" fill="#475569"/>
15
+ </marker>
16
+ <style>
17
+ .small { font: 500 22px Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #475569; }
18
+ .eyebrow { font: 700 20px Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; letter-spacing: 2px; fill: #2563eb; }
19
+ .title { font: 800 58px Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #0f172a; }
20
+ .subtitle { font: 500 26px Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #334155; }
21
+ .card-title { font: 800 28px Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #111827; }
22
+ .card-body { font: 500 21px Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #475569; }
23
+ .dark-title { font: 800 28px Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #ffffff; }
24
+ .dark-body { font: 500 21px Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #cbd5e1; }
25
+ .pill { font: 700 18px Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #ffffff; }
26
+ .mono { font: 700 18px ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace; fill: #334155; }
27
+ .line { fill: none; stroke: #64748b; stroke-width: 4; marker-end: url(#arrow); }
28
+ .dash { fill: none; stroke: #94a3b8; stroke-width: 3; stroke-dasharray: 10 10; }
29
+ </style>
30
+ </defs>
31
+
32
+ <rect width="1600" height="920" rx="0" fill="url(#bg)"/>
33
+ <path d="M0 118 H1600 M0 274 H1600 M0 430 H1600 M0 586 H1600 M0 742 H1600 M190 0 V920 M390 0 V920 M590 0 V920 M790 0 V920 M990 0 V920 M1190 0 V920 M1390 0 V920" stroke="#dbeafe" stroke-width="1" opacity="0.7"/>
34
+
35
+ <g transform="translate(92 72)">
36
+ <text class="eyebrow" x="0" y="0">OPENPRD WORKSPACE</text>
37
+ <text class="title" x="0" y="78">From fuzzy intent to verified handoff</text>
38
+ <text class="subtitle" x="2" y="125">Use one local PRD workspace to clarify, review, execute, compare visuals, and keep quality evidence visible.</text>
39
+ </g>
40
+
41
+ <g transform="translate(96 210)" filter="url(#shadow)">
42
+ <rect width="392" height="220" rx="18" fill="#ffffff" stroke="#bfdbfe" stroke-width="2"/>
43
+ <rect x="28" y="28" width="84" height="34" rx="17" fill="#2563eb"/>
44
+ <text class="pill" x="49" y="51">01</text>
45
+ <text class="card-title" x="28" y="104">Clarify new ideas</text>
46
+ <text class="card-body" x="28" y="145">Turn rough product prompts</text>
47
+ <text class="card-body" x="28" y="177">into captured facts, open</text>
48
+ <text class="card-body" x="28" y="209">questions, and review scope.</text>
49
+ </g>
50
+
51
+ <g transform="translate(604 210)" filter="url(#shadow)">
52
+ <rect width="392" height="220" rx="18" fill="#ffffff" stroke="#bbf7d0" stroke-width="2"/>
53
+ <rect x="28" y="28" width="84" height="34" rx="17" fill="#16a34a"/>
54
+ <text class="pill" x="49" y="51">02</text>
55
+ <text class="card-title" x="28" y="104">Mine existing projects</text>
56
+ <text class="card-body" x="28" y="145">Use discovery to track</text>
57
+ <text class="card-body" x="28" y="177">coverage, evidence, tasks,</text>
58
+ <text class="card-body" x="28" y="209">and standards drift.</text>
59
+ </g>
60
+
61
+ <g transform="translate(1112 210)" filter="url(#shadow)">
62
+ <rect width="392" height="220" rx="18" fill="#ffffff" stroke="#fed7aa" stroke-width="2"/>
63
+ <rect x="28" y="28" width="84" height="34" rx="17" fill="#f97316"/>
64
+ <text class="pill" x="49" y="51">03</text>
65
+ <text class="card-title" x="28" y="104">Confirm with visuals</text>
66
+ <text class="card-body" x="28" y="145">Generate architecture and</text>
67
+ <text class="card-body" x="28" y="177">product-flow reviews before</text>
68
+ <text class="card-body" x="28" y="209">teams commit to execution.</text>
69
+ </g>
70
+
71
+ <path class="line" d="M488 320 H592"/>
72
+ <path class="line" d="M996 320 H1100"/>
73
+
74
+ <g transform="translate(180 542)" filter="url(#shadow)">
75
+ <rect width="520" height="230" rx="18" fill="#0f172a" stroke="#334155" stroke-width="2"/>
76
+ <rect x="30" y="30" width="128" height="36" rx="18" fill="#a855f7"/>
77
+ <text class="pill" x="54" y="54">Agent Loop</text>
78
+ <text class="dark-title" x="30" y="113">Execute one task per session</text>
79
+ <text class="dark-body" x="30" y="154">Convert confirmed changes into</text>
80
+ <text class="dark-body" x="30" y="186">dependency-ready prompts, logs,</text>
81
+ <text class="dark-body" x="30" y="218">verification, and optional commits.</text>
82
+ </g>
83
+
84
+ <g transform="translate(900 542)" filter="url(#shadow)">
85
+ <rect width="520" height="230" rx="18" fill="#ffffff" stroke="#fecdd3" stroke-width="2"/>
86
+ <rect x="30" y="30" width="150" height="36" rx="18" fill="#e11d48"/>
87
+ <text class="pill" x="54" y="54">Quality + UI</text>
88
+ <text class="card-title" x="30" y="113">Verify before handoff</text>
89
+ <text class="card-body" x="30" y="154">Keep regression reports, cost</text>
90
+ <text class="card-body" x="30" y="186">guardrails, smoke evidence, and</text>
91
+ <text class="card-body" x="30" y="218">visual compare artifacts together.</text>
92
+ </g>
93
+
94
+ <path class="line" d="M800 430 V500 C800 530 760 558 712 630"/>
95
+ <path class="line" d="M1008 430 V500 C1008 530 942 558 900 630"/>
96
+ <path class="dash" d="M700 660 H900"/>
97
+
98
+ <g transform="translate(96 822)">
99
+ <rect width="1408" height="54" rx="27" fill="#ffffff" stroke="#dbeafe" stroke-width="2"/>
100
+ <text class="mono" x="40" y="35">openprd clarify</text>
101
+ <text class="small" x="225" y="35">-></text>
102
+ <text class="mono" x="266" y="35">capture</text>
103
+ <text class="small" x="372" y="35">-></text>
104
+ <text class="mono" x="414" y="35">synthesize</text>
105
+ <text class="small" x="566" y="35">-></text>
106
+ <text class="mono" x="608" y="35">diagram</text>
107
+ <text class="small" x="724" y="35">-></text>
108
+ <text class="mono" x="766" y="35">change/tasks</text>
109
+ <text class="small" x="942" y="35">-></text>
110
+ <text class="mono" x="984" y="35">loop</text>
111
+ <text class="small" x="1052" y="35">-></text>
112
+ <text class="mono" x="1094" y="35">quality + handoff</text>
113
+ </g>
114
+ </svg>
package/package.json ADDED
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "@openprd/cli",
3
+ "version": "0.1.0",
4
+ "description": "AI-native PRD workspace and lifecycle CLI",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "bin": {
8
+ "openprd": "bin/openprd.js"
9
+ },
10
+ "files": [
11
+ "AGENTS.md",
12
+ "CONTRIBUTING.md",
13
+ "README_CN.md",
14
+ "SECURITY.md",
15
+ "bin",
16
+ "docs/assets",
17
+ "scripts",
18
+ "src",
19
+ ".openprd",
20
+ "!.openprd/artifacts",
21
+ "!.openprd/artifacts/**",
22
+ "!.openprd/harness",
23
+ "!.openprd/harness/**",
24
+ "!.openprd/learning",
25
+ "!.openprd/learning/**",
26
+ "!.openprd/quality/evidence",
27
+ "!.openprd/quality/evidence/**",
28
+ "!.openprd/quality/reports",
29
+ "!.openprd/quality/reports/**",
30
+ "!.openprd/growth",
31
+ "!.openprd/growth/**",
32
+ "!.openprd/growth/preferences.local.json",
33
+ "!.openprd/knowledge/incidents",
34
+ "!.openprd/knowledge/incidents/**",
35
+ "!.openprd/knowledge/patterns",
36
+ "!.openprd/knowledge/patterns/**",
37
+ "!.openprd/knowledge/skills",
38
+ "!.openprd/knowledge/skills/**",
39
+ "!.openprd/state/events.jsonl",
40
+ "!.openprd/state/task-graph.json",
41
+ "!.openprd/engagements/active/decision-log.md",
42
+ "!.openprd/engagements/active/open-questions.md",
43
+ "!.openprd/engagements/active/progress.md",
44
+ "!.openprd/engagements/active/verification.md",
45
+ "skills"
46
+ ],
47
+ "engines": {
48
+ "node": ">=20.19.0"
49
+ },
50
+ "scripts": {
51
+ "start": "node ./bin/openprd.js",
52
+ "test": "node --test",
53
+ "test:smoke": "node --test --test-name-pattern \"quality requires current smoke evidence|run exposes hook-stable\""
54
+ },
55
+ "dependencies": {
56
+ "sharp": "^0.34.5",
57
+ "yaml": "^2.8.2"
58
+ }
59
+ }
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ import { main } from '../src/openprd.js';
3
+
4
+ const exitCode = await main(['dev-check', ...process.argv.slice(2)]);
5
+ process.exitCode = exitCode;
@@ -0,0 +1,82 @@
1
+ #!/usr/bin/env node
2
+ import { buildReviewPresentationTemplatePayload, reviewPresentationWorkspace } from '../src/review-presentation.js';
3
+
4
+ function parseArgs(argv) {
5
+ const flags = {
6
+ project: '.',
7
+ version: null,
8
+ presentation: null,
9
+ template: false,
10
+ write: false,
11
+ failOnViolation: false,
12
+ help: false,
13
+ };
14
+ const positionals = [];
15
+ const args = [...argv];
16
+ while (args.length > 0) {
17
+ const arg = args.shift();
18
+ if (arg === '--version') {
19
+ flags.version = args.shift() ?? null;
20
+ continue;
21
+ }
22
+ if (arg === '--presentation') {
23
+ flags.presentation = args.shift() ?? null;
24
+ continue;
25
+ }
26
+ if (arg === '--template') {
27
+ flags.template = true;
28
+ continue;
29
+ }
30
+ if (arg === '--write') {
31
+ flags.write = true;
32
+ continue;
33
+ }
34
+ if (arg === '--fail-on-violation') {
35
+ flags.failOnViolation = true;
36
+ continue;
37
+ }
38
+ if (arg === '--help' || arg === '-h') {
39
+ flags.help = true;
40
+ continue;
41
+ }
42
+ positionals.push(arg);
43
+ }
44
+ flags.project = positionals[0] ?? flags.project;
45
+ return flags;
46
+ }
47
+
48
+ function printUsage() {
49
+ console.log([
50
+ 'Usage:',
51
+ ' node scripts/openprd-review-presentation.mjs [path] [--version v0001] [--presentation review-presentation.json] [--write] [--fail-on-violation]',
52
+ ' node scripts/openprd-review-presentation.mjs [path] --template',
53
+ ].join('\n'));
54
+ }
55
+
56
+ async function main(argv = process.argv.slice(2)) {
57
+ const flags = parseArgs(argv);
58
+ if (flags.help) {
59
+ printUsage();
60
+ return 0;
61
+ }
62
+
63
+ if (flags.template) {
64
+ console.log(JSON.stringify(buildReviewPresentationTemplatePayload(), null, 2));
65
+ return 0;
66
+ }
67
+
68
+ const result = await reviewPresentationWorkspace(flags.project, {
69
+ version: flags.version,
70
+ presentationPath: flags.presentation,
71
+ write: flags.write,
72
+ });
73
+ console.log(JSON.stringify(result, null, 2));
74
+ return flags.failOnViolation && !result.ok ? 1 : 0;
75
+ }
76
+
77
+ main().then((exitCode) => {
78
+ process.exitCode = exitCode;
79
+ }).catch((error) => {
80
+ console.error(error?.message ?? error);
81
+ process.exitCode = 1;
82
+ });
@@ -0,0 +1,92 @@
1
+ ---
2
+ name: openprd-benchmark-router
3
+ description: 为 OpenPrd 产品、CLI、Agent harness、AI code review / PR review harness、上下文工程、提示词优化和图标资源选择对标来源与调研路径。适用于最佳实践、benchmark、参考产品、Superpowers、OpenSpec、Anthropic Skills、Lark CLI、长程 Agent、harness、深度审查 lane、context engineering、prompt engineering 和 icon resource 相关请求。
4
+ ---
5
+
6
+ # OpenPrd Benchmark Router
7
+
8
+ ## 概览
9
+
10
+ 这份 skill 负责把“最佳实践 / 对标 / benchmark / 参考产品 / prompt engineering / Agent harness / context engineering / CLI skill 体系优化 / 图标资源”类请求先路由到合适的证据源,再把结论落回 OpenPrd 的生成规则、skills、hooks、CLI 或测试。
11
+
12
+ 它不是长文资料库,也不是外部项目复刻器。它的职责是:先判断该参考谁、怎么查、查到什么程度够用,然后再进入 OpenPrd 的设计和修改。
13
+
14
+ ## 核心原则
15
+
16
+ - 不把对标当成固定关键词匹配。结合用户目标判断参考源是否真的能提升设计、实现、排查、评审、规划或文档质量。
17
+ - 不强行对标。环境、权限、账号、普通脚本报错、一次性短问答或与产品/领域设计无关的问题,继续当前任务即可。
18
+ - 不默认下载全文、仓库或整站。先保留轻量链接、来源 ID 和适用边界;真正需要事实时再读取。
19
+ - 通常只选 1-3 个最相关来源;不要为了显得全面而扩大上下文。
20
+ - 不把索引、来源目录或记忆当事实来源;未经核验的外部内容不能作为已确认事实输出。
21
+
22
+ ## 触发信号
23
+
24
+ - 用户提到 OpenPrd、OpenSpec、Superpowers、Anthropic Skills、Lark CLI、Agent harness、AI code review、PR review、review lane、long-running agents、context engineering、prompt engineering、最佳实践、对标、参考、复刻或优化设计。
25
+ - 用户提到图标、icon、图标站、图标库、图标资源、UI 图标、AI 图标、技术图标、3D 图标、功能图标、iconfont 或视觉资产参考。
26
+ - 用户要求解释某个 Codex / Claude / Cursor agent 为什么没有发现 skill,或希望提升 skill 自动识别、路由、生成、安装和持续执行能力。
27
+ - 用户没有显式说 skill 名也要触发;不要要求用户记住 `$openprd-benchmark-router`。
28
+
29
+ ## 路由流程
30
+
31
+ 1. 先识别优化对象:OpenPrd 产品/PRD 流程、CLI、skill 体系、长程任务、通用 harness、AI code review / PR review harness、context engineering、prompt engineering、图标资源或图标实现库。
32
+ 2. 读取当前工作区证据:`.openprd/`、`.openprd/benchmarks/index.md`、`.openprd/benchmarks/sources.yaml`、`AGENTS.md`、repo-local skills、生成的 `.codex/.claude/.cursor` 引导和相关源码。
33
+ 3. 选择最小足够的外部证据源:公开 GitHub 仓库走 DeepWiki;第三方工具、SDK、CLI 或官方 API 用 Context7;产品官方文档、工程博客和一手资料用官方来源。
34
+ 4. 形成 OpenPrd 设计判断时,明确区分已证实事实、从来源归纳出的设计原则,以及对本项目的推断。
35
+ 5. 用分析维度提炼可迁移原则,避免照搬表面功能。
36
+ 6. 如果任务变成大量参考项目行为挖掘、长时间覆盖或需求补全,再路由到 `$openprd-discovery-loop` 承接持续调研。
37
+
38
+ ## Project Registry
39
+
40
+ - 项目自己的 `.openprd/benchmarks/` 优先于 OpenPrd 内置 Source Map。
41
+ - `sources.yaml` 里的 approved source 是长期可复用参考;`inbox/` 里的 candidate 只表示待确认线索。
42
+ - 用 `openprd benchmark add <url|repo|file>` 写入 candidate,用 `openprd benchmark approve <id>` 纳入 approved registry。
43
+ - 用 `openprd benchmark verify` 检查重复来源、失效链接、缺失本地文件和过宽触发规则。
44
+
45
+ ## Source Policy
46
+
47
+ - GitHub 仓库:需要理解架构、核心模块、关键流程或对标结论时,先用 DeepWiki。默认顺序是 `read_wiki_structure` 1 次,再 `ask_question` 1-2 次;只有在本地源码和已有结论仍不足时才追加。DeepWiki 不可用或覆盖不足时,再回退到 GitHub README、源码和官方文档。
48
+ - 官方技术文档:涉及第三方库、框架、API、SDK、MCP、CLI 工具的用法、配置、限制、版本差异或迁移路径时,先检查本地代码、锁文件、README、类型定义;本地不足时再用 Context7,默认顺序是 `resolve_library_id` 1 次,再 `query_docs` 1-2 次。Context7 不足时说明缺口,再补官方文档、源码或其他一手资料。
49
+ - 工程文章和产品文档:优先读取当前线上一手页面,只抽取和当前任务相关的观点与设计原则,不复制长文;如果内容可能过时,要说明时效风险。
50
+ - 本地源码优先:当前工作区已经有相关源码时,常规修 bug、查实现、改功能优先读本地代码;DeepWiki 主要用于外部仓库架构理解和对标分析。
51
+ - 停止调研:找到足以支持当前决策的 1-3 个高相关来源后停止扩展;候选来源重复时保留更权威、更新或更贴近当前任务的来源。
52
+ - 追加调用前先写清“已确认什么、还缺什么”;不要为了同一问题只换个说法反复查询。
53
+
54
+ ## Source Map
55
+
56
+ - OpenPrd / PRD 设计对标:`obra/superpowers`、`Fission-AI/OpenSpec`。
57
+ - CLI 与 skill 体系对标:`larksuite/cli`、`anthropics/skills`、Claude Skills 官方文档、Claude Code Skills 官方文档。
58
+ - 长程 Agent 任务:Anthropic long-running agents harness 工程文章。
59
+ - 通用 harness:OpenAI harness engineering、LangChain agent harness anatomy。
60
+ - AI code review / PR review harness:Nolan Lawson 的 “Using AI to write better code more slowly”、Milvus 关于多模型代码审查辩论/交叉验证的实验文章。
61
+ - Context engineering:Manus context engineering、Anthropic context engineering。
62
+ - Prompt engineering:OpenAI prompt engineering / prompt guidance、Claude prompt engineering、Gemini prompting strategies。
63
+ - 图标资源站一级最佳实践:UI 图标优先看 Phosphor Icons(https://phosphoricons.com/);AI 公司与产品图标看 LobeHub Icons(https://lobehub.com/icons);技术栈图标看 Tech Icons(https://techicons.dev/);透明底 3D 图标看 Thiings(https://www.thiings.co/things);功能图标、矢量插画、3D 插画和字体资源看 iconfont(https://www.iconfont.cn/)。
64
+ - 图标实现库二级最佳实践:Lucide、Tabler、React Icons。需要落到前端代码时,再结合当前项目框架、包管理器、bundle 体积和导入方式选择具体库。
65
+
66
+ ## Evaluation Lenses
67
+
68
+ - 产品与工作流:用户从哪里开始、如何知道下一步、模糊输入如何变成结构化产物、哪些步骤要保存/展示/恢复、哪些步骤必须保留用户确认。
69
+ - Agent 与 Harness:目标、边界、停止条件、工具选择、进度记录、证据、验证结果、失败恢复和人工接管点是否清楚。
70
+ - PR 审查 lane:reviewer 是否独立审查、主代理是否先汇总再验证、是否有误报过滤、agreement matrix、严重级别和 merge recommendation。
71
+ - 上下文工程:哪些信息常驻、哪些按需检索,是否使用稳定路径、链接和来源 ID 支持 just-in-time 检索,如何处理过期、冲突和可信度。
72
+ - 提示词与 Skill 设计:触发描述是否具体但不过度强制,主说明是否短,细节是否按需放到 reference,是否明确不要硬套参考源。
73
+ - 图标与视觉资产:先判断用途是 UI、AI 品牌、技术栈、3D 物件还是功能图标;优先选最贴近用途的资源站,再在实现阶段选择合适的代码图标库。
74
+ - CLI 与开发者体验:命令是否可发现、可组合、可预测;错误信息是否说明发生了什么、影响是什么、下一步怎么做;危险操作是否有确认。
75
+
76
+ ## 设计输出
77
+
78
+ - 给出 OpenPrd 应该内置什么、生成什么、路由什么、保留什么门禁。
79
+ - 优先把结论落到 `CANONICAL_SKILLS`、repo-local skills、AGENTS/CLAUDE/Cursor 生成规则、hooks 或测试,而不是停留在口头建议。
80
+ - 不把外部项目整包复制进 OpenPrd;只吸收可验证的路由、生成、门禁、状态承接和用户体验原则。
81
+ - 需要显式说明时,简短写出参考了哪个来源、借鉴点、适用原因、不照搬边界,以及落到当前任务的具体决策。
82
+
83
+ ## Stop Rule
84
+
85
+ - 同一来源默认只做一次结构理解和一到两次聚焦问题;证据足够支撑当前决策后立即停止调研。
86
+ - 如果 DeepWiki、Context7 或官方资料覆盖不足,明确说明缺口,再把后续结论标为推断。
87
+
88
+ ## 参考资料
89
+
90
+ - `references/benchmark-sources.md`
91
+ - `references/source-policy.md`
92
+ - `references/evaluation-lenses.md`
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "OpenPrd Benchmark Router"
3
+ short_description: "Route OpenPrd benchmark, deep-review-lane, and icon resource requests to the right evidence"
4
+ default_prompt: "Use $openprd-benchmark-router to choose benchmark sources and route best-practice, PR-review-harness, or icon-resource research before changing OpenPrd."
@@ -0,0 +1,74 @@
1
+ # Benchmark Sources
2
+
3
+ ## 选择原则
4
+
5
+ - 先选和当前优化对象最贴近的来源,不做泛泛资料堆叠。
6
+ - 不把对标当成固定关键词匹配;如果参考源不能明显提升当前任务质量,就不要为了使用 skill 而调研。
7
+ - 通常只选 1-3 个来源;候选重复时保留更权威、更新或更贴近当前任务的来源。
8
+ - 环境、权限、账号、普通脚本报错、一次性短问答或与产品/领域设计无关的问题,不强行对标。
9
+ - 公开 GitHub 仓库需要理解架构、子系统或生成链路时,优先用 DeepWiki。
10
+ - 第三方工具、SDK、CLI、API、MCP 或版本相关文档,优先用 Context7。
11
+ - 官方工程博客和官方文档只提炼可验证原则,不复制大段原文。
12
+ - 足够支撑当前 OpenPrd 决策后停止调研。
13
+
14
+ ## 来源分组
15
+
16
+ ### OpenPrd / PRD 设计
17
+
18
+ - `obra/superpowers`:重点看启动时 skill check、项目级 skill 优先级、强制路由和 session bootstrap。
19
+ - `Fission-AI/OpenSpec`:重点看 tool adapter、动态生成 skill/command、配置 profile 和 instruction layering。
20
+
21
+ ### CLI 与 Skill 体系
22
+
23
+ - `larksuite/cli`:重点看 CLI 入口、插件/命令组织和用户引导。
24
+ - `anthropics/skills`:重点看 skill 文件结构、触发描述、progressive disclosure 和跨工具分发。
25
+ - Claude Skills / Claude Code Skills 官方文档:重点看 agent 如何发现、选择和调用 skill。
26
+
27
+ ### 长程 Agent 任务
28
+
29
+ - Anthropic long-running agents harness:重点看任务拆分、状态承接、失败恢复、验证回路和人工接管点。
30
+
31
+ ### 通用 Harness
32
+
33
+ - OpenAI harness engineering:重点看 agent harness 的环境、工具、评估和反馈闭环。
34
+ - LangChain agent harness anatomy:重点看 harness 组成、状态、工具执行和观察面。
35
+
36
+ ### AI Code Review / PR Review Harness
37
+
38
+ - Nolan Lawson《Using AI to write better code more slowly》:重点看独立 reviewer 并行、主代理先不站队、汇总后再验证、严重级别与 merge 建议。
39
+ - Milvus 多模型代码审查实验:重点看 reviewer agreement、交叉验证如何降低 hallucination 和 false positive。
40
+
41
+ ### Context Engineering
42
+
43
+ - Manus context engineering:重点看上下文压缩、文件系统作为记忆、可恢复状态和错误保留。
44
+ - Anthropic context engineering:重点看上下文选择、组织、工具反馈和长期任务信息边界。
45
+
46
+ ### Prompt Engineering
47
+
48
+ - OpenAI prompt engineering / prompt guidance。
49
+ - Claude prompt engineering。
50
+ - Gemini prompting strategies。
51
+
52
+ ### 图标资源站一级最佳实践
53
+
54
+ - Phosphor Icons(https://phosphoricons.com/):UI、图表、演示和通用界面图标;适合需要统一线性/填充风格、开源授权和批量下载的场景。
55
+ - LobeHub Icons(https://lobehub.com/icons):AI 公司、AI 产品和模型品牌图标;适合需要 SVG、PNG、WebP 高清素材的 AI 相关页面、图示和演示。
56
+ - Tech Icons(https://techicons.dev/):Python、Swift 等技术栈图标;适合开发者工具、技术架构图、工程文档和技术产品界面。
57
+ - Thiings(https://www.thiings.co/things):透明底 3D 动物、物品、人物等图标;适合需要轻量 3D 视觉资产、封面或运营配图的场景。
58
+ - iconfont(https://www.iconfont.cn/):功能图标、矢量插画、3D 插画和字体资源;适合中文生态、语义搜索、在线编辑和彩色/可变字体图标场景。
59
+
60
+ ### 图标实现库二级最佳实践
61
+
62
+ - Lucide:适合需要轻量、统一、开源线性图标并直接落到现代前端组件的场景。
63
+ - Tabler:适合需要大量通用 UI 符号、细线风格和稳定 SVG/React 资产的场景。
64
+ - React Icons:适合需要聚合多个图标集、快速覆盖品牌或历史图标需求的 React 项目;使用时关注子包导入和 bundle 体积。
65
+
66
+ ## 输出模板
67
+
68
+ 每次 benchmark 调研后,用这个结构回到 OpenPrd 设计:
69
+
70
+ 1. 已确认的外部事实。
71
+ 2. 对 OpenPrd 有价值的设计原则。
72
+ 3. 应改动的 OpenPrd 表面:CLI、skill、AGENTS/CLAUDE/Cursor 生成、hooks、文档或测试。
73
+ 4. 不采用的做法和原因。
74
+ 5. 仍缺的证据或需要用户确认的取舍。
@@ -0,0 +1,66 @@
1
+ # Evaluation Lenses
2
+
3
+ 使用这些维度把参考源转成当前任务可执行的判断。不要逐项机械套用;选择最相关的 3-5 个即可。
4
+
5
+ ## 产品与工作流
6
+
7
+ - 用户从哪里开始,如何知道下一步做什么?
8
+ - 系统如何把模糊输入变成结构化产物?
9
+ - 哪些状态需要被显式保存、展示或恢复?
10
+ - 哪些步骤应该自动化,哪些步骤必须保留用户确认?
11
+ - 成功结果是什么,失败时用户如何继续?
12
+
13
+ ## Agent 与 Harness
14
+
15
+ - Agent 的目标、边界和停止条件是否清楚?
16
+ - 工具选择是否有歧义?工具结果是否高信号、低噪声?
17
+ - 长程任务如何记录计划、进度、证据和验证结果?
18
+ - 失败恢复靠重试、回滚、人工确认,还是重新规划?
19
+ - 如何避免为了自主性牺牲安全性和可解释性?
20
+
21
+ ## PR 审查 Lane
22
+
23
+ - reviewer 是独立并行审查,还是被前一个结论污染了上下文?
24
+ - 主代理是在 reviewer 返回前就先做研究,还是先汇总再验证?
25
+ - 是否显式区分发现、 dismissed findings、agreement matrix 和最终 merge recommendation?
26
+ - 误报过滤和 hallucination filter 靠什么完成?是人工复核、代码验证,还是多 reviewer 交叉确认?
27
+ - 这条 lane 是“高风险时可选增强”,还是被误做成所有 PR 默认开启的高成本流程?
28
+
29
+ ## 上下文工程
30
+
31
+ - 哪些信息应常驻,哪些应按需检索?
32
+ - 当前上下文是否包含足够证据,又没有塞入过多无关资料?
33
+ - 是否使用稳定标识符、文件路径、链接、来源 ID 来支持 just-in-time 检索?
34
+ - 历史状态、用户偏好和任务进度分别应该放在哪里?
35
+ - 如何处理上下文过期、冲突和来源可信度?
36
+
37
+ ## 提示词与 Skill 设计
38
+
39
+ - 触发描述是否具体,但不过度强制?
40
+ - 主说明是否足够短,细节是否放到 reference 里按需读取?
41
+ - 是否使用清晰标题、列表、表格或 XML/Markdown 分区?
42
+ - 示例是否覆盖真实用法,而不是堆满边缘情况?
43
+ - 是否明确说明不要做什么,尤其是不要硬套参考源?
44
+
45
+ ## 图标与视觉资产
46
+
47
+ - 当前用途是 UI 图标、AI 品牌图标、技术栈图标、3D 物件还是功能图标?
48
+ - 需要直接下载素材,还是需要落到代码里的图标组件库?
49
+ - 授权、格式、透明背景、批量下载、Figma/Sketch 插件或在线编辑是否影响选择?
50
+ - 图标风格是否和当前产品界面一致,是否会引入混杂的视觉语言?
51
+ - 代码实现时是否关注 tree-shaking、子路径导入、包体积和已有设计系统约束?
52
+
53
+ ## CLI 与开发者体验
54
+
55
+ - 命令是否可发现、可组合、可预测?
56
+ - 帮助文本是否面向用户结果,而不是内部实现?
57
+ - 错误信息是否说明发生了什么、影响是什么、下一步怎么做?
58
+ - 默认行为是否安全,危险操作是否需要确认?
59
+ - 配置、插件和扩展点是否容易理解和维护?
60
+
61
+ ## 输出判断
62
+
63
+ - 借鉴了哪个原则。
64
+ - 为什么它适合当前任务。
65
+ - 哪些地方没有照搬。
66
+ - 最终落到当前任务的具体决策。
@@ -0,0 +1,35 @@
1
+ # Source Policy
2
+
3
+ 按来源类型选择最小必要调研方式。不要因为索引里有链接,就默认读取所有来源。
4
+
5
+ ## GitHub 仓库
6
+
7
+ - 如果任务需要理解公开仓库的架构、核心模块、关键流程或对标结论,先用 DeepWiki:先读 wiki structure,再做聚焦问答。
8
+ - 如果 DeepWiki 不可用或覆盖不足,再回退到 GitHub README、源码和官方文档。
9
+ - 如果当前工作区已经有该仓库源码,常规修 bug、查实现、改功能优先读本地代码。
10
+ - 输出时区分 DeepWiki 结论、补充来源和推断。
11
+
12
+ ## 官方技术文档
13
+
14
+ - 如果任务涉及第三方库、框架、API、SDK、MCP、CLI 工具的用法、配置、限制、版本差异或迁移路径,优先用 Context7。
15
+ - 先 resolve library id,再查询文档。
16
+ - Context7 不足时,说明不足点,再补官方文档、源码或其他一手资料。
17
+ - 不要把记忆中的 API、参数、默认值、最佳实践当作已验证事实。
18
+
19
+ ## 工程文章和产品文档
20
+
21
+ - 对工程文章、产品文章、博客和网页,优先读取当前线上页面。
22
+ - 只抽取与当前任务相关的观点和设计原则,不复制长文。
23
+ - 如果文章有发布日期或内容可能过时,在输出中说明核验日期或时效风险。
24
+
25
+ ## 本地索引与记忆
26
+
27
+ - `benchmark-sources.md` 是路由索引,不是事实来源。
28
+ - 来源目录只代表候选来源,不代表来源内容已经被核验。
29
+ - 长期偏好只能记录用户确认过的复用经验,不替代外部核验。
30
+
31
+ ## 何时停止调研
32
+
33
+ - 已找到足以支持当前决策的 1-3 个高相关来源时,停止扩展。
34
+ - 如果候选来源互相重复,保留更权威、更新或更贴近当前任务的来源。
35
+ - 如果没有明显收益,不要为了使用 Skill 而进行外部调研。
@@ -0,0 +1,91 @@
1
+ ---
2
+ name: openprd-diagram-review
3
+ description: 生成并迭代 OpenPrd 图示产物,供用户确认。适用于架构图、产品流程图、用户旅程、流程图、系统边界图、依赖图,以及 freeze 前的可视化评审场景。
4
+ ---
5
+
6
+ # OpenPrd Diagram Review
7
+
8
+ ## 概览
9
+
10
+ 这份 skill 用来判断当前需要哪种图、生成可渲染的 diagram contract、调用 OpenPrd 当前支持的渲染能力,并把结果变成和用户往返确认的评审循环,而不是一次性出图。
11
+
12
+ ## 动手前
13
+
14
+ 1. 读取 `skills/openprd-shared/SKILL.md`
15
+ 2. 重建当前工作区状态,判断用户究竟想确认什么
16
+ 3. 决定用户需要的是:
17
+ - `architecture` 视图
18
+ - `product-flow` 视图
19
+ 4. 不要虚构今天还不存在的 OpenPrd diagram 命令
20
+
21
+ ## 图示类型选择
22
+
23
+ 当用户在问这些内容时,选 `architecture`:
24
+
25
+ - 模块
26
+ - 系统边界
27
+ - 服务
28
+ - 外部依赖
29
+ - 可靠性 / 合规性问题
30
+ - handoff 形态
31
+
32
+ 当用户在问这些内容时,选 `product-flow`:
33
+
34
+ - 用户步骤
35
+ - 决策点
36
+ - 正常路径 / 错误路径
37
+ - onboarding 或旅程流程
38
+ - 页面到页面、步骤到步骤的推进
39
+
40
+ 如果两者都出现:
41
+
42
+ - 当用户行为和流程仍不清楚时,先做 `product-flow` contract
43
+ - 流程清楚后,再做架构评审
44
+
45
+ ## 当前工具能力
46
+
47
+ 当前 OpenPrd CLI 提供:
48
+
49
+ - `openprd diagram <path> [--open] [--json]`
50
+
51
+ 现在它主要渲染面向架构的 HTML / JSON 产物。
52
+
53
+ 因此:
54
+
55
+ - 对 `architecture`,直接调用内置命令
56
+ - 对 `product-flow`,即使还没有专门渲染器,也先生成结构化 contract 和评审清单
57
+ - 如果工具还没有专用流程渲染器,就不要假装它已经存在
58
+
59
+ ## 语言规则
60
+
61
+ - 所有用户可见标签和评审说明都跟随用户当前主语言
62
+ - Diagram contract 是用户可见产物。当 `locale` 为 `zh-CN` 时,以下可见字段必须写成简体中文:
63
+ - `title`、`subtitle`
64
+ - `components[].name`、`components[].subtitle`、`components[].details`
65
+ - `flows[].label`
66
+ - `summaryCards[].title`、`summaryCards[].items`
67
+ - `sidePanels[].title`、`sidePanels[].items`
68
+ - `reviewInstructions`
69
+ - 专有名词、产品名、协议名、API 名称、框架名和云服务名在翻译会降低清晰度时保持原样
70
+ - 像 MotiClaw、Electron、TypeScript、CLI、API、JSON、NDJSON、dry-run、Host API、schema、`waiting_approval` 这类必要术语可以保留,但周围句子必须译成简体中文
71
+ - 不要在 zh-CN diagram contract 里写完整英文句子。运行 `openprd diagram --input` 前,至少人工检查一遍并把英文偏重的可见文本改成简体中文
72
+ - 如果对话语言混合,优先跟随最近几轮需求澄清中占主导的语言
73
+
74
+ ## 评审循环
75
+
76
+ 生成图示产物后:
77
+
78
+ 1. 展示或打开图示产物
79
+ 2. 请用户确认:
80
+ - 是否缺了组件或步骤
81
+ - 系统边界或泳道是否画错
82
+ - 是否遗漏依赖或路径
83
+ - 是否缺少错误路径或签核点
84
+ 3. 把未解决项继续保留为假设或开放问题
85
+ 4. 只有在可视化评审收敛后,才建议 freeze
86
+
87
+ ## 需要时阅读这些参考资料
88
+
89
+ - `references/diagram-contracts.md`:架构图和产品流程图 contract
90
+ - `references/review-checklist.md`:渲染后应该问用户什么
91
+ - `references/cocoon-patterns.md`:从 `Cocoon-AI/architecture-diagram-generator` 借来的可复用模式
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "OpenPrd Diagram Review"
3
+ short_description: "Generate and review OpenPrd diagrams before freeze"
4
+ default_prompt: "Use $openprd-diagram-review to generate a diagram artifact and get user confirmation before freeze."