@ahmed-g-gad/apothem 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (674) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/LICENSE +21 -0
  3. package/LICENSES/MIT.txt +18 -0
  4. package/LICENSES/PSF-2.0.txt +47 -0
  5. package/README.md +549 -0
  6. package/bin/README.md +37 -0
  7. package/bin/apothem.mjs +78 -0
  8. package/package.json +75 -0
  9. package/pyproject.toml +347 -0
  10. package/src/apothem/README.md +52 -0
  11. package/src/apothem/__init__.py +66 -0
  12. package/src/apothem/__main__.py +28 -0
  13. package/src/apothem/_vendor/.keep +0 -0
  14. package/src/apothem/_vendor/__init__.py +25 -0
  15. package/src/apothem/_vendor/attr/__init__.py +104 -0
  16. package/src/apothem/_vendor/attr/__init__.pyi +389 -0
  17. package/src/apothem/_vendor/attr/_cmp.py +160 -0
  18. package/src/apothem/_vendor/attr/_cmp.pyi +13 -0
  19. package/src/apothem/_vendor/attr/_compat.py +99 -0
  20. package/src/apothem/_vendor/attr/_config.py +31 -0
  21. package/src/apothem/_vendor/attr/_funcs.py +497 -0
  22. package/src/apothem/_vendor/attr/_make.py +3406 -0
  23. package/src/apothem/_vendor/attr/_next_gen.py +674 -0
  24. package/src/apothem/_vendor/attr/_typing_compat.pyi +15 -0
  25. package/src/apothem/_vendor/attr/_version_info.py +89 -0
  26. package/src/apothem/_vendor/attr/_version_info.pyi +9 -0
  27. package/src/apothem/_vendor/attr/converters.py +162 -0
  28. package/src/apothem/_vendor/attr/converters.pyi +19 -0
  29. package/src/apothem/_vendor/attr/exceptions.py +95 -0
  30. package/src/apothem/_vendor/attr/exceptions.pyi +17 -0
  31. package/src/apothem/_vendor/attr/filters.py +72 -0
  32. package/src/apothem/_vendor/attr/filters.pyi +6 -0
  33. package/src/apothem/_vendor/attr/py.typed +0 -0
  34. package/src/apothem/_vendor/attr/setters.py +79 -0
  35. package/src/apothem/_vendor/attr/setters.pyi +20 -0
  36. package/src/apothem/_vendor/attr/validators.py +750 -0
  37. package/src/apothem/_vendor/attr/validators.pyi +140 -0
  38. package/src/apothem/_vendor/attr.LICENSE +21 -0
  39. package/src/apothem/_vendor/attrs/__init__.py +72 -0
  40. package/src/apothem/_vendor/attrs/__init__.pyi +314 -0
  41. package/src/apothem/_vendor/attrs/converters.py +3 -0
  42. package/src/apothem/_vendor/attrs/exceptions.py +3 -0
  43. package/src/apothem/_vendor/attrs/filters.py +3 -0
  44. package/src/apothem/_vendor/attrs/py.typed +0 -0
  45. package/src/apothem/_vendor/attrs/setters.py +3 -0
  46. package/src/apothem/_vendor/attrs/validators.py +3 -0
  47. package/src/apothem/_vendor/attrs.LICENSE +21 -0
  48. package/src/apothem/_vendor/jsonschema/__init__.py +120 -0
  49. package/src/apothem/_vendor/jsonschema/__main__.py +6 -0
  50. package/src/apothem/_vendor/jsonschema/_format.py +546 -0
  51. package/src/apothem/_vendor/jsonschema/_keywords.py +449 -0
  52. package/src/apothem/_vendor/jsonschema/_legacy_keywords.py +449 -0
  53. package/src/apothem/_vendor/jsonschema/_types.py +204 -0
  54. package/src/apothem/_vendor/jsonschema/_typing.py +29 -0
  55. package/src/apothem/_vendor/jsonschema/_utils.py +355 -0
  56. package/src/apothem/_vendor/jsonschema/benchmarks/__init__.py +5 -0
  57. package/src/apothem/_vendor/jsonschema/benchmarks/const_vs_enum.py +30 -0
  58. package/src/apothem/_vendor/jsonschema/benchmarks/contains.py +28 -0
  59. package/src/apothem/_vendor/jsonschema/benchmarks/import_benchmark.py +31 -0
  60. package/src/apothem/_vendor/jsonschema/benchmarks/issue232/issue.json +2653 -0
  61. package/src/apothem/_vendor/jsonschema/benchmarks/issue232.py +25 -0
  62. package/src/apothem/_vendor/jsonschema/benchmarks/json_schema_test_suite.py +12 -0
  63. package/src/apothem/_vendor/jsonschema/benchmarks/nested_schemas.py +56 -0
  64. package/src/apothem/_vendor/jsonschema/benchmarks/subcomponents.py +42 -0
  65. package/src/apothem/_vendor/jsonschema/benchmarks/unused_registry.py +35 -0
  66. package/src/apothem/_vendor/jsonschema/benchmarks/useless_applicator_schemas.py +106 -0
  67. package/src/apothem/_vendor/jsonschema/benchmarks/useless_keywords.py +32 -0
  68. package/src/apothem/_vendor/jsonschema/benchmarks/validator_creation.py +14 -0
  69. package/src/apothem/_vendor/jsonschema/cli.py +292 -0
  70. package/src/apothem/_vendor/jsonschema/exceptions.py +490 -0
  71. package/src/apothem/_vendor/jsonschema/protocols.py +230 -0
  72. package/src/apothem/_vendor/jsonschema/validators.py +1410 -0
  73. package/src/apothem/_vendor/jsonschema.LICENSE +19 -0
  74. package/src/apothem/_vendor/jsonschema_specifications/__init__.py +12 -0
  75. package/src/apothem/_vendor/jsonschema_specifications/_core.py +38 -0
  76. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/metaschema.json +42 -0
  77. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/applicator +56 -0
  78. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/content +17 -0
  79. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/core +57 -0
  80. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/format +14 -0
  81. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/meta-data +37 -0
  82. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/validation +98 -0
  83. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/metaschema.json +58 -0
  84. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/applicator +48 -0
  85. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/content +17 -0
  86. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/core +51 -0
  87. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/format-annotation +14 -0
  88. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/format-assertion +14 -0
  89. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/meta-data +37 -0
  90. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/unevaluated +15 -0
  91. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/validation +98 -0
  92. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft3/metaschema.json +172 -0
  93. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft4/metaschema.json +149 -0
  94. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft6/metaschema.json +153 -0
  95. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft7/metaschema.json +166 -0
  96. package/src/apothem/_vendor/jsonschema_specifications.LICENSE +19 -0
  97. package/src/apothem/_vendor/referencing/__init__.py +7 -0
  98. package/src/apothem/_vendor/referencing/_attrs.py +31 -0
  99. package/src/apothem/_vendor/referencing/_attrs.pyi +21 -0
  100. package/src/apothem/_vendor/referencing/_core.py +739 -0
  101. package/src/apothem/_vendor/referencing/exceptions.py +165 -0
  102. package/src/apothem/_vendor/referencing/jsonschema.py +642 -0
  103. package/src/apothem/_vendor/referencing/py.typed +0 -0
  104. package/src/apothem/_vendor/referencing/retrieval.py +94 -0
  105. package/src/apothem/_vendor/referencing/typing.py +61 -0
  106. package/src/apothem/_vendor/referencing.LICENSE +19 -0
  107. package/src/apothem/_vendor/rpds/__init__.py +251 -0
  108. package/src/apothem/_vendor/typing_extensions.LICENSE +279 -0
  109. package/src/apothem/_vendor/typing_extensions.py +4317 -0
  110. package/src/apothem/_vendor/vendor.txt +22 -0
  111. package/src/apothem/_vendor/yaml/__init__.py +389 -0
  112. package/src/apothem/_vendor/yaml/composer.py +138 -0
  113. package/src/apothem/_vendor/yaml/constructor.py +748 -0
  114. package/src/apothem/_vendor/yaml/cyaml.py +100 -0
  115. package/src/apothem/_vendor/yaml/dumper.py +61 -0
  116. package/src/apothem/_vendor/yaml/emitter.py +1137 -0
  117. package/src/apothem/_vendor/yaml/error.py +74 -0
  118. package/src/apothem/_vendor/yaml/events.py +85 -0
  119. package/src/apothem/_vendor/yaml/loader.py +63 -0
  120. package/src/apothem/_vendor/yaml/nodes.py +48 -0
  121. package/src/apothem/_vendor/yaml/parser.py +588 -0
  122. package/src/apothem/_vendor/yaml/reader.py +185 -0
  123. package/src/apothem/_vendor/yaml/representer.py +388 -0
  124. package/src/apothem/_vendor/yaml/resolver.py +226 -0
  125. package/src/apothem/_vendor/yaml/scanner.py +1435 -0
  126. package/src/apothem/_vendor/yaml/serializer.py +110 -0
  127. package/src/apothem/_vendor/yaml/tokens.py +103 -0
  128. package/src/apothem/_vendor/yaml.LICENSE +20 -0
  129. package/src/apothem/agents/README.md +60 -0
  130. package/src/apothem/agents/codebase-explorer.md +91 -0
  131. package/src/apothem/agents/convention-auditor.md +93 -0
  132. package/src/apothem/agents/dependency-auditor.md +97 -0
  133. package/src/apothem/agents/fact-checker.md +84 -0
  134. package/src/apothem/agents/mcp-builder.md +86 -0
  135. package/src/apothem/agents/memory-auditor.md +93 -0
  136. package/src/apothem/agents/prompt-evaluator.md +87 -0
  137. package/src/apothem/agents/quality-gate.md +103 -0
  138. package/src/apothem/agents/refactor-surgeon.md +74 -0
  139. package/src/apothem/agents/research-scout.md +73 -0
  140. package/src/apothem/agents/security-scanner.md +83 -0
  141. package/src/apothem/agents/test-runner.md +84 -0
  142. package/src/apothem/audit/README.md +73 -0
  143. package/src/apothem/audit/_scan_lib.py +182 -0
  144. package/src/apothem/audit/analyze_graph.py +260 -0
  145. package/src/apothem/audit/build_capability_graph.py +607 -0
  146. package/src/apothem/audit/build_inventory.py +657 -0
  147. package/src/apothem/audit/build_plans_provenance.py +997 -0
  148. package/src/apothem/audit/check_links.py +389 -0
  149. package/src/apothem/audit/classify_artifacts.py +381 -0
  150. package/src/apothem/audit/deprecated-tokens.txt +10 -0
  151. package/src/apothem/audit/execute_plans_migration.py +491 -0
  152. package/src/apothem/audit/known-projects.txt +15 -0
  153. package/src/apothem/audit/render_capability_index.py +467 -0
  154. package/src/apothem/audit/render_inventory.py +405 -0
  155. package/src/apothem/audit/scan_ai_surfaces.py +1125 -0
  156. package/src/apothem/audit/scan_ai_surfaces_coarse.py +261 -0
  157. package/src/apothem/audit/scan_drift_features.py +143 -0
  158. package/src/apothem/audit/scan_frontmatter.py +293 -0
  159. package/src/apothem/audit/scan_header_coverage.py +1134 -0
  160. package/src/apothem/audit/scan_plan_leakage.py +540 -0
  161. package/src/apothem/audit/scan_plans_discipline.py +188 -0
  162. package/src/apothem/audit/scan_secrets_pii.py +245 -0
  163. package/src/apothem/audit/scan_stale_tokens.py +296 -0
  164. package/src/apothem/audit/synthesize_drift.py +205 -0
  165. package/src/apothem/benchmarks/README.md +33 -0
  166. package/src/apothem/benchmarks/__init__.py +3 -0
  167. package/src/apothem/benchmarks/bench_agents.py +63 -0
  168. package/src/apothem/benchmarks/bench_hooks.py +93 -0
  169. package/src/apothem/benchmarks/bench_install.py +58 -0
  170. package/src/apothem/benchmarks/bench_tests.py +93 -0
  171. package/src/apothem/benchmarks/bench_validate_ecosystem.py +84 -0
  172. package/src/apothem/cli/README.md +33 -0
  173. package/src/apothem/cli/__init__.py +229 -0
  174. package/src/apothem/cli/_cmd_completion.py +88 -0
  175. package/src/apothem/cli/_cmd_diff.py +181 -0
  176. package/src/apothem/cli/_cmd_doctor.py +143 -0
  177. package/src/apothem/cli/_cmd_harnesses.py +167 -0
  178. package/src/apothem/cli/_cmd_install.py +327 -0
  179. package/src/apothem/cli/_cmd_migrate_workspace.py +143 -0
  180. package/src/apothem/cli/_cmd_profile.py +341 -0
  181. package/src/apothem/cli/_cmd_status.py +180 -0
  182. package/src/apothem/cli/_cmd_uninstall.py +215 -0
  183. package/src/apothem/cli/_cmd_update.py +397 -0
  184. package/src/apothem/cli/_cmd_verify.py +194 -0
  185. package/src/apothem/cli/_common_flags.py +90 -0
  186. package/src/apothem/cli/_epilogs.py +296 -0
  187. package/src/apothem/cli/_helpers.py +857 -0
  188. package/src/apothem/cli/_json_formatter.py +21 -0
  189. package/src/apothem/cli/_materialize.py +376 -0
  190. package/src/apothem/cli/completions/apothem.bash +30 -0
  191. package/src/apothem/cli/completions/apothem.fish +19 -0
  192. package/src/apothem/cli/completions/apothem.ps1 +27 -0
  193. package/src/apothem/cli/completions/apothem.zsh +42 -0
  194. package/src/apothem/cli/reference_export.py +126 -0
  195. package/src/apothem/commands/README.md +125 -0
  196. package/src/apothem/commands/a11y-audit.md +203 -0
  197. package/src/apothem/commands/architecture-review.md +194 -0
  198. package/src/apothem/commands/audit.md +165 -0
  199. package/src/apothem/commands/code-audit.md +218 -0
  200. package/src/apothem/commands/code-review.md +193 -0
  201. package/src/apothem/commands/dependency-audit.md +209 -0
  202. package/src/apothem/commands/docs-review.md +199 -0
  203. package/src/apothem/commands/elevate.md +285 -0
  204. package/src/apothem/commands/eval.md +149 -0
  205. package/src/apothem/commands/fortress.md +172 -0
  206. package/src/apothem/commands/freshify.md +168 -0
  207. package/src/apothem/commands/github-deploy-fresh.md +178 -0
  208. package/src/apothem/commands/github-deploy-next.md +167 -0
  209. package/src/apothem/commands/perf-audit.md +198 -0
  210. package/src/apothem/commands/plan-amend.md +104 -0
  211. package/src/apothem/commands/plan-audit.md +127 -0
  212. package/src/apothem/commands/plan-design.md +257 -0
  213. package/src/apothem/commands/plan-execute.md +495 -0
  214. package/src/apothem/commands/plan-generate.md +351 -0
  215. package/src/apothem/commands/plan-review.md +555 -0
  216. package/src/apothem/commands/plan-spec.md +359 -0
  217. package/src/apothem/commands/plan-status.md +222 -0
  218. package/src/apothem/commands/plan.md +173 -0
  219. package/src/apothem/commands/projectify.md +142 -0
  220. package/src/apothem/commands/release-readiness.md +142 -0
  221. package/src/apothem/commands/research-analysis.md +241 -0
  222. package/src/apothem/commands/research-design.md +231 -0
  223. package/src/apothem/commands/research-disseminate.md +225 -0
  224. package/src/apothem/commands/research-experiment.md +232 -0
  225. package/src/apothem/commands/research-ideate.md +213 -0
  226. package/src/apothem/commands/research-paper.md +252 -0
  227. package/src/apothem/commands/research-proposal.md +220 -0
  228. package/src/apothem/commands/research-publish.md +255 -0
  229. package/src/apothem/commands/research-review.md +251 -0
  230. package/src/apothem/commands/research-sources.md +266 -0
  231. package/src/apothem/commands/research-spec.md +255 -0
  232. package/src/apothem/commands/research-synthesis.md +233 -0
  233. package/src/apothem/commands/research-theory.md +218 -0
  234. package/src/apothem/commands/research.md +181 -0
  235. package/src/apothem/commands/security-audit.md +196 -0
  236. package/src/apothem/commands/supply-chain-audit.md +192 -0
  237. package/src/apothem/commands/test-suite.md +146 -0
  238. package/src/apothem/commands/threat-model-audit.md +199 -0
  239. package/src/apothem/commands/ux-review.md +202 -0
  240. package/src/apothem/commands/workflow.md +162 -0
  241. package/src/apothem/conformity/README.md +173 -0
  242. package/src/apothem/conformity/__init__.py +1 -0
  243. package/src/apothem/conformity/_grep_base.py +93 -0
  244. package/src/apothem/conformity/agent_capability_grep.py +306 -0
  245. package/src/apothem/conformity/agents_md_coverage_grep.py +382 -0
  246. package/src/apothem/conformity/agnosticism_grep.py +311 -0
  247. package/src/apothem/conformity/always_on_budget_grep.py +318 -0
  248. package/src/apothem/conformity/bare_except_grep.py +115 -0
  249. package/src/apothem/conformity/binding_reciprocity_grep.py +151 -0
  250. package/src/apothem/conformity/brand_mark_grep.py +272 -0
  251. package/src/apothem/conformity/commented_out_code_grep.py +176 -0
  252. package/src/apothem/conformity/completion_claim_grep.py +169 -0
  253. package/src/apothem/conformity/conventional_commit_grep.py +319 -0
  254. package/src/apothem/conformity/copilot_instructions_presence_grep.py +324 -0
  255. package/src/apothem/conformity/cross_platform_matrix_grep.py +297 -0
  256. package/src/apothem/conformity/determinism_grep.py +306 -0
  257. package/src/apothem/conformity/diagram_staleness_grep.py +154 -0
  258. package/src/apothem/conformity/dynamism_grep.py +284 -0
  259. package/src/apothem/conformity/editorconfig_presence_grep.py +281 -0
  260. package/src/apothem/conformity/file_header_grep.py +502 -0
  261. package/src/apothem/conformity/freshness_token_grep.py +233 -0
  262. package/src/apothem/conformity/frontmatter_grep.py +274 -0
  263. package/src/apothem/conformity/frontmatter_value_grep.py +386 -0
  264. package/src/apothem/conformity/gate.py +1386 -0
  265. package/src/apothem/conformity/gitattributes_presence_grep.py +238 -0
  266. package/src/apothem/conformity/harden_runner_grep.py +320 -0
  267. package/src/apothem/conformity/hedging_grep.py +129 -0
  268. package/src/apothem/conformity/license_author_consistency_grep.py +204 -0
  269. package/src/apothem/conformity/link_check.py +327 -0
  270. package/src/apothem/conformity/magic_number_grep.py +182 -0
  271. package/src/apothem/conformity/multi_surface_coherence_grep.py +620 -0
  272. package/src/apothem/conformity/naming_grep.py +224 -0
  273. package/src/apothem/conformity/no_global_plans_grep.py +339 -0
  274. package/src/apothem/conformity/no_toplevel_docs_grep.py +120 -0
  275. package/src/apothem/conformity/oidc_trusted_publishing_grep.py +291 -0
  276. package/src/apothem/conformity/option_annotation_grep.py +352 -0
  277. package/src/apothem/conformity/orphan_output_grep.py +206 -0
  278. package/src/apothem/conformity/permissions_minimum_scope_grep.py +299 -0
  279. package/src/apothem/conformity/plain_language_grep.py +559 -0
  280. package/src/apothem/conformity/plan_next_step_consistency_grep.py +450 -0
  281. package/src/apothem/conformity/plan_suite_structure_grep.py +534 -0
  282. package/src/apothem/conformity/plans_discipline_language_grep.py +245 -0
  283. package/src/apothem/conformity/production_ready_pr_grep.py +200 -0
  284. package/src/apothem/conformity/recommend_next_step_grep.py +250 -0
  285. package/src/apothem/conformity/redundancy_grep.py +401 -0
  286. package/src/apothem/conformity/reference_token_grep.py +230 -0
  287. package/src/apothem/conformity/registry_capability_consistency_grep.py +368 -0
  288. package/src/apothem/conformity/secret_leak_grep.py +193 -0
  289. package/src/apothem/conformity/semver_stability_grep.py +358 -0
  290. package/src/apothem/conformity/smoke_install_grep.py +194 -0
  291. package/src/apothem/conformity/static_version_grep.py +284 -0
  292. package/src/apothem/conformity/token_efficiency_grep.py +185 -0
  293. package/src/apothem/conformity/unpinned_action_grep.py +115 -0
  294. package/src/apothem/conformity/user_confirm_grep.py +74 -0
  295. package/src/apothem/conformity/workflow_concurrency_grep.py +283 -0
  296. package/src/apothem/harnesses/README.md +63 -0
  297. package/src/apothem/harnesses/__init__.py +16 -0
  298. package/src/apothem/harnesses/_shared/README.md +36 -0
  299. package/src/apothem/harnesses/_shared/__init__.py +12 -0
  300. package/src/apothem/harnesses/_shared/install_driver.py +281 -0
  301. package/src/apothem/harnesses/_shared/install_driver_apply.py +612 -0
  302. package/src/apothem/harnesses/_shared/install_driver_backup.py +535 -0
  303. package/src/apothem/harnesses/_shared/install_driver_converters.py +310 -0
  304. package/src/apothem/harnesses/_shared/install_driver_lifecycle.py +495 -0
  305. package/src/apothem/harnesses/_shared/install_driver_materialize.py +675 -0
  306. package/src/apothem/harnesses/_shared/install_driver_merge.py +656 -0
  307. package/src/apothem/harnesses/_shared/install_driver_pathsafety.py +137 -0
  308. package/src/apothem/harnesses/_shared/install_driver_planvalidation.py +240 -0
  309. package/src/apothem/harnesses/_shared/install_driver_removal.py +366 -0
  310. package/src/apothem/harnesses/_shared/install_driver_treeops.py +248 -0
  311. package/src/apothem/harnesses/_shared/install_driver_types.py +330 -0
  312. package/src/apothem/harnesses/_shared/wrapper_factories.py +448 -0
  313. package/src/apothem/harnesses/antigravity/STANDARD-CONVENTION-PIN.md +91 -0
  314. package/src/apothem/harnesses/antigravity/__init__.py +70 -0
  315. package/src/apothem/harnesses/antigravity/capabilities.yml +40 -0
  316. package/src/apothem/harnesses/antigravity/install.py +63 -0
  317. package/src/apothem/harnesses/antigravity/templates/GEMINI.md +40 -0
  318. package/src/apothem/harnesses/antigravity/templates/plugin.json +5 -0
  319. package/src/apothem/harnesses/antigravity/uninstall.py +22 -0
  320. package/src/apothem/harnesses/antigravity/update.py +10 -0
  321. package/src/apothem/harnesses/antigravity/verify.py +11 -0
  322. package/src/apothem/harnesses/claude_code/STANDARD-CONVENTION-PIN.md +65 -0
  323. package/src/apothem/harnesses/claude_code/__init__.py +107 -0
  324. package/src/apothem/harnesses/claude_code/capabilities.yml +42 -0
  325. package/src/apothem/harnesses/claude_code/install.py +147 -0
  326. package/src/apothem/harnesses/claude_code/templates/settings.json +351 -0
  327. package/src/apothem/harnesses/claude_code/uninstall.py +23 -0
  328. package/src/apothem/harnesses/claude_code/update.py +10 -0
  329. package/src/apothem/harnesses/claude_code/verify.py +11 -0
  330. package/src/apothem/harnesses/codebuddy/STANDARD-CONVENTION-PIN.md +74 -0
  331. package/src/apothem/harnesses/codebuddy/__init__.py +49 -0
  332. package/src/apothem/harnesses/codebuddy/capabilities.yml +34 -0
  333. package/src/apothem/harnesses/codebuddy/install.py +40 -0
  334. package/src/apothem/harnesses/codebuddy/templates/apothem-rules.md +37 -0
  335. package/src/apothem/harnesses/codebuddy/uninstall.py +25 -0
  336. package/src/apothem/harnesses/codebuddy/update.py +10 -0
  337. package/src/apothem/harnesses/codebuddy/verify.py +11 -0
  338. package/src/apothem/harnesses/codex/STANDARD-CONVENTION-PIN.md +79 -0
  339. package/src/apothem/harnesses/codex/__init__.py +72 -0
  340. package/src/apothem/harnesses/codex/capabilities.yml +40 -0
  341. package/src/apothem/harnesses/codex/install.py +69 -0
  342. package/src/apothem/harnesses/codex/templates/AGENTS.md +40 -0
  343. package/src/apothem/harnesses/codex/templates/hooks.json +127 -0
  344. package/src/apothem/harnesses/codex/uninstall.py +23 -0
  345. package/src/apothem/harnesses/codex/update.py +10 -0
  346. package/src/apothem/harnesses/codex/verify.py +11 -0
  347. package/src/apothem/harnesses/cursor/STANDARD-CONVENTION-PIN.md +79 -0
  348. package/src/apothem/harnesses/cursor/__init__.py +48 -0
  349. package/src/apothem/harnesses/cursor/capabilities.yml +42 -0
  350. package/src/apothem/harnesses/cursor/install.py +38 -0
  351. package/src/apothem/harnesses/cursor/templates/apothem-rules.mdc +40 -0
  352. package/src/apothem/harnesses/cursor/uninstall.py +25 -0
  353. package/src/apothem/harnesses/cursor/update.py +10 -0
  354. package/src/apothem/harnesses/cursor/verify.py +11 -0
  355. package/src/apothem/harnesses/gemini_cli/STANDARD-CONVENTION-PIN.md +102 -0
  356. package/src/apothem/harnesses/gemini_cli/__init__.py +52 -0
  357. package/src/apothem/harnesses/gemini_cli/capabilities.yml +43 -0
  358. package/src/apothem/harnesses/gemini_cli/install.py +43 -0
  359. package/src/apothem/harnesses/gemini_cli/templates/GEMINI.md +38 -0
  360. package/src/apothem/harnesses/gemini_cli/uninstall.py +25 -0
  361. package/src/apothem/harnesses/gemini_cli/update.py +10 -0
  362. package/src/apothem/harnesses/gemini_cli/verify.py +11 -0
  363. package/src/apothem/harnesses/github_copilot/STANDARD-CONVENTION-PIN.md +84 -0
  364. package/src/apothem/harnesses/github_copilot/__init__.py +47 -0
  365. package/src/apothem/harnesses/github_copilot/capabilities.yml +42 -0
  366. package/src/apothem/harnesses/github_copilot/install.py +40 -0
  367. package/src/apothem/harnesses/github_copilot/templates/copilot-instructions.md +33 -0
  368. package/src/apothem/harnesses/github_copilot/uninstall.py +25 -0
  369. package/src/apothem/harnesses/github_copilot/update.py +10 -0
  370. package/src/apothem/harnesses/github_copilot/verify.py +11 -0
  371. package/src/apothem/harnesses/glm/STANDARD-CONVENTION-PIN.md +77 -0
  372. package/src/apothem/harnesses/glm/__init__.py +56 -0
  373. package/src/apothem/harnesses/glm/capabilities.yml +33 -0
  374. package/src/apothem/harnesses/glm/install.py +45 -0
  375. package/src/apothem/harnesses/glm/templates/glm.toml +58 -0
  376. package/src/apothem/harnesses/glm/uninstall.py +25 -0
  377. package/src/apothem/harnesses/glm/update.py +10 -0
  378. package/src/apothem/harnesses/glm/verify.py +11 -0
  379. package/src/apothem/harnesses/hermes/STANDARD-CONVENTION-PIN.md +57 -0
  380. package/src/apothem/harnesses/hermes/__init__.py +33 -0
  381. package/src/apothem/harnesses/hermes/capabilities.yml +36 -0
  382. package/src/apothem/harnesses/hermes/install.py +17 -0
  383. package/src/apothem/harnesses/hermes/materializer.py +35 -0
  384. package/src/apothem/harnesses/hermes/uninstall.py +33 -0
  385. package/src/apothem/harnesses/hermes/update.py +10 -0
  386. package/src/apothem/harnesses/hermes/verify.py +11 -0
  387. package/src/apothem/harnesses/kimi_code/STANDARD-CONVENTION-PIN.md +128 -0
  388. package/src/apothem/harnesses/kimi_code/__init__.py +59 -0
  389. package/src/apothem/harnesses/kimi_code/capabilities.yml +40 -0
  390. package/src/apothem/harnesses/kimi_code/install.py +42 -0
  391. package/src/apothem/harnesses/kimi_code/templates/AGENTS.md +43 -0
  392. package/src/apothem/harnesses/kimi_code/uninstall.py +27 -0
  393. package/src/apothem/harnesses/kimi_code/update.py +10 -0
  394. package/src/apothem/harnesses/kimi_code/verify.py +11 -0
  395. package/src/apothem/harnesses/kiro/STANDARD-CONVENTION-PIN.md +77 -0
  396. package/src/apothem/harnesses/kiro/__init__.py +49 -0
  397. package/src/apothem/harnesses/kiro/capabilities.yml +36 -0
  398. package/src/apothem/harnesses/kiro/install.py +39 -0
  399. package/src/apothem/harnesses/kiro/templates/apothem-rules.md +36 -0
  400. package/src/apothem/harnesses/kiro/uninstall.py +25 -0
  401. package/src/apothem/harnesses/kiro/update.py +10 -0
  402. package/src/apothem/harnesses/kiro/verify.py +11 -0
  403. package/src/apothem/harnesses/open_claw/STANDARD-CONVENTION-PIN.md +62 -0
  404. package/src/apothem/harnesses/open_claw/__init__.py +35 -0
  405. package/src/apothem/harnesses/open_claw/capabilities.yml +35 -0
  406. package/src/apothem/harnesses/open_claw/install.py +17 -0
  407. package/src/apothem/harnesses/open_claw/materializer.py +36 -0
  408. package/src/apothem/harnesses/open_claw/uninstall.py +32 -0
  409. package/src/apothem/harnesses/open_claw/update.py +10 -0
  410. package/src/apothem/harnesses/open_claw/verify.py +11 -0
  411. package/src/apothem/harnesses/opencode/STANDARD-CONVENTION-PIN.md +76 -0
  412. package/src/apothem/harnesses/opencode/__init__.py +35 -0
  413. package/src/apothem/harnesses/opencode/capabilities.yml +43 -0
  414. package/src/apothem/harnesses/opencode/install.py +17 -0
  415. package/src/apothem/harnesses/opencode/materializer.py +31 -0
  416. package/src/apothem/harnesses/opencode/uninstall.py +34 -0
  417. package/src/apothem/harnesses/opencode/update.py +10 -0
  418. package/src/apothem/harnesses/opencode/verify.py +11 -0
  419. package/src/apothem/harnesses/qwen_code/STANDARD-CONVENTION-PIN.md +87 -0
  420. package/src/apothem/harnesses/qwen_code/__init__.py +37 -0
  421. package/src/apothem/harnesses/qwen_code/capabilities.yml +43 -0
  422. package/src/apothem/harnesses/qwen_code/install.py +19 -0
  423. package/src/apothem/harnesses/qwen_code/materializer.py +174 -0
  424. package/src/apothem/harnesses/qwen_code/templates/QWEN.md +30 -0
  425. package/src/apothem/harnesses/qwen_code/uninstall.py +34 -0
  426. package/src/apothem/harnesses/qwen_code/update.py +10 -0
  427. package/src/apothem/harnesses/qwen_code/verify.py +11 -0
  428. package/src/apothem/harnesses/trae/STANDARD-CONVENTION-PIN.md +70 -0
  429. package/src/apothem/harnesses/trae/__init__.py +49 -0
  430. package/src/apothem/harnesses/trae/capabilities.yml +34 -0
  431. package/src/apothem/harnesses/trae/install.py +38 -0
  432. package/src/apothem/harnesses/trae/templates/apothem-rules.md +37 -0
  433. package/src/apothem/harnesses/trae/uninstall.py +25 -0
  434. package/src/apothem/harnesses/trae/update.py +10 -0
  435. package/src/apothem/harnesses/trae/verify.py +11 -0
  436. package/src/apothem/harnesses/windsurf/STANDARD-CONVENTION-PIN.md +91 -0
  437. package/src/apothem/harnesses/windsurf/__init__.py +52 -0
  438. package/src/apothem/harnesses/windsurf/capabilities.yml +40 -0
  439. package/src/apothem/harnesses/windsurf/install.py +41 -0
  440. package/src/apothem/harnesses/windsurf/templates/apothem-rules.md +37 -0
  441. package/src/apothem/harnesses/windsurf/uninstall.py +25 -0
  442. package/src/apothem/harnesses/windsurf/update.py +10 -0
  443. package/src/apothem/harnesses/windsurf/verify.py +11 -0
  444. package/src/apothem/harnesses/zed/STANDARD-CONVENTION-PIN.md +92 -0
  445. package/src/apothem/harnesses/zed/__init__.py +57 -0
  446. package/src/apothem/harnesses/zed/capabilities.yml +38 -0
  447. package/src/apothem/harnesses/zed/install.py +41 -0
  448. package/src/apothem/harnesses/zed/templates/apothem-rules.md +32 -0
  449. package/src/apothem/harnesses/zed/uninstall.py +28 -0
  450. package/src/apothem/harnesses/zed/update.py +10 -0
  451. package/src/apothem/harnesses/zed/verify.py +11 -0
  452. package/src/apothem/hooks/README.md +81 -0
  453. package/src/apothem/hooks/__init__.py +24 -0
  454. package/src/apothem/hooks/askuserquestion_validator.py +380 -0
  455. package/src/apothem/hooks/dispatch.py +296 -0
  456. package/src/apothem/hooks/emit_hook_context.py +444 -0
  457. package/src/apothem/hooks/hooks.json +318 -0
  458. package/src/apothem/hooks/lib/README.md +39 -0
  459. package/src/apothem/hooks/lib/__init__.py +18 -0
  460. package/src/apothem/hooks/lib/bootstrap.ps1 +129 -0
  461. package/src/apothem/hooks/lib/bootstrap.sh +103 -0
  462. package/src/apothem/hooks/lib/events.py +51 -0
  463. package/src/apothem/hooks/lib/find-pwsh.ps1 +78 -0
  464. package/src/apothem/hooks/lib/find-pwsh.sh +76 -0
  465. package/src/apothem/hooks/lib/find-python.ps1 +63 -0
  466. package/src/apothem/hooks/lib/find-python.sh +97 -0
  467. package/src/apothem/hooks/lib/log.py +43 -0
  468. package/src/apothem/hooks/lib/resolve_root.py +264 -0
  469. package/src/apothem/hooks/messages/postcompact.md +14 -0
  470. package/src/apothem/hooks/messages/posttooluse-proactive-compaction.md +46 -0
  471. package/src/apothem/hooks/messages/precompact.md +14 -0
  472. package/src/apothem/hooks/messages/pretooluse-askuserquestion-recommended.md +65 -0
  473. package/src/apothem/hooks/messages/pretooluse-bash-plan-guard.md +97 -0
  474. package/src/apothem/hooks/messages/pretooluse-bash.md +39 -0
  475. package/src/apothem/hooks/messages/pretooluse-conformity.md +70 -0
  476. package/src/apothem/hooks/messages/pretooluse-dependency-guard.md +21 -0
  477. package/src/apothem/hooks/messages/pretooluse-edit-header-guard.md +61 -0
  478. package/src/apothem/hooks/messages/pretooluse-edit.md +21 -0
  479. package/src/apothem/hooks/messages/pretooluse-eval-guard.md +39 -0
  480. package/src/apothem/hooks/messages/pretooluse-notebookedit.md +11 -0
  481. package/src/apothem/hooks/messages/pretooluse-write-header-guard.md +45 -0
  482. package/src/apothem/hooks/messages/pretooluse-write-plan-guard.md +72 -0
  483. package/src/apothem/hooks/messages/pretooluse-write.md +21 -0
  484. package/src/apothem/hooks/messages/sessionstart.md +15 -0
  485. package/src/apothem/hooks/messages/stop.md +27 -0
  486. package/src/apothem/hooks/proactive_compaction_tracker.py +327 -0
  487. package/src/apothem/hooks/session_start_bootstrap.py +472 -0
  488. package/src/apothem/lib/README.md +42 -0
  489. package/src/apothem/lib/__init__.py +13 -0
  490. package/src/apothem/lib/atomic_io.py +189 -0
  491. package/src/apothem/lib/auditor.py +687 -0
  492. package/src/apothem/lib/clean_slate.py +396 -0
  493. package/src/apothem/lib/contexts.py +352 -0
  494. package/src/apothem/lib/data_home.py +255 -0
  495. package/src/apothem/lib/frontmatter.py +101 -0
  496. package/src/apothem/lib/harness_materializer.py +213 -0
  497. package/src/apothem/lib/harness_protocol.py +59 -0
  498. package/src/apothem/lib/harness_registry.py +282 -0
  499. package/src/apothem/lib/harness_registry_data.py +843 -0
  500. package/src/apothem/lib/install_ledger.py +347 -0
  501. package/src/apothem/lib/learning.py +540 -0
  502. package/src/apothem/lib/memory.py +347 -0
  503. package/src/apothem/lib/parallel_sweep.py +234 -0
  504. package/src/apothem/lib/plan_tiers.py +200 -0
  505. package/src/apothem/lib/plugin_bootstrap.py +132 -0
  506. package/src/apothem/lib/plugin_tree.py +599 -0
  507. package/src/apothem/lib/profile.py +755 -0
  508. package/src/apothem/lib/profile_projection.py +198 -0
  509. package/src/apothem/lib/propagation-manifest.yaml +878 -0
  510. package/src/apothem/lib/propagation.py +220 -0
  511. package/src/apothem/lib/python_resolver.py +189 -0
  512. package/src/apothem/lib/reporter.py +62 -0
  513. package/src/apothem/lib/workspace_migration.py +323 -0
  514. package/src/apothem/output-styles/README.md +41 -0
  515. package/src/apothem/output-styles/concise-engineer.md +49 -0
  516. package/src/apothem/output-styles/default-architect.md +52 -0
  517. package/src/apothem/output-styles/default.md +113 -0
  518. package/src/apothem/output-styles/forensic-auditor.md +63 -0
  519. package/src/apothem/py.typed +0 -0
  520. package/src/apothem/rules/README.md +121 -0
  521. package/src/apothem/rules/agent-capability-discipline-matrix.md +89 -0
  522. package/src/apothem/rules/agent-capability-discipline.md +78 -0
  523. package/src/apothem/rules/agent-orchestration-patterns.md +144 -0
  524. package/src/apothem/rules/agent-orchestration.md +65 -0
  525. package/src/apothem/rules/agents-md-convention.md +86 -0
  526. package/src/apothem/rules/agile-sprints-elements.md +135 -0
  527. package/src/apothem/rules/agile-sprints.md +64 -0
  528. package/src/apothem/rules/agnostic-posture-checklist.md +47 -0
  529. package/src/apothem/rules/agnostic-posture.md +48 -0
  530. package/src/apothem/rules/authoritative-referencing-quotation.md +50 -0
  531. package/src/apothem/rules/authoritative-referencing.md +66 -0
  532. package/src/apothem/rules/authority-inquiry-categories.md +58 -0
  533. package/src/apothem/rules/authority-inquiry.md +54 -0
  534. package/src/apothem/rules/auto-memory-topic-files.md +86 -0
  535. package/src/apothem/rules/auto-memory.md +67 -0
  536. package/src/apothem/rules/bidirectional-binding.md +123 -0
  537. package/src/apothem/rules/canonical-layout-reporting-tiers.md +212 -0
  538. package/src/apothem/rules/canonical-layout.md +60 -0
  539. package/src/apothem/rules/clean-architecture-layers.md +186 -0
  540. package/src/apothem/rules/clean-room-generation-protocols.md +124 -0
  541. package/src/apothem/rules/clean-room-generation.md +59 -0
  542. package/src/apothem/rules/code-craft-conventions.md +101 -0
  543. package/src/apothem/rules/code-craft-markdown.md +138 -0
  544. package/src/apothem/rules/code-craft-python.md +154 -0
  545. package/src/apothem/rules/code-craft-shell.md +192 -0
  546. package/src/apothem/rules/cognitive-identity-techniques.md +180 -0
  547. package/src/apothem/rules/cognitive-identity.md +81 -0
  548. package/src/apothem/rules/context-management-budget.md +46 -0
  549. package/src/apothem/rules/context-management-protocol.md +161 -0
  550. package/src/apothem/rules/context-management-scratch.md +128 -0
  551. package/src/apothem/rules/context-management.md +85 -0
  552. package/src/apothem/rules/definitiveness-virtues.md +67 -0
  553. package/src/apothem/rules/definitiveness.md +58 -0
  554. package/src/apothem/rules/determinism.md +81 -0
  555. package/src/apothem/rules/disclosure-ledger-markers.md +58 -0
  556. package/src/apothem/rules/disclosure-ledger.md +52 -0
  557. package/src/apothem/rules/dynamism.md +38 -0
  558. package/src/apothem/rules/etc-extension.md +57 -0
  559. package/src/apothem/rules/expertise-posture-elements.md +68 -0
  560. package/src/apothem/rules/expertise-posture.md +54 -0
  561. package/src/apothem/rules/freshness-facade.md +64 -0
  562. package/src/apothem/rules/harness-adapter-shape-schemas.md +162 -0
  563. package/src/apothem/rules/harness-adapter-shape.md +42 -0
  564. package/src/apothem/rules/host-discovery-manifests.md +50 -0
  565. package/src/apothem/rules/host-discovery.md +56 -0
  566. package/src/apothem/rules/i18n-discipline-locale-cohorts.md +120 -0
  567. package/src/apothem/rules/i18n-discipline.md +70 -0
  568. package/src/apothem/rules/interactive-questions-canonical-shapes.md +590 -0
  569. package/src/apothem/rules/interactive-questions-detail.md +41 -0
  570. package/src/apothem/rules/interactive-questions-sweep-matchers.md +184 -0
  571. package/src/apothem/rules/interactive-questions.md +89 -0
  572. package/src/apothem/rules/large-file-generation.md +112 -0
  573. package/src/apothem/rules/large-file-reading.md +59 -0
  574. package/src/apothem/rules/living-docs.md +85 -0
  575. package/src/apothem/rules/multi-agent-workflow.md +57 -0
  576. package/src/apothem/rules/operational-mandates-expanded.md +78 -0
  577. package/src/apothem/rules/operational-mandates.md +88 -0
  578. package/src/apothem/rules/option-annotation-form.md +60 -0
  579. package/src/apothem/rules/option-annotation.md +45 -0
  580. package/src/apothem/rules/own-voice-reimplementation.md +86 -0
  581. package/src/apothem/rules/performance-discipline.md +91 -0
  582. package/src/apothem/rules/persistent-conventions-vigilance-checklist.md +54 -0
  583. package/src/apothem/rules/persistent-conventions-vigilance.md +61 -0
  584. package/src/apothem/rules/plain-language.md +56 -0
  585. package/src/apothem/rules/planning-techniques.md +130 -0
  586. package/src/apothem/rules/pre-emission-gate-bars.md +86 -0
  587. package/src/apothem/rules/pre-emission-gate.md +54 -0
  588. package/src/apothem/rules/production-ready-prs-surfaces.md +162 -0
  589. package/src/apothem/rules/production-ready-prs.md +83 -0
  590. package/src/apothem/rules/propagation.md +63 -0
  591. package/src/apothem/rules/recommend-next-step.md +106 -0
  592. package/src/apothem/rules/refactoring-discipline.md +76 -0
  593. package/src/apothem/rules/session-closure.md +44 -0
  594. package/src/apothem/rules/sota-elevation-exemplars.md +76 -0
  595. package/src/apothem/rules/sota-elevation.md +52 -0
  596. package/src/apothem/rules/source-accessibility.md +58 -0
  597. package/src/apothem/rules/surgical-manipulation.md +48 -0
  598. package/src/apothem/rules/systemic-participation-relations.md +108 -0
  599. package/src/apothem/rules/systemic-participation.md +70 -0
  600. package/src/apothem/rules/ten-dimension-check-dimensions.md +52 -0
  601. package/src/apothem/rules/ten-dimension-check.md +59 -0
  602. package/src/apothem/rules/token-budget-discipline.md +81 -0
  603. package/src/apothem/rules/token-efficiency-rewrite-protocol.md +79 -0
  604. package/src/apothem/rules/token-efficiency-rewrite.md +77 -0
  605. package/src/apothem/rules/tool-use-discipline.md +48 -0
  606. package/src/apothem/rules/visual-leverage.md +102 -0
  607. package/src/apothem/schemas/NOTICE.md +9 -0
  608. package/src/apothem/schemas/README.md +104 -0
  609. package/src/apothem/schemas/__init__.py +176 -0
  610. package/src/apothem/schemas/advisory-finding.schema.json +111 -0
  611. package/src/apothem/schemas/agent.schema.json +106 -0
  612. package/src/apothem/schemas/authorship-header.txt +1 -0
  613. package/src/apothem/schemas/cohort-manifest.yaml +248 -0
  614. package/src/apothem/schemas/cohort-metadata-vocabulary.yaml +168 -0
  615. package/src/apothem/schemas/cohort.schema.json +113 -0
  616. package/src/apothem/schemas/command.schema.json +68 -0
  617. package/src/apothem/schemas/compatibility-matrix.yaml +432 -0
  618. package/src/apothem/schemas/context-fragment.schema.json +64 -0
  619. package/src/apothem/schemas/freshness-token-denylist.txt +51 -0
  620. package/src/apothem/schemas/handoff-manifest.yaml +353 -0
  621. package/src/apothem/schemas/header-exceptions.txt +141 -0
  622. package/src/apothem/schemas/header-visibility.yaml +39 -0
  623. package/src/apothem/schemas/learning-signal.schema.json +46 -0
  624. package/src/apothem/schemas/memory-record.schema.json +61 -0
  625. package/src/apothem/schemas/output-style.schema.json +40 -0
  626. package/src/apothem/schemas/plan.schema.json +51 -0
  627. package/src/apothem/schemas/plugin.schema.json +83 -0
  628. package/src/apothem/schemas/profile.example.yaml +70 -0
  629. package/src/apothem/schemas/profile.minimal.yaml +6 -0
  630. package/src/apothem/schemas/profile.schema.json +396 -0
  631. package/src/apothem/schemas/reference-token-denylist.txt +25 -0
  632. package/src/apothem/schemas/skill.schema.json +75 -0
  633. package/src/apothem/skills/README.md +93 -0
  634. package/src/apothem/skills/dependency-upgrade/SKILL.md +105 -0
  635. package/src/apothem/skills/dev-toolkit/SKILL.md +120 -0
  636. package/src/apothem/skills/diagram-authoring/SKILL.md +113 -0
  637. package/src/apothem/skills/document-authoring/SKILL.md +118 -0
  638. package/src/apothem/skills/ecosystem-audit/SKILL.md +108 -0
  639. package/src/apothem/skills/ecosystem-audit/references/audit-fortress.md +85 -0
  640. package/src/apothem/skills/ecosystem-audit/references/procedure.md +162 -0
  641. package/src/apothem/skills/eval-harness/SKILL.md +88 -0
  642. package/src/apothem/skills/incident-runbook/SKILL.md +92 -0
  643. package/src/apothem/skills/multi-source-research/SKILL.md +90 -0
  644. package/src/apothem/skills/plan-suite/SKILL.md +118 -0
  645. package/src/apothem/skills/plan-suite/master_template.md +1324 -0
  646. package/src/apothem/skills/projectify/SKILL.md +117 -0
  647. package/src/apothem/skills/prompt-engineering/SKILL.md +122 -0
  648. package/src/apothem/skills/refactor-extract/SKILL.md +85 -0
  649. package/src/apothem/skills/research-suite/SKILL.md +170 -0
  650. package/src/apothem/skills/research-suite/references/directory-structure.md +47 -0
  651. package/src/apothem/skills/research-suite/references/lifecycle.md +67 -0
  652. package/src/apothem/skills/research-suite/references/principal-investigator-framework.md +37 -0
  653. package/src/apothem/skills/research-suite/references/rigor-mandates.md +30 -0
  654. package/src/apothem/skills/research-suite/research_template.md +476 -0
  655. package/src/apothem/skills/secret-rotation/SKILL.md +87 -0
  656. package/src/apothem/skills/source-synthesis/SKILL.md +92 -0
  657. package/src/apothem/skills/surgical-guard/SKILL.md +118 -0
  658. package/src/apothem/skills/test-authoring/SKILL.md +85 -0
  659. package/src/apothem/skills/vuln-triage/SKILL.md +91 -0
  660. package/src/apothem/skills/workflow/SKILL.md +139 -0
  661. package/src/apothem/statuslines/README.md +26 -0
  662. package/src/apothem/statuslines/__init__.py +20 -0
  663. package/src/apothem/statuslines/conformity.json +5 -0
  664. package/src/apothem/statuslines/render.py +334 -0
  665. package/src/apothem/statuslines/statusline.md +50 -0
  666. package/src/apothem/templates/README.md +43 -0
  667. package/src/apothem/templates/agents-md-template.md +80 -0
  668. package/src/apothem/templates/consideration-log.md +39 -0
  669. package/src/apothem/templates/expertise-gap-log.md +56 -0
  670. package/src/apothem/templates/master-index-template.md +93 -0
  671. package/src/apothem/templates/potency-map.md +53 -0
  672. package/src/apothem/templates/preservation-audit.md +60 -0
  673. package/src/apothem/templates/question-resolution-audit.md +52 -0
  674. package/src/apothem/templates/trace-matrix-template.md +77 -0
