db.md
The open standard for databases in plain files.
spec v0.4 · dbmd 0.8.22 · changelog
Your database is a folder of plain text files. Every record is one .md file you can open, read, and edit by hand, and the links between records are written into the text. A capable agent reads those files, writes them, and finds the connections between them by meaning. The agent is the engine, and it gets sharper every time the model behind it improves.
No daemon, no fixed tables, no query language in the middle. No vector store, ever. db.md is an open standard, Apache-2.0, and it stands on its own.
A renewal email lands in sources/. The curator extracts the contact, the company, the meeting, two decisions, and a running task list, then writes the synthesis. Below, a real store from the repo, unedited, opened on the curator's log — every entry links to what it touched, and the links work.
--- type: log ---
# Curator log Append-only timeline of what the curator did, on its 15-minute schedule. Each entry: `[timestamp] verb | object` where the object is a wiki-link. ## [2026-01-28 11:45] ingest | [[sources/emails/2026-01-28-jordan-mills-linear-trial]] Trial recap from Jordan Mills (Linear): Standard plan, USD 8/user/mo, 40 seats, monthly billing. Filed as a vendor email. ## [2026-02-03 09:30] create | [[records/decisions/adopt-linear]] Acme adopted Linear (Standard, 40 seats). Quoted the price/terms from the trial email as the decision evidence. Created the vendor record [[records/companies/linear]] and the AM contact [[records/contacts/jordan-mills]]. ## [2026-05-22 09:20] ingest | Email from Elena Rodriguez (Halcyon): confirms renewal intent, seats 90 → 120; wants to move onto a 2-year term and asks to get the DPA / security review scheduled as their gate to signing. ## [2026-05-22 09:24] update | Set last_touch to 2026-05-22; she is the champion driving the renewal expansion to 120 seats on a new 2-year term. ## [2026-05-22 09:27] update | Recorded the renewal expansion to 120 seats on a new 2-year term (renews July 2026, pending DPA + signature); refreshed summary. ## [2026-05-22 09:30] link | Confirmed champion link to and technical evaluator . ## [2026-05-22 09:33] contradiction | [[records/synthesis/dupes]] Inbound used a secondary alias (e.rodriguez@) vs the on-file address. Flagged as a possible duplicate instead of auto-creating; left for a human to confirm. ## [2026-05-22 15:05] ingest | Transcript of the 14:00 Halcyon security review landed. Attendees: Priya, Elena, Anh. Commercials settled; DPA flagged as the only blocker. ## [2026-05-22 15:10] create | Synthesised the meeting record from the transcript — attendees, decisions, and next step (Gunderson DPA + order form). Linked back to the transcript. ## [2026-05-22 15:25] create | Recorded the 120-seat / 2-year-term terms. Quoted Priya locking the commercials from the transcript as evidence; linked the meeting and the renewal email. ## [2026-05-22 15:35] create | Recorded the decision to engage outside counsel for the DPA. Quoted Priya's "bring in Gunderson" line from the transcript; created the vendor record [[records/companies/gunderson]]. ## [2026-05-22 16:15] ingest | [[sources/emails/2026-05-22-priya-tom-gunderson]] Internal email Priya → Tom approving the Gunderson engagement and pre-flagging a ~USD 3,500 invoice. Linked it into the engagement decision as confirming evidence. ## [2026-06-01 07:05] ingest | [[sources/exports/amex/2026-05-statement]] May Amex statement landed: four vendor rows totalling USD 18,236.40. Created the missing vendor record [[records/companies/google-workspace]]. ## [2026-06-01 07:08] create | [[records/expenses/2026-05-01-linear]] Created the Linear expense (USD 320.00), vendor → [[records/companies/linear]], source → the Amex export. Then created [[records/expenses/2026-05-02-google-workspace]], [[records/expenses/2026-05-03-aws]], and [[records/expenses/2026-05-21-gunderson]] the same way. ## [2026-06-01 07:10] update | [[records/synthesis/dupes]] Checked the four new expenses for date/amount/vendor collisions — none. Logged a clean state. ## [2026-06-01 08:00] update | [[records/synthesis/vendor-spend]] Refreshed the May spend overview from the four expense records; flagged AWS as ~8% above April on S3 egress. ## [2026-06-02 10:35] update | Flipped the engagement item to done and the DPA-delivery item to in-progress after the vendor-spend review confirmed the Gunderson charge posted. ## [2026-06-02 11:00] update | Refreshed the champion profile with the post-review state (terms approved, signature gated only on the DPA). ## [2026-06-02 11:33] validate PASS — 0 errors. Schema `unique:` keys checked; no duplicate warnings.
A structured read over the index.jsonl sidecar for records/contacts/ — never a full-store parse.
The installer is text. Paste this into Claude Code, Codex, or any agent with a shell; it covers a clean start and migrating what you already have.
Read https://www.sevrahq.com/db-md/llms.txt and set up db.md on this machine: install dbmd, run `dbmd spec` to load the standard, then create a store. By default the store is version-controlled, never a bare folder at a global path: that is the design, since the point of db.md is that Git or a sync service can save and carry these files. If this is a git repo and my data already lives here, create the store inside it (for example ./db/) and do not move repo-owned files out without asking me; otherwise git init the store (and offer a remote) or use a folder I sync. Only skip version control if I tell you I want a throwaway store. If I already have notes, exports, or a knowledge base to bring in, evaluate it first and show me a migration plan into sources and records (with synthesis written as records carrying meta-type: conclusion), then migrate it once I approve, preserving provenance and verifying nothing was lost. Moving the data is only half of it: also find whatever connects to that knowledge base (my skills, commands, scripts) and point them at the new store. Don't leave migration-map pages or temp artifacts unless I ask; git is the audit trail. Confirm where the store lives and how it is backed up before you scaffold.
Safe to paste: the install chain is built in CI from tagged commits, checksummed, and signed — the repo has the receipts.
Sibling standard: link.md — identity, signing, grants, and cross-store resolution for db.md stores. A v0 draft, Apache-2.0.