alpha · now with Figma tokens import

PROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINEPROJECTSPINE

The context layer your coding agents are missing.

Compile your brief, repo, and design tokens into AGENTS.md, CLAUDE.md, and copilot-instructions from one deterministic source. With drift detection that fails CI before it fails trust.

install the CLI
$ npm install -g project-spine@next

MIT-licensed, fully offline. Node 20+.

01Output

Nineteen files, every agent, all drift-tracked.

Run spine compile once. Everything below is generated with source pointers back to your brief, and hashed into a manifest that catches drift in CI.

./spine.json · sha256 3333f867f40d3e43
  • Repo root
  • AGENTS.mda41e2d0b9c6f7844
  • CLAUDE.mdf0ce8847b1e29a71
  • .github/copilot-instructions.md92b4711f3e6c0d12
  • .project-spine/exports
  • scaffold-plan.mdc8d5faeb7a20e164
  • route-inventory.md3b5f77102e9c41a8
  • component-plan.md7ac2d1b9664fe083
  • qa-guardrails.md4e6a0f51c9d7b312
  • sprint-1-backlog.md51bc28a93f0e6d47
  • rationale.mdb920f47dc651e8a3
  • architecture-summary.mded7a1f30c9b842fc
  • export-manifest.jsondrift-tracked
02The moat

Why not just use Claude?

Claude Code writes an AGENTS.md when you ask it to. Project Spine writes verifiable, versioned, portable agent instructions, and tells you the moment they drift.

Claude Code alone

What you get by default

  • Different AGENTS.md every time you ask. Non-deterministic by design.
  • No memory of the brief you signed three months ago.
  • Writes CLAUDE.mdwell. Doesn't own the Cursor or Copilot file.
  • No sha256 chain, no source pointers, no audit trail.
  • Can't fail CI when your instructions drift from the brief.

Project Spine

What you get by construction

  • Same inputs produce the same spine.json. Byte-identical until a real input changes.
  • export-manifest.json hashes every input and output for lifecycle drift.
  • One source fans out to AGENTS.md, CLAUDE.md, and copilot-instructions.
  • Every rule carries a source pointer back to brief.md#section0/item3.
  • spine drift check --fail-on any turns the contract into a CI gate.
03Capabilities

Everything a real kickoff needs. Nothing you don't.

Alpha today — carrying the primitives agencies tell us they need on day one of a new client project.

01

Deterministic compile

Content-addressable spine.json. Same inputs, same hash. Reviewers can prove why every rule exists.

02

Drift-aware by construction

export-manifest.json plus spine drift check --fail-on any. A contract, not a comment.

03

Portable across agents

Claude Code, Cursor, Copilot, Codex, Aider. One brief, every agent file, zero re-briefing.

04

Design tokens first-class

DTCG or Tokens Studio JSON. Aliases resolve. Tokens drift tracked separately so Figma re-exports surface cleanly.

05

Agent skills shipped

Six SKILL.md files teach Claude Code, Codex CLI, and Cursor to drive Spine end-to-end. One-line install.

Hi, I'm Petri. Project Spine is a solo-maintainer project. I started it because my AGENTS.md files kept going stale the moment the brief moved, and no existing tool treated that as a real problem. If you try Spine and it breaks, or you disagree with a decision I made, email support@projectspine.dev. I read every message.

§ START

Ship your AGENTS.md
like it's code.

Free while in alpha. MIT forever. Three commands and thirty seconds to compile your first brief into an audit-ready operating layer.