The model is the replaceable part
If switching LLM means rebuilding your stack, the LLM was never the asset. The thing you had to rebuild was. ———————————— The mistake I kept making I was building "Claude tools". Things that only worked when Claude was on the other end. The day I wanted the same capability in Codex or Kimi, I had to rewrite. Each port drifted. The version I built second was always slightly behind the first. The model isn't the centre of your stack. The contracts you give the model are. ———————————— The pattern that fixes it Three rules. All boring on purpose. 1. Markdown is the contract. A capability is a document the model reads, not a Python wrapper around an SDK. 2. Files are the memory. Shared markdown on disk at a stable path. Every harness reads the same files. 3. CLIs are the tools. Anything deterministic (search, similarity, transforms) is a shell command. Models shell out. No vendor SDK at the surface. No model-specific prompts. No proprietary format. Just files and shell. ———————————— What it buys The model becomes a knob, not a foundation. Hard reasoning task? Reach for the biggest model. Mechanical refactor? Cheapest fast one. Hundred-thousand-line transcript? Whichever has the longest context window today. Same capabilities every time. No port. No drift. The one rule that does the most work Build the interface, not the integration. SDKs are integrations. Markdown contracts, files, and CLIs are interfaces. When in doubt, lean interface. ———————————— Takeaway The model is the replaceable part. Your contracts are the asset. If your toolkit can't survive a model swap, you don't have a toolkit. You have a vendor relationship. ———————————— Full long-read with three diagrams (lock-in vs portable, the three-layer stack, the model-as-knob): → https://www.aris-space.com/documents/tools-and-plugins/the-model-is-the-replaceable-part //A<3