@prismer/runtime 2.0.7 → 2.2.55

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 (291) hide show
  1. package/CHANGELOG.md +3631 -0
  2. package/README.md +34 -12
  3. package/apc/skills/FIELD-DICTIONARY.md +111 -0
  4. package/apc/skills/bug-reproduce/SKILL.md +150 -0
  5. package/apc/skills/bug-reproduce/skill.json +96 -0
  6. package/apc/skills/code-review/SKILL.md +198 -0
  7. package/apc/skills/code-review/skill.json +124 -0
  8. package/apc/skills/design-review/SKILL.md +122 -0
  9. package/apc/skills/design-review/skill.json +88 -0
  10. package/apc/skills/doc-sync/SKILL.md +168 -0
  11. package/apc/skills/doc-sync/skill.json +81 -0
  12. package/apc/skills/env-doctor/SKILL.md +194 -0
  13. package/apc/skills/env-doctor/skill.json +209 -0
  14. package/apc/skills/git-ops/SKILL.md +189 -0
  15. package/apc/skills/git-ops/skill.json +94 -0
  16. package/apc/skills/impact-trace/SKILL.md +168 -0
  17. package/apc/skills/impact-trace/skill.json +104 -0
  18. package/apc/skills/observability/SKILL.md +195 -0
  19. package/apc/skills/observability/skill.json +116 -0
  20. package/apc/skills/release-db-config-sync/SKILL.md +186 -0
  21. package/apc/skills/release-db-config-sync/skill.json +109 -0
  22. package/apc/skills/release-ota-promote/SKILL.md +195 -0
  23. package/apc/skills/release-ota-promote/skill.json +176 -0
  24. package/apc/skills/release-preflight/SKILL.md +174 -0
  25. package/apc/skills/release-preflight/skill.json +175 -0
  26. package/apc/skills/release-rollback/SKILL.md +214 -0
  27. package/apc/skills/release-rollback/skill.json +230 -0
  28. package/apc/skills/release-tag/SKILL.md +194 -0
  29. package/apc/skills/release-tag/skill.json +94 -0
  30. package/apc/skills/releasing-prod/SKILL.md +49 -0
  31. package/apc/skills/releasing-test/SKILL.md +135 -0
  32. package/apc/skills/sdk-release/SKILL.md +200 -0
  33. package/apc/skills/spec-intake/SKILL.md +169 -0
  34. package/apc/skills/spec-intake/skill.json +93 -0
  35. package/apc/skills/test-result-feedback/SKILL.md +239 -0
  36. package/apc/skills/test-result-feedback/skill.json +193 -0
  37. package/apc/skills/test-runner/SKILL.md +169 -0
  38. package/apc/skills/test-runner/skill.json +103 -0
  39. package/apc/skills/ui-align/SKILL.md +209 -0
  40. package/apc/skills/ui-align/skill.json +114 -0
  41. package/apc/skills/ui-canvas/SKILL.md +148 -0
  42. package/apc/skills/ui-canvas/skill.json +127 -0
  43. package/built-in-skills/agent-coordination/SKILL.md +257 -0
  44. package/built-in-skills/agent-meta/SKILL.md +53 -0
  45. package/built-in-skills/assets/SKILL.md +133 -0
  46. package/built-in-skills/browser-use/SKILL.md +93 -0
  47. package/built-in-skills/canvas-design/LICENSE.txt +202 -0
  48. package/built-in-skills/canvas-design/SKILL.md +157 -0
  49. package/built-in-skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  50. package/built-in-skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  51. package/built-in-skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  52. package/built-in-skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
  53. package/built-in-skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  54. package/built-in-skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
  55. package/built-in-skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  56. package/built-in-skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  57. package/built-in-skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  58. package/built-in-skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  59. package/built-in-skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  60. package/built-in-skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  61. package/built-in-skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  62. package/built-in-skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  63. package/built-in-skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
  64. package/built-in-skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  65. package/built-in-skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
  66. package/built-in-skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  67. package/built-in-skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  68. package/built-in-skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
  69. package/built-in-skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  70. package/built-in-skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
  71. package/built-in-skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  72. package/built-in-skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  73. package/built-in-skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  74. package/built-in-skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  75. package/built-in-skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  76. package/built-in-skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  77. package/built-in-skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  78. package/built-in-skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  79. package/built-in-skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  80. package/built-in-skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  81. package/built-in-skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  82. package/built-in-skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  83. package/built-in-skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  84. package/built-in-skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  85. package/built-in-skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  86. package/built-in-skills/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
  87. package/built-in-skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  88. package/built-in-skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  89. package/built-in-skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  90. package/built-in-skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  91. package/built-in-skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  92. package/built-in-skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  93. package/built-in-skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
  94. package/built-in-skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  95. package/built-in-skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  96. package/built-in-skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  97. package/built-in-skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  98. package/built-in-skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  99. package/built-in-skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
  100. package/built-in-skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  101. package/built-in-skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  102. package/built-in-skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
  103. package/built-in-skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  104. package/built-in-skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  105. package/built-in-skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  106. package/built-in-skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  107. package/built-in-skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
  108. package/built-in-skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  109. package/built-in-skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  110. package/built-in-skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
  111. package/built-in-skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
  112. package/built-in-skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  113. package/built-in-skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  114. package/built-in-skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
  115. package/built-in-skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  116. package/built-in-skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
  117. package/built-in-skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  118. package/built-in-skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  119. package/built-in-skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
  120. package/built-in-skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  121. package/built-in-skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
  122. package/built-in-skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  123. package/built-in-skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  124. package/built-in-skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  125. package/built-in-skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  126. package/built-in-skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
  127. package/built-in-skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  128. package/built-in-skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
  129. package/built-in-skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  130. package/built-in-skills/claim-agent-ownership/SKILL.md +255 -0
  131. package/built-in-skills/claude-api/LICENSE.txt +202 -0
  132. package/built-in-skills/claude-api/SKILL.md +325 -0
  133. package/built-in-skills/claude-api/csharp/claude-api.md +402 -0
  134. package/built-in-skills/claude-api/curl/examples.md +216 -0
  135. package/built-in-skills/claude-api/curl/managed-agents.md +336 -0
  136. package/built-in-skills/claude-api/go/claude-api.md +421 -0
  137. package/built-in-skills/claude-api/go/managed-agents/README.md +561 -0
  138. package/built-in-skills/claude-api/java/claude-api.md +432 -0
  139. package/built-in-skills/claude-api/java/managed-agents/README.md +442 -0
  140. package/built-in-skills/claude-api/php/claude-api.md +375 -0
  141. package/built-in-skills/claude-api/php/managed-agents/README.md +435 -0
  142. package/built-in-skills/claude-api/python/claude-api/README.md +420 -0
  143. package/built-in-skills/claude-api/python/claude-api/batches.md +185 -0
  144. package/built-in-skills/claude-api/python/claude-api/files-api.md +165 -0
  145. package/built-in-skills/claude-api/python/claude-api/streaming.md +162 -0
  146. package/built-in-skills/claude-api/python/claude-api/tool-use.md +590 -0
  147. package/built-in-skills/claude-api/python/managed-agents/README.md +332 -0
  148. package/built-in-skills/claude-api/ruby/claude-api.md +113 -0
  149. package/built-in-skills/claude-api/ruby/managed-agents/README.md +389 -0
  150. package/built-in-skills/claude-api/shared/agent-design.md +101 -0
  151. package/built-in-skills/claude-api/shared/error-codes.md +213 -0
  152. package/built-in-skills/claude-api/shared/live-sources.md +135 -0
  153. package/built-in-skills/claude-api/shared/managed-agents-api-reference.md +378 -0
  154. package/built-in-skills/claude-api/shared/managed-agents-client-patterns.md +209 -0
  155. package/built-in-skills/claude-api/shared/managed-agents-core.md +238 -0
  156. package/built-in-skills/claude-api/shared/managed-agents-environments.md +215 -0
  157. package/built-in-skills/claude-api/shared/managed-agents-events.md +195 -0
  158. package/built-in-skills/claude-api/shared/managed-agents-memory.md +197 -0
  159. package/built-in-skills/claude-api/shared/managed-agents-multiagent.md +99 -0
  160. package/built-in-skills/claude-api/shared/managed-agents-onboarding.md +114 -0
  161. package/built-in-skills/claude-api/shared/managed-agents-outcomes.md +106 -0
  162. package/built-in-skills/claude-api/shared/managed-agents-overview.md +68 -0
  163. package/built-in-skills/claude-api/shared/managed-agents-self-hosted-sandboxes.md +173 -0
  164. package/built-in-skills/claude-api/shared/managed-agents-tools.md +321 -0
  165. package/built-in-skills/claude-api/shared/managed-agents-webhooks.md +110 -0
  166. package/built-in-skills/claude-api/shared/model-migration.md +779 -0
  167. package/built-in-skills/claude-api/shared/models.md +121 -0
  168. package/built-in-skills/claude-api/shared/prompt-caching.md +171 -0
  169. package/built-in-skills/claude-api/shared/tool-use-concepts.md +327 -0
  170. package/built-in-skills/claude-api/typescript/claude-api/README.md +333 -0
  171. package/built-in-skills/claude-api/typescript/claude-api/batches.md +106 -0
  172. package/built-in-skills/claude-api/typescript/claude-api/files-api.md +98 -0
  173. package/built-in-skills/claude-api/typescript/claude-api/streaming.md +178 -0
  174. package/built-in-skills/claude-api/typescript/claude-api/tool-use.md +527 -0
  175. package/built-in-skills/claude-api/typescript/managed-agents/README.md +359 -0
  176. package/built-in-skills/codebase-design/DEEPENING.md +37 -0
  177. package/built-in-skills/codebase-design/DESIGN-IT-TWICE.md +44 -0
  178. package/built-in-skills/codebase-design/LICENSE +21 -0
  179. package/built-in-skills/codebase-design/SKILL.md +116 -0
  180. package/built-in-skills/conversation-compaction/SKILL.md +114 -0
  181. package/built-in-skills/council-creator/SKILL.md +426 -0
  182. package/built-in-skills/diagnosing-bugs/LICENSE +21 -0
  183. package/built-in-skills/diagnosing-bugs/SKILL.md +136 -0
  184. package/built-in-skills/diagnosing-bugs/scripts/hitl-loop.template.sh +41 -0
  185. package/built-in-skills/doc-coauthoring/SKILL.md +376 -0
  186. package/built-in-skills/document-generation/SKILL.md +105 -0
  187. package/built-in-skills/domain-modeling/ADR-FORMAT.md +47 -0
  188. package/built-in-skills/domain-modeling/CONTEXT-FORMAT.md +60 -0
  189. package/built-in-skills/domain-modeling/LICENSE +21 -0
  190. package/built-in-skills/domain-modeling/SKILL.md +76 -0
  191. package/built-in-skills/frontend-design/LICENSE.txt +177 -0
  192. package/built-in-skills/frontend-design/SKILL.md +43 -0
  193. package/built-in-skills/human-approval/SKILL.md +129 -0
  194. package/built-in-skills/image-generate/SKILL.md +128 -0
  195. package/built-in-skills/image-generate/scripts/generate-and-deliver.mjs +289 -0
  196. package/built-in-skills/ingest/SKILL.md +73 -0
  197. package/built-in-skills/internal-comms/LICENSE.txt +202 -0
  198. package/built-in-skills/internal-comms/SKILL.md +33 -0
  199. package/built-in-skills/internal-comms/examples/3p-updates.md +47 -0
  200. package/built-in-skills/internal-comms/examples/company-newsletter.md +65 -0
  201. package/built-in-skills/internal-comms/examples/faq-answers.md +30 -0
  202. package/built-in-skills/internal-comms/examples/general-comms.md +16 -0
  203. package/built-in-skills/liteparse/SKILL.md +176 -0
  204. package/built-in-skills/mcp-builder/LICENSE.txt +202 -0
  205. package/built-in-skills/mcp-builder/SKILL.md +237 -0
  206. package/built-in-skills/mcp-builder/reference/evaluation.md +602 -0
  207. package/built-in-skills/mcp-builder/reference/mcp_best_practices.md +249 -0
  208. package/built-in-skills/mcp-builder/reference/node_mcp_server.md +970 -0
  209. package/built-in-skills/mcp-builder/reference/python_mcp_server.md +719 -0
  210. package/built-in-skills/mcp-builder/scripts/connections.py +151 -0
  211. package/built-in-skills/mcp-builder/scripts/evaluation.py +373 -0
  212. package/built-in-skills/mcp-builder/scripts/example_evaluation.xml +22 -0
  213. package/built-in-skills/mcp-builder/scripts/requirements.txt +2 -0
  214. package/built-in-skills/memory/SKILL.md +471 -0
  215. package/built-in-skills/memory-dream/SKILL.md +339 -0
  216. package/built-in-skills/office-artifacts/SKILL.md +211 -0
  217. package/built-in-skills/okr/SKILL.md +154 -0
  218. package/built-in-skills/persona/SKILL.md +81 -0
  219. package/built-in-skills/persona-generator/SKILL.md +296 -0
  220. package/built-in-skills/pkf-svg/SKILL.md +253 -0
  221. package/built-in-skills/pkf-writing/SKILL.md +236 -0
  222. package/built-in-skills/prismer-im-collab/SKILL.md +168 -0
  223. package/built-in-skills/proactivity/SKILL.md +84 -0
  224. package/built-in-skills/remotion/SKILL.md +431 -0
  225. package/built-in-skills/role-builder/SKILL.md +203 -0
  226. package/built-in-skills/role-builder/scripts/author-role.mjs +334 -0
  227. package/built-in-skills/role-builder/scripts/ingest-role.mjs +223 -0
  228. package/built-in-skills/role-builder/scripts/instantiate-and-run.mjs +290 -0
  229. package/built-in-skills/role-builder/scripts/operation-harness.mjs +267 -0
  230. package/built-in-skills/skill-authoring/SKILL.md +134 -0
  231. package/built-in-skills/skill-authoring/skill.json +74 -0
  232. package/built-in-skills/skill-builder/SKILL.md +171 -0
  233. package/built-in-skills/skill-builder/scripts/ingest.mjs +265 -0
  234. package/built-in-skills/skill-creator/LICENSE.txt +202 -0
  235. package/built-in-skills/skill-creator/SKILL.md +227 -0
  236. package/built-in-skills/skill-creator/agents/analyzer.md +274 -0
  237. package/built-in-skills/skill-creator/agents/comparator.md +202 -0
  238. package/built-in-skills/skill-creator/agents/grader.md +223 -0
  239. package/built-in-skills/skill-creator/assets/eval_review.html +146 -0
  240. package/built-in-skills/skill-creator/eval-viewer/generate_review.py +471 -0
  241. package/built-in-skills/skill-creator/eval-viewer/viewer.html +1325 -0
  242. package/built-in-skills/skill-creator/references/external-library-import.md +110 -0
  243. package/built-in-skills/skill-creator/references/schemas.md +430 -0
  244. package/built-in-skills/skill-creator/scripts/__init__.py +0 -0
  245. package/built-in-skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  246. package/built-in-skills/skill-creator/scripts/generate_report.py +326 -0
  247. package/built-in-skills/skill-creator/scripts/import-library.mjs +475 -0
  248. package/built-in-skills/skill-creator/scripts/improve_description.py +247 -0
  249. package/built-in-skills/skill-creator/scripts/package_skill.py +136 -0
  250. package/built-in-skills/skill-creator/scripts/quick_validate.py +103 -0
  251. package/built-in-skills/skill-creator/scripts/run_eval.py +310 -0
  252. package/built-in-skills/skill-creator/scripts/run_loop.py +328 -0
  253. package/built-in-skills/skill-creator/scripts/utils.py +47 -0
  254. package/built-in-skills/slack-gif-creator/LICENSE.txt +202 -0
  255. package/built-in-skills/slack-gif-creator/SKILL.md +291 -0
  256. package/built-in-skills/slack-gif-creator/core/easing.py +234 -0
  257. package/built-in-skills/slack-gif-creator/core/frame_composer.py +176 -0
  258. package/built-in-skills/slack-gif-creator/core/gif_builder.py +269 -0
  259. package/built-in-skills/slack-gif-creator/core/validators.py +136 -0
  260. package/built-in-skills/slack-gif-creator/requirements.txt +4 -0
  261. package/built-in-skills/tasks/SKILL.md +413 -0
  262. package/built-in-skills/tdd/LICENSE +21 -0
  263. package/built-in-skills/tdd/SKILL.md +110 -0
  264. package/built-in-skills/tdd/mocking.md +59 -0
  265. package/built-in-skills/tdd/refactoring.md +10 -0
  266. package/built-in-skills/tdd/tests.md +61 -0
  267. package/built-in-skills/team/SKILL.md +77 -0
  268. package/built-in-skills/web-artifacts-builder/LICENSE.txt +202 -0
  269. package/built-in-skills/web-artifacts-builder/SKILL.md +105 -0
  270. package/built-in-skills/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
  271. package/built-in-skills/web-artifacts-builder/scripts/init-artifact.sh +334 -0
  272. package/built-in-skills/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  273. package/built-in-skills/webapp-testing/LICENSE.txt +202 -0
  274. package/built-in-skills/webapp-testing/SKILL.md +97 -0
  275. package/built-in-skills/webapp-testing/examples/console_logging.py +35 -0
  276. package/built-in-skills/webapp-testing/examples/element_discovery.py +40 -0
  277. package/built-in-skills/webapp-testing/examples/static_html_automation.py +33 -0
  278. package/built-in-skills/webapp-testing/scripts/with_server.py +106 -0
  279. package/built-in-skills/wechat-pay/SKILL.md +59 -0
  280. package/dist/cli.cjs +72577 -16101
  281. package/dist/cli.js +72752 -16232
  282. package/dist/index.cjs +72632 -16024
  283. package/dist/index.d.cts +4956 -640
  284. package/dist/index.d.ts +4956 -640
  285. package/dist/index.js +72564 -15963
  286. package/package.json +39 -6
  287. package/plugins/memory/prismer/__init__.py +1211 -0
  288. package/plugins/memory/prismer/plugin.yaml +8 -0
  289. package/plugins/memory/prismer/tool-schemas.generated.json +249 -0
  290. package/plugins/tools/prismer-recall/__init__.py +282 -0
  291. package/plugins/tools/prismer-recall/plugin.yaml +15 -0
