opencode-skills-collection 3.1.0 → 3.1.1

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 (277) hide show
  1. package/bundled-skills/.antigravity-install-manifest.json +84 -1
  2. package/bundled-skills/android-ui-journey-testing/SKILL.md +191 -0
  3. package/bundled-skills/ask-matt/SKILL.md +92 -0
  4. package/bundled-skills/bugs-are-annoying/SKILL.md +137 -0
  5. package/bundled-skills/codebase-design/DEEPENING.md +37 -0
  6. package/bundled-skills/codebase-design/DESIGN-IT-TWICE.md +44 -0
  7. package/bundled-skills/codebase-design/SKILL.md +145 -0
  8. package/bundled-skills/competitor-analysis/LICENSE.txt +21 -0
  9. package/bundled-skills/competitor-analysis/SKILL.md +434 -0
  10. package/bundled-skills/competitor-analysis/references/battle-card-subagent.md +127 -0
  11. package/bundled-skills/competitor-analysis/references/battle-card.md +91 -0
  12. package/bundled-skills/competitor-analysis/references/example-research.md +130 -0
  13. package/bundled-skills/competitor-analysis/references/report-template.html +127 -0
  14. package/bundled-skills/competitor-analysis/references/research-patterns.md +217 -0
  15. package/bundled-skills/competitor-analysis/references/workflow.md +434 -0
  16. package/bundled-skills/competitor-analysis/scripts/capture_screenshots.mjs +142 -0
  17. package/bundled-skills/competitor-analysis/scripts/compile_report.mjs +929 -0
  18. package/bundled-skills/competitor-analysis/scripts/extract_vs_names.mjs +140 -0
  19. package/bundled-skills/competitor-analysis/scripts/gate_candidates.mjs +194 -0
  20. package/bundled-skills/competitor-analysis/scripts/list_urls.mjs +90 -0
  21. package/bundled-skills/competitor-analysis/scripts/md_utils.mjs +50 -0
  22. package/bundled-skills/competitor-analysis/scripts/merge_partials.mjs +291 -0
  23. package/bundled-skills/competitor-analysis/scripts/package.json +6 -0
  24. package/bundled-skills/design-it/3d-ui/SKILL.md +259 -0
  25. package/bundled-skills/design-it/SKILL.md +170 -0
  26. package/bundled-skills/design-it/ai-native-ui/SKILL.md +295 -0
  27. package/bundled-skills/design-it/aurora-ui/SKILL.md +307 -0
  28. package/bundled-skills/design-it/bento-ui/SKILL.md +314 -0
  29. package/bundled-skills/design-it/brutalism/SKILL.md +270 -0
  30. package/bundled-skills/design-it/brutalist-typography/SKILL.md +287 -0
  31. package/bundled-skills/design-it/card-based-design/SKILL.md +262 -0
  32. package/bundled-skills/design-it/claymorphism/SKILL.md +287 -0
  33. package/bundled-skills/design-it/color-blocking/SKILL.md +278 -0
  34. package/bundled-skills/design-it/command-center-ui/SKILL.md +345 -0
  35. package/bundled-skills/design-it/cyber-y2k/SKILL.md +312 -0
  36. package/bundled-skills/design-it/cyberpunk-ui/SKILL.md +262 -0
  37. package/bundled-skills/design-it/dark-mode/SKILL.md +289 -0
  38. package/bundled-skills/design-it/dashboard-design/SKILL.md +331 -0
  39. package/bundled-skills/design-it/data-dense-design/SKILL.md +322 -0
  40. package/bundled-skills/design-it/duotone-design/SKILL.md +248 -0
  41. package/bundled-skills/design-it/editorial-design/SKILL.md +328 -0
  42. package/bundled-skills/design-it/flat-design/SKILL.md +221 -0
  43. package/bundled-skills/design-it/flat-design-2/SKILL.md +240 -0
  44. package/bundled-skills/design-it/floating-ui/SKILL.md +299 -0
  45. package/bundled-skills/design-it/frutiger-aero/SKILL.md +274 -0
  46. package/bundled-skills/design-it/glassmorphism/SKILL.md +272 -0
  47. package/bundled-skills/design-it/gradient-design/SKILL.md +309 -0
  48. package/bundled-skills/design-it/high-contrast/SKILL.md +288 -0
  49. package/bundled-skills/design-it/holographic-ui/SKILL.md +310 -0
  50. package/bundled-skills/design-it/isometric-design/SKILL.md +228 -0
  51. package/bundled-skills/design-it/layered-design/SKILL.md +247 -0
  52. package/bundled-skills/design-it/material-design/SKILL.md +275 -0
  53. package/bundled-skills/design-it/maximalism/SKILL.md +297 -0
  54. package/bundled-skills/design-it/minimalism/SKILL.md +267 -0
  55. package/bundled-skills/design-it/monochromatic-ui/SKILL.md +296 -0
  56. package/bundled-skills/design-it/neo-brutalism/SKILL.md +270 -0
  57. package/bundled-skills/design-it/neumorphism/SKILL.md +248 -0
  58. package/bundled-skills/design-it/retro-design/SKILL.md +283 -0
  59. package/bundled-skills/design-it/retro-futurism/SKILL.md +259 -0
  60. package/bundled-skills/design-it/sci-fi-interface/SKILL.md +309 -0
  61. package/bundled-skills/design-it/skeuomorphism/SKILL.md +280 -0
  62. package/bundled-skills/design-it/soft-pastel/SKILL.md +307 -0
  63. package/bundled-skills/design-it/spatial-computing-ui/SKILL.md +300 -0
  64. package/bundled-skills/design-it/spatial-design/SKILL.md +268 -0
  65. package/bundled-skills/design-it/swiss-design/SKILL.md +293 -0
  66. package/bundled-skills/design-it/synthwave/SKILL.md +257 -0
  67. package/bundled-skills/design-it/tile-design/SKILL.md +297 -0
  68. package/bundled-skills/design-it/typography-first/SKILL.md +247 -0
  69. package/bundled-skills/design-it/vaporwave/SKILL.md +331 -0
  70. package/bundled-skills/design-it/vibrant-maximalism/SKILL.md +291 -0
  71. package/bundled-skills/design-it/widget-based-design/SKILL.md +274 -0
  72. package/bundled-skills/design-it/y2k-design/SKILL.md +268 -0
  73. package/bundled-skills/diagnosing-bugs/SKILL.md +165 -0
  74. package/bundled-skills/diagnosing-bugs/scripts/hitl-loop.template.sh +41 -0
  75. package/bundled-skills/docs/contributors/skill-scoring.md +235 -0
  76. package/bundled-skills/docs/integrations/jetski-cortex.md +3 -3
  77. package/bundled-skills/docs/integrations/jetski-gemini-loader/README.md +1 -1
  78. package/bundled-skills/docs/maintainers/repo-growth-seo.md +3 -3
  79. package/bundled-skills/docs/maintainers/skills-update-guide.md +1 -1
  80. package/bundled-skills/docs/users/bundles.md +1 -1
  81. package/bundled-skills/docs/users/claude-code-skills.md +1 -1
  82. package/bundled-skills/docs/users/gemini-cli-skills.md +1 -1
  83. package/bundled-skills/docs/users/getting-started.md +1 -1
  84. package/bundled-skills/docs/users/kiro-integration.md +1 -1
  85. package/bundled-skills/docs/users/usage.md +4 -4
  86. package/bundled-skills/docs/users/visual-guide.md +4 -4
  87. package/bundled-skills/domain-modeling/ADR-FORMAT.md +47 -0
  88. package/bundled-skills/domain-modeling/CONTEXT-FORMAT.md +60 -0
  89. package/bundled-skills/domain-modeling/SKILL.md +105 -0
  90. package/bundled-skills/grill-me/SKILL.md +36 -0
  91. package/bundled-skills/grill-with-docs/SKILL.md +36 -0
  92. package/bundled-skills/grilling/SKILL.md +39 -0
  93. package/bundled-skills/handoff/SKILL.md +45 -0
  94. package/bundled-skills/image-generator/.env.example +7 -0
  95. package/bundled-skills/image-generator/SKILL.md +509 -0
  96. package/bundled-skills/improve-codebase-architecture/HTML-REPORT.md +123 -0
  97. package/bundled-skills/improve-codebase-architecture/SKILL.md +97 -0
  98. package/bundled-skills/learn/SKILL.md +156 -0
  99. package/bundled-skills/lesson-generator/SKILL.md +90 -0
  100. package/bundled-skills/llm-council/.env.example +7 -0
  101. package/bundled-skills/llm-council/SKILL.md +602 -0
  102. package/bundled-skills/loop-library/SKILL.md +205 -0
  103. package/bundled-skills/loop-library/agents/openai.yaml +4 -0
  104. package/bundled-skills/loop-library/references/catalog.md +270 -0
  105. package/bundled-skills/mailtrap-managing-contacts/SKILL.md +112 -0
  106. package/bundled-skills/mailtrap-sending-emails/SKILL.md +167 -0
  107. package/bundled-skills/mailtrap-setting-up-sending-domain/SKILL.md +77 -0
  108. package/bundled-skills/mailtrap-testing-with-sandbox/SKILL.md +110 -0
  109. package/bundled-skills/prototype/LOGIC.md +79 -0
  110. package/bundled-skills/prototype/SKILL.md +62 -0
  111. package/bundled-skills/prototype/UI.md +112 -0
  112. package/bundled-skills/setup-matt-pocock-skills/SKILL.md +158 -0
  113. package/bundled-skills/setup-matt-pocock-skills/domain.md +51 -0
  114. package/bundled-skills/setup-matt-pocock-skills/issue-tracker-github.md +34 -0
  115. package/bundled-skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +35 -0
  116. package/bundled-skills/setup-matt-pocock-skills/issue-tracker-local.md +19 -0
  117. package/bundled-skills/setup-matt-pocock-skills/triage-labels.md +15 -0
  118. package/bundled-skills/survey-generator/LICENSE +21 -0
  119. package/bundled-skills/survey-generator/SKILL.md +143 -0
  120. package/bundled-skills/survey-generator/build_artifact.py +208 -0
  121. package/bundled-skills/survey-generator/examples/agentic-engineering/research_bundle.json +1196 -0
  122. package/bundled-skills/survey-generator/examples/agentic-engineering/survey.html +706 -0
  123. package/bundled-skills/survey-generator/style_spec.json +85 -0
  124. package/bundled-skills/survey-generator/templates/research_bundle_template.json +69 -0
  125. package/bundled-skills/tdd/SKILL.md +139 -0
  126. package/bundled-skills/tdd/mocking.md +59 -0
  127. package/bundled-skills/tdd/refactoring.md +10 -0
  128. package/bundled-skills/tdd/tests.md +61 -0
  129. package/bundled-skills/teach/GLOSSARY-FORMAT.md +35 -0
  130. package/bundled-skills/teach/LEARNING-RECORD-FORMAT.md +46 -0
  131. package/bundled-skills/teach/MISSION-FORMAT.md +31 -0
  132. package/bundled-skills/teach/RESOURCES-FORMAT.md +32 -0
  133. package/bundled-skills/teach/SKILL.md +169 -0
  134. package/bundled-skills/to-issues/SKILL.md +115 -0
  135. package/bundled-skills/to-prd/SKILL.md +104 -0
  136. package/bundled-skills/tools-page-seo-optimizer/SKILL.md +616 -0
  137. package/bundled-skills/triage/AGENT-BRIEF.md +207 -0
  138. package/bundled-skills/triage/OUT-OF-SCOPE.md +105 -0
  139. package/bundled-skills/triage/SKILL.md +143 -0
  140. package/bundled-skills/vibecode-production-qa-validator/SKILL.md +371 -141
  141. package/bundled-skills/wiki-builder/SKILL.md +157 -0
  142. package/bundled-skills/wiki-builder/agents/openai.yaml +5 -0
  143. package/bundled-skills/wiki-builder/references/wiki-flavors.md +98 -0
  144. package/bundled-skills/wiki-builder/scripts/init_wiki.sh +105 -0
  145. package/bundled-skills/wiki-builder/templates/index.md +20 -0
  146. package/bundled-skills/wiki-builder/templates/maintenance-log.md +7 -0
  147. package/bundled-skills/wiki-builder/templates/prompts/compile-concept-page.md +12 -0
  148. package/bundled-skills/wiki-builder/templates/prompts/compile-index.md +11 -0
  149. package/bundled-skills/wiki-builder/templates/prompts/compile-source-page.md +12 -0
  150. package/bundled-skills/wiki-builder/templates/prompts/lint-wiki.md +10 -0
  151. package/bundled-skills/wiki-builder/templates/prompts/query-and-file.md +11 -0
  152. package/bundled-skills/wiki-builder/templates/sources.md +9 -0
  153. package/bundled-skills/wiki-builder/templates/wiki.config.md +53 -0
  154. package/bundled-skills/writing-great-skills/GLOSSARY.md +181 -0
  155. package/bundled-skills/writing-great-skills/SKILL.md +111 -0
  156. package/bundled-skills/yao-meta-skill/SKILL.md +86 -0
  157. package/bundled-skills/yao-meta-skill/agents/interface.yaml +26 -0
  158. package/bundled-skills/yao-meta-skill/manifest.json +24 -0
  159. package/bundled-skills/yao-meta-skill/references/artifact-design-doctrine.md +49 -0
  160. package/bundled-skills/yao-meta-skill/references/authoring-discipline.md +78 -0
  161. package/bundled-skills/yao-meta-skill/references/autonomous-adaptation.md +65 -0
  162. package/bundled-skills/yao-meta-skill/references/distribution-registry-method.md +60 -0
  163. package/bundled-skills/yao-meta-skill/references/eval-playbook.md +69 -0
  164. package/bundled-skills/yao-meta-skill/references/gate-selection.md +68 -0
  165. package/bundled-skills/yao-meta-skill/references/governance.md +134 -0
  166. package/bundled-skills/yao-meta-skill/references/human-review-template.md +54 -0
  167. package/bundled-skills/yao-meta-skill/references/intent-dialogue.md +138 -0
  168. package/bundled-skills/yao-meta-skill/references/iteration-philosophy.md +30 -0
  169. package/bundled-skills/yao-meta-skill/references/non-skill-decision-tree.md +39 -0
  170. package/bundled-skills/yao-meta-skill/references/operating-modes.md +107 -0
  171. package/bundled-skills/yao-meta-skill/references/output-eval-method.md +113 -0
  172. package/bundled-skills/yao-meta-skill/references/output-quality-risk.md +41 -0
  173. package/bundled-skills/yao-meta-skill/references/output-visual-quality.md +53 -0
  174. package/bundled-skills/yao-meta-skill/references/packaging-contracts.md +70 -0
  175. package/bundled-skills/yao-meta-skill/references/pattern-extraction-doctrine.md +76 -0
  176. package/bundled-skills/yao-meta-skill/references/platform-capability-matrix.md +49 -0
  177. package/bundled-skills/yao-meta-skill/references/prompt-engineering-doctrine.md +76 -0
  178. package/bundled-skills/yao-meta-skill/references/qa-ladder.md +57 -0
  179. package/bundled-skills/yao-meta-skill/references/reference-scan.md +126 -0
  180. package/bundled-skills/yao-meta-skill/references/regression-cause-taxonomy.md +80 -0
  181. package/bundled-skills/yao-meta-skill/references/resource-boundaries.md +120 -0
  182. package/bundled-skills/yao-meta-skill/references/review-studio-method.md +87 -0
  183. package/bundled-skills/yao-meta-skill/references/review-waiver-method.md +76 -0
  184. package/bundled-skills/yao-meta-skill/references/runtime-conformance-method.md +21 -0
  185. package/bundled-skills/yao-meta-skill/references/skill-archetypes.md +86 -0
  186. package/bundled-skills/yao-meta-skill/references/skill-atlas-method.md +35 -0
  187. package/bundled-skills/yao-meta-skill/references/skill-engineering-method.md +210 -0
  188. package/bundled-skills/yao-meta-skill/references/skill-ir-method.md +41 -0
  189. package/bundled-skills/yao-meta-skill/references/skillops-decision-policy.md +53 -0
  190. package/bundled-skills/yao-meta-skill/references/systems-thinking-doctrine.md +75 -0
  191. package/bundled-skills/yao-meta-skill/references/telemetry-drift-method.md +182 -0
  192. package/bundled-skills/yao-meta-skill/references/trust-security-method.md +79 -0
  193. package/bundled-skills/yao-meta-skill/references/user-memory-policy.md +35 -0
  194. package/bundled-skills/youtube-notetaker/SKILL.md +209 -0
  195. package/bundled-skills/youtube-notetaker/reference/artifact.html +269 -0
  196. package/bundled-skills/youtube-notetaker/scripts/contact_sheet.py +53 -0
  197. package/bundled-skills/youtube-notetaker/scripts/detect_slides.sh +19 -0
  198. package/bundled-skills/youtube-notetaker/scripts/download.sh +24 -0
  199. package/bundled-skills/youtube-notetaker/scripts/extract_slides.py +43 -0
  200. package/bundled-skills/youtube-notetaker/scripts/serve.py +173 -0
  201. package/bundled-skills/youtube-notetaker/scripts/setup.sh +27 -0
  202. package/bundled-skills/youtube-notetaker/scripts/verify.sh +31 -0
  203. package/bundled-skills/youtube-notetaker/scripts/vtt_to_transcript.py +59 -0
  204. package/bundled-skills/youtube-notetaker/scripts/write_library_item.py +69 -0
  205. package/package.json +1 -1
  206. package/skills_index.json +1956 -286
  207. package/bundled-skills/ai-md/SKILL.md +0 -523
  208. package/bundled-skills/atlas-contract/SKILL.md +0 -650
  209. package/bundled-skills/busybox-on-windows/SKILL.md +0 -40
  210. package/bundled-skills/monte-carlo-prevent/SKILL.md +0 -257
  211. package/bundled-skills/monte-carlo-prevent/references/TROUBLESHOOTING.md +0 -23
  212. package/bundled-skills/monte-carlo-prevent/references/parameters.md +0 -32
  213. package/bundled-skills/monte-carlo-prevent/references/workflows.md +0 -478
  214. package/bundled-skills/monte-carlo-push-ingestion/SKILL.md +0 -372
  215. package/bundled-skills/monte-carlo-push-ingestion/references/anomaly-detection.md +0 -87
  216. package/bundled-skills/monte-carlo-push-ingestion/references/custom-lineage.md +0 -203
  217. package/bundled-skills/monte-carlo-push-ingestion/references/direct-http-api.md +0 -207
  218. package/bundled-skills/monte-carlo-push-ingestion/references/prerequisites.md +0 -150
  219. package/bundled-skills/monte-carlo-push-ingestion/references/push-lineage.md +0 -160
  220. package/bundled-skills/monte-carlo-push-ingestion/references/push-metadata.md +0 -158
  221. package/bundled-skills/monte-carlo-push-ingestion/references/push-query-logs.md +0 -219
  222. package/bundled-skills/monte-carlo-push-ingestion/references/validation.md +0 -257
  223. package/bundled-skills/monte-carlo-push-ingestion/scripts/sample_verify.py +0 -357
  224. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_and_push_lineage.py +0 -70
  225. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_and_push_metadata.py +0 -65
  226. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_and_push_query_logs.py +0 -70
  227. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_lineage.py +0 -214
  228. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_metadata.py +0 -160
  229. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_query_logs.py +0 -164
  230. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/push_lineage.py +0 -198
  231. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/push_metadata.py +0 -193
  232. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/push_query_logs.py +0 -207
  233. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/collect_and_push_metadata.py +0 -71
  234. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/collect_and_push_query_logs.py +0 -64
  235. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/collect_metadata.py +0 -253
  236. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/collect_query_logs.py +0 -149
  237. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/push_metadata.py +0 -190
  238. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/push_query_logs.py +0 -208
  239. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_and_push_lineage.py +0 -83
  240. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_and_push_metadata.py +0 -77
  241. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_and_push_query_logs.py +0 -83
  242. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_lineage.py +0 -240
  243. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_metadata.py +0 -212
  244. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_query_logs.py +0 -204
  245. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/push_lineage.py +0 -192
  246. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/push_metadata.py +0 -178
  247. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/push_query_logs.py +0 -200
  248. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_and_push_lineage.py +0 -119
  249. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_and_push_metadata.py +0 -119
  250. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_and_push_query_logs.py +0 -117
  251. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_lineage.py +0 -265
  252. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_metadata.py +0 -313
  253. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_query_logs.py +0 -284
  254. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/push_lineage.py +0 -309
  255. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/push_metadata.py +0 -245
  256. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/push_query_logs.py +0 -255
  257. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_and_push_lineage.py +0 -78
  258. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_and_push_metadata.py +0 -80
  259. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_and_push_query_logs.py +0 -88
  260. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_lineage.py +0 -235
  261. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_metadata.py +0 -219
  262. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_query_logs.py +0 -239
  263. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/push_lineage.py +0 -178
  264. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/push_metadata.py +0 -178
  265. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/push_query_logs.py +0 -196
  266. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_and_push_lineage.py +0 -154
  267. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_and_push_metadata.py +0 -137
  268. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_and_push_query_logs.py +0 -137
  269. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_lineage.py +0 -349
  270. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_metadata.py +0 -329
  271. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_query_logs.py +0 -254
  272. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/push_lineage.py +0 -307
  273. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/push_metadata.py +0 -228
  274. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/push_query_logs.py +0 -248
  275. package/bundled-skills/monte-carlo-push-ingestion/scripts/test_template_sdk_usage.py +0 -340
  276. package/bundled-skills/skill-optimizer/SKILL.md +0 -271
  277. package/bundled-skills/using-superpowers/SKILL.md +0 -98
