opencode-skills-collection 3.0.51 → 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 (287) hide show
  1. package/README.md +44 -12
  2. package/bundled-skills/.antigravity-install-manifest.json +84 -1
  3. package/bundled-skills/android-ui-journey-testing/SKILL.md +191 -0
  4. package/bundled-skills/ask-matt/SKILL.md +92 -0
  5. package/bundled-skills/bugs-are-annoying/SKILL.md +137 -0
  6. package/bundled-skills/codebase-design/DEEPENING.md +37 -0
  7. package/bundled-skills/codebase-design/DESIGN-IT-TWICE.md +44 -0
  8. package/bundled-skills/codebase-design/SKILL.md +145 -0
  9. package/bundled-skills/competitor-analysis/LICENSE.txt +21 -0
  10. package/bundled-skills/competitor-analysis/SKILL.md +434 -0
  11. package/bundled-skills/competitor-analysis/references/battle-card-subagent.md +127 -0
  12. package/bundled-skills/competitor-analysis/references/battle-card.md +91 -0
  13. package/bundled-skills/competitor-analysis/references/example-research.md +130 -0
  14. package/bundled-skills/competitor-analysis/references/report-template.html +127 -0
  15. package/bundled-skills/competitor-analysis/references/research-patterns.md +217 -0
  16. package/bundled-skills/competitor-analysis/references/workflow.md +434 -0
  17. package/bundled-skills/competitor-analysis/scripts/capture_screenshots.mjs +142 -0
  18. package/bundled-skills/competitor-analysis/scripts/compile_report.mjs +929 -0
  19. package/bundled-skills/competitor-analysis/scripts/extract_vs_names.mjs +140 -0
  20. package/bundled-skills/competitor-analysis/scripts/gate_candidates.mjs +194 -0
  21. package/bundled-skills/competitor-analysis/scripts/list_urls.mjs +90 -0
  22. package/bundled-skills/competitor-analysis/scripts/md_utils.mjs +50 -0
  23. package/bundled-skills/competitor-analysis/scripts/merge_partials.mjs +291 -0
  24. package/bundled-skills/competitor-analysis/scripts/package.json +6 -0
  25. package/bundled-skills/design-it/3d-ui/SKILL.md +259 -0
  26. package/bundled-skills/design-it/SKILL.md +170 -0
  27. package/bundled-skills/design-it/ai-native-ui/SKILL.md +295 -0
  28. package/bundled-skills/design-it/aurora-ui/SKILL.md +307 -0
  29. package/bundled-skills/design-it/bento-ui/SKILL.md +314 -0
  30. package/bundled-skills/design-it/brutalism/SKILL.md +270 -0
  31. package/bundled-skills/design-it/brutalist-typography/SKILL.md +287 -0
  32. package/bundled-skills/design-it/card-based-design/SKILL.md +262 -0
  33. package/bundled-skills/design-it/claymorphism/SKILL.md +287 -0
  34. package/bundled-skills/design-it/color-blocking/SKILL.md +278 -0
  35. package/bundled-skills/design-it/command-center-ui/SKILL.md +345 -0
  36. package/bundled-skills/design-it/cyber-y2k/SKILL.md +312 -0
  37. package/bundled-skills/design-it/cyberpunk-ui/SKILL.md +262 -0
  38. package/bundled-skills/design-it/dark-mode/SKILL.md +289 -0
  39. package/bundled-skills/design-it/dashboard-design/SKILL.md +331 -0
  40. package/bundled-skills/design-it/data-dense-design/SKILL.md +322 -0
  41. package/bundled-skills/design-it/duotone-design/SKILL.md +248 -0
  42. package/bundled-skills/design-it/editorial-design/SKILL.md +328 -0
  43. package/bundled-skills/design-it/flat-design/SKILL.md +221 -0
  44. package/bundled-skills/design-it/flat-design-2/SKILL.md +240 -0
  45. package/bundled-skills/design-it/floating-ui/SKILL.md +299 -0
  46. package/bundled-skills/design-it/frutiger-aero/SKILL.md +274 -0
  47. package/bundled-skills/design-it/glassmorphism/SKILL.md +272 -0
  48. package/bundled-skills/design-it/gradient-design/SKILL.md +309 -0
  49. package/bundled-skills/design-it/high-contrast/SKILL.md +288 -0
  50. package/bundled-skills/design-it/holographic-ui/SKILL.md +310 -0
  51. package/bundled-skills/design-it/isometric-design/SKILL.md +228 -0
  52. package/bundled-skills/design-it/layered-design/SKILL.md +247 -0
  53. package/bundled-skills/design-it/material-design/SKILL.md +275 -0
  54. package/bundled-skills/design-it/maximalism/SKILL.md +297 -0
  55. package/bundled-skills/design-it/minimalism/SKILL.md +267 -0
  56. package/bundled-skills/design-it/monochromatic-ui/SKILL.md +296 -0
  57. package/bundled-skills/design-it/neo-brutalism/SKILL.md +270 -0
  58. package/bundled-skills/design-it/neumorphism/SKILL.md +248 -0
  59. package/bundled-skills/design-it/retro-design/SKILL.md +283 -0
  60. package/bundled-skills/design-it/retro-futurism/SKILL.md +259 -0
  61. package/bundled-skills/design-it/sci-fi-interface/SKILL.md +309 -0
  62. package/bundled-skills/design-it/skeuomorphism/SKILL.md +280 -0
  63. package/bundled-skills/design-it/soft-pastel/SKILL.md +307 -0
  64. package/bundled-skills/design-it/spatial-computing-ui/SKILL.md +300 -0
  65. package/bundled-skills/design-it/spatial-design/SKILL.md +268 -0
  66. package/bundled-skills/design-it/swiss-design/SKILL.md +293 -0
  67. package/bundled-skills/design-it/synthwave/SKILL.md +257 -0
  68. package/bundled-skills/design-it/tile-design/SKILL.md +297 -0
  69. package/bundled-skills/design-it/typography-first/SKILL.md +247 -0
  70. package/bundled-skills/design-it/vaporwave/SKILL.md +331 -0
  71. package/bundled-skills/design-it/vibrant-maximalism/SKILL.md +291 -0
  72. package/bundled-skills/design-it/widget-based-design/SKILL.md +274 -0
  73. package/bundled-skills/design-it/y2k-design/SKILL.md +268 -0
  74. package/bundled-skills/diagnosing-bugs/SKILL.md +165 -0
  75. package/bundled-skills/diagnosing-bugs/scripts/hitl-loop.template.sh +41 -0
  76. package/bundled-skills/docs/contributors/skill-scoring.md +235 -0
  77. package/bundled-skills/docs/integrations/jetski-cortex.md +3 -3
  78. package/bundled-skills/docs/integrations/jetski-gemini-loader/README.md +1 -1
  79. package/bundled-skills/docs/maintainers/repo-growth-seo.md +3 -3
  80. package/bundled-skills/docs/maintainers/skills-update-guide.md +1 -1
  81. package/bundled-skills/docs/users/bundles.md +1 -1
  82. package/bundled-skills/docs/users/claude-code-skills.md +1 -1
  83. package/bundled-skills/docs/users/gemini-cli-skills.md +1 -1
  84. package/bundled-skills/docs/users/getting-started.md +1 -1
  85. package/bundled-skills/docs/users/kiro-integration.md +1 -1
  86. package/bundled-skills/docs/users/usage.md +4 -4
  87. package/bundled-skills/docs/users/visual-guide.md +4 -4
  88. package/bundled-skills/domain-modeling/ADR-FORMAT.md +47 -0
  89. package/bundled-skills/domain-modeling/CONTEXT-FORMAT.md +60 -0
  90. package/bundled-skills/domain-modeling/SKILL.md +105 -0
  91. package/bundled-skills/grill-me/SKILL.md +36 -0
  92. package/bundled-skills/grill-with-docs/SKILL.md +36 -0
  93. package/bundled-skills/grilling/SKILL.md +39 -0
  94. package/bundled-skills/handoff/SKILL.md +45 -0
  95. package/bundled-skills/image-generator/.env.example +7 -0
  96. package/bundled-skills/image-generator/SKILL.md +509 -0
  97. package/bundled-skills/improve-codebase-architecture/HTML-REPORT.md +123 -0
  98. package/bundled-skills/improve-codebase-architecture/SKILL.md +97 -0
  99. package/bundled-skills/learn/SKILL.md +156 -0
  100. package/bundled-skills/lesson-generator/SKILL.md +90 -0
  101. package/bundled-skills/llm-council/.env.example +7 -0
  102. package/bundled-skills/llm-council/SKILL.md +602 -0
  103. package/bundled-skills/loop-library/SKILL.md +205 -0
  104. package/bundled-skills/loop-library/agents/openai.yaml +4 -0
  105. package/bundled-skills/loop-library/references/catalog.md +270 -0
  106. package/bundled-skills/mailtrap-managing-contacts/SKILL.md +112 -0
  107. package/bundled-skills/mailtrap-sending-emails/SKILL.md +167 -0
  108. package/bundled-skills/mailtrap-setting-up-sending-domain/SKILL.md +77 -0
  109. package/bundled-skills/mailtrap-testing-with-sandbox/SKILL.md +110 -0
  110. package/bundled-skills/prototype/LOGIC.md +79 -0
  111. package/bundled-skills/prototype/SKILL.md +62 -0
  112. package/bundled-skills/prototype/UI.md +112 -0
  113. package/bundled-skills/setup-matt-pocock-skills/SKILL.md +158 -0
  114. package/bundled-skills/setup-matt-pocock-skills/domain.md +51 -0
  115. package/bundled-skills/setup-matt-pocock-skills/issue-tracker-github.md +34 -0
  116. package/bundled-skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +35 -0
  117. package/bundled-skills/setup-matt-pocock-skills/issue-tracker-local.md +19 -0
  118. package/bundled-skills/setup-matt-pocock-skills/triage-labels.md +15 -0
  119. package/bundled-skills/survey-generator/LICENSE +21 -0
  120. package/bundled-skills/survey-generator/SKILL.md +143 -0
  121. package/bundled-skills/survey-generator/build_artifact.py +208 -0
  122. package/bundled-skills/survey-generator/examples/agentic-engineering/research_bundle.json +1196 -0
  123. package/bundled-skills/survey-generator/examples/agentic-engineering/survey.html +706 -0
  124. package/bundled-skills/survey-generator/style_spec.json +85 -0
  125. package/bundled-skills/survey-generator/templates/research_bundle_template.json +69 -0
  126. package/bundled-skills/tdd/SKILL.md +139 -0
  127. package/bundled-skills/tdd/mocking.md +59 -0
  128. package/bundled-skills/tdd/refactoring.md +10 -0
  129. package/bundled-skills/tdd/tests.md +61 -0
  130. package/bundled-skills/teach/GLOSSARY-FORMAT.md +35 -0
  131. package/bundled-skills/teach/LEARNING-RECORD-FORMAT.md +46 -0
  132. package/bundled-skills/teach/MISSION-FORMAT.md +31 -0
  133. package/bundled-skills/teach/RESOURCES-FORMAT.md +32 -0
  134. package/bundled-skills/teach/SKILL.md +169 -0
  135. package/bundled-skills/to-issues/SKILL.md +115 -0
  136. package/bundled-skills/to-prd/SKILL.md +104 -0
  137. package/bundled-skills/tools-page-seo-optimizer/SKILL.md +616 -0
  138. package/bundled-skills/triage/AGENT-BRIEF.md +207 -0
  139. package/bundled-skills/triage/OUT-OF-SCOPE.md +105 -0
  140. package/bundled-skills/triage/SKILL.md +143 -0
  141. package/bundled-skills/vibecode-production-qa-validator/SKILL.md +371 -141
  142. package/bundled-skills/wiki-builder/SKILL.md +157 -0
  143. package/bundled-skills/wiki-builder/agents/openai.yaml +5 -0
  144. package/bundled-skills/wiki-builder/references/wiki-flavors.md +98 -0
  145. package/bundled-skills/wiki-builder/scripts/init_wiki.sh +105 -0
  146. package/bundled-skills/wiki-builder/templates/index.md +20 -0
  147. package/bundled-skills/wiki-builder/templates/maintenance-log.md +7 -0
  148. package/bundled-skills/wiki-builder/templates/prompts/compile-concept-page.md +12 -0
  149. package/bundled-skills/wiki-builder/templates/prompts/compile-index.md +11 -0
  150. package/bundled-skills/wiki-builder/templates/prompts/compile-source-page.md +12 -0
  151. package/bundled-skills/wiki-builder/templates/prompts/lint-wiki.md +10 -0
  152. package/bundled-skills/wiki-builder/templates/prompts/query-and-file.md +11 -0
  153. package/bundled-skills/wiki-builder/templates/sources.md +9 -0
  154. package/bundled-skills/wiki-builder/templates/wiki.config.md +53 -0
  155. package/bundled-skills/writing-great-skills/GLOSSARY.md +181 -0
  156. package/bundled-skills/writing-great-skills/SKILL.md +111 -0
  157. package/bundled-skills/yao-meta-skill/SKILL.md +86 -0
  158. package/bundled-skills/yao-meta-skill/agents/interface.yaml +26 -0
  159. package/bundled-skills/yao-meta-skill/manifest.json +24 -0
  160. package/bundled-skills/yao-meta-skill/references/artifact-design-doctrine.md +49 -0
  161. package/bundled-skills/yao-meta-skill/references/authoring-discipline.md +78 -0
  162. package/bundled-skills/yao-meta-skill/references/autonomous-adaptation.md +65 -0
  163. package/bundled-skills/yao-meta-skill/references/distribution-registry-method.md +60 -0
  164. package/bundled-skills/yao-meta-skill/references/eval-playbook.md +69 -0
  165. package/bundled-skills/yao-meta-skill/references/gate-selection.md +68 -0
  166. package/bundled-skills/yao-meta-skill/references/governance.md +134 -0
  167. package/bundled-skills/yao-meta-skill/references/human-review-template.md +54 -0
  168. package/bundled-skills/yao-meta-skill/references/intent-dialogue.md +138 -0
  169. package/bundled-skills/yao-meta-skill/references/iteration-philosophy.md +30 -0
  170. package/bundled-skills/yao-meta-skill/references/non-skill-decision-tree.md +39 -0
  171. package/bundled-skills/yao-meta-skill/references/operating-modes.md +107 -0
  172. package/bundled-skills/yao-meta-skill/references/output-eval-method.md +113 -0
  173. package/bundled-skills/yao-meta-skill/references/output-quality-risk.md +41 -0
  174. package/bundled-skills/yao-meta-skill/references/output-visual-quality.md +53 -0
  175. package/bundled-skills/yao-meta-skill/references/packaging-contracts.md +70 -0
  176. package/bundled-skills/yao-meta-skill/references/pattern-extraction-doctrine.md +76 -0
  177. package/bundled-skills/yao-meta-skill/references/platform-capability-matrix.md +49 -0
  178. package/bundled-skills/yao-meta-skill/references/prompt-engineering-doctrine.md +76 -0
  179. package/bundled-skills/yao-meta-skill/references/qa-ladder.md +57 -0
  180. package/bundled-skills/yao-meta-skill/references/reference-scan.md +126 -0
  181. package/bundled-skills/yao-meta-skill/references/regression-cause-taxonomy.md +80 -0
  182. package/bundled-skills/yao-meta-skill/references/resource-boundaries.md +120 -0
  183. package/bundled-skills/yao-meta-skill/references/review-studio-method.md +87 -0
  184. package/bundled-skills/yao-meta-skill/references/review-waiver-method.md +76 -0
  185. package/bundled-skills/yao-meta-skill/references/runtime-conformance-method.md +21 -0
  186. package/bundled-skills/yao-meta-skill/references/skill-archetypes.md +86 -0
  187. package/bundled-skills/yao-meta-skill/references/skill-atlas-method.md +35 -0
  188. package/bundled-skills/yao-meta-skill/references/skill-engineering-method.md +210 -0
  189. package/bundled-skills/yao-meta-skill/references/skill-ir-method.md +41 -0
  190. package/bundled-skills/yao-meta-skill/references/skillops-decision-policy.md +53 -0
  191. package/bundled-skills/yao-meta-skill/references/systems-thinking-doctrine.md +75 -0
  192. package/bundled-skills/yao-meta-skill/references/telemetry-drift-method.md +182 -0
  193. package/bundled-skills/yao-meta-skill/references/trust-security-method.md +79 -0
  194. package/bundled-skills/yao-meta-skill/references/user-memory-policy.md +35 -0
  195. package/bundled-skills/youtube-notetaker/SKILL.md +209 -0
  196. package/bundled-skills/youtube-notetaker/reference/artifact.html +269 -0
  197. package/bundled-skills/youtube-notetaker/scripts/contact_sheet.py +53 -0
  198. package/bundled-skills/youtube-notetaker/scripts/detect_slides.sh +19 -0
  199. package/bundled-skills/youtube-notetaker/scripts/download.sh +24 -0
  200. package/bundled-skills/youtube-notetaker/scripts/extract_slides.py +43 -0
  201. package/bundled-skills/youtube-notetaker/scripts/serve.py +173 -0
  202. package/bundled-skills/youtube-notetaker/scripts/setup.sh +27 -0
  203. package/bundled-skills/youtube-notetaker/scripts/verify.sh +31 -0
  204. package/bundled-skills/youtube-notetaker/scripts/vtt_to_transcript.py +59 -0
  205. package/bundled-skills/youtube-notetaker/scripts/write_library_item.py +69 -0
  206. package/dist/skill-pointer/config-loader.d.ts +14 -0
  207. package/dist/skill-pointer/config-loader.js +30 -3
  208. package/dist/skill-pointer/content-scanner.d.ts +38 -0
  209. package/dist/skill-pointer/content-scanner.js +118 -0
  210. package/dist/skill-pointer/index.d.ts +7 -2
  211. package/dist/skill-pointer/index.js +14 -4
  212. package/dist/skill-pointer/pointer-generator.js +2 -0
  213. package/dist/skill-pointer/skill-patcher.d.ts +13 -0
  214. package/dist/skill-pointer/skill-patcher.js +99 -0
  215. package/package.json +1 -1
  216. package/skills_index.json +1956 -286
  217. package/bundled-skills/ai-md/SKILL.md +0 -523
  218. package/bundled-skills/atlas-contract/SKILL.md +0 -650
  219. package/bundled-skills/busybox-on-windows/SKILL.md +0 -40
  220. package/bundled-skills/monte-carlo-prevent/SKILL.md +0 -257
  221. package/bundled-skills/monte-carlo-prevent/references/TROUBLESHOOTING.md +0 -23
  222. package/bundled-skills/monte-carlo-prevent/references/parameters.md +0 -32
  223. package/bundled-skills/monte-carlo-prevent/references/workflows.md +0 -478
  224. package/bundled-skills/monte-carlo-push-ingestion/SKILL.md +0 -372
  225. package/bundled-skills/monte-carlo-push-ingestion/references/anomaly-detection.md +0 -87
  226. package/bundled-skills/monte-carlo-push-ingestion/references/custom-lineage.md +0 -203
  227. package/bundled-skills/monte-carlo-push-ingestion/references/direct-http-api.md +0 -207
  228. package/bundled-skills/monte-carlo-push-ingestion/references/prerequisites.md +0 -150
  229. package/bundled-skills/monte-carlo-push-ingestion/references/push-lineage.md +0 -160
  230. package/bundled-skills/monte-carlo-push-ingestion/references/push-metadata.md +0 -158
  231. package/bundled-skills/monte-carlo-push-ingestion/references/push-query-logs.md +0 -219
  232. package/bundled-skills/monte-carlo-push-ingestion/references/validation.md +0 -257
  233. package/bundled-skills/monte-carlo-push-ingestion/scripts/sample_verify.py +0 -357
  234. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_and_push_lineage.py +0 -70
  235. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_and_push_metadata.py +0 -65
  236. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_and_push_query_logs.py +0 -70
  237. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_lineage.py +0 -214
  238. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_metadata.py +0 -160
  239. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_query_logs.py +0 -164
  240. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/push_lineage.py +0 -198
  241. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/push_metadata.py +0 -193
  242. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/push_query_logs.py +0 -207
  243. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/collect_and_push_metadata.py +0 -71
  244. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/collect_and_push_query_logs.py +0 -64
  245. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/collect_metadata.py +0 -253
  246. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/collect_query_logs.py +0 -149
  247. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/push_metadata.py +0 -190
  248. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/push_query_logs.py +0 -208
  249. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_and_push_lineage.py +0 -83
  250. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_and_push_metadata.py +0 -77
  251. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_and_push_query_logs.py +0 -83
  252. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_lineage.py +0 -240
  253. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_metadata.py +0 -212
  254. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_query_logs.py +0 -204
  255. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/push_lineage.py +0 -192
  256. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/push_metadata.py +0 -178
  257. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/push_query_logs.py +0 -200
  258. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_and_push_lineage.py +0 -119
  259. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_and_push_metadata.py +0 -119
  260. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_and_push_query_logs.py +0 -117
  261. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_lineage.py +0 -265
  262. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_metadata.py +0 -313
  263. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_query_logs.py +0 -284
  264. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/push_lineage.py +0 -309
  265. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/push_metadata.py +0 -245
  266. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/push_query_logs.py +0 -255
  267. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_and_push_lineage.py +0 -78
  268. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_and_push_metadata.py +0 -80
  269. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_and_push_query_logs.py +0 -88
  270. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_lineage.py +0 -235
  271. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_metadata.py +0 -219
  272. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_query_logs.py +0 -239
  273. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/push_lineage.py +0 -178
  274. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/push_metadata.py +0 -178
  275. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/push_query_logs.py +0 -196
  276. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_and_push_lineage.py +0 -154
  277. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_and_push_metadata.py +0 -137
  278. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_and_push_query_logs.py +0 -137
  279. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_lineage.py +0 -349
  280. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_metadata.py +0 -329
  281. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_query_logs.py +0 -254
  282. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/push_lineage.py +0 -307
  283. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/push_metadata.py +0 -228
  284. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/push_query_logs.py +0 -248
  285. package/bundled-skills/monte-carlo-push-ingestion/scripts/test_template_sdk_usage.py +0 -340
  286. package/bundled-skills/skill-optimizer/SKILL.md +0 -271
  287. 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.