@@ -0,0 +1,154 @@
1
+ ---
2
+ name: okr
3
+ scope: persistence
4
+ description: Draft and track a strategic OKR charter — turn a human's plain-language goal into ONE Objective + 2-5 measurable Key Results, link existing tasks, and route the commit to a human sponsor. Use whenever the user wants to set a strategic goal / OKR / objective, "立个 OKR", or "把 X 推到 GA". Executes via the `cloud okr` CLI.
5
+ ---
6
+
7
+ # OKR
8
+
9
+ Use this skill to **draft an OKR charter** from a human's goal: one Objective, 2-5 Key Results, each with a baseline→target and a *real* evidence source, plus links to the tasks that move them. Every operation goes through the `cloud okr` CLI — never tell the user an objective was created / committed / scored unless the command actually returned an id and state.
10
+
11
+ You **draft and propose**. The human **commits**. That split is the whole point of this skill (see ⛔ hard rules).
12
+
13
+ ## When to use
14
+
15
+ - The user wants to **set a strategic goal**: "let's set an OKR for Q3", "立个 OKR", "make reliability our objective this cycle", "把搜索推到 GA".
16
+ - A long-running objective should become a tracked **Objective + Key Results**, not a loose `kind=goal` card. (When the user says "make this a goal", draft an objective charter here, not a plain task.)
17
+ - You need to **link** existing tactical tasks to the Key Result they serve.
18
+ - The user wants to **see OKR health** — the objective tree with KR progress.
19
+
20
+ If the request is a single tactical deliverable ("review this PR", "write the report"), that's the `tasks` skill, not this one. Strategic outcome → here; tactical card under an existing objective → `tasks` with the KR link.
21
+
22
+ ## Charter drafting methodology
23
+
24
+ From a human's plain-language goal, draft **ONE Objective + 2-5 Key Results**. Before drafting, ask for whatever is missing:
25
+
26
+ - **Outcome** — what observable end-state defines success? (the Objective title)
27
+ - **Deadline / cycle** — which cycle does this belong to? (`--cycle 2026-Q3`)
28
+ - **Owner** — which agent/human drives it? (`--owner <imUserId>`)
29
+ - **Sponsor** — which **human/admin** stands behind it? (`--sponsor <human imUserId>`) — **required for a committed objective.**
30
+ - **Per KR**: a baseline → target, and a **measurable source**. Today's KNOWN sources are ONLY:
31
+ - **task acceptance** — a `task`/`milestone` KR whose progress is the count of linked tasks that pass acceptance.
32
+ - **IMMetricEvent metric binding** — a `metric` KR bound to an existing metric stream (`--metric-namespace --metric-name --metric-agg`).
33
+ - **human-confirm** — a `qualitative` KR a human scores explicitly with a value + evidence.
34
+
35
+ Then:
36
+
37
+ 1. **Draft the objective** (agent proposes — it is NOT yet committed):
38
+
39
+ ```bash
40
+ cloud okr objective create \
41
+ --workspace "$PRISMER_WORKSPACE_ID" \
42
+ --title "Search is GA-ready" \
43
+ --type committed \
44
+ --narrative "Definition of done: search ships to all users with p95 < 300ms and zero P0s." \
45
+ --cycle 2026-Q3 \
46
+ --owner <imUserId> \
47
+ --sponsor <human imUserId>
48
+ ```
49
+
50
+ 2. **Propose each KR** with baseline/target/unit/direction/weight + an evidence policy:
51
+
52
+ ```bash
53
+ # metric-backed KR (bound to a real IMMetricEvent stream)
54
+ cloud okr kr add <objectiveId> \
55
+ --title "p95 search latency under 300ms" \
56
+ --type metric --baseline 480 --target 300 --unit ms --direction decrease --weight 2 \
57
+ --metric-namespace search.latency --metric-name p95 --metric-agg last \
58
+ --evidence "IMMetricEvent search.latency:p95, last value per cycle"
59
+
60
+ # task-backed KR (progress = linked tasks that pass acceptance)
61
+ cloud okr kr add <objectiveId> \
62
+ --title "Ship 4 launch-blocker fixes" \
63
+ --type task --baseline 0 --target 4 --direction increase \
64
+ --evidence "count of linked tasks with passing acceptance"
65
+ ```
66
+
67
+ 3. **Link existing tasks** to the KR they serve (don't create unscoped strategic tasks):
68
+
69
+ ```bash
70
+ cloud okr link <objectiveId> <keyResultId> <taskId>
71
+ ```
72
+
73
+ 4. **STOP and hand the commit to the human sponsor.** Print the objective id + KR ids and say: *"Charter drafted. @<sponsor> (human) — review and `cloud okr objective commit <id>` when you approve."* Do **not** commit it yourself.
74
+
75
+ ## ⛔ Hard rules
76
+
77
+ These are enforced server-side; violating them returns a `403` you cannot work around.
78
+
79
+ 1. **NEVER commit an objective yourself.** `cloud okr objective commit` requires a **human sponsor**; an agent caller gets `AGENT_CANNOT_COMMIT`. Your job ends at *draft + propose*. Surface the objective and ask the human sponsor to commit.
80
+ 2. **A `committed`-type objective REQUIRES a human/admin sponsor** (`--sponsor <human imUserId>`). Without one, commit returns `SPONSOR_MUST_BE_HUMAN`. An `aspirational` objective may skip the sponsor.
81
+ 3. **NEVER score a `qualitative` KR without an explicit, human-confirmed value + evidence.** Use `cloud okr kr recompute <krId> --value <n> --evidence <ref>` and only with a value the human actually gave you. Metric/task KRs recompute from their real source automatically — don't hand-feed numbers there.
82
+ 4. **Bind KRs ONLY to today's sources** — task acceptance, IMMetricEvent metric binding, or human-confirm. Do **NOT** invent token/spend/credit targets, CRM pipelines, or analytics metrics — those data sources do not exist (FROZEN). A KR whose evidence you can't name is not a KR; ask the human how it will be measured.
83
+ 5. **Do NOT create unscoped strategic tasks.** Tactical work for an objective is an existing task **linked to a KR** via `cloud okr link`. If strategic work has no task yet, draft the objective/KR first, then create the task (via the `tasks` skill) and link it.
84
+
85
+ ## Lifecycle back-half
86
+
87
+ After an objective is committed it runs through `committed → graded → archived`:
88
+
89
+ - **Check-ins** — you (an agent) MAY draft a check-in. It snapshots the score + each KR's current/status. `cloud okr objective checkin <objectiveId> [--note "<t>"] [--confidence 0.6] [--decision continue|rescope|add-resource|pause|cancel]`.
90
+ - **Grade and archive are HUMAN decisions.** `cloud okr objective grade <id>` and `cloud okr objective archive <id>` return `AGENT_CANNOT_GRADE` (403) for an agent caller — surface the objective and ask the human to grade. Grade freezes the score (it stops moving even if a KR's evidence changes). An archived objective is read-only.
91
+
92
+ Check-in `--decision`, `--confidence`, and the reward/resource shapes carry **no token/credit meaning** — there is no compensation here.
93
+
94
+ ## FROZEN / out of scope
95
+
96
+ This skill draws ONE Objective + its KRs and links tasks. It does **NOT** propose, create, or mutate any of the following — they are explicitly out of scope for release203 and have no endpoints here:
97
+
98
+ - **Guardrails** — no guardrail proposals or activations.
99
+ - **Resource / budget allocation** — no credit/budget/resource grants.
100
+ - **Scenario packs** — none.
101
+ - **Proactive / recurring check-ins** — you record a check-in only when asked; there is no auto-scheduler.
102
+ - **Compensation** — no reward/bonus economics (the grade carries no payout).
103
+
104
+ If the user asks for any of these, say it's not part of the OKR charter flow yet rather than improvising one.
105
+
106
+ ## CLI Reference
107
+
108
+ ### Objectives
109
+
110
+ ```bash
111
+ # Draft (agent proposes — NOT committed)
112
+ cloud okr objective create --workspace <id> --title "<outcome>" \
113
+ [--type committed|aspirational] [--narrative "<DoD>"] [--cycle 2026-Q3] \
114
+ [--owner <imUserId>] [--sponsor <human imUserId>] [--parent <objectiveId>] [--confidence 0.7]
115
+
116
+ cloud okr objective list --workspace <id> [--state <state>]
117
+ cloud okr objective get <objectiveId>
118
+
119
+ # HUMAN/SPONSOR ONLY — an agent caller gets AGENT_CANNOT_COMMIT
120
+ cloud okr objective commit <objectiveId>
121
+ cloud okr objective close <objectiveId> [--score 0.8]
122
+ ```
123
+
124
+ ### Key Results
125
+
126
+ ```bash
127
+ cloud okr kr add <objectiveId> --title "<measurable result>" \
128
+ [--type metric|task|milestone|qualitative] \
129
+ [--baseline <n>] [--target <n>] [--unit <u>] \
130
+ [--direction increase|decrease|maintain|binary] [--weight <n>] \
131
+ [--metric-namespace <ns> --metric-name <name> --metric-agg avg|sum|last|count] \
132
+ [--evidence "<policy>"] [--source assigned|agent-proposed]
133
+
134
+ # Qualitative KR scoring — human-confirmed value + evidence ONLY
135
+ cloud okr kr recompute <keyResultId> [--value <n>] [--evidence <ref>]
136
+ ```
137
+
138
+ > `--source` defaults to `agent-proposed` (you, the agent, are drafting). Pass `--source assigned` only when the human explicitly assigned the KR.
139
+ > `--metric-namespace` and `--metric-name` must be given together to bind a metric source.
140
+
141
+ ### Linking + reading
142
+
143
+ ```bash
144
+ cloud okr link <objectiveId> <keyResultId> <taskId> # scope a task to a KR
145
+ cloud okr insights --workspace <id> # the OKR tree + KR progress (never fabricated)
146
+ ```
147
+
148
+ ## Output reporting
149
+
150
+ After any state-changing command, **echo back** the id and the **state the service returned** (not the state you expected). Example:
151
+
152
+ > Drafted objective `cmobj...` (state `draft`) with 3 KRs. @<sponsor> — `cloud okr objective commit cmobj...` to commit.
153
+
154
+ If a command exits non-zero, surface the error code verbatim — especially `AGENT_CANNOT_COMMIT` / `SPONSOR_MUST_BE_HUMAN`, which mean a human must act. **Never fabricate an objective/KR id or a KR value** — if you didn't run the command or it failed, say so.
@@ -0,0 +1,81 @@
1
+ ---
2
+ name: persona
3
+ scope: common
4
+ description: >
5
+ The discussion-only playbook for a Persona — a council participant
6
+ instantiated as a real agent from the `persona` role template (SS-02). Use
7
+ this when you have been convened into an expert roundtable as a distilled
8
+ public-record perspective. It defines HOW to participate: speak in-voice,
9
+ reason, and cite public materials — and declares the hard capability boundary
10
+ (no task.create / no skill.install / no spend / no publish). The boundary is
11
+ ENFORCED by the role's toolsetScope + mcpAllowlist + service authz, not by
12
+ this text; this skill is the behavioral norm that matches the gate.
13
+ license: MIT
14
+ compatibility:
15
+ - prismer-sdk
16
+ - hermes
17
+ metadata:
18
+ category: council
19
+ personaPolicy: public_distillation
20
+ disclaimerRequired: true
21
+ allowedUse: [analysis, debate, ideation]
22
+ forbiddenUse:
23
+ - impersonation
24
+ - private_claim
25
+ - task_create
26
+ - skill_install
27
+ - spend
28
+ - publish
29
+ capabilityBoundary:
30
+ intent: discussion-only
31
+ allowed: [speak, reason, cite_materials, recall_memory]
32
+ denied:
33
+ - capability: task.create
34
+ enforcedBy: [toolsetScope.deny(kanban,delegation,terminal,code_execution), mcpAllowlist.omit(prismer.task.*)]
35
+ - capability: skill.install
36
+ enforcedBy: [toolsetScope.deny(skills,terminal,code_execution), mcpAllowlist.omit(prismer.skill.install)]
37
+ - capability: spend
38
+ enforcedBy: [toolsetScope.deny(terminal,code_execution), skill_not_granted(wechat-pay), service_authz(payment_mandate)]
39
+ - capability: publish
40
+ enforcedBy: [mcpAllowlist.omit(prismer.evolve.publish,prismer.community.post), service_authz(owner_approval_gate)]
41
+ ---
42
+
43
+ # Persona — discussion-only council participant
44
+
45
+ You have been convened into an expert roundtable as a **Persona**: a lens distilled
46
+ from the **public record** of a real, publicly-verifiable person. You are a real
47
+ agent with your own identity and session — but your capability surface is
48
+ deliberately **narrowed to discussion**.
49
+
50
+ ## What you do
51
+
52
+ 1. **Speak in-voice.** Hold one consistent vantage and voice across turns. You occupy
53
+ a distinct stakeholder position — surface what you can see that others cannot.
54
+ 2. **Reason.** Weigh trade-offs, disagree substantively, name risks the room is missing.
55
+ 3. **Cite materials.** Ground claims in the Council Brief and public record. Use
56
+ `memory_recall` / asset reads to pull evidence. When you cannot ground a point,
57
+ **say so** (honest degradation) — never fabricate a quote or a private fact.
58
+
59
+ ## What you must NOT do (hard boundary)
60
+
61
+ You participate by **speaking, reasoning, and citing** — nothing else. The following
62
+ are **removed from you at the config layer** (they are not available tools, not a
63
+ matter of you choosing to abstain):
64
+
65
+ | Capability | Why it's off | Enforced by |
66
+ | --- | --- | --- |
67
+ | **Create / dispatch tasks** | You are a voice, not an executor | role `toolsetScope` deny `kanban`/`delegation`/`terminal`/`code_execution` + MCP allowlist omits `prismer.task.*` |
68
+ | **Install / manage skills** | You don't reshape the workspace | `toolsetScope` deny `skills`/`terminal` + MCP allowlist omits `prismer.skill.install` |
69
+ | **Spend / collect money** | No fiscal authority | `terminal`/`code_execution` denied (no `cloud pay` CLI), `wechat-pay` skill not granted, and the payment service requires a mandate |
70
+ | **Publish** (catalog / community / marketplace) | No outward-facing authority | MCP allowlist omits `prismer.evolve.publish` / `prismer.community.post`, and publishing already requires **owner approval** at the service layer |
71
+
72
+ If a discussion outcome genuinely needs a task, a purchase, or a publication:
73
+ **name that need in your reply and hand it to the workspace orchestrator**
74
+ (the Team Manager / council facilitator). Do not attempt it — the attempt would fail at the
75
+ capability gate anyway; naming it cleanly is the correct move.
76
+
77
+ ## Disclaimer (compliance floor)
78
+
79
+ You are a **distilled public-record perspective, not the real person**. Keep that
80
+ framing visible. Never assert private facts, never impersonate, never let the room
81
+ treat your words as the person's private, authoritative statement.
@@ -0,0 +1,296 @@
1
+ ---
2
+ name: persona-generator
3
+ scope: common
4
+ description: >
5
+ Given a Council Brief, produce persona-ROLE instance definitions: real,
6
+ publicly-verifiable people who occupy distinct stakeholder positions on the
7
+ issue — each a persona-flavored role template (lens / voice / SOUL + the
8
+ persona-skill capability boundary + icon + an ASCII usernameSlug), handed to
9
+ convene (council-creator) to be instantiated as a REAL agent. (Search
10
+ grounding of each person is done by the cloud /councils/plan handler, not by
11
+ this skill.) Use when the workspace orchestrator needs to convene an expert
12
+ roundtable ("帮我找几个人聊聊这个 idea"). Personas are LENSES distilled from
13
+ public records, not the real people — never assert private facts, never
14
+ impersonate. This skill produces the persona-role DEFINITIONS (who speaks); it
15
+ does NOT create the group and does NOT drive the discussion — that is
16
+ council-creator.
17
+ license: MIT
18
+ compatibility:
19
+ - prismer-sdk
20
+ - hermes
21
+ metadata:
22
+ category: council
23
+ personaPolicy: public_distillation
24
+ disclaimerRequired: true
25
+ allowedUse: [analysis, debate, ideation]
26
+ forbiddenUse:
27
+ - impersonation
28
+ - private_claim
29
+ - legal_advice_without_disclaimer
30
+ - medical_advice_without_disclaimer
31
+ - financial_advice_without_disclaimer
32
+ eval:
33
+ level: generator # eval the GENERATOR against a Brief — never a single persona
34
+ assertions:
35
+ - positions-distinct # N personas occupy N distinct stakeholder positions (no two share one)
36
+ - insider-view-present # ≥1 persona sits where outsiders cannot see
37
+ - no-fabricated-people # every displayName is a real, publicly verifiable person
38
+ - risk-coverage-3plus # cast covers ≥3 risk dimensions (capital/tech/market/org/compliance)
39
+ - grounding-substring # every quote is a substring of a real search snippet (code-checked)
40
+ - brief-boundary # no persona asserts company facts beyond the Brief
41
+ - honest-degradation # ungroundable → role_label; fabricated quotes are a hard fail
42
+ ---
43
+
44
+ # Persona Generator
45
+
46
+ **Who speaks.** Given a Council Brief (assembled by the orchestrator from the
47
+ Team Manager's materials + memory), produce `cast: PersonaDef[]` — 3–5 people occupying
48
+ **distinct stakeholder positions**, each contributing the one thing only their
49
+ position lets them see. This is a **capability skill**: the orchestrator calls
50
+ it to produce data — a set of **persona-role instance definitions**. Each cast
51
+ member is a persona-flavored **role template def** (lens / voice / SOUL + the
52
+ persona-skill capability boundary + icon + an ASCII `usernameSlug`) that convene
53
+ will instantiate as a **real agent** (`createAgentForWorkspace` + `applyToAgent`,
54
+ M2). It is **not** a virtual `im_users` mask — persona = role instance.
55
+
56
+ | Do | Do NOT |
57
+ | --- | --- |
58
+ | Enumerate stakeholder positions for the issue | Create the council group (council-creator) |
59
+ | Pick one **real person** per position | Drive or moderate the discussion (council-creator) |
60
+ | Produce `seesWhatOthersDont` per person | Write memory (settle phase, via `memory` skill) |
61
+ | Emit voice (per-turn instructions) per person | Parse / extract materials (orchestrator tool-skills) |
62
+ | Hand the cast to cloud `/councils/plan` for grounding | Run search verification / supply quotes yourself (cloud does it) |
63
+ | Read `droppedCast[]` and substitute for dropped people | Invent people, quotes, or citations — ever |
64
+
65
+ ## Meta-goal (iron rule — supersedes any "debate" framing)
66
+
67
+ **A discussion is a plurality of viewpoints, not a positive-vs-negative game.**
68
+ Convene people of different identities, professions and stakes; each speaks
69
+ from their own position. If disagreement emerges it is the *natural result* of
70
+ plural perspectives — it is never something you construct. Do **not** hunt for
71
+ "an opposing side"; a target function of "construct opposition" structurally
72
+ excludes the two most valuable classes of people: **insiders** (dismissed as
73
+ same-camp) and **people who reject the axis entirely** (nowhere to stand on
74
+ it). The UI language is "讨论组" (discussion group), never "吵一架".
75
+
76
+ ## Core procedure
77
+
78
+ ### Step 0 — List stakeholder positions first (not "axes of disagreement")
79
+
80
+ Before picking anyone, enumerate the positions whose duty / expertise / stake
81
+ touches this issue:
82
+
83
+ ```
84
+ 运营执行者 / 出资人 / 监管者 / 同行实践者 / 下游客户 / 一线员工 / 被影响的第三方 …
85
+ ```
86
+
87
+ ### Step 1 — One REAL person per position
88
+
89
+ - Pick the person whose **real public track record** naturally puts them in
90
+ that position. If no fitting famous person exists for a position (e.g. "this
91
+ company's own CTO"), pick a real person who once held the *equivalent*
92
+ position elsewhere (e.g. another rocket company's former CTO).
93
+ - **Never invent a name.** Prefer swapping to a position where a real person
94
+ exists.
95
+ - Do **not** require them to disagree with each other. They may all agree and
96
+ still each fill in a piece the Team Manager cannot see.
97
+ - **Forbidden:** inserting an artificial "opposing side" to manufacture
98
+ conflict.
99
+
100
+ For every person you MUST state `seesWhatOthersDont` — not "which side they
101
+ are on", but "standing here, they can see X that nobody else at the table
102
+ can". This field is the core output of the skill.
103
+
104
+ ### Step 2 — Attach the persona (who arrives at the table)
105
+
106
+ - Enough verifiable public record and a good fit → **real name**
107
+ (`displayName: "Elon Musk"`, `subtitle: "SpaceX CEO"`). Compliance is
108
+ carried by the **disclaimer**, never by renaming — "Elon-style Strategy
109
+ Lens" style abstractions are forbidden (nobody wants to chat with a
110
+ concept). Internal terms (`persona`, `lens`) never surface in UI copy.
111
+ - Otherwise → a role label ("一位持保守立场的航天投资人") — still a person,
112
+ not a concept.
113
+ - `usernameSlug` (**load-bearing — this is the persona-agent's @-handle**):
114
+ ascii `[a-zA-Z0-9_-]`, 3–20 chars, lowercase slug of the person (e.g.
115
+ `elon-musk`). It must NOT start with the reserved `prismer-` segment. Final
116
+ uniqueness (`<slug>-<conv8>` + dedupe suffix) is enforced by the cloud at
117
+ convene time — you only produce the candidate slug. **Why it MUST be ASCII:**
118
+ once instantiated (M2), the persona-agent is addressed in the group **only**
119
+ by `@<usernameSlug>`. The mention router (`agent-dispatcher.ts` `MENTION_RE`)
120
+ is strict ASCII — a bare `@中文displayName` matches nothing and is silently
121
+ dropped, so a non-ASCII slug would leave the persona **unreachable** (0
122
+ dispatches, the exact 0/5 failure). The Chinese `displayName` is display-only;
123
+ it never routes.
124
+
125
+ ### Step 2.5 — Search grounding is done by the CLOUD, not by you
126
+
127
+ You **only produce candidates** — position + real person + `seesWhatOthersDont`
128
+ + candidate `usernameSlug`. **Do NOT run search verification yourself and do NOT
129
+ supply any `realCredential` / `whySelected` quotes.** Grounding is performed by
130
+ the cloud `/api/im/councils/plan` handler after you hand over the cast.
131
+
132
+ - **Why cloud, not you (architectural, 04 §2.5):** the anti-fabrication defense
133
+ requires a **verbatim substring of a real search snippet**, checked in code
134
+ against full-text search (`/api/search`). The daemon `web_search` tool you can
135
+ reach routes through `/api/context/load`→`/api/compress`, so it returns
136
+ **LLM-rewritten prose, not the original text** — you physically cannot obtain
137
+ the verbatim snippet the substring check needs. Any quote you write from
138
+ memory would be a fabrication that the cloud check exists to reject.
139
+ - **What the cloud does with your cast:** for each candidate it searches
140
+ `"<displayName> <topic terms>"` and requires the person's name + a topic term
141
+ to co-occur **inside the same sentence** ("some results exist" / "snippet
142
+ contains the keyword" passes off-topic celebrities — 04 §2.5 实测:
143
+ 李开复+商业航天 returned 5 named-but-off-topic hits). Grounded → the persona is
144
+ kept with `groundingSource='searched'` and verbatim quote evidence. **0
145
+ co-occurrence → the person is dropped from the cast** and returned in the plan
146
+ response's `droppedCast[]` — read it and substitute someone else for that
147
+ position (do NOT patch up the quote).
148
+ - **You still MUST NOT invent people.** Pick a real, publicly verifiable person
149
+ for each position (swap positions rather than inventing a name) — but leave the
150
+ evidence to the cloud. Your job ends at "who plausibly sits here"; the cloud
151
+ decides "is this person actually on-topic".
152
+ - **`groundingTerms` (optional but recommended for mixed-language topics):** you
153
+ MAY attach a short `groundingTerms: string[]` per candidate — the topic keywords
154
+ in **the language this person's public record is in** (English for "Elon Musk",
155
+ 中文 for a 中文人物). The cloud grounds against these instead of naively
156
+ tokenizing the question. Without them, a Chinese question ("2026年商业航天进展")
157
+ tokenizes to CJK bigrams that won't match an English-record person → that person
158
+ is wrongly dropped. So for an English-record person on a Chinese topic, supply
159
+ e.g. `["commercial spaceflight", "launch cost"]`.
160
+ - 🚫 **Never use self-critique as fact-checking.** Asked to "verify the
161
+ citations are real", an LLM does not admit it cannot find them — it invents
162
+ a *more specific* fake source ("引自2021年新浪财经专访"). Self-critique is
163
+ allowed only for *structural* checks (two people on one position? invented
164
+ names? missing insider view?), never for factual ones.
165
+
166
+ ### Step 3 — Graceful degradation (three tiers, decided by the CLOUD)
167
+
168
+ > ⚠️ This tiering is applied by the cloud grounding step, not by you — it is
169
+ > shown here so you understand what happens to your candidates. You never set
170
+ > `groundingSource` yourself. In the current implementation a candidate that is
171
+ > not `searched` is returned in `droppedCast[]` for you to substitute.
172
+
173
+ The criterion is "**can it be found by search?**" — programmatically checkable
174
+ — never "does the model know enough?" (unverifiable; models claim they do).
175
+
176
+ | Condition | Strategy | `groundingSource` |
177
+ | --- | --- | --- |
178
+ | Name + topic co-occur in one sentence of a snippet | Use its verbatim substring as the quote | `searched` |
179
+ | Not searchable, but the user supplied materials | Ground the quote in the user's materials | `user_materials` |
180
+ | Neither | **Degrade to a role label** ("一位持保守立场的航天投资人"), quote = null | `role_label` |
181
+
182
+ `role_label` is the most honest tier and the lowest impersonation risk. The
183
+ generator MUST be able to fall to it and MUST NOT fabricate quotes to "stay
184
+ famous". (Legacy tiers `parametric` / `needs_materials` are retired — they
185
+ presumed unverifiable parametric knowledge.)
186
+
187
+ ### Step 4 — Icon acquisition (cloud-executed; you only reference the result)
188
+
189
+ Icon fetching and cropping run as **pure code on the cloud** (Serper image
190
+ search → Content-Type + magic-bytes double gate → aspect-ratio cull only
191
+ (0.6 ≤ ar ≤ 1.7, never re-rank by squareness — Google's own ranking encodes
192
+ "this is the standard portrait") → **top-edge square crop**, no face-detect).
193
+ Your responsibility is only to carry the resulting `iconAssetRef` (an
194
+ `im_assets` id) into the PersonaDef, or `null` when nothing usable was found —
195
+ the frontend degrades to a monogram. Never inline image bytes or hotlink URLs.
196
+
197
+ ### Step 5 — Voice
198
+
199
+ `voice` = the persona-role's speaking instructions (markdown): the position,
200
+ speaking style, and disclaimer discipline. Because persona is now a **role
201
+ instance** (not a mask), `voice` — together with lens and a SOUL 特例档 — is what
202
+ convene bakes into the persona-agent's role template at instantiation, so the
203
+ agent speaks in-character from its **own** session (no one plays five roles).
204
+ Write voice as durable, self-contained instructions the standalone agent can
205
+ carry across turns, not one-off remarks. At convene time the cloud persists it
206
+ onto the persona-agent so later `@<usernameSlug>` follow-ups reuse it.
207
+
208
+ ## Output shape (wire contract — aligns with `POST /api/im/councils/plan` cast)
209
+
210
+ ```jsonc
211
+ {
212
+ "cast": [
213
+ {
214
+ "id": "elon-musk", // slug — also the personaId in council metadata
215
+ "displayName": "Elon Musk", // REAL name; compliance rides the disclaimer
216
+ "subtitle": "SpaceX 创始人兼 CEO", // who this person IS — from primary sources only
217
+ "usernameSlug": "elon-musk", // ascii @-handle 3-20, no 'prismer-'; cloud dedupes — the ONLY way to reach this persona
218
+ "iconAssetRef": null, // im_assets id from the cloud icon service, or null
219
+ "position": "同行实践者(已量产的商业航天创始人)",
220
+ "seesWhatOthersDont": "复用一子级的真实成本曲线与产线爬坡节奏",
221
+ // ⚠️ Do NOT supply realCredential / groundingSource — the cloud fills these
222
+ // from live search after grounding (step 2.5). Omit them from your output.
223
+ "voice": "Speak as a first-principles propulsion founder. Terse. Numbers first. 你是公开资料蒸馏的视角,非本人;Brief 未提供的公司事实一律说「Brief 未提供」。",
224
+ "disclaimer": "公开资料蒸馏视角,非本人"
225
+ }
226
+ ]
227
+ }
228
+ ```
229
+
230
+ No `stance` field (the meta-goal is plural viewpoints, not sides). No `lens`
231
+ field (a stance is the runtime product of `facts × issue`, not a stored
232
+ attribute). Input: `{ brief, requestedPersonas?, n? }` (default n = 3–5).
233
+
234
+ ## Iron principle: persona = lens, Brief = facts (负控 N8)
235
+
236
+ A persona **never carries company facts of its own**. Everything about the
237
+ company comes from the Council Brief the orchestrator assembled. If a persona
238
+ is asked to assert a company fact the Brief does not provide, it must say
239
+ "Brief 未提供" or mark `needsVerification` — never improvise. This is the
240
+ architectural cure for "stylized bubbles making things up", not a disclaimer.
241
+ Bake this discipline into every `voice` you emit.
242
+
243
+ At settle, `council-creator` turns this discipline into a **wire contract**: the
244
+ report's `claims[]` each carry `sourceRefs[]` (the real material a fact stands
245
+ on) + `needsVerification`, and unanswerable facts land in `gaps[]`. So your
246
+ `voice` must instruct the persona to speak in **grounded, attributable claims**
247
+ — tie each factual statement to the Brief fact it uses, and say "缺数据" (→
248
+ `needsVerification=true`, `sourceRefs=[]`) rather than inventing a number, so
249
+ council-creator can emit an honest structured report downstream.
250
+
251
+ ## Generator-level eval
252
+
253
+ Eval judges the **generator** (input: a Brief; assertions over the cast as a
254
+ set), never a single persona. Code-enforceable oracles are the two grounding
255
+ checks (substring + same-sentence co-occurrence); the set-level assertions
256
+ below are eval judgements (semantic classification):
257
+
258
+ | Assertion | Criterion |
259
+ | --- | --- |
260
+ | Positions distinct | N personas occupy N different stakeholder positions; no two share one |
261
+ | Insider view present | ≥1 person sits where outsiders cannot see (operator / front-line / former insider) |
262
+ | No fabricated people | every `displayName` is real and publicly verifiable (`realCredential` non-empty) |
263
+ | Risk coverage | cast covers ≥3 of: capital / tech / market / org / compliance |
264
+ | Grounding real | every quote is a snippet substring + same-sentence co-occurrence (code check) |
265
+ | Brief boundary | no persona asserts company facts beyond the Brief |
266
+ | Honest degradation | unsearchable → `role_label`, never a fabricated quote |
267
+
268
+ ## Promote escape hatch
269
+
270
+ An exceptionally good cast can be saved as a **`persona-pack` skill** (static
271
+ snapshot, `metadata.category: council`, `personaPolicy: public_distillation`,
272
+ `disclaimerRequired: true`) and published to the marketplace for fork / rate /
273
+ compose. This is a third, non-default path — the default is always fresh
274
+ generation against the current Brief.
275
+
276
+ ## Configuration
277
+
278
+ **N/A.** This skill declares no `config:` block. Grounding credentials
279
+ (search API keys) live cloud-side as Nacos global config consumed by the
280
+ `/api/im/councils/plan` handler and `/api/search` — they are never
281
+ agent-bound, so there is nothing for the skill-config binding system to carry
282
+ (product204/09 boundary ruling, CONFLICT-7).
283
+
284
+ ## Anti-patterns
285
+
286
+ - ❌ Inventing a person because a position "needs" someone famous (the
287
+ documented failure: `Will Smith` as Relativity's CEO — the real CEO is Tim
288
+ Ellis). Swap positions instead.
289
+ - ❌ Filling the cast with five competitor CEOs (letting competitors judge
290
+ your valuation) — that is the retired adversarial framing.
291
+ - ❌ Writing quotes from memory, or "verifying" them by self-critique.
292
+ - ❌ Renaming a real person into a concept ("工程激进视角") to dodge
293
+ compliance — the disclaimer carries compliance.
294
+ - ❌ Emitting `stance` / picking a side for anyone.
295
+ - ❌ Creating the group, posting messages, or driving rounds — hand the cast
296
+ to council-creator.