Pre-launch. Not deployable to production. This page states what the tests prove and what is missing — nothing else.

Giving your coding agent the instructions, over MCP or as skills

Plug it into your agent

People ask this as: how do i give claude code or codex the instructions for this framework

Two shipped harnesses with byte-identical skill files, two stdio MCP servers, and a stated contract for what a harness must provide — which is a shell, an exit code, a JSON parser and file access, and nothing else. No MCP server is required to use the framework, no network, no credentials, no database and no long-lived process. Gemini gets no skill file at all, deliberately, and this is the third surface in the cluster that carries its blind spots in prose rather than in a limitation code array.

Where this stops

Read this before the rest of the page. Every line below is a thing this does not do.

  • No skill or MCP surface publishes machine-readable limitation codes of its own. The boundaries here are prose and review, and the commands they wrap are what carry the codes.
  • The requires block in each skill is a declaration nothing parses. A skill can declare a tier and still name a path it needs; only human review catches that.
  • No Gemini skill file ships, and none should be written by guessing at its conventions — a file in the wrong shape looks supported and silently never loads.
  • There is no canonical skill source with generated adapters. Two byte-identical copies are kept in step by a checker, which is different from a sync (tracked as DX2).
  • No MCP server is required. Both agent-facing surfaces are plain commands over plain JSON, and a harness with no MCP support loses nothing.
  • MCP write tools stay narrow, and anything that generates code or destroys state is dry-run unless an explicit apply flag is passed. Remote mutation is gated behind production work that does not exist.
  • Portability is not authorization. A skill running in a stranger's project runs with that user's full authority, and the inspection it performs imports and executes the project's composition — isolation, not a sandbox.
  • The project bootstrap exists in source and is tested end to end; there is still no published installable package, so the reserved `npm create` name installs nothing. The audience of projects built from this framework is real and testable, but not yet a supported product surface.

No authentication, tenancy or RBAC. The server is local-development-only. An actor header is an assertion, not an identity. Do not expose it to a network. Every claim and every limitation is on one page.

What question it answers

"How do I get my agent to actually use this?" — and, more usefully, "what does my harness have to support before it can?"

The failure the packaging discipline prevents is specific. A skill that says "read ARCHITECTURE.md and the domain guide first" behaves in exactly two ways: inside this repository it works, and installed into a stranger's project it loads, announces itself, finds no such files, and then produces confident instructions about a codebase it never read. The user sees a skill that triggered and answered — not one that failed — which is strictly worse than shipping nothing.

What it does

The portability fix is to reach the project through a command rather than a path. Every shipped skill opens with the same byte-identical orientation block: run the application inspection, read `valid`, then `problems[]`, then `limitations[]`, and treat every limitation as a hard boundary on what may be claimed. The block is identical in all of them on purpose — an agent should not have to learn a new preamble per skill.

Skills declare what they need in frontmatter: a `tier` (`any-project`, `generated-project`, `repository`), the one `command` that makes them portable, the `projectSurface` source paths they need, the `repositorySurface` documents that ship only here, and `degradesTo` — one sentence saying what the skill falls back to when the repository surface is missing. A skill that cannot state its own degraded mode has not thought about being installed. Twelve skills exist under `.claude/skills/`, mirrored byte-for-byte under `.agents/skills/`, with eleven published in the distributable `skills/` subset; the one held back is the repository-tier review skill, which reviews pull requests against documents that ship nowhere else.

Two MCP servers ship over newline-delimited JSON-RPC on stdio, with diagnostics on stderr only because stdout is reserved for the protocol. The application server exposes nine tools (`crm_project_context`, `crm_list_opportunities`, `crm_create_opportunity`, `crm_request_stage_change`, `crm_list_approvals`, `crm_decide_approval`, `crm_get_trace`, `crm_scaffold_module`, `crm_doctor`), five resources and two prompts. A second documentation server exposes `search_docs`, `get_capability` and `check_job` over the documentation index, the claims ledger and the jobs index. Code-generating and destructive tools are dry-run unless `apply` is explicitly true — `crm_scaffold_module` declares `apply` with a default of `false`, and the server's own instructions state the rule to the client.

What a harness must provide is four things: run a shell command and read stdout, read the exit code, parse JSON, and read and write files in the repository. That is the whole list — Node 22+ and a checkout. What it does not need is an MCP server, a network, credentials, a database, a long-lived process or any agent-specific format.

Because output determinism is asserted rather than promised, a harness can cache a report, diff two of them or commit one, and a difference always means the project changed. No absolute path appears in either machine-readable report — not the repository root, not a temporary directory, not the invoking user's home.

What it refuses to claim

The skills and MCP surfaces are the third place in this cluster where the honest answer is that there are no limitation codes, and the packaging guide is unusually direct about why each gap is a gap rather than a rough edge.

