xtrm-tools 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (333) hide show
  1. package/CHANGELOG.md +504 -0
  2. package/README.md +201 -0
  3. package/cli/dist/index.cjs +57378 -0
  4. package/cli/dist/index.cjs.map +1 -0
  5. package/cli/dist/index.d.cts +2 -0
  6. package/cli/package.json +47 -0
  7. package/config/.env.example +40 -0
  8. package/config/hooks.json +72 -0
  9. package/config/instructions/agents-top.md +30 -0
  10. package/config/instructions/claude-top.md +30 -0
  11. package/config/mcp_servers.json +57 -0
  12. package/config/mcp_servers_optional.json +53 -0
  13. package/config/pi/auth.json.template +14 -0
  14. package/config/pi/extensions/auto-session-name/index.ts +29 -0
  15. package/config/pi/extensions/auto-session-name/package.json +16 -0
  16. package/config/pi/extensions/auto-update/index.ts +71 -0
  17. package/config/pi/extensions/auto-update/package.json +16 -0
  18. package/config/pi/extensions/beads/index.ts +166 -0
  19. package/config/pi/extensions/beads/package.json +16 -0
  20. package/config/pi/extensions/bg-process/index.ts +230 -0
  21. package/config/pi/extensions/bg-process/package.json +16 -0
  22. package/config/pi/extensions/compact-header/index.ts +69 -0
  23. package/config/pi/extensions/compact-header/package.json +16 -0
  24. package/config/pi/extensions/core/adapter.ts +52 -0
  25. package/config/pi/extensions/core/guard-rules.ts +102 -0
  26. package/config/pi/extensions/core/lib.ts +3 -0
  27. package/config/pi/extensions/core/logger.ts +45 -0
  28. package/config/pi/extensions/core/runner.ts +71 -0
  29. package/config/pi/extensions/core/session-state.ts +59 -0
  30. package/config/pi/extensions/custom-footer/index.ts +160 -0
  31. package/config/pi/extensions/custom-footer/package.json +16 -0
  32. package/config/pi/extensions/custom-provider-qwen-cli/index.ts +363 -0
  33. package/config/pi/extensions/custom-provider-qwen-cli/package.json +1 -0
  34. package/config/pi/extensions/git-checkpoint/index.ts +53 -0
  35. package/config/pi/extensions/git-checkpoint/package.json +16 -0
  36. package/config/pi/extensions/minimal-mode/index.ts +201 -0
  37. package/config/pi/extensions/minimal-mode/package.json +16 -0
  38. package/config/pi/extensions/plan-mode/README.md +65 -0
  39. package/config/pi/extensions/plan-mode/index.ts +417 -0
  40. package/config/pi/extensions/plan-mode/package.json +12 -0
  41. package/config/pi/extensions/plan-mode/utils.ts +324 -0
  42. package/config/pi/extensions/quality-gates/index.ts +67 -0
  43. package/config/pi/extensions/quality-gates/package.json +16 -0
  44. package/config/pi/extensions/service-skills/index.ts +108 -0
  45. package/config/pi/extensions/service-skills/package.json +16 -0
  46. package/config/pi/extensions/session-flow/index.ts +131 -0
  47. package/config/pi/extensions/session-flow/package.json +16 -0
  48. package/config/pi/extensions/todo/index.ts +299 -0
  49. package/config/pi/extensions/todo/package.json +16 -0
  50. package/config/pi/extensions/xtrm-loader/index.ts +89 -0
  51. package/config/pi/extensions/xtrm-loader/package.json +16 -0
  52. package/config/pi/install-schema.json +44 -0
  53. package/config/pi/models.json.template +76 -0
  54. package/config/pi/pi-worktrees-settings.json +6 -0
  55. package/config/pi/settings.json.template +16 -0
  56. package/config/settings.json +70 -0
  57. package/hooks/README.md +75 -0
  58. package/hooks/agent_context.py +105 -0
  59. package/hooks/beads-claim-sync.mjs +166 -0
  60. package/hooks/beads-commit-gate.mjs +55 -0
  61. package/hooks/beads-compact-restore.mjs +69 -0
  62. package/hooks/beads-compact-save.mjs +51 -0
  63. package/hooks/beads-edit-gate.mjs +45 -0
  64. package/hooks/beads-gate-core.mjs +215 -0
  65. package/hooks/beads-gate-messages.mjs +87 -0
  66. package/hooks/beads-gate-utils.mjs +185 -0
  67. package/hooks/beads-memory-gate.mjs +61 -0
  68. package/hooks/beads-stop-gate.mjs +32 -0
  69. package/hooks/branch-state.mjs +39 -0
  70. package/hooks/gitnexus/gitnexus-hook.cjs +222 -0
  71. package/hooks/guard-rules.mjs +118 -0
  72. package/hooks/hooks.json +116 -0
  73. package/hooks/main-guard-post-push.mjs +71 -0
  74. package/hooks/main-guard.mjs +119 -0
  75. package/hooks/quality-check.cjs +1286 -0
  76. package/hooks/quality-check.py +345 -0
  77. package/hooks/serena-workflow-reminder.py +74 -0
  78. package/package.json +77 -0
  79. package/project-skills/quality-gates/.claude/hooks/hook-config.json +66 -0
  80. package/project-skills/quality-gates/.claude/hooks/quality-check.cjs +1286 -0
  81. package/project-skills/quality-gates/.claude/hooks/quality-check.py +334 -0
  82. package/project-skills/quality-gates/.claude/settings.json +3 -0
  83. package/project-skills/quality-gates/.claude/skills/using-quality-gates/SKILL.md +254 -0
  84. package/project-skills/quality-gates/README.md +109 -0
  85. package/project-skills/quality-gates/evals/evals.json +181 -0
  86. package/project-skills/quality-gates/workspace/iteration-1/FINAL-EVAL-SUMMARY.md +75 -0
  87. package/project-skills/quality-gates/workspace/iteration-1/edge-case-auto-fix-verification/with_skill/outputs/response.md +59 -0
  88. package/project-skills/quality-gates/workspace/iteration-1/edge-case-mixed-language-project/with_skill/outputs/response.md +60 -0
  89. package/project-skills/quality-gates/workspace/iteration-1/eval-summary.md +105 -0
  90. package/project-skills/quality-gates/workspace/iteration-1/partial-install-python-only/with_skill/outputs/response.md +93 -0
  91. package/project-skills/quality-gates/workspace/iteration-1/python-refactor-request/with_skill/outputs/response.md +104 -0
  92. package/project-skills/quality-gates/workspace/iteration-1/quality-gate-error-fix/with_skill/outputs/response.md +74 -0
  93. package/project-skills/quality-gates/workspace/iteration-1/should-not-trigger-general-chat/with_skill/outputs/response.md +18 -0
  94. package/project-skills/quality-gates/workspace/iteration-1/should-not-trigger-math-question/with_skill/outputs/response.md +18 -0
  95. package/project-skills/quality-gates/workspace/iteration-1/should-not-trigger-unrelated-coding/with_skill/outputs/response.md +56 -0
  96. package/project-skills/quality-gates/workspace/iteration-1/tdd-guard-blocking-confusion/with_skill/outputs/response.md +67 -0
  97. package/project-skills/quality-gates/workspace/iteration-1/typescript-feature-with-tests/with_skill/outputs/response.md +97 -0
  98. package/project-skills/service-skills-set/.claude/git-hooks/doc_reminder.py +67 -0
  99. package/project-skills/service-skills-set/.claude/git-hooks/skill_staleness.py +194 -0
  100. package/project-skills/service-skills-set/.claude/service-registry.json +4 -0
  101. package/project-skills/service-skills-set/.claude/settings.json +37 -0
  102. package/project-skills/service-skills-set/.claude/skills/creating-service-skills/SKILL.md +433 -0
  103. package/project-skills/service-skills-set/.claude/skills/creating-service-skills/references/script_quality_standards.md +425 -0
  104. package/project-skills/service-skills-set/.claude/skills/creating-service-skills/references/service_skill_system_guide.md +278 -0
  105. package/project-skills/service-skills-set/.claude/skills/creating-service-skills/scripts/bootstrap.py +308 -0
  106. package/project-skills/service-skills-set/.claude/skills/creating-service-skills/scripts/deep_dive.py +304 -0
  107. package/project-skills/service-skills-set/.claude/skills/creating-service-skills/scripts/scaffolder.py +482 -0
  108. package/project-skills/service-skills-set/.claude/skills/scoping-service-skills/SKILL.md +231 -0
  109. package/project-skills/service-skills-set/.claude/skills/scoping-service-skills/scripts/scope.py +74 -0
  110. package/project-skills/service-skills-set/.claude/skills/updating-service-skills/SKILL.md +136 -0
  111. package/project-skills/service-skills-set/.claude/skills/updating-service-skills/scripts/drift_detector.py +222 -0
  112. package/project-skills/service-skills-set/.claude/skills/using-service-skills/SKILL.md +108 -0
  113. package/project-skills/service-skills-set/.claude/skills/using-service-skills/scripts/cataloger.py +74 -0
  114. package/project-skills/service-skills-set/.claude/skills/using-service-skills/scripts/skill_activator.py +152 -0
  115. package/project-skills/service-skills-set/README.md +93 -0
  116. package/project-skills/service-skills-set/install-service-skills.py +193 -0
  117. package/project-skills/service-skills-set/service-skills-readme.md +236 -0
  118. package/skills/README.txt +31 -0
  119. package/skills/clean-code/SKILL.md +201 -0
  120. package/skills/creating-service-skills/SKILL.md +433 -0
  121. package/skills/creating-service-skills/references/script_quality_standards.md +425 -0
  122. package/skills/creating-service-skills/references/service_skill_system_guide.md +278 -0
  123. package/skills/creating-service-skills/scripts/bootstrap.py +326 -0
  124. package/skills/creating-service-skills/scripts/deep_dive.py +304 -0
  125. package/skills/creating-service-skills/scripts/scaffolder.py +482 -0
  126. package/skills/delegating/SKILL.md +196 -0
  127. package/skills/delegating/config.yaml +210 -0
  128. package/skills/delegating/references/orchestration-protocols.md +41 -0
  129. package/skills/docker-expert/SKILL.md +409 -0
  130. package/skills/documenting/CHANGELOG.md +23 -0
  131. package/skills/documenting/README.md +148 -0
  132. package/skills/documenting/SKILL.md +113 -0
  133. package/skills/documenting/examples/example_pattern.md +70 -0
  134. package/skills/documenting/examples/example_reference.md +70 -0
  135. package/skills/documenting/examples/example_ssot_analytics.md +64 -0
  136. package/skills/documenting/examples/example_workflow.md +141 -0
  137. package/skills/documenting/references/changelog-format.md +97 -0
  138. package/skills/documenting/references/metadata-schema.md +136 -0
  139. package/skills/documenting/references/taxonomy.md +81 -0
  140. package/skills/documenting/references/versioning-rules.md +78 -0
  141. package/skills/documenting/scripts/bump_version.sh +60 -0
  142. package/skills/documenting/scripts/changelog/__init__.py +0 -0
  143. package/skills/documenting/scripts/changelog/add_entry.py +216 -0
  144. package/skills/documenting/scripts/changelog/bump_release.py +117 -0
  145. package/skills/documenting/scripts/changelog/init_changelog.py +54 -0
  146. package/skills/documenting/scripts/changelog/validate_changelog.py +128 -0
  147. package/skills/documenting/scripts/drift_detector.py +266 -0
  148. package/skills/documenting/scripts/generate_template.py +311 -0
  149. package/skills/documenting/scripts/list_by_category.sh +84 -0
  150. package/skills/documenting/scripts/orchestrator.py +255 -0
  151. package/skills/documenting/scripts/validate_metadata.py +242 -0
  152. package/skills/documenting/templates/CHANGELOG.md.template +13 -0
  153. package/skills/find-skills/SKILL.md +133 -0
  154. package/skills/gitnexus-debugging/SKILL.md +85 -0
  155. package/skills/gitnexus-exploring/SKILL.md +75 -0
  156. package/skills/gitnexus-impact-analysis/SKILL.md +94 -0
  157. package/skills/gitnexus-refactoring/SKILL.md +113 -0
  158. package/skills/hook-development/SKILL.md +797 -0
  159. package/skills/hook-development/examples/load-context.sh +55 -0
  160. package/skills/hook-development/examples/quality-check.js +1168 -0
  161. package/skills/hook-development/examples/validate-bash.sh +43 -0
  162. package/skills/hook-development/examples/validate-write.sh +38 -0
  163. package/skills/hook-development/references/advanced.md +527 -0
  164. package/skills/hook-development/references/migration.md +369 -0
  165. package/skills/hook-development/references/patterns.md +412 -0
  166. package/skills/hook-development/scripts/README.md +164 -0
  167. package/skills/hook-development/scripts/hook-linter.sh +153 -0
  168. package/skills/hook-development/scripts/test-hook.sh +252 -0
  169. package/skills/hook-development/scripts/validate-hook-schema.sh +159 -0
  170. package/skills/obsidian-cli/SKILL.md +106 -0
  171. package/skills/orchestrating-agents/SKILL.md +135 -0
  172. package/skills/orchestrating-agents/config.yaml +45 -0
  173. package/skills/orchestrating-agents/references/agent-context-integration.md +37 -0
  174. package/skills/orchestrating-agents/references/examples.md +45 -0
  175. package/skills/orchestrating-agents/references/handover-protocol.md +31 -0
  176. package/skills/orchestrating-agents/references/workflows.md +42 -0
  177. package/skills/orchestrating-agents/scripts/detect_neighbors.py +23 -0
  178. package/skills/prompt-improving/README.md +162 -0
  179. package/skills/prompt-improving/SKILL.md +74 -0
  180. package/skills/prompt-improving/references/analysis_commands.md +24 -0
  181. package/skills/prompt-improving/references/chain_of_thought.md +24 -0
  182. package/skills/prompt-improving/references/mcp_definitions.md +20 -0
  183. package/skills/prompt-improving/references/multishot.md +23 -0
  184. package/skills/prompt-improving/references/xml_core.md +60 -0
  185. package/skills/python-testing/SKILL.md +815 -0
  186. package/skills/scoping-service-skills/SKILL.md +231 -0
  187. package/skills/scoping-service-skills/scripts/scope.py +74 -0
  188. package/skills/senior-backend/SKILL.md +209 -0
  189. package/skills/senior-backend/references/api_design_patterns.md +103 -0
  190. package/skills/senior-backend/references/backend_security_practices.md +103 -0
  191. package/skills/senior-backend/references/database_optimization_guide.md +103 -0
  192. package/skills/senior-backend/scripts/api_load_tester.py +114 -0
  193. package/skills/senior-backend/scripts/api_scaffolder.py +114 -0
  194. package/skills/senior-backend/scripts/database_migration_tool.py +114 -0
  195. package/skills/senior-data-scientist/SKILL.md +226 -0
  196. package/skills/senior-data-scientist/references/experiment_design_frameworks.md +80 -0
  197. package/skills/senior-data-scientist/references/feature_engineering_patterns.md +80 -0
  198. package/skills/senior-data-scientist/references/statistical_methods_advanced.md +80 -0
  199. package/skills/senior-data-scientist/scripts/experiment_designer.py +100 -0
  200. package/skills/senior-data-scientist/scripts/feature_engineering_pipeline.py +100 -0
  201. package/skills/senior-data-scientist/scripts/model_evaluation_suite.py +100 -0
  202. package/skills/senior-devops/SKILL.md +209 -0
  203. package/skills/senior-devops/references/cicd_pipeline_guide.md +103 -0
  204. package/skills/senior-devops/references/deployment_strategies.md +103 -0
  205. package/skills/senior-devops/references/infrastructure_as_code.md +103 -0
  206. package/skills/senior-devops/scripts/deployment_manager.py +114 -0
  207. package/skills/senior-devops/scripts/pipeline_generator.py +114 -0
  208. package/skills/senior-devops/scripts/terraform_scaffolder.py +114 -0
  209. package/skills/senior-security/SKILL.md +209 -0
  210. package/skills/senior-security/references/cryptography_implementation.md +103 -0
  211. package/skills/senior-security/references/penetration_testing_guide.md +103 -0
  212. package/skills/senior-security/references/security_architecture_patterns.md +103 -0
  213. package/skills/senior-security/scripts/pentest_automator.py +114 -0
  214. package/skills/senior-security/scripts/security_auditor.py +114 -0
  215. package/skills/senior-security/scripts/threat_modeler.py +114 -0
  216. package/skills/skill-creator/LICENSE.txt +202 -0
  217. package/skills/skill-creator/SKILL.md +479 -0
  218. package/skills/skill-creator/agents/analyzer.md +274 -0
  219. package/skills/skill-creator/agents/comparator.md +202 -0
  220. package/skills/skill-creator/agents/grader.md +223 -0
  221. package/skills/skill-creator/assets/eval_review.html +146 -0
  222. package/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  223. package/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  224. package/skills/skill-creator/references/schemas.md +430 -0
  225. package/skills/skill-creator/scripts/__init__.py +0 -0
  226. package/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  227. package/skills/skill-creator/scripts/generate_report.py +326 -0
  228. package/skills/skill-creator/scripts/improve_description.py +248 -0
  229. package/skills/skill-creator/scripts/package_skill.py +136 -0
  230. package/skills/skill-creator/scripts/quick_validate.py +103 -0
  231. package/skills/skill-creator/scripts/run_eval.py +310 -0
  232. package/skills/skill-creator/scripts/run_loop.py +332 -0
  233. package/skills/skill-creator/scripts/utils.py +47 -0
  234. package/skills/sync-docs/SKILL.md +132 -0
  235. package/skills/sync-docs/evals/evals.json +89 -0
  236. package/skills/sync-docs/references/doc-structure.md +99 -0
  237. package/skills/sync-docs/references/schema.md +103 -0
  238. package/skills/sync-docs/scripts/changelog/add_entry.py +216 -0
  239. package/skills/sync-docs/scripts/context_gatherer.py +240 -0
  240. package/skills/sync-docs/scripts/doc_structure_analyzer.py +495 -0
  241. package/skills/sync-docs/scripts/drift_detector.py +327 -0
  242. package/skills/sync-docs/scripts/validate_doc.py +365 -0
  243. package/skills/sync-docs/scripts/validate_metadata.py +185 -0
  244. package/skills/sync-docs-workspace/iteration-1/benchmark.json +293 -0
  245. package/skills/sync-docs-workspace/iteration-1/benchmark.md +13 -0
  246. package/skills/sync-docs-workspace/iteration-1/eval-doc-audit/eval_metadata.json +27 -0
  247. package/skills/sync-docs-workspace/iteration-1/eval-doc-audit/with_skill/outputs/result.md +210 -0
  248. package/skills/sync-docs-workspace/iteration-1/eval-doc-audit/with_skill/run-1/grading.json +28 -0
  249. package/skills/sync-docs-workspace/iteration-1/eval-doc-audit/with_skill/run-1/timing.json +1 -0
  250. package/skills/sync-docs-workspace/iteration-1/eval-doc-audit/without_skill/outputs/result.md +101 -0
  251. package/skills/sync-docs-workspace/iteration-1/eval-doc-audit/without_skill/run-1/grading.json +28 -0
  252. package/skills/sync-docs-workspace/iteration-1/eval-doc-audit/without_skill/run-1/timing.json +5 -0
  253. package/skills/sync-docs-workspace/iteration-1/eval-doc-audit/without_skill/timing.json +5 -0
  254. package/skills/sync-docs-workspace/iteration-1/eval-fix-mode/eval_metadata.json +27 -0
  255. package/skills/sync-docs-workspace/iteration-1/eval-fix-mode/with_skill/outputs/result.md +198 -0
  256. package/skills/sync-docs-workspace/iteration-1/eval-fix-mode/with_skill/run-1/grading.json +28 -0
  257. package/skills/sync-docs-workspace/iteration-1/eval-fix-mode/with_skill/run-1/timing.json +1 -0
  258. package/skills/sync-docs-workspace/iteration-1/eval-fix-mode/without_skill/outputs/result.md +94 -0
  259. package/skills/sync-docs-workspace/iteration-1/eval-fix-mode/without_skill/run-1/grading.json +28 -0
  260. package/skills/sync-docs-workspace/iteration-1/eval-fix-mode/without_skill/run-1/timing.json +1 -0
  261. package/skills/sync-docs-workspace/iteration-1/eval-sprint-closeout/eval_metadata.json +27 -0
  262. package/skills/sync-docs-workspace/iteration-1/eval-sprint-closeout/with_skill/outputs/result.md +237 -0
  263. package/skills/sync-docs-workspace/iteration-1/eval-sprint-closeout/with_skill/run-1/grading.json +28 -0
  264. package/skills/sync-docs-workspace/iteration-1/eval-sprint-closeout/with_skill/run-1/timing.json +1 -0
  265. package/skills/sync-docs-workspace/iteration-1/eval-sprint-closeout/without_skill/outputs/result.md +134 -0
  266. package/skills/sync-docs-workspace/iteration-1/eval-sprint-closeout/without_skill/run-1/grading.json +28 -0
  267. package/skills/sync-docs-workspace/iteration-1/eval-sprint-closeout/without_skill/run-1/timing.json +1 -0
  268. package/skills/sync-docs-workspace/iteration-2/benchmark.json +297 -0
  269. package/skills/sync-docs-workspace/iteration-2/benchmark.md +13 -0
  270. package/skills/sync-docs-workspace/iteration-2/eval-doc-audit/eval_metadata.json +27 -0
  271. package/skills/sync-docs-workspace/iteration-2/eval-doc-audit/with_skill/outputs/result.md +137 -0
  272. package/skills/sync-docs-workspace/iteration-2/eval-doc-audit/with_skill/run-1/grading.json +92 -0
  273. package/skills/sync-docs-workspace/iteration-2/eval-doc-audit/with_skill/run-1/timing.json +1 -0
  274. package/skills/sync-docs-workspace/iteration-2/eval-doc-audit/without_skill/outputs/result.md +134 -0
  275. package/skills/sync-docs-workspace/iteration-2/eval-doc-audit/without_skill/run-1/grading.json +86 -0
  276. package/skills/sync-docs-workspace/iteration-2/eval-doc-audit/without_skill/run-1/timing.json +1 -0
  277. package/skills/sync-docs-workspace/iteration-2/eval-fix-mode/eval_metadata.json +27 -0
  278. package/skills/sync-docs-workspace/iteration-2/eval-fix-mode/with_skill/outputs/result.md +193 -0
  279. package/skills/sync-docs-workspace/iteration-2/eval-fix-mode/with_skill/run-1/grading.json +72 -0
  280. package/skills/sync-docs-workspace/iteration-2/eval-fix-mode/with_skill/run-1/timing.json +1 -0
  281. package/skills/sync-docs-workspace/iteration-2/eval-fix-mode/without_skill/outputs/result.md +211 -0
  282. package/skills/sync-docs-workspace/iteration-2/eval-fix-mode/without_skill/run-1/grading.json +91 -0
  283. package/skills/sync-docs-workspace/iteration-2/eval-fix-mode/without_skill/run-1/timing.json +5 -0
  284. package/skills/sync-docs-workspace/iteration-2/eval-sprint-closeout/eval_metadata.json +27 -0
  285. package/skills/sync-docs-workspace/iteration-2/eval-sprint-closeout/with_skill/outputs/result.md +182 -0
  286. package/skills/sync-docs-workspace/iteration-2/eval-sprint-closeout/with_skill/run-1/grading.json +95 -0
  287. package/skills/sync-docs-workspace/iteration-2/eval-sprint-closeout/with_skill/run-1/timing.json +1 -0
  288. package/skills/sync-docs-workspace/iteration-2/eval-sprint-closeout/without_skill/outputs/result.md +222 -0
  289. package/skills/sync-docs-workspace/iteration-2/eval-sprint-closeout/without_skill/run-1/grading.json +88 -0
  290. package/skills/sync-docs-workspace/iteration-2/eval-sprint-closeout/without_skill/run-1/timing.json +5 -0
  291. package/skills/sync-docs-workspace/iteration-3/benchmark.json +298 -0
  292. package/skills/sync-docs-workspace/iteration-3/benchmark.md +13 -0
  293. package/skills/sync-docs-workspace/iteration-3/eval-doc-audit/eval_metadata.json +27 -0
  294. package/skills/sync-docs-workspace/iteration-3/eval-doc-audit/with_skill/outputs/result.md +125 -0
  295. package/skills/sync-docs-workspace/iteration-3/eval-doc-audit/with_skill/run-1/grading.json +97 -0
  296. package/skills/sync-docs-workspace/iteration-3/eval-doc-audit/with_skill/run-1/timing.json +5 -0
  297. package/skills/sync-docs-workspace/iteration-3/eval-doc-audit/without_skill/outputs/result.md +144 -0
  298. package/skills/sync-docs-workspace/iteration-3/eval-doc-audit/without_skill/run-1/grading.json +78 -0
  299. package/skills/sync-docs-workspace/iteration-3/eval-doc-audit/without_skill/run-1/timing.json +5 -0
  300. package/skills/sync-docs-workspace/iteration-3/eval-fix-mode/eval_metadata.json +27 -0
  301. package/skills/sync-docs-workspace/iteration-3/eval-fix-mode/with_skill/outputs/result.md +104 -0
  302. package/skills/sync-docs-workspace/iteration-3/eval-fix-mode/with_skill/run-1/grading.json +91 -0
  303. package/skills/sync-docs-workspace/iteration-3/eval-fix-mode/with_skill/run-1/timing.json +5 -0
  304. package/skills/sync-docs-workspace/iteration-3/eval-fix-mode/without_skill/outputs/result.md +79 -0
  305. package/skills/sync-docs-workspace/iteration-3/eval-fix-mode/without_skill/run-1/grading.json +82 -0
  306. package/skills/sync-docs-workspace/iteration-3/eval-fix-mode/without_skill/run-1/timing.json +5 -0
  307. package/skills/sync-docs-workspace/iteration-3/eval-sprint-closeout/eval_metadata.json +27 -0
  308. package/skills/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/outputs/phase1_context.json +302 -0
  309. package/skills/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/outputs/phase2_drift.txt +33 -0
  310. package/skills/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/outputs/phase3_analysis.json +114 -0
  311. package/skills/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/outputs/phase4_fix.txt +118 -0
  312. package/skills/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/outputs/phase5_validate.txt +38 -0
  313. package/skills/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/outputs/result.md +158 -0
  314. package/skills/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/run-1/grading.json +95 -0
  315. package/skills/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/run-1/timing.json +5 -0
  316. package/skills/sync-docs-workspace/iteration-3/eval-sprint-closeout/without_skill/outputs/result.md +71 -0
  317. package/skills/sync-docs-workspace/iteration-3/eval-sprint-closeout/without_skill/run-1/grading.json +90 -0
  318. package/skills/sync-docs-workspace/iteration-3/eval-sprint-closeout/without_skill/run-1/timing.json +5 -0
  319. package/skills/test-planning/SKILL.md +208 -0
  320. package/skills/test-planning/evals/evals.json +23 -0
  321. package/skills/updating-service-skills/SKILL.md +136 -0
  322. package/skills/updating-service-skills/scripts/drift_detector.py +222 -0
  323. package/skills/using-TDD/SKILL.md +410 -0
  324. package/skills/using-quality-gates/SKILL.md +254 -0
  325. package/skills/using-serena-lsp/README.md +8 -0
  326. package/skills/using-serena-lsp/REFERENCE.md +194 -0
  327. package/skills/using-serena-lsp/SKILL.md +82 -0
  328. package/skills/using-service-skills/SKILL.md +108 -0
  329. package/skills/using-service-skills/scripts/cataloger.py +74 -0
  330. package/skills/using-service-skills/scripts/skill_activator.py +152 -0
  331. package/skills/using-service-skills/scripts/test_skill_activator.py +58 -0
  332. package/skills/using-xtrm/SKILL.md +245 -0
  333. package/skills/xt-end/SKILL.md +128 -0
