opencode-skills-collection 3.1.0 → 3.1.2

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