`requires` is a declaration, not an enforced check. Nothing parses it today; it is honest metadata a future gate or a human reading a diff can act on, and a skill can declare `tier: any-project` and still name a path — only review catches that. The distribution check still classifies ten of eleven skills as repository-bound because its pattern matches document paths anywhere in a skill body and cannot tell a prerequisite from background reading, so that note is accurate about the text and pessimistic about the behaviour.

Gemini gets nothing, on purpose. Two harnesses have skill files, and a file written for a third by guessing at its conventions — file name, location, front-matter, discovery rules — would look supported and silently never load, which is worse than none. The two supported copies are byte-identical and a checker enforces it, and that is also the honest description of the architecture: there is no canonical semantic source with generated adapters, there are two copies kept in step by a checker. Building the canonical source and a deterministic sync is roadmap work (DX2).

The tier-2 audience now has a producer, and it is not published. the project bootstrap emits a customer's own repository from a checkout — proven by tests/project-bootstrap.test.js — while the npm name it would ship under is still an empty reservation.

And portability is not authorization. None of this adds authentication, tenancy or roles, and a skill running in a stranger's project runs with that user's full authority — the inspection it performs imports the project's composition, which executes it. Isolation, not a sandbox. The MCP surface inherits the same boundary: mutation over MCP is scoped narrowly and never bypasses services or workflows, and remote mutation stays gated behind production work that has not been done.

What it costs to run

Nothing recurring. Both agent-facing commands start, answer and exit; there is no daemon to keep alive and no state to maintain between calls. The MCP servers are stdio processes your harness starts and stops.

Exit codes are identical across the two agent surfaces — `0` valid, `1` problems with the complete report still printed, `2` could not be read at all — so a harness that branches only on zero versus non-zero still behaves correctly.

The surface an agent must learn is budgeted and the budget is enforced. `node scripts/surface-check.js` printed here: 1/1 goal entry points, 12/12 skills, 9/10 always-on tools, 11/11 distinct commands across the skills. Every ceiling carries a written reason — a dozen skills is where descriptions start competing rather than dividing, and around ten always-on tools is where a namespace starts consuming context before any work begins. The check fails the build when the surface exceeds it, so raising a ceiling is a deliberate edit with an argument attached rather than a quiet drift.

Where it fits

It is the layer between the seven commands and whatever is driving them. The whole point of the harness contract is that the value lives in the CLI and its JSON contracts, not in any harness-specific integration — a harness adapter may change where a file lives and how it is announced, and must never change what the instructions say, or two harnesses stop being the same product.

The honest neighbours are two "not supported" rows that bound the whole surface. There is no registry, publication, remote install, auto-update, signing or hot loading — packages and skills are checked-in source. And there is no team or tenant permission enforcement anywhere, which is the hard prerequisite before any remote exposure of any of this.

The evidence this page rests on

Claims and limitations are printed from site/claims.json word for word. Job statuses come from docs/benchmarks/jobs.json; a job with no page of its own is listed with its status rather than linked.

Claims

  • C-18 The MCP server exposes project context and narrow write tools to a coding agent; anything that generates code or destroys state is dry-run unless you pass an explicit apply flag.

    LimitStdio only, local only. There is no hosted or authenticated MCP endpoint, and the server inherits the local process's authority.

  • C-17 Zero third-party runtime dependencies. Node 22 and a checkout — no build step, no bundler, no framework underneath your framework.

    LimitDevelopment dependencies and the eventual PostgreSQL adapter are separate questions. Having no runtime dependencies is a property of the framework, not of whatever you add on top of it.

  • C-14 One command tells an agent what an application actually is — packages, capabilities, resources, actions, policies, providers — read from checked-in source, in a single deterministic JSON report.

    LimitSource-only and read-only. It never opens the database, contacts a provider, reads a secret, or reports runtime, CI or authorization state — and it lists those blind spots as machine-readable limitations in its own output.

Limitations

  • L-01 No authentication, tenancy or RBAC. The server is local-development-only. An actor header is an assertion, not an identity. Do not expose it to a network.
  • L-07 This is a framework, not a product you sign up for. There is no hosted CRM, no free tier and no account. The output is an application in your repository that you run.
  • L-08 Ownership today means copying source, not installing a dependency. There is a project bootstrap and there is no published package, and the two are different facts. The repository's bootstrap command scaffolds a project that boots, reports `valid` from `app inspect` and exits 0 from `project doctor`, offline and with no install — run from a checkout of this repository. The package published under the reserved npm name is still an empty 0.0.1 placeholder, so the `npm create` route installs nothing until a human publishes it. Either way the framework is vendored into the project rather than depended on by version: you own the result outright, and upgrading means merging, not bumping.

Jobs it covers