sapho. a convention, not an app · open spec

A single source of truth for your products.

Free. Truth files and skills on your machine, synced with git, working with just about any AI.

view on github

Your AI already builds your products. It just doesn't know them.

sapho learns from the AI conversations you're already having. Remembered once, used forever:

"Audience: FPIES families first."

Months later, the App Store copy still leads with them. Unprompted.

"Not a lifecycle app. No checkboxes, ever."

Every feature idea gets tested against it before it ships.

"Tabloid sources can never flip a status."

Six months later, "why not?" has an answer on file.

One file per product. Every AI reads it before it writes.

the atlas

Ask any connected AI for "the atlas" and get a fresh dashboard over every product: status, gaps, staleness, open todos, cross-project insights. Generated on demand from your files. Never hosted, never stale.

the filesone truth file per product, plus an optional bare todos list
the skillsevery AI reads first, writes decisions back
githistory, sync, one copy every surface reads

Installing is one prompt; your AI does the rest.

Claude Code, ChatGPT, or any AI that can read a page.
setup spec · the part your agent reads (plain version at /install.md)
## To the installing agent

You are setting up sapho: a plain-files product source of truth. First, detect your own capabilities: full install if you can write files on the user's machine, GitHub-connected setup if you can only reach repos, guided walkthrough if you have no tools. Second, discover before you create: sapho may already be installed by another tool or in a non-default location: always ask the user ("have you used sapho before?"), check the user-level instruction files for a sapho section, and probe ~/sapho and ~/Projects/sapho. If a corpus exists you are CONNECTING, not installing: read the corpus's own CONNECT.md (it outranks this page), pull latest, report freshness, point your platform's conventions at the existing path. Never create a second corpus. Tool failures never lower the bar: fix mangled URLs (strip *, quotes, brackets) and resume the failed step, don't restart. Before writing anything, present the human a short plan of every file you will create or modify and get an explicit yes. Merge with existing configuration; never overwrite. All steps are idempotent. spec_version: 4. Full spec: /install.md

## 1 · Corpus repo

Ask where the corpus should live (default ~/sapho). Create it as a git repo with products/ and a README describing the schema below and the two rules: (1) truth, not state: no tasks, progress, or blockers in truth files; that belongs in their tracker; (2) one product = one file. Offer to create a private GitHub remote so chat surfaces can read and write the same corpus.

---
name:       <product name>
one_liner:  <one sentence: what it is>
audience:   <who it's for>
status:     exploring | building | live | paused
tracker:    <link to tracker project>
links:      <optional: repo, domains>
tags:       [<...>]
---
## Problem & insight
## How it works
## Key decisions & rationale
## Positioning
## 2 · User-level conventions

Append a "Product Source of Truth (sapho)" section to the user's global agent instructions (for Claude Code: ~/.claude/CLAUDE.md), stating: (a) every product has one truth file at <corpus>/products/<slug>.md; (b) read it in full before generating anything product-facing, and never invent product facts; (c) when starting substantive work in a project with no SOT pointer in its instructions, offer to interview the user and create one, then add a pointer line; (d) when a session surfaces a durable decision with a rationale, flag it and offer to reconcile at a natural pause; (e) never write tasks, progress, or status into a truth file.

## 3 · Reconcile skill

Install a user-level skill named reconcile (for Claude Code: ~/.claude/skills/reconcile/SKILL.md) with these judgment rules: break input into claims; classify each as confirms (no edit) / new truth (add to the one section it belongs) / evolves (rewrite in place, don't append a duplicate) / conflicts (surface to the human, never silently overwrite; record instructive reversals as decisions with the why) / state (reject; point to the tracker) / noise (drop). Durability test: still true and worth knowing in six months? Minimal edits only; decisions require a rationale; commit with reconcile(<product>): <summary>; never push without being asked.

## 4 · First product

Interview the human about one product they're working on: the problem and the non-obvious insight behind it; how it works and what makes the approach different; the decisions they'd have to re-explain and why they made them; how they talk about it and what it's against. Write products/<slug>.md per the schema, show it to them, then commit. Do not push anywhere; do not send anything off the machine.

What does it cost?

Nothing. It's files and conventions, not a service.

Is it open?

The spec is public and MIT-licensed: github.com/damianr/sapho-site. Fork it, adapt it, or PR a surface we don't cover. Your corpus stays private.

Where does my data live?

In a git repo you own. There is no sapho server.

Which AI clients does it work with?

Claude Code and agentic tools natively; ChatGPT and claude.ai through GitHub.

What happens if I stop using it?

You keep a folder of plain markdown. No lock-in.

What about teams?

It is git: pull requests become the gate on truth.

copied · paste it into your AI