@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,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
|
+
)
|