@@ -0,0 +1,843 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Declarative harness-registry data table (split from harness_registry.py).
4
+
5
+ This module carries ONLY the static, declarative ``HARNESS_REGISTRY`` data table
6
+ and the dataclass + capability-matrix builders it is constructed from. The
7
+ resolution / discovery LOGIC and every public re-export live in the sibling
8
+ ``harness_registry`` module, which imports this data and is the authoritative
9
+ runtime surface. Consumers import from ``apothem.lib.harness_registry`` as
10
+ before; this module is an internal data partition.
11
+ """
12
+
13
+ from __future__ import annotations
14
+
15
+ from collections.abc import Mapping
16
+ from dataclasses import dataclass, field
17
+ from typing import Literal
18
+
19
+ CapabilityStatus = Literal[
20
+ "native",
21
+ "converted",
22
+ "support-tree",
23
+ "profile-projected",
24
+ "unsupported",
25
+ "not-applicable",
26
+ "discovery-pending",
27
+ ]
28
+
29
+ HarnessScope = Literal["user", "project"]
30
+
31
+ REQUIRED_CAPABILITIES: tuple[str, ...] = (
32
+ "commands",
33
+ "skills",
34
+ "hooks",
35
+ "agents",
36
+ "rules",
37
+ "templates",
38
+ "statuslines",
39
+ "output_styles",
40
+ "mcp_servers",
41
+ "sub_agent_dispatch",
42
+ "tool_surface_restrictions",
43
+ "system_prompt_templates",
44
+ "agent_memory",
45
+ )
46
+
47
+ SUPPORTED_HARNESS_COUNT = 17
48
+
49
+
50
+ @dataclass(frozen=True)
51
+ class HarnessRegistryEntry:
52
+ """One supported harness and the files that must agree with it."""
53
+
54
+ public_id: str
55
+ package_key: str
56
+ display_name: str
57
+ entry_point: str
58
+ scope: HarnessScope
59
+ output_format: str
60
+ target_paths: tuple[str, ...]
61
+ docs_path: str
62
+ comparison_docs_path: str
63
+ capabilities_path: str
64
+ standard_pin_path: str
65
+ fixture_tests: tuple[str, ...]
66
+ package_data_key: str | None = None
67
+ template_sources: tuple[str, ...] = ()
68
+ capability_status: Mapping[str, CapabilityStatus] = field(default_factory=dict)
69
+ unsupported_rationale: Mapping[str, str] = field(default_factory=dict)
70
+
71
+ @property
72
+ def adapter_module(self) -> str:
73
+ """Return the importable module path for the adapter class."""
74
+ return self.entry_point.split(":", 1)[0]
75
+
76
+ @property
77
+ def adapter_class_name(self) -> str:
78
+ """Return the adapter class name declared by the entry point."""
79
+ return self.entry_point.split(":", 1)[1]
80
+
81
+
82
+ def _matrix(**values: CapabilityStatus) -> Mapping[str, CapabilityStatus]:
83
+ missing = sorted(set(REQUIRED_CAPABILITIES).difference(values))
84
+ extra = sorted(set(values).difference(REQUIRED_CAPABILITIES))
85
+ if missing or extra:
86
+ raise ValueError(
87
+ "capability matrix mismatch: "
88
+ f"missing={missing or 'none'} extra={extra or 'none'}"
89
+ )
90
+ return dict(values)
91
+
92
+
93
+ def _unsupported(**values: str) -> Mapping[str, str]:
94
+ return dict(values)
95
+
96
+
97
+ HARNESS_REGISTRY: tuple[HarnessRegistryEntry, ...] = (
98
+ HarnessRegistryEntry(
99
+ public_id="antigravity",
100
+ package_key="antigravity",
101
+ display_name="Antigravity",
102
+ entry_point="apothem.harnesses.antigravity:AntigravityAdapter",
103
+ scope="user",
104
+ output_format="markdown",
105
+ target_paths=(
106
+ "~/.gemini/GEMINI.md",
107
+ "~/.gemini/antigravity-cli/plugins/apothem/",
108
+ ),
109
+ docs_path="site/content/docs/harnesses/antigravity.mdx",
110
+ comparison_docs_path="site/content/docs/comparison/vs-raw-antigravity.mdx",
111
+ capabilities_path="src/apothem/harnesses/antigravity/capabilities.yml",
112
+ standard_pin_path=(
113
+ "src/apothem/harnesses/antigravity/STANDARD-CONVENTION-PIN.md"
114
+ ),
115
+ fixture_tests=("tests/unit/test_antigravity_adapter.py",),
116
+ package_data_key="apothem.harnesses.antigravity",
117
+ template_sources=(
118
+ "harnesses/antigravity/templates/GEMINI.md",
119
+ "harnesses/antigravity/templates/plugin.json",
120
+ ),
121
+ capability_status=_matrix(
122
+ commands="converted",
123
+ skills="discovery-pending",
124
+ hooks="support-tree",
125
+ agents="converted",
126
+ rules="support-tree",
127
+ templates="support-tree",
128
+ statuslines="unsupported",
129
+ output_styles="unsupported",
130
+ mcp_servers="discovery-pending",
131
+ sub_agent_dispatch="native",
132
+ tool_surface_restrictions="not-applicable",
133
+ system_prompt_templates="native",
134
+ agent_memory="discovery-pending",
135
+ ),
136
+ unsupported_rationale=_unsupported(
137
+ skills="Antigravity skills auto-load placement is unverified under the empty-body docs problem; left unchanged pending a browser-verified pass.",
138
+ mcp_servers="MCP lives in an operator-owned config surface (file / CLI / service state); the adapter names it but authors no entries.",
139
+ statuslines="No current Antigravity CLI statusline file surface is pinned.",
140
+ output_styles="No current Antigravity CLI output-style surface is pinned.",
141
+ agent_memory="The current adapter pin does not identify durable memory.",
142
+ ),
143
+ ),
144
+ HarnessRegistryEntry(
145
+ public_id="claude-code",
146
+ package_key="claude_code",
147
+ display_name="Claude Code",
148
+ entry_point="apothem.harnesses.claude_code:ClaudeCodeAdapter",
149
+ scope="user",
150
+ output_format="json",
151
+ target_paths=(
152
+ "~/.claude/settings.json",
153
+ "~/.claude/{agents,rules,skills,statuslines,output-styles}/",
154
+ "~/.claude/apothem/{templates,hooks}/",
155
+ ),
156
+ docs_path="site/content/docs/harnesses/claude-code.mdx",
157
+ comparison_docs_path="site/content/docs/comparison/vs-raw-claude-code.mdx",
158
+ capabilities_path="src/apothem/harnesses/claude_code/capabilities.yml",
159
+ standard_pin_path=(
160
+ "src/apothem/harnesses/claude_code/STANDARD-CONVENTION-PIN.md"
161
+ ),
162
+ fixture_tests=("tests/unit/test_claude_code_adapter.py",),
163
+ package_data_key="apothem.harnesses.claude_code",
164
+ template_sources=("harnesses/claude_code/templates/settings.json",),
165
+ capability_status=_matrix(
166
+ commands="converted",
167
+ skills="native",
168
+ hooks="native",
169
+ agents="native",
170
+ rules="native",
171
+ templates="support-tree",
172
+ statuslines="native",
173
+ output_styles="native",
174
+ mcp_servers="discovery-pending",
175
+ sub_agent_dispatch="native",
176
+ tool_surface_restrictions="not-applicable",
177
+ system_prompt_templates="not-applicable",
178
+ agent_memory="not-applicable",
179
+ ),
180
+ unsupported_rationale=_unsupported(
181
+ mcp_servers="MCP lives in an operator-owned config surface (file / CLI / service state); the adapter names it but authors no entries.",
182
+ system_prompt_templates=(
183
+ "CLAUDE.md is operator-owned and intentionally not adapter-written."
184
+ ),
185
+ ),
186
+ ),
187
+ HarnessRegistryEntry(
188
+ public_id="codex",
189
+ package_key="codex",
190
+ display_name="Codex",
191
+ entry_point="apothem.harnesses.codex:CodexAdapter",
192
+ scope="user",
193
+ output_format="markdown",
194
+ target_paths=(
195
+ "~/.codex/AGENTS.md",
196
+ "~/.codex/hooks.json",
197
+ "~/.codex/hooks/",
198
+ "~/.codex/agents/*.toml",
199
+ "~/.agents/skills/",
200
+ "~/.config/apothem/{rules,templates}/",
201
+ ),
202
+ docs_path="site/content/docs/harnesses/codex.mdx",
203
+ comparison_docs_path="site/content/docs/comparison/vs-raw-codex.mdx",
204
+ capabilities_path="src/apothem/harnesses/codex/capabilities.yml",
205
+ standard_pin_path="src/apothem/harnesses/codex/STANDARD-CONVENTION-PIN.md",
206
+ fixture_tests=("tests/unit/test_codex_adapter.py",),
207
+ package_data_key="apothem.harnesses.codex",
208
+ template_sources=(
209
+ "harnesses/codex/templates/AGENTS.md",
210
+ "harnesses/codex/templates/hooks.json",
211
+ ),
212
+ capability_status=_matrix(
213
+ commands="converted",
214
+ skills="native",
215
+ hooks="native",
216
+ agents="converted",
217
+ rules="support-tree",
218
+ templates="support-tree",
219
+ statuslines="unsupported",
220
+ output_styles="unsupported",
221
+ mcp_servers="discovery-pending",
222
+ sub_agent_dispatch="native",
223
+ tool_surface_restrictions="not-applicable",
224
+ system_prompt_templates="native",
225
+ agent_memory="not-applicable",
226
+ ),
227
+ unsupported_rationale=_unsupported(
228
+ mcp_servers="MCP lives in an operator-owned config surface (file / CLI / service state); the adapter names it but authors no entries.",
229
+ statuslines="No Codex statusline file surface is pinned.",
230
+ output_styles="No Codex output-style file surface is pinned.",
231
+ ),
232
+ ),
233
+ HarnessRegistryEntry(
234
+ public_id="cursor",
235
+ package_key="cursor",
236
+ display_name="Cursor",
237
+ entry_point="apothem.harnesses.cursor:CursorAdapter",
238
+ scope="project",
239
+ output_format="mdc",
240
+ target_paths=("<project>/.cursor/rules/apothem-rules.mdc",),
241
+ docs_path="site/content/docs/harnesses/cursor.mdx",
242
+ comparison_docs_path="site/content/docs/comparison/vs-raw-cursor.mdx",
243
+ capabilities_path="src/apothem/harnesses/cursor/capabilities.yml",
244
+ standard_pin_path="src/apothem/harnesses/cursor/STANDARD-CONVENTION-PIN.md",
245
+ fixture_tests=("tests/unit/test_cursor_adapter.py",),
246
+ package_data_key="apothem.harnesses.cursor",
247
+ template_sources=("harnesses/cursor/templates/apothem-rules.mdc",),
248
+ capability_status=_matrix(
249
+ commands="unsupported",
250
+ skills="unsupported",
251
+ hooks="unsupported",
252
+ agents="unsupported",
253
+ rules="native",
254
+ templates="not-applicable",
255
+ statuslines="unsupported",
256
+ output_styles="unsupported",
257
+ mcp_servers="discovery-pending",
258
+ sub_agent_dispatch="unsupported",
259
+ tool_surface_restrictions="not-applicable",
260
+ system_prompt_templates="native",
261
+ agent_memory="unsupported",
262
+ ),
263
+ unsupported_rationale=_unsupported(
264
+ mcp_servers="MCP lives in an operator-owned config surface (file / CLI / service state); the adapter names it but authors no entries.",
265
+ commands="The Cursor adapter delivers the project rules surface "
266
+ "only; Apothem does not author a Cursor command cohort.",
267
+ skills="The Cursor adapter delivers the project rules surface "
268
+ "only; Apothem does not author a Cursor skill cohort.",
269
+ hooks="The Cursor adapter delivers the project rules surface "
270
+ "only; Apothem does not author a Cursor hook cohort.",
271
+ agents="The Cursor adapter delivers the project rules surface "
272
+ "only; Apothem does not author a Cursor agent cohort.",
273
+ statuslines="No Cursor statusline file surface is pinned.",
274
+ output_styles="No Cursor output-style file surface is pinned.",
275
+ sub_agent_dispatch="The Cursor adapter delivers the project rules "
276
+ "surface only; Apothem does not dispatch sub-agents through Cursor.",
277
+ agent_memory="No Cursor durable memory file surface is adapter-owned.",
278
+ ),
279
+ ),
280
+ HarnessRegistryEntry(
281
+ public_id="gemini-cli",
282
+ package_key="gemini_cli",
283
+ display_name="Gemini CLI",
284
+ entry_point="apothem.harnesses.gemini_cli:GeminiCliAdapter",
285
+ scope="project",
286
+ output_format="markdown",
287
+ target_paths=(
288
+ "<project>/GEMINI.md",
289
+ "<project>/.gemini/{commands,skills,agents,apothem}/",
290
+ ),
291
+ docs_path="site/content/docs/harnesses/gemini-cli.mdx",
292
+ comparison_docs_path="site/content/docs/comparison/vs-raw-gemini-cli.mdx",
293
+ capabilities_path="src/apothem/harnesses/gemini_cli/capabilities.yml",
294
+ standard_pin_path=(
295
+ "src/apothem/harnesses/gemini_cli/STANDARD-CONVENTION-PIN.md"
296
+ ),
297
+ fixture_tests=("tests/unit/test_gemini_cli_adapter.py",),
298
+ package_data_key="apothem.harnesses.gemini_cli",
299
+ template_sources=("harnesses/gemini_cli/templates/GEMINI.md",),
300
+ capability_status=_matrix(
301
+ commands="converted",
302
+ skills="native",
303
+ hooks="support-tree",
304
+ agents="converted",
305
+ rules="support-tree",
306
+ templates="support-tree",
307
+ statuslines="unsupported",
308
+ output_styles="unsupported",
309
+ mcp_servers="discovery-pending",
310
+ sub_agent_dispatch="native",
311
+ tool_surface_restrictions="not-applicable",
312
+ system_prompt_templates="native",
313
+ agent_memory="discovery-pending",
314
+ ),
315
+ unsupported_rationale=_unsupported(
316
+ mcp_servers="MCP lives in an operator-owned config surface (file / CLI / service state); the adapter names it but authors no entries.",
317
+ statuslines="No Gemini CLI statusline file surface is pinned.",
318
+ output_styles="No Gemini CLI output-style file surface is pinned.",
319
+ agent_memory="The current adapter pin does not identify durable memory.",
320
+ ),
321
+ ),
322
+ HarnessRegistryEntry(
323
+ public_id="github-copilot",
324
+ package_key="github_copilot",
325
+ display_name="GitHub Copilot",
326
+ entry_point="apothem.harnesses.github_copilot:GitHubCopilotAdapter",
327
+ scope="project",
328
+ output_format="markdown",
329
+ target_paths=("<project>/.github/copilot-instructions.md",),
330
+ docs_path="site/content/docs/harnesses/github-copilot.mdx",
331
+ comparison_docs_path="site/content/docs/comparison/vs-raw-github-copilot.mdx",
332
+ capabilities_path="src/apothem/harnesses/github_copilot/capabilities.yml",
333
+ standard_pin_path=(
334
+ "src/apothem/harnesses/github_copilot/STANDARD-CONVENTION-PIN.md"
335
+ ),
336
+ fixture_tests=("tests/unit/test_github_copilot_adapter.py",),
337
+ package_data_key="apothem.harnesses.github_copilot",
338
+ template_sources=(
339
+ "harnesses/github_copilot/templates/copilot-instructions.md",
340
+ ),
341
+ capability_status=_matrix(
342
+ commands="unsupported",
343
+ skills="unsupported",
344
+ hooks="unsupported",
345
+ agents="unsupported",
346
+ rules="native",
347
+ templates="not-applicable",
348
+ statuslines="unsupported",
349
+ output_styles="unsupported",
350
+ mcp_servers="unsupported",
351
+ sub_agent_dispatch="unsupported",
352
+ tool_surface_restrictions="not-applicable",
353
+ system_prompt_templates="native",
354
+ agent_memory="unsupported",
355
+ ),
356
+ unsupported_rationale=_unsupported(
357
+ commands="Copilot exposes no user-defined custom-command surface.",
358
+ skills="The Copilot adapter delivers the repo-wide instructions "
359
+ "surface only; Apothem does not author a Copilot skill cohort.",
360
+ hooks="The Copilot adapter delivers the repo-wide instructions "
361
+ "surface only; Apothem does not author a Copilot hook cohort.",
362
+ agents="Copilot has no repo-config sub-agent file surface.",
363
+ statuslines="Copilot has no statusline file surface.",
364
+ output_styles="Copilot has no output-style file surface.",
365
+ mcp_servers="Copilot MCP is service/IDE state, not a repo file target.",
366
+ sub_agent_dispatch="Copilot sub-agent dispatch is outside this adapter scope.",
367
+ agent_memory="Copilot user memory is IDE/service state, not a file target.",
368
+ ),
369
+ ),
370
+ HarnessRegistryEntry(
371
+ public_id="hermes",
372
+ package_key="hermes",
373
+ display_name="Hermes",
374
+ entry_point="apothem.harnesses.hermes:HermesAdapter",
375
+ scope="user",
376
+ output_format="yaml",
377
+ target_paths=("~/.hermes/config.yaml", "~/.hermes/apothem/"),
378
+ docs_path="site/content/docs/harnesses/hermes.mdx",
379
+ comparison_docs_path="site/content/docs/comparison/vs-raw-hermes.mdx",
380
+ capabilities_path="src/apothem/harnesses/hermes/capabilities.yml",
381
+ standard_pin_path="src/apothem/harnesses/hermes/STANDARD-CONVENTION-PIN.md",
382
+ fixture_tests=("tests/unit/test_hermes_adapter.py",),
383
+ package_data_key="apothem.harnesses.hermes",
384
+ capability_status=_matrix(
385
+ commands="converted",
386
+ skills="support-tree",
387
+ hooks="support-tree",
388
+ agents="support-tree",
389
+ rules="support-tree",
390
+ templates="support-tree",
391
+ statuslines="unsupported",
392
+ output_styles="unsupported",
393
+ mcp_servers="native",
394
+ sub_agent_dispatch="native",
395
+ tool_surface_restrictions="not-applicable",
396
+ system_prompt_templates="native",
397
+ agent_memory="not-applicable",
398
+ ),
399
+ unsupported_rationale=_unsupported(
400
+ statuslines="No Hermes statusline file surface is pinned.",
401
+ output_styles="No Hermes output-style file surface is pinned.",
402
+ ),
403
+ ),
404
+ HarnessRegistryEntry(
405
+ public_id="kimi-code",
406
+ package_key="kimi_code",
407
+ display_name="Kimi Code",
408
+ entry_point="apothem.harnesses.kimi_code:KimiCodeAdapter",
409
+ scope="project",
410
+ output_format="markdown",
411
+ target_paths=(
412
+ "<project>/AGENTS.md",
413
+ "<project>/.kimi-code/apothem/",
414
+ ),
415
+ docs_path="site/content/docs/harnesses/kimi-code.mdx",
416
+ comparison_docs_path="site/content/docs/comparison/vs-raw-kimi-code.mdx",
417
+ capabilities_path="src/apothem/harnesses/kimi_code/capabilities.yml",
418
+ standard_pin_path=(
419
+ "src/apothem/harnesses/kimi_code/STANDARD-CONVENTION-PIN.md"
420
+ ),
421
+ fixture_tests=("tests/unit/test_kimi_code_adapter.py",),
422
+ package_data_key="apothem.harnesses.kimi_code",
423
+ template_sources=("harnesses/kimi_code/templates/AGENTS.md",),
424
+ capability_status=_matrix(
425
+ commands="support-tree",
426
+ skills="support-tree",
427
+ hooks="support-tree",
428
+ agents="support-tree",
429
+ rules="support-tree",
430
+ templates="support-tree",
431
+ statuslines="unsupported",
432
+ output_styles="unsupported",
433
+ mcp_servers="discovery-pending",
434
+ sub_agent_dispatch="native",
435
+ tool_surface_restrictions="discovery-pending",
436
+ system_prompt_templates="native",
437
+ agent_memory="native",
438
+ ),
439
+ unsupported_rationale=_unsupported(
440
+ statuslines="No Kimi Code statusline file surface is pinned.",
441
+ output_styles="No Kimi Code output-style file surface is pinned.",
442
+ mcp_servers="`.kimi-code/mcp.json` is the recognized operator-owned "
443
+ "MCP surface; Apothem names it but defers authoring entries.",
444
+ tool_surface_restrictions="Kimi Code tool-permission surface not "
445
+ "yet pinned.",
446
+ ),
447
+ ),
448
+ HarnessRegistryEntry(
449
+ public_id="open-claw",
450
+ package_key="open_claw",
451
+ display_name="Open-Claw",
452
+ entry_point="apothem.harnesses.open_claw:OpenClawAdapter",
453
+ scope="user",
454
+ output_format="json",
455
+ target_paths=("~/.openclaw/openclaw.json", "~/.openclaw/apothem/"),
456
+ docs_path="site/content/docs/harnesses/open-claw.mdx",
457
+ comparison_docs_path="site/content/docs/comparison/vs-raw-open-claw.mdx",
458
+ capabilities_path="src/apothem/harnesses/open_claw/capabilities.yml",
459
+ standard_pin_path=(
460
+ "src/apothem/harnesses/open_claw/STANDARD-CONVENTION-PIN.md"
461
+ ),
462
+ fixture_tests=("tests/unit/test_open_claw_adapter.py",),
463
+ package_data_key="apothem.harnesses.open_claw",
464
+ capability_status=_matrix(
465
+ commands="converted",
466
+ skills="support-tree",
467
+ hooks="support-tree",
468
+ agents="support-tree",
469
+ rules="support-tree",
470
+ templates="support-tree",
471
+ statuslines="unsupported",
472
+ output_styles="unsupported",
473
+ mcp_servers="unsupported",
474
+ sub_agent_dispatch="native",
475
+ tool_surface_restrictions="not-applicable",
476
+ system_prompt_templates="native",
477
+ agent_memory="not-applicable",
478
+ ),
479
+ unsupported_rationale=_unsupported(
480
+ statuslines="No Open-Claw statusline file surface is pinned.",
481
+ output_styles="No Open-Claw output-style file surface is pinned.",
482
+ mcp_servers=(
483
+ "Open-Claw MCP is a CLI command surface (openclaw mcp), "
484
+ "not an adapter-owned config-file block."
485
+ ),
486
+ agent_memory="Open-Claw support material is config-referenced, not memory.",
487
+ ),
488
+ ),
489
+ HarnessRegistryEntry(
490
+ public_id="opencode",
491
+ package_key="opencode",
492
+ display_name="OpenCode",
493
+ entry_point="apothem.harnesses.opencode:OpenCodeAdapter",
494
+ scope="user",
495
+ output_format="json",
496
+ target_paths=(
497
+ "~/.config/opencode/opencode.json",
498
+ "~/.config/opencode/{commands,skills,agents,apothem}/",
499
+ ),
500
+ docs_path="site/content/docs/harnesses/opencode.mdx",
501
+ comparison_docs_path="site/content/docs/comparison/vs-raw-opencode.mdx",
502
+ capabilities_path="src/apothem/harnesses/opencode/capabilities.yml",
503
+ standard_pin_path="src/apothem/harnesses/opencode/STANDARD-CONVENTION-PIN.md",
504
+ fixture_tests=("tests/unit/test_opencode_adapter.py",),
505
+ package_data_key="apothem.harnesses.opencode",
506
+ capability_status=_matrix(
507
+ commands="converted",
508
+ skills="native",
509
+ hooks="support-tree",
510
+ agents="converted",
511
+ rules="support-tree",
512
+ templates="support-tree",
513
+ statuslines="unsupported",
514
+ output_styles="unsupported",
515
+ mcp_servers="native",
516
+ sub_agent_dispatch="native",
517
+ tool_surface_restrictions="not-applicable",
518
+ system_prompt_templates="native",
519
+ agent_memory="not-applicable",
520
+ ),
521
+ unsupported_rationale=_unsupported(
522
+ statuslines="No OpenCode statusline file surface is pinned.",
523
+ output_styles="No OpenCode output-style file surface is pinned.",
524
+ agent_memory="OpenCode support material is config-referenced, not memory.",
525
+ ),
526
+ ),
527
+ HarnessRegistryEntry(
528
+ public_id="qwen-code",
529
+ package_key="qwen_code",
530
+ display_name="Qwen Code",
531
+ entry_point="apothem.harnesses.qwen_code:QwenCodeAdapter",
532
+ scope="user",
533
+ output_format="json",
534
+ target_paths=(
535
+ "~/.qwen/settings.json",
536
+ "~/.qwen/QWEN.md",
537
+ "~/.qwen/{commands,skills,agents,apothem}/",
538
+ ),
539
+ docs_path="site/content/docs/harnesses/qwen-code.mdx",
540
+ comparison_docs_path="site/content/docs/comparison/vs-raw-qwen-code.mdx",
541
+ capabilities_path="src/apothem/harnesses/qwen_code/capabilities.yml",
542
+ standard_pin_path=(
543
+ "src/apothem/harnesses/qwen_code/STANDARD-CONVENTION-PIN.md"
544
+ ),
545
+ fixture_tests=("tests/unit/test_qwen_code_adapter.py",),
546
+ package_data_key="apothem.harnesses.qwen_code",
547
+ template_sources=("harnesses/qwen_code/templates/QWEN.md",),
548
+ capability_status=_matrix(
549
+ commands="converted",
550
+ skills="native",
551
+ hooks="native",
552
+ agents="converted",
553
+ rules="support-tree",
554
+ templates="support-tree",
555
+ statuslines="unsupported",
556
+ output_styles="unsupported",
557
+ mcp_servers="native",
558
+ sub_agent_dispatch="native",
559
+ tool_surface_restrictions="not-applicable",
560
+ system_prompt_templates="native",
561
+ agent_memory="not-applicable",
562
+ ),
563
+ unsupported_rationale=_unsupported(
564
+ statuslines="No Qwen Code statusline file surface is pinned.",
565
+ output_styles="No Qwen Code output-style file surface is pinned.",
566
+ ),
567
+ ),
568
+ HarnessRegistryEntry(
569
+ public_id="windsurf",
570
+ package_key="windsurf",
571
+ display_name="Windsurf",
572
+ entry_point="apothem.harnesses.windsurf:WindsurfAdapter",
573
+ scope="project",
574
+ output_format="markdown",
575
+ target_paths=("<project>/.devin/rules/apothem-rules.md",),
576
+ docs_path="site/content/docs/harnesses/windsurf.mdx",
577
+ comparison_docs_path="site/content/docs/comparison/vs-raw-windsurf.mdx",
578
+ capabilities_path="src/apothem/harnesses/windsurf/capabilities.yml",
579
+ standard_pin_path="src/apothem/harnesses/windsurf/STANDARD-CONVENTION-PIN.md",
580
+ fixture_tests=("tests/unit/test_windsurf_adapter.py",),
581
+ package_data_key="apothem.harnesses.windsurf",
582
+ template_sources=("harnesses/windsurf/templates/apothem-rules.md",),
583
+ capability_status=_matrix(
584
+ commands="unsupported",
585
+ skills="unsupported",
586
+ hooks="unsupported",
587
+ agents="unsupported",
588
+ rules="native",
589
+ templates="not-applicable",
590
+ statuslines="unsupported",
591
+ output_styles="unsupported",
592
+ mcp_servers="discovery-pending",
593
+ sub_agent_dispatch="unsupported",
594
+ tool_surface_restrictions="not-applicable",
595
+ system_prompt_templates="native",
596
+ agent_memory="unsupported",
597
+ ),
598
+ unsupported_rationale=_unsupported(
599
+ mcp_servers="MCP lives in an operator-owned config surface (file / CLI / service state); the adapter names it but authors no entries.",
600
+ commands="The Windsurf adapter delivers the project rules surface "
601
+ "only; Apothem does not author a Windsurf workflow cohort.",
602
+ skills="The Windsurf adapter delivers the project rules surface "
603
+ "only; Apothem does not author a Windsurf skill cohort.",
604
+ hooks="The Windsurf adapter delivers the project rules surface "
605
+ "only; Apothem does not author a Windsurf hook cohort.",
606
+ agents="No Windsurf sub-agent dispatch surface is documented.",
607
+ statuslines="No Windsurf statusline file surface is pinned.",
608
+ output_styles="No Windsurf output-style file surface is pinned.",
609
+ sub_agent_dispatch="No Windsurf sub-agent dispatch surface is documented.",
610
+ agent_memory="Windsurf memories are machine-local and not adapter-owned.",
611
+ ),
612
+ ),
613
+ HarnessRegistryEntry(
614
+ public_id="codebuddy",
615
+ package_key="codebuddy",
616
+ display_name="CodeBuddy",
617
+ entry_point="apothem.harnesses.codebuddy:CodeBuddyAdapter",
618
+ scope="project",
619
+ output_format="markdown",
620
+ target_paths=("<project>/.codebuddy/rules/apothem-rules.md",),
621
+ docs_path="site/content/docs/harnesses/codebuddy.mdx",
622
+ comparison_docs_path="site/content/docs/comparison/vs-raw-codebuddy.mdx",
623
+ capabilities_path="src/apothem/harnesses/codebuddy/capabilities.yml",
624
+ standard_pin_path=(
625
+ "src/apothem/harnesses/codebuddy/STANDARD-CONVENTION-PIN.md"
626
+ ),
627
+ fixture_tests=("tests/unit/test_codebuddy_adapter.py",),
628
+ package_data_key="apothem.harnesses.codebuddy",
629
+ template_sources=("harnesses/codebuddy/templates/apothem-rules.md",),
630
+ capability_status=_matrix(
631
+ commands="unsupported",
632
+ skills="unsupported",
633
+ hooks="unsupported",
634
+ agents="unsupported",
635
+ rules="native",
636
+ templates="not-applicable",
637
+ statuslines="unsupported",
638
+ output_styles="unsupported",
639
+ mcp_servers="discovery-pending",
640
+ sub_agent_dispatch="unsupported",
641
+ tool_surface_restrictions="not-applicable",
642
+ system_prompt_templates="native",
643
+ agent_memory="not-applicable",
644
+ ),
645
+ unsupported_rationale=_unsupported(
646
+ mcp_servers="MCP lives in an operator-owned config surface (file / CLI / service state); the adapter names it but authors no entries.",
647
+ commands="The CodeBuddy adapter delivers the project rules surface "
648
+ "only; Apothem does not author a CodeBuddy command cohort.",
649
+ skills="The CodeBuddy adapter delivers the project rules surface "
650
+ "only; Apothem does not author a CodeBuddy skill cohort.",
651
+ hooks="The CodeBuddy adapter delivers the project rules surface "
652
+ "only; Apothem does not author a CodeBuddy hook cohort.",
653
+ agents="The CodeBuddy adapter delivers the project rules surface "
654
+ "only; Apothem does not author a CodeBuddy sub-agent cohort.",
655
+ statuslines="No CodeBuddy statusline file surface is pinned.",
656
+ output_styles="No CodeBuddy output-style file surface is pinned.",
657
+ sub_agent_dispatch="No CodeBuddy sub-agent dispatch surface is "
658
+ "documented for the adapter to project.",
659
+ ),
660
+ ),
661
+ HarnessRegistryEntry(
662
+ public_id="kiro",
663
+ package_key="kiro",
664
+ display_name="Kiro",
665
+ entry_point="apothem.harnesses.kiro:KiroAdapter",
666
+ scope="project",
667
+ output_format="markdown",
668
+ target_paths=("<project>/.kiro/steering/apothem-rules.md",),
669
+ docs_path="site/content/docs/harnesses/kiro.mdx",
670
+ comparison_docs_path="site/content/docs/comparison/vs-raw-kiro.mdx",
671
+ capabilities_path="src/apothem/harnesses/kiro/capabilities.yml",
672
+ standard_pin_path="src/apothem/harnesses/kiro/STANDARD-CONVENTION-PIN.md",
673
+ fixture_tests=("tests/unit/test_kiro_adapter.py",),
674
+ package_data_key="apothem.harnesses.kiro",
675
+ template_sources=("harnesses/kiro/templates/apothem-rules.md",),
676
+ capability_status=_matrix(
677
+ commands="unsupported",
678
+ skills="unsupported",
679
+ hooks="unsupported",
680
+ agents="unsupported",
681
+ rules="native",
682
+ templates="not-applicable",
683
+ statuslines="unsupported",
684
+ output_styles="unsupported",
685
+ mcp_servers="discovery-pending",
686
+ sub_agent_dispatch="unsupported",
687
+ tool_surface_restrictions="not-applicable",
688
+ system_prompt_templates="native",
689
+ agent_memory="not-applicable",
690
+ ),
691
+ unsupported_rationale=_unsupported(
692
+ mcp_servers="MCP lives in an operator-owned config surface (file / CLI / service state); the adapter names it but authors no entries.",
693
+ commands="The Kiro adapter delivers the project steering surface "
694
+ "only; Apothem does not author a Kiro command cohort.",
695
+ skills="The Kiro adapter delivers the project steering surface "
696
+ "only; Apothem does not author a Kiro skill cohort.",
697
+ hooks="The Kiro adapter delivers the project steering surface "
698
+ "only; Apothem does not author a Kiro agent-hook cohort.",
699
+ agents="The Kiro adapter delivers steering rules only; Apothem "
700
+ "does not author a Kiro sub-agent cohort.",
701
+ statuslines="No Kiro statusline file surface is pinned.",
702
+ output_styles="No Kiro output-style file surface is pinned.",
703
+ sub_agent_dispatch="No Kiro sub-agent dispatch surface is "
704
+ "documented for the adapter to project.",
705
+ ),
706
+ ),
707
+ HarnessRegistryEntry(
708
+ public_id="trae",
709
+ package_key="trae",
710
+ display_name="Trae",
711
+ entry_point="apothem.harnesses.trae:TraeAdapter",
712
+ scope="project",
713
+ output_format="markdown",
714
+ target_paths=("<project>/.trae/rules/apothem-rules.md",),
715
+ docs_path="site/content/docs/harnesses/trae.mdx",
716
+ comparison_docs_path="site/content/docs/comparison/vs-raw-trae.mdx",
717
+ capabilities_path="src/apothem/harnesses/trae/capabilities.yml",
718
+ standard_pin_path="src/apothem/harnesses/trae/STANDARD-CONVENTION-PIN.md",
719
+ fixture_tests=("tests/unit/test_trae_adapter.py",),
720
+ package_data_key="apothem.harnesses.trae",
721
+ template_sources=("harnesses/trae/templates/apothem-rules.md",),
722
+ capability_status=_matrix(
723
+ commands="unsupported",
724
+ skills="unsupported",
725
+ hooks="unsupported",
726
+ agents="unsupported",
727
+ rules="native",
728
+ templates="not-applicable",
729
+ statuslines="unsupported",
730
+ output_styles="unsupported",
731
+ mcp_servers="discovery-pending",
732
+ sub_agent_dispatch="unsupported",
733
+ tool_surface_restrictions="not-applicable",
734
+ system_prompt_templates="native",
735
+ agent_memory="unsupported",
736
+ ),
737
+ unsupported_rationale=_unsupported(
738
+ mcp_servers="MCP lives in an operator-owned config surface (file / CLI / service state); the adapter names it but authors no entries.",
739
+ commands="The Trae adapter delivers the project rules surface "
740
+ "only; Apothem does not author a Trae command cohort.",
741
+ skills="The Trae adapter delivers the project rules surface "
742
+ "only; Apothem does not author a Trae skill cohort.",
743
+ hooks="The Trae adapter delivers the project rules surface "
744
+ "only; Apothem does not author a Trae hook cohort.",
745
+ agents="No Trae sub-agent dispatch surface is documented.",
746
+ statuslines="No Trae statusline file surface is pinned.",
747
+ output_styles="No Trae output-style file surface is pinned.",
748
+ sub_agent_dispatch="No Trae sub-agent dispatch surface is documented.",
749
+ agent_memory="No Trae adapter-owned agent-memory surface is documented.",
750
+ ),
751
+ ),
752
+ HarnessRegistryEntry(
753
+ public_id="zed",
754
+ package_key="zed",
755
+ display_name="Zed",
756
+ entry_point="apothem.harnesses.zed:ZedAdapter",
757
+ scope="project",
758
+ output_format="markdown",
759
+ target_paths=("<project>/.rules",),
760
+ docs_path="site/content/docs/harnesses/zed.mdx",
761
+ comparison_docs_path="site/content/docs/comparison/vs-raw-zed.mdx",
762
+ capabilities_path="src/apothem/harnesses/zed/capabilities.yml",
763
+ standard_pin_path="src/apothem/harnesses/zed/STANDARD-CONVENTION-PIN.md",
764
+ fixture_tests=("tests/unit/test_zed_adapter.py",),
765
+ package_data_key="apothem.harnesses.zed",
766
+ template_sources=("harnesses/zed/templates/apothem-rules.md",),
767
+ capability_status=_matrix(
768
+ commands="unsupported",
769
+ skills="unsupported",
770
+ hooks="unsupported",
771
+ agents="unsupported",
772
+ rules="native",
773
+ templates="not-applicable",
774
+ statuslines="unsupported",
775
+ output_styles="unsupported",
776
+ mcp_servers="discovery-pending",
777
+ sub_agent_dispatch="unsupported",
778
+ tool_surface_restrictions="not-applicable",
779
+ system_prompt_templates="native",
780
+ agent_memory="unsupported",
781
+ ),
782
+ unsupported_rationale=_unsupported(
783
+ mcp_servers="MCP lives in an operator-owned config surface (file / CLI / service state); the adapter names it but authors no entries.",
784
+ commands="The Zed adapter delivers the project rules surface "
785
+ "only; Apothem does not author a Zed command cohort.",
786
+ skills="The Zed adapter delivers the project rules surface "
787
+ "only; Apothem does not author a Zed skill cohort.",
788
+ hooks="The Zed adapter delivers the project rules surface "
789
+ "only; Apothem does not author a Zed hook cohort.",
790
+ agents="No Zed adapter-owned sub-agent file surface is documented.",
791
+ statuslines="No Zed statusline file surface is pinned.",
792
+ output_styles="No Zed output-style file surface is pinned.",
793
+ sub_agent_dispatch="No Zed sub-agent dispatch surface is documented.",
794
+ agent_memory="Zed agent memory is session-local and not adapter-owned.",
795
+ ),
796
+ ),
797
+ HarnessRegistryEntry(
798
+ public_id="glm",
799
+ package_key="glm",
800
+ display_name="GLM (Z.ai)",
801
+ entry_point="apothem.harnesses.glm:GlmAdapter",
802
+ scope="project",
803
+ output_format="toml",
804
+ target_paths=("<project>/.apothem/providers/glm.toml",),
805
+ docs_path="site/content/docs/harnesses/glm.mdx",
806
+ comparison_docs_path="site/content/docs/comparison/vs-raw-glm.mdx",
807
+ capabilities_path="src/apothem/harnesses/glm/capabilities.yml",
808
+ standard_pin_path="src/apothem/harnesses/glm/STANDARD-CONVENTION-PIN.md",
809
+ fixture_tests=("tests/unit/test_glm_adapter.py",),
810
+ package_data_key="apothem.harnesses.glm",
811
+ template_sources=("harnesses/glm/templates/glm.toml",),
812
+ capability_status=_matrix(
813
+ commands="unsupported",
814
+ skills="unsupported",
815
+ hooks="unsupported",
816
+ agents="unsupported",
817
+ rules="unsupported",
818
+ templates="unsupported",
819
+ statuslines="unsupported",
820
+ output_styles="unsupported",
821
+ mcp_servers="unsupported",
822
+ sub_agent_dispatch="unsupported",
823
+ tool_surface_restrictions="unsupported",
824
+ system_prompt_templates="unsupported",
825
+ agent_memory="unsupported",
826
+ ),
827
+ unsupported_rationale=_unsupported(
828
+ commands="GLM is a model backend configured via Anthropic/OpenAI-compatible env; it exposes no native command surface.",
829
+ skills="GLM is a model backend configured via Anthropic/OpenAI-compatible env; it exposes no native skill surface.",
830
+ hooks="GLM is a model backend configured via Anthropic/OpenAI-compatible env; it exposes no native hook surface.",
831
+ agents="GLM is a model backend configured via Anthropic/OpenAI-compatible env; it exposes no native agent surface.",
832
+ rules="GLM is a model backend configured via Anthropic/OpenAI-compatible env; it exposes no native rule surface.",
833
+ templates="GLM is a model backend configured via Anthropic/OpenAI-compatible env; it exposes no native template surface.",
834
+ statuslines="GLM is a model backend configured via Anthropic/OpenAI-compatible env; it exposes no native statusline surface.",
835
+ output_styles="GLM is a model backend configured via Anthropic/OpenAI-compatible env; it exposes no native output-style surface.",
836
+ mcp_servers="GLM is a model backend configured via Anthropic/OpenAI-compatible env; it exposes no native MCP-server surface.",
837
+ sub_agent_dispatch="GLM is a model backend configured via Anthropic/OpenAI-compatible env; it exposes no native sub-agent-dispatch surface.",
838
+ tool_surface_restrictions="GLM is a model backend configured via Anthropic/OpenAI-compatible env; it exposes no native tool-surface-restriction surface.",
839
+ system_prompt_templates="GLM is a model backend configured via Anthropic/OpenAI-compatible env; it exposes no native system-prompt-template surface.",
840
+ agent_memory="GLM is a model backend configured via Anthropic/OpenAI-compatible env; it exposes no native agent-memory surface.",
841
+ ),
842
+ ),
843
+ )