@@ -0,0 +1,602 @@
1
+ ---
2
+ name: llm-council
3
+ description: "Run Fireworks-hosted open-weight model councils that compare responses and synthesize a final answer."
4
+ allowed-tools: Read, Write, Bash, AskUserQuestion
5
+ category: "ai-agents"
6
+ risk: "safe"
7
+ source: "official"
8
+ source_repo: "dair-ai/dair-academy-plugins"
9
+ source_type: "official"
10
+ date_added: "2026-06-19"
11
+ author: "DAIR.AI"
12
+ license: "MIT"
13
+ license_source: "https://github.com/dair-ai/dair-academy-plugins/blob/main/README.md#license"
14
+ tags:
15
+ - dair-academy
16
+ - ai
17
+ - workflow
18
+ tools:
19
+ - claude-code
20
+ - codex-cli
21
+ - cursor
22
+ ---
23
+
24
+ # LLM Council (Fireworks AI)
25
+
26
+ ## When to Use
27
+
28
+ Use when this workflow matches the user request: Use this skill for its documented workflow.
29
+
30
+
31
+ _Source: [dair-ai/dair-academy-plugins](https://github.com/dair-ai/dair-academy-plugins) (MIT)._
32
+
33
+ This skill implements Karpathy's LLM Council concept where multiple open-weight LLMs deliberate on a query, powered entirely by Fireworks AI:
34
+
35
+ 1. **Phase 1**: All models respond to the query independently (parallel)
36
+ 2. **Phase 2**: Models rank each other's anonymized responses
37
+ 3. **Phase 3**: A Chairman LLM synthesizes the final answer
38
+
39
+ All inference runs through **Fireworks AI** using open-weight models. The speed and pricing of Fireworks makes it practical to run multi-model deliberation that would be slow or expensive on other providers.
40
+
41
+ ## CRITICAL RULES
42
+
43
+ 1. **ALWAYS use AskUserQuestion** to let the user select council models (multiselect) and the Chairman model
44
+ 2. **ALWAYS save raw responses to files** - never summarize or truncate API outputs
45
+ 3. **ALWAYS show full transparency** - display all individual responses, all rankings, AND the final synthesis
46
+ 4. **NEVER skip the ranking phase** - it is essential to the council deliberation process
47
+ 5. **Read from files for display** - ensures content is shown unmodified
48
+ 6. **ALWAYS display the final output to the user** after Phase 3 completes
49
+
50
+ ## Pre-flight Check
51
+
52
+ Before running any phase, verify the Fireworks API key is set:
53
+
54
+ ```bash
55
+ if [ -z "$FIREWORKS_API_KEY" ]; then
56
+ echo "ERROR: FIREWORKS_API_KEY is not set."
57
+ echo "Create a Fireworks AI account at: https://fireworks.ai/"
58
+ echo "Then export it in your shell profile (~/.zshrc or ~/.bashrc):"
59
+ echo ' export FIREWORKS_API_KEY="your_api_key_here"'
60
+ exit 1
61
+ fi
62
+ echo "FIREWORKS_API_KEY is set."
63
+ ```
64
+
65
+ ## Available Models
66
+
67
+ Present these options to the user via AskUserQuestion (multiselect):
68
+
69
+ | Model | Fireworks ID | Provider |
70
+ |-------|-------------|----------|
71
+ | GLM 5 | accounts/fireworks/models/glm-5 | Z.ai |
72
+ | DeepSeek V3.1 | accounts/fireworks/models/deepseek-v3p1 | DeepSeek |
73
+ | DeepSeek V3.2 | accounts/fireworks/models/deepseek-v3p2 | DeepSeek |
74
+ | MiniMax M2.1 | accounts/fireworks/models/minimax-m2p1 | MiniMax |
75
+ | Kimi K2.5 | accounts/fireworks/models/kimi-k2p5 | Moonshot |
76
+ | Qwen3 235B | accounts/fireworks/models/qwen3-235b-a22b | Alibaba |
77
+ | Llama 4 Maverick | accounts/fireworks/models/llama4-maverick-instruct-basic | Meta |
78
+
79
+ ## Workflow
80
+
81
+ ### Step 1: Gather User Input
82
+
83
+ Use AskUserQuestion to get:
84
+ 1. The query/question for the council (or accept it from the conversation)
85
+ 2. Which models to include (multiselect, recommend 3-5 models)
86
+ 3. Which model should be the Chairman (single select)
87
+
88
+ Note: AskUserQuestion supports max 4 options per question. Since there are 7 models, split model selection across two questions, or show the most popular 4 and let the user type "Other" for the rest. A good default is to show 4 models in the first question and note the others are available via "Other". Rotate which models are shown based on variety.
89
+
90
+ Example AskUserQuestion for model selection (show 4, mention others):
91
+ ```
92
+ question: "Which models should participate in the LLM Council? (Also available via Other: Llama 4 Maverick, Qwen3 235B, GLM 5)"
93
+ header: "Models"
94
+ multiSelect: true
95
+ options:
96
+ - label: "DeepSeek V3.2"
97
+ description: "DeepSeek's newest and most capable model"
98
+ - label: "MiniMax M2.1"
99
+ description: "MiniMax's strong open-weight model"
100
+ - label: "Kimi K2.5"
101
+ description: "Moonshot's strong open-weight model"
102
+ - label: "DeepSeek V3.1"
103
+ description: "DeepSeek's proven reasoning model"
104
+ ```
105
+
106
+ Example AskUserQuestion for chairman:
107
+ ```
108
+ question: "Which model should be the Chairman (synthesizes the final answer)?"
109
+ header: "Chairman"
110
+ multiSelect: false
111
+ options:
112
+ - label: "DeepSeek V3.2 (Recommended)"
113
+ description: "Newest DeepSeek, strong at comprehensive analysis"
114
+ - label: "GLM 5"
115
+ description: "Strong reasoning for synthesis"
116
+ - label: "Kimi K2.5"
117
+ description: "Strong at structured synthesis"
118
+ - label: "MiniMax M2.1"
119
+ description: "Strong open-weight model for synthesis"
120
+ ```
121
+
122
+ ### Model Name to ID Mapping
123
+
124
+ Use this mapping to convert user selections to Fireworks model IDs:
125
+
126
+ ```python
127
+ MODEL_MAP = {
128
+ "GLM 5": "accounts/fireworks/models/glm-5",
129
+ "DeepSeek V3.1": "accounts/fireworks/models/deepseek-v3p1",
130
+ "DeepSeek V3.2": "accounts/fireworks/models/deepseek-v3p2",
131
+ "MiniMax M2.1": "accounts/fireworks/models/minimax-m2p1",
132
+ "Kimi K2.5": "accounts/fireworks/models/kimi-k2p5",
133
+ "Qwen3 235B": "accounts/fireworks/models/qwen3-235b-a22b",
134
+ "Llama 4 Maverick": "accounts/fireworks/models/llama4-maverick-instruct-basic",
135
+ }
136
+ ```
137
+
138
+ ### Step 2: Run Phase 1 - Individual Responses
139
+
140
+ After gathering input, run this script to get responses from all selected models in parallel:
141
+
142
+ ```bash
143
+ QUERY="USER_QUERY_HERE"
144
+ MODELS='["accounts/fireworks/models/glm-5", "accounts/fireworks/models/deepseek-v3p1"]'
145
+
146
+ python3 << 'PYEOF'
147
+ import os
148
+ import json
149
+ import requests
150
+ import time
151
+ from concurrent.futures import ThreadPoolExecutor, as_completed
152
+
153
+ FIREWORKS_API_KEY = os.environ.get("FIREWORKS_API_KEY")
154
+ API_URL = "https://api.fireworks.ai/inference/v1/chat/completions"
155
+
156
+ QUERY = os.environ.get("QUERY", "")
157
+ MODELS = json.loads(os.environ.get("MODELS", "[]"))
158
+
159
+ # Create session directory
160
+ timestamp = time.strftime("%Y%m%d-%H%M%S")
161
+ SESSION_DIR = f"/tmp/llm-council/{timestamp}"
162
+ os.makedirs(SESSION_DIR, exist_ok=True)
163
+
164
+ # Save config
165
+ config = {"query": QUERY, "models": MODELS, "timestamp": timestamp}
166
+ with open(f"{SESSION_DIR}/config.json", "w") as f:
167
+ json.dump(config, f, indent=2)
168
+
169
+ def call_model(model_id, query):
170
+ """Call a single model via Fireworks AI"""
171
+ try:
172
+ start = time.time()
173
+ response = requests.post(
174
+ API_URL,
175
+ headers={
176
+ "Authorization": f"Bearer {FIREWORKS_API_KEY}",
177
+ "Content-Type": "application/json"
178
+ },
179
+ json={
180
+ "model": model_id,
181
+ "messages": [
182
+ {"role": "system", "content": "You are participating in an LLM council deliberation. Provide your best, most thoughtful response to the query. Be comprehensive but focused."},
183
+ {"role": "user", "content": query}
184
+ ],
185
+ "max_tokens": 4000,
186
+ "temperature": 1
187
+ },
188
+ timeout=120
189
+ )
190
+ response.raise_for_status()
191
+ elapsed = time.time() - start
192
+ data = response.json()
193
+ usage = data.get("usage", {})
194
+ return {
195
+ "success": True,
196
+ "content": data["choices"][0]["message"]["content"],
197
+ "model": model_id,
198
+ "latency_seconds": round(elapsed, 2),
199
+ "tokens": {
200
+ "prompt": usage.get("prompt_tokens", 0),
201
+ "completion": usage.get("completion_tokens", 0),
202
+ "total": usage.get("total_tokens", 0)
203
+ }
204
+ }
205
+ except Exception as e:
206
+ return {
207
+ "success": False,
208
+ "content": f"[ERROR: {str(e)}]",
209
+ "model": model_id,
210
+ "latency_seconds": 0,
211
+ "tokens": {"prompt": 0, "completion": 0, "total": 0}
212
+ }
213
+
214
+ print(f"\n{'='*60}")
215
+ print("PHASE 1: Collecting Individual Responses")
216
+ print(f"{'='*60}")
217
+ print(f"Query: {QUERY[:200]}...")
218
+ print(f"Models: {', '.join([m.split('/')[-1] for m in MODELS])}")
219
+ print(f"Session: {SESSION_DIR}")
220
+ print()
221
+
222
+ # Parallel execution
223
+ results = {}
224
+ with ThreadPoolExecutor(max_workers=len(MODELS)) as executor:
225
+ futures = {executor.submit(call_model, m, QUERY): m for m in MODELS}
226
+ for future in as_completed(futures):
227
+ model = futures[future]
228
+ result = future.result()
229
+ results[model] = result
230
+ status = "OK" if result["success"] else "FAILED"
231
+ latency = f"{result['latency_seconds']}s" if result["success"] else "N/A"
232
+ print(f" [{status}] {model.split('/')[-1]} ({latency})")
233
+
234
+ # Save raw results
235
+ with open(f"{SESSION_DIR}/phase1_responses.json", "w") as f:
236
+ json.dump(results, f, indent=2)
237
+
238
+ print(f"\nPhase 1 complete. Results saved to: {SESSION_DIR}/phase1_responses.json")
239
+ print(f"SESSION_DIR={SESSION_DIR}")
240
+ PYEOF
241
+ ```
242
+
243
+ ### Step 3: Run Phase 2 - Cross-Model Ranking
244
+
245
+ Each model reviews and ranks the anonymized responses from Phase 1:
246
+
247
+ ```bash
248
+ SESSION_DIR="/tmp/llm-council/TIMESTAMP_HERE"
249
+
250
+ python3 << 'PYEOF'
251
+ import os
252
+ import json
253
+ import requests
254
+ import time
255
+ from concurrent.futures import ThreadPoolExecutor, as_completed
256
+
257
+ FIREWORKS_API_KEY = os.environ.get("FIREWORKS_API_KEY")
258
+ API_URL = "https://api.fireworks.ai/inference/v1/chat/completions"
259
+ SESSION_DIR = os.environ.get("SESSION_DIR")
260
+
261
+ # Load Phase 1 results
262
+ with open(f"{SESSION_DIR}/config.json") as f:
263
+ config = json.load(f)
264
+ with open(f"{SESSION_DIR}/phase1_responses.json") as f:
265
+ phase1_results = json.load(f)
266
+
267
+ QUERY = config["query"]
268
+ MODELS = config["models"]
269
+
270
+ # Create anonymized mapping
271
+ labels = ["A", "B", "C", "D", "E", "F", "G"][:len(MODELS)]
272
+ model_to_label = dict(zip(MODELS, labels))
273
+ label_to_model = {v: k for k, v in model_to_label.items()}
274
+
275
+ # Format anonymized responses
276
+ anonymized_responses = []
277
+ for model_id in MODELS:
278
+ label = model_to_label[model_id]
279
+ content = phase1_results[model_id]["content"]
280
+ anonymized_responses.append(f"=== Response {label} ===\n{content}")
281
+
282
+ anonymized_text = "\n\n".join(anonymized_responses)
283
+
284
+ def get_rankings(model_id, query, anonymized, own_label):
285
+ """Get rankings from a single model"""
286
+ ranking_prompt = f"""You are evaluating responses from multiple AI models to this query:
287
+
288
+ QUERY: {query}
289
+
290
+ Here are the anonymized responses:
291
+
292
+ {anonymized}
293
+
294
+ Please rank these responses from BEST to WORST. For each ranking:
295
+ 1. State the response letter (A, B, C, etc.)
296
+ 2. Give a brief reason (1-2 sentences)
297
+ 3. You may skip ranking your own response (labeled {own_label}) or rank it fairly
298
+
299
+ Format your response EXACTLY as:
300
+ RANKINGS:
301
+ 1. [Letter] - [Brief reason]
302
+ 2. [Letter] - [Brief reason]
303
+ 3. [Letter] - [Brief reason]
304
+ ..."""
305
+
306
+ try:
307
+ start = time.time()
308
+ response = requests.post(
309
+ API_URL,
310
+ headers={
311
+ "Authorization": f"Bearer {FIREWORKS_API_KEY}",
312
+ "Content-Type": "application/json"
313
+ },
314
+ json={
315
+ "model": model_id,
316
+ "messages": [
317
+ {"role": "system", "content": f"You are ranking AI responses objectively. Your own response is labeled '{own_label}'."},
318
+ {"role": "user", "content": ranking_prompt}
319
+ ],
320
+ "max_tokens": 1000,
321
+ "temperature": 1
322
+ },
323
+ timeout=90
324
+ )
325
+ response.raise_for_status()
326
+ elapsed = time.time() - start
327
+ return {
328
+ "success": True,
329
+ "content": response.json()["choices"][0]["message"]["content"],
330
+ "model": model_id,
331
+ "latency_seconds": round(elapsed, 2)
332
+ }
333
+ except Exception as e:
334
+ return {
335
+ "success": False,
336
+ "content": f"[ERROR: {str(e)}]",
337
+ "model": model_id,
338
+ "latency_seconds": 0
339
+ }
340
+
341
+ print(f"\n{'='*60}")
342
+ print("PHASE 2: Cross-Model Ranking")
343
+ print(f"{'='*60}")
344
+ print(f"Label mapping: {json.dumps({v: k.split('/')[-1] for k, v in model_to_label.items()})}")
345
+ print()
346
+
347
+ # Collect rankings from all models in parallel
348
+ rankings = {}
349
+ with ThreadPoolExecutor(max_workers=len(MODELS)) as executor:
350
+ futures = {
351
+ executor.submit(get_rankings, mid, QUERY, anonymized_text, model_to_label[mid]): mid
352
+ for mid in MODELS
353
+ }
354
+ for future in as_completed(futures):
355
+ model = futures[future]
356
+ result = future.result()
357
+ rankings[model] = result
358
+ status = "OK" if result["success"] else "FAILED"
359
+ latency = f"{result['latency_seconds']}s" if result["success"] else "N/A"
360
+ print(f" [{status}] {model.split('/')[-1]} ({latency})")
361
+
362
+ # Save rankings
363
+ output = {
364
+ "label_mapping": label_to_model,
365
+ "model_to_label": model_to_label,
366
+ "rankings": rankings
367
+ }
368
+ with open(f"{SESSION_DIR}/phase2_rankings.json", "w") as f:
369
+ json.dump(output, f, indent=2)
370
+
371
+ print(f"\nPhase 2 complete. Rankings saved to: {SESSION_DIR}/phase2_rankings.json")
372
+ PYEOF
373
+ ```
374
+
375
+ ### Step 4: Run Phase 3 - Chairman Synthesis
376
+
377
+ The Chairman model receives all responses and rankings, then produces the final synthesis:
378
+
379
+ ```bash
380
+ SESSION_DIR="/tmp/llm-council/TIMESTAMP_HERE"
381
+ CHAIRMAN_MODEL="accounts/fireworks/models/glm-5"
382
+
383
+ python3 << 'PYEOF'
384
+ import os
385
+ import json
386
+ import requests
387
+ import time
388
+
389
+ FIREWORKS_API_KEY = os.environ.get("FIREWORKS_API_KEY")
390
+ API_URL = "https://api.fireworks.ai/inference/v1/chat/completions"
391
+ SESSION_DIR = os.environ.get("SESSION_DIR")
392
+ CHAIRMAN_MODEL = os.environ.get("CHAIRMAN_MODEL")
393
+
394
+ # Load all previous results
395
+ with open(f"{SESSION_DIR}/config.json") as f:
396
+ config = json.load(f)
397
+ with open(f"{SESSION_DIR}/phase1_responses.json") as f:
398
+ phase1 = json.load(f)
399
+ with open(f"{SESSION_DIR}/phase2_rankings.json") as f:
400
+ phase2 = json.load(f)
401
+
402
+ QUERY = config["query"]
403
+ label_to_model = phase2["label_mapping"]
404
+ model_to_label = phase2["model_to_label"]
405
+
406
+ # Format responses with model names revealed
407
+ responses_text = []
408
+ for model_id, result in phase1.items():
409
+ label = model_to_label.get(model_id, "?")
410
+ model_name = model_id.split("/")[-1]
411
+ responses_text.append(f"=== {label}: {model_name} ===\n{result['content']}")
412
+
413
+ # Format rankings
414
+ rankings_text = []
415
+ for model_id, result in phase2["rankings"].items():
416
+ model_name = model_id.split("/")[-1]
417
+ rankings_text.append(f"[{model_name}'s Rankings]\n{result['content']}")
418
+
419
+ synthesis_prompt = f"""You are the Chairman of an LLM Council. Your task is to synthesize the best possible answer from multiple AI responses.
420
+
421
+ ORIGINAL QUERY:
422
+ {QUERY}
423
+
424
+ INDIVIDUAL RESPONSES:
425
+ {chr(10).join(responses_text)}
426
+
427
+ MODEL RANKINGS:
428
+ {chr(10).join(rankings_text)}
429
+
430
+ As Chairman, produce a FINAL SYNTHESIS that:
431
+ 1. Incorporates the strongest elements from the best-ranked responses
432
+ 2. Resolves any contradictions between responses
433
+ 3. Addresses aspects that multiple models agreed on
434
+ 4. Corrects any errors identified through cross-ranking
435
+ 5. Provides the most complete, accurate, and helpful answer
436
+
437
+ Begin your synthesis:"""
438
+
439
+ print(f"\n{'='*60}")
440
+ print("PHASE 3: Chairman Synthesis")
441
+ print(f"{'='*60}")
442
+ print(f"Chairman: {CHAIRMAN_MODEL.split('/')[-1]}")
443
+ print()
444
+
445
+ try:
446
+ start = time.time()
447
+ response = requests.post(
448
+ API_URL,
449
+ headers={
450
+ "Authorization": f"Bearer {FIREWORKS_API_KEY}",
451
+ "Content-Type": "application/json"
452
+ },
453
+ json={
454
+ "model": CHAIRMAN_MODEL,
455
+ "messages": [
456
+ {"role": "system", "content": "You are the Chairman of an LLM Council. Synthesize multiple AI perspectives into a definitive, comprehensive response."},
457
+ {"role": "user", "content": synthesis_prompt}
458
+ ],
459
+ "max_tokens": 4000,
460
+ "temperature": 1
461
+ },
462
+ timeout=180
463
+ )
464
+ response.raise_for_status()
465
+ elapsed = time.time() - start
466
+ synthesis = response.json()["choices"][0]["message"]["content"]
467
+
468
+ with open(f"{SESSION_DIR}/phase3_synthesis.txt", "w") as f:
469
+ f.write(synthesis)
470
+
471
+ print(f"Phase 3 complete ({elapsed:.2f}s). Synthesis saved to: {SESSION_DIR}/phase3_synthesis.txt")
472
+
473
+ except Exception as e:
474
+ print(f"ERROR: {e}")
475
+ synthesis = f"[ERROR: {str(e)}]"
476
+ with open(f"{SESSION_DIR}/phase3_synthesis.txt", "w") as f:
477
+ f.write(synthesis)
478
+
479
+ # Update config with chairman
480
+ config["chairman"] = CHAIRMAN_MODEL
481
+ with open(f"{SESSION_DIR}/config.json", "w") as f:
482
+ json.dump(config, f, indent=2)
483
+ PYEOF
484
+ ```
485
+
486
+ ### Step 5: Display Full Results
487
+
488
+ Read all saved files and display the complete council deliberation:
489
+
490
+ ```bash
491
+ SESSION_DIR="/tmp/llm-council/TIMESTAMP_HERE"
492
+
493
+ python3 << 'PYEOF'
494
+ import os
495
+ import json
496
+
497
+ SESSION_DIR = os.environ.get("SESSION_DIR")
498
+
499
+ # Load all data
500
+ with open(f"{SESSION_DIR}/config.json") as f:
501
+ config = json.load(f)
502
+ with open(f"{SESSION_DIR}/phase1_responses.json") as f:
503
+ phase1 = json.load(f)
504
+ with open(f"{SESSION_DIR}/phase2_rankings.json") as f:
505
+ phase2 = json.load(f)
506
+ with open(f"{SESSION_DIR}/phase3_synthesis.txt") as f:
507
+ synthesis = f.read()
508
+
509
+ model_to_label = phase2["model_to_label"]
510
+ label_to_model = phase2["label_mapping"]
511
+
512
+ # Build formatted output
513
+ output = []
514
+ output.append("=" * 70)
515
+ output.append(" LLM COUNCIL DELIBERATION")
516
+ output.append(" Powered by Fireworks AI")
517
+ output.append("=" * 70)
518
+ output.append("")
519
+ output.append(f"QUERY: {config['query']}")
520
+ output.append(f"COUNCIL: {', '.join([m.split('/')[-1] for m in config['models']])}")
521
+ output.append(f"CHAIRMAN: {config.get('chairman', 'N/A').split('/')[-1]}")
522
+ output.append("")
523
+
524
+ # Phase 1: Individual Responses
525
+ output.append("-" * 70)
526
+ output.append(" PHASE 1: INDIVIDUAL RESPONSES")
527
+ output.append("-" * 70)
528
+ output.append("")
529
+
530
+ for model_id, result in phase1.items():
531
+ model_name = model_id.split("/")[-1]
532
+ label = model_to_label.get(model_id, "?")
533
+ latency = result.get("latency_seconds", "N/A")
534
+ tokens = result.get("tokens", {})
535
+ output.append(f"[{label}] {model_name} (latency: {latency}s, tokens: {tokens.get('total', 'N/A')})")
536
+ output.append("-" * 40)
537
+ output.append(result["content"])
538
+ output.append("")
539
+
540
+ # Phase 2: Cross-Model Rankings
541
+ output.append("-" * 70)
542
+ output.append(" PHASE 2: CROSS-MODEL RANKINGS")
543
+ output.append("-" * 70)
544
+ output.append("")
545
+ output.append(f"Label mapping: {json.dumps({v: k.split('/')[-1] for k, v in model_to_label.items()}, indent=2)}")
546
+ output.append("")
547
+
548
+ for model_id, result in phase2["rankings"].items():
549
+ model_name = model_id.split("/")[-1]
550
+ output.append(f"[{model_name}'s Rankings]")
551
+ output.append(result["content"])
552
+ output.append("")
553
+
554
+ # Phase 3: Chairman Synthesis
555
+ output.append("-" * 70)
556
+ output.append(" PHASE 3: CHAIRMAN'S SYNTHESIS")
557
+ output.append("-" * 70)
558
+ output.append("")
559
+ chairman_name = config.get("chairman", "Chairman").split("/")[-1]
560
+ output.append(f"[{chairman_name} - Chairman]")
561
+ output.append("")
562
+ output.append(synthesis)
563
+ output.append("")
564
+ output.append("=" * 70)
565
+ output.append(f"Session files: {SESSION_DIR}/")
566
+
567
+ # Save formatted output
568
+ final_output = "\n".join(output)
569
+ with open(f"{SESSION_DIR}/final_output.md", "w") as f:
570
+ f.write(final_output)
571
+
572
+ print(final_output)
573
+ print(f"\nFull output saved to: {SESSION_DIR}/final_output.md")
574
+ PYEOF
575
+ ```
576
+
577
+ ## Important Notes
578
+
579
+ 1. **Session Directory**: Each run creates a unique session in `/tmp/llm-council/{timestamp}/`
580
+ 2. **Raw Data Preserved**: All API responses are saved as-is to JSON files for full transparency
581
+ 3. **Cost**: Fireworks pricing is per-token. More models and longer queries cost more. Check current pricing at https://fireworks.ai/pricing
582
+ 4. **Latency Tracking**: Each API call tracks latency so you can see Fireworks' speed in action
583
+ 5. **Token Usage**: Phase 1 responses include token counts for cost awareness
584
+ 6. **Rate Limits**: If you hit rate limits, wait briefly and retry
585
+ 7. **Model Availability**: Check https://app.fireworks.ai/ for current model status
586
+
587
+ ## Setup
588
+
589
+ 1. Create a Fireworks AI account at https://fireworks.ai/ and grab your API key from the dashboard
590
+ 2. Export it in your shell profile:
591
+ ```bash
592
+ export FIREWORKS_API_KEY="your_api_key_here"
593
+ ```
594
+ 3. Restart your terminal or run `source ~/.zshrc`
595
+ 4. Invoke this skill when you want multiple open-weight AI perspectives on a question
596
+
597
+
598
+ ## Limitations
599
+
600
+ - Requires the upstream tool, account, API key, or local setup when the workflow names one.
601
+ - Does not authorize destructive, production, paid, or external-message actions without explicit user approval.
602
+ - Validate generated artifacts or recommendations against the user's real sources before treating them as final.