@@ -0,0 +1,299 @@
1
+ /**
2
+ * Todo Extension - Demonstrates state management via session entries
3
+ *
4
+ * This extension:
5
+ * - Registers a `todo` tool for the LLM to manage todos
6
+ * - Registers a `/todos` command for users to view the list
7
+ *
8
+ * State is stored in tool result details (not external files), which allows
9
+ * proper branching - when you branch, the todo state is automatically
10
+ * correct for that point in history.
11
+ */
12
+
13
+ import { StringEnum } from "@mariozechner/pi-ai";
14
+ import type { ExtensionAPI, ExtensionContext, Theme } from "@mariozechner/pi-coding-agent";
15
+ import { matchesKey, Text, truncateToWidth } from "@mariozechner/pi-tui";
16
+ import { Type } from "@sinclair/typebox";
17
+
18
+ interface Todo {
19
+ id: number;
20
+ text: string;
21
+ done: boolean;
22
+ }
23
+
24
+ interface TodoDetails {
25
+ action: "list" | "add" | "toggle" | "clear";
26
+ todos: Todo[];
27
+ nextId: number;
28
+ error?: string;
29
+ }
30
+
31
+ const TodoParams = Type.Object({
32
+ action: StringEnum(["list", "add", "toggle", "clear"] as const),
33
+ text: Type.Optional(Type.String({ description: "Todo text (for add)" })),
34
+ id: Type.Optional(Type.Number({ description: "Todo ID (for toggle)" })),
35
+ });
36
+
37
+ /**
38
+ * UI component for the /todos command
39
+ */
40
+ class TodoListComponent {
41
+ private todos: Todo[];
42
+ private theme: Theme;
43
+ private onClose: () => void;
44
+ private cachedWidth?: number;
45
+ private cachedLines?: string[];
46
+
47
+ constructor(todos: Todo[], theme: Theme, onClose: () => void) {
48
+ this.todos = todos;
49
+ this.theme = theme;
50
+ this.onClose = onClose;
51
+ }
52
+
53
+ handleInput(data: string): void {
54
+ if (matchesKey(data, "escape") || matchesKey(data, "ctrl+c")) {
55
+ this.onClose();
56
+ }
57
+ }
58
+
59
+ render(width: number): string[] {
60
+ if (this.cachedLines && this.cachedWidth === width) {
61
+ return this.cachedLines;
62
+ }
63
+
64
+ const lines: string[] = [];
65
+ const th = this.theme;
66
+
67
+ lines.push("");
68
+ const title = th.fg("accent", " Todos ");
69
+ const headerLine =
70
+ th.fg("borderMuted", "─".repeat(3)) + title + th.fg("borderMuted", "─".repeat(Math.max(0, width - 10)));
71
+ lines.push(truncateToWidth(headerLine, width));
72
+ lines.push("");
73
+
74
+ if (this.todos.length === 0) {
75
+ lines.push(truncateToWidth(` ${th.fg("dim", "No todos yet. Ask the agent to add some!")}`, width));
76
+ } else {
77
+ const done = this.todos.filter((t) => t.done).length;
78
+ const total = this.todos.length;
79
+ lines.push(truncateToWidth(` ${th.fg("muted", `${done}/${total} completed`)}`, width));
80
+ lines.push("");
81
+
82
+ for (const todo of this.todos) {
83
+ const check = todo.done ? th.fg("success", "✓") : th.fg("dim", "○");
84
+ const id = th.fg("accent", `#${todo.id}`);
85
+ const text = todo.done ? th.fg("dim", todo.text) : th.fg("text", todo.text);
86
+ lines.push(truncateToWidth(` ${check} ${id} ${text}`, width));
87
+ }
88
+ }
89
+
90
+ lines.push("");
91
+ lines.push(truncateToWidth(` ${th.fg("dim", "Press Escape to close")}`, width));
92
+ lines.push("");
93
+
94
+ this.cachedWidth = width;
95
+ this.cachedLines = lines;
96
+ return lines;
97
+ }
98
+
99
+ invalidate(): void {
100
+ this.cachedWidth = undefined;
101
+ this.cachedLines = undefined;
102
+ }
103
+ }
104
+
105
+ export default function (pi: ExtensionAPI) {
106
+ // In-memory state (reconstructed from session on load)
107
+ let todos: Todo[] = [];
108
+ let nextId = 1;
109
+
110
+ /**
111
+ * Reconstruct state from session entries.
112
+ * Scans tool results for this tool and applies them in order.
113
+ */
114
+ const reconstructState = (ctx: ExtensionContext) => {
115
+ todos = [];
116
+ nextId = 1;
117
+
118
+ for (const entry of ctx.sessionManager.getBranch()) {
119
+ if (entry.type !== "message") continue;
120
+ const msg = entry.message;
121
+ if (msg.role !== "toolResult" || msg.toolName !== "todo") continue;
122
+
123
+ const details = msg.details as TodoDetails | undefined;
124
+ if (details) {
125
+ todos = details.todos;
126
+ nextId = details.nextId;
127
+ }
128
+ }
129
+ };
130
+
131
+ // Reconstruct state on session events
132
+ pi.on("session_start", async (_event, ctx) => reconstructState(ctx));
133
+ pi.on("session_switch", async (_event, ctx) => reconstructState(ctx));
134
+ pi.on("session_fork", async (_event, ctx) => reconstructState(ctx));
135
+ pi.on("session_tree", async (_event, ctx) => reconstructState(ctx));
136
+
137
+ // Register the todo tool for the LLM
138
+ pi.registerTool({
139
+ name: "todo",
140
+ label: "Todo",
141
+ description: "Manage a todo list. Actions: list, add (text), toggle (id), clear",
142
+ parameters: TodoParams,
143
+
144
+ async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
145
+ switch (params.action) {
146
+ case "list":
147
+ return {
148
+ content: [
149
+ {
150
+ type: "text",
151
+ text: todos.length
152
+ ? todos.map((t) => `[${t.done ? "x" : " "}] #${t.id}: ${t.text}`).join("\n")
153
+ : "No todos",
154
+ },
155
+ ],
156
+ details: { action: "list", todos: [...todos], nextId } as TodoDetails,
157
+ };
158
+
159
+ case "add": {
160
+ if (!params.text) {
161
+ return {
162
+ content: [{ type: "text", text: "Error: text required for add" }],
163
+ details: { action: "add", todos: [...todos], nextId, error: "text required" } as TodoDetails,
164
+ };
165
+ }
166
+ const newTodo: Todo = { id: nextId++, text: params.text, done: false };
167
+ todos.push(newTodo);
168
+ return {
169
+ content: [{ type: "text", text: `Added todo #${newTodo.id}: ${newTodo.text}` }],
170
+ details: { action: "add", todos: [...todos], nextId } as TodoDetails,
171
+ };
172
+ }
173
+
174
+ case "toggle": {
175
+ if (params.id === undefined) {
176
+ return {
177
+ content: [{ type: "text", text: "Error: id required for toggle" }],
178
+ details: { action: "toggle", todos: [...todos], nextId, error: "id required" } as TodoDetails,
179
+ };
180
+ }
181
+ const todo = todos.find((t) => t.id === params.id);
182
+ if (!todo) {
183
+ return {
184
+ content: [{ type: "text", text: `Todo #${params.id} not found` }],
185
+ details: {
186
+ action: "toggle",
187
+ todos: [...todos],
188
+ nextId,
189
+ error: `#${params.id} not found`,
190
+ } as TodoDetails,
191
+ };
192
+ }
193
+ todo.done = !todo.done;
194
+ return {
195
+ content: [{ type: "text", text: `Todo #${todo.id} ${todo.done ? "completed" : "uncompleted"}` }],
196
+ details: { action: "toggle", todos: [...todos], nextId } as TodoDetails,
197
+ };
198
+ }
199
+
200
+ case "clear": {
201
+ const count = todos.length;
202
+ todos = [];
203
+ nextId = 1;
204
+ return {
205
+ content: [{ type: "text", text: `Cleared ${count} todos` }],
206
+ details: { action: "clear", todos: [], nextId: 1 } as TodoDetails,
207
+ };
208
+ }
209
+
210
+ default:
211
+ return {
212
+ content: [{ type: "text", text: `Unknown action: ${params.action}` }],
213
+ details: {
214
+ action: "list",
215
+ todos: [...todos],
216
+ nextId,
217
+ error: `unknown action: ${params.action}`,
218
+ } as TodoDetails,
219
+ };
220
+ }
221
+ },
222
+
223
+ renderCall(args, theme) {
224
+ let text = theme.fg("toolTitle", theme.bold("todo ")) + theme.fg("muted", args.action);
225
+ if (args.text) text += ` ${theme.fg("dim", `"${args.text}"`)}`;
226
+ if (args.id !== undefined) text += ` ${theme.fg("accent", `#${args.id}`)}`;
227
+ return new Text(text, 0, 0);
228
+ },
229
+
230
+ renderResult(result, { expanded }, theme) {
231
+ const details = result.details as TodoDetails | undefined;
232
+ if (!details) {
233
+ const text = result.content[0];
234
+ return new Text(text?.type === "text" ? text.text : "", 0, 0);
235
+ }
236
+
237
+ if (details.error) {
238
+ return new Text(theme.fg("error", `Error: ${details.error}`), 0, 0);
239
+ }
240
+
241
+ const todoList = details.todos;
242
+
243
+ switch (details.action) {
244
+ case "list": {
245
+ if (todoList.length === 0) {
246
+ return new Text(theme.fg("dim", "No todos"), 0, 0);
247
+ }
248
+ let listText = theme.fg("muted", `${todoList.length} todo(s):`);
249
+ const display = expanded ? todoList : todoList.slice(0, 5);
250
+ for (const t of display) {
251
+ const check = t.done ? theme.fg("success", "✓") : theme.fg("dim", "○");
252
+ const itemText = t.done ? theme.fg("dim", t.text) : theme.fg("muted", t.text);
253
+ listText += `\n${check} ${theme.fg("accent", `#${t.id}`)} ${itemText}`;
254
+ }
255
+ if (!expanded && todoList.length > 5) {
256
+ listText += `\n${theme.fg("dim", `... ${todoList.length - 5} more`)}`;
257
+ }
258
+ return new Text(listText, 0, 0);
259
+ }
260
+
261
+ case "add": {
262
+ const added = todoList[todoList.length - 1];
263
+ return new Text(
264
+ theme.fg("success", "✓ Added ") +
265
+ theme.fg("accent", `#${added.id}`) +
266
+ " " +
267
+ theme.fg("muted", added.text),
268
+ 0,
269
+ 0,
270
+ );
271
+ }
272
+
273
+ case "toggle": {
274
+ const text = result.content[0];
275
+ const msg = text?.type === "text" ? text.text : "";
276
+ return new Text(theme.fg("success", "✓ ") + theme.fg("muted", msg), 0, 0);
277
+ }
278
+
279
+ case "clear":
280
+ return new Text(theme.fg("success", "✓ ") + theme.fg("muted", "Cleared all todos"), 0, 0);
281
+ }
282
+ },
283
+ });
284
+
285
+ // Register the /todos command for users
286
+ pi.registerCommand("todos", {
287
+ description: "Show all todos on the current branch",
288
+ handler: async (_args, ctx) => {
289
+ if (!ctx.hasUI) {
290
+ ctx.ui.notify("/todos requires interactive mode", "error");
291
+ return;
292
+ }
293
+
294
+ await ctx.ui.custom<void>((_tui, theme, _kb, done) => {
295
+ return new TodoListComponent(todos, theme, () => done());
296
+ });
297
+ },
298
+ });
299
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "@xtrm/pi-todo",
3
+ "version": "1.0.0",
4
+ "description": "xtrm Pi extension: todo",
5
+ "type": "module",
6
+ "exports": {
7
+ ".": "./index.ts"
8
+ },
9
+ "keywords": [
10
+ "pi",
11
+ "extension",
12
+ "xtrm"
13
+ ],
14
+ "author": "xtrm",
15
+ "license": "MIT"
16
+ }
@@ -0,0 +1,89 @@
1
+ import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
2
+ import * as fs from "node:fs";
3
+ import * as path from "node:path";
4
+ import { Logger } from "../core/lib";
5
+
6
+ const logger = new Logger({ namespace: "xtrm-loader" });
7
+
8
+ /**
9
+ * Recursively find markdown files in a directory.
10
+ */
11
+ function findMarkdownFiles(dir: string, basePath: string = ""): string[] {
12
+ const results: string[] = [];
13
+ if (!fs.existsSync(dir)) return results;
14
+
15
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
16
+ for (const entry of entries) {
17
+ const relativePath = basePath ? `${basePath}/${entry.name}` : entry.name;
18
+ if (entry.isDirectory()) {
19
+ results.push(...findMarkdownFiles(path.join(dir, entry.name), relativePath));
20
+ } else if (entry.isFile() && entry.name.endsWith(".md")) {
21
+ results.push(relativePath);
22
+ }
23
+ }
24
+ return results;
25
+ }
26
+
27
+ export default function (pi: ExtensionAPI) {
28
+ let projectContext: string = "";
29
+
30
+ pi.on("session_start", async (_event, ctx) => {
31
+ const cwd = ctx.cwd;
32
+ const contextParts: string[] = [];
33
+
34
+ // 1. Architecture & Roadmap
35
+ const roadmapPaths = [
36
+ path.join(cwd, "architecture", "project_roadmap.md"),
37
+ path.join(cwd, "ROADMAP.md"),
38
+ path.join(cwd, "architecture", "index.md")
39
+ ];
40
+
41
+ for (const p of roadmapPaths) {
42
+ if (fs.existsSync(p)) {
43
+ const content = await fs.promises.readFile(p, "utf8");
44
+ contextParts.push(`## Project Roadmap & Architecture (${path.relative(cwd, p)})\n\n${content}`);
45
+ break; // Only load the first one found
46
+ }
47
+ }
48
+
49
+ // 2. Project Rules (.claude/rules)
50
+ const rulesDir = path.join(cwd, ".claude", "rules");
51
+ if (fs.existsSync(rulesDir)) {
52
+ const ruleFiles = findMarkdownFiles(rulesDir);
53
+ if (ruleFiles.length > 0) {
54
+ const rulesContent = (await Promise.all(ruleFiles.map(async f => {
55
+ const content = await fs.promises.readFile(path.join(rulesDir, f), "utf8");
56
+ return `### Rule: ${f}\n${content}`;
57
+ }))).join("\n\n");
58
+ contextParts.push(`## Project Rules\n\n${rulesContent}`);
59
+ }
60
+ }
61
+
62
+ // 3. Project Skills (.claude/skills)
63
+ const skillsDir = path.join(cwd, ".claude", "skills");
64
+ if (fs.existsSync(skillsDir)) {
65
+ const skillFiles = findMarkdownFiles(skillsDir);
66
+ if (skillFiles.length > 0) {
67
+ const skillsContent = skillFiles.map(f => {
68
+ // We only want to list the paths/names so the agent knows what it can read
69
+ return `- ${f} (Path: .claude/skills/${f})`;
70
+ }).join("\n");
71
+ contextParts.push(`## Available Project Skills\n\nExisting service skills and workflows found in .claude/skills/:\n\n${skillsContent}\n\nUse the read tool to load any of these skills if relevant to the current task.`);
72
+ }
73
+ }
74
+
75
+ projectContext = contextParts.join("\n\n---\n\n");
76
+
77
+ if (projectContext && ctx.hasUI) {
78
+ ctx.ui.notify("XTRM-Loader: Project context and skills indexed", "info");
79
+ }
80
+ });
81
+
82
+ pi.on("before_agent_start", async (event) => {
83
+ if (!projectContext) return undefined;
84
+
85
+ return {
86
+ systemPrompt: event.systemPrompt + "\n\n# Project Intelligence Context\n\n" + projectContext
87
+ };
88
+ });
89
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "@xtrm/pi-xtrm-loader",
3
+ "version": "1.0.0",
4
+ "description": "xtrm Pi extension: xtrm-loader",
5
+ "type": "module",
6
+ "exports": {
7
+ ".": "./index.ts"
8
+ },
9
+ "keywords": [
10
+ "pi",
11
+ "extension",
12
+ "xtrm"
13
+ ],
14
+ "author": "xtrm",
15
+ "license": "MIT"
16
+ }
@@ -0,0 +1,44 @@
1
+ {
2
+ "fields": [
3
+ {
4
+ "key": "DASHSCOPE_API_KEY",
5
+ "label": "DashScope API Key",
6
+ "hint": "From https://dashscope.aliyuncs.com — used for Qwen/GLM/Kimi/MiniMax models",
7
+ "secret": true,
8
+ "required": true
9
+ },
10
+ {
11
+ "key": "ZAI_API_KEY",
12
+ "label": "ZAI API Key",
13
+ "hint": "From your ZAI account dashboard",
14
+ "secret": true,
15
+ "required": false
16
+ }
17
+ ],
18
+ "oauth_providers": [
19
+ {
20
+ "key": "anthropic",
21
+ "instruction": "Run `pi` and authenticate via Claude.ai OAuth"
22
+ },
23
+ {
24
+ "key": "google-gemini-cli",
25
+ "instruction": "Run `pi` and authenticate via Google OAuth"
26
+ },
27
+ {
28
+ "key": "qwen-cli",
29
+ "instruction": "Inside `pi`, run `/login qwen-cli` for OAuth device flow"
30
+ },
31
+ {
32
+ "key": "google-antigravity",
33
+ "instruction": "Run `pi` and authenticate via Google OAuth (Antigravity)"
34
+ }
35
+ ],
36
+ "packages": [
37
+ "npm:pi-dex",
38
+ "npm:pi-gitnexus",
39
+ "npm:pi-serena-tools",
40
+ "npm:@zenobius/pi-worktrees",
41
+ "npm:@robhowley/pi-structured-return",
42
+ "npm:@aliou/pi-guardrails"
43
+ ]
44
+ }
@@ -0,0 +1,76 @@
1
+ {
2
+ "providers": {
3
+ "dashscope": {
4
+ "baseUrl": "https://coding-intl.dashscope.aliyuncs.com/v1",
5
+ "api": "openai-completions",
6
+ "apiKey": "{{DASHSCOPE_API_KEY}}",
7
+ "authHeader": true,
8
+ "models": [
9
+ {
10
+ "id": "qwen3.5-plus",
11
+ "name": "Qwen 3.5 Plus",
12
+ "reasoning": false,
13
+ "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
14
+ "contextWindow": 256000,
15
+ "maxTokens": 65536
16
+ },
17
+ {
18
+ "id": "kimi-k2.5",
19
+ "name": "Kimi K2.5",
20
+ "reasoning": false,
21
+ "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
22
+ "contextWindow": 256000,
23
+ "maxTokens": 65536
24
+ },
25
+ {
26
+ "id": "glm-5",
27
+ "name": "GLM-5",
28
+ "reasoning": false,
29
+ "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
30
+ "contextWindow": 256000,
31
+ "maxTokens": 65536
32
+ },
33
+ {
34
+ "id": "MiniMax-M2.5",
35
+ "name": "MiniMax M2.5",
36
+ "reasoning": false,
37
+ "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
38
+ "contextWindow": 256000,
39
+ "maxTokens": 65536
40
+ },
41
+ {
42
+ "id": "qwen3-max-2026-01-23",
43
+ "name": "Qwen 3 Max",
44
+ "reasoning": false,
45
+ "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
46
+ "contextWindow": 256000,
47
+ "maxTokens": 65536
48
+ },
49
+ {
50
+ "id": "qwen3-coder-next",
51
+ "name": "Qwen 3 Coder Next",
52
+ "reasoning": false,
53
+ "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
54
+ "contextWindow": 256000,
55
+ "maxTokens": 65536
56
+ },
57
+ {
58
+ "id": "qwen3-coder-plus",
59
+ "name": "Qwen 3 Coder Plus",
60
+ "reasoning": false,
61
+ "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
62
+ "contextWindow": 256000,
63
+ "maxTokens": 65536
64
+ },
65
+ {
66
+ "id": "glm-4.7",
67
+ "name": "GLM-4.7",
68
+ "reasoning": false,
69
+ "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
70
+ "contextWindow": 256000,
71
+ "maxTokens": 65536
72
+ }
73
+ ]
74
+ }
75
+ }
76
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "worktree": {
3
+ "parentDir": "../{{project}}.worktrees",
4
+ "onCreate": "npm install 2>/dev/null || true"
5
+ }
6
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "defaultProvider": "dashscope",
3
+ "defaultModel": "glm-5",
4
+ "defaultThinkingLevel": "medium",
5
+ "editorPaddingX": 0,
6
+ "theme": "light",
7
+ "packages": [
8
+ "npm:@aliou/pi-guardrails",
9
+ "npm:pi-gitnexus",
10
+ "npm:pi-serena-tools",
11
+ "npm:@zenobius/pi-worktrees"
12
+ ],
13
+ "steeringMode": "all",
14
+ "followUpMode": "all",
15
+ "hideThinkingBlock": true
16
+ }
@@ -0,0 +1,70 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "mcp__serena__list_memories",
5
+ "mcp__serena__read_memory",
6
+ "mcp__serena__get_symbols_overview",
7
+ "mcp__serena__find_symbol",
8
+ "mcp__serena__replace_symbol_body",
9
+ "Bash(python -m py_compile:*)",
10
+ "Bash(tree:*)",
11
+ "Bash(podman exec:*)",
12
+ "mcp__serena__list_dir",
13
+ "mcp__yfinance-market-intelligence__get_volatility_metrics",
14
+ "mcp__yfinance-market-intelligence__get_amt_snapshot",
15
+ "mcp__yfinance-market-intelligence__get_market_overview",
16
+ "Skill(scan-context)",
17
+ "mcp__gmail__search_emails",
18
+ "mcp__gmail__read_email",
19
+ "mcp__gmail__batch_modify_emails",
20
+ "mcp__gmail__list_email_labels",
21
+ "mcp__plugin_serena_serena__get_symbols_overview"
22
+ ],
23
+ "defaultMode": "default"
24
+ },
25
+ "model": "sonnet",
26
+ "skillSuggestions": {
27
+ "enabled": true
28
+ },
29
+ "hooks": {
30
+ "Stop": [
31
+ {
32
+ "hooks": [
33
+ {
34
+ "type": "command",
35
+ "command": "python3 \"$HOME/.claude/skills/documenting/scripts/drift_detector.py\" hook",
36
+ "timeout": 5
37
+ }
38
+ ]
39
+ }
40
+ ],
41
+ "PreToolUse": [
42
+ {
43
+ "matcher": "Grep|Glob|Bash",
44
+ "hooks": [
45
+ {
46
+ "type": "command",
47
+ "command": "node \"$HOME/.claude/hooks/gitnexus/gitnexus-hook.cjs\"",
48
+ "timeout": 8000,
49
+ "statusMessage": "Enriching with GitNexus graph context..."
50
+ }
51
+ ]
52
+ }
53
+ ]
54
+ },
55
+ "enabledPlugins": {
56
+ "pyright-lsp@claude-plugins-official": true,
57
+ "serena@claude-plugins-official": true,
58
+ "superpowers@superpowers-marketplace": true,
59
+ "convosync@convocli-marketplace": true,
60
+ "commit-commands@claude-plugins-official": true,
61
+ "context7@claude-plugins-official": true,
62
+ "github@claude-plugins-official": true,
63
+ "hookify@claude-plugins-official": true,
64
+ "agent-sdk-dev@claude-plugins-official": true,
65
+ "feature-dev@claude-plugins-official": true,
66
+ "plugin-dev@claude-plugins-official": true,
67
+ "claude-mem@thedotmack": true,
68
+ "code-simplifier@claude-plugins-official": true
69
+ }
70
+ }