@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
package/README.md
ADDED
|
@@ -0,0 +1,549 @@
|
|
|
1
|
+
<!-- SPDX-License-Identifier: MIT -->
|
|
2
|
+
|
|
3
|
+
<p align="center">
|
|
4
|
+
<a href="https://github.com/ahmed-g-gad/apothem/blob/main/assets/DESIGN-SYSTEM.md">
|
|
5
|
+
<picture>
|
|
6
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/ahmed-g-gad/apothem/main/assets/logo-dark.svg">
|
|
7
|
+
<img src="https://raw.githubusercontent.com/ahmed-g-gad/apothem/main/assets/logo.svg" alt="Apothem — a hexagon with its apothem distance marked in emerald" width="140" height="140">
|
|
8
|
+
</picture>
|
|
9
|
+
</a>
|
|
10
|
+
</p>
|
|
11
|
+
|
|
12
|
+
<h1 align="center">Apothem</h1>
|
|
13
|
+
|
|
14
|
+
<p align="center">
|
|
15
|
+
<em>One shared profile · materialized into seventeen assistant harnesses.</em>
|
|
16
|
+
</p>
|
|
17
|
+
|
|
18
|
+
<p align="center">
|
|
19
|
+
<a href="https://github.com/ahmed-g-gad/apothem/actions/workflows/ci.yml"><img alt="Build" src="https://github.com/ahmed-g-gad/apothem/actions/workflows/ci.yml/badge.svg?branch=main"></a>
|
|
20
|
+
<a href="https://github.com/ahmed-g-gad/apothem/blob/main/LICENSE"><img alt="License: MIT" src="https://img.shields.io/github/license/ahmed-g-gad/apothem?color=0F172A"></a>
|
|
21
|
+
<a href="https://www.npmjs.com/package/@ahmed-g-gad/apothem"><img alt="npm version" src="https://img.shields.io/npm/v/%40ahmed-g-gad%2Fapothem?color=10B981&label=npm"></a>
|
|
22
|
+
<a href="https://github.com/ahmed-g-gad/apothem/actions/workflows/ci.yml"><img alt="Coverage" src="https://img.shields.io/badge/coverage-%E2%89%A580%25-2563EB"></a>
|
|
23
|
+
<a href="https://securityscorecards.dev/viewer/?uri=github.com/ahmed-g-gad/apothem"><img alt="OpenSSF Scorecard" src="https://api.securityscorecards.dev/projects/github.com/ahmed-g-gad/apothem/badge"></a>
|
|
24
|
+
<a href="https://github.com/ahmed-g-gad/apothem/discussions"><img alt="Community discussions" src="https://img.shields.io/badge/discussions-GitHub-7C3AED"></a>
|
|
25
|
+
<a href="https://apothem.ahmedgad.com/"><img alt="Documentation" src="https://img.shields.io/badge/docs-Fumadocs-0F172A"></a>
|
|
26
|
+
<a href="https://www.npmjs.com/package/@ahmed-g-gad/apothem"><img alt="npm downloads" src="https://img.shields.io/npm/dm/%40ahmed-g-gad%2Fapothem?color=10B981&label=downloads"></a>
|
|
27
|
+
</p>
|
|
28
|
+
|
|
29
|
+
<p align="center">
|
|
30
|
+
<a href="https://github.com/ahmed-g-gad/apothem#install">Install</a>
|
|
31
|
+
·
|
|
32
|
+
<a href="https://github.com/ahmed-g-gad/apothem#quick-start">Quick Start</a>
|
|
33
|
+
·
|
|
34
|
+
<a href="https://apothem.ahmedgad.com/">Documentation</a>
|
|
35
|
+
·
|
|
36
|
+
<a href="https://github.com/ahmed-g-gad/apothem#supported-harnesses">Supported harnesses</a>
|
|
37
|
+
·
|
|
38
|
+
<a href="https://github.com/ahmed-g-gad/apothem/blob/main/CHANGELOG.md">Changelog</a>
|
|
39
|
+
·
|
|
40
|
+
<a href="https://github.com/ahmed-g-gad/apothem/blob/main/CONTRIBUTING.md">Contributing</a>
|
|
41
|
+
·
|
|
42
|
+
<a href="https://apothem.ahmedgad.com/docs/community/">Community</a>
|
|
43
|
+
</p>
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
<p align="center">
|
|
48
|
+
<a href="https://apothem.ahmedgad.com/docs/architecture/">
|
|
49
|
+
<img alt="Apothem project preview with the hexagon apothem mark and product summary" src="https://raw.githubusercontent.com/ahmed-g-gad/apothem/main/assets/social-preview.svg" width="900">
|
|
50
|
+
</a>
|
|
51
|
+
</p>
|
|
52
|
+
|
|
53
|
+
**Apothem** authors one shared profile — rules, slash-commands, skills, hooks, output-styles, settings (including MCP servers), schemas, and docs — and materializes that *whole synced unit* into all seventeen supported harnesses' native configuration directories through per-harness adapters. One source of truth. Seventeen destinations. Zero hand-maintained drift. A mechanized conformity gate keeps every materialized surface in line.
|
|
54
|
+
|
|
55
|
+
## Why Apothem
|
|
56
|
+
|
|
57
|
+
Supported harnesses proliferate; each one parks its configuration in a different directory, reads a different schema, and accepts a different vocabulary for the same primitives. Operators who use more than one tool today maintain parallel copies of nearly-identical configuration by hand, with all the divergence, dead-link, and "fix-in-one-place-missed-in-ten" pathologies that implies.
|
|
58
|
+
|
|
59
|
+
Apothem cuts the drift at the root, and goes wider than file-copying or rules-only sync:
|
|
60
|
+
|
|
61
|
+
- **One profile, seventeen destinations.** Author your rules, slash-commands, skills, hooks, output-styles, settings (MCP servers included), schemas, and docs once. Push the whole unit to every harness with one command.
|
|
62
|
+
- **A wide synced unit, not rules alone.** Rules · slash-commands · skills · hooks · output-styles · settings (with MCP servers) · schemas · docs travel together as first-class primitives — translated into each harness's native schema, not flattened to a lowest common denominator.
|
|
63
|
+
- **A mechanized governance gate.** `python -m apothem.conformity.gate` runs multi-bar pre-emission checks — authorship headers, naming, code-craft, hedging, binding reciprocity — so every materialized surface stays conformant.
|
|
64
|
+
- **Deterministic pipelines.** A review pipeline (`/plan-spec → /plan-generate → /plan-review → /plan-design → /plan-execute`, where `/plan-design` runs only for architecture-bearing suites), a 13-stage `/research` pipeline, and an eleven-command audit fortress apply to every change to the profile itself.
|
|
65
|
+
- **Reversible, verified lifecycle.** Every install is undone by the matching uninstall — timestamped backups, zero orphans; `apothem verify --harness <name>` answers "is the profile faithfully installed here?" with a structured JSON drift report.
|
|
66
|
+
- **Durable memory + opt-in learning.** A persistent memory tier and an opt-in continuous-learning loop carry confirmed conventions forward across sessions.
|
|
67
|
+
- **Work that survives session, account, and machine boundaries.** Long-running work externalizes its full state to a project-local `.apothem/plans/` suite — a resumption contract plus a cold-start protocol. Because the state lives in your project's files, not locked inside one cloud chat history, a fresh session on any account or machine pointed at the project picks the work back up in place. See [Resumable planning](https://apothem.ahmedgad.com/docs/concepts/resumable-planning/).
|
|
68
|
+
|
|
69
|
+
## Features
|
|
70
|
+
|
|
71
|
+
| | Capability | What it gives you |
|
|
72
|
+
|---|---|---|
|
|
73
|
+
| 🎯 | **One profile → seventeen native configs** | Author once; install everywhere. Each harness receives the profile translated into its own native schema — no lowest-common-denominator flattening. |
|
|
74
|
+
| 🧩 | **A wide synced unit** | Rules · slash-commands · skills · hooks · output-styles · settings (with MCP servers) · schemas · docs travel together as first-class primitives — not rules alone. |
|
|
75
|
+
| 🛡️ | **Mechanized governance gate** | `python -m apothem.conformity.gate` runs multi-bar pre-emission checks — authorship headers, naming, code-craft, hedging, binding reciprocity — across every materialized surface; a behavior-diff golden corpus regression-locks each adapter's output, so any unintended change to what a harness receives is caught. |
|
|
76
|
+
| 🧭 | **Deterministic pipelines** | A staged `/plan` review pipeline and a 13-stage `/research` pipeline apply the same discipline to every change to the profile itself. |
|
|
77
|
+
| 🏰 | **eleven-command audit fortress** | Security · code · accessibility · performance · dependency · supply-chain · threat-model · architecture · code-review · docs-review · UX audits on demand. |
|
|
78
|
+
| 🧠 | **Durable memory + opt-in learning** | A persistent memory tier and an opt-in continuous-learning loop carry confirmed conventions forward across sessions. |
|
|
79
|
+
| 👁️ | **Preview before write** | `apothem diff --harness <name>` shows every pending change to a harness's native config before anything lands — inspect the full diff, then install. |
|
|
80
|
+
| 🔍 | **Verifiable state** | `apothem verify --harness <name>` reports drift between source profile and harness destination — structured JSON with `--format json` for CI. |
|
|
81
|
+
| ↩️ | **Reversible lifecycle** | Every install is matched by a clean uninstall — timestamped backups at `~/.apothem/backups/`, zero orphans, confirmation-gated removal (`--yes` for batch). |
|
|
82
|
+
| 🗂️ | **Multi-scope adapters** | User-scope and project-scope targets; `--project .` directs project-scope harnesses such as Cursor, Gemini CLI, GitHub Copilot, and Windsurf. |
|
|
83
|
+
| 🔐 | **Supply-chain hardened releases** | SLSA-3 build provenance · Sigstore signatures · CycloneDX SBOM · npm provenance · OpenSSF Scorecard tracked. |
|
|
84
|
+
| 📦 | **Self-contained runtime** | Runs from a checkout on system Python 3.10+ with vendored dependencies — only `click` and `rich` need to be importable. |
|
|
85
|
+
|
|
86
|
+
## How Apothem compares
|
|
87
|
+
|
|
88
|
+
Other tools solve adjacent slices of this problem. File-based config managers like **chezmoi** and **GNU Stow** place or template files but never translate one source into each harness's *native* configuration schema. Cross-tool rule-sync CLIs like **rulesync** do generate per-tool native files across many tools — a broader tool count than Apothem's seventeen. Apothem's distinction is the **breadth of the synced unit** and the discipline shipped around it:
|
|
89
|
+
|
|
90
|
+
| Capability | Apothem | File config managers<br>(chezmoi, Stow) | Cross-tool rule sync<br>(rulesync) | Per-tool native config |
|
|
91
|
+
|---|:---:|:---:|:---:|:---:|
|
|
92
|
+
| One source → many tools' native schemas | ✅ seventeen harness adapters | ❌ copy / symlink, no translation | ✅ | ❌ single tool |
|
|
93
|
+
| Synced unit | rules · slash-commands · skills · hooks · output-styles · settings (MCP) · schemas · docs | arbitrary files | rules · MCP · commands | — |
|
|
94
|
+
| Mechanized governance gate | ✅ `python -m apothem.conformity.gate` | ❌ | ❌ | ❌ |
|
|
95
|
+
| Deterministic `/plan` + 13-stage `/research` pipelines | ✅ | ❌ | ❌ | ❌ |
|
|
96
|
+
| eleven-command audit fortress | ✅ security · perf · a11y · supply-chain · … | ❌ | ❌ | ❌ |
|
|
97
|
+
| Durable memory + opt-in learning loop | ✅ | ❌ | ❌ | ❌ |
|
|
98
|
+
| Reversible, verified lifecycle | ✅ backup + `apothem verify` + zero-orphan uninstall | varies | varies | — |
|
|
99
|
+
|
|
100
|
+
Where a peer is stronger, it is named: **rulesync** reaches more tools, and several sync tools materialize native schemas. Apothem trades raw tool count for a wider synced unit — skills, hooks, MCP servers, and the command pipelines as first-class, not rules alone — and the governance, audit, and review discipline that ships with it.
|
|
101
|
+
|
|
102
|
+
## Quick Start
|
|
103
|
+
|
|
104
|
+
### Fastest start
|
|
105
|
+
|
|
106
|
+
**Prerequisite:** [Node.js](https://nodejs.org/) and system Python 3.10 or newer
|
|
107
|
+
on your `PATH`. Then two commands take you from nothing to a verified install:
|
|
108
|
+
|
|
109
|
+
```shell
|
|
110
|
+
# 1 — create a profile (if needed), preview, confirm, and install — one guided step
|
|
111
|
+
npx @ahmed-g-gad/apothem quickstart --yes
|
|
112
|
+
|
|
113
|
+
# 2 — confirm the configuration landed correctly
|
|
114
|
+
npx @ahmed-g-gad/apothem verify --harness claude-code
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
That is the whole path: `quickstart` scaffolds a shared profile when none
|
|
118
|
+
exists, previews every file it will write, installs, and names the next
|
|
119
|
+
commands; `verify` reports whether the profile is faithfully installed. The rest
|
|
120
|
+
of this section is the longer tour.
|
|
121
|
+
|
|
122
|
+
### Other ways to install
|
|
123
|
+
|
|
124
|
+
Apothem installs several ways — full detail (including the VS Code, Gemini CLI,
|
|
125
|
+
and Codex extensions) under [Install](#install):
|
|
126
|
+
|
|
127
|
+
```text
|
|
128
|
+
# 1 — Claude Code plugin (inside Claude Code)
|
|
129
|
+
/plugin marketplace add ahmed-g-gad/apothem
|
|
130
|
+
/plugin install apothem@apothem
|
|
131
|
+
|
|
132
|
+
# 2 — npx (any machine with Node and Python 3.10+)
|
|
133
|
+
npx @ahmed-g-gad/apothem install --harness claude-code
|
|
134
|
+
|
|
135
|
+
# 3 — one-shot installer (resolves and verifies the latest signed release tag)
|
|
136
|
+
curl -fsSL https://apothem.ahmedgad.com/install.sh | sh # POSIX
|
|
137
|
+
irm https://apothem.ahmedgad.com/install.ps1 | iex # Windows
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
The guided first step is a single command that walks the whole canonical path —
|
|
141
|
+
create a shared profile if none exists, preview the files each harness will
|
|
142
|
+
write, confirm, then install:
|
|
143
|
+
|
|
144
|
+
```shell
|
|
145
|
+
npx @ahmed-g-gad/apothem quickstart
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
`quickstart` ensures a profile (scaffolding one with a personalize nudge if it
|
|
149
|
+
is missing), previews the writes grouped by project root versus your home
|
|
150
|
+
directory, asks before writing outside the project, installs with the grouped
|
|
151
|
+
capability-note output, and ends by naming the next commands. `--yes` runs it
|
|
152
|
+
non-interactively; `--format json` emits one structured summary.
|
|
153
|
+
|
|
154
|
+
Prefer the explicit steps? Run them directly. The `--project` flag is required
|
|
155
|
+
when `all` includes project-scope adapters such as Cursor, Gemini CLI, GitHub
|
|
156
|
+
Copilot, and Windsurf.
|
|
157
|
+
|
|
158
|
+
```shell
|
|
159
|
+
npx @ahmed-g-gad/apothem profile init
|
|
160
|
+
npx @ahmed-g-gad/apothem install --harness all --project .
|
|
161
|
+
npx @ahmed-g-gad/apothem verify --harness all --project .
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
`profile init` writes a scaffold with placeholder identity fields and prints a
|
|
165
|
+
personalize nudge — replace `Example User` and the placeholder email and GitHub
|
|
166
|
+
handle (edit the profile, or run `apothem profile set identity.name "Your
|
|
167
|
+
Name"`) before you install. If a still-placeholder identity reaches `install` or
|
|
168
|
+
`update`, the command prints one advisory note and proceeds: Apothem never
|
|
169
|
+
fabricates an identity, and never blocks on a placeholder one. `install
|
|
170
|
+
--harness all` also previews the files it will write — grouped by project root
|
|
171
|
+
versus your home directory — and asks before writing outside the project.
|
|
172
|
+
|
|
173
|
+
Lifecycle commands exit 0 on success, print a structured JSON summary with
|
|
174
|
+
`--format json`, and support `--dry-run` where a write would otherwise occur.
|
|
175
|
+
Narrower scopes (`--harness claude-code`, `--harness cursor`, etc.) target a
|
|
176
|
+
single harness when you need it; project-scope harnesses still require
|
|
177
|
+
`--project PATH`.
|
|
178
|
+
|
|
179
|
+
## Install
|
|
180
|
+
|
|
181
|
+
Every install path runs the same self-contained engine: the source tree
|
|
182
|
+
carries its vendored dependencies and runs from a checkout on system Python
|
|
183
|
+
3.10 or newer (see
|
|
184
|
+
[the self-contained runtime](https://apothem.ahmedgad.com/docs/architecture/self-contained-runtime/)).
|
|
185
|
+
|
|
186
|
+
### Claude Code plugin
|
|
187
|
+
|
|
188
|
+
Inside Claude Code:
|
|
189
|
+
|
|
190
|
+
```text
|
|
191
|
+
/plugin marketplace add ahmed-g-gad/apothem
|
|
192
|
+
/plugin install apothem@apothem
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### npx
|
|
196
|
+
|
|
197
|
+
The npm shim locates Python 3.10+ and forwards every CLI command to the
|
|
198
|
+
bundled engine:
|
|
199
|
+
|
|
200
|
+
```shell
|
|
201
|
+
npx @ahmed-g-gad/apothem install --harness claude-code
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
It also runs straight from the repository:
|
|
205
|
+
|
|
206
|
+
```shell
|
|
207
|
+
npx github:ahmed-g-gad/apothem install --harness claude-code
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### One-shot installers
|
|
211
|
+
|
|
212
|
+
The one-shot installer resolves the latest signed release tag, verifies its
|
|
213
|
+
signature, fetches the Apothem source tree at that tag, runs the engine
|
|
214
|
+
directly from it, and materializes your harness configuration. The
|
|
215
|
+
tag-pinned verified install is the default and recommended path.
|
|
216
|
+
|
|
217
|
+
| One-shot installer | Command (latest signed tag, verified) |
|
|
218
|
+
|---|---|
|
|
219
|
+
| **POSIX** (macOS / Linux / WSL) | `curl -fsSL https://apothem.ahmedgad.com/install.sh \| sh` |
|
|
220
|
+
| **Windows** (PowerShell) | `irm https://apothem.ahmedgad.com/install.ps1 \| iex` |
|
|
221
|
+
|
|
222
|
+
**Trust model (tag-pinned, verified by default).** With no `APOTHEM_REF` set,
|
|
223
|
+
the installer resolves the highest `vMAJOR.MINOR.PATCH` release tag and checks
|
|
224
|
+
*that* out — never the moving `main` branch. Before any configuration is
|
|
225
|
+
materialized, the fetched tag's signature is verified with `git verify-tag`;
|
|
226
|
+
an unsigned, tampered, or unverifiable tag aborts the install before anything
|
|
227
|
+
is written. To pin a specific release explicitly:
|
|
228
|
+
|
|
229
|
+
```bash title="Pinned, verified install (POSIX)"
|
|
230
|
+
APOTHEM_REF=vMAJOR.MINOR.PATCH sh -c "$(curl -fsSL https://apothem.ahmedgad.com/install.sh)"
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
```powershell title="Pinned, verified install (Windows)"
|
|
234
|
+
$env:APOTHEM_REF = 'vMAJOR.MINOR.PATCH'; irm https://apothem.ahmedgad.com/install.ps1 | iex
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
Replace `vMAJOR.MINOR.PATCH` with the release tag you want from the
|
|
238
|
+
[releases page](https://github.com/ahmed-g-gad/apothem/releases).
|
|
239
|
+
|
|
240
|
+
Two explicit overrides relax the default: `APOTHEM_REF=main` checks out the
|
|
241
|
+
moving branch (unverified), and `APOTHEM_ALLOW_UNVERIFIED=1` downgrades a
|
|
242
|
+
verification failure from a fatal abort to a warning and proceeds — intended
|
|
243
|
+
for air-gapped, local, or pre-signed-release use. The `APOTHEM_SOURCE`
|
|
244
|
+
local-checkout path fetches nothing, so it skips tag resolution and
|
|
245
|
+
verification and runs the checkout you point it at.
|
|
246
|
+
|
|
247
|
+
**Requirements.** A system Python 3.10 or newer must be on PATH, and the
|
|
248
|
+
`click` and `rich` packages must be importable under that interpreter; the
|
|
249
|
+
installer checks for each, names anything missing, and offers to install the
|
|
250
|
+
missing prerequisites for you — with your confirmation, or automatically under
|
|
251
|
+
`--yes` (`-Yes` on PowerShell) or `APOTHEM_AUTO_INSTALL_DEPS=1`. Every other
|
|
252
|
+
runtime dependency is vendored into the source tree. Apart from that opt-in
|
|
253
|
+
prerequisite install, the installer never modifies your Python environment.
|
|
254
|
+
|
|
255
|
+
**What it does.** Prerequisite-check (Python ≥ 3.10, `click`, `rich`) →
|
|
256
|
+
locate the source (a surrounding checkout, or — for a network install —
|
|
257
|
+
resolve the latest signed tag and clone the repository at it) → verify the
|
|
258
|
+
tag signature (fail-closed) → run `python -m apothem install --harness
|
|
259
|
+
<name>` from that source → verify → place an `apothem` command on PATH → print
|
|
260
|
+
the next-step banner. Re-running is idempotent: an existing clone is
|
|
261
|
+
re-checked-out to the resolved tag and the harness is re-materialized.
|
|
262
|
+
|
|
263
|
+
**The `apothem` command.** After a successful install, the installer writes an
|
|
264
|
+
`apothem` shim that forwards to the bundled engine (with its vendored
|
|
265
|
+
dependencies) — POSIX into `$HOME/.local/bin`, Windows into
|
|
266
|
+
`%LOCALAPPDATA%\Microsoft\WindowsApps` (a user directory already on the default
|
|
267
|
+
Windows PATH). The installer never edits your PATH. Once the directory is on
|
|
268
|
+
PATH you run `apothem <command>` directly, with no manual `PYTHONPATH`. If the
|
|
269
|
+
directory is not on PATH (or the shim could not be placed), the banner prints how
|
|
270
|
+
to add it and falls back to the self-contained `PYTHONPATH=… python -m apothem`
|
|
271
|
+
form — it never advertises a bare `apothem` command the run did not resolve.
|
|
272
|
+
|
|
273
|
+
**Configuration (environment variables).** Both installers read the same names:
|
|
274
|
+
|
|
275
|
+
| Variable | Default | Purpose |
|
|
276
|
+
|---|---|---|
|
|
277
|
+
| `APOTHEM_HOME` | `$HOME/.apothem` | Install destination for the cloned source |
|
|
278
|
+
| `APOTHEM_REPO` | `https://github.com/ahmed-g-gad/apothem` | Git remote to clone |
|
|
279
|
+
| `APOTHEM_REF` | _(latest signed tag)_ | Git ref to check out; unset resolves the latest release tag, or set a tag to pin / `main` for the moving branch |
|
|
280
|
+
| `APOTHEM_ALLOW_UNVERIFIED` | _(unset)_ | Set to `1` to downgrade a tag-verification failure to a warning and proceed |
|
|
281
|
+
| `APOTHEM_SOURCE` | _(unset)_ | Explicit local source tree to use instead of cloning (skips tag resolution and verification) |
|
|
282
|
+
| `APOTHEM_HARNESS` | `claude-code` | Harness to materialize |
|
|
283
|
+
| `APOTHEM_PROFILE` | `$HOME/.config/apothem/profile.yaml` | Shared profile path |
|
|
284
|
+
| `APOTHEM_BIN_DIR` | POSIX `$HOME/.local/bin`, Windows `%LOCALAPPDATA%\Microsoft\WindowsApps` | Directory the `apothem` shim is written into |
|
|
285
|
+
| `APOTHEM_SKIP_VERIFY` | _(unset)_ | Set to `1` to skip post-install verification |
|
|
286
|
+
| `APOTHEM_AUTO_INSTALL_DEPS` | _(unset)_ | Set to `1` to install the missing `click` / `rich` prerequisites automatically, without prompting |
|
|
287
|
+
|
|
288
|
+
**Updating.** Re-run the installer, or run `scripts/installer/update.sh` /
|
|
289
|
+
`scripts/installer/update.ps1` to re-check-out the latest signed tag (verified)
|
|
290
|
+
and re-materialize.
|
|
291
|
+
|
|
292
|
+
**Uninstalling.** `scripts/installer/uninstall.sh` /
|
|
293
|
+
`scripts/installer/uninstall.ps1` removes the materialized harness
|
|
294
|
+
configuration (it prompts unless `--yes` / `-Yes`); pass `--remove-source` /
|
|
295
|
+
`-RemoveSource` to also remove the managed clone at `APOTHEM_HOME`.
|
|
296
|
+
|
|
297
|
+
Verify the install:
|
|
298
|
+
|
|
299
|
+
```shell
|
|
300
|
+
npx @ahmed-g-gad/apothem verify --harness claude-code
|
|
301
|
+
|
|
302
|
+
# or run the engine from the bundled source:
|
|
303
|
+
PYTHONPATH="$HOME/.apothem/src" python -m apothem verify --harness claude-code
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
### VS Code family extension
|
|
307
|
+
|
|
308
|
+
Install the **Apothem** extension from the
|
|
309
|
+
[Visual Studio Marketplace](https://marketplace.visualstudio.com/) — one
|
|
310
|
+
extension covers VS Code and GitHub Copilot. Its commands (`Apothem:
|
|
311
|
+
Install`, `Verify`, `Update`, `Uninstall`, `Doctor`) run the same engine
|
|
312
|
+
through the configured runner (`npx @ahmed-g-gad/apothem` by default). Source
|
|
313
|
+
lives under [`vscode-extension/`](vscode-extension/).
|
|
314
|
+
|
|
315
|
+
### Gemini CLI extension
|
|
316
|
+
|
|
317
|
+
Install Apothem as a Gemini CLI extension straight from the repository:
|
|
318
|
+
|
|
319
|
+
```shell
|
|
320
|
+
gemini extensions install https://github.com/ahmed-g-gad/apothem
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
The extension loads an Apothem context file and adds a `/apothem` command that
|
|
324
|
+
runs any engine subcommand.
|
|
325
|
+
|
|
326
|
+
### Qwen Code extension
|
|
327
|
+
|
|
328
|
+
Install Apothem as a Qwen Code extension straight from the repository:
|
|
329
|
+
|
|
330
|
+
```shell
|
|
331
|
+
qwen extensions install ahmed-g-gad/apothem
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
The extension loads an Apothem context file (`QWEN.md`). Qwen Code also installs
|
|
335
|
+
Gemini CLI extensions and Claude Code marketplace plugins directly, so those
|
|
336
|
+
entries work as well.
|
|
337
|
+
|
|
338
|
+
### Codex plugin
|
|
339
|
+
|
|
340
|
+
Add the repository as a Codex plugin marketplace, then install the plugin:
|
|
341
|
+
|
|
342
|
+
```shell
|
|
343
|
+
codex plugin marketplace add ahmed-g-gad/apothem
|
|
344
|
+
codex plugin add apothem@apothem
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
### OpenCode and other adapter-only tools
|
|
348
|
+
|
|
349
|
+
Some tools — OpenCode among them — expose no separate plugin or extension
|
|
350
|
+
registry for a configuration manager; their native surface is their own config
|
|
351
|
+
directory. Apothem syncs those directly through the npm shim or the one-shot
|
|
352
|
+
installers:
|
|
353
|
+
|
|
354
|
+
```shell
|
|
355
|
+
npx @ahmed-g-gad/apothem install --harness opencode
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
Swap `--harness opencode` for any supported tool — add `--project PATH` for
|
|
359
|
+
project-scope tools such as Cursor and Windsurf — or `--harness all` to sync
|
|
360
|
+
every one at once.
|
|
361
|
+
|
|
362
|
+
Detailed install walkthroughs live on the project website at [apothem.ahmedgad.com/docs/install/](https://apothem.ahmedgad.com/docs/install/).
|
|
363
|
+
|
|
364
|
+
## How it works
|
|
365
|
+
|
|
366
|
+
Apothem decouples *what* you want every supported tool to do (your shared profile) from *where* each tool reads its configuration (seventeen different filesystem destinations with seventeen different schemas).
|
|
367
|
+
|
|
368
|
+
```mermaid
|
|
369
|
+
%%{ init: { "theme": "neutral" } }%%
|
|
370
|
+
%% verified: 2026-06-26 %%
|
|
371
|
+
%% provenance: README.md §How it works — apothem's seventeen-harness materialization fan-out %%
|
|
372
|
+
%% cross-reference: src/apothem/lib/harness_registry_data.py (the authoritative adapter registry) %%
|
|
373
|
+
graph LR
|
|
374
|
+
P["shared profile<br/>rules · slash-commands · skills · hooks<br/>output-styles · settings (MCP servers) · schemas · docs"]
|
|
375
|
+
A["apothem<br/>core CLI"]
|
|
376
|
+
P --> A
|
|
377
|
+
A --> AG["~/.gemini/GEMINI.md + antigravity-cli plugin<br/>Antigravity"]
|
|
378
|
+
A --> CC["~/.claude/<br/>Claude Code"]
|
|
379
|
+
A --> CB["project .codebuddy/rules<br/>CodeBuddy"]
|
|
380
|
+
A --> CO["~/.codex + ~/.agents/skills + ~/.config/apothem<br/>Codex"]
|
|
381
|
+
A --> CU["project .cursor/rules<br/>Cursor"]
|
|
382
|
+
A --> GE["project GEMINI.md + .gemini<br/>Gemini CLI"]
|
|
383
|
+
A --> GC["project .github/copilot-instructions.md<br/>GitHub Copilot"]
|
|
384
|
+
A --> HE["~/.hermes/<br/>Hermes"]
|
|
385
|
+
A --> KI["project .kiro/steering<br/>Kiro"]
|
|
386
|
+
A --> OW["~/.openclaw/<br/>Open-Claw"]
|
|
387
|
+
A --> OC["~/.config/opencode/<br/>OpenCode"]
|
|
388
|
+
A --> QW["~/.qwen/<br/>Qwen Code"]
|
|
389
|
+
A --> TR["project .trae/rules<br/>Trae"]
|
|
390
|
+
A --> WI["project .devin/rules<br/>Windsurf (Devin Desktop)"]
|
|
391
|
+
A --> ZE["project .rules<br/>Zed"]
|
|
392
|
+
A --> KM["project AGENTS.md + .kimi-code/<br/>Kimi Code"]
|
|
393
|
+
A --> GL["project .apothem/providers/glm.toml<br/>GLM (Z.ai)"]
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
Each harness has its own per-harness adapter that:
|
|
397
|
+
|
|
398
|
+
- **Maps** profile elements (rules, skills, helpers, hooks) onto harness-native primitives where they exist and Apothem-owned support paths where they do not.
|
|
399
|
+
- **Translates** between the shared schema and the harness's expected filesystem layout.
|
|
400
|
+
- **Reverses cleanly** on uninstall — no orphaned files, no manual cleanup.
|
|
401
|
+
- **Verifies** at install time, update time, and on demand.
|
|
402
|
+
|
|
403
|
+
Read the [architecture overview](https://apothem.ahmedgad.com/docs/architecture/) for the deep walkthrough.
|
|
404
|
+
|
|
405
|
+
### The operating loop: plan → harden → ship
|
|
406
|
+
|
|
407
|
+
Beyond syncing config, Apothem ships a disciplined loop for the changes you make *to* the profile itself. The planning pipeline (`/plan`) carries a change from a spec through generation, review, and execution; the hardening pipeline (`/fortress`) takes that executed work and drives it to a release-gated state; and the release gate closes the loop.
|
|
408
|
+
|
|
409
|
+
```mermaid
|
|
410
|
+
%%{ init: { "theme": "neutral" } }%%
|
|
411
|
+
%% verified: 2026-06-23 %%
|
|
412
|
+
%% provenance: README.md §The operating loop — CLAUDE.md "Operating Loop & Synthesis Posture" %%
|
|
413
|
+
%% cross-reference: CLAUDE.md "Operating Loop & Synthesis Posture"; src/apothem/commands/plan.md + src/apothem/commands/fortress.md %%
|
|
414
|
+
flowchart LR
|
|
415
|
+
PL["/plan<br/>spec · generate · review · execute"] --> FO["/fortress<br/>detect · remediate · re-audit · gate"]
|
|
416
|
+
FO --> SH["ship<br/>release gate"]
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
For a non-trivial mission, an opt-in `/workflow` capability dispatches genuinely-independent critique-synthesis workers that keep the main conversation lean — each finding is verified before it survives, and beyond-mission fixes are disclosed. It is **default-off**: a clean install never auto-invokes it; you turn it on when you want it.
|
|
420
|
+
|
|
421
|
+
> **Asset palette.** Apothem's mark is a regular flat-top hexagon — the polygon whose apothem the project is named for — anchored by a slate center node and an emerald terminus node. The full design rationale, including the per-harness brand-color palette and accessibility posture, is published at [Brand](https://apothem.ahmedgad.com/docs/brand/).
|
|
422
|
+
|
|
423
|
+
## Supported harnesses
|
|
424
|
+
|
|
425
|
+
The seventeen adapters, their install scope (**User** = your home configuration directory; **Project** = the current project directory), and their materialization roots:
|
|
426
|
+
|
|
427
|
+
| Harness | Scope | Materialization root |
|
|
428
|
+
|---|---|---|
|
|
429
|
+
| Antigravity | User | `~/.gemini/GEMINI.md` + `~/.gemini/antigravity-cli/plugins/apothem/` |
|
|
430
|
+
| Claude Code | User | `~/.claude/` + `~/.claude/apothem/{templates,hooks}/` |
|
|
431
|
+
| CodeBuddy | Project | `<project>/.codebuddy/rules/apothem-rules.md` |
|
|
432
|
+
| Codex | User | `~/.codex/` + `~/.agents/skills/` + `~/.config/apothem/{rules,templates}/` |
|
|
433
|
+
| Cursor | Project | `<project>/.cursor/rules/` |
|
|
434
|
+
| Gemini CLI | Project | `<project>/GEMINI.md` + `<project>/.gemini/` |
|
|
435
|
+
| GitHub Copilot | Project | `<project>/.github/copilot-instructions.md` |
|
|
436
|
+
| Hermes | User | `~/.hermes/` |
|
|
437
|
+
| Kimi Code | Project | `<project>/AGENTS.md` + `<project>/.kimi-code/apothem/` |
|
|
438
|
+
| Kiro | Project | `<project>/.kiro/steering/apothem-rules.md` |
|
|
439
|
+
| Open-Claw | User | `~/.openclaw/` |
|
|
440
|
+
| OpenCode | User | `~/.config/opencode/` |
|
|
441
|
+
| Qwen Code | User | `~/.qwen/` |
|
|
442
|
+
| Trae | Project | `<project>/.trae/rules/apothem-rules.md` |
|
|
443
|
+
| Windsurf | Project | `<project>/.devin/rules/apothem-rules.md` (Devin Desktop; `.windsurf/rules/` fallback) |
|
|
444
|
+
| Zed | Project | `<project>/.rules` |
|
|
445
|
+
| GLM (Z.ai) | Project | `<project>/.apothem/providers/glm.toml` |
|
|
446
|
+
|
|
447
|
+
Adapters live at [`src/apothem/harnesses/`](https://github.com/ahmed-g-gad/apothem/tree/main/src/apothem/harnesses). Authoring a new adapter? See the [new-harness-adapter authoring runbook](https://apothem.ahmedgad.com/docs/runbooks/new-harness-adapter-authoring/).
|
|
448
|
+
|
|
449
|
+
## Updating
|
|
450
|
+
|
|
451
|
+
```shell
|
|
452
|
+
# Fast-forward the bundled source and re-materialize:
|
|
453
|
+
sh scripts/installer/update.sh # POSIX
|
|
454
|
+
pwsh -NoProfile -File scripts/installer/update.ps1 # Windows
|
|
455
|
+
|
|
456
|
+
# Or re-materialize a specific harness from the current source:
|
|
457
|
+
npx @ahmed-g-gad/apothem update --harness all --project . --dry-run
|
|
458
|
+
npx @ahmed-g-gad/apothem update --harness all --project .
|
|
459
|
+
PYTHONPATH="$HOME/.apothem/src" python -m apothem update --harness cursor --project .
|
|
460
|
+
```
|
|
461
|
+
|
|
462
|
+
The update script fast-forwards the source tree at `APOTHEM_HOME` and re-runs
|
|
463
|
+
materialization. `apothem update` re-materializes harness configuration from
|
|
464
|
+
the current shared profile; it is not a CLI self-updater, and the current
|
|
465
|
+
command surface does not include `update --self`, `update --check`, or
|
|
466
|
+
`update --apply`.
|
|
467
|
+
|
|
468
|
+
| Platform | Scheduler integration |
|
|
469
|
+
|---|---|
|
|
470
|
+
| **macOS / Linux** | `cron`, `systemd-timer`, `launchd` — update scheduling guidance at [Updating](https://apothem.ahmedgad.com/docs/install/updating/) |
|
|
471
|
+
| **Windows** | Task Scheduler — update scheduling guidance at [Updating](https://apothem.ahmedgad.com/docs/install/updating/) |
|
|
472
|
+
|
|
473
|
+
Updates never silently discard operator edits: matching managed targets are
|
|
474
|
+
backed up before replacement, shared directories are merged child-by-child, and
|
|
475
|
+
unchanged generated content is left untouched.
|
|
476
|
+
|
|
477
|
+
## Uninstalling
|
|
478
|
+
|
|
479
|
+
```shell
|
|
480
|
+
sh scripts/installer/uninstall.sh --harness all # POSIX
|
|
481
|
+
pwsh -NoProfile -File scripts/installer/uninstall.ps1 -Harness all # Windows
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
The uninstall script removes the materialized harness configuration and prompts
|
|
485
|
+
before removal unless `--yes` / `-Yes` is supplied. Install and update backups
|
|
486
|
+
land at `~/.apothem/backups/YYYYMMDDTHHMMSSZ/`.
|
|
487
|
+
|
|
488
|
+
To remove the bundled source tree as well, pass `--remove-source` (POSIX) or
|
|
489
|
+
`-RemoveSource` (Windows); the managed clone at `APOTHEM_HOME` is removed after
|
|
490
|
+
a confirmation prompt. An explicit `APOTHEM_SOURCE` (your own checkout) is never
|
|
491
|
+
deleted.
|
|
492
|
+
|
|
493
|
+
## Website
|
|
494
|
+
|
|
495
|
+
The Apothem project website at [**apothem.ahmedgad.com**](https://apothem.ahmedgad.com/) is the canonical operator guide. It keeps installation choices, harness walkthroughs, CLI reference, architecture notes, pipeline documentation, brand assets, security posture, and release runbooks in the site instead of expanding the root README into a full documentation portal.
|
|
496
|
+
|
|
497
|
+
| Section | What you'll find |
|
|
498
|
+
|---|---|
|
|
499
|
+
| [Home](https://apothem.ahmedgad.com/) | Product summary, harness overview, feature pillars, and start links |
|
|
500
|
+
| [Get started](https://apothem.ahmedgad.com/docs/install/) | Installation, quick start, harness setup, updating, uninstalling, concepts, troubleshooting, FAQ, glossary |
|
|
501
|
+
| [Documentation](https://apothem.ahmedgad.com/docs/usage/) | Day-to-day workflows — writing rules, authoring plans, using helpers, hook development, running the conformity gate, worked examples |
|
|
502
|
+
| [Harnesses](https://apothem.ahmedgad.com/docs/harnesses/) | Per-harness pages for all seventeen supported adapters (see the Supported harnesses table above for the full list) |
|
|
503
|
+
| [CLI & reference](https://apothem.ahmedgad.com/docs/reference/) | Every subcommand · per-artifact-class reference · frontmatter / artifact / settings schemas · registries · conventions |
|
|
504
|
+
| [Architecture](https://apothem.ahmedgad.com/docs/architecture/) | Adapter contract, profile schema, source layout, installation workflow, helpers, concepts, positioning, directory tree |
|
|
505
|
+
| [Pipelines & audits](https://apothem.ahmedgad.com/docs/pipeline/) | The architecture-aware `/plan` pipeline and the eleven-command audit fortress, plus the fifteen-bar pre-emission gate |
|
|
506
|
+
| [Project](https://apothem.ahmedgad.com/docs/security/) | Security posture (Scorecard, webhooks, branch protection, binary-artifacts sweep), brand assets, operational runbooks, engineering policies |
|
|
507
|
+
| [Community](https://apothem.ahmedgad.com/docs/community/) | Roadmap, discussions, code of conduct, contributing guide, changelog |
|
|
508
|
+
|
|
509
|
+
## Release posture
|
|
510
|
+
|
|
511
|
+
The current public release line is documented in
|
|
512
|
+
[`CHANGELOG.md`](https://github.com/ahmed-g-gad/apothem/blob/main/CHANGELOG.md);
|
|
513
|
+
the README stays focused on what the tool does, how to install it, and where to
|
|
514
|
+
find deeper documentation.
|
|
515
|
+
|
|
516
|
+
Release artifacts are tied to the signed release tag and include an sdist and
|
|
517
|
+
wheel, platform runtime archives, SHA-256 checksums, Sigstore cosign
|
|
518
|
+
signatures, SLSA-3 build provenance, and a CycloneDX SBOM as verification
|
|
519
|
+
evidence. The npm package is published with npm provenance.
|
|
520
|
+
|
|
521
|
+
## Contributing
|
|
522
|
+
|
|
523
|
+
Contributions are welcomed. The short version:
|
|
524
|
+
|
|
525
|
+
1. Read [`CONTRIBUTING.md`](https://github.com/ahmed-g-gad/apothem/blob/main/CONTRIBUTING.md).
|
|
526
|
+
2. Open a discussion or issue describing your proposed change before sinking time into a PR.
|
|
527
|
+
3. Follow the codebase's established conventions — every change ships with tests, docs, a CHANGELOG entry, and passes CI in the same PR.
|
|
528
|
+
4. New harness adapters follow the [adapter authoring runbook](https://apothem.ahmedgad.com/docs/runbooks/new-harness-adapter-authoring/).
|
|
529
|
+
|
|
530
|
+
Reporting a security vulnerability? See [`SECURITY.md`](https://github.com/ahmed-g-gad/apothem/blob/main/SECURITY.md) for the coordinated-disclosure protocol.
|
|
531
|
+
|
|
532
|
+
## Community
|
|
533
|
+
|
|
534
|
+
| Channel | Purpose |
|
|
535
|
+
|---|---|
|
|
536
|
+
| [GitHub Discussions](https://github.com/ahmed-g-gad/apothem/discussions) | Open-ended questions, workflow patterns, proposal socialization |
|
|
537
|
+
| [GitHub Issues](https://github.com/ahmed-g-gad/apothem/issues) | Defects, concrete feature requests, anchored clarification questions |
|
|
538
|
+
| [Security](https://github.com/ahmed-g-gad/apothem/security) | Private Vulnerability Reporting (see [`SECURITY.md`](https://github.com/ahmed-g-gad/apothem/blob/main/SECURITY.md)) |
|
|
539
|
+
| [Project website](https://apothem.ahmedgad.com/) | Comprehensive nine-section facade — landing page, get started, documentation, reference, harnesses, architecture, pipelines, project, community |
|
|
540
|
+
|
|
541
|
+
Full channel-routing guidance at [`SUPPORT.md`](https://github.com/ahmed-g-gad/apothem/blob/main/SUPPORT.md).
|
|
542
|
+
|
|
543
|
+
## License & Authors
|
|
544
|
+
|
|
545
|
+
[MIT](https://github.com/ahmed-g-gad/apothem/blob/main/LICENSE) © [Ahmed G. Gad](https://ahmedgad.com).
|
|
546
|
+
|
|
547
|
+
The canonical contributor list is at [`AUTHORS`](https://github.com/ahmed-g-gad/apothem/blob/main/AUTHORS). Third-party licenses are cataloged at [`LICENSES/`](https://github.com/ahmed-g-gad/apothem/tree/main/LICENSES) under the [REUSE](https://reuse.software/) specification.
|
|
548
|
+
|
|
549
|
+
Apothem stands on the harness ecosystem's open foundation: every supported harness is an independent project authored and maintained by its respective creators. The adapter layer translates between schemas; the harnesses themselves are credit to their authors.
|
package/bin/README.md
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<!-- SPDX-License-Identifier: MIT -->
|
|
2
|
+
|
|
3
|
+
# bin/
|
|
4
|
+
|
|
5
|
+
The npm launcher for the apothem CLI.
|
|
6
|
+
|
|
7
|
+
## Contents
|
|
8
|
+
|
|
9
|
+
| File | Purpose |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| `apothem.mjs` | Node shim behind the package's `bin` entry. Locates a Python 3.10+ interpreter, wires `PYTHONPATH` to the self-contained source tree (vendored dependencies first, then the engine), verifies the `click` and `rich` prerequisites, and executes `python -m apothem` with the caller's arguments. |
|
|
12
|
+
|
|
13
|
+
## How it is consumed
|
|
14
|
+
|
|
15
|
+
The root `package.json` maps the `apothem` command to `bin/apothem.mjs`, so
|
|
16
|
+
`npx @ahmed-g-gad/apothem <command>` (or `npx github:ahmed-g-gad/apothem`)
|
|
17
|
+
runs the bundled engine without any package installation beyond the npm
|
|
18
|
+
fetch itself.
|
|
19
|
+
|
|
20
|
+
## Conventions
|
|
21
|
+
|
|
22
|
+
- Node 18+ syntax, ES modules only (`.mjs`).
|
|
23
|
+
- The shim stays dependency-free: only `node:` built-ins.
|
|
24
|
+
- Interpreter probing order: `APOTHEM_PYTHON`, `python3`, `python`, `py -3`.
|
|
25
|
+
- Exit codes mirror the engine's exit codes; shim-level failures exit 1
|
|
26
|
+
with a single actionable message on stderr.
|
|
27
|
+
|
|
28
|
+
## Working in this folder
|
|
29
|
+
|
|
30
|
+
- The interpreter probe and the missing-dependency message mirror
|
|
31
|
+
`scripts/installer/install.sh`. When one side changes, change both in the
|
|
32
|
+
same change-set so the shim and the installer stay in lockstep.
|
|
33
|
+
- The `bin` mapping lives in the root `package.json`. Renaming `apothem.mjs`
|
|
34
|
+
requires updating that mapping and the npm `files` allowlist together.
|
|
35
|
+
- There is no Node test harness in this repository — shim behavior is
|
|
36
|
+
exercised indirectly through the engine's CLI tests. Validate changes with
|
|
37
|
+
`node bin/apothem.mjs --version`.
|