@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,39 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Install logic for the kiro harness adapter.
4
+
5
+ Materializes the apothem Kiro steering surface into the operator-supplied
6
+ project root. Kiro's canonical steering surface is the project-scope
7
+ Markdown format at ``<project>/.kiro/steering/*.md`` (per
8
+ https://kiro.dev/docs/steering/). The adapter writes a dedicated
9
+ ``apothem-rules.md`` steering file and never clobbers Kiro's
10
+ operator-authored foundation files (``product.md``, ``tech.md``,
11
+ ``structure.md``).
12
+
13
+ The propagation contract is declared in the canonical manifest at
14
+ ``src/apothem/lib/propagation-manifest.yaml`` under the ``kiro`` key
15
+ (a single ``sentinel_merge`` operation targeting
16
+ ``${PROJECT_ROOT}/.kiro/steering/apothem-rules.md``) and applied by the
17
+ shared driver at ``apothem.harnesses._shared.install_driver``. The
18
+ ``${PROJECT_ROOT}`` placeholder is substituted with the operator-supplied
19
+ ``--project <path>`` value the CLI threads through; absence of
20
+ ``--project`` is rejected upstream at ``apothem.cli._materialize`` via the
21
+ ``requires_project`` opt-in.
22
+ """
23
+
24
+ from __future__ import annotations
25
+
26
+ from apothem.harnesses._shared.wrapper_factories import (
27
+ make_project_scope_install,
28
+ make_project_scope_plan,
29
+ )
30
+
31
+ # Manifest harness key for this adapter.
32
+ _HARNESS_NAME: str = "kiro"
33
+
34
+ install = make_project_scope_install(
35
+ _HARNESS_NAME,
36
+ error_message="kiro adapter requires --project <path>; CLI must thread it through",
37
+ )
38
+
39
+ plan = make_project_scope_plan(_HARNESS_NAME)
@@ -0,0 +1,36 @@
1
+ ---
2
+ inclusion: always
3
+ ---
4
+
5
+ <!-- SPDX-License-Identifier: MIT -->
6
+
7
+ # Apothem — Kiro Bootstrap
8
+
9
+ This file is materialised by `apothem install --harness kiro --project <path>` and lands at `<project>/.kiro/steering/apothem-rules.md`, a dedicated Apothem steering file inside Kiro's documented steering directory per https://kiro.dev/docs/steering/. Kiro's foundation steering files (`product.md`, `tech.md`, `structure.md`) are operator-authored; this Apothem steering file is separate and never clobbers them. The `inclusion: always` front matter applies this governance surface on every interaction; `always` is the safe default because Apothem's mandates hold project-wide rather than for a file-pattern subset.
10
+
11
+ ## What Apothem governs in this project
12
+
13
+ Apothem propagates a shared governance and convention surface across every supported AI harness in this project's host environment. Inside Kiro, the surface manifests as this `inclusion: always` steering file:
14
+
15
+ - **Rules** — engineering rules applied on every interaction. The full rule cohort lives at the apothem source repository under `src/apothem/rules/`; this Kiro-facing anchor names the disciplines the operator may consult in detail.
16
+ - **Skills, commands, agents** — reusable techniques, slash-style workflows, and persistent sub-agent definitions. Apothem's canonical-master cohort at the apothem source repository defines them; Kiro does not auto-discover them as separate surfaces, so they manifest here as referenced discipline.
17
+ - **Specs** — Kiro's spec surface (`.kiro/specs/`) is operator-authored, not apothem-managed.
18
+ - **Agent hooks** — Kiro's agent-hook surface is operator-authored, not apothem-managed.
19
+
20
+ ## Engineering disciplines in force
21
+
22
+ Apothem's foundational mandates apply uniformly across every harness, including Kiro:
23
+
24
+ - **Plans-Locality.** Plan-suite artefacts (PROGRESS.md, PLAN-NOTES.md, PHASE.md, REPORT.md) live under `<project>/.apothem/plans/{suite}/` — the sole canonical home; a legacy `<project>/.plans/` tree upgrades via `apothem migrate-workspace`. They never land in a global plans directory or any other global-ecosystem location.
25
+ - **Authority hygiene.** Never fabricate identity, scope, security posture, or version-pin data. Surface ambiguity through a question instead of inventing a plausible-looking value.
26
+ - **Definitiveness.** Hedging vocabulary (`maybe`, `might`, `usually`, `generally`, `typically`, `probably`) is eliminated where binding prescription is possible. Pre / post / failure conditions are stated on every contract.
27
+ - **Production-ready discipline.** Every change ships in production-ready form — tests, docs, CHANGELOG entry, conformant commit message, CI green — in the same change-set.
28
+ - **Plain-language.** Codebase artefacts and user-facing prose read as natural domain language with zero trace of internal planning structure.
29
+ - **Human-only authorship.** Git commit messages, PR descriptions, branch names, and tag annotations carry human contributors only — never the underlying language model, runtime, IDE extension, or any automated tool as a co-author.
30
+ - **Lean-context delegation.** Where the host provides delegated-worker dispatch, broad reads and heavy workloads route to a spawned worker by default so the main working context stays lean. The heavy parallel apparatus stays opt-in; routing delegable work away from the main thread is the standing posture once dispatch is available.
31
+ - **Observe-decide-act discipline.** Tool use runs as a loop — observe the current state, decide the next move from what was observed, then act — never an edit before a read or a result asserted before a check. Independent reads and searches run together in one pass, not one per turn; the loop closes on a verifiable condition (a gate green, a read confirmed), never a fixed number of tries. Advisory, never an auto-applied behavior.
32
+ - **Source accessibility.** When the authoritative source for a claim, convention, or version pin is closed, paywalled, login-gated, or otherwise unreachable, ask the operator for it in full rather than substituting a lower-trust open page. Trust outranks reachability.
33
+
34
+ ## Refreshing the file
35
+
36
+ Re-run `apothem install --harness kiro --project <this-project-root>` to overwrite this file with the latest apothem template. The operation is idempotent. `apothem uninstall --harness kiro --project <this-project-root>` renames the file to a timestamped backup; `apothem verify --harness kiro --project <this-project-root>` checks the file is present and non-empty.
@@ -0,0 +1,25 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Uninstall logic for the kiro harness adapter."""
4
+
5
+ from __future__ import annotations
6
+
7
+ from pathlib import Path
8
+
9
+ from apothem.harnesses._shared import install_driver
10
+
11
+ _HARNESS_NAME: str = "kiro"
12
+
13
+
14
+ def uninstall(output_path: Path, *, project: Path | None = None) -> None:
15
+ """Remove Apothem-managed Kiro targets surgically.
16
+
17
+ The apothem-rules ``sentinel_merge`` steering anchor is cleaned by the shared
18
+ driver, which strips only Apothem's managed block (operator prose survives),
19
+ deletes an Apothem-only file, and backs the file up under the Apothem backup
20
+ root — no whole-file ``.bak`` sibling is left beside the operator's file.
21
+ """
22
+ install_driver.run_uninstall(
23
+ _HARNESS_NAME,
24
+ project_root=project or output_path.parents[2],
25
+ )
@@ -0,0 +1,10 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Update logic for the kiro harness adapter."""
4
+
5
+ from __future__ import annotations
6
+
7
+ from apothem.harnesses._shared.wrapper_factories import make_update_project
8
+ from apothem.harnesses.kiro.install import install
9
+
10
+ update = make_update_project(install)
@@ -0,0 +1,11 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Verify logic for the kiro harness adapter."""
4
+
5
+ from __future__ import annotations
6
+
7
+ from apothem.harnesses._shared.wrapper_factories import make_verify_project
8
+
9
+ _HARNESS_NAME: str = "kiro"
10
+
11
+ verify = make_verify_project(_HARNESS_NAME)
@@ -0,0 +1,62 @@
1
+ <!-- SPDX-License-Identifier: MIT -->
2
+
3
+ # Open-Claw Standard Convention Pin
4
+
5
+ ## Snapshot
6
+
7
+ - Snapshot date: 2026-06-25
8
+ - Snapshot note: live re-verification against `docs.openclaw.ai` surfaced two REFINEMENTS to the prior reading (see Evidence level): skills load from `~/.openclaw/skills` + agent workspaces and are THEN allowlist-filtered (not allowlist-only), and MCP servers live in an `mcp.servers` config block managed via the `openclaw mcp` CLI (not CLI-only). The adapter authors no skills/MCP entries either way, so no write is affected. Previous 2026-05-31.
9
+ - Adapter source: `src/apothem/harnesses/open_claw/`
10
+ - Evidence level: vendor-doc pinned (live re-fetch 2026-05-31) for
11
+ `~/.openclaw/openclaw.json` (JSON5). Skills load from `~/.openclaw/skills`
12
+ (shared root) plus each agent workspace, then are filtered by the effective
13
+ allowlist under `agents.defaults.skills` (per-agent override
14
+ `agents.list[].skills`) — the allowlist filters the directory-loaded set; the
15
+ specific `skills.load.extraDirs` key remains refuted. Subagents are documented
16
+ via `agents.list[].subagents.allowAgents` (with `maxConcurrent` /
17
+ `runTimeoutSeconds`). MCP servers live in the `mcp.servers` config block
18
+ (`mcp.*` changes hot-apply), managed via the `openclaw mcp` CLI subcommands
19
+ (list / show / set / unset). OpenClaw is a
20
+ multi-channel messaging gateway. No vendor-native UI claim is made here.
21
+ Versionless docs carry no version/SHA — no-immutable-source exception.
22
+ - Official references:
23
+ - <https://docs.openclaw.ai/gateway/config-agents>
24
+ - <https://docs.openclaw.ai/cli>
25
+
26
+ ## Recommended Postfix Rendering
27
+
28
+ - Status: supported as plain text.
29
+ - Mechanism: Apothem emits the literal ` (Recommended)` suffix in the option label. Open-Claw adapter output preserves that suffix when prompt text is materialized.
30
+ - Boundary: this pin does not claim a harness-native recommended-option widget. It only pins the text-rendered convention used by `rules/interactive-questions.md`.
31
+
32
+ ## Long Context and Compaction
33
+
34
+ - Status: profile-managed.
35
+ - Mechanism: Apothem keeps full-suite `/plan-execute` runs continuous by externalizing state to `.apothem/plans/`, compacting or restarting the harness session at phase boundaries as needed, and restoring via the Blind Bootstrap sequence.
36
+ - Boundary: this pin does not claim vendor-native autocompaction or a long-context size. It pins the adapter-local state handoff and compaction-restoration convention used by `rules/context-management.md`.
37
+
38
+ ## Large-Codebase Practice Projection
39
+
40
+ - Layered context: declared in `capabilities.yml` under `layered_context_surface`; no vendor-native hierarchy is claimed beyond the adapter's documented file/template surface.
41
+ - LSP symbol navigation: `tracked-gap` until a vendor-ratified plugin or tool surface is pinned.
42
+ - Hook learning capture: routed through the `persistent-conventions-vigilance` artifact-evolution cycle; pass-class hooks stay silent and recurring findings become rule, skill, hook, or documentation updates.
43
+
44
+ ## Plugin-alone Persistence
45
+
46
+ OpenClaw is a multi-channel messaging gateway with **no vendor plugin or
47
+ extension install surface** that Apothem ships. The adapter materializes
48
+ `~/.openclaw/openclaw.json` (JSON5) via its materializer and keeps non-native
49
+ cohorts under the Apothem support subtree (`~/.openclaw/apothem/`). There is no
50
+ standalone-installable bundle; every artifact requires the full
51
+ `apothem install --harness open-claw` engine run.
52
+
53
+ | Artifact class | Persists standalone? | Mechanism / limit |
54
+ |---|---|---|
55
+ | Config / agents | No — requires `apothem install` | `~/.openclaw/openclaw.json` is materializer-rendered by the engine; nothing persists before that run. |
56
+ | Commands / Skills / Agents / Rules | No — requires `apothem install` | These land under `~/.openclaw/apothem/` (support subtree) via the engine; OpenClaw `agents.defaults.skills` is a name-allowlist the adapter does not author. |
57
+ | Hooks / Settings | No — platform limit | No Apothem-authored hook or settings surface beyond the config materializer. |
58
+ | MCP | No — operator-owned | OpenClaw MCP servers live in the `mcp.servers` config block (managed via the `openclaw mcp` CLI subcommands; `mcp.*` hot-applies); the adapter authors no entries. |
59
+
60
+ Platform limit: OpenClaw ships no marketplace/extension channel, so a
61
+ plugin-alone story does not exist — the engine install is the sole persistence
62
+ path.
@@ -0,0 +1,35 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Apothem harness adapter for open-claw.
4
+
5
+ Materializes ``~/.openclaw/openclaw.json`` from the shared profile:
6
+ OpenClaw's user-global configuration file. Delegates installation to
7
+ :mod:`apothem.harnesses.open_claw.materializer`. OpenClaw's
8
+ ``agents.defaults.skills`` is a name allowlist (not a directory loader) and MCP
9
+ is a CLI surface, so Apothem authors no config keys; the support cohort lands
10
+ under ``~/.openclaw/apothem/`` and the projected profile document is written
11
+ there as operator reference.
12
+ """
13
+
14
+ from __future__ import annotations
15
+
16
+ from pathlib import Path
17
+
18
+ from apothem.harnesses._shared.wrapper_factories import make_native_config_adapter
19
+ from apothem.harnesses.open_claw.install import install as _install
20
+ from apothem.harnesses.open_claw.materializer import (
21
+ materialize_native_config as materialize_native_config,
22
+ )
23
+ from apothem.harnesses.open_claw.uninstall import uninstall as _uninstall
24
+ from apothem.harnesses.open_claw.update import update as _update
25
+ from apothem.harnesses.open_claw.verify import verify as _verify
26
+
27
+ OpenClawAdapter = make_native_config_adapter(
28
+ "open-claw",
29
+ target_factory=lambda: Path.home() / ".openclaw/openclaw.json",
30
+ install_fn=_install,
31
+ uninstall_fn=_uninstall,
32
+ update_fn=_update,
33
+ verify_fn=_verify,
34
+ class_name="OpenClawAdapter",
35
+ )
@@ -0,0 +1,35 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ # Per rules/agent-capability-discipline.md §1 / §3 / §7. The open_claw
4
+ # harness (a multi-channel messaging gateway) pins ~/.openclaw/openclaw.json
5
+ # (JSON5). Skills are an allowlist of names under agents.defaults.skills (not a
6
+ # directory loader); subagents are documented via
7
+ # agents.list[].subagents.allowAgents. MCP is a CLI surface (openclaw mcp ...),
8
+ # not a config-file block, so no MCP file surface is adapter-owned. Tool-surface
9
+ # universal-deny floor binds regardless.
10
+
11
+ mcp_servers: []
12
+ # Operator-owned MCP surface: the adapter recognizes it but authors no entries.
13
+ mcp_servers_authored: false
14
+ sub_agent_dispatch: true
15
+ custom_command_support: "skills-allowlist"
16
+ recommended_postfix_rendering: "plain-text"
17
+ long_context_compaction: "profile-managed"
18
+ context_ignore_surface: "not-documented-in-current-pin"
19
+ layered_context_surface: "openclaw.json plus agents.defaults.skills allowlist support skills"
20
+ lsp_symbol_navigation: "tracked-gap-no-adapter-owned-LSP-surface"
21
+ hook_learning_capture: "artifact-evolution-cycle"
22
+ standard_convention_pin: "STANDARD-CONVENTION-PIN.md"
23
+ # web-fetch / browser-retrieval surface — the backing capability dimension for
24
+ # rules/source-accessibility.md step 1 ("retrieve through the host's browser /
25
+ # fetch capability"). The pinned snapshot catalogs config-materialization
26
+ # surfaces, not the vendor tool surface, so the web-fetch tool is not yet
27
+ # discovered against the pin — discovery-pending per
28
+ # rules/agent-capability-discipline-matrix.md §1.
29
+ web_fetch: "discovery-pending"
30
+ tool_surface_restrictions:
31
+ - secrets-paths
32
+ - destructive-shell-ops
33
+ - network-write-unsigned
34
+ system_prompt_template_path: "n/a"
35
+ agent_memory_surface: "n/a"
@@ -0,0 +1,17 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Install logic for the open-claw harness adapter."""
4
+
5
+ from __future__ import annotations
6
+
7
+ from apothem.harnesses._shared.wrapper_factories import make_native_config_install
8
+ from apothem.harnesses.open_claw.materializer import materialize_native_config
9
+
10
+ _HARNESS_NAME: str = "open_claw"
11
+ _HARNESS_ID: str = "open-claw"
12
+
13
+ install = make_native_config_install(
14
+ _HARNESS_NAME,
15
+ materialize_native_config,
16
+ harness_id=_HARNESS_ID,
17
+ )
@@ -0,0 +1,36 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Materializer for the open-claw harness — renders JSON config.
4
+
5
+ OpenClaw's user-global config file (``~/.openclaw/openclaw.json``) is JSON with
6
+ a vendor schema that rejects unknown top-level keys. Apothem authors no config
7
+ keys here — it knows neither the operator's chosen skill names nor a file MCP
8
+ surface — so the materializer emits an empty object; the projected managed-block
9
+ profile document lands under the ``~/.openclaw/apothem/`` support subtree
10
+ instead (see ``materialize_native_config``).
11
+ """
12
+
13
+ from __future__ import annotations
14
+
15
+ import json
16
+ from typing import Any
17
+
18
+
19
+ def materialize_native_config(profile: dict[str, Any]) -> str:
20
+ """Render the open-claw native configuration from *profile*.
21
+
22
+ OpenClaw exposes skills as an allowlist of NAMES under
23
+ ``agents.defaults.skills`` (the earlier ``skills.load.extraDirs`` directory
24
+ loader was refuted) and manages MCP through the ``openclaw mcp`` CLI, not a
25
+ config-file block. Apothem knows neither the operator's chosen skill names
26
+ nor a file MCP surface here, so it authors no config keys — a directory path
27
+ in a name-allowlist would be misread as a (non-existent) skill name.
28
+ Apothem's shared command/skill content lands under ``~/.openclaw/apothem/``
29
+ (support subtree); the projected managed-block profile document is written
30
+ there as operator reference (OpenClaw has no auto-loaded instruction file,
31
+ so the operator wires it via the vendor's own mechanisms). Returns a JSON
32
+ string ready to be written to ``~/.openclaw/openclaw.json``.
33
+ """
34
+ _ = profile
35
+ config: dict[str, Any] = {}
36
+ return json.dumps(config, indent=2, ensure_ascii=False) + "\n"
@@ -0,0 +1,32 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Uninstall logic for the open-claw harness adapter."""
4
+
5
+ from __future__ import annotations
6
+
7
+ from pathlib import Path
8
+
9
+ from apothem.harnesses._shared import install_driver
10
+ from apothem.harnesses.open_claw.materializer import materialize_native_config
11
+
12
+ _HARNESS_NAME: str = "open_claw"
13
+
14
+
15
+ def uninstall(output_path: Path) -> None:
16
+ """Remove Apothem-managed OpenClaw targets surgically.
17
+
18
+ The native ``openclaw.json`` is rendered by the materializer rather than the
19
+ manifest, so it is cleaned here: only Apothem's keys are stripped from the
20
+ parsed operator JSON — operator-added keys survive — and the file is deleted
21
+ only when nothing operator-authored remains. The pre-mutation file is copied
22
+ into the Apothem backup root; no whole-file ``.bak`` sibling is left beside
23
+ the operator's file. The manifest support subtree is then cleaned
24
+ child-by-child by the shared driver.
25
+ """
26
+ install_driver.surgically_remove_materialized_config(
27
+ output_path,
28
+ materialize_native_config({}),
29
+ install_root=output_path.parent,
30
+ harness_name=_HARNESS_NAME,
31
+ )
32
+ install_driver.run_uninstall(_HARNESS_NAME, harness_root=output_path.parent)
@@ -0,0 +1,10 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Update logic for the open-claw harness adapter."""
4
+
5
+ from __future__ import annotations
6
+
7
+ from apothem.harnesses._shared.wrapper_factories import make_update
8
+ from apothem.harnesses.open_claw.install import install
9
+
10
+ update = make_update(install)
@@ -0,0 +1,11 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Verify logic for the open_claw harness adapter."""
4
+
5
+ from __future__ import annotations
6
+
7
+ from apothem.harnesses._shared.wrapper_factories import make_verify_native_config
8
+
9
+ _HARNESS_NAME: str = "open_claw"
10
+
11
+ verify = make_verify_native_config(_HARNESS_NAME)
@@ -0,0 +1,76 @@
1
+ <!-- SPDX-License-Identifier: MIT -->
2
+
3
+ # OpenCode Standard Convention Pin
4
+
5
+ ## Snapshot
6
+
7
+ - Snapshot date: 2026-06-25
8
+ - Snapshot note: live re-verification of `opencode.ai/docs` — `opencode.json` config sources (global `~/.config/opencode/opencode.json` + project), markdown agents/commands (plural `agents/`/`commands/` subdirs) with frontmatter, `skills/<name>/SKILL.md`, the AGENTS.md instruction-combination (`instructions` key), and `webfetch` (always-on) / `websearch` (provider/`OPENCODE_ENABLE_EXA`-gated) all confirmed current.
9
+ - Adapter source: `src/apothem/harnesses/opencode/`
10
+ - Evidence level: vendor-doc pinned (live re-fetch 2026-05-31) for
11
+ `opencode.json` and the `instructions`/`agent`/`command`/`mcp`/`plugin`
12
+ keys; skills are a documented native surface (`skills/<name>/SKILL.md`);
13
+ plugins are vendor-native (`plugin` key + `plugins/`) and operator-owned;
14
+ the native config is rendered directly (no Jinja template). No vendor-native
15
+ UI claim is made here. Rolling docs carry no version/SHA — no-immutable-source
16
+ exception on every source row.
17
+ - Official references:
18
+ - <https://opencode.ai/docs/config/>
19
+ - <https://opencode.ai/docs/agents>
20
+ - <https://opencode.ai/docs/mcp-servers>
21
+ - <https://opencode.ai/docs/skills>
22
+ - <https://opencode.ai/docs/plugins>
23
+
24
+ ## Web-Fetch / Browser-Retrieval Surface
25
+
26
+ - Capability: `web_fetch` = **partial**. The backing dimension for
27
+ `rules/source-accessibility.md` step 1 ("retrieve through the host's browser /
28
+ fetch capability").
29
+ - Vendor-confirmed PARTIAL: opencode ships an unconditional built-in `webfetch`
30
+ tool (fetch + read web pages), but the `websearch` tool is available only when
31
+ using the OpenCode provider or when the `OPENCODE_ENABLE_EXA` env var is set.
32
+ The `partial` subset boundary is: fetch always-on, search provider/env-gated.
33
+ - Evidence: vendor-doc-url <https://opencode.ai/docs/tools/> ("webfetch … Allows
34
+ the LLM to fetch and read web pages"; "websearch … only available when using
35
+ the OpenCode provider or when the `OPENCODE_ENABLE_EXA` environment variable is
36
+ set"); snapshot-id living docs; snapshot-date 2026-06-21.
37
+
38
+ ## Recommended Postfix Rendering
39
+
40
+ - Status: supported as plain text.
41
+ - Mechanism: Apothem emits the literal ` (Recommended)` suffix in the option label. OpenCode adapter output preserves that suffix when prompt text is materialized.
42
+ - Boundary: this pin does not claim a harness-native recommended-option widget. It only pins the text-rendered convention used by `rules/interactive-questions.md`.
43
+
44
+ ## Long Context and Compaction
45
+
46
+ - Status: profile-managed.
47
+ - Mechanism: Apothem keeps full-suite `/plan-execute` runs continuous by externalizing state to `.apothem/plans/`, compacting or restarting the harness session at phase boundaries as needed, and restoring via the Blind Bootstrap sequence.
48
+ - Boundary: this pin does not claim vendor-native autocompaction or a long-context size. It pins the adapter-local state handoff and compaction-restoration convention used by `rules/context-management.md`.
49
+
50
+ ## Large-Codebase Practice Projection
51
+
52
+ - Layered context: declared in `capabilities.yml` under `layered_context_surface`; no vendor-native hierarchy is claimed beyond the adapter's documented file/template surface.
53
+ - LSP symbol navigation: `tracked-gap` until a vendor-ratified plugin or tool surface is pinned.
54
+ - Hook learning capture: routed through the `persistent-conventions-vigilance` artifact-evolution cycle; pass-class hooks stay silent and recurring findings become rule, skill, hook, or documentation updates.
55
+
56
+ ## Plugin-alone Persistence
57
+
58
+ OpenCode documents a vendor-native `plugin` key plus a `plugins/` directory, but
59
+ that surface is operator-owned and **Apothem ships no OpenCode plugin bundle** —
60
+ and OpenCode exposes no harness-native plugin marketplace Apothem distributes
61
+ through. The cohort lands via native skills/commands/agents surfaces, all written
62
+ by the engine. There is no standalone-installable bundle; every artifact requires
63
+ the full `apothem install --harness opencode` engine run.
64
+
65
+ | Artifact class | Persists standalone? | Mechanism / limit |
66
+ |---|---|---|
67
+ | Skills | No — requires `apothem install` | Native `~/.config/opencode/skills/*/SKILL.md` is engine-written; no pre-built bundle carries it. |
68
+ | Commands | No — requires `apothem install` | Apothem commands are engine-converted to OpenCode Markdown under `~/.config/opencode/commands/`. |
69
+ | Agents | No — requires `apothem install` | Apothem agents are engine-converted to OpenCode Markdown under `~/.config/opencode/agents/`. |
70
+ | Rules (as native primitive) | No — platform limit | OpenCode has no native rules-directory primitive; Apothem rules land as `~/.config/opencode/apothem/rules/` reference material via the engine. |
71
+ | Hooks | No — platform limit | Engine support material only under `~/.config/opencode/apothem/hooks/`. |
72
+ | MCP / Plugins / Settings | No — operator-owned | The `mcp` and `plugin` keys in `opencode.json` are operator-owned; the adapter authors no entries. |
73
+
74
+ Platform limit: OpenCode's `plugin` surface is operator-owned and Apothem
75
+ distributes no OpenCode plugin package, so a plugin-alone story does not exist —
76
+ the engine install is the sole persistence path.
@@ -0,0 +1,35 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Apothem harness adapter for opencode.
4
+
5
+ Materializes ``~/.config/opencode/opencode.json`` per the opencode vendor
6
+ canonical schema at https://opencode.ai/docs/config/ and the adapter-local
7
+ ``STANDARD-CONVENTION-PIN.md``. The POSIX-canonical path is uniform across
8
+ supported platforms. The install step also propagates commands, skills, and
9
+ subagents into OpenCode's native discovery directories and keeps unsupported
10
+ reference material under ``~/.config/opencode/apothem``.
11
+ Delegates installation to :mod:`apothem.harnesses.opencode.materializer`.
12
+ """
13
+
14
+ from __future__ import annotations
15
+
16
+ from pathlib import Path
17
+
18
+ from apothem.harnesses._shared.wrapper_factories import make_native_config_adapter
19
+ from apothem.harnesses.opencode.install import install as _install
20
+ from apothem.harnesses.opencode.materializer import (
21
+ materialize_native_config as materialize_native_config,
22
+ )
23
+ from apothem.harnesses.opencode.uninstall import uninstall as _uninstall
24
+ from apothem.harnesses.opencode.update import update as _update
25
+ from apothem.harnesses.opencode.verify import verify as _verify
26
+
27
+ OpenCodeAdapter = make_native_config_adapter(
28
+ "opencode",
29
+ target_factory=lambda: Path.home() / ".config/opencode/opencode.json",
30
+ install_fn=_install,
31
+ uninstall_fn=_uninstall,
32
+ update_fn=_update,
33
+ verify_fn=_verify,
34
+ class_name="OpenCodeAdapter",
35
+ )
@@ -0,0 +1,43 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ # Per rules/agent-capability-discipline.md §1 / §3 / §7. opencode
4
+ # anchors ~/.config/opencode/opencode.json (user-scope), then uses native
5
+ # commands, skills, and agents discovery directories. Skills are a documented
6
+ # native surface (skills/<name>/SKILL.md). Plugins are vendor-native (plugin
7
+ # key + plugins/ directory) and operator-owned; no plugin package is authored.
8
+ # MCP surface declared within opencode.json. Memory surface not documented as
9
+ # durable. The native config is rendered directly (no Jinja template).
10
+
11
+ mcp_servers:
12
+ - opencode.json-mcp-block
13
+ # The adapter's materializer.py authors this MCP block from the shared profile.
14
+ mcp_servers_authored: true
15
+ sub_agent_dispatch: true
16
+ custom_command_support: "markdown"
17
+ recommended_postfix_rendering: "plain-text"
18
+ long_context_compaction: "profile-managed"
19
+ context_ignore_surface: "not-documented-in-current-pin"
20
+ layered_context_surface: "opencode.json instructions plus native commands, skills, and agents"
21
+ lsp_symbol_navigation: "tracked-gap-no-adapter-owned-LSP-surface"
22
+ hook_learning_capture: "artifact-evolution-cycle"
23
+ standard_convention_pin: "STANDARD-CONVENTION-PIN.md"
24
+ # web-fetch / browser-retrieval surface — the backing capability dimension for
25
+ # rules/source-accessibility.md step 1 ("retrieve through the host's browser /
26
+ # fetch capability"). Vendor-confirmed PARTIAL: opencode ships an unconditional
27
+ # built-in `webfetch` tool (fetch + read web pages), but the `websearch` tool is
28
+ # available only when using the OpenCode provider or when the OPENCODE_ENABLE_EXA
29
+ # env var is set. The `partial` subset boundary is: fetch always-on, search
30
+ # provider/env-gated. Evidence triple — vendor-doc-url:
31
+ # https://opencode.ai/docs/tools/ ("webfetch … Allows the LLM to fetch and read
32
+ # web pages"; "websearch … only available when using the OpenCode provider or
33
+ # when the OPENCODE_ENABLE_EXA environment variable is set"); snapshot-id: living
34
+ # docs; snapshot-date: 2026-06-21. Canonical evidence home is
35
+ # STANDARD-CONVENTION-PIN.md per rules/agent-capability-discipline-matrix.md §1A;
36
+ # pin refresh tracked as a follow-up.
37
+ web_fetch: "partial"
38
+ tool_surface_restrictions:
39
+ - secrets-paths
40
+ - destructive-shell-ops
41
+ - network-write-unsigned
42
+ system_prompt_template_path: "n/a"
43
+ agent_memory_surface: "n/a"
@@ -0,0 +1,17 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Install logic for the opencode harness adapter."""
4
+
5
+ from __future__ import annotations
6
+
7
+ from apothem.harnesses._shared.wrapper_factories import make_native_config_install
8
+ from apothem.harnesses.opencode.materializer import materialize_native_config
9
+
10
+ _HARNESS_NAME: str = "opencode"
11
+ _HARNESS_ID: str = "opencode"
12
+
13
+ install = make_native_config_install(
14
+ _HARNESS_NAME,
15
+ materialize_native_config,
16
+ harness_id=_HARNESS_ID,
17
+ )
@@ -0,0 +1,31 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Materializer for the opencode harness — renders JSON config."""
4
+
5
+ from __future__ import annotations
6
+
7
+ import json
8
+ from typing import Any
9
+
10
+ from apothem.lib.profile import coerce_profile
11
+ from apothem.lib.profile_projection import mcp_servers_for, render_mcp_opencode
12
+
13
+
14
+ def materialize_native_config(profile: dict[str, Any]) -> str:
15
+ """Render the opencode native configuration from *profile*.
16
+
17
+ Renders the apothem instructions pointer plus the profile's MCP inventory
18
+ into opencode's native ``mcp`` surface. Returns a JSON string ready to be
19
+ written to ``output_path``.
20
+ """
21
+ for_harness = coerce_profile(profile).for_harness("opencode")
22
+ config: dict[str, Any] = {
23
+ "$schema": "https://opencode.ai/config.json",
24
+ "instructions": [
25
+ "~/.config/opencode/apothem/rules/*.md",
26
+ ],
27
+ }
28
+ mcp = render_mcp_opencode(mcp_servers_for(for_harness))
29
+ if mcp:
30
+ config["mcp"] = mcp
31
+ return json.dumps(config, indent=2, ensure_ascii=False) + "\n"
@@ -0,0 +1,34 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Uninstall logic for the opencode harness adapter."""
4
+
5
+ from __future__ import annotations
6
+
7
+ from pathlib import Path
8
+
9
+ from apothem.harnesses._shared import install_driver
10
+ from apothem.harnesses.opencode.materializer import materialize_native_config
11
+
12
+ _HARNESS_NAME: str = "opencode"
13
+
14
+
15
+ def uninstall(output_path: Path) -> None:
16
+ """Remove Apothem-managed OpenCode targets surgically.
17
+
18
+ The native ``opencode.json`` is rendered by the materializer rather than the
19
+ manifest, so it is cleaned here: only Apothem's keys (``$schema``,
20
+ ``instructions``, and the profile-derived ``mcp`` block) are stripped from the
21
+ parsed operator JSON — operator-added keys and operator-added ``instructions``
22
+ entries survive — and the file is deleted only when nothing operator-authored
23
+ remains. The pre-mutation file is copied into the Apothem backup root; no
24
+ whole-file ``.bak`` sibling is left beside the operator's file. The manifest
25
+ support subtree is then cleaned child-by-child by the shared driver.
26
+ """
27
+ install_driver.surgically_remove_materialized_config(
28
+ output_path,
29
+ materialize_native_config({}),
30
+ install_root=output_path.parent,
31
+ harness_name=_HARNESS_NAME,
32
+ apothem_keys=frozenset({"mcp"}),
33
+ )
34
+ install_driver.run_uninstall(_HARNESS_NAME, harness_root=output_path.parent)
@@ -0,0 +1,10 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Update logic for the opencode harness adapter."""
4
+
5
+ from __future__ import annotations
6
+
7
+ from apothem.harnesses._shared.wrapper_factories import make_update
8
+ from apothem.harnesses.opencode.install import install
9
+
10
+ update = make_update(install)
@@ -0,0 +1,11 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Verify logic for the opencode harness adapter."""
4
+
5
+ from __future__ import annotations
6
+
7
+ from apothem.harnesses._shared.wrapper_factories import make_verify_native_config
8
+
9
+ _HARNESS_NAME: str = "opencode"
10
+
11
+ verify = make_verify_native_config(_HARNESS_NAME)