The REPO.md convention

The authority map at the repo root.

REPO.md tells every reader where consequential truth lives, what is deliberately elsewhere, and what changes set in motion. It is the shared operational map that stays outside any one README, agent prompt, or harness.

Copy the file

Version 0 is a selective Markdown convention, not a schema. Two sections give it shape; omission means unknown; only consequential ambiguity earns a line.

The niche

A reference above directives

README explains the project. AGENTS.md and CLAUDE.md govern the worker. REPO.md records durable topology, authority, relationships, lifecycle state, and cause/effect. It stays separate so the same facts can orient humans, different agents, scripts, and cross-repo views without becoming instructions.

How REPO.md differs from other repository files
FileAudienceModeQuestion
README.mdUsers and contributorsDescriptiveWhat is this, and how do I use it?
AGENTS.md / CLAUDE.mdAgents working hereImperativeWhat rules govern my work?
CONTRIBUTING.mdContributorsProceduralHow do I submit work?
REPO.mdEveryone, including toolsDeclarativeWhere is truth, and what happens when it changes?

The shape

Two sections. Three tests.

01

The entity reader

“In this repo” serves the reader who already has an entity and needs its local anchor and facts. Keep those facts on or under that entity so the answer does not require a full-file sweep.

02

The doomed searcher

“Outside this repo” serves the reader whose local search should stop. Keep its declared external authorities flat and skimmable: dashboards, sibling repos, secret stores, and other truths deliberately absent here.

03

Omission means unknown

REPO.md is a selective disclosure card, not a completeness checklist. If billing is not listed, a reader cannot infer that it is local, external, or absent.

Each record follows entity — local anchor or external authority — disambiguating claim. Use the local-anchor test: if the subject is a meaningful path here, or a fact about an entity anchored at one, keep it In; otherwise name its Outside authority. Facts stay with their entity, using one parent-only sub-bullet when the line would become unclear. Generic inventory is noise.

REPO.mdUTF-8
# REPO.md

