Your agents forget.
Your repo won't.

The agent that shaped your project yesterday knows none of it today. greenline writes each stage into the repo as plain Markdown: decisions, spec, tickets, reviews, evidence. A fresh agent opens the files and picks up cold.

Read the docs first

greenline shares its engineering methods across Codex and Claude Code. Skills work locally; guidance is an optional connector. No code or repository policy is uploaded.

The test is the session after this one.

Close the laptop mid-project. Open a different agent tomorrow. It reads the files, not the chat.

example session
$ cd ~/tracker
$ npx greenline init
Workspace initialized.  ok
Youbuild me a Linear-style issue tracker. keyboard first.
ClaudeBefore any code, one thing decides the data model: can an issue hold two states at once, like blocked and in progress?
Youno. one state at a time. blocked is a flag on the issue.
ClaudeRecorded. Rejected: compound states. Accepted cost: filters read two fields.
+ .greenline/work/001-tracker/decisions.md  revision 1
ClaudeThe main decisions are settled. Writing the spec, pinned to decisions r1.
+ .greenline/work/001-tracker/spec.md  consumes decisions@1
$ greenline status
INIT-001 001-tracker planned tickets 0/3
frontier: TKT-001
ClaudeTKT-001 is ready: the issue list, keyboard end to end. I’ll build it and continue through review.
ClaudeBuilt to its acceptance criteria. Tests green. result_commit recorded.
$ greenline doctor
  no effects
  ok
Codex and Claude Code write the same files. Neither remembers the session: everything each one knew is Markdown in the repo.

What just landed on disk: decisions, spec, tickets, reviews, evidence

Global tickets and reviews keep their identity. An initiative groups related work and its planning documents. A stranger, human or agent, reads those files top to bottom and picks the work up cold.

01 shape

id INIT-007/DEC status complete revision 1
D2  Identity conflict: SSO wins.
    Linking an account revokes the local login.
    Rejected: keeping both sessions alive;
    two sources of truth for identity.
    Accepted cost: linking logs you out once.

Shaping grills the ambiguity out before any code exists. Every decision keeps its rejected alternative, so the reasoning survives, not just the verdict.

02 specify

id INIT-007/SPEC status complete revision 3 consumes [decisions.md@1]
The dashboard authenticates through the provider
handshake, exchanges sessions, and links accounts.
SSO wins identity conflicts, per decisions D2.
acceptance: login round-trip under 400ms, measured.

The spec records settled intent and acceptance, with exact input revisions. Your request authorizes its scope; a consequential unresolved choice comes back to you.

03 build

id TKT-001 status implemented revision 2 consumes [spec.md@3] depends_on [] result_commit 4e2a91c
Provider handshake, end to end, usable on its own.
acceptance:
[x] happy-path login lands a session
[x] bad state parameter is rejected, tested
[ ] round-trip timed under 400ms

A tracer-bullet ticket with no open dependencies is the frontier: what's ready to build now. One ticket, one worktree, test-first. The pinned spec revision means staleness is detected, not discovered.

04 review

id REV-001 verdict findings (1) then VERIFIED
F1  handshake accepts an expired state token.
    reproduction: tests/sso/expired-state.test.ts
    status returns to implementing; revision 2 follows.
r2  VERIFIED  round-trip 340ms, measured.

Review runs in a fresh session against the committed code: the session that wrote the code is never the one that grades it. A claim that can't be proven is recorded as NOT VERIFIED, and the ticket goes back.

05 close

DECISIONS.md the product decisions book, cumulative
PD-1  SSO wins identity conflicts        ← 007 D2
PD-2  linking revokes the local login    ← 007 D2
PD-7  sessions are server-pinned         ← 007 D9

Authorized work closes when its acceptance, review, and verification are supported, with the harvest. Rulings that outlive the initiative land in the decisions book, and the next initiative reads that book before shaping anything, so settled questions stay settled.

The proof is two builds, not a testimonial.

No customers to quote yet. Here is exactly what was built, by what, and what was measured.

meridian, a keyboard-first issue tracker.

Agents built it end to end with greenline, first decision to green tests. On disk when they finished: 21 recorded decisions, each with the alternative it rejected, 205 passing tests, and reviews written by sessions that never wrote the code they graded. The command palette was measured at 29ms over 10,000 issues, 95 of every 100 openings inside that, with the measuring script committed beside the number so anyone can take it again.

pulse, a habit-tracker CLI, and the handoff between them.

The second project was shaped by a fresh agent that had never seen the first. It read the decisions book meridian left behind, applied those rulings to its own questions, and re-decided nothing that was already settled. That handoff, one project picking up another's reasoning cold, is the whole thesis, and it was the hardest part to make work.

These historical runs are recorded with misses included; they do not establish the current pre-beta baseline’s acceptance: the times a skill didn't fire are written down next to the times it did.

Settled ground stays settled.

greenline keeps its own decision records the way it keeps yours: harvested into a book, each ruling with the alternative it rejected and the cost accepted. Three of ours, verbatim:

GD-02

Everything is Markdown a person can open and read raw. Rejected: a database or daemon holding project state.

GD-05

Review runs in a different session, never the builder's. Rejected: self-review; nobody grades their own homework.

GD-08

Every refusal teaches: a doctor message names its own cure. Rejected: bare error codes that send you to the docs.

Read the whole book

Questions before you run it

What does it mean for an agent to carry a project?

It means the agent holds the decisions, the spec, the open tickets and the reviews for work that runs longer than one conversation. Today most of that lives in a chat window and dies with it. greenline writes each piece to a Markdown file in your repository, so the project outlives the session that made it.

Do I have to change how I work?

You keep your editor, your agent and your Git workflow. greenline adds one directory, .greenline/, and three commands you will actually run: greenline status, greenline doctor and greenline sync. The agent writes the files as it works. You answer consequential choices; the agent continues stages your request already authorizes.

Does any of my code leave my machine?

greenline does not upload your code. An enabled garden connector passes facets and unit ids to the garden command, never your code or repository policy. Without it, skills work locally. There is no telemetry. Your coding agent still talks to whatever model you already use, on the terms you already accepted.

What is installed into Codex and Claude Code?

A skill is a written method your agent loads when the work calls for it. npx greenline init installs the default method roster in the selected harnesses. Optional asset integrations remain opt-in. Engineering guidance is garden's, a separate product reached through an optional connector, with no guidance body or service in the package and no library saved locally. Describe the work; your agent chooses methods without a manual skill relay.

What happens when the session dies mid-project?

Nothing is lost if it was written down. The files are on disk and committed to Git, so the next session opens the initiative, reads the decisions and the spec, runs greenline status, and picks up at the frontier: the ticket that is ready to build now.

Start in one command.

Works from your Git repository. greenline does not upload your code.