AI platform agnosticism¶
Apothem is designed around a single principle: your governance configuration
should outlast any single AI platform. The shared apothem profile (the
source tree under src/apothem/, plus the root CLAUDE.md and
settings*.json) encodes your rules, mandates, hooks, and plans in
platform-neutral form; per-harness adapters under
src/apothem/harnesses/<harness>/ translate it into the format each
of the eleven supported platforms requires (Claude Code, Cursor, Gemini
CLI, GitHub Copilot, Codex, Windsurf, OpenCode, Antigravity, Open-Claw,
Hermes, Qwen Code).
The problem¶
Every AI coding harness has its own config format:
- Claude Code:
CLAUDE.md+settings.json - Cursor:
.cursor/rules/*.mdc - GitHub Copilot:
.github/copilot-instructions.md - Windsurf:
.windsurfrules - Codex:
AGENTS.md
Without apothem, you maintain N separate config files that drift apart over time.
The apothem solution¶
One shared apothem profile (the source tree)
CLAUDE.md
src/apothem/rules/
|
v
Adapter layer (HarnessAdapter protocol — src/apothem/harnesses/<harness>/)
|
+---> Claude Code adapter -> ~/.claude/
+---> Cursor adapter -> .cursor/rules/*.mdc
+---> Copilot adapter -> .github/copilot-instructions.md
+---> Windsurf adapter -> .windsurfrules
+---> ...
You edit the shared profile once, then run apothem update --harness <name>
for each installed harness to propagate the change. apothem harnesses list
prints the installed set.
Why poly + loom¶
The name encodes the design: poly (many AI platforms) woven through a loom (the governance framework: rules, mandates, hooks, and plans crossing like warp and weft). The governance layer is the loom; the harnesses are the threads it weaves.
Portability guarantees¶
Rules marked portability: universal are guaranteed translatable to every
supported harness. Rules marked portability: project-specific may require
per-harness override documentation in the rule body.