Harness-agnostic substrate
State: open/published
Summary
Section titled “Summary”- SDLC’s artifacts (markdown, schemas, validators, scripts) work without Claude Code.
- Claude is the harness today because it is the best available; the substrate must stay operable by any future CLI, web UI, or alternate agent.
- Abstraction is built proportional to swap risk: heaviest in the LLM-tool dimension (rapid provider churn), lightest for standardized deterministic tools (git, GitHub). This principle owns that rule; P-0004-leverage-best-tool decides what gets leveraged.
- Two LLM-space pressures drive the principle: supplier risk, and the advantage of capturing best-of-breed model performance as the landscape shifts.
Statement
Section titled “Statement”This principle is how the substrate stays able to reach the LLM-provider-agnostic target that P-0003-pragmatic-architecture names. P-0003 owns the target; this principle owns the posture.
Abstraction is built proportional to swap risk. Components that touch LLM-driven agentic coding get a thin, swappable LLM surface. Deterministic tools with standardized interfaces (git, GitHub, TypeScript) are out of scope: use them directly, with no defensive abstraction layer. SDLC’s artifacts (markdown files, schemas, validators, scripts) work without Claude Code. Claude is the harness today because it is the best available; the substrate must stay operable by any future CLI, web UI, or alternate agent that reads the same files and respects the same schemas.
Supplier risk. LLM providers are early in their business phase; end-state pricing and value propositions are unknown. Keeping the ability to change provider, or fall back to open models, reduces risk and long-term cost.
Rapid development. Harness and model progress is fast, and providers share similar API surfaces. Keeping flexibility captures best-of-breed performance as the landscape shifts.
Both pressures are specific to the LLM space. For deterministic tools the swap risk is low and the interfaces are standardized, so the harness-agnostic posture concentrates effort at the LLM surface.
How it applies
Section titled “How it applies”- Skills (the LLM-orchestrated layer) are kept thin. Prose instruction is minimized in favor of the deterministic tails the skill calls; often a skill is a natural-language head over a deterministic tail (S-0004-sdlc-cli-llm-head-deterministic-tail). The tails are harness-agnostic.
- New design decisions ask: would this still work if Claude Code vanished tomorrow? If the answer is “the deterministic substrate yes, the LLM orchestration no”, that is the right shape.
Examples
Section titled “Examples”- Entity validation (
sdlc entities validate, undersolutions/ontological/): pure TypeScript with no Claude dependency. Runs in CI, on a laptop, or under any future CLI. - Entity schemas as Zod TypeScript under
solutions/ontological/lib/model/entities/<type>/schema.ts, projected to plain JSON Schema for any JSON-schema-aware tool. Which language the substrate is written in is P-0012-rust-core-adapters-as-needed’s question; this principle only requires that it carry no harness dependency. - Scaffolding as CLI verbs (
sdlc task create), standalone TypeScript, invokable without an LLM session. - The Obsidian Bases dashboard (
docs/dashboard.base) works in any vault that opens this repo, with no plugin chain.
Implications
Section titled “Implications”- This principle is the canonical source for the harness-agnostic posture; downstream documentation reflects it.
- P-0001-prefer-deterministic-over-llm: the deterministic substrate is what carries across harnesses.
- P-0006-self-hosting-development: SDLC-on-SDLC tests that the substrate works without Claude whenever the deterministic parts run in scripts and CI.
- Substrate, harness, and adapter are defined in
glossary.
Complement to P-0004-leverage-best-tool: that principle says leverage first; this one says how much abstraction the leveraged thing gets.