@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.
- package/CHANGELOG.md +60 -0
- package/LICENSE +21 -0
- package/LICENSES/MIT.txt +18 -0
- package/LICENSES/PSF-2.0.txt +47 -0
- package/README.md +549 -0
- package/bin/README.md +37 -0
- package/bin/apothem.mjs +78 -0
- package/package.json +75 -0
- package/pyproject.toml +347 -0
- package/src/apothem/README.md +52 -0
- package/src/apothem/__init__.py +66 -0
- package/src/apothem/__main__.py +28 -0
- package/src/apothem/_vendor/.keep +0 -0
- package/src/apothem/_vendor/__init__.py +25 -0
- package/src/apothem/_vendor/attr/__init__.py +104 -0
- package/src/apothem/_vendor/attr/__init__.pyi +389 -0
- package/src/apothem/_vendor/attr/_cmp.py +160 -0
- package/src/apothem/_vendor/attr/_cmp.pyi +13 -0
- package/src/apothem/_vendor/attr/_compat.py +99 -0
- package/src/apothem/_vendor/attr/_config.py +31 -0
- package/src/apothem/_vendor/attr/_funcs.py +497 -0
- package/src/apothem/_vendor/attr/_make.py +3406 -0
- package/src/apothem/_vendor/attr/_next_gen.py +674 -0
- package/src/apothem/_vendor/attr/_typing_compat.pyi +15 -0
- package/src/apothem/_vendor/attr/_version_info.py +89 -0
- package/src/apothem/_vendor/attr/_version_info.pyi +9 -0
- package/src/apothem/_vendor/attr/converters.py +162 -0
- package/src/apothem/_vendor/attr/converters.pyi +19 -0
- package/src/apothem/_vendor/attr/exceptions.py +95 -0
- package/src/apothem/_vendor/attr/exceptions.pyi +17 -0
- package/src/apothem/_vendor/attr/filters.py +72 -0
- package/src/apothem/_vendor/attr/filters.pyi +6 -0
- package/src/apothem/_vendor/attr/py.typed +0 -0
- package/src/apothem/_vendor/attr/setters.py +79 -0
- package/src/apothem/_vendor/attr/setters.pyi +20 -0
- package/src/apothem/_vendor/attr/validators.py +750 -0
- package/src/apothem/_vendor/attr/validators.pyi +140 -0
- package/src/apothem/_vendor/attr.LICENSE +21 -0
- package/src/apothem/_vendor/attrs/__init__.py +72 -0
- package/src/apothem/_vendor/attrs/__init__.pyi +314 -0
- package/src/apothem/_vendor/attrs/converters.py +3 -0
- package/src/apothem/_vendor/attrs/exceptions.py +3 -0
- package/src/apothem/_vendor/attrs/filters.py +3 -0
- package/src/apothem/_vendor/attrs/py.typed +0 -0
- package/src/apothem/_vendor/attrs/setters.py +3 -0
- package/src/apothem/_vendor/attrs/validators.py +3 -0
- package/src/apothem/_vendor/attrs.LICENSE +21 -0
- package/src/apothem/_vendor/jsonschema/__init__.py +120 -0
- package/src/apothem/_vendor/jsonschema/__main__.py +6 -0
- package/src/apothem/_vendor/jsonschema/_format.py +546 -0
- package/src/apothem/_vendor/jsonschema/_keywords.py +449 -0
- package/src/apothem/_vendor/jsonschema/_legacy_keywords.py +449 -0
- package/src/apothem/_vendor/jsonschema/_types.py +204 -0
- package/src/apothem/_vendor/jsonschema/_typing.py +29 -0
- package/src/apothem/_vendor/jsonschema/_utils.py +355 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/__init__.py +5 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/const_vs_enum.py +30 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/contains.py +28 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/import_benchmark.py +31 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/issue232/issue.json +2653 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/issue232.py +25 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/json_schema_test_suite.py +12 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/nested_schemas.py +56 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/subcomponents.py +42 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/unused_registry.py +35 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/useless_applicator_schemas.py +106 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/useless_keywords.py +32 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/validator_creation.py +14 -0
- package/src/apothem/_vendor/jsonschema/cli.py +292 -0
- package/src/apothem/_vendor/jsonschema/exceptions.py +490 -0
- package/src/apothem/_vendor/jsonschema/protocols.py +230 -0
- package/src/apothem/_vendor/jsonschema/validators.py +1410 -0
- package/src/apothem/_vendor/jsonschema.LICENSE +19 -0
- package/src/apothem/_vendor/jsonschema_specifications/__init__.py +12 -0
- package/src/apothem/_vendor/jsonschema_specifications/_core.py +38 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/metaschema.json +42 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/applicator +56 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/content +17 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/core +57 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/format +14 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/meta-data +37 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/validation +98 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/metaschema.json +58 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/applicator +48 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/content +17 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/core +51 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/format-annotation +14 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/format-assertion +14 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/meta-data +37 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/unevaluated +15 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/validation +98 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft3/metaschema.json +172 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft4/metaschema.json +149 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft6/metaschema.json +153 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft7/metaschema.json +166 -0
- package/src/apothem/_vendor/jsonschema_specifications.LICENSE +19 -0
- package/src/apothem/_vendor/referencing/__init__.py +7 -0
- package/src/apothem/_vendor/referencing/_attrs.py +31 -0
- package/src/apothem/_vendor/referencing/_attrs.pyi +21 -0
- package/src/apothem/_vendor/referencing/_core.py +739 -0
- package/src/apothem/_vendor/referencing/exceptions.py +165 -0
- package/src/apothem/_vendor/referencing/jsonschema.py +642 -0
- package/src/apothem/_vendor/referencing/py.typed +0 -0
- package/src/apothem/_vendor/referencing/retrieval.py +94 -0
- package/src/apothem/_vendor/referencing/typing.py +61 -0
- package/src/apothem/_vendor/referencing.LICENSE +19 -0
- package/src/apothem/_vendor/rpds/__init__.py +251 -0
- package/src/apothem/_vendor/typing_extensions.LICENSE +279 -0
- package/src/apothem/_vendor/typing_extensions.py +4317 -0
- package/src/apothem/_vendor/vendor.txt +22 -0
- package/src/apothem/_vendor/yaml/__init__.py +389 -0
- package/src/apothem/_vendor/yaml/composer.py +138 -0
- package/src/apothem/_vendor/yaml/constructor.py +748 -0
- package/src/apothem/_vendor/yaml/cyaml.py +100 -0
- package/src/apothem/_vendor/yaml/dumper.py +61 -0
- package/src/apothem/_vendor/yaml/emitter.py +1137 -0
- package/src/apothem/_vendor/yaml/error.py +74 -0
- package/src/apothem/_vendor/yaml/events.py +85 -0
- package/src/apothem/_vendor/yaml/loader.py +63 -0
- package/src/apothem/_vendor/yaml/nodes.py +48 -0
- package/src/apothem/_vendor/yaml/parser.py +588 -0
- package/src/apothem/_vendor/yaml/reader.py +185 -0
- package/src/apothem/_vendor/yaml/representer.py +388 -0
- package/src/apothem/_vendor/yaml/resolver.py +226 -0
- package/src/apothem/_vendor/yaml/scanner.py +1435 -0
- package/src/apothem/_vendor/yaml/serializer.py +110 -0
- package/src/apothem/_vendor/yaml/tokens.py +103 -0
- package/src/apothem/_vendor/yaml.LICENSE +20 -0
- package/src/apothem/agents/README.md +60 -0
- package/src/apothem/agents/codebase-explorer.md +91 -0
- package/src/apothem/agents/convention-auditor.md +93 -0
- package/src/apothem/agents/dependency-auditor.md +97 -0
- package/src/apothem/agents/fact-checker.md +84 -0
- package/src/apothem/agents/mcp-builder.md +86 -0
- package/src/apothem/agents/memory-auditor.md +93 -0
- package/src/apothem/agents/prompt-evaluator.md +87 -0
- package/src/apothem/agents/quality-gate.md +103 -0
- package/src/apothem/agents/refactor-surgeon.md +74 -0
- package/src/apothem/agents/research-scout.md +73 -0
- package/src/apothem/agents/security-scanner.md +83 -0
- package/src/apothem/agents/test-runner.md +84 -0
- package/src/apothem/audit/README.md +73 -0
- package/src/apothem/audit/_scan_lib.py +182 -0
- package/src/apothem/audit/analyze_graph.py +260 -0
- package/src/apothem/audit/build_capability_graph.py +607 -0
- package/src/apothem/audit/build_inventory.py +657 -0
- package/src/apothem/audit/build_plans_provenance.py +997 -0
- package/src/apothem/audit/check_links.py +389 -0
- package/src/apothem/audit/classify_artifacts.py +381 -0
- package/src/apothem/audit/deprecated-tokens.txt +10 -0
- package/src/apothem/audit/execute_plans_migration.py +491 -0
- package/src/apothem/audit/known-projects.txt +15 -0
- package/src/apothem/audit/render_capability_index.py +467 -0
- package/src/apothem/audit/render_inventory.py +405 -0
- package/src/apothem/audit/scan_ai_surfaces.py +1125 -0
- package/src/apothem/audit/scan_ai_surfaces_coarse.py +261 -0
- package/src/apothem/audit/scan_drift_features.py +143 -0
- package/src/apothem/audit/scan_frontmatter.py +293 -0
- package/src/apothem/audit/scan_header_coverage.py +1134 -0
- package/src/apothem/audit/scan_plan_leakage.py +540 -0
- package/src/apothem/audit/scan_plans_discipline.py +188 -0
- package/src/apothem/audit/scan_secrets_pii.py +245 -0
- package/src/apothem/audit/scan_stale_tokens.py +296 -0
- package/src/apothem/audit/synthesize_drift.py +205 -0
- package/src/apothem/benchmarks/README.md +33 -0
- package/src/apothem/benchmarks/__init__.py +3 -0
- package/src/apothem/benchmarks/bench_agents.py +63 -0
- package/src/apothem/benchmarks/bench_hooks.py +93 -0
- package/src/apothem/benchmarks/bench_install.py +58 -0
- package/src/apothem/benchmarks/bench_tests.py +93 -0
- package/src/apothem/benchmarks/bench_validate_ecosystem.py +84 -0
- package/src/apothem/cli/README.md +33 -0
- package/src/apothem/cli/__init__.py +229 -0
- package/src/apothem/cli/_cmd_completion.py +88 -0
- package/src/apothem/cli/_cmd_diff.py +181 -0
- package/src/apothem/cli/_cmd_doctor.py +143 -0
- package/src/apothem/cli/_cmd_harnesses.py +167 -0
- package/src/apothem/cli/_cmd_install.py +327 -0
- package/src/apothem/cli/_cmd_migrate_workspace.py +143 -0
- package/src/apothem/cli/_cmd_profile.py +341 -0
- package/src/apothem/cli/_cmd_status.py +180 -0
- package/src/apothem/cli/_cmd_uninstall.py +215 -0
- package/src/apothem/cli/_cmd_update.py +397 -0
- package/src/apothem/cli/_cmd_verify.py +194 -0
- package/src/apothem/cli/_common_flags.py +90 -0
- package/src/apothem/cli/_epilogs.py +296 -0
- package/src/apothem/cli/_helpers.py +857 -0
- package/src/apothem/cli/_json_formatter.py +21 -0
- package/src/apothem/cli/_materialize.py +376 -0
- package/src/apothem/cli/completions/apothem.bash +30 -0
- package/src/apothem/cli/completions/apothem.fish +19 -0
- package/src/apothem/cli/completions/apothem.ps1 +27 -0
- package/src/apothem/cli/completions/apothem.zsh +42 -0
- package/src/apothem/cli/reference_export.py +126 -0
- package/src/apothem/commands/README.md +125 -0
- package/src/apothem/commands/a11y-audit.md +203 -0
- package/src/apothem/commands/architecture-review.md +194 -0
- package/src/apothem/commands/audit.md +165 -0
- package/src/apothem/commands/code-audit.md +218 -0
- package/src/apothem/commands/code-review.md +193 -0
- package/src/apothem/commands/dependency-audit.md +209 -0
- package/src/apothem/commands/docs-review.md +199 -0
- package/src/apothem/commands/elevate.md +285 -0
- package/src/apothem/commands/eval.md +149 -0
- package/src/apothem/commands/fortress.md +172 -0
- package/src/apothem/commands/freshify.md +168 -0
- package/src/apothem/commands/github-deploy-fresh.md +178 -0
- package/src/apothem/commands/github-deploy-next.md +167 -0
- package/src/apothem/commands/perf-audit.md +198 -0
- package/src/apothem/commands/plan-amend.md +104 -0
- package/src/apothem/commands/plan-audit.md +127 -0
- package/src/apothem/commands/plan-design.md +257 -0
- package/src/apothem/commands/plan-execute.md +495 -0
- package/src/apothem/commands/plan-generate.md +351 -0
- package/src/apothem/commands/plan-review.md +555 -0
- package/src/apothem/commands/plan-spec.md +359 -0
- package/src/apothem/commands/plan-status.md +222 -0
- package/src/apothem/commands/plan.md +173 -0
- package/src/apothem/commands/projectify.md +142 -0
- package/src/apothem/commands/release-readiness.md +142 -0
- package/src/apothem/commands/research-analysis.md +241 -0
- package/src/apothem/commands/research-design.md +231 -0
- package/src/apothem/commands/research-disseminate.md +225 -0
- package/src/apothem/commands/research-experiment.md +232 -0
- package/src/apothem/commands/research-ideate.md +213 -0
- package/src/apothem/commands/research-paper.md +252 -0
- package/src/apothem/commands/research-proposal.md +220 -0
- package/src/apothem/commands/research-publish.md +255 -0
- package/src/apothem/commands/research-review.md +251 -0
- package/src/apothem/commands/research-sources.md +266 -0
- package/src/apothem/commands/research-spec.md +255 -0
- package/src/apothem/commands/research-synthesis.md +233 -0
- package/src/apothem/commands/research-theory.md +218 -0
- package/src/apothem/commands/research.md +181 -0
- package/src/apothem/commands/security-audit.md +196 -0
- package/src/apothem/commands/supply-chain-audit.md +192 -0
- package/src/apothem/commands/test-suite.md +146 -0
- package/src/apothem/commands/threat-model-audit.md +199 -0
- package/src/apothem/commands/ux-review.md +202 -0
- package/src/apothem/commands/workflow.md +162 -0
- package/src/apothem/conformity/README.md +173 -0
- package/src/apothem/conformity/__init__.py +1 -0
- package/src/apothem/conformity/_grep_base.py +93 -0
- package/src/apothem/conformity/agent_capability_grep.py +306 -0
- package/src/apothem/conformity/agents_md_coverage_grep.py +382 -0
- package/src/apothem/conformity/agnosticism_grep.py +311 -0
- package/src/apothem/conformity/always_on_budget_grep.py +318 -0
- package/src/apothem/conformity/bare_except_grep.py +115 -0
- package/src/apothem/conformity/binding_reciprocity_grep.py +151 -0
- package/src/apothem/conformity/brand_mark_grep.py +272 -0
- package/src/apothem/conformity/commented_out_code_grep.py +176 -0
- package/src/apothem/conformity/completion_claim_grep.py +169 -0
- package/src/apothem/conformity/conventional_commit_grep.py +319 -0
- package/src/apothem/conformity/copilot_instructions_presence_grep.py +324 -0
- package/src/apothem/conformity/cross_platform_matrix_grep.py +297 -0
- package/src/apothem/conformity/determinism_grep.py +306 -0
- package/src/apothem/conformity/diagram_staleness_grep.py +154 -0
- package/src/apothem/conformity/dynamism_grep.py +284 -0
- package/src/apothem/conformity/editorconfig_presence_grep.py +281 -0
- package/src/apothem/conformity/file_header_grep.py +502 -0
- package/src/apothem/conformity/freshness_token_grep.py +233 -0
- package/src/apothem/conformity/frontmatter_grep.py +274 -0
- package/src/apothem/conformity/frontmatter_value_grep.py +386 -0
- package/src/apothem/conformity/gate.py +1386 -0
- package/src/apothem/conformity/gitattributes_presence_grep.py +238 -0
- package/src/apothem/conformity/harden_runner_grep.py +320 -0
- package/src/apothem/conformity/hedging_grep.py +129 -0
- package/src/apothem/conformity/license_author_consistency_grep.py +204 -0
- package/src/apothem/conformity/link_check.py +327 -0
- package/src/apothem/conformity/magic_number_grep.py +182 -0
- package/src/apothem/conformity/multi_surface_coherence_grep.py +620 -0
- package/src/apothem/conformity/naming_grep.py +224 -0
- package/src/apothem/conformity/no_global_plans_grep.py +339 -0
- package/src/apothem/conformity/no_toplevel_docs_grep.py +120 -0
- package/src/apothem/conformity/oidc_trusted_publishing_grep.py +291 -0
- package/src/apothem/conformity/option_annotation_grep.py +352 -0
- package/src/apothem/conformity/orphan_output_grep.py +206 -0
- package/src/apothem/conformity/permissions_minimum_scope_grep.py +299 -0
- package/src/apothem/conformity/plain_language_grep.py +559 -0
- package/src/apothem/conformity/plan_next_step_consistency_grep.py +450 -0
- package/src/apothem/conformity/plan_suite_structure_grep.py +534 -0
- package/src/apothem/conformity/plans_discipline_language_grep.py +245 -0
- package/src/apothem/conformity/production_ready_pr_grep.py +200 -0
- package/src/apothem/conformity/recommend_next_step_grep.py +250 -0
- package/src/apothem/conformity/redundancy_grep.py +401 -0
- package/src/apothem/conformity/reference_token_grep.py +230 -0
- package/src/apothem/conformity/registry_capability_consistency_grep.py +368 -0
- package/src/apothem/conformity/secret_leak_grep.py +193 -0
- package/src/apothem/conformity/semver_stability_grep.py +358 -0
- package/src/apothem/conformity/smoke_install_grep.py +194 -0
- package/src/apothem/conformity/static_version_grep.py +284 -0
- package/src/apothem/conformity/token_efficiency_grep.py +185 -0
- package/src/apothem/conformity/unpinned_action_grep.py +115 -0
- package/src/apothem/conformity/user_confirm_grep.py +74 -0
- package/src/apothem/conformity/workflow_concurrency_grep.py +283 -0
- package/src/apothem/harnesses/README.md +63 -0
- package/src/apothem/harnesses/__init__.py +16 -0
- package/src/apothem/harnesses/_shared/README.md +36 -0
- package/src/apothem/harnesses/_shared/__init__.py +12 -0
- package/src/apothem/harnesses/_shared/install_driver.py +281 -0
- package/src/apothem/harnesses/_shared/install_driver_apply.py +612 -0
- package/src/apothem/harnesses/_shared/install_driver_backup.py +535 -0
- package/src/apothem/harnesses/_shared/install_driver_converters.py +310 -0
- package/src/apothem/harnesses/_shared/install_driver_lifecycle.py +495 -0
- package/src/apothem/harnesses/_shared/install_driver_materialize.py +675 -0
- package/src/apothem/harnesses/_shared/install_driver_merge.py +656 -0
- package/src/apothem/harnesses/_shared/install_driver_pathsafety.py +137 -0
- package/src/apothem/harnesses/_shared/install_driver_planvalidation.py +240 -0
- package/src/apothem/harnesses/_shared/install_driver_removal.py +366 -0
- package/src/apothem/harnesses/_shared/install_driver_treeops.py +248 -0
- package/src/apothem/harnesses/_shared/install_driver_types.py +330 -0
- package/src/apothem/harnesses/_shared/wrapper_factories.py +448 -0
- package/src/apothem/harnesses/antigravity/STANDARD-CONVENTION-PIN.md +91 -0
- package/src/apothem/harnesses/antigravity/__init__.py +70 -0
- package/src/apothem/harnesses/antigravity/capabilities.yml +40 -0
- package/src/apothem/harnesses/antigravity/install.py +63 -0
- package/src/apothem/harnesses/antigravity/templates/GEMINI.md +40 -0
- package/src/apothem/harnesses/antigravity/templates/plugin.json +5 -0
- package/src/apothem/harnesses/antigravity/uninstall.py +22 -0
- package/src/apothem/harnesses/antigravity/update.py +10 -0
- package/src/apothem/harnesses/antigravity/verify.py +11 -0
- package/src/apothem/harnesses/claude_code/STANDARD-CONVENTION-PIN.md +65 -0
- package/src/apothem/harnesses/claude_code/__init__.py +107 -0
- package/src/apothem/harnesses/claude_code/capabilities.yml +42 -0
- package/src/apothem/harnesses/claude_code/install.py +147 -0
- package/src/apothem/harnesses/claude_code/templates/settings.json +351 -0
- package/src/apothem/harnesses/claude_code/uninstall.py +23 -0
- package/src/apothem/harnesses/claude_code/update.py +10 -0
- package/src/apothem/harnesses/claude_code/verify.py +11 -0
- package/src/apothem/harnesses/codebuddy/STANDARD-CONVENTION-PIN.md +74 -0
- package/src/apothem/harnesses/codebuddy/__init__.py +49 -0
- package/src/apothem/harnesses/codebuddy/capabilities.yml +34 -0
- package/src/apothem/harnesses/codebuddy/install.py +40 -0
- package/src/apothem/harnesses/codebuddy/templates/apothem-rules.md +37 -0
- package/src/apothem/harnesses/codebuddy/uninstall.py +25 -0
- package/src/apothem/harnesses/codebuddy/update.py +10 -0
- package/src/apothem/harnesses/codebuddy/verify.py +11 -0
- package/src/apothem/harnesses/codex/STANDARD-CONVENTION-PIN.md +79 -0
- package/src/apothem/harnesses/codex/__init__.py +72 -0
- package/src/apothem/harnesses/codex/capabilities.yml +40 -0
- package/src/apothem/harnesses/codex/install.py +69 -0
- package/src/apothem/harnesses/codex/templates/AGENTS.md +40 -0
- package/src/apothem/harnesses/codex/templates/hooks.json +127 -0
- package/src/apothem/harnesses/codex/uninstall.py +23 -0
- package/src/apothem/harnesses/codex/update.py +10 -0
- package/src/apothem/harnesses/codex/verify.py +11 -0
- package/src/apothem/harnesses/cursor/STANDARD-CONVENTION-PIN.md +79 -0
- package/src/apothem/harnesses/cursor/__init__.py +48 -0
- package/src/apothem/harnesses/cursor/capabilities.yml +42 -0
- package/src/apothem/harnesses/cursor/install.py +38 -0
- package/src/apothem/harnesses/cursor/templates/apothem-rules.mdc +40 -0
- package/src/apothem/harnesses/cursor/uninstall.py +25 -0
- package/src/apothem/harnesses/cursor/update.py +10 -0
- package/src/apothem/harnesses/cursor/verify.py +11 -0
- package/src/apothem/harnesses/gemini_cli/STANDARD-CONVENTION-PIN.md +102 -0
- package/src/apothem/harnesses/gemini_cli/__init__.py +52 -0
- package/src/apothem/harnesses/gemini_cli/capabilities.yml +43 -0
- package/src/apothem/harnesses/gemini_cli/install.py +43 -0
- package/src/apothem/harnesses/gemini_cli/templates/GEMINI.md +38 -0
- package/src/apothem/harnesses/gemini_cli/uninstall.py +25 -0
- package/src/apothem/harnesses/gemini_cli/update.py +10 -0
- package/src/apothem/harnesses/gemini_cli/verify.py +11 -0
- package/src/apothem/harnesses/github_copilot/STANDARD-CONVENTION-PIN.md +84 -0
- package/src/apothem/harnesses/github_copilot/__init__.py +47 -0
- package/src/apothem/harnesses/github_copilot/capabilities.yml +42 -0
- package/src/apothem/harnesses/github_copilot/install.py +40 -0
- package/src/apothem/harnesses/github_copilot/templates/copilot-instructions.md +33 -0
- package/src/apothem/harnesses/github_copilot/uninstall.py +25 -0
- package/src/apothem/harnesses/github_copilot/update.py +10 -0
- package/src/apothem/harnesses/github_copilot/verify.py +11 -0
- package/src/apothem/harnesses/glm/STANDARD-CONVENTION-PIN.md +77 -0
- package/src/apothem/harnesses/glm/__init__.py +56 -0
- package/src/apothem/harnesses/glm/capabilities.yml +33 -0
- package/src/apothem/harnesses/glm/install.py +45 -0
- package/src/apothem/harnesses/glm/templates/glm.toml +58 -0
- package/src/apothem/harnesses/glm/uninstall.py +25 -0
- package/src/apothem/harnesses/glm/update.py +10 -0
- package/src/apothem/harnesses/glm/verify.py +11 -0
- package/src/apothem/harnesses/hermes/STANDARD-CONVENTION-PIN.md +57 -0
- package/src/apothem/harnesses/hermes/__init__.py +33 -0
- package/src/apothem/harnesses/hermes/capabilities.yml +36 -0
- package/src/apothem/harnesses/hermes/install.py +17 -0
- package/src/apothem/harnesses/hermes/materializer.py +35 -0
- package/src/apothem/harnesses/hermes/uninstall.py +33 -0
- package/src/apothem/harnesses/hermes/update.py +10 -0
- package/src/apothem/harnesses/hermes/verify.py +11 -0
- package/src/apothem/harnesses/kimi_code/STANDARD-CONVENTION-PIN.md +128 -0
- package/src/apothem/harnesses/kimi_code/__init__.py +59 -0
- package/src/apothem/harnesses/kimi_code/capabilities.yml +40 -0
- package/src/apothem/harnesses/kimi_code/install.py +42 -0
- package/src/apothem/harnesses/kimi_code/templates/AGENTS.md +43 -0
- package/src/apothem/harnesses/kimi_code/uninstall.py +27 -0
- package/src/apothem/harnesses/kimi_code/update.py +10 -0
- package/src/apothem/harnesses/kimi_code/verify.py +11 -0
- package/src/apothem/harnesses/kiro/STANDARD-CONVENTION-PIN.md +77 -0
- package/src/apothem/harnesses/kiro/__init__.py +49 -0
- package/src/apothem/harnesses/kiro/capabilities.yml +36 -0
- package/src/apothem/harnesses/kiro/install.py +39 -0
- package/src/apothem/harnesses/kiro/templates/apothem-rules.md +36 -0
- package/src/apothem/harnesses/kiro/uninstall.py +25 -0
- package/src/apothem/harnesses/kiro/update.py +10 -0
- package/src/apothem/harnesses/kiro/verify.py +11 -0
- package/src/apothem/harnesses/open_claw/STANDARD-CONVENTION-PIN.md +62 -0
- package/src/apothem/harnesses/open_claw/__init__.py +35 -0
- package/src/apothem/harnesses/open_claw/capabilities.yml +35 -0
- package/src/apothem/harnesses/open_claw/install.py +17 -0
- package/src/apothem/harnesses/open_claw/materializer.py +36 -0
- package/src/apothem/harnesses/open_claw/uninstall.py +32 -0
- package/src/apothem/harnesses/open_claw/update.py +10 -0
- package/src/apothem/harnesses/open_claw/verify.py +11 -0
- package/src/apothem/harnesses/opencode/STANDARD-CONVENTION-PIN.md +76 -0
- package/src/apothem/harnesses/opencode/__init__.py +35 -0
- package/src/apothem/harnesses/opencode/capabilities.yml +43 -0
- package/src/apothem/harnesses/opencode/install.py +17 -0
- package/src/apothem/harnesses/opencode/materializer.py +31 -0
- package/src/apothem/harnesses/opencode/uninstall.py +34 -0
- package/src/apothem/harnesses/opencode/update.py +10 -0
- package/src/apothem/harnesses/opencode/verify.py +11 -0
- package/src/apothem/harnesses/qwen_code/STANDARD-CONVENTION-PIN.md +87 -0
- package/src/apothem/harnesses/qwen_code/__init__.py +37 -0
- package/src/apothem/harnesses/qwen_code/capabilities.yml +43 -0
- package/src/apothem/harnesses/qwen_code/install.py +19 -0
- package/src/apothem/harnesses/qwen_code/materializer.py +174 -0
- package/src/apothem/harnesses/qwen_code/templates/QWEN.md +30 -0
- package/src/apothem/harnesses/qwen_code/uninstall.py +34 -0
- package/src/apothem/harnesses/qwen_code/update.py +10 -0
- package/src/apothem/harnesses/qwen_code/verify.py +11 -0
- package/src/apothem/harnesses/trae/STANDARD-CONVENTION-PIN.md +70 -0
- package/src/apothem/harnesses/trae/__init__.py +49 -0
- package/src/apothem/harnesses/trae/capabilities.yml +34 -0
- package/src/apothem/harnesses/trae/install.py +38 -0
- package/src/apothem/harnesses/trae/templates/apothem-rules.md +37 -0
- package/src/apothem/harnesses/trae/uninstall.py +25 -0
- package/src/apothem/harnesses/trae/update.py +10 -0
- package/src/apothem/harnesses/trae/verify.py +11 -0
- package/src/apothem/harnesses/windsurf/STANDARD-CONVENTION-PIN.md +91 -0
- package/src/apothem/harnesses/windsurf/__init__.py +52 -0
- package/src/apothem/harnesses/windsurf/capabilities.yml +40 -0
- package/src/apothem/harnesses/windsurf/install.py +41 -0
- package/src/apothem/harnesses/windsurf/templates/apothem-rules.md +37 -0
- package/src/apothem/harnesses/windsurf/uninstall.py +25 -0
- package/src/apothem/harnesses/windsurf/update.py +10 -0
- package/src/apothem/harnesses/windsurf/verify.py +11 -0
- package/src/apothem/harnesses/zed/STANDARD-CONVENTION-PIN.md +92 -0
- package/src/apothem/harnesses/zed/__init__.py +57 -0
- package/src/apothem/harnesses/zed/capabilities.yml +38 -0
- package/src/apothem/harnesses/zed/install.py +41 -0
- package/src/apothem/harnesses/zed/templates/apothem-rules.md +32 -0
- package/src/apothem/harnesses/zed/uninstall.py +28 -0
- package/src/apothem/harnesses/zed/update.py +10 -0
- package/src/apothem/harnesses/zed/verify.py +11 -0
- package/src/apothem/hooks/README.md +81 -0
- package/src/apothem/hooks/__init__.py +24 -0
- package/src/apothem/hooks/askuserquestion_validator.py +380 -0
- package/src/apothem/hooks/dispatch.py +296 -0
- package/src/apothem/hooks/emit_hook_context.py +444 -0
- package/src/apothem/hooks/hooks.json +318 -0
- package/src/apothem/hooks/lib/README.md +39 -0
- package/src/apothem/hooks/lib/__init__.py +18 -0
- package/src/apothem/hooks/lib/bootstrap.ps1 +129 -0
- package/src/apothem/hooks/lib/bootstrap.sh +103 -0
- package/src/apothem/hooks/lib/events.py +51 -0
- package/src/apothem/hooks/lib/find-pwsh.ps1 +78 -0
- package/src/apothem/hooks/lib/find-pwsh.sh +76 -0
- package/src/apothem/hooks/lib/find-python.ps1 +63 -0
- package/src/apothem/hooks/lib/find-python.sh +97 -0
- package/src/apothem/hooks/lib/log.py +43 -0
- package/src/apothem/hooks/lib/resolve_root.py +264 -0
- package/src/apothem/hooks/messages/postcompact.md +14 -0
- package/src/apothem/hooks/messages/posttooluse-proactive-compaction.md +46 -0
- package/src/apothem/hooks/messages/precompact.md +14 -0
- package/src/apothem/hooks/messages/pretooluse-askuserquestion-recommended.md +65 -0
- package/src/apothem/hooks/messages/pretooluse-bash-plan-guard.md +97 -0
- package/src/apothem/hooks/messages/pretooluse-bash.md +39 -0
- package/src/apothem/hooks/messages/pretooluse-conformity.md +70 -0
- package/src/apothem/hooks/messages/pretooluse-dependency-guard.md +21 -0
- package/src/apothem/hooks/messages/pretooluse-edit-header-guard.md +61 -0
- package/src/apothem/hooks/messages/pretooluse-edit.md +21 -0
- package/src/apothem/hooks/messages/pretooluse-eval-guard.md +39 -0
- package/src/apothem/hooks/messages/pretooluse-notebookedit.md +11 -0
- package/src/apothem/hooks/messages/pretooluse-write-header-guard.md +45 -0
- package/src/apothem/hooks/messages/pretooluse-write-plan-guard.md +72 -0
- package/src/apothem/hooks/messages/pretooluse-write.md +21 -0
- package/src/apothem/hooks/messages/sessionstart.md +15 -0
- package/src/apothem/hooks/messages/stop.md +27 -0
- package/src/apothem/hooks/proactive_compaction_tracker.py +327 -0
- package/src/apothem/hooks/session_start_bootstrap.py +472 -0
- package/src/apothem/lib/README.md +42 -0
- package/src/apothem/lib/__init__.py +13 -0
- package/src/apothem/lib/atomic_io.py +189 -0
- package/src/apothem/lib/auditor.py +687 -0
- package/src/apothem/lib/clean_slate.py +396 -0
- package/src/apothem/lib/contexts.py +352 -0
- package/src/apothem/lib/data_home.py +255 -0
- package/src/apothem/lib/frontmatter.py +101 -0
- package/src/apothem/lib/harness_materializer.py +213 -0
- package/src/apothem/lib/harness_protocol.py +59 -0
- package/src/apothem/lib/harness_registry.py +282 -0
- package/src/apothem/lib/harness_registry_data.py +843 -0
- package/src/apothem/lib/install_ledger.py +347 -0
- package/src/apothem/lib/learning.py +540 -0
- package/src/apothem/lib/memory.py +347 -0
- package/src/apothem/lib/parallel_sweep.py +234 -0
- package/src/apothem/lib/plan_tiers.py +200 -0
- package/src/apothem/lib/plugin_bootstrap.py +132 -0
- package/src/apothem/lib/plugin_tree.py +599 -0
- package/src/apothem/lib/profile.py +755 -0
- package/src/apothem/lib/profile_projection.py +198 -0
- package/src/apothem/lib/propagation-manifest.yaml +878 -0
- package/src/apothem/lib/propagation.py +220 -0
- package/src/apothem/lib/python_resolver.py +189 -0
- package/src/apothem/lib/reporter.py +62 -0
- package/src/apothem/lib/workspace_migration.py +323 -0
- package/src/apothem/output-styles/README.md +41 -0
- package/src/apothem/output-styles/concise-engineer.md +49 -0
- package/src/apothem/output-styles/default-architect.md +52 -0
- package/src/apothem/output-styles/default.md +113 -0
- package/src/apothem/output-styles/forensic-auditor.md +63 -0
- package/src/apothem/py.typed +0 -0
- package/src/apothem/rules/README.md +121 -0
- package/src/apothem/rules/agent-capability-discipline-matrix.md +89 -0
- package/src/apothem/rules/agent-capability-discipline.md +78 -0
- package/src/apothem/rules/agent-orchestration-patterns.md +144 -0
- package/src/apothem/rules/agent-orchestration.md +65 -0
- package/src/apothem/rules/agents-md-convention.md +86 -0
- package/src/apothem/rules/agile-sprints-elements.md +135 -0
- package/src/apothem/rules/agile-sprints.md +64 -0
- package/src/apothem/rules/agnostic-posture-checklist.md +47 -0
- package/src/apothem/rules/agnostic-posture.md +48 -0
- package/src/apothem/rules/authoritative-referencing-quotation.md +50 -0
- package/src/apothem/rules/authoritative-referencing.md +66 -0
- package/src/apothem/rules/authority-inquiry-categories.md +58 -0
- package/src/apothem/rules/authority-inquiry.md +54 -0
- package/src/apothem/rules/auto-memory-topic-files.md +86 -0
- package/src/apothem/rules/auto-memory.md +67 -0
- package/src/apothem/rules/bidirectional-binding.md +123 -0
- package/src/apothem/rules/canonical-layout-reporting-tiers.md +212 -0
- package/src/apothem/rules/canonical-layout.md +60 -0
- package/src/apothem/rules/clean-architecture-layers.md +186 -0
- package/src/apothem/rules/clean-room-generation-protocols.md +124 -0
- package/src/apothem/rules/clean-room-generation.md +59 -0
- package/src/apothem/rules/code-craft-conventions.md +101 -0
- package/src/apothem/rules/code-craft-markdown.md +138 -0
- package/src/apothem/rules/code-craft-python.md +154 -0
- package/src/apothem/rules/code-craft-shell.md +192 -0
- package/src/apothem/rules/cognitive-identity-techniques.md +180 -0
- package/src/apothem/rules/cognitive-identity.md +81 -0
- package/src/apothem/rules/context-management-budget.md +46 -0
- package/src/apothem/rules/context-management-protocol.md +161 -0
- package/src/apothem/rules/context-management-scratch.md +128 -0
- package/src/apothem/rules/context-management.md +85 -0
- package/src/apothem/rules/definitiveness-virtues.md +67 -0
- package/src/apothem/rules/definitiveness.md +58 -0
- package/src/apothem/rules/determinism.md +81 -0
- package/src/apothem/rules/disclosure-ledger-markers.md +58 -0
- package/src/apothem/rules/disclosure-ledger.md +52 -0
- package/src/apothem/rules/dynamism.md +38 -0
- package/src/apothem/rules/etc-extension.md +57 -0
- package/src/apothem/rules/expertise-posture-elements.md +68 -0
- package/src/apothem/rules/expertise-posture.md +54 -0
- package/src/apothem/rules/freshness-facade.md +64 -0
- package/src/apothem/rules/harness-adapter-shape-schemas.md +162 -0
- package/src/apothem/rules/harness-adapter-shape.md +42 -0
- package/src/apothem/rules/host-discovery-manifests.md +50 -0
- package/src/apothem/rules/host-discovery.md +56 -0
- package/src/apothem/rules/i18n-discipline-locale-cohorts.md +120 -0
- package/src/apothem/rules/i18n-discipline.md +70 -0
- package/src/apothem/rules/interactive-questions-canonical-shapes.md +590 -0
- package/src/apothem/rules/interactive-questions-detail.md +41 -0
- package/src/apothem/rules/interactive-questions-sweep-matchers.md +184 -0
- package/src/apothem/rules/interactive-questions.md +89 -0
- package/src/apothem/rules/large-file-generation.md +112 -0
- package/src/apothem/rules/large-file-reading.md +59 -0
- package/src/apothem/rules/living-docs.md +85 -0
- package/src/apothem/rules/multi-agent-workflow.md +57 -0
- package/src/apothem/rules/operational-mandates-expanded.md +78 -0
- package/src/apothem/rules/operational-mandates.md +88 -0
- package/src/apothem/rules/option-annotation-form.md +60 -0
- package/src/apothem/rules/option-annotation.md +45 -0
- package/src/apothem/rules/own-voice-reimplementation.md +86 -0
- package/src/apothem/rules/performance-discipline.md +91 -0
- package/src/apothem/rules/persistent-conventions-vigilance-checklist.md +54 -0
- package/src/apothem/rules/persistent-conventions-vigilance.md +61 -0
- package/src/apothem/rules/plain-language.md +56 -0
- package/src/apothem/rules/planning-techniques.md +130 -0
- package/src/apothem/rules/pre-emission-gate-bars.md +86 -0
- package/src/apothem/rules/pre-emission-gate.md +54 -0
- package/src/apothem/rules/production-ready-prs-surfaces.md +162 -0
- package/src/apothem/rules/production-ready-prs.md +83 -0
- package/src/apothem/rules/propagation.md +63 -0
- package/src/apothem/rules/recommend-next-step.md +106 -0
- package/src/apothem/rules/refactoring-discipline.md +76 -0
- package/src/apothem/rules/session-closure.md +44 -0
- package/src/apothem/rules/sota-elevation-exemplars.md +76 -0
- package/src/apothem/rules/sota-elevation.md +52 -0
- package/src/apothem/rules/source-accessibility.md +58 -0
- package/src/apothem/rules/surgical-manipulation.md +48 -0
- package/src/apothem/rules/systemic-participation-relations.md +108 -0
- package/src/apothem/rules/systemic-participation.md +70 -0
- package/src/apothem/rules/ten-dimension-check-dimensions.md +52 -0
- package/src/apothem/rules/ten-dimension-check.md +59 -0
- package/src/apothem/rules/token-budget-discipline.md +81 -0
- package/src/apothem/rules/token-efficiency-rewrite-protocol.md +79 -0
- package/src/apothem/rules/token-efficiency-rewrite.md +77 -0
- package/src/apothem/rules/tool-use-discipline.md +48 -0
- package/src/apothem/rules/visual-leverage.md +102 -0
- package/src/apothem/schemas/NOTICE.md +9 -0
- package/src/apothem/schemas/README.md +104 -0
- package/src/apothem/schemas/__init__.py +176 -0
- package/src/apothem/schemas/advisory-finding.schema.json +111 -0
- package/src/apothem/schemas/agent.schema.json +106 -0
- package/src/apothem/schemas/authorship-header.txt +1 -0
- package/src/apothem/schemas/cohort-manifest.yaml +248 -0
- package/src/apothem/schemas/cohort-metadata-vocabulary.yaml +168 -0
- package/src/apothem/schemas/cohort.schema.json +113 -0
- package/src/apothem/schemas/command.schema.json +68 -0
- package/src/apothem/schemas/compatibility-matrix.yaml +432 -0
- package/src/apothem/schemas/context-fragment.schema.json +64 -0
- package/src/apothem/schemas/freshness-token-denylist.txt +51 -0
- package/src/apothem/schemas/handoff-manifest.yaml +353 -0
- package/src/apothem/schemas/header-exceptions.txt +141 -0
- package/src/apothem/schemas/header-visibility.yaml +39 -0
- package/src/apothem/schemas/learning-signal.schema.json +46 -0
- package/src/apothem/schemas/memory-record.schema.json +61 -0
- package/src/apothem/schemas/output-style.schema.json +40 -0
- package/src/apothem/schemas/plan.schema.json +51 -0
- package/src/apothem/schemas/plugin.schema.json +83 -0
- package/src/apothem/schemas/profile.example.yaml +70 -0
- package/src/apothem/schemas/profile.minimal.yaml +6 -0
- package/src/apothem/schemas/profile.schema.json +396 -0
- package/src/apothem/schemas/reference-token-denylist.txt +25 -0
- package/src/apothem/schemas/skill.schema.json +75 -0
- package/src/apothem/skills/README.md +93 -0
- package/src/apothem/skills/dependency-upgrade/SKILL.md +105 -0
- package/src/apothem/skills/dev-toolkit/SKILL.md +120 -0
- package/src/apothem/skills/diagram-authoring/SKILL.md +113 -0
- package/src/apothem/skills/document-authoring/SKILL.md +118 -0
- package/src/apothem/skills/ecosystem-audit/SKILL.md +108 -0
- package/src/apothem/skills/ecosystem-audit/references/audit-fortress.md +85 -0
- package/src/apothem/skills/ecosystem-audit/references/procedure.md +162 -0
- package/src/apothem/skills/eval-harness/SKILL.md +88 -0
- package/src/apothem/skills/incident-runbook/SKILL.md +92 -0
- package/src/apothem/skills/multi-source-research/SKILL.md +90 -0
- package/src/apothem/skills/plan-suite/SKILL.md +118 -0
- package/src/apothem/skills/plan-suite/master_template.md +1324 -0
- package/src/apothem/skills/projectify/SKILL.md +117 -0
- package/src/apothem/skills/prompt-engineering/SKILL.md +122 -0
- package/src/apothem/skills/refactor-extract/SKILL.md +85 -0
- package/src/apothem/skills/research-suite/SKILL.md +170 -0
- package/src/apothem/skills/research-suite/references/directory-structure.md +47 -0
- package/src/apothem/skills/research-suite/references/lifecycle.md +67 -0
- package/src/apothem/skills/research-suite/references/principal-investigator-framework.md +37 -0
- package/src/apothem/skills/research-suite/references/rigor-mandates.md +30 -0
- package/src/apothem/skills/research-suite/research_template.md +476 -0
- package/src/apothem/skills/secret-rotation/SKILL.md +87 -0
- package/src/apothem/skills/source-synthesis/SKILL.md +92 -0
- package/src/apothem/skills/surgical-guard/SKILL.md +118 -0
- package/src/apothem/skills/test-authoring/SKILL.md +85 -0
- package/src/apothem/skills/vuln-triage/SKILL.md +91 -0
- package/src/apothem/skills/workflow/SKILL.md +139 -0
- package/src/apothem/statuslines/README.md +26 -0
- package/src/apothem/statuslines/__init__.py +20 -0
- package/src/apothem/statuslines/conformity.json +5 -0
- package/src/apothem/statuslines/render.py +334 -0
- package/src/apothem/statuslines/statusline.md +50 -0
- package/src/apothem/templates/README.md +43 -0
- package/src/apothem/templates/agents-md-template.md +80 -0
- package/src/apothem/templates/consideration-log.md +39 -0
- package/src/apothem/templates/expertise-gap-log.md +56 -0
- package/src/apothem/templates/master-index-template.md +93 -0
- package/src/apothem/templates/potency-map.md +53 -0
- package/src/apothem/templates/preservation-audit.md +60 -0
- package/src/apothem/templates/question-resolution-audit.md +52 -0
- 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
|
+
)
|