@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,10 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Update logic for the codebuddy harness adapter."""
4
+
5
+ from __future__ import annotations
6
+
7
+ from apothem.harnesses._shared.wrapper_factories import make_update_project
8
+ from apothem.harnesses.codebuddy.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 codebuddy 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 = "codebuddy"
10
+
11
+ verify = make_verify_project(_HARNESS_NAME)
@@ -0,0 +1,79 @@
1
+ <!-- SPDX-License-Identifier: MIT -->
2
+
3
+ # Codex Standard Convention Pin
4
+
5
+ ## Snapshot
6
+
7
+ - Snapshot date: 2026-06-25
8
+ - Snapshot note: live re-verification of `developers.openai.com/codex` — AGENTS.md instruction chain (`CODEX_HOME`, `AGENTS.override.md`, `project_doc_fallback_filenames`), `~/.codex/config.toml` (+ `[mcp_servers.<name>]` tables), `~/.codex/agents/*.toml` subagents, `~/.agents/skills`, `~/.codex/hooks.json`, and the first-party web-search tool all confirmed current; no authority-host move; no immutable pin — mutable docs site
9
+ - Adapter source: `src/apothem/harnesses/codex/`
10
+ - Evidence level: adapter-local projection; no vendor-native UI claim is made here.
11
+
12
+ ## MCP Surface Projection
13
+
14
+ - Status: vendor-native MCP is supported via `[mcp_servers.<name>]` tables in the operator-owned `~/.codex/config.toml` (and trusted-project `.codex/config.toml`).
15
+ - Mechanism: Apothem names this native surface in `capabilities.yml` but does not author MCP server entries; `config.toml` is operator-owned and outside the adapter's write surface.
16
+ - Boundary: STDIO transport keys (`command`, `args`, `env`, `cwd`) and HTTP keys (`url`, `bearer_token_env_var`, `http_headers`) are vendor-defined; this pin claims only that the surface exists, not that Apothem materializes it.
17
+
18
+ ## Subagent and Skills Surface Projection
19
+
20
+ - Subagents: standalone TOML in `~/.codex/agents/` requiring `name` / `description` / `developer_instructions`. The adapter's `codex_agents` converter emits exactly that field set (plus `model_reasoning_effort`); confirmed compliant 2026-05-31.
21
+ - Skills: user-scope path is `~/.agents/skills` (confirmed correct). System skills are OpenAI-bundled with no official on-disk path — any `~/.codex/skills/.system` reference is an observed-runtime convenience, not an official path, and is never a write or sweep target.
22
+
23
+ ## Recommended Postfix Rendering
24
+
25
+ - Status: supported as plain text.
26
+ - Mechanism: Apothem emits the literal ` (Recommended)` suffix in the option label. Codex-facing prompts and fallback text preserve that suffix as authored.
27
+ - 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`.
28
+
29
+ ## Long Context and Compaction
30
+
31
+ - Status: profile-managed.
32
+ - 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.
33
+ - 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`.
34
+
35
+ ## Large-Codebase Practice Projection
36
+
37
+ - Layered context: declared in `capabilities.yml` under `layered_context_surface`; no vendor-native hierarchy is claimed beyond the adapter's documented file/template surface.
38
+ - LSP symbol navigation: `tracked-gap` until a vendor-ratified plugin or tool surface is pinned.
39
+ - 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.
40
+
41
+ ## Web-Fetch / Browser-Retrieval Surface
42
+
43
+ - Capability: `web_fetch` = **yes**. The backing dimension for `rules/source-accessibility.md` step 1 ("retrieve through the host's browser / fetch capability").
44
+ - Vendor-confirmed: Codex CLI ships a first-party web search tool, enabled by default for local tasks (cache-served); `--search` or `web_search = "live"` fetches live results, `"disabled"` turns it off.
45
+ - Evidence: vendor-doc-url <https://developers.openai.com/codex/cli/features> ("Codex ships with a first-party web search tool"); snapshot-id living docs (no immutable commit); snapshot-date 2026-06-21.
46
+
47
+ ## Hook Surface Projection
48
+
49
+ - Status: vendor-native user-scope hooks are supported through `~/.codex/hooks.json` and may also be declared in `~/.codex/config.toml`.
50
+ - Mechanism: Apothem installs managed hook configuration at `~/.codex/hooks.json` and helper material under `~/.codex/hooks/`.
51
+ - Boundary: Apothem does not overwrite `~/.codex/config.toml`; operator-owned hook declarations in that file remain outside the adapter's write surface.
52
+
53
+ ## Plugin-alone Persistence
54
+
55
+ Codex exposes a plugin-marketplace surface (`codex plugin marketplace add`).
56
+ The bundle is `plugins/apothem/` with `.codex-plugin/plugin.json`
57
+ (`"skills": "./skills/"`) referenced by `.agents/plugins/marketplace.json`.
58
+ Installing the plugin *alone* — without running `apothem install` — persists
59
+ only what the plugin package bundles; the full user-scope cohort still requires
60
+ the engine, which converts agents to TOML and wires `~/.codex/hooks.json`.
61
+
62
+ | Artifact class | Persists plugin-alone? | Mechanism / limit |
63
+ |---|---|---|
64
+ | Skills | Bootstrap only | The plugin bundles one skill, `skills/apothem/SKILL.md`, a launcher that instructs the operator to run `npx @ahmed-g-gad/apothem install --harness codex`. It persists and is discoverable, but it carries the *entry-point*, not the cohort. |
65
+ | Commands | No — folded into the bootstrap skill | Codex has no separate marketplace command primitive in this bundle; the `/apothem`-equivalent entry is the bootstrap skill above. The full command cohort (command-prompt skills under `~/.agents/skills/`) lands only via `apothem install`. |
66
+ | Context anchor (rules-as-text) | No — requires `apothem install` | `~/.codex/AGENTS.md` is written by the engine, not the plugin package. The plugin bundles no AGENTS.md, so the embedded engineering disciplines persist only after the engine run. |
67
+ | Rules (as native primitive) | No — platform limit | Codex reserves `~/.codex/rules/` for `.rules` execution-policy files; Apothem rules are never a Codex-native rules primitive. They land as `~/.config/apothem/rules/` reference material via `apothem install`. |
68
+ | Agents | No — requires `apothem install` | `~/.codex/agents/*.toml` is engine-converted; the plugin package bundles no agents. |
69
+ | Hooks | No — requires `apothem install` | `~/.codex/hooks.json` + `~/.codex/hooks/` are engine-installed; the plugin package wires no hooks. |
70
+ | MCP servers | No — operator-owned | `[mcp_servers.<name>]` tables live in operator-owned `~/.codex/config.toml`; neither the plugin nor the engine authors them. |
71
+
72
+ Bundle wiring status: the plugin package persists a bootstrap launcher skill
73
+ that runs the engine. Embedding the full converted cohort (agents-as-TOML,
74
+ command skills, an AGENTS.md anchor carrying the engineering disciplines)
75
+ directly into `plugins/apothem/` is a documented future enhancement — the
76
+ conversion logic lives in the engine (`codex_agents` / `command_skills` modes
77
+ in `propagation-manifest.yaml`), so a build step that pre-renders those into the
78
+ bundled `plugins/apothem/` tree would let the plugin carry the cohort without a
79
+ post-install engine run.
@@ -0,0 +1,72 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Apothem harness adapter for codex — raw-propagation (no materializer).
4
+
5
+ Propagates the apothem convention surface into ``$CODEX_HOME`` (default
6
+ ``~/.codex/``) per the canonical manifest at
7
+ ``src/apothem/lib/propagation-manifest.yaml``.
8
+ Per the declared divergence at ``rules/harness-adapter-shape-schemas.md`` §2
9
+ ("No materializer; …"), the codex adapter renders no standalone config file:
10
+ the AGENTS.md anchor instead receives the shared profile as a
11
+ sentinel-delimited Apothem managed block, preserving operator prose outside
12
+ the sentinels.
13
+ """
14
+
15
+ from __future__ import annotations
16
+
17
+ import os
18
+ from pathlib import Path
19
+ from typing import Any
20
+
21
+ from apothem.harnesses._shared.install_driver import MaterializationRun
22
+ from apothem.harnesses.codex.install import install as _install
23
+ from apothem.harnesses.codex.install import plan as _plan
24
+ from apothem.harnesses.codex.uninstall import uninstall as _uninstall
25
+ from apothem.harnesses.codex.update import update as _update
26
+ from apothem.harnesses.codex.verify import verify as _verify
27
+
28
+
29
+ def _codex_home() -> Path:
30
+ """Return the Codex user configuration root."""
31
+ configured = os.environ.get("CODEX_HOME")
32
+ if configured:
33
+ return Path(configured).expanduser()
34
+ return Path.home() / ".codex"
35
+
36
+
37
+ class CodexAdapter:
38
+ """CodexAdapter — implements :class:`~apothem.harnesses.HarnessAdapter`."""
39
+
40
+ @property
41
+ def name(self) -> str:
42
+ """Return the canonical kebab-case harness identifier."""
43
+ return "codex"
44
+
45
+ @property
46
+ def output_path(self) -> Path:
47
+ """Return the target configuration file path."""
48
+ return _codex_home() / "AGENTS.md"
49
+
50
+ def install(self, profile: dict[str, Any]) -> MaterializationRun:
51
+ """Materialize the harness configuration from the shared profile."""
52
+ return _install(self.output_path, profile)
53
+
54
+ def update(self, profile: dict[str, Any]) -> MaterializationRun:
55
+ """Re-materialize the harness configuration from the updated profile."""
56
+ return _update(self.output_path, profile)
57
+
58
+ def plan(self, output_path: Path | None = None) -> list[dict[str, str]]:
59
+ """Return the manifest-driven propagation plan without writing."""
60
+ return _plan(output_path or self.output_path)
61
+
62
+ def uninstall(self) -> None:
63
+ """Remove the harness configuration file if present."""
64
+ _uninstall(self.output_path)
65
+
66
+ def is_installed(self) -> bool:
67
+ """Return True if the configuration file exists on disk."""
68
+ return self.output_path.exists()
69
+
70
+ def verify(self) -> bool:
71
+ """Return True if the installed configuration is valid."""
72
+ return _verify(self.output_path)
@@ -0,0 +1,40 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ # Per rules/agent-capability-discipline.md §1 / §3 / §7. The codex
4
+ # harness uses AGENTS.md, hooks.json, TOML custom agents, the shared Codex
5
+ # skills root, and an Apothem support tree for non-native Markdown cohorts.
6
+ # MCP is natively supported via [mcp_servers.<name>] tables in the
7
+ # operator-owned config.toml (confirmed live 2026-05-31); Apothem names
8
+ # the native surface but does not author MCP server entries.
9
+
10
+ mcp_servers:
11
+ - config.toml-mcp_servers-tables-operator-owned
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: "yes"
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: "AGENTS.md plus ~/.codex/hooks.json, ~/.codex/hooks, ~/.codex/agents, ~/.agents/skills, ~/.config/apothem"
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"). Vendor-confirmed: Codex CLI ships a first-party web search
26
+ # tool, enabled by default for local tasks (cache-served); `--search` or
27
+ # `web_search = "live"` fetches live results, `"disabled"` turns it off.
28
+ # Evidence triple — vendor-doc-url:
29
+ # https://developers.openai.com/codex/cli/features ("Codex ships with a
30
+ # first-party web search tool"); snapshot-id: living docs (no immutable commit);
31
+ # snapshot-date: 2026-06-21. Canonical evidence home is STANDARD-CONVENTION-PIN.md
32
+ # per rules/agent-capability-discipline-matrix.md §1A; pin refresh tracked as a
33
+ # follow-up to fold this triple into the pin's evidence chain.
34
+ web_fetch: "yes"
35
+ tool_surface_restrictions:
36
+ - secrets-paths
37
+ - destructive-shell-ops
38
+ - network-write-unsigned
39
+ system_prompt_template_path: "n/a"
40
+ agent_memory_surface: "AGENTS.md hierarchy"
@@ -0,0 +1,69 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Install logic for the codex harness adapter.
4
+
5
+ Installs the Apothem convention surface into the OpenAI Codex CLI
6
+ harness target. Codex CLI reads ``$CODEX_HOME/AGENTS.md`` as the
7
+ vendor-canonical agent-instructions file and discovers lifecycle hooks
8
+ from ``$CODEX_HOME/hooks.json`` plus hook helpers under
9
+ ``$CODEX_HOME/hooks/``. Agents are converted to
10
+ ``$CODEX_HOME/agents/*.toml``. Skills and command prompts propagate to the
11
+ shared Codex skills root ``~/.agents/skills/``. Markdown rules and templates
12
+ live under ``~/.config/apothem/`` as support material because Codex reserves
13
+ ``$CODEX_HOME/rules/`` for ``.rules`` execution-policy files.
14
+
15
+ Codex runtime configuration lives at ``$CODEX_HOME/config.toml`` and is
16
+ operator-owned; this adapter does not overwrite that file.
17
+
18
+ The adapter is user-scope: it propagates under the harness root resolved
19
+ as ``output_path.parent`` (``~/.codex/``). Its propagation contract is
20
+ declared in the canonical manifest at
21
+ ``src/apothem/lib/propagation-manifest.yaml`` under the ``codex`` key
22
+ and applied by the shared driver at
23
+ ``apothem.harnesses._shared.install_driver``. Drift between the
24
+ propagation contract and the on-disk install is impossible by
25
+ construction: the manifest IS the contract.
26
+ """
27
+
28
+ from __future__ import annotations
29
+
30
+ from pathlib import Path
31
+ from typing import Any
32
+
33
+ from apothem.harnesses._shared import install_driver
34
+ from apothem.harnesses._shared.install_driver import MaterializationRun
35
+
36
+ # Manifest harness key for this adapter.
37
+ _HARNESS_NAME: str = "codex"
38
+
39
+
40
+ def install(output_path: Path, profile: dict[str, Any]) -> MaterializationRun:
41
+ """Install the apothem convention surface into the Codex CLI harness.
42
+
43
+ The harness root is derived as ``output_path.parent`` — the
44
+ ``CodexAdapter`` resolves this to ``$CODEX_HOME``. The shared ``profile``
45
+ is projected into the ``AGENTS.md`` instruction anchor as a
46
+ sentinel-delimited Apothem managed block (operator prose outside the
47
+ sentinels is preserved); the convention cohorts (skills, agents-as-TOML,
48
+ hooks) propagate alongside it. All operations are idempotent —
49
+ re-running replaces previous content cleanly, eliminating stale files
50
+ from prior install layouts.
51
+ """
52
+ return install_driver.finalize_install(
53
+ install_driver.run_install(
54
+ _HARNESS_NAME, harness_root=output_path.parent, profile=profile
55
+ ),
56
+ root=output_path.parent,
57
+ )
58
+
59
+
60
+ def plan(output_path: Path) -> list[dict[str, str]]:
61
+ """Return the propagation plan for the configured harness without writing.
62
+
63
+ Each entry carries ``source`` (resolved on-disk path), ``target``
64
+ (resolved absolute path under ``output_path.parent``), and ``mode``
65
+ (``write_text``, a tree mode, or a conversion mode). The plan is the manifest's
66
+ install list materialized against the active harness root — the same
67
+ sequence ``install`` would apply, in declaration order.
68
+ """
69
+ return install_driver.build_plan(_HARNESS_NAME, harness_root=output_path.parent)
@@ -0,0 +1,40 @@
1
+ <!-- SPDX-License-Identifier: MIT -->
2
+
3
+ # Apothem — Codex Bootstrap
4
+
5
+ This file is the vendor-canonical agent-instructions surface for the
6
+ OpenAI Codex CLI (`$CODEX_HOME/AGENTS.md`, default `~/.codex/AGENTS.md`).
7
+ It follows the universal AGENTS.md convention adopted across coding-agent
8
+ ecosystems. Apothem's governance surface is split between Codex-native
9
+ discovery paths and an Apothem-owned support tree for content that is not a
10
+ Codex-native primitive.
11
+
12
+ ## Apothem Conventions
13
+
14
+ The Apothem-managed cohorts are installed as follows:
15
+
16
+ - `$CODEX_HOME/agents/*.toml` — Codex custom agents converted from Apothem
17
+ Markdown agents.
18
+ - `$CODEX_HOME/hooks.json` and `$CODEX_HOME/hooks/` — Codex lifecycle hook
19
+ configuration plus Apothem hook helpers.
20
+ - `~/.agents/skills/*/SKILL.md` — Apothem skills plus command prompts wrapped
21
+ as Codex skills.
22
+ - `~/.config/apothem/rules/` — Apothem Markdown rules used as reference
23
+ material by this file and the installed skills.
24
+ - `~/.config/apothem/templates/` — plan, report, and audit templates.
25
+
26
+ Do not place Apothem Markdown rules under `$CODEX_HOME/rules/`. Codex
27
+ reserves that directory for `.rules` execution-policy files, which use a
28
+ different format and purpose.
29
+
30
+ ## Runtime Configuration
31
+
32
+ Codex CLI's runtime configuration lives at `$CODEX_HOME/config.toml`. Apothem
33
+ does not overwrite that operator-owned file; it installs instructions, hooks,
34
+ agents, skills, and support content through the vendor-native paths above.
35
+
36
+ ## Operator Surface
37
+
38
+ Operators may extend project-specific instructions in project-local
39
+ `AGENTS.md` files. Re-run `apothem install --harness codex` to refresh this
40
+ user-scope bootstrap, converted agents, skills, and support cohorts.
@@ -0,0 +1,127 @@
1
+ {
2
+ "hooks": {
3
+ "SessionStart": [
4
+ {
5
+ "matcher": "startup|resume|clear|compact",
6
+ "hooks": [
7
+ {
8
+ "type": "command",
9
+ "command": "python3 \"${HARNESS_ROOT}/hooks/dispatch.py\" SessionStart",
10
+ "commandWindows": "py -3 \"${HARNESS_ROOT}/hooks/dispatch.py\" SessionStart",
11
+ "timeout": 30,
12
+ "statusMessage": "Initializing session posture"
13
+ }
14
+ ]
15
+ }
16
+ ],
17
+ "PreToolUse": [
18
+ {
19
+ "matcher": "Bash",
20
+ "hooks": [
21
+ {
22
+ "type": "command",
23
+ "command": "python3 \"${HARNESS_ROOT}/hooks/dispatch.py\" PreToolUse pretooluse-bash",
24
+ "commandWindows": "py -3 \"${HARNESS_ROOT}/hooks/dispatch.py\" PreToolUse pretooluse-bash",
25
+ "timeout": 10,
26
+ "statusMessage": "Validating shell command safety and isolation"
27
+ },
28
+ {
29
+ "type": "command",
30
+ "command": "python3 \"${HARNESS_ROOT}/hooks/dispatch.py\" PreToolUse pretooluse-bash-plan-guard",
31
+ "commandWindows": "py -3 \"${HARNESS_ROOT}/hooks/dispatch.py\" PreToolUse pretooluse-bash-plan-guard",
32
+ "timeout": 10,
33
+ "statusMessage": "Enforcing plans locality on shell redirections"
34
+ },
35
+ {
36
+ "type": "command",
37
+ "command": "python3 \"${HARNESS_ROOT}/hooks/dispatch.py\" PreToolUse pretooluse-eval-guard",
38
+ "commandWindows": "py -3 \"${HARNESS_ROOT}/hooks/dispatch.py\" PreToolUse pretooluse-eval-guard",
39
+ "timeout": 10,
40
+ "statusMessage": "Flagging unsafe dynamic evaluation or deserialization"
41
+ }
42
+ ]
43
+ },
44
+ {
45
+ "matcher": "Edit|Write|apply_patch",
46
+ "hooks": [
47
+ {
48
+ "type": "command",
49
+ "command": "python3 \"${HARNESS_ROOT}/hooks/dispatch.py\" PreToolUse pretooluse-write",
50
+ "commandWindows": "py -3 \"${HARNESS_ROOT}/hooks/dispatch.py\" PreToolUse pretooluse-write",
51
+ "timeout": 10,
52
+ "statusMessage": "Validating write target and content"
53
+ },
54
+ {
55
+ "type": "command",
56
+ "command": "python3 \"${HARNESS_ROOT}/hooks/dispatch.py\" PreToolUse pretooluse-write-header-guard",
57
+ "commandWindows": "py -3 \"${HARNESS_ROOT}/hooks/dispatch.py\" PreToolUse pretooluse-write-header-guard",
58
+ "timeout": 10,
59
+ "statusMessage": "Injecting authorship header if missing"
60
+ },
61
+ {
62
+ "type": "command",
63
+ "command": "python3 \"${HARNESS_ROOT}/hooks/dispatch.py\" PreToolUse pretooluse-write-plan-guard",
64
+ "commandWindows": "py -3 \"${HARNESS_ROOT}/hooks/dispatch.py\" PreToolUse pretooluse-write-plan-guard",
65
+ "timeout": 10,
66
+ "statusMessage": "Enforcing plans locality on the target path"
67
+ },
68
+ {
69
+ "type": "command",
70
+ "command": "python3 \"${HARNESS_ROOT}/hooks/dispatch.py\" PreToolUse pretooluse-dependency-guard",
71
+ "commandWindows": "py -3 \"${HARNESS_ROOT}/hooks/dispatch.py\" PreToolUse pretooluse-dependency-guard",
72
+ "timeout": 10,
73
+ "statusMessage": "Flagging unpinned or untrusted dependency additions"
74
+ },
75
+ {
76
+ "type": "command",
77
+ "command": "python3 \"${HARNESS_ROOT}/hooks/dispatch.py\" PreToolUse pretooluse-eval-guard",
78
+ "commandWindows": "py -3 \"${HARNESS_ROOT}/hooks/dispatch.py\" PreToolUse pretooluse-eval-guard",
79
+ "timeout": 10,
80
+ "statusMessage": "Flagging unsafe dynamic evaluation or deserialization"
81
+ }
82
+ ]
83
+ }
84
+ ],
85
+ "PreCompact": [
86
+ {
87
+ "matcher": "manual|auto",
88
+ "hooks": [
89
+ {
90
+ "type": "command",
91
+ "command": "python3 \"${HARNESS_ROOT}/hooks/dispatch.py\" PreCompact precompact",
92
+ "commandWindows": "py -3 \"${HARNESS_ROOT}/hooks/dispatch.py\" PreCompact precompact",
93
+ "timeout": 30,
94
+ "statusMessage": "Externalizing state before context compression"
95
+ }
96
+ ]
97
+ }
98
+ ],
99
+ "PostCompact": [
100
+ {
101
+ "matcher": "manual|auto",
102
+ "hooks": [
103
+ {
104
+ "type": "command",
105
+ "command": "python3 \"${HARNESS_ROOT}/hooks/dispatch.py\" PostCompact postcompact",
106
+ "commandWindows": "py -3 \"${HARNESS_ROOT}/hooks/dispatch.py\" PostCompact postcompact",
107
+ "timeout": 30,
108
+ "statusMessage": "Restoring state from durable files after compaction"
109
+ }
110
+ ]
111
+ }
112
+ ],
113
+ "Stop": [
114
+ {
115
+ "hooks": [
116
+ {
117
+ "type": "command",
118
+ "command": "python3 \"${HARNESS_ROOT}/hooks/dispatch.py\" Stop stop",
119
+ "commandWindows": "py -3 \"${HARNESS_ROOT}/hooks/dispatch.py\" Stop stop",
120
+ "timeout": 60,
121
+ "statusMessage": "Finalizing session and externalizing state"
122
+ }
123
+ ]
124
+ }
125
+ ]
126
+ }
127
+ }
@@ -0,0 +1,23 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Uninstall logic for the codex 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 = "codex"
12
+
13
+
14
+ def uninstall(output_path: Path) -> None:
15
+ """Remove Apothem-managed Codex targets surgically.
16
+
17
+ AGENTS.md is a ``sentinel_merge`` anchor and hooks.json an operator-owned
18
+ ``write_text`` JSON target, so the shared driver strips only Apothem's
19
+ managed block / keys / hook handlers (operator prose and operator keys
20
+ survive) and backs each file up under the Apothem backup root — no whole-file
21
+ ``.bak`` sibling is left beside the operator's files.
22
+ """
23
+ 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 codex harness adapter."""
4
+
5
+ from __future__ import annotations
6
+
7
+ from apothem.harnesses._shared.wrapper_factories import make_update
8
+ from apothem.harnesses.codex.install import install
9
+
10
+ update = make_update(install)
@@ -0,0 +1,11 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Verify logic for the codex harness adapter."""
4
+
5
+ from __future__ import annotations
6
+
7
+ from apothem.harnesses._shared.wrapper_factories import make_verify_harness_root
8
+
9
+ _HARNESS_NAME: str = "codex"
10
+
11
+ verify = make_verify_harness_root(_HARNESS_NAME)
@@ -0,0 +1,79 @@
1
+ <!-- SPDX-License-Identifier: MIT -->
2
+
3
+ # Cursor Standard Convention Pin
4
+
5
+ ## Snapshot
6
+
7
+ - Snapshot date: 2026-06-25
8
+ - Snapshot note: live re-verification against `cursor.com/docs/context/rules` — the `.cursor/rules/*.mdc` rules surface, the frontmatter fields (`description` / `globs` / `alwaysApply`), and the `docs.cursor.com`→`cursor.com/docs` host move all confirmed current.
9
+ - Adapter source: `src/apothem/harnesses/cursor/`
10
+ - Evidence level: adapter-local projection; no vendor-native UI claim is made here.
11
+
12
+ ## Official Surface Refresh
13
+
14
+ - Refreshed live 2026-05-31 against the current Cursor documentation. The
15
+ authority host moved: `docs.cursor.com` now 308-redirects to `cursor.com/docs`.
16
+ No immutable version pin is exposed (mutable docs site), so every captured
17
+ convention carries a no-immutable-source exception.
18
+ - Confirmed live: rules surface `.cursor/rules/*.mdc` (frontmatter
19
+ `description`/`globs`/`alwaysApply`); MCP via `~/.cursor/mcp.json` plus
20
+ `.cursor/mcp.json` (operator-owned; the adapter recognizes it but does not
21
+ author entries).
22
+ - The vendor now documents a plugin mechanism (`.cursor-plugin/plugin.json`)
23
+ that can bundle agents, commands, skills, and hooks. The adapter delivers only
24
+ the project rules file (`apothem-rules.mdc`) and authors none of those cohorts;
25
+ this rules-only posture is deliberate and the plugin-bundle delivery question
26
+ is a propagation write-planning concern, not part of this adapter.
27
+ - Settings (IDE-managed) and status-lines remain undocumented as file surfaces.
28
+
29
+ ## Web-Fetch / Browser-Retrieval Surface
30
+
31
+ - Capability: `web_fetch` = **partial**. The backing dimension for
32
+ `rules/source-accessibility.md` step 1 ("retrieve through the host's browser /
33
+ fetch capability").
34
+ - Vendor-confirmed PARTIAL: Cursor exposes `@Web` — a user-invoked
35
+ context-injection web search ("performs a live web search to retrieve
36
+ up-to-date information"), plus an "Always search the web" auto setting. It is a
37
+ context-injection symbol rather than a documented autonomous agent-loop fetch
38
+ tool, hence the `partial` subset boundary (user-invoked search yes; autonomous
39
+ fetch tool not documented).
40
+ - Evidence: vendor-doc-url <https://docs.cursor.com/context/@-symbols/@-web>;
41
+ snapshot-id living docs; snapshot-date 2026-06-21.
42
+
43
+ ## Recommended Postfix Rendering
44
+
45
+ - Status: supported as plain text.
46
+ - Mechanism: Apothem emits the literal ` (Recommended)` suffix in the option label. Cursor rule templates preserve that suffix as authored.
47
+ - 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`.
48
+
49
+ ## Long Context and Compaction
50
+
51
+ - Status: profile-managed.
52
+ - 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.
53
+ - 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`.
54
+
55
+ ## Large-Codebase Practice Projection
56
+
57
+ - Layered context: declared in `capabilities.yml` under `layered_context_surface`; no vendor-native hierarchy is claimed beyond the adapter's documented file/template surface.
58
+ - LSP symbol navigation: `tracked-gap` until a vendor-ratified plugin or tool surface is pinned.
59
+ - 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.
60
+
61
+ ## Plugin-alone Persistence
62
+
63
+ Cursor documents a vendor plugin mechanism (`.cursor-plugin/plugin.json` that can
64
+ bundle agents, commands, skills, and hooks), but **Apothem ships no Cursor
65
+ plugin bundle** — the adapter is project-scope rules-only, writing a single
66
+ merged MDC rules file at `<project>/.cursor/rules/apothem-rules.mdc` and authoring
67
+ no other cohort. There is no Apothem-distributable standalone bundle; every
68
+ artifact requires the full `apothem install --harness cursor --project <path>`
69
+ engine run.
70
+
71
+ | Artifact class | Persists standalone? | Mechanism / limit |
72
+ |---|---|---|
73
+ | Rules | No — requires `apothem install` | The merged `apothem-rules.mdc` (carrying the embedded behavioral mandates) is written only by the engine into the vendor-native `.cursor/rules/` directory. Nothing persists before that run. |
74
+ | Commands / Skills / Agents / Hooks | No — Apothem ships no bundle | Cursor's `.cursor-plugin/plugin.json` accepts these cohorts, but Apothem authors no Cursor plugin; the rules-only posture is deliberate. Bundling the cohort into a Cursor plugin is a documented future propagation-write-planning concern, not part of this adapter today. |
75
+ | MCP / Settings | No — operator-owned | `~/.cursor/mcp.json` / `.cursor/mcp.json` and IDE-managed settings are operator-owned; the adapter authors no entries. |
76
+
77
+ Platform note: the vendor plugin surface exists; the Apothem-distributable
78
+ plugin bundle does not yet. The merged rules file via `apothem install` is the
79
+ sole persistence surface for now.
@@ -0,0 +1,48 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Apothem harness adapter for cursor — project-scope install.
4
+
5
+ Materializes the apothem rules surface into the operator-supplied
6
+ project root at ``<project>/.cursor/rules/apothem-rules.mdc`` — the
7
+ canonical Cursor rules surface per
8
+ https://cursor.com/docs/context/rules. The legacy single-file
9
+ ``~/.cursorrules`` user-scope target is excluded because Apothem targets the
10
+ current project rules surface; Cursor does not offer a file-based user-global
11
+ rules surface.
12
+
13
+ The adapter opts into the project-scope contract via
14
+ ``requires_project = True``; the CLI rejects an install / update /
15
+ uninstall / verify invocation that omits ``--project <path>``. Delegates
16
+ install logic to :mod:`apothem.harnesses.cursor.install`, which consumes
17
+ the canonical propagation manifest at
18
+ ``src/apothem/lib/propagation-manifest.yaml``.
19
+ """
20
+
21
+ from __future__ import annotations
22
+
23
+ from pathlib import Path
24
+
25
+ from apothem.harnesses._shared.wrapper_factories import make_project_scope_adapter
26
+ from apothem.harnesses.cursor.install import install as _install
27
+ from apothem.harnesses.cursor.install import plan as _plan
28
+ from apothem.harnesses.cursor.uninstall import uninstall as _uninstall
29
+ from apothem.harnesses.cursor.update import update as _update
30
+ from apothem.harnesses.cursor.verify import verify as _verify
31
+
32
+ # Sentinel relative path used by ``output_path`` for display purposes
33
+ # only. The real target is resolved per-install via
34
+ # ``resolve_output_path(project)`` once the operator supplies
35
+ # ``--project <path>``.
36
+ _SENTINEL_RELATIVE: Path = Path(".cursor") / "rules" / "apothem-rules.mdc"
37
+
38
+ CursorAdapter = make_project_scope_adapter(
39
+ "cursor",
40
+ error_label="cursor",
41
+ relative_target=_SENTINEL_RELATIVE,
42
+ install_fn=_install,
43
+ plan_fn=_plan,
44
+ uninstall_fn=_uninstall,
45
+ update_fn=_update,
46
+ verify_fn=_verify,
47
+ class_name="CursorAdapter",
48
+ )