@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,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
trigger: always_on
|
|
3
|
+
description: "Apothem governance and convention surface for the Trae harness — applied every session to honour project-wide engineering discipline."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- SPDX-License-Identifier: MIT -->
|
|
7
|
+
|
|
8
|
+
# Apothem — Trae Bootstrap
|
|
9
|
+
|
|
10
|
+
This file is materialised by `apothem install --harness trae --project <path>` and lands at `<project>/.trae/rules/apothem-rules.md`, a dedicated Apothem rules file inside the current Trae project rules directory per https://docs.trae.ai/ide/rules. It sits alongside the operator-owned `project_rules.md` and `user_rules.md` anchors and never clobbers them.
|
|
11
|
+
|
|
12
|
+
## What Apothem governs in this project
|
|
13
|
+
|
|
14
|
+
Apothem propagates a shared governance and convention surface across every supported AI harness in this project's host environment. Inside Trae, the surface manifests as this `always_on` rule file:
|
|
15
|
+
|
|
16
|
+
- **Rules** — engineering rules applied on every interaction (`trigger: always_on`). The full rule cohort lives at the apothem source repository under `src/apothem/rules/`; this Trae-facing anchor names the disciplines the operator may consult in detail.
|
|
17
|
+
- **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; Trae does not auto-discover them as separate surfaces, so they manifest here as referenced discipline.
|
|
18
|
+
- **MCP** — Trae's tool-server surface (`.trae/mcp.json`) is operator-authored, not apothem-managed.
|
|
19
|
+
- **Skills directory** — Trae's skill surface (`.trae/skills/`) is operator-authored, not apothem-managed.
|
|
20
|
+
|
|
21
|
+
## Engineering disciplines in force
|
|
22
|
+
|
|
23
|
+
Apothem's foundational mandates apply uniformly across every harness, including Trae:
|
|
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 through a question instead of inventing a plausible-looking value.
|
|
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
|
+
- **Human-only authorship.** Git commit messages, PR descriptions, branch names, and tag annotations carry human contributors only — never the underlying language model, runtime, IDE extension, or any automated tool as a co-author.
|
|
31
|
+
- **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.
|
|
32
|
+
- **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.
|
|
33
|
+
- **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.
|
|
34
|
+
|
|
35
|
+
## Refreshing the file
|
|
36
|
+
|
|
37
|
+
Re-run `apothem install --harness trae --project <this-project-root>` to overwrite this file with the latest apothem template. The operation is idempotent. `apothem uninstall --harness trae --project <this-project-root>` renames the file to a timestamped backup; `apothem verify --harness trae --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 trae 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 = "trae"
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def uninstall(output_path: Path, *, project: Path | None = None) -> None:
|
|
15
|
+
"""Remove Apothem-managed Trae 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 trae harness adapter."""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from apothem.harnesses._shared.wrapper_factories import make_update_project
|
|
8
|
+
from apothem.harnesses.trae.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 trae 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 = "trae"
|
|
10
|
+
|
|
11
|
+
verify = make_verify_project(_HARNESS_NAME)
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
<!-- SPDX-License-Identifier: MIT -->
|
|
2
|
+
|
|
3
|
+
# Windsurf Standard Convention Pin
|
|
4
|
+
|
|
5
|
+
## Snapshot
|
|
6
|
+
|
|
7
|
+
- Snapshot date: 2026-06-25
|
|
8
|
+
- Adapter source: `src/apothem/harnesses/windsurf/`
|
|
9
|
+
- Evidence level: adapter-local projection; no vendor-native UI claim is made here.
|
|
10
|
+
|
|
11
|
+
## Official Surface Refresh
|
|
12
|
+
|
|
13
|
+
- Refreshed live 2026-06-25 against the current vendor documentation
|
|
14
|
+
(`docs.devin.ai`). The windsurf harness rebranded to **Devin Desktop**
|
|
15
|
+
(OTA rollout 2026-06-02); the docs authority host moved from
|
|
16
|
+
`docs.windsurf.com` to the first-party Devin host `docs.devin.ai`. No
|
|
17
|
+
immutable version pin is exposed (mutable docs site), so every captured
|
|
18
|
+
convention carries a no-immutable-source exception. The harness slug stays
|
|
19
|
+
`windsurf`.
|
|
20
|
+
- **Write-target migration.** The vendor's current docs make
|
|
21
|
+
`<project>/.devin/rules/*.md` the **preferred** workspace-rules surface, which
|
|
22
|
+
**takes precedence** over the retained backward-compat fallback at
|
|
23
|
+
`<project>/.windsurf/rules/*.md`. The adapter migrated its canonical write
|
|
24
|
+
target to `<project>/.devin/rules/apothem-rules.md` so the merged rules file is
|
|
25
|
+
never silently shadowed by any `.devin/rules/` content the operator already
|
|
26
|
+
keeps. Evidence: vendor-doc-url
|
|
27
|
+
<https://docs.devin.ai/desktop/cascade/workspace-rules>; snapshot-id living
|
|
28
|
+
docs; snapshot-date 2026-06-25.
|
|
29
|
+
- Config-root correction: the global config root is `~/.codeium/windsurf/`
|
|
30
|
+
(global rules, MCP, skills, memories), not `~/.windsurf/`. The workspace
|
|
31
|
+
directory carries both the preferred `.devin/` tree (rules, skills) and the
|
|
32
|
+
retained `.windsurf/` fallback tree.
|
|
33
|
+
- MCP is now recognized: `~/.codeium/windsurf/mcp_config.json` (stdio / HTTP /
|
|
34
|
+
SSE / OAuth) is operator-owned; the adapter recognizes it but does not author
|
|
35
|
+
entries. `capabilities.yml` `mcp_servers` and the shared capability matrix were
|
|
36
|
+
refreshed accordingly.
|
|
37
|
+
- Workspace rules are a `*.md` directory (12k char per file), not a single file;
|
|
38
|
+
`layered_context_surface` names the preferred `.devin/rules/*.md` directory
|
|
39
|
+
with the `.windsurf/rules/` backward-compat fallback noted.
|
|
40
|
+
- Native skills are a documented vendor surface at
|
|
41
|
+
`.windsurf/skills/<name>/SKILL.md` (Markdown SKILL.md with YAML frontmatter
|
|
42
|
+
carrying `name` + `description`); workflows (`.windsurf/workflows/`) and a
|
|
43
|
+
`hooks.json` hook surface are also vendor-side. The adapter delivers only the
|
|
44
|
+
project rules file and authors none of those cohorts (deliberate rules-only
|
|
45
|
+
posture). The `hooks.json` surface is **unverified against current docs** —
|
|
46
|
+
it could not be confirmed in the current official `docs.devin.ai` documentation
|
|
47
|
+
and is carried as a tracked claim pending re-verification. Settings,
|
|
48
|
+
agent-dispatch, plugins, and status-lines remain undocumented as file surfaces.
|
|
49
|
+
- Web-fetch / browser-retrieval (`web_fetch` = **yes**): the Cascade agent
|
|
50
|
+
ships Web Search + URL Read (page fetch/chunk) tools, forced via `@web` and
|
|
51
|
+
`@docs`, gated by the "Enable Web Search" admin setting — the backing dimension
|
|
52
|
+
for `rules/source-accessibility.md` step 1. Evidence: vendor-doc-url
|
|
53
|
+
<https://docs.devin.ai/desktop/cascade/web-search>; snapshot-id living docs;
|
|
54
|
+
snapshot-date 2026-06-25.
|
|
55
|
+
|
|
56
|
+
## Recommended Postfix Rendering
|
|
57
|
+
|
|
58
|
+
- Status: supported as plain text.
|
|
59
|
+
- Mechanism: Apothem emits the literal ` (Recommended)` suffix in the option label. Windsurf rule templates preserve that suffix as authored.
|
|
60
|
+
- 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`.
|
|
61
|
+
|
|
62
|
+
## Long Context and Compaction
|
|
63
|
+
|
|
64
|
+
- Status: profile-managed.
|
|
65
|
+
- 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.
|
|
66
|
+
- 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`.
|
|
67
|
+
|
|
68
|
+
## Large-Codebase Practice Projection
|
|
69
|
+
|
|
70
|
+
- Layered context: declared in `capabilities.yml` under `layered_context_surface`; no vendor-native hierarchy is claimed beyond the adapter's documented file/template surface.
|
|
71
|
+
- LSP symbol navigation: `tracked-gap` until a vendor-ratified plugin or tool surface is pinned.
|
|
72
|
+
- 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.
|
|
73
|
+
|
|
74
|
+
## Plugin-alone Persistence
|
|
75
|
+
|
|
76
|
+
Windsurf (Devin Desktop) exposes **no vendor plugin or extension install surface**
|
|
77
|
+
that Apothem ships. The adapter is project-scope rules-only: it writes a single
|
|
78
|
+
merged rules file at `<project>/.devin/rules/apothem-rules.md` (the preferred
|
|
79
|
+
surface; `.windsurf/rules/` is the backward-compat fallback) and authors no other
|
|
80
|
+
cohort. There is no standalone-installable bundle; every artifact requires the
|
|
81
|
+
full `apothem install --harness windsurf --project <path>` engine run.
|
|
82
|
+
|
|
83
|
+
| Artifact class | Persists standalone? | Mechanism / limit |
|
|
84
|
+
|---|---|---|
|
|
85
|
+
| Rules | No — requires `apothem install` | The merged `apothem-rules.md` (carrying the embedded behavioral mandates) is written only by the engine into the preferred `.devin/rules/` directory (`.windsurf/rules/` backward-compat fallback). Nothing persists before that run. |
|
|
86
|
+
| Commands / Skills / Agents | No — platform limit | The vendor documents native skills (`.windsurf/skills/<name>/SKILL.md`), workflows, and an unverified `hooks.json` surface but no command/agent primitive Apothem targets; these cohorts are not materialized for this harness (deliberate rules-only posture). |
|
|
87
|
+
| Hooks / MCP / Settings | No — operator-owned / platform limit | `~/.codeium/windsurf/mcp_config.json` (MCP) is operator-owned and the `hooks.json` surface is unverified against current docs; the adapter authors no entries. |
|
|
88
|
+
|
|
89
|
+
Platform limit: Windsurf ships no marketplace/extension channel, so a
|
|
90
|
+
plugin-alone story does not exist — the merged rules file via `apothem install`
|
|
91
|
+
is the sole persistence surface.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
|
|
3
|
+
"""Apothem harness adapter for windsurf — project-scope install.
|
|
4
|
+
|
|
5
|
+
Materializes the apothem rules surface into the operator-supplied
|
|
6
|
+
project root at ``<project>/.devin/rules/apothem-rules.md`` — the
|
|
7
|
+
preferred workspace-rules surface per the vendor's current docs
|
|
8
|
+
(https://docs.devin.ai/desktop/cascade/workspace-rules). The windsurf
|
|
9
|
+
harness rebranded to Devin Desktop (OTA 2026-06-02); ``.devin/rules/``
|
|
10
|
+
now TAKES PRECEDENCE over the retained backward-compat fallback at
|
|
11
|
+
``.windsurf/rules/``, so Apothem writes the canonical target into
|
|
12
|
+
``.devin/rules/`` to avoid being silently shadowed. The harness slug stays
|
|
13
|
+
``windsurf``. The legacy single-file ``.windsurfrules`` user-scope target is
|
|
14
|
+
excluded; Windsurf / Devin workflows and memories are out of apothem's adapter
|
|
15
|
+
scope.
|
|
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.windsurf.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.windsurf.install import install as _install
|
|
31
|
+
from apothem.harnesses.windsurf.install import plan as _plan
|
|
32
|
+
from apothem.harnesses.windsurf.uninstall import uninstall as _uninstall
|
|
33
|
+
from apothem.harnesses.windsurf.update import update as _update
|
|
34
|
+
from apothem.harnesses.windsurf.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(".devin") / "rules" / "apothem-rules.md"
|
|
41
|
+
|
|
42
|
+
WindsurfAdapter = make_project_scope_adapter(
|
|
43
|
+
"windsurf",
|
|
44
|
+
error_label="windsurf",
|
|
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="WindsurfAdapter",
|
|
52
|
+
)
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
|
|
3
|
+
# Per rules/agent-capability-discipline.md §1 / §3 / §7. Windsurf
|
|
4
|
+
# ratifies MCP via ~/.codeium/windsurf/mcp_config.json (operator-owned;
|
|
5
|
+
# the adapter recognizes it but does not author entries). The windsurf
|
|
6
|
+
# harness rebranded to Devin Desktop (OTA 2026-06-02); the adapter delivers a
|
|
7
|
+
# single project rules file under the preferred .devin/rules/ surface (which
|
|
8
|
+
# takes precedence over the .windsurf/rules/ backward-compat fallback) and does
|
|
9
|
+
# not dispatch sub-agents or author workflow/skill/hook cohorts.
|
|
10
|
+
|
|
11
|
+
mcp_servers:
|
|
12
|
+
- user-scope-~/.codeium/windsurf/mcp_config.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: ".devin/rules/*.md directory (preferred; .windsurf/rules/ backward-compat fallback)"
|
|
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: Windsurf's Cascade agent ships Web Search
|
|
27
|
+
# + URL Read (page fetch/chunk) tools, forced via `@web` and `@docs`, gated by
|
|
28
|
+
# the "Enable Web Search" admin setting. Evidence triple — vendor-doc-url:
|
|
29
|
+
# https://docs.windsurf.com/windsurf/cascade/web-search (307-redirects to the
|
|
30
|
+
# Devin-branded first-party host docs.devin.ai post-acquisition; both first-party);
|
|
31
|
+
# snapshot-id: living docs; snapshot-date: 2026-06-21. Canonical evidence home is
|
|
32
|
+
# STANDARD-CONVENTION-PIN.md per rules/agent-capability-discipline-matrix.md §1A;
|
|
33
|
+
# pin refresh tracked as a follow-up.
|
|
34
|
+
web_fetch: "yes"
|
|
35
|
+
tool_surface_restrictions:
|
|
36
|
+
- secrets-paths
|
|
37
|
+
- destructive-shell-ops
|
|
38
|
+
- network-write-unsigned
|
|
39
|
+
system_prompt_template_path: "templates/apothem-rules.md"
|
|
40
|
+
agent_memory_surface: "n/a"
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
|
|
3
|
+
"""Install logic for the windsurf harness adapter.
|
|
4
|
+
|
|
5
|
+
Materializes the apothem Windsurf rules surface into the operator-supplied
|
|
6
|
+
project root. The windsurf harness rebranded to Devin Desktop (OTA
|
|
7
|
+
2026-06-02); its preferred workspace-rules surface is now the project-scope
|
|
8
|
+
multi-file format at ``<project>/.devin/rules/*.md`` (per
|
|
9
|
+
https://docs.devin.ai/desktop/cascade/workspace-rules), which TAKES
|
|
10
|
+
PRECEDENCE over the retained backward-compat fallback at
|
|
11
|
+
``<project>/.windsurf/rules/*.md``. Apothem writes the canonical target into
|
|
12
|
+
``.devin/rules/`` to avoid being silently shadowed. The harness slug stays
|
|
13
|
+
``windsurf``. The legacy single-file ``.windsurfrules`` target is excluded.
|
|
14
|
+
|
|
15
|
+
The propagation contract is declared in the canonical manifest at
|
|
16
|
+
``src/apothem/lib/propagation-manifest.yaml`` under the ``windsurf`` key
|
|
17
|
+
(a single ``sentinel_merge`` operation targeting
|
|
18
|
+
``${PROJECT_ROOT}/.devin/rules/apothem-rules.md``) and applied by the
|
|
19
|
+
shared driver at ``apothem.harnesses._shared.install_driver``. The
|
|
20
|
+
``${PROJECT_ROOT}`` placeholder is substituted with the operator-supplied
|
|
21
|
+
``--project <path>`` value the CLI threads through; absence of
|
|
22
|
+
``--project`` is rejected upstream at ``apothem.cli._materialize`` via the
|
|
23
|
+
``requires_project`` opt-in.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
from __future__ import annotations
|
|
27
|
+
|
|
28
|
+
from apothem.harnesses._shared.wrapper_factories import (
|
|
29
|
+
make_project_scope_install,
|
|
30
|
+
make_project_scope_plan,
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
# Manifest harness key for this adapter.
|
|
34
|
+
_HARNESS_NAME: str = "windsurf"
|
|
35
|
+
|
|
36
|
+
install = make_project_scope_install(
|
|
37
|
+
_HARNESS_NAME,
|
|
38
|
+
error_message="windsurf adapter requires --project <path>; CLI must thread it through",
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
plan = make_project_scope_plan(_HARNESS_NAME)
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
trigger: always_on
|
|
3
|
+
description: "Apothem governance and convention surface for the Windsurf harness — applied every session to honour project-wide engineering discipline."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- SPDX-License-Identifier: MIT -->
|
|
7
|
+
|
|
8
|
+
# Apothem — Windsurf Bootstrap
|
|
9
|
+
|
|
10
|
+
This file is materialised by `apothem install --harness windsurf --project <path>` and lands at `<project>/.devin/rules/apothem-rules.md`, the preferred workspace-rules surface per the vendor's current docs (https://docs.devin.ai/desktop/cascade/workspace-rules). The windsurf harness rebranded to Devin Desktop (OTA 2026-06-02); `.devin/rules/` now takes precedence over the retained backward-compat fallback at `.windsurf/rules/`. The legacy single-file `.windsurfrules` target is excluded because Apothem targets the multi-file project rules directory.
|
|
11
|
+
|
|
12
|
+
## What Apothem governs in this project
|
|
13
|
+
|
|
14
|
+
Apothem propagates a shared governance and convention surface across every supported AI harness in this project's host environment. Inside Windsurf, the surface manifests as this `always_on` rule file:
|
|
15
|
+
|
|
16
|
+
- **Rules** — engineering rules applied on every interaction (`trigger: always_on`). The full rule cohort lives at the apothem source repository under `src/apothem/rules/`; this Windsurf-facing anchor names the disciplines the operator may consult in detail.
|
|
17
|
+
- **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; Windsurf does not auto-discover them as separate surfaces, so they manifest here as referenced discipline.
|
|
18
|
+
- **Workflows** — Windsurf's slash-command surface (`.windsurf/workflows/`) is operator-authored, not apothem-managed.
|
|
19
|
+
- **Memories** — Windsurf's memory surface (`~/.codeium/windsurf/memories/`) is machine-local, not apothem-managed.
|
|
20
|
+
|
|
21
|
+
## Engineering disciplines in force
|
|
22
|
+
|
|
23
|
+
Apothem's foundational mandates apply uniformly across every harness, including Windsurf:
|
|
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 through a question instead of inventing a plausible-looking value.
|
|
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
|
+
- **Human-only authorship.** Git commit messages, PR descriptions, branch names, and tag annotations carry human contributors only — never the underlying language model, runtime, IDE extension, or any automated tool as a co-author.
|
|
31
|
+
- **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.
|
|
32
|
+
- **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.
|
|
33
|
+
- **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.
|
|
34
|
+
|
|
35
|
+
## Refreshing the file
|
|
36
|
+
|
|
37
|
+
Re-run `apothem install --harness windsurf --project <this-project-root>` to overwrite this file with the latest apothem template. The operation is idempotent. `apothem uninstall --harness windsurf --project <this-project-root>` renames the file to a timestamped backup; `apothem verify --harness windsurf --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 windsurf 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 = "windsurf"
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def uninstall(output_path: Path, *, project: Path | None = None) -> None:
|
|
15
|
+
"""Remove Apothem-managed Windsurf 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 windsurf harness adapter."""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from apothem.harnesses._shared.wrapper_factories import make_update_project
|
|
8
|
+
from apothem.harnesses.windsurf.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 windsurf 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 = "windsurf"
|
|
10
|
+
|
|
11
|
+
verify = make_verify_project(_HARNESS_NAME)
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
<!-- SPDX-License-Identifier: MIT -->
|
|
2
|
+
|
|
3
|
+
# Zed Standard Convention Pin
|
|
4
|
+
|
|
5
|
+
## Snapshot
|
|
6
|
+
|
|
7
|
+
- Snapshot date: 2026-06-25
|
|
8
|
+
- Adapter source: `src/apothem/harnesses/zed/`
|
|
9
|
+
- Evidence level: adapter-local projection; no vendor-native UI claim is made here.
|
|
10
|
+
- canonical-filename: `.rules`
|
|
11
|
+
- vendor-doc-url: https://zed.dev/docs/ai/instructions
|
|
12
|
+
|
|
13
|
+
## Official Surface Refresh
|
|
14
|
+
|
|
15
|
+
- Captured 2026-06-25 against the current Zed documentation (`zed.dev/docs`).
|
|
16
|
+
No authority-host move; no immutable version pin is exposed (mutable docs
|
|
17
|
+
site), so every captured convention carries a no-immutable-source exception.
|
|
18
|
+
- Zed reorganized its AI docs (Reusable Rules → Skills, Always-on Rules →
|
|
19
|
+
Instructions, ~v1.4.0): `zed.dev/docs/ai/instructions`, `.../ai/skills`, and
|
|
20
|
+
`.../ai/rules` now coexist (the `ai/rules` page still resolves and documents
|
|
21
|
+
`.rules` / `.cursorrules` / `CLAUDE.md` / `AGENTS.md`). The `.rules`
|
|
22
|
+
project-root file behavior is unchanged and current — Zed still auto-includes
|
|
23
|
+
the flat `.rules` file as agent instructions; only the docs were reorganized
|
|
24
|
+
(re-verified live 2026-06-25 against `zed.dev/docs`).
|
|
25
|
+
- Surface: Zed auto-includes a single flat project-root file `.rules` as agent
|
|
26
|
+
instructions (alongside the `AGENTS.md` / `CLAUDE.md` family). The format is
|
|
27
|
+
free-form plaintext / Markdown with no schema. The global surface is
|
|
28
|
+
`~/.config/zed/AGENTS.md`.
|
|
29
|
+
- DIVERGENCE (flat file, no dedicated apothem file): unlike the cohort's
|
|
30
|
+
rules-directory shape (a dedicated `apothem-rules.md` inside a `rules/`
|
|
31
|
+
directory), Zed reads one flat `.rules` file at the project root. The adapter
|
|
32
|
+
therefore writes `<project>/.rules` directly. There is no per-tool rules
|
|
33
|
+
subdirectory to scope the apothem block into.
|
|
34
|
+
- DIVERGENCE (backup-on-replace): because `.rules` is a single shared file an
|
|
35
|
+
operator may already maintain, the shared install driver backs up any
|
|
36
|
+
pre-existing `.rules` to a timestamped copy under `~/.apothem/backups/`
|
|
37
|
+
before replacement (and `apothem uninstall` renames the live file to a
|
|
38
|
+
timestamped sibling backup). The operator's prior instruction file is never
|
|
39
|
+
silently lost.
|
|
40
|
+
- MCP is recognized: Zed's context servers are configured via
|
|
41
|
+
`.zed/settings.json` (and global settings) under `context_servers`
|
|
42
|
+
(operator-owned). The adapter recognizes the surface but does not author
|
|
43
|
+
entries. `capabilities.yml` `mcp_servers` and the shared capability matrix
|
|
44
|
+
reflect this.
|
|
45
|
+
- The vendor documents threads, agent profiles, and MCP context servers as
|
|
46
|
+
separate surfaces. The adapter delivers only the project `.rules` file and
|
|
47
|
+
authors none of those cohorts (deliberate rules-only posture). Sub-agent
|
|
48
|
+
dispatch, hooks, skills, and output-styles remain undocumented as
|
|
49
|
+
adapter-owned file surfaces.
|
|
50
|
+
- Skills (`discovery-pending`): Zed now documents a native Skills surface at
|
|
51
|
+
`zed.dev/docs/ai/skills` (the Reusable Rules → Skills migration). The adapter
|
|
52
|
+
does not yet author skill files for this harness; the surface is recognized
|
|
53
|
+
but its adapter-owned shape is discovery-pending against a pinned snapshot.
|
|
54
|
+
No absence is asserted — the surface exists and awaits a discovery pass.
|
|
55
|
+
|
|
56
|
+
## Recommended Postfix Rendering
|
|
57
|
+
|
|
58
|
+
- Status: supported as plain text.
|
|
59
|
+
- Mechanism: Apothem emits the literal ` (Recommended)` suffix in the option label. Zed instruction files preserve that suffix as authored.
|
|
60
|
+
- 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`.
|
|
61
|
+
|
|
62
|
+
## Long Context and Compaction
|
|
63
|
+
|
|
64
|
+
- Status: profile-managed.
|
|
65
|
+
- 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.
|
|
66
|
+
- 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`.
|
|
67
|
+
|
|
68
|
+
## Large-Codebase Practice Projection
|
|
69
|
+
|
|
70
|
+
- Layered context: declared in `capabilities.yml` under `layered_context_surface`; Zed reads a single flat `.rules` file, so no vendor-native rule hierarchy is claimed beyond that file and template surface.
|
|
71
|
+
- LSP symbol navigation: `tracked-gap` until a vendor-ratified plugin or tool surface is pinned.
|
|
72
|
+
- 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.
|
|
73
|
+
|
|
74
|
+
## Plugin-alone Persistence
|
|
75
|
+
|
|
76
|
+
Zed exposes **no vendor plugin or extension install surface** that Apothem ships
|
|
77
|
+
for its instruction surface. The adapter is project-scope rules-only: it writes a
|
|
78
|
+
single flat merged file at `<project>/.rules` (backing up any pre-existing
|
|
79
|
+
`.rules` first) and authors no other cohort. There is no standalone-installable
|
|
80
|
+
bundle; every artifact requires the full
|
|
81
|
+
`apothem install --harness zed --project <path>` engine run.
|
|
82
|
+
|
|
83
|
+
| Artifact class | Persists standalone? | Mechanism / limit |
|
|
84
|
+
|---|---|---|
|
|
85
|
+
| Rules (flat `.rules`) | No — requires `apothem install` | The merged `.rules` file (carrying the embedded behavioral mandates) is written only by the engine to the project root. Nothing persists before that run. |
|
|
86
|
+
| Commands / Skills / Agents | No — platform limit | Zed documents threads, agent profiles, and MCP context servers but no command/skill/agent file primitive Apothem targets; these cohorts are not materialized for this harness. |
|
|
87
|
+
| Hooks / MCP / Settings | No — operator-owned / platform limit | `context_servers` in `.zed/settings.json` (MCP) is operator-owned; the adapter authors no entries. |
|
|
88
|
+
|
|
89
|
+
Platform limit: Zed's editor extensions are language/theme plugins, not an
|
|
90
|
+
instruction-cohort channel; a plugin-alone story does not exist for the
|
|
91
|
+
governance surface — the merged `.rules` file via `apothem install` is the sole
|
|
92
|
+
persistence surface.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
|
|
3
|
+
"""Apothem harness adapter for zed — project-scope install.
|
|
4
|
+
|
|
5
|
+
Materializes the apothem rules surface into the operator-supplied
|
|
6
|
+
project root at ``<project>/.rules`` — the canonical Zed project
|
|
7
|
+
agent-instruction file per https://zed.dev/docs/ai/instructions. Zed diverges
|
|
8
|
+
from the cohort's rules-directory shape: it auto-includes a single flat
|
|
9
|
+
project-root file (``.rules``, alongside the ``AGENTS.md`` / ``CLAUDE.md``
|
|
10
|
+
family) as agent instructions, with no dedicated per-tool rules
|
|
11
|
+
subdirectory. The adapter therefore writes a flat ``.rules`` file rather
|
|
12
|
+
than a dedicated ``apothem-rules.md`` inside a rules directory. The
|
|
13
|
+
global ``~/.config/zed/AGENTS.md`` surface and Zed's MCP context-server
|
|
14
|
+
block (``.zed/settings.json`` ``context_servers``) are out of apothem's
|
|
15
|
+
adapter scope.
|
|
16
|
+
|
|
17
|
+
The shared install driver backs up any pre-existing ``.rules`` file
|
|
18
|
+
before replace (timestamped copy under ``~/.apothem/backups/``), so an
|
|
19
|
+
operator's existing instruction file is preserved.
|
|
20
|
+
|
|
21
|
+
The adapter opts into the project-scope contract via
|
|
22
|
+
``requires_project = True``; the CLI rejects an install / update /
|
|
23
|
+
uninstall / verify invocation that omits ``--project <path>``. Delegates
|
|
24
|
+
install logic to :mod:`apothem.harnesses.zed.install`, which consumes the
|
|
25
|
+
canonical propagation manifest at
|
|
26
|
+
``src/apothem/lib/propagation-manifest.yaml``.
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
from __future__ import annotations
|
|
30
|
+
|
|
31
|
+
from pathlib import Path
|
|
32
|
+
|
|
33
|
+
from apothem.harnesses._shared.wrapper_factories import make_project_scope_adapter
|
|
34
|
+
from apothem.harnesses.zed.install import install as _install
|
|
35
|
+
from apothem.harnesses.zed.install import plan as _plan
|
|
36
|
+
from apothem.harnesses.zed.uninstall import uninstall as _uninstall
|
|
37
|
+
from apothem.harnesses.zed.update import update as _update
|
|
38
|
+
from apothem.harnesses.zed.verify import verify as _verify
|
|
39
|
+
|
|
40
|
+
# Sentinel relative path used by ``output_path`` for display purposes
|
|
41
|
+
# only. The real target is resolved per-install via
|
|
42
|
+
# ``resolve_output_path(project)`` once the operator supplies
|
|
43
|
+
# ``--project <path>``. Zed's flat-file divergence: the sentinel is the
|
|
44
|
+
# bare dotfile ``.rules`` at the project root, not a nested rules file.
|
|
45
|
+
_SENTINEL_RELATIVE: Path = Path(".rules")
|
|
46
|
+
|
|
47
|
+
ZedAdapter = make_project_scope_adapter(
|
|
48
|
+
"zed",
|
|
49
|
+
error_label="zed",
|
|
50
|
+
relative_target=_SENTINEL_RELATIVE,
|
|
51
|
+
install_fn=_install,
|
|
52
|
+
plan_fn=_plan,
|
|
53
|
+
uninstall_fn=_uninstall,
|
|
54
|
+
update_fn=_update,
|
|
55
|
+
verify_fn=_verify,
|
|
56
|
+
class_name="ZedAdapter",
|
|
57
|
+
)
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
|
|
3
|
+
# Per rules/agent-capability-discipline.md §1 / §3 / §7. Zed ratifies
|
|
4
|
+
# MCP context servers via .zed/settings.json (and global settings)
|
|
5
|
+
# `context_servers` (operator-owned; the adapter recognizes it but does
|
|
6
|
+
# not author entries). DIVERGENCE: Zed reads a single flat project-root
|
|
7
|
+
# `.rules` file (alongside the AGENTS.md / CLAUDE.md family) as agent
|
|
8
|
+
# instructions — not a dedicated Apothem file inside a rules directory.
|
|
9
|
+
# The adapter writes that flat `.rules` file, backing up any pre-existing
|
|
10
|
+
# `.rules` before replace, and does not dispatch sub-agents or author
|
|
11
|
+
# workflow/skill/hook cohorts.
|
|
12
|
+
|
|
13
|
+
mcp_servers:
|
|
14
|
+
- project-scope-.zed/settings.json#context_servers
|
|
15
|
+
# Operator-owned MCP surface: the adapter recognizes it but authors no entries.
|
|
16
|
+
mcp_servers_authored: false
|
|
17
|
+
sub_agent_dispatch: false
|
|
18
|
+
custom_command_support: "no"
|
|
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: "project-root .rules flat file (no rules directory)"
|
|
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"). The pinned snapshot catalogs config-materialization
|
|
29
|
+
# surfaces, not the vendor tool surface, so the web-fetch tool is not yet
|
|
30
|
+
# discovered against the pin — discovery-pending per
|
|
31
|
+
# rules/agent-capability-discipline-matrix.md §1.
|
|
32
|
+
web_fetch: "discovery-pending"
|
|
33
|
+
tool_surface_restrictions:
|
|
34
|
+
- secrets-paths
|
|
35
|
+
- destructive-shell-ops
|
|
36
|
+
- network-write-unsigned
|
|
37
|
+
system_prompt_template_path: "templates/apothem-rules.md"
|
|
38
|
+
agent_memory_surface: "n/a"
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
|
|
3
|
+
"""Install logic for the zed harness adapter.
|
|
4
|
+
|
|
5
|
+
Materializes the apothem Zed rules surface into the operator-supplied
|
|
6
|
+
project root. Zed's canonical agent-instruction surface is a single flat
|
|
7
|
+
project-root file at ``<project>/.rules`` (per
|
|
8
|
+
https://zed.dev/docs/ai/instructions) — a divergence from the cohort's
|
|
9
|
+
rules-directory shape: Zed auto-includes one flat ``.rules`` file
|
|
10
|
+
(alongside the ``AGENTS.md`` / ``CLAUDE.md`` family) rather than a
|
|
11
|
+
per-tool rules subdirectory. The global ``~/.config/zed/AGENTS.md``
|
|
12
|
+
target is excluded because Apothem targets the current project surface.
|
|
13
|
+
|
|
14
|
+
The propagation contract is declared in the canonical manifest at
|
|
15
|
+
``src/apothem/lib/propagation-manifest.yaml`` under the ``zed`` key
|
|
16
|
+
(a single ``sentinel_merge`` operation targeting
|
|
17
|
+
``${PROJECT_ROOT}/.rules``) and applied by the shared driver at
|
|
18
|
+
``apothem.harnesses._shared.install_driver``, which backs up any
|
|
19
|
+
pre-existing ``.rules`` before replace. The ``${PROJECT_ROOT}``
|
|
20
|
+
placeholder is substituted with the operator-supplied ``--project
|
|
21
|
+
<path>`` value the CLI threads through; absence of ``--project`` is
|
|
22
|
+
rejected upstream at ``apothem.cli._materialize`` via the
|
|
23
|
+
``requires_project`` opt-in.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
from __future__ import annotations
|
|
27
|
+
|
|
28
|
+
from apothem.harnesses._shared.wrapper_factories import (
|
|
29
|
+
make_project_scope_install,
|
|
30
|
+
make_project_scope_plan,
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
# Manifest harness key for this adapter.
|
|
34
|
+
_HARNESS_NAME: str = "zed"
|
|
35
|
+
|
|
36
|
+
install = make_project_scope_install(
|
|
37
|
+
_HARNESS_NAME,
|
|
38
|
+
error_message="zed adapter requires --project <path>; CLI must thread it through",
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
plan = make_project_scope_plan(_HARNESS_NAME)
|