@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,42 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ # Per rules/agent-capability-discipline.md §1 / §3 / §7 and the matrix
4
+ # companion §3. Cursor ratifies MCP via ~/.cursor/mcp.json (user-scope)
5
+ # plus project-level .cursor/mcp.json; rules surface as MDC files under
6
+ # .cursor/rules/. The adapter delivers a single project rules file and
7
+ # does not dispatch sub-agents or author command/skill/hook cohorts;
8
+ # the Cursor plugin mechanism that could host those is operator-driven.
9
+
10
+ mcp_servers:
11
+ - user-scope-~/.cursor/mcp.json
12
+ - project-scope-.cursor/mcp.json
13
+ # Operator-owned MCP surface: the adapter recognizes it but authors no entries.
14
+ mcp_servers_authored: false
15
+ sub_agent_dispatch: false
16
+ custom_command_support: "no"
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: ".cursor/rules MDC files"
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: Cursor exposes `@Web` — a
27
+ # user-invoked context-injection web search ("performs a live web search to
28
+ # retrieve up-to-date information"), plus an "Always search the web" auto setting.
29
+ # It is a context-injection symbol rather than a documented autonomous agent-loop
30
+ # fetch tool, hence the `partial` subset boundary (user-invoked search yes;
31
+ # autonomous fetch tool not documented). Evidence triple — vendor-doc-url:
32
+ # https://docs.cursor.com/context/@-symbols/@-web; snapshot-id: living docs;
33
+ # snapshot-date: 2026-06-21. Canonical evidence home is STANDARD-CONVENTION-PIN.md
34
+ # per rules/agent-capability-discipline-matrix.md §1A; pin refresh tracked as a
35
+ # follow-up.
36
+ web_fetch: "partial"
37
+ tool_surface_restrictions:
38
+ - secrets-paths
39
+ - destructive-shell-ops
40
+ - network-write-unsigned
41
+ system_prompt_template_path: "templates/apothem-rules.mdc"
42
+ agent_memory_surface: "n/a"
@@ -0,0 +1,38 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Install logic for the cursor harness adapter.
4
+
5
+ Materializes the apothem Cursor rules surface into the operator-supplied
6
+ project root. Cursor's canonical user-facing rules surface is the
7
+ project-scope MDC ruleset at ``<project>/.cursor/rules/*.mdc`` (per
8
+ https://cursor.com/docs/context/rules). The legacy single-file
9
+ ``~/.cursorrules`` target is excluded because Apothem targets the current
10
+ multi-file project rules surface.
11
+
12
+ The propagation contract is declared in the canonical manifest at
13
+ ``src/apothem/lib/propagation-manifest.yaml`` under the ``cursor`` key
14
+ (a single ``sentinel_merge`` operation targeting
15
+ ``${PROJECT_ROOT}/.cursor/rules/apothem-rules.mdc``) and applied by the
16
+ shared driver at ``apothem.harnesses._shared.install_driver``. The
17
+ ``${PROJECT_ROOT}`` placeholder is substituted with the operator-supplied
18
+ ``--project <path>`` value the CLI threads through; absence of
19
+ ``--project`` is rejected upstream at ``apothem.cli._materialize`` via the
20
+ ``requires_project`` opt-in.
21
+ """
22
+
23
+ from __future__ import annotations
24
+
25
+ from apothem.harnesses._shared.wrapper_factories import (
26
+ make_project_scope_install,
27
+ make_project_scope_plan,
28
+ )
29
+
30
+ # Manifest harness key for this adapter.
31
+ _HARNESS_NAME: str = "cursor"
32
+
33
+ install = make_project_scope_install(
34
+ _HARNESS_NAME,
35
+ error_message="cursor adapter requires --project <path>; CLI must thread it through",
36
+ )
37
+
38
+ plan = make_project_scope_plan(_HARNESS_NAME)
@@ -0,0 +1,40 @@
1
+ ---
2
+ description: "Apothem governance and convention surface for the Cursor harness — read every session to honour project-wide engineering discipline."
3
+ globs: "**/*"
4
+ alwaysApply: true
5
+ ---
6
+
7
+ <!-- SPDX-License-Identifier: MIT -->
8
+
9
+ # Apothem — Cursor Bootstrap
10
+
11
+ This file is materialised by `apothem install --harness cursor --project <path>` and lands at `<project>/.cursor/rules/apothem-rules.mdc`, the current Cursor project rules surface per https://cursor.com/docs/context/rules. The legacy single-file `.cursorrules` target is excluded because Apothem targets the multi-file project rules format; this MDC file is the authoritative Cursor-facing anchor.
12
+
13
+ ## What Apothem governs in this project
14
+
15
+ Apothem propagates a shared governance and convention surface across every supported AI harness in this project's host environment. Inside Cursor, the surface manifests as:
16
+
17
+ - **Rules** — always-on and path-filtered engineering rules. The full rule cohort lives at the apothem source repository under `src/apothem/rules/`; that cohort is the authoritative source. This MDC file is the Cursor-facing anchor; consult the apothem rules tree (or this project's mirrored documentation) for the per-rule body.
18
+ - **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; their per-harness reachability depends on Cursor's discovery contract.
19
+ - **Conformity matchers** — mechanical pre-emission checks that gate artifact emission. The apothem package installs them as the `apothem-conformity` console-script entry point and as PreToolUse hooks where the harness supports hooks.
20
+
21
+ ## Engineering disciplines in force
22
+
23
+ Apothem's foundational mandates apply uniformly across every harness, including Cursor:
24
+
25
+ - **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.
26
+ - **Authority hygiene.** Never fabricate identity, scope, security posture, or version-pin data. Surface ambiguity via the canonical structured-inquiry channel; the operator chooses.
27
+ - **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.
28
+ - **Production-ready discipline.** Every change ships in production-ready form — tests, docs, CHANGELOG entry, conformant commit message, CI green — in the same change-set.
29
+ - **Plain-language.** Codebase artefacts and user-facing prose read as natural domain language with zero trace of internal planning structure.
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
+ ## How to use this file
35
+
36
+ Cursor reads this MDC file at every session start because `alwaysApply: true` forces inclusion regardless of file-context heuristics. The `globs: "**/*"` field declares the rule applies project-wide. The body above is the high-density summary; the apothem rule cohort at the apothem source repository carries the full per-rule specifications.
37
+
38
+ ## Refreshing the file
39
+
40
+ Re-run `apothem install --harness cursor --project <this-project-root>` to overwrite the file with the latest apothem template. The operation is idempotent — re-running cleanly replaces the prior content. The companion `apothem uninstall --harness cursor --project <this-project-root>` removes the file with a timestamped backup. The `apothem verify --harness cursor --project <this-project-root>` command checks the file is present and non-empty.
@@ -0,0 +1,25 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Uninstall logic for the cursor 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 = "cursor"
12
+
13
+
14
+ def uninstall(output_path: Path, *, project: Path | None = None) -> None:
15
+ """Remove Apothem-managed Cursor targets surgically.
16
+
17
+ The apothem-rules ``sentinel_merge`` anchor is cleaned by the shared driver,
18
+ which strips only Apothem's managed block (operator prose survives), deletes
19
+ an Apothem-only file, and backs the file up under the Apothem backup root —
20
+ 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 cursor harness adapter."""
4
+
5
+ from __future__ import annotations
6
+
7
+ from apothem.harnesses._shared.wrapper_factories import make_update_project
8
+ from apothem.harnesses.cursor.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 cursor 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 = "cursor"
10
+
11
+ verify = make_verify_project(_HARNESS_NAME)
@@ -0,0 +1,102 @@
1
+ <!-- SPDX-License-Identifier: MIT -->
2
+
3
+ # Gemini CLI Standard Convention Pin
4
+
5
+ ## Snapshot
6
+
7
+ - Snapshot date: 2026-06-25
8
+ - Snapshot note: live re-verification against `github.com/google-gemini/gemini-cli` docs — hierarchical `GEMINI.md` context (`@file.md` imports), TOML custom commands (`~/.gemini/commands/*.toml`, required `prompt`), and built-in `web_fetch` / `google_web_search` all confirmed current; previous live-fetch 2026-06-21 / 2026-05-22
9
+ - Adapter source: `src/apothem/harnesses/gemini_cli/`.
10
+ - Upstream authority: `github.com/google-gemini/gemini-cli`, release `v0.44.1`
11
+ (2026-05-28), main HEAD commit `013914071c5412188661014f2670ce3818cb98c3`
12
+ (2026-05-29) — an immutable pin (one of the three GitHub-backed harnesses).
13
+ - Evidence level: official-source-backed for the surfaces below; no vendor-native UI claim is made here.
14
+ - Lifecycle: Google deprecates the standalone Gemini CLI for the AI Pro / AI
15
+ Ultra and free individual tiers on 2026-06-18, consolidating its developer
16
+ tooling under Antigravity CLI (binary `agy`; see the sibling `antigravity`
17
+ adapter and its pin, which materializes the successor). Gemini Code Assist
18
+ Standard / Enterprise and paid API keys keep the legacy CLI working, so this
19
+ adapter stays valid for those accounts; individual-tier users route to the
20
+ `antigravity` harness. Primary source: Google Developers Blog "Transitioning
21
+ Gemini CLI to Antigravity CLI" (I/O, 2026-05-19).
22
+
23
+ ## Native Surfaces (live-confirmed 2026-05-31)
24
+
25
+ - Project context anchor: `<project>/GEMINI.md` (and global `~/.gemini/GEMINI.md`);
26
+ the user-scope `~/.gemini/` tree is reserved for the antigravity adapter, so
27
+ this project-scope adapter materializes under `<project>/` exclusively.
28
+ - MCP: the `mcpServers` object in the operator-owned `settings.json` (user
29
+ `~/.gemini/settings.json`, project `.gemini/settings.json`). It supports stdio
30
+ (`command`/`args`) and HTTP (`url` for SSE, `httpUrl` for streamable). Apothem
31
+ names this surface but does not author MCP server entries; `settings.json` is
32
+ operator-owned and never written by the adapter.
33
+ - Hooks: a native `hooks` object in `settings.json` with per-event arrays and a
34
+ `matcher`, spanning eleven lifecycle events (SessionStart, SessionEnd,
35
+ BeforeAgent, AfterAgent, BeforeModel, AfterModel, BeforeToolSelection,
36
+ BeforeTool, AfterTool, PreCompress, Notification). Apothem keeps its hook
37
+ message-context prose as support material under `<project>/.gemini/apothem/`
38
+ and does not register native settings.json hooks (the operator owns
39
+ `settings.json`).
40
+ - Skills: four-tier discovery (built-in, extension, user `~/.gemini/skills/`,
41
+ workspace `.gemini/skills/`), each with an `~/.agents/skills/` / `.agents/skills/`
42
+ alias; `SKILL.md` entry. Apothem installs to the native `<project>/.gemini/skills/`.
43
+ - Commands: TOML custom commands (`.toml`, required `prompt`, optional
44
+ `description`) under `~/.gemini/commands/` (user) / `.gemini/commands/`
45
+ (project). Apothem converts its command cohort to this native TOML shape.
46
+ - Memory: the Auto Memory feature scans transcripts and writes candidate diffs
47
+ plus skill drafts to a review inbox (`/memory inbox`), with durable memory
48
+ stored in `GEMINI.md`. There is no `.gemini/memory/` directory; the adapter's
49
+ memory surface is the GEMINI.md context anchor.
50
+ - Web-fetch / browser-retrieval (`web_fetch` = **yes**): gemini-cli ships
51
+ built-in `web_fetch` and `google_web_search` tools — the backing dimension for
52
+ `rules/source-accessibility.md` step 1. Evidence: vendor-doc commit-pinned to
53
+ the same immutable snapshot as this adapter's pin (the `Upstream authority`
54
+ commit-sha above, `013914071c5412...`) at the repo-relative docs paths
55
+ `docs/tools/web-fetch.md` (+ `docs/tools/web-search.md`) under
56
+ `github.com/google-gemini/gemini-cli`; snapshot-date 2026-06-21.
57
+
58
+ ## Recommended Postfix Rendering
59
+
60
+ - Status: supported as plain text.
61
+ - Mechanism: Apothem emits the literal ` (Recommended)` suffix in the option label. Gemini CLI-facing templates preserve that suffix as authored.
62
+ - 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`.
63
+
64
+ ## Long Context and Compaction
65
+
66
+ - Status: profile-managed.
67
+ - 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.
68
+ - 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`.
69
+
70
+ ## Large-Codebase Practice Projection
71
+
72
+ - Layered context: declared in `capabilities.yml` under `layered_context_surface`; no vendor-native hierarchy is claimed beyond the adapter's documented file/template surface.
73
+ - LSP symbol navigation: `tracked-gap` until a vendor-ratified plugin or tool surface is pinned.
74
+ - 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.
75
+
76
+ ## Plugin-alone Persistence
77
+
78
+ Gemini CLI exposes a vendor extension surface (`gemini extensions install`). The
79
+ repo root IS the extension root: `gemini-extension.json` (manifest), `GEMINI.md`
80
+ (the manifest's `contextFileName` anchor), and a sibling `commands/apothem.toml`
81
+ the harness auto-discovers. Installing the extension *alone* — without running
82
+ `apothem install` — persists only what the vendor extension surface carries; the
83
+ full per-project cohort still requires the engine, which converts each Apothem
84
+ artifact to its Gemini-native shape.
85
+
86
+ | Artifact class | Persists extension-alone? | Mechanism / limit |
87
+ |---|---|---|
88
+ | Context anchor (rules-as-text) | Yes | `GEMINI.md` is loaded as session context by `contextFileName`; it now embeds the core engineering disciplines (Plans-Locality, Authority hygiene, Definitiveness, Production-ready, Plain-language) so those directives persist as context text. |
89
+ | Commands | Bootstrap only | The bundled `/apothem` command (`commands/apothem.toml`) auto-discovers and persists; it shells `npx @ahmed-g-gad/apothem`. The full converted command cohort (`.gemini/commands/*.toml`) requires `apothem install`. |
90
+ | Skills | No — requires `apothem install` | The extension manifest bundles no skills; `.gemini/skills/*/SKILL.md` lands only via the engine. |
91
+ | Rules (as native primitive) | No — platform limit | Gemini CLI has no native rules-directory primitive; Apothem rules persist as the `GEMINI.md` context text above, or as the engine-installed `.gemini/apothem/rules/` reference tree. |
92
+ | Hooks | No — platform limit | Native `settings.json` hooks are operator-owned; Apothem does not register them. Hook support material lands only via `apothem install` under `.gemini/apothem/hooks/`. |
93
+ | MCP servers | No — operator-owned | `mcpServers` lives in operator-owned `settings.json`; neither the extension manifest nor the engine authors MCP entries. |
94
+ | Tools / settings | No — operator-owned | `settings.json` is operator-owned and never written by the adapter or the extension. |
95
+
96
+ Bundle wiring status: the extension bundle persists the context anchor + the
97
+ `/apothem` bootstrap command. Embedding the full converted command, skill, and
98
+ agent cohort into the extension package is a documented future enhancement —
99
+ the conversion logic lives in the engine (`gemini_commands` / `gemini_agents`
100
+ modes in `propagation-manifest.yaml`), so a build step that pre-renders those
101
+ into a bundled `commands/` + `.gemini/` tree would let the extension carry the
102
+ cohort without a post-install engine run.
@@ -0,0 +1,52 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Apothem harness adapter for gemini-cli — project-scope install.
4
+
5
+ Materializes the apothem rules + convention cohort into the operator-
6
+ supplied project root at ``<project>/GEMINI.md`` (vendor-canonical
7
+ project-context anchor) plus
8
+ ``<project>/.gemini/{commands,skills,agents,apothem}/`` per the
9
+ gemini-cli configuration discovery contract at
10
+ https://google-gemini.github.io/gemini-cli/docs/.
11
+
12
+ The gemini-cli adapter is project-scope only: user-scope ``~/.gemini/``
13
+ is reserved for the antigravity adapter, which owns
14
+ ``~/.gemini/GEMINI.md`` as its anchor. The gemini-cli adapter avoids the
15
+ shared namespace by materialising under ``<project>/`` exclusively.
16
+
17
+ The adapter opts into the project-scope contract via
18
+ ``requires_project = True``; the CLI rejects an install / update /
19
+ uninstall / verify invocation that omits ``--project <path>``. Delegates
20
+ install logic to :mod:`apothem.harnesses.gemini_cli.install`, which
21
+ consumes the canonical propagation manifest at
22
+ ``src/apothem/lib/propagation-manifest.yaml``.
23
+ """
24
+
25
+ from __future__ import annotations
26
+
27
+ from pathlib import Path
28
+
29
+ from apothem.harnesses._shared.wrapper_factories import make_project_scope_adapter
30
+ from apothem.harnesses.gemini_cli.install import install as _install
31
+ from apothem.harnesses.gemini_cli.install import plan as _plan
32
+ from apothem.harnesses.gemini_cli.uninstall import uninstall as _uninstall
33
+ from apothem.harnesses.gemini_cli.update import update as _update
34
+ from apothem.harnesses.gemini_cli.verify import verify as _verify
35
+
36
+ # Sentinel relative path used by ``output_path`` for display purposes
37
+ # only. The real target is resolved per-install via
38
+ # ``resolve_output_path(project)`` once the operator supplies
39
+ # ``--project <path>``.
40
+ _SENTINEL_RELATIVE: Path = Path("GEMINI.md")
41
+
42
+ GeminiCliAdapter = make_project_scope_adapter(
43
+ "gemini-cli",
44
+ error_label="gemini_cli",
45
+ relative_target=_SENTINEL_RELATIVE,
46
+ install_fn=_install,
47
+ plan_fn=_plan,
48
+ uninstall_fn=_uninstall,
49
+ update_fn=_update,
50
+ verify_fn=_verify,
51
+ class_name="GeminiCliAdapter",
52
+ )
@@ -0,0 +1,43 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ # Per rules/agent-capability-discipline.md §1 / §3 / §7. The gemini_cli
4
+ # harness anchors project-scope GEMINI.md plus native .gemini/{commands,
5
+ # skills,agents}/ surfaces and .gemini/apothem/ support cohorts. MCP is
6
+ # natively supported via the mcpServers object in the operator-owned
7
+ # settings.json (confirmed live 2026-05-31); Apothem names the native
8
+ # surface but does not author MCP server entries. A native settings.json
9
+ # hooks surface (eleven lifecycle events) is documented in the convention
10
+ # pin; Apothem keeps hook prose as support material and does not register
11
+ # native settings.json hooks.
12
+
13
+ mcp_servers:
14
+ - settings.json-mcpServers-stdio-and-http-operator-owned
15
+ # Operator-owned MCP surface: the adapter recognizes it but authors no entries.
16
+ mcp_servers_authored: false
17
+ sub_agent_dispatch: true
18
+ custom_command_support: "yes"
19
+ recommended_postfix_rendering: "plain-text"
20
+ long_context_compaction: "profile-managed"
21
+ context_ignore_surface: "not-documented-in-current-pin"
22
+ layered_context_surface: "GEMINI.md plus .gemini native dirs and .gemini/apothem support"
23
+ lsp_symbol_navigation: "tracked-gap-no-adapter-owned-LSP-surface"
24
+ hook_learning_capture: "artifact-evolution-cycle"
25
+ standard_convention_pin: "STANDARD-CONVENTION-PIN.md"
26
+ # web-fetch / browser-retrieval surface — the backing capability dimension for
27
+ # rules/source-accessibility.md step 1 ("retrieve through the host's browser /
28
+ # fetch capability"). Vendor-confirmed: gemini-cli ships built-in `web_fetch`
29
+ # and `google_web_search` tools. Evidence triple — vendor-doc-url (commit-pinned
30
+ # to the same immutable snapshot as this adapter's pin):
31
+ # https://github.com/google-gemini/gemini-cli/blob/013914071c5412188661014f2670ce3818cb98c3/docs/tools/web-fetch.md
32
+ # (+ .../docs/tools/web-search.md); commit-sha:
33
+ # 013914071c5412188661014f2670ce3818cb98c3; snapshot-date: 2026-06-21.
34
+ # Canonical evidence home is STANDARD-CONVENTION-PIN.md per
35
+ # rules/agent-capability-discipline-matrix.md §1A; pin refresh tracked as a
36
+ # follow-up to add the web-fetch tool row to the pin's "Native Surfaces" block.
37
+ web_fetch: "yes"
38
+ tool_surface_restrictions:
39
+ - secrets-paths
40
+ - destructive-shell-ops
41
+ - network-write-unsigned
42
+ system_prompt_template_path: "templates/GEMINI.md"
43
+ agent_memory_surface: "GEMINI.md context files via the Auto Memory inbox (no dedicated memory directory)"
@@ -0,0 +1,43 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Install logic for the gemini-cli harness adapter.
4
+
5
+ Materializes the apothem convention surface into the operator-supplied
6
+ project root. The gemini-cli adapter is project-scope only: user-scope
7
+ ``~/.gemini/`` is reserved for the antigravity adapter, which owns
8
+ ``~/.gemini/GEMINI.md``. The gemini-cli adapter avoids the shared
9
+ namespace by materialising under ``<project>/`` exclusively.
10
+
11
+ Vendor-canonical project-context surface is ``<project>/GEMINI.md``
12
+ (analogous to project CLAUDE.md per
13
+ https://github.com/google-gemini/gemini-cli/blob/main/docs/reference/configuration.md
14
+ commit 792654c). The apothem convention cohort propagates under
15
+ ``<project>/.gemini/{commands,skills,agents}/`` plus
16
+ ``<project>/.gemini/apothem/`` for Markdown rules, templates, and hook
17
+ support material that Gemini CLI does not expose as a matching native
18
+ primitive.
19
+
20
+ The propagation contract is declared in the canonical manifest at
21
+ ``src/apothem/lib/propagation-manifest.yaml`` under the ``gemini_cli``
22
+ key 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 apothem.harnesses._shared.wrapper_factories import (
31
+ make_project_scope_install,
32
+ make_project_scope_plan,
33
+ )
34
+
35
+ # Manifest harness key for this adapter.
36
+ _HARNESS_NAME: str = "gemini_cli"
37
+
38
+ install = make_project_scope_install(
39
+ _HARNESS_NAME,
40
+ error_message="gemini_cli adapter requires --project <path>; CLI must thread it through",
41
+ )
42
+
43
+ plan = make_project_scope_plan(_HARNESS_NAME)
@@ -0,0 +1,38 @@
1
+ <!-- SPDX-License-Identifier: MIT -->
2
+
3
+ # Apothem — Gemini CLI Bootstrap
4
+
5
+ This file is materialised by `apothem install --harness gemini-cli --project <path>` and lands at `<project>/GEMINI.md`, the vendor-canonical project-context surface. Analogous to the project `CLAUDE.md` anchor, this file is read by `gemini-cli` at every session start in this project.
6
+
7
+ The gemini-cli adapter is project-scope only. User-scope `~/.gemini/` is already claimed by the antigravity adapter (which writes `~/.gemini/GEMINI.md` as its anchor); the gemini-cli adapter sidesteps the namespace collision by materialising under `<project>/` exclusively.
8
+
9
+ ## What Apothem governs in this project
10
+
11
+ Apothem propagates a shared governance and convention surface across every supported AI harness in this project's host environment. Inside `gemini-cli`, the surface manifests at the project root as native Gemini files plus an Apothem support tree:
12
+
13
+ - `<project>/GEMINI.md` — this file; the vendor-discovered project-context anchor.
14
+ - `<project>/.gemini/commands/*.toml` — Gemini slash commands converted from Apothem command prompts.
15
+ - `<project>/.gemini/agents/*.md` — local Gemini subagents normalized from Apothem agents.
16
+ - `<project>/.gemini/skills/*/SKILL.md` — Apothem skills where a skill surface is available.
17
+ - `<project>/.gemini/apothem/rules/` — Apothem Markdown rules used as reference material.
18
+ - `<project>/.gemini/apothem/templates/` — plan, report, and audit templates.
19
+ - `<project>/.gemini/apothem/hooks/` — hook messages and helper scripts retained as support material.
20
+
21
+ Do not treat `.gemini/apothem/` as a Gemini-native discovery namespace. It is
22
+ an Apothem-owned support tree referenced by this bootstrap, generated commands,
23
+ and installed skills.
24
+
25
+ ## Engineering disciplines in force
26
+
27
+ Apothem's foundational mandates apply uniformly across every harness, including gemini-cli:
28
+
29
+ - **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.
30
+ - **Authority hygiene.** Never fabricate identity, scope, security posture, or version-pin data. Surface ambiguity via the canonical structured-inquiry channel; the operator chooses.
31
+ - **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.
32
+ - **Production-ready discipline.** Every change ships in production-ready form — tests, docs, CHANGELOG entry, conformant commit message, CI green — in the same change-set.
33
+ - **Plain-language.** Codebase artefacts and user-facing prose read as natural domain language with zero trace of internal planning structure.
34
+ - **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.
35
+
36
+ ## Refreshing the file
37
+
38
+ Re-run `apothem install --harness gemini-cli --project <this-project-root>` to refresh this file, converted native entries, and support cohorts. The operation is idempotent and replaces Apothem-managed child entries while preserving unrelated operator files. The companion `apothem uninstall --harness gemini-cli --project <this-project-root>` renames the file to a timestamped backup; `apothem verify --harness gemini-cli --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 gemini-cli 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 = "gemini_cli"
12
+
13
+
14
+ def uninstall(output_path: Path, *, project: Path | None = None) -> None:
15
+ """Remove Apothem-managed Gemini CLI targets surgically.
16
+
17
+ The GEMINI.md ``sentinel_merge`` anchor is cleaned by the shared driver,
18
+ which strips only Apothem's managed block (operator prose survives), deletes
19
+ an Apothem-only file, and backs the file up under the Apothem backup root —
20
+ 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.parent,
25
+ )
@@ -0,0 +1,10 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Update logic for the gemini-cli harness adapter."""
4
+
5
+ from __future__ import annotations
6
+
7
+ from apothem.harnesses._shared.wrapper_factories import make_update_project
8
+ from apothem.harnesses.gemini_cli.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 gemini_cli 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 = "gemini_cli"
10
+
11
+ verify = make_verify_project(_HARNESS_NAME)
@@ -0,0 +1,84 @@
1
+ <!-- SPDX-License-Identifier: MIT -->
2
+
3
+ # GitHub Copilot Standard Convention Pin
4
+
5
+ ## Snapshot
6
+
7
+ - Snapshot date: 2026-06-25
8
+ - Snapshot note: live re-verification against `docs.github.com` — `.github/copilot-instructions.md` (repo-wide) + `*.instructions.md` (path-specific `applyTo`, both-used-together) + the Copilot CLI `web_fetch` tool all confirmed current.
9
+ - Adapter source: `src/apothem/harnesses/github_copilot/`
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 GitHub Copilot documentation
15
+ (`docs.github.com`). No authority-host move; no immutable version pin is
16
+ exposed (mutable docs site), so every captured convention carries a
17
+ no-immutable-source exception.
18
+ - Instruction surface is broader than the single repo-wide file: the vendor
19
+ recognizes `.github/copilot-instructions.md` (repo-wide),
20
+ `.github/instructions/*.instructions.md` (`applyTo` glob, optional
21
+ `excludeAgent`), `AGENTS.md` (nearest-in-tree wins), and root `CLAUDE.md` /
22
+ `GEMINI.md`. The adapter delivers only the repo-wide
23
+ `.github/copilot-instructions.md`; the other anchors are operator-owned and
24
+ read-only.
25
+ - The vendor now documents skills (`.github/skills/<name>/SKILL.md`), hooks
26
+ (`.github/hooks/*.json`), and CLI plugins (`plugin.json`). The adapter delivers
27
+ only the instructions file and authors none of those cohorts (deliberate
28
+ preserve-first posture).
29
+ - MCP is service / IDE state (`~/.copilot/mcp-config.json`), not a repo-writable
30
+ file, so `capabilities.yml` `mcp_servers` stays `[]`. There is no user-defined
31
+ custom-command creation surface (built-in slash commands only).
32
+
33
+ ## Web-Fetch / Browser-Retrieval Surface
34
+
35
+ - Capability: `web_fetch` = **yes**. The backing dimension for
36
+ `rules/source-accessibility.md` step 1 ("retrieve through the host's browser /
37
+ fetch capability").
38
+ - Vendor-confirmed: GitHub Copilot CLI (the agent-invocable surface, distinct
39
+ from the IDE extension) ships a `web_fetch` tool that retrieves URL content as
40
+ markdown, gated by `--allow-url` / `--deny-url` permissions. This row reflects
41
+ the Copilot CLI tool surface; the adapter itself materializes only
42
+ `.github/copilot-instructions.md` and authors no tool config.
43
+ - Evidence: vendor-doc-url
44
+ <https://docs.github.com/en/copilot/concepts/agents/copilot-cli/research>
45
+ (+ `.../how-tos/copilot-cli/set-up-copilot-cli/configure-copilot-cli`);
46
+ snapshot-id living docs; snapshot-date 2026-06-21.
47
+
48
+ ## Recommended Postfix Rendering
49
+
50
+ - Status: supported as plain text.
51
+ - Mechanism: Apothem emits the literal ` (Recommended)` suffix in the option label. GitHub Copilot instruction templates preserve that suffix as authored.
52
+ - 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`.
53
+
54
+ ## Long Context and Compaction
55
+
56
+ - Status: profile-managed.
57
+ - 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.
58
+ - 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`.
59
+
60
+ ## Large-Codebase Practice Projection
61
+
62
+ - Layered context: declared in `capabilities.yml` under `layered_context_surface`; no vendor-native hierarchy is claimed beyond the adapter's documented file/template surface.
63
+ - LSP symbol navigation: `tracked-gap` until a vendor-ratified plugin or tool surface is pinned.
64
+ - 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.
65
+
66
+ ## Plugin-alone Persistence
67
+
68
+ GitHub Copilot documents skills (`.github/skills/<name>/SKILL.md`), hooks
69
+ (`.github/hooks/*.json`), and CLI plugins (`plugin.json`), but **Apothem ships no
70
+ Copilot plugin bundle** — the adapter is project-scope instructions-only, writing
71
+ a single merged file at `<project>/.github/copilot-instructions.md` and authoring
72
+ no other cohort. There is no Apothem-distributable standalone bundle; every
73
+ artifact requires the full
74
+ `apothem install --harness github-copilot --project <path>` engine run.
75
+
76
+ | Artifact class | Persists standalone? | Mechanism / limit |
77
+ |---|---|---|
78
+ | Rules (instructions-as-text) | No — requires `apothem install` | The merged `copilot-instructions.md` (carrying the embedded behavioral mandates) is written only by the engine into the vendor-native `.github/` directory. Nothing persists before that run. |
79
+ | Commands / Skills / Agents / Hooks | No — Apothem ships no bundle | Copilot's `plugin.json` / `.github/skills/` / `.github/hooks/` accept these cohorts, but Apothem authors no Copilot plugin; the instructions-only posture is deliberate. There is no user-defined custom-command creation surface (built-in slash commands only). |
80
+ | MCP / Settings | No — service/IDE state | MCP lives in `~/.copilot/mcp-config.json` (IDE/service state, not a repo-writable file); the adapter authors no entries (`mcp_servers` stays `[]`). |
81
+
82
+ Platform note: the vendor plugin surface exists; the Apothem-distributable
83
+ plugin bundle does not. The merged instructions file via `apothem install` is the
84
+ sole persistence surface.
@@ -0,0 +1,47 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Apothem harness adapter for github-copilot — project-scope install.
4
+
5
+ Materializes the apothem Copilot instructions surface into the operator-
6
+ supplied project root at ``<project>/.github/copilot-instructions.md``,
7
+ the GA repo-wide instructions surface per
8
+ https://docs.github.com/en/copilot/customizing-copilot/adding-custom-instructions-for-github-copilot.
9
+ User-scope is unavailable — Copilot's user-level settings live in IDE
10
+ state (VS Code / JetBrains UI), not a file path the harness can write.
11
+
12
+ The adapter opts into the project-scope contract via
13
+ ``requires_project = True``; the CLI rejects an install / update /
14
+ uninstall / verify invocation that omits ``--project <path>``. Delegates
15
+ install logic to :mod:`apothem.harnesses.github_copilot.install`, which
16
+ consumes the canonical propagation manifest at
17
+ ``src/apothem/lib/propagation-manifest.yaml``.
18
+ """
19
+
20
+ from __future__ import annotations
21
+
22
+ from pathlib import Path
23
+
24
+ from apothem.harnesses._shared.wrapper_factories import make_project_scope_adapter
25
+ from apothem.harnesses.github_copilot.install import install as _install
26
+ from apothem.harnesses.github_copilot.install import plan as _plan
27
+ from apothem.harnesses.github_copilot.uninstall import uninstall as _uninstall
28
+ from apothem.harnesses.github_copilot.update import update as _update
29
+ from apothem.harnesses.github_copilot.verify import verify as _verify
30
+
31
+ # Sentinel relative path used by ``output_path`` for display purposes
32
+ # only. The real target is resolved per-install via
33
+ # ``resolve_output_path(project)`` once the operator supplies
34
+ # ``--project <path>``.
35
+ _SENTINEL_RELATIVE: Path = Path(".github") / "copilot-instructions.md"
36
+
37
+ GitHubCopilotAdapter = make_project_scope_adapter(
38
+ "github-copilot",
39
+ error_label="github_copilot",
40
+ relative_target=_SENTINEL_RELATIVE,
41
+ install_fn=_install,
42
+ plan_fn=_plan,
43
+ uninstall_fn=_uninstall,
44
+ update_fn=_update,
45
+ verify_fn=_verify,
46
+ class_name="GitHubCopilotAdapter",
47
+ )