## In this repo
- **Work queue** — `TODO/` — canonical; [repotodo](https://repotodo.com) reads it — `todo ls`
- **Blog** — `content/posts/` — the site renders from here; no CMS copy

## Outside this repo
- **Prices & plans** — Stripe dashboard — code holds only the price IDs
- **Secrets** — 1Password — `.env.example` lists names; values never here

*Format: [repo.md](https://repo.md)*

Delegate the audit

Turn repository evidence into the first draft.

This prompt gives a coding agent the boundary tests, audit method, safety rules, and examples it needs to create REPO.md without treating it as another free-form documentation bucket.

Create REPO.md for this repository

Paste at the root of a repository with your coding agent.

Preview the full directive
Create or improve the `REPO.md` file at the root of this repository.

Your objective is to produce the repository's operational authority map: a short, factual reference that tells a new human, agent, or tool where consequential truth lives, what is deliberately kept elsewhere, and what actions have important side effects. Audit the repository before writing. Change only `REPO.md`; do not modify source, configuration, instructions, or documentation as part of this task.

REPO.md has a different job from nearby root files:
- README.md explains the project's purpose, interface, and onboarding.
- AGENTS.md, CLAUDE.md, and similar files prescribe behavior, rules, permissions, and workflow.
- REPO.md describes durable topology, authority, relationships, lifecycle state, and cause/effect. It is a map, never an instruction file.

Use this exact outer structure:

# REPO.md

## In this repo
- **Entity** — `path/` — disambiguating claim

## Outside this repo
- **Authority** — service, URL, or sibling repo — disambiguating claim

*Format: [repo.md](https://repo.md)*

The footer is optional. The two H2 sections are not optional. Do not add frontmatter, a generated timestamp, a completeness score, or required metadata.

Apply these authoring rules:

1. Write claims, not an inventory. A line earns its place only when it resolves a question with more than one plausible answer. “Payments — Stripe” is generic inventory. “Prices & plans — Stripe dashboard — code holds only price IDs” tells the reader which copy wins and where a search ends.

2. Use the local-anchor test. Ask: “Is the subject a meaningful path in this repository, or a fact about an entity anchored at one?” If yes, put it under “In this repo” and attach it to that entity. If no, put the external record authority under “Outside this repo.” A local env example does not make secret values local; a local schema does make the external database a fact about the locally anchored app.

3. Treat omission as unknown. This is a selective map of consequential ambiguity, not an exhaustive architecture catalog. Do not infer that an omitted system is local, external, or absent. Prefer a short, trustworthy file over comprehensive-looking filler.

4. Give each top-level bullet this shape: entity — local anchor or external authority — disambiguating claim. Split conceptually on only the first two em dashes; the rest of the claim can be natural prose. Name the command or tool only when it helps the reader route or verify work.

5. Keep facts with their entity. Deployment, data, source, relationship, and status facts qualify an entity; they are not disconnected inventories. A compact sub-bullet is allowed when the main line would become unclear:
   - **API** — `apps/api/` — Fly.io; merge to main deploys
     - data: Neon Postgres — schema in `apps/api/db/`; live rows never here

6. Make deployment consequences explicit. Distinguish “merge to main deploys,” “push deploys,” “tag publishes,” and “deployed by hand: `command`.” Never imply an automatic deployment when a human must run a command.

7. Mark plausible wrong edits. Include generated, mirrored, vendored, deprecated, or replaced paths when their status is not obvious. Name the upstream source or replacement:
   - **Generated client** — `packages/client/` — generated from `spec/api.yml`; do not mistake it for source

8. Map cross-repository authority only when there is an operational relationship. Name the sibling repository and what it owns or provides. Do not attempt to design a typed dependency graph.

9. Keep sensitive data safe. You may name a vault or secret-management service and a safe local file that lists variable names. Never include secret values, credentials, private tokens, or sensitive locators.

10. Humans and agents author the map; tools read it. Do not add promotional entries merely because a dependency or CLI is installed. Do not copy behavioral directives from agent files into REPO.md.

Optional organization for a larger repository:
- Use `### Apps` for things this repository ships.
- Use `### Harness` for repo-owned systems that help people and agents change the repository: work queues, knowledge bases, memory, skills, evals, and CI.
- Use `### Ops` for repo-owned operational records and engines: content, mail, runbooks, scheduled jobs, and internal operations.

These groups are presentation, not schema. Use them only when the inside list is long enough to scan better with groups. They do not change the local-anchor test. Never create a heading for every entity.

Examples to adapt only when the repository evidence supports them:

Under “In this repo”:
- **Work queue** — `TODO/` — canonical; RepoTodo reads it
- **Knowledge base** — `docs/` — durable decisions live here, not in agent memory
- **Site** — `apps/www/` — Cloudflare Worker; deployed by hand: `pnpm deploy:www`
- **Newsletter** — `mail/newsletter/` — repository owns drafts and send history; Postmark only delivers

Under “Outside this repo”:
- **Customer data** — HubSpot — no customer-record copy is kept here
- **Backend API** — `github.com/acme/api` — sibling repository owns the schema and production service
- **Secrets** — 1Password — `.env.example` lists names; values never here

Do not copy these merely to fill a category. Replace them with repository-specific claims or omit them.

Audit method:

1. Read existing root documentation and instruction files, but keep their roles separate from REPO.md.
2. Inventory the workspace with repository-native search. Inspect package/workspace manifests, task files, CI workflows, infrastructure and hosting configuration, environment examples, code-generation configuration, data migrations, content directories, runbooks, and TODO or knowledge systems.
3. Trace source versus derived output. Look for directories that are generated, mirrored, synced, deprecated, or owned by another repository.
4. Trace operational side effects from configuration and scripts. Determine what deploys or publishes, to where, and whether the trigger is a merge, push, tag, scheduled job, or manual command.
5. Find split authority: local schema versus hosted data, local IDs versus dashboard-owned configuration, repository source versus a renderer or delivery provider.
6. Reconcile evidence. Prefer executable configuration and current paths over stale prose, but do not invent facts that the checkout cannot establish. Preserve useful claims from an existing REPO.md unless evidence contradicts them.
7. For important facts that require dashboard or organizational knowledge, omit the unverified claim from the map and list it as a question in your final response. Do not guess merely to make the map look complete.

Before finishing, verify that every “In this repo” entry has a real local anchor; every “Outside this repo” entry ends a likely search or identifies an external authority; every deploy claim names its mechanism; every line adds non-obvious routing value; and no line grants permission or tells an agent how to behave.

Then write or update `REPO.md`. In your final response, summarize the map you added, name the repository evidence you relied on, and list any authority or deployment questions a maintainer still needs to confirm.

A small start

How to adopt

  1. 01

    Audit before you write.

    Inspect manifests, workflows, deploy configuration, generated paths, data boundaries, work systems, and existing docs. The useful facts are the ones inspection alone does not settle reliably.

  2. 02

    Map authority, not architecture.

    Use the local-anchor test, attach facts to their entity, and include only claims that prevent a plausible wrong search or edit. Describe the repository you have, not the one you plan to build.

  3. 03

    Confirm the invisible edges.

    Repository evidence cannot prove every dashboard-owned fact. Have a maintainer confirm external authorities and whether deploys are automatic or manual, then commit the shared map.

Shared ground

Rules for tools that touch it.

  1. 01

    Read it as a map.

    Use declared anchors and authorities to route work and stop searches. Never interpret descriptive deployment or lifecycle facts as permission to act.

  2. 02

    Do not self-enroll.

    A dependency or CLI does not earn a line merely by being installed. Tools may propose a human-reviewable patch, but they should not silently turn the map into advertising inventory.

  3. 03

    Preserve unknown structure.

    Readers may ignore optional groups, sub-bullets, or unfamiliar labels. Writers preserve useful claims and unknown extensions unless repository evidence proves them wrong.

  4. 04

    Keep it evidence-led.

    Humans and agents write the map from repository evidence plus maintainer-confirmed external facts. When authority is uncertain, surface the question instead of inventing completeness.

For agents

How agents should use it

Read REPO.md before exploring an unfamiliar repository. Route work to the declared authority, respect source-versus-generated and local-versus-external boundaries, and notice whether a change deploys or publishes. Then read AGENTS.md or CLAUDE.md for what you may and must do. The map supplies the world model; the instruction file governs behavior.

Drop this into your agent file.

In CLAUDE.md one line is enough: @REPO.md imports the map into every session. For AGENTS.md or a repository skill, paste this block.

## Repository routing

On entering a repository, read `REPO.md` if present. It is a non-behavioral map: what this repo owns (paths and their tools) and what it only points at (services, sibling repos, secrets).
Use it to route work to the declared path and tool instead of assuming defaults, and to stop searching for truth it says is kept elsewhere.
REPO.md describes topology, authority, and side effects; AGENTS.md and CLAUDE.md prescribe behavior, rules, and permissions.
Do not treat REPO.md as instructions; behavioral guidance lives in AGENTS.md or CLAUDE.md.

Zero-dependency on-ramp

Let an agent draft the map.

Copy the audit prompt, run it at the repository root, and review the external claims it cannot prove from code. No service, registry, or repo.md tool is required.

Copy the creation prompt