The Hive Mind Playbook
How one operator gave his AI a memory, a nightly dream, and a job: find what moves the needle for the business, and make sure it gets done. This document explains the whole system. Its companion file hands you the template to build your own.
If you are a person: read the tabs left to right. Start Here and The Big Idea use plain words. Every deeper section carries three layers you can switch between: Plain words (anyone can read it), Under the hood (how it actually works), and Copy this (paste-ready text and prompts). Read the plain layer all the way through first. Come back for the deep layers when you build.
If you want your AI to read it: this kit is two files. This one explains the system. The second one, hive-mind-template.html, is the build kit: it holds complete file templates, a step-by-step build path, and a block of instructions written directly to your AI. Give that file to Claude and say: "Read this file and onboard me into building my own hive mind." It knows what to do from there.
Your first working piece takes under ten minutes once your tools are installed: two text files and one habit. You will need Claude, Claude Code, and git; File 2 walks you through setting up all three. That is the Crawl phase in the template. The Profit Engine phase takes about 45 minutes once the loop runs: it interviews you for your real numbers, names the one thing limiting revenue, and starts picking your highest-leverage action every morning. The last phases render it all as one screen and prove every wire is live. Everything in between is what those two files grow into.
Ten words, one system
Every term in this playbook is one of these. If a sentence ever confuses you, come back to this table.
- Brain
- A folder of plain text files the AI reads at the start of every session and writes to as it works. The working memory.
- Memory
- One fact saved as one small file, typed and searchable. The long-term store.
- Lesson
- A mistake that got turned into a written rule so it never happens twice.
- Pattern
- An approach that worked, written down so it gets repeated on purpose.
- Instinct
- A lesson that proved itself so many times it became a standing reflex.
- Dreaming
- An overnight run where the AI reviews the day's work, extracts lessons, and writes questions for tomorrow.
- Module
- One screen in the dashboard that answers one business question.
- Skill
- A reusable step-by-step procedure the AI loads on demand, saved as a text file.
- Playbook
- The best published thinking in your field, distilled into beliefs about YOUR business, every belief citing its source.
- Constraint
- The one factor most limiting revenue right now. The whole system exists to find it and attack it.
Two files, two jobs
This file is the map. It shows you every part of a real, running hive mind: the files, the daily loop, the overnight loop, the dashboard, the skills, and the prompts. Nothing here is theory. Every mechanism described is running in production right now at SwarmSystem, where it operates the whole agency.
The template is the path. It walks you (and your AI) from two text files on day one to a self-learning system with a nightly dream, then aims the whole thing at revenue. Seven phases: Crawl, Walk, Run, Fly, Profit Engine, Dashboard, Wiring. Each phase ends with a checklist that tells you exactly when you are done.
Sensitive details from the production system (client names, money figures, private keys) are not in these files. Every example uses stand-in names and rounded example numbers. The mechanisms are complete; the private data stays private. That trade is deliberate: the value is the pattern, not the data.
Your AI forgets everything, every session
Close the chat window and it is all gone: the decisions, the mistakes, the context. A hive mind fixes that with the oldest technology there is: written notes, read at the right moment. This is how it remembers, learns, and gets smarter while you sleep.
This number is live. It counts the lessons you write in the playable demo on The Loop tab. That is the whole idea of the system, in one number: what you teach it, it keeps.
A brilliant coworker with amnesia
AI tools like Claude are shockingly capable inside one conversation. But every new conversation starts from zero. It does not remember what you decided yesterday, which approach failed last week, or how you like things done. So you repeat yourself, it repeats mistakes, and none of the work compounds.
The fix does not require any special technology. It requires a place to write things down and a ritual for reading them back. Give the AI a set of files it always reads when a session starts, and a rule that it writes what it learned when a session ends. Do that consistently and something remarkable happens: the system starts getting better on its own. Every mistake becomes a rule. Every win becomes a repeatable pattern. Day 100 is meaningfully smarter than day 1.
The system runs on three loops. Capture: everything worth keeping gets written to a file the moment it happens. Act: every work session starts by reading the current state, so the AI acts with full context. Learn: when a session ends, and again overnight, the system reviews what happened and updates its own rules. Capture feeds acting. Acting feeds learning. Learning makes the next capture smarter. That circle is the whole machine.
Concretely: the brain is a git repository of markdown files. A status file (what is happening NOW), an orientation file (what lives where), a lessons file (rules born from mistakes), a patterns file (confirmed wins), and a memory folder (one fact per file, with structured front matter so they can be typed and searched). The AI's session hooks inject the freshest slices of this at session start. A semantic search tool retrieves the rest on demand, so nothing needs to be loaded wholesale. At session end, a review pass writes new lessons. Overnight, scheduled jobs synthesize the day and refresh a daily brief that the next session start injects. Plain text plus git means everything is versioned, portable, diffable, and owned by you.
At the start of every session, read STATUS.md before doing anything. At the end of every session, write what changed to the session log, and add any mistake worth preventing to lessons.md as a one-line rule.
Why this works: it installs the read ritual and the write ritual in three lines. Everything else in this playbook is an elaboration of these three sentences.
The master map
The circle that matters: the session reads the files, the session writes the files, the night improves the files.
A brain that ends every morning with one action
People call this kind of system a second brain. That undersells it. A second brain remembers. This one decides. Every mechanism in this playbook feeds a five-step cycle, and the cycle ends in a move, not a note:
- Intake
- What actually happened: your numbers, your sessions, your logs. Captured the moment it exists.
- Synthesis
- What it means. The night jobs digest the record and surface what you are missing.
- Models
- What usually works. The best published frameworks in your field, distilled into a playbook about YOUR business.
- Action
- The one move. Each morning the system reads your constraint and your playbook and picks today's needle-mover, with the why in your numbers.
- Measure
- Did the number move? The answer flows back into intake, and the cycle sharpens.
The machinery of that cycle lives in The Loop tab. The money end of it, the playbooks, the constraint finder, and the morning action pick, lives in the Growth Stack tab. A system that only remembers is a filing cabinet. A system that runs this cycle is a coworker with a quota.
Why plain text files beat an app
Three reasons. The AI can read and write them natively: no app, no API, no login. You own them forever: plain text will open in fifty years; an app subscription will not. Git gives you time travel: every change to the brain is recorded, so you can see exactly what the system believed on any given day, and undo anything.
Markdown gets structure without lock-in: headings become sections the AI can target, front matter carries machine-readable fields on top of human-readable text, and links between files build a knowledge graph for free. Git adds three system properties that matter at scale: an audit trail for every rule the system writes into itself (who or what wrote it, and when), a sync mechanism between machines with no server to run, and cheap branches for experiments. The production system also mirrors the same folder into an Obsidian vault, so a human can browse and edit the AI's memory visually. Same files, two readers.
mkdir my-brain && cd my-brain git init mkdir brain memory docs docs/session-logs touch CLAUDE.md brain/STATUS.md brain/lessons.md brain/patterns.md
Why this works: the folder IS the product. Every advanced feature in this playbook lives inside this structure; nothing needs to be migrated later.
A day in the life of the loop
Every work session follows the same shape: wake up with context, work with retrieval, close with a lesson. No step depends on willpower. The files and hooks do the remembering.
The day loop. What closes on the right reopens on the left.
Session start: wake up knowing
When a session opens, the AI does not start blank. It reads the status file first (what is happening right now, what is next, what is blocked), then the orientation file (what lives where). The five newest lessons and this morning's brief get pushed into its context automatically. Ten seconds in, it knows what you know.
Claude Code exposes lifecycle hooks: SessionStart fires scripts when a session opens, SessionEnd when it closes, UserPromptSubmit on every prompt. The production system chains ten SessionStart scripts: restore saved state, check which machine holds the working lease, import new memories, inject brain context (last 5 lessons, last 3 patterns, the daily brief if fresher than 48 hours), run a retrieval warm-up, verify sync health. Each is a small script that prints text; whatever a hook prints lands in the AI's context. That is the whole trick: hooks turn files into context at exactly the right moment.
{
"hooks": {
"SessionStart": [{
"hooks": [{ "type": "command",
"command": "cat brain/STATUS.md && tail -n 40 brain/lessons.md" }]
}]
}
}Why this works: one line of shell gives every future session perfect recall of state and recent rules. You can graduate to smarter scripts later; the cat command is already 80% of the value.
The work: retrieve, then act
During work, two habits run. Ask the brain before re-researching: if a question touches past decisions or old gotchas, search the notes first. The answer is usually already there. Save facts the moment they appear: when the AI learns something worth keeping (a preference, a decision, where something lives), it writes one small memory file right then, not at the end.
Memories are typed: user (who you are, how you like to work), feedback (corrections and confirmed approaches, with the why), project (active goals and decisions), reference (where things live outside the vault). One fact per file keeps writes cheap and retrieval precise. An index file holds one line per memory and loads every session; bodies load only when relevant. Retrieval is semantic search over the whole corpus (brain, memories, logs, guides), returning the top-k matching chunks formatted for prompting. The standing rule that makes this scale: never load the corpus wholesale, always query it. Standing context is a budget; retrieval is how a brain with ten thousand files stays fast.
--- name: prefers-plain-language-reports description: Reports must read at 5th-grade level, no jargon type: feedback --- The operator rejected a report for using the word "conversions". **Why:** their clients are tradespeople, not marketers. **How to apply:** write "booked jobs" instead. Translate every technical term in the same sentence it appears.
Why this works: the front matter makes the fact findable by type and description; the body carries the why and the how-to-apply, so the fact changes behavior instead of just existing.
Session end: close the loop
Before the session closes, two writes happen. A session log: what was done, what is unfinished, what the next session should do first. And a review: the AI re-reads its own session and asks "what mistake here deserves a rule?" Up to three new lessons get written. Tomorrow's session start injects them automatically. That is the moment learning actually compounds.
In production this is automated: a SessionEnd hook runs an AI review over the transcript and appends candidate rules to lessons.md. Two safeguards keep self-written rules honest. First, every write is receipted in an append-only ledger (which lane wrote it, when), because a file that every future session trusts must have an audit trail. Second, rules graduate: an auto-written rule starts as "watched"; it becomes standing when evidence keeps confirming it, and only a human verdict removes it. The system can teach itself, but it cannot silently rewrite its own constitution.
Review this work session as a critical observer. 1. List any mistake, wrong assumption, or wasted effort. 2. For each: write ONE rule (max 2 sentences) that would have prevented it. Format: "### [date] - [rule title]" then "**Rule:** ..." then "**Why:** what happened". 3. Write at most 3 rules. Only rules a future session can act on. 4. Append them to brain/lessons.md. Do not edit existing rules.
Why this works: capping at three forces selectivity, the format makes rules injectable, and append-only protects history. A lessons file that grows by three focused lines a day is worth more than a journal nobody reads.
Run the loop with your hands
This panel is a tiny working model of the whole system. Type a mistake, end the session, and watch it become a rule. Then start a new session and watch the rule come back as context. Twenty seconds, and you will feel why this compounds.
lessons.md (the file on disk)
Next session's context (what the AI wakes up with)
The hand-off, in order
The night loop has its own tab (Dreaming) because it earns one. What belongs here is the hand-off: how a day of work becomes something the night jobs can digest. The order matters more than the tools, because each step feeds the next.
| # | Hand-off step | What breaks if you skip it |
|---|---|---|
| 1 | The session log gets written at close: did, open, start-next-with. | The night jobs read a day that never happened. To the auditor, silence looks like nothing got done. |
| 2 | The search index rebuilds so today's files are findable. | Tonight's synthesis quotes last week and calls it today. |
| 3 | The insight agent audits the fresh record for blind spots. | You keep walking past the same problem with fresh confidence. |
| 4 | The dreaming job synthesizes: what happened, lessons, tomorrow's questions. | The record accumulates but never becomes leverage. |
| 5 | The distiller compresses both reports into one morning brief, stamped with its date. | You get two long reports instead of one short answer, and you stop reading them by Thursday. |
The last rule of the hand-off: the brief only shows itself if it is younger than 48 hours. A stale brief is treated as "the job did not run." The system would rather admit silence than serve you yesterday's thinking as today's.
The content of the night jobs (the auditor prompt, the dreaming prompt, the graduation of self-written rules) lives on the Dreaming tab. This panel is just the choreography.
Three machines turn files into leverage
Everything between "the work got recorded" and "the AI woke up smarter" is done by three data processors. Each comes in two versions. The day-one version is a prompt: your AI does the job by hand when you ask, no code, nothing to install. The grown-up version is a small script on a schedule: same job, zero willpower. The template ships the prompts; you graduate to scripts when the habit is real. Ours run as scripts every night. They started as prompts.
The full cycle. The processors below are the plumbing between the stations.
The distiller: a day becomes a brief
The distiller takes everything the night jobs wrote and compresses it into one short morning brief: what happened, what to worry about, what to ask today. One file, under 40 lines, dated. Your next session starts with it already loaded. The self-test that says it works: the brief names yesterday's specific work. If it could have been written about any week, the distiller is reading the wrong inputs. And the simplest liveness check of all: the brief carries today's date at the top. No date means no run: run the night job by hand and fix the schedule tonight.
Ours is a script that runs after the audit and the dreaming job: it reads their two reports, extracts the sections a morning decision actually needs, writes brain/daily-brief.md with a generated-at stamp, and exits. The session-start hook checks that stamp and injects the brief only when it is younger than 48 hours. Two details carry most of the reliability: the brief always overwrites (an appended brief grows into a report nobody reads), and staleness is measured from the last successful write, never from the last attempt. A job that fails quietly for a week must look like silence, not like news.
Read the newest report in reports/ and my last session log. Write brain/daily-brief.md, under 40 lines, dated today at the top: 1. WHAT HAPPENED: 3 bullets, each naming a file or commit. 2. WORTH WORRYING ABOUT: the one thing an outsider would flag. 3. TODAY'S QUESTION: one question that would change priorities if answered honestly. Overwrite the old brief completely. If the inputs are older than two days, write only: "BRIEF STALE: night jobs have not run."
Why this works: the stale branch is the important line. Teaching the distiller to admit silence is what makes the brief trustworthy enough to act on.
The librarian: ask, never reload
The librarian answers one question: "have we dealt with this before?" Instead of re-reading the whole brain every session (impossible once it grows), the AI queries it and gets back the five most relevant notes. The self-test: ask about a decision from three weeks ago. If the right note comes back in one query, the librarian works. If you find yourself re-explaining old context to your AI, it does not.
Ours is a search command over the whole corpus: brain files, memories, session logs, and generated guides get chunked, embedded, and indexed by a nightly rebuild, and a query returns the top matches formatted for prompting, each tagged with its source file. The standing rule that makes it matter is written into the constitution: never load the corpus wholesale, always query it. Standing context is a budget. The day-one version needs none of this: your AI greps the brain folder and reads what it finds. Grep gets you to a few hundred files; embeddings are the upgrade you install the first time grep misses something you know is in there.
Before answering my next question, search the brain first: 1. Look in brain/lessons.md, brain/patterns.md, brain/MEMORY.md, and the 10 newest files in docs/session-logs/. 2. Quote up to 5 passages that bear on the question, each with its file name. 3. Answer using those passages first. Say explicitly if the brain holds nothing relevant: "no prior art in the brain." Never answer a question about our own history from your general knowledge alone.
Why this works: "no prior art in the brain" makes the empty result honest instead of invisible, so you learn what the brain is missing while you use it.
The ingester: borrowed brains, banked
The ingester takes outside knowledge (a book chapter, a talk, an article) and banks it: a row in your library file naming the source, and a sharper belief in your playbook, written in your words, applied to your business. The self-test: a month later, a pricing question comes up and the answer cites both the framework and your own history. If ingested knowledge never resurfaces in decisions, it was collected, not banked.
The grown-up version is a staged pipeline, and each stage is a small job with one verb: discover (watch chosen authors' public feeds for new material), fetch (pull the transcript or text; a transcript fetcher is the honest prerequisite here), clean (strip timestamps and noise), enrich (tag each chunk with topic and source), embed (index it into the same search the librarian uses, in its own namespace), distill (re-synthesize the living playbook so the new material sharpens the beliefs). The namespace detail matters most: keep borrowed knowledge separate from your own history, so a retrieval can be scoped to "my history", "the playbooks", or both, and the answer can say which is which. The other honest prerequisite: a local database or index for the embeddings. Neither exists on day one, and neither is needed on day one.
I just finished a source (book chapter, video, article). Help me bank it before it evaporates. 1. Ask me: author, title, link, type. Add the row to knowledge/library.md. 2. Ask me: which 2 or 3 ideas are actually worth keeping, in my own words? Push back if I recite instead of translate. 3. For each idea ask: what would this change about OUR offer, OUR leads, OUR money model, or OUR delivery? If the honest answer is nothing, it does not enter the playbook. 4. Update knowledge/playbook.md: sharpen the belief, cite the new row, update the date. 5. Never paste passages from the source into any file. Ideas in my words only. The author gets named; the content stays theirs.
Why this works: step 3 is the filter. A library grows by collecting; a playbook grows by deciding what the collection changes. Only the second one makes money.
What the system does while you sleep
The day loop captures. The night loop digests. Scheduled jobs review the day's record, hunt for blind spots, extract lessons, and write a morning brief. You wake up to a system that already thought about yesterday.
The night loop. By morning, yesterday has already been turned into leverage.
The insight agent: an outside auditor
Once a night, an AI job reads the state of the whole operation and plays the role of a blunt outside auditor. Its one question: "what is being missed, neglected, or wrongly assumed correct?" Because it runs with fresh eyes and no attachment to the day's choices, it catches things the busy daytime sessions walk past.
Mechanically it is a scheduled script (cron on any machine) that gathers inputs (recent logs, status files, key metrics), runs one AI call with the auditor prompt, and writes an HTML report to a reports folder. A second small script distills the report into the daily brief. The important engineering choice is the freshness gate: the brief only surfaces if it is younger than 48 hours. A stale brief is treated as "the job did not run", never shown as if it were today's thinking. Stale intelligence presented as fresh is worse than none.
You are an objective external auditor reviewing this operation. You have the day's session logs, the status file, and recent decisions below. Be direct and specific. 1. What is being missed, neglected, or assumed correct that deserves scrutiny? 2. What pattern in the last 7 days would worry an outsider? 3. What single question, if answered honestly, would change priorities tomorrow? Write it as a short report. No praise. No hedging.
Why this works: "no praise, no hedging" plus the outsider frame breaks the AI out of assistant politeness. You want the auditor, not the cheerleader.
Dreaming: yesterday becomes leverage
The dreaming job looks back at the last 24 hours of actual work (what changed, what shipped, what broke) and writes three things: what happened, lessons worth carrying forward, and research questions for tomorrow. That third one is the sleeper hit. Good mornings start with good questions, and the system wakes you up with three of them already written.
Dreaming is strictly read-only: it studies git history, session artifacts, and reports, and it writes only its own report. It never edits code or rules directly; anything executable it discovers becomes a proposed task for a daytime session. Evidence is gathered cheap-first (git log and status before any file reads), the time window is stated explicitly in the report, and every lesson must cite the evidence that produced it. Lessons without receipts are opinions.
Window: the last 24 hours. Evidence: git log, session logs, and reports from that window (read-only; change nothing). Write a morning report with exactly these sections: ## What Happened - 3-6 bullets, each naming its evidence ## Lessons Worth Carrying Forward - each lesson cites the specific event that taught it ## Research Questions for Tomorrow - 3 questions that, if answered, would most improve the next 7 days Be concrete. A lesson without evidence is an opinion; cut it.
Why this works: the fixed three-section shape makes reports comparable across weeks, and the evidence rule keeps the dream honest. This prompt is the single highest-leverage automation in the whole system.
How self-written rules earn trust
A system that writes rules into its own brain needs a discipline, or it slowly fills with noise. The production system uses a three-stage graduation:
| Stage | What it means | How it moves |
|---|---|---|
| Watched | Auto-written by the nightly review. Injected into sessions, but flagged as unproven. | Evidence for or against accumulates in daily work. |
| Standing | Confirmed by repeated evidence. Treated as law by every session. | Standing is a fact about evidence, not an approval. |
| Removed | Judged wrong or obsolete. | Only a human verdict removes a rule. The system never silently deletes its own law. |
Companion mechanism: every write to the lessons file is receipted in an append-only ledger recording which lane wrote it and when. If a rule ever looks wrong, the receipt shows exactly where it came from.
Every file, and why it exists
The whole system is a folder. Here is the folder, file by file, with the job each one does. Complete paste-ready versions of every file live in the companion template.
my-brain/
├── CLAUDE.md the constitution: rules the AI always follows
├── brain/
│ ├── STATUS.md NOW / NEXT / BLOCKED, under 50 lines, read first
│ ├── HOME.md orientation: what lives where, task routing
│ ├── lessons.md mistakes turned into rules (append-only)
│ ├── patterns.md confirmed wins worth repeating
│ ├── MEMORY.md the index: one line per memory
│ └── daily-brief.md what the night loop wrote (48h freshness gate)
├── memory/ one fact per file, typed front matter
├── docs/
│ ├── session-logs/ one log per session: did / open / start-next-with
│ └── decisions.md significant decisions and their why
├── skills/ reusable procedures the AI loads on demand
└── .claude/
├── settings.json hooks: what runs at session start and end
└── rules/ path-scoped rule files (loaded by context)CLAUDE.md: the constitution
Plain: one file of standing rules the AI reads automatically in every session. If a rule matters always, it goes here. If it only matters sometimes, it goes in a skill or a rules file instead, because this file is a budget: every line costs attention in every session.
Under the hood: Claude Code auto-loads CLAUDE.md from the project root. The production constitution carries: the session startup protocol (read STATUS, read HOME, check reminders, state the current task before executing), a folder map, behavioral rules (edit before create, never commit secrets, read a file before editing it), memory-type definitions, and pointers to on-demand context. The standing-context discipline is written into the file itself: anything retrievable on demand must NOT be always-loaded, and adding a new always-loaded file requires a recorded reason. The constitution stays under a few hundred lines forever.
brain/: the working memory
STATUS.md is the single most important file in the system. Three headings: NOW (what is in motion today), NEXT (queued), BLOCKED (waiting on what). Kept under 50 lines by moving history to a dated log. Every session reads it first; every session updates it before closing. If the whole system disappeared except this file and the ritual around it, you would still keep half the value.
HOME.md is orientation: a directory map and a task-routing table ("for content work, load these two files; for client work, load that folder"). It answers "where do I look?" so the constitution does not have to.
lessons.md and patterns.md are the learning organs: mistakes turned into rules, wins turned into repeatable approaches. Both append-only, both dated, both written in a fixed format so hooks can inject the newest entries mechanically.
MEMORY.md is the index: one line per memory file with a hook phrase. The index loads every session; the bodies load only when a task makes them relevant. That split is what lets memory grow unbounded without slowing anything down.
memory/: the long-term store
Plain: one small file per fact. When the AI learns something worth keeping, it writes the file immediately and adds one line to the index. Five types cover everything: user (who you are, preferences), feedback (corrections and confirmed approaches, with the why), project (active goals, status, decisions), reference (where things live outside the vault), auto-trigger (routing rules: "when X comes up, load Y").
Under the hood: the discipline that keeps this store healthy: check for an existing file before creating a duplicate, update rather than fork, delete what proves wrong, convert relative dates to absolute ones. Never save what the repository already records (code structure, git history); save the why and the context that is not derivable. Link related memories to each other by name so retrieval can hop between them.
The global layer: you, everywhere
Plain: some memory belongs to YOU, not to any one project: how you like to communicate, standing corrections, your tools. That lives in the AI's global user directory (for Claude Code, ~/.claude), so every project you open already knows you.
Under the hood: the global layer carries three things. A user-level memory directory with the same typed-memory format as the project layer. Global skills (procedures useful in every project). And user-level hooks and settings that apply everywhere. The rule of thumb: project layer holds what is true of the project, global layer holds what is true of you. When in doubt, start project-local; promote to global the second time you need it elsewhere.
Session logs and the decisions file
Plain: every session ends with a short log: what got done, what is still open, and the one thing the next session should start with. The next session reads the newest log as its handoff. Significant decisions also get one line each in a decisions file, with the why, because six months later nobody remembers why.
Under the hood: the log format is fixed so machines can parse it: Completed / Left open / Start next with. A session-end hook can verify the log exists before allowing close, sync its highlights into a status board, and trigger the search-index rebuild so tonight's dreaming job sees today's record. The logs folder becomes the system's episodic memory: the dreaming job reads it, the audit trail cites it, and you can reconstruct any week from it.
The dashboard: the brain's face
The files are the brain. The dashboard is how a human looks at it: one screen per business question, grouped by the part of the business it serves. Hear this clearly first: you do not need it. The markdown brain alone is a complete product. Build the dashboard when a question you keep asking deserves a permanent screen.
Ten groups, one flow
The production dashboard runs about 227 screens in 10 groups, ordered the way money flows through the business: MONEY (where cash stands) then SALES (deals in motion) then MARKETING (demand coming in) then GROWTH (the long game) then COMMAND (what matters today) then AGENT OPS (the AI workforce) then TEAM OPS (the human workforce) then KNOWLEDGE (what the org has learned) then SYSTEM (is the machine healthy) then PERSONAL (is the operator healthy). Your groups will differ. The idea transfers: group screens by the business question they answer, and order the groups by how value flows.
Technically it is a local Node server rendering vanilla JS modules, one file per screen. Three architectural rules do most of the work. A registry: every module registers in one place; an unregistered module simply never renders, which makes "what exists" a queryable fact instead of folklore. A data registry: every outside data feed is declared once with its source, schedule, and freshness rule; coverage is enforced (a feed that is not classified is a failing build). Guides from facts: module documentation is regenerated nightly from the code itself (endpoints, data files, neighbors), so the docs cannot rot. None of this needs a framework; the discipline is the architecture.
// sections.js - THE single source of truth for what exists
const SECTIONS = {
money: { title: 'MONEY', modules: ['cashboard', 'runway'] },
command: { title: 'COMMAND', modules: ['today', 'action-hub'] },
system: { title: 'SYSTEM', modules: ['feeds', 'nightly'] },
};
// render loop: only what is registered can appear
// adding a module = one line here + one file in modules/
// a module not in this object DOES NOT EXISTWhy this works: every "mystery screen" and orphaned feature in a growing system traces back to registration being optional. Make the registry the only door.
Four archetypes cover every module
227 modules, four shapes. Learn the four, and you can build the 227.
When you plan a new screen, name its archetype first. A display is an afternoon of work. An integrator is a weekend (auth, scheduling, freshness). A state machine needs a data file that survives restarts. An agent lane needs a prompt, a schedule, and a place to write. Knowing the shape before you start is the difference between a module and a swamp.
The Action Hub: needs-you-now
Every automated audit in the system files its findings into one queue: the Action Hub. Each item is something that needs a human decision. Items carry an age badge (DAY 1, DAY 4, DAY 9) so neglect is visible, and items whose cause disappears get auto-resolved so the queue never fills with ghosts. One queue, aged honestly, beats ten dashboards you have to remember to check. What feeds the top of this queue each morning (the constraint, the playbooks, the one picked action) is the Growth Stack tab.
The mechanism is a single JSON state file tracking each item across audit runs: first-seen date, last-seen date, status. Every audit run reconciles: an item seen again keeps aging (its DAY N badge is first-seen based), an item that stops appearing is marked auto-resolved, and a genuinely new item starts at day one (badges suppress for the first two days so the queue is not noisy with things that fix themselves). Writes are atomic (write temp file, then rename), because a state file that every audit touches will eventually be corrupted by a crash mid-write if you write in place.
{
"items": {
"feed-freshness:example-source": {
"firstSeen": "2026-08-01",
"lastSeen": "2026-08-09",
"status": "open", // open | resolved | auto-resolved
"title": "Example source has not synced in 8 days"
}
}
}Why this works: age is computed, never entered. The badge that says DAY 9 is arithmetic on firstSeen, so the system cannot lie to itself about how long something has been ignored.
One group built end to end: Knowledge
Here is one complete group so you can see all four archetypes cooperating. The KNOWLEDGE group turns everything the operation learns into searchable, reusable memory:
| Screen | Archetype | What it does |
|---|---|---|
| Knowledge Graph | Display | Renders the brain corpus (memories, procedures, docs) as a searchable graph. Reads the same files the AI reads; adds nothing. |
| Library | Integrator | Ingests outside expertise (books, talks, published playbooks) into indexed source material on a schedule. |
| Playbook Cards | Display | Surfaces the indexed knowledge as one-idea cards, each tied back to its source. |
| Backfill Queue | State machine | Tracks which sources are ingested, pending, or failed, across days, with ages. |
| Review Lane | Agent lane | A scheduled AI pass applies the ingested frameworks to a live business question and files its answer for human review. |
Notice the flow: the integrator feeds the index, displays make it visible, the state machine keeps ingestion honest, and the agent lane turns stored knowledge into applied judgment. Every group in the system is some arrangement of these same five roles. Copy the arrangement, not the screens.
Proof lanes: is the machine actually running?
A system with this many moving parts needs one honest answer to "is it all working?" The production answer is proof lanes: every claimed mechanism (a feed syncs, a nightly job runs, a module self-reports) gets a computed verdict: PROVEN (fresh evidence exists on disk), STALE (evidence exists but is old), or DECLARED ONLY (the wiring is claimed but no evidence has ever landed). Verdicts are computed from artifacts and their timestamps, never hand-written. A nightly audit re-checks every lane and reports drift.
The Growth Stack: aimed at revenue
Everything before this tab makes the system smart. This tab makes it useful in dollars: six modules that place your business on a scaling roadmap, learn the best published business thinking, find the one thing limiting your revenue, and pick the action that attacks it, every single morning.
You have probably bought a course that told you what to do, and a planner that watched you not do it. The stack closes that gap by wiring the two together: the knowledge lives next to your real numbers, and the morning ritual will not start until it has picked one move and said why. It never asks you to be inspired. It asks you to do one thing before lunch.
The stack. Knowledge, your numbers and your stage meet in the middle, and what comes out is one action.
The Scaling Roadmap: which problems you are allowed to have
Before anything asks what to do, something has to ask where you are. Two businesses can book identical revenue, one running with two people and one with twenty, and they do not have the same problem. The advice that fixes one wrecks the other. This module places you on a ten stage roadmap, then hands every other module the constraint that actually belongs to your stage, along with the list of things you are not allowed to work on yet.
That second list is the valuable half. Most owners are not short of ideas. They are working three stages ahead, on the thing that will matter next year, while the thing that matters this quarter sits untouched.
Built on Alex Hormozi's $100M Scaling Roadmap, which he gives away free at acquisition.com. The guide ships in this kit as scaling-roadmap.pdf. Take his free quiz to get the edition matched to your own stage.
The guide brackets stages by role and headcount, not revenue, and that is the detail most people get wrong when they build this. It publishes no revenue numbers at all. Ours places on three axes and says which one won: headcount and the role the owner actually plays (primary), a revenue band (a proposal, yours to edit), and the free quiz result if there is one. When the axes disagree the module says so on the screen and takes the lower stage, because a stage you have not earned hands you the wrong constraint, and the wrong constraint costs a quarter.
Confidence ages. A placement is a claim with a date on it. Past 45 days it renders STALE rather than confident. Same honesty rule as everywhere else in this system: stale beats hidden, and both beat a confident wrong answer.
Where it actually bites: the morning action picker refuses any action that matches a stage anti-priority, and names the one it hit. That is the whole difference between a poster and a module. A poster tells you your stage. A module stops you doing stage six work in stage three.
The rule that keeps it honest: the free guide details three stages, the one you are in, the one before and the one after. The other seven are names only. Every section the guide does not cover is written as "name only, no guide content" and left empty. Nothing fills those in from imagination, including the AI.
Place my business on the scaling roadmap. Ask these one at a time, and never guess an answer: 1. How many people work here, counting you, part-timers and contractors? 2. What job do you actually do most days: doing the work, training people, managing people, or managing managers? 3. What did the business bring in last month, total? 4. Have you taken the free Scaling Roadmap quiz? What stage? 5. In one sentence, what feels most broken right now? Place me by headcount and role FIRST, the revenue band second, the quiz third. If they disagree, say which said what and take the LOWER stage. Write roadmap/stage.md with today's date and the confidence. If my stage is one the guide does not detail, write "name only, no guide content" and invent nothing. Finish by telling me my stage, its constraint, how I graduate, and what is off the table until then.
Why this works: five questions, three axes, and a written rule for what to do when they disagree. The rule is the part that makes it repeatable. Without it, every re-run drifts toward whichever number looked best that month.
The Constraint Finder: what actually limits you
Your AI interviews you: revenue last month, leads, close rate, average sale, your own hours. Then it does the arithmetic out loud and names the one factor most limiting revenue, in a sentence that cites your numbers. It also writes down the anti-priorities: the tempting projects you are not allowed to touch until the constraint moves. Businesses rarely stall from too few ideas. They stall from working on the wrong three at once.
This module inherits your stage from Module one and treats that stage's constraint as the default hypothesis. The interview may override it, but only by citing a specific number. The staging thinking is Hormozi's; the interview, the verdict file and your numbers are yours.
Ours is a dashboard screen that reads live revenue evidence and reconciles it against the stage placement from Module one, then names the constraint, the next moves, and the anti-priorities. The part worth copying is its honesty states: when the evidence is thin it shows an UNVERIFIED badge instead of a confident guess, when two evidence sources disagree it says so on the screen, and a trajectory only renders once it has three months of history. A constraint finder that guesses confidently is worse than none, because you will reorganize your quarter around it.
Needle math: leads x close rate x average sale should roughly equal revenue. When the interview numbers do not reconcile, that gap is usually the first finding: the business does not know one of its own four numbers, and the constraint verdict says which one to go measure.
Interview me, one question at a time, and write the results to roadmap/constraint.md. Never guess a number; ask me. 1. What was revenue last month, roughly? 2. How many leads (real inquiries) came in last month? 3. Of the people you quoted or pitched, what share bought? 4. What does the average sale come to? 5. How many hours a week do you personally work in the business, and what eats most of them? Then: do the arithmetic out loud (leads x close rate x average sale, next to stated revenue; if they disagree, ask why). Name the constraint in ONE sentence, citing my numbers. Pick one: not enough leads / not closing enough / price too low / cannot deliver more / the owner is the bottleneck. Write the file with three next moves and at least one anti-priority. Finish by reading me the verdict and the first move.
Why this works: the forced-choice list keeps the verdict falsifiable, and the anti-priority line is the part you will thank yourself for in week three.
The Offer module: is it easy to say no to you?
One worksheet holds your offer: what you sell, the price, the promise, and four honest self-ratings that expose where it is weak (how big the result is, how sure the buyer feels, how fast they see something, how much work they carry). Most owners have never written their offer down in one place. The act of filling the page usually finds the weak rating without any AI at all.
Built to be used with Alex Hormozi's book $100M Offers. The teaching (how to raise each rating) lives in the book and the free trainings at acquisition.com; your answers live in your file.
Ours is a multi-tab workspace that walks the book's framework end to end and adds an AI scan: it scores the current offer, keeps score history so changes are measurable, and files its critique next to the score. The transferable pattern is smaller than the workspace: keep the worksheet in the brain, next to your numbers. When the offer file and the constraint file live in the same folder, the morning action picker can connect them ("close rate is the weak number and the buyer-certainty rating is your lowest: today's move is on the offer").
Needle math: [LEADS] x [CLOSE %] x [$ AVG SALE] = revenue. Now raise close rate ten points and run it again. That difference is what the offer worksheet is competing for each month.
Read playbooks/offers.md and roadmap/constraint.md. 1. Which of the four ratings is lowest, and does the constraint verdict agree that this is where revenue is leaking? 2. Propose ONE change to the offer that attacks the lowest rating. Small enough to test this month. Name what number should move (close rate, average sale) and by roughly how much. 3. Update the Next Move line of playbooks/offers.md. Do not propose a rebrand, a new service, or a website. One change, one number, one month.
Why this works: the banned list at the end is doing the heavy lifting. Offer work dies by turning into a redesign project.
The Money Model module: the second sale
Four rows: what gets a stranger to buy the first time, what you offer right after they buy, what you offer when they say no, and what they pay you monthly. Most small businesses have one row filled and three saying "nothing." That is not a failure, it is the opportunity map: each empty row is revenue that requires no new customers, only a second question asked at the right moment.
Built to be used with Alex Hormozi's book $100M Money Models. The teaching lives in the book (acquisition.com); your rows live in your file.
Ours walks the full structure (attraction offers, upsells, downsells, continuity, and a 30-day check on each) as dashboard tabs with an AI analysis lane. The transferable heart is one comparison: what a new customer is worth in the first 30 days versus what it costs to win one. When worth is not comfortably above cost, paid growth is off the table and the empty rows are the only lever that fixes it without more leads. The worksheet forces that comparison onto one page where the morning picker can see it.
Needle math: a new customer is worth [$X] in 30 days; winning one costs [$Y]. If X is less than three times Y, the next move probably lives in this file, not in ads.
Read playbooks/money-models.md and roadmap/constraint.md. 1. Which empty row would add revenue soonest, given what we already deliver? (An add-on we already do informally counts.) 2. Draft the second question: the exact sentence we would say right after a customer buys, offering that row. Plain words, no pressure, priced. 3. Estimate: if 3 in 10 customers said yes, what does that add per month? Show the arithmetic. 4. Update the Next Move line of the file.
Why this works: "the exact sentence" is the unlock. An upsell that exists as a concept never gets offered; a sentence gets said tomorrow morning.
The Leads module: volume, tracked honestly
One table of where last month's leads really came from and what each channel costs, plus a weekly volume commitment the session log tracks. There are only four ways anyone gets leads: reaching people who know you, posting content, reaching strangers, and paid ads. The worksheet asks two blunt questions: which of the four do you actually work every week, and which is the obvious next one?
Built to be used with Alex Hormozi's book $100M Leads. The teaching lives in the book (acquisition.com); your channels and counts live in your file.
Ours walks the book's framework as tabs with charts and an AI analysis lane. The part that transfers to a file-based build is the weekly commitment wired to the session log: the number of outreach touches or content pieces you committed to is checked at close-out like any other done-when, so lead generation stops being a mood and becomes a row in the log. When the constraint verdict says "not enough leads", the action picker reads this file first and its picks get very repetitive on purpose: volume, tracked, until the constraint moves.
Needle math: if leads doubled next month and nothing else changed, revenue would be about [$Z]. If that number does not excite you, leads are not your constraint, and this file can wait.
Read playbooks/leads.md and this week's session logs. 1. Committed volume this week vs actual (touches made, content shipped). State both numbers plainly. 2. Leads that arrived this week, by channel. Update the table. 3. If actual volume was under committed volume two Fridays in a row, tomorrow's action is pre-decided: do the volume first, before any other work. Write that into the Action Hub.
Why this works: the two-Fridays rule removes the negotiation. The system does not get angry, it just schedules the reps.
The Knowledge Brain: the shelf behind it all
Two files: a library (every source you have fed the system, one row each, author named) and a playbook (what the system currently believes about your offers, leads, money, and delivery, in your words, every belief citing its source). The rule that keeps it honest: the playbook may only cite sources that sit in the library. No idea without an origin. Feed it with the ingester ritual from The Loop tab, one source at a time.
Ours runs the full pipeline against Alex Hormozi's published books and free public content: a backfill queue tracks what is ingested, a live board shows pipeline status, the corpus is indexed into its own search namespace, and a distilled playbook regenerates as material lands, organized into pillars with "how the thinking evolved" notes. The two-file version above is the same machine at day-one scale, and it is not a toy: the library-cites-only rule and the your-words-only rule are the entire integrity model, and they fit in two markdown files.
Needle math: count the hours you spent last month re-looking-up things you had already learned. Multiply by what your hour bills at. That is the monthly rent you pay for not having a playbook file.
Question: [the live business question] 1. Search MY history: lessons, memories, session logs. 2. Search THE PLAYBOOK: knowledge/playbook.md and its library. 3. Answer in three parts: - what our own history says (cite the files) - what the playbook says (cite the library rows) - your recommendation where they agree or conflict. If they conflict, say so plainly. Do not average them into mush.
Why this works: separating "our history" from "the playbook" prevents generic advice wearing your company's name, which is the standard failure of every knowledge base.
The Action Hub: one move, every morning
All five modules converge on one small file with three sections: Right Now (exactly one item, always), the Action Board (the queue), and Done This Week. The morning prompt reads your constraint, your playbook, and yesterday's log, and writes ONE action into Right Now with the why stated in your numbers. The Modules tab shows the grown-up dashboard version with aging badges and auto-resolve; the file version ships in the template and works on day one.
Needle math: one finished needle-mover per working day is about 250 a year. Ask yourself honestly how many of last year's working days ended with one deliberate, constraint-aimed move finished. The gap between those two numbers is what this file is for.
It is morning. Pick my one needle-mover for today. Read first: roadmap/constraint.md, knowledge/playbook.md, actions/action-hub.md, one-thing/decision-log.md (if it exists), and yesterday's session log. 1. Propose ONE action that attacks the current constraint. One sentence for the action, two for the why, citing my numbers or a playbook belief. 2. Name what it should change and by when we would see it. A number, not a feeling. 3. If yesterday's action is unfinished, the default is finish it. Argue against the default only with evidence. Rules: one action, not three. Small and finished beats big and open. If the constraint file is over a month old, today's action is to rerun the interview. If one-thing/decision-log.md exists, the action must serve the One Thing on its latest line. Never switch mid-lock.
The One Thing: pick the domino and lock it
The Constraint Finder tells you what is broken and hands you next moves. That list is still a list. This module makes you pick ONE fix from it and stay on it long enough to matter. The rule that makes it work: revenue picks the list, you pick one. Your candidates come from roadmap/constraint.md's next moves. The worksheet does not invent new ideas. It forces a choice.
The choosing is four steps on one page: rank your real problems by how often they bite and how bad, score the simplest fix for each on effort and impact, answer the 12-month question (what one thing, true a year from now, would change everything?), then find the domino: the fix that makes the other problems smaller or gone. Star exactly one.
Then it locks for 14 days. The lock is a promise plus a prompt, not a padlock: your AI reads the decision log before picking any morning action, calls out a switch when it sees one, and the log remembers every switch you ever made. Switching every week is how the last three years disappeared. The only door to a new One Thing is the 30-day review, and REVISE there means a new log line with the reason written down. Never a quiet switch.
Two more files do quiet work. A said-no-to ledger records every good idea you turned down to protect the One Thing; every entry there is focus, not failure. And a render prompt draws the whole decision as one dark board: your One Thing huge at the top, the lock countdown, your fixes on an effort-and-impact grid, the no count. Your numbers become the picture.
Ladder check: the constraint DIAGNOSES (what is broken). The One Thing COMMITS (which single fix). The action picker ACTS (today's move). The dashboard SHOWS it. The wiring PROVES it.
Watch it run: a made-up plumber
Every number below is invented to show the mechanism. Nothing here describes a real business.Example
| Interview question | Bluebird Plumbing's answer Example |
|---|---|
| Revenue last month | $42,000 |
| Leads last month | 31 |
| Close rate | 35% (about 11 jobs) |
| Average sale | $3,900 |
| Owner hours per week | 60, half of them driving between jobs |
The arithmetic check: 31 leads x 35% x $3,900 comes to about $42,300, which matches stated revenue. The numbers reconcile, so the verdict can be trusted.Example
The verdict the AI writes: "The constraint is not enough leads. Close rate at 35% is healthy for the trade and two crews could handle roughly 20 jobs a month; 31 leads only feeds 11. Anti-priority: no third truck and no new software until leads pass 60 a month."Example
The playbook belief it leans on: "Referrals are our cheapest channel; we have never asked for them systematically. Source: library row 2."Example
Monday's pick in the Action Hub: "Call the last 20 completed jobs. Ask each for a review and one referral. Why: leads are the constraint at 31 a month, referrals cost nothing, and past customers close at roughly double the rate of strangers. Expect 3 reviews and 2 referral leads within the week."Example
That is the whole machine: five honest numbers in, one verdict, one belief, one move. The same chain runs every morning, and the numbers in it are yours.
Monday, 8:04am
You open the session. The brief is already there: what Friday actually produced, the one thing worth worrying about, today's question. Below it, the Action Hub holds one line, picked overnight against your constraint, with the why written in your numbers. No scrolling, no deciding what to decide. You read for ninety seconds, and then you do the one thing.
By the second week the feeling changes from novelty to something quieter: the mornings stop being a negotiation. And the payoff sentence, the one this whole playbook was built to earn, happens the first time you ask "what should I do today?" and your own system answers with your constraint, in your numbers, and one move aimed straight at it.
Want this on a screen instead of inside a session? That is the next tab: The Dashboard.
The Dashboard: the brain, on a screen
Everything in this system lives in text files, and text files wait politely to be opened. The dashboard renders those same files where you cannot look away: one screen with today's move at the top, your constraint under it, and your four numbers in big type.
Here is the part most people get backwards: a dashboard is not a new system to build. It is a view of the system you already have. Every tile on the screen is a file from the earlier tabs, drawn large. A tile that cannot name the file it came from is decoration, and decoration gets deleted.
The whole architecture. Truth in files, tiles from truth, and nothing invented in between.
Data file, processor, view
Every module on our dashboard, and every module you will ever build, is the same three parts. A data file owns the truth (markdown or JSON, versioned in git like everything else). A processor keeps it fresh (a prompt on day one, a scheduled script later). A view renders it as a tile. The parts come apart on purpose: the file works without the screen, and the screen never invents what the file does not hold.
| Module | Data file (the truth) | The tile it renders |
|---|---|---|
| Status | brain/STATUS.md | NOW / NEXT / BLOCKED as a thin strip across the top. |
| Action Hub | actions/action-hub.md | RIGHT NOW, the one move, in the biggest type on the screen, with its why. |
| Constraint Finder | roadmap/constraint.md | The verdict sentence, its date, and the anti-priorities in smaller gray. |
| Scoreboard | the numbers inside roadmap/constraint.md | Revenue, leads, close rate, average sale as four large tiles. |
| Morning brief | brain/daily-brief.md | The brief panel, stamped with its date, or its stale warning. |
| Knowledge | knowledge/library.md + playbook.md | The source count and the newest belief, one line. |
Notice what is missing: anything new. Six tiles, six files you already created in the template. The dashboard adds zero collection work, which is exactly why it survives where prettier dashboards die. One more debt every module carries: a proof page showing its reads and its writes. That standard, and the map that watches all the wires, live on the Wiring tab.
One prompt writes the screen
You hand your AI a prompt: read these six files, write one self-contained HTML page, put today's move at the top. Thirty seconds later there is a dashboard.html in your project you can open, bookmark, and leave on a second monitor. The self-test: someone who knows nothing about your business looks at the screen for thirty seconds and can tell you what your constraint is and what today's move is. If they cannot, the screen is showing data instead of decisions.
Ours is a local web server that reads the same brain files plus integration caches, renders module views, and refreshes feeds on schedules. Two disciplines from it are worth stealing at any size. First, the module registry: a module renders only if it is registered in one central list, so the registry is the honest inventory of what the dashboard claims to show, and a half-built view can never quietly appear. Second, views never write: the server renders files, it does not become a second place where truth lives. The day you edit the dashboard instead of the source file is the day the two disagree, and screens win arguments against files by being prettier, not by being right.
Read: brain/STATUS.md, brain/daily-brief.md, roadmap/constraint.md, actions/action-hub.md, knowledge/playbook.md, knowledge/library.md. Write dashboard/dashboard.html: ONE self-contained file. Dark background, large type, no internet requests, opens from disk. Layout, top to bottom: 1. RIGHT NOW: the one action from the hub, biggest thing on the screen, with its why beside it. 2. THE CONSTRAINT: the verdict sentence, its date, and the anti-priorities in smaller gray text. 3. THE NUMBERS: revenue, leads, close rate, average sale as four large tiles. Show an up or down arrow ONLY when the file holds two dated values to compare. Never guess a direction. 4. THE BRIEF: today's morning brief, or its stale warning. 5. THE QUEUE: the action board, small, at the bottom. Rules: - Every tile shows its source file name and that file's date. - A source missing or older than 48 hours renders as a gray tile stamped STALE. Never blank, never yesterday's number dressed as today's. - No number appears on this screen that does not exist in a file.
Why this works: the STALE rule is the whole game. A dashboard that hides staleness is a prettier way to lie to yourself, and you will trust it exactly until the first morning it burns you.
Five rules that keep a screen honest
Each of these came out of a real failure on our own dashboard. They cost us weeks to learn. Here they are in five rows.
| Rule | The failure it prevents |
|---|---|
| One tile, one file. | A number with no source cannot be audited or fixed. When a tile looks wrong you need to know, instantly, which file to open. |
| Stale beats hidden. Measure age from the last successful update, never from the last attempt. | A feed that errors quietly keeps showing its last good number as if it were fresh. Ours did, for a week, and the screen said everything was fine. |
| Direction is computed, never assumed. An arrow renders only when two dated values exist and the renderer compares them. | We once shipped a line that said things were speeding up while the numbers said the opposite, because the wording was written before the data arrived. |
| States come from a fixed list. Anything outside the list renders as BROKEN in red, loudly. | When a status can be free text, one typo silently drops a whole row off the board, and nobody notices an absence. |
| A failed refresh keeps the last good value. Refreshing clears the timestamp, not the data. | A refresh that wipes first and fetches second turns every hiccup into an empty screen, and empty screens teach people to stop looking. |
From a file to a wall screen
Rung one is where you start and where most people should stay a while: rerun the render prompt when you want the screen fresh. Rung two removes the willpower: add one line to the night job (for Claude Code, the terminal app from the toolkit: claude -p "$(cat prompts/render-dashboard.md)") and a fresh screen is waiting every morning next to the brief. Rung three is the live version: a small local web server (Node or Python; your AI writes it with you in an afternoon) that reads the same files on every page load, so the screen is never older than the files. Same truth, shorter delay.
The climb rule: move up a rung when you notice you stopped opening the file, not before. The ladder is pull, not push. A dashboard nobody looks at is not infrastructure, it is a hobby with tiles.
What to build the screen with
Day one the answer is boring on purpose: one HTML file that the render prompt writes. No build step, no framework, nothing to install. It opens from disk on any machine and it will still open in five years. Most people never need more than that, and starting anywhere heavier is how a second brain turns into a second job.
When one file stops holding it, the answer is React, and React is what we run. Ours crossed that line at several screens, live data, and tables people actually click. Crossing is a real project, so the part worth copying is not the framework, it is how you cross: one surface at a time, never a rewrite.
| The move | What it means |
|---|---|
| One surface at a time, as an island. | The page keeps the HTML that already works. React mounts into a single div on it and everything around that div is untouched. A bad wave then costs you one panel instead of the dashboard. |
| Behind a switch. | Every island ships turned off, gets turned on for you first, and goes back to the old version in one line at 6am without a deploy. A migration you cannot reverse is a bet, not a plan. |
| A migration file is the scoreboard. | Every surface listed with a status: legacy, in flight, done. Skip it and a half finished migration quietly becomes two dashboards, and two dashboards disagree. |
| The truth rule does not move. | React renders files. It never owns a number. The moment a component holds a value that is not in the brain folder you have built a second system of record, and the screen can now lie to you politely. |
We moved ours in nine waves, oldest and least risky screens first and the money screens last, with the old version still sitting on the page until each island landed. Every one of those waves is work you should skip until the single file is genuinely in your way.
Bluebird's Monday screen
The same made-up plumber from the Growth Stack tab. Every number below is invented to show the mechanism.Example
| Tile | What it shows at 8:04am Example |
|---|---|
| RIGHT NOW | "Call the last 20 completed jobs. Ask each for a review and one referral." Why: leads are the constraint at 31 a month. · actions/action-hub.md, today |
| THE CONSTRAINT | "Not enough leads." Anti-priority: no third truck until leads pass 60 a month. · roadmap/constraint.md, 6 days old |
| THE NUMBERS | $42,000 revenue · 31 leads · 35% close · $3,900 average sale. No arrows yet: one month of history is a dot, not a direction. |
| THE BRIEF | What Friday produced, one worry, today's question. · brain/daily-brief.md, today |
| KNOWLEDGE | 3 sources · newest belief: referrals are the cheapest channel we never ask for. · knowledge/playbook.md |
Thirty seconds of reading and the day is decided. That is the whole point of rendering: the file version asks you to open it; the screen version is simply there, and what is simply there gets acted on.
The Wiring: every tool, every wire, proven live
The tools do not make the system. The wiring does. This tab is the full parts list we run on, how each part connects to the brain, and the two disciplines that keep connections honest: every module proves its wires, and one map shows anything that has gone quiet. One honest frame before you build it: this layer surfaces problems, it does not fix them. You fix them, in a ten-minute weekly verdict. That check is the immune system.
Every tool below points at the same folder. That is the entire integration strategy: no exports, no syncing, no copies. The AI works in the folder, git versions it, Obsidian opens it, the dashboard renders it, the scheduler wakes up inside it. A tool that needs its own copy of your data is a tool that will eventually disagree with your data.
| Tool | Its job in the system | The one wiring rule |
|---|---|---|
| Claude Code (or any agentic CLI AI) | The hands. Runs sessions, reads the brain, does the work, writes back. | It works inside the brain folder, never in a copy of it. |
| git + a private repo | History, backup, and sync between machines. The audit trail for every rule the brain ever learned. | The commit at session close is part of the ritual, not a chore. |
| Obsidian | The human window. Read, link, and graph the same files the AI writes. | Open the brain folder as the vault. No import, no export, ever. |
| Graph view (built in) | Draws the links somebody wrote: clusters are topics, orphans are memories nothing references. | Orphans get linked or deleted weekly. A dot with no lines is a fact you already lost. |
| A graph inference tool such as Graphify, or a plain prompt | The third brain: reads the whole corpus and finds the connections nobody wrote. Clusters, hubs, hidden pairs, contradictions. | It proposes; you approve. An inferred link never applies itself. |
| A semantic search CLI (embeddings over the corpus) | The librarian's grown-up form: query the brain, get the five most relevant notes back. | The index rebuilds nightly or it quietly rots. Grep is the honest day-one version. |
| Node.js (or Python) | Runs the dashboard server and the graduated scripts. | Scripts read files and write files. They never hold private state. |
| React (only once the screen outgrows one file) | The dashboard front end past the one file stage. It is what we run now and what we recommend when you get there. Before that, one plain HTML file beats it on every axis that matters. | It mounts as an island inside the page that already works, behind a switch you can flip back. It renders files and never owns a number. |
| The scheduler (cron, launchd, Task Scheduler) | The night shift. Fires the distiller, the dreaming job, the re-render. | Every job writes a timestamp a human can see. Silent jobs are dead jobs waiting to be discovered. |
| A headless browser (Playwright) | Verifies rendered pages: proof pages, the dashboard, the map. | A text check cannot certify a rendered page. If a gate certifies a screen, the gate must render the screen. |
| Sentry | The smoke alarm. Hears your scheduled scripts crash so you do not find out in week three. | Errors only. The kill switch is one line in .env. |
| Slack | The voice. The brain posts the morning brief, the day's move, and true alerts to your phone. | If a message does not change what you do next, it does not ship. |
Costs, for the skeptical: everything above has a free tier or is free outright. The system's real price is the ritual, not the tools.
One folder is the whole codebase
People ask what repositories power this. The answer is one, and you already built it in the template. Here is the same folder seen as a codebase: what lives where, who reads it, who writes it. When every tool agrees on this table, integration stops being a project and becomes a property.
| Folder | What lives there | Read by | Written by |
|---|---|---|---|
| brain/ | Status, lessons, patterns, the morning brief | The AI at session start, the dashboard, the map | The AI and the night jobs |
| memory/ | One fact per file, typed, [[linked]] | The librarian, Obsidian's graph | The AI, the moment a fact appears |
| docs/session-logs/ | The daily record | The night jobs, the distiller | The AI at session close |
| prompts/ | The processors, in prompt form | You, and the scheduler | You. Editing a prompt is upgrading a machine. |
| knowledge/ playbooks/ roadmap/ actions/ | The profit engine: library, worksheets, constraint, hub | The action picker, every morning | The interview and the reviews |
| dashboard/ | Renderings: the screen, the proof pages, the system map | Your eyes | The render prompts. Never your hands. |
| dashboard/ui/ (later) | React source for the screens that outgrew one file, built into one bundle the page loads | The browser, on the pages with islands | You and your AI. Never the render prompts. |
| scripts/ (later) | Processors that graduated from prompts | The scheduler | Your AI, with you watching |
Obsidian: the brain you can walk through
Install Obsidian, choose "Open folder as vault", and point it at your brain folder. That is the whole setup. Every memory file becomes a note, every [[link]] you wrote becomes a clickable edge, and the graph view draws the shape of everything your system knows. Healthy brains show clusters. The things to hunt are orphans: dots with no lines, facts that nothing will ever surface again. One honest limit: this graph only shows the links somebody wrote. The next section adds the brain that finds the rest.
This works because the memory format was designed for it: markdown files with a small front matter block and [[wiki-links]] between related facts. The division of labor is strict. The AI is the writer; Obsidian is the reader. Browse, search, and add links freely, but the front matter shape (name, description, type) is law, because the librarian parses it. Be careful with plugins that rewrite front matter or rename files: they fight your AI for ownership and the AI loses quietly. The local graph on a single memory is the underrated view: open it on any fact and you see everything the brain knows around it, which is exactly the question you ask before a decision.
Audit the brain's link graph. 1. List every file in memory/ with zero [[links]] in or out. 2. For each orphan, propose one of: the existing memory it should link to (add the [[link]] in both files), or deletion, with the reason. 3. List every [[link]] that points at a memory that does not exist: either write that missing memory now or remove the link. Show me the proposed changes as a list first. Apply only what I approve.
Why this works: a link graph only stays useful if orphans are a maintained population of zero. Ten minutes a week keeps the graph telling the truth about what the brain can actually retrieve.
The third brain: the connections nobody wrote
Count the brains. The first is yours: fast, brilliant, forgets. The second is the files: everything the system wrote down, linked by hand. The third is the layer that reads everything the second brain holds and finds what no human and no session ever connected. The graph view shows the links somebody made. The third brain infers the links nobody made, and those are usually the expensive ones.
Hand-written [[links]] capture what you noticed in the moment you wrote the note. They never capture what you notice later, and they never connect a note from March to a note from August, because nobody was holding both in their head at once. The third brain is a recurring pass where the AI reads the whole vault and reports four things: communities (which notes actually belong together, named in plain words), hubs (the handful of notes everything else depends on), inferred links (two notes about the same client, tool, or decision that never reference each other), and contradictions (two notes that cannot both be true). Every one of those is a decision you were going to make late, made early instead.
We run this as a scheduled inference pass over the same one folder everything else uses. A dedicated tool such as Graphify does it with the same AI CLI you already have: it walks the corpus, infers communities, hubs, and edges, and writes the results as dated data files that the dashboard and the System Map render. A plain prompt does the same job on day one; the tool is the graduated form, exactly like every other processor in this system. Three rules keep it honest. First, it proposes, you approve: an inferred link is a hypothesis until a human accepts it, and once accepted it gets written into the memory files themselves, so the second brain absorbs what the third brain found. Second, it degrades to skip: if the pass fails, nothing downstream dies, because the third brain is a lens on the corpus, never a dependency of it. Third, its output is data with dates, so it obeys the same staleness rules as every dashboard tile. One byproduct earns its keep alone: ghost links, the [[links]] that point at notes that do not exist yet, sorted by how many notes want them. That list is literally your brain telling you the next note worth writing.
Read every file in memory/, brain/, and knowledge/. The graph only shows links somebody wrote. Find the connections nobody wrote. Propose: 1. COMMUNITIES: cluster the notes by what they are actually about, named in plain words. A cluster you cannot name is two topics pretending to be one. 2. HUBS: the five notes the most other notes depend on. When anything big changes, these get reviewed first. 3. INFERRED LINKS: pairs of notes about the same client, tool, or decision that never [[link]] each other. Quote the line in each note that proves the connection. 4. CONTRADICTIONS: two notes that cannot both be true. Name the pair; I decide which one is right. For every proposal I approve: add the [[links]] to the memory files themselves, then write dashboard/third-brain.html, a one-page dark report of the clusters, hubs, and today's date. The third brain proposes. Only I approve. Never add a link, merge a note, or resolve a contradiction on your own.
Why this works: approval is the safety and the flywheel at once. Every accepted proposal becomes a real [[link]] in a real file, so next month's graph view, graph audit, and librarian all retrieve what the inference pass found. The third brain feeds the second, and the second is what every agent reads.
Proof pages: every module shows its wires
A proof page is a module's birth certificate and heartbeat in one small page. It proves two things. Connected: it lists every brain file the module reads and quotes one live value from each, with the file's date. Feeding: it shows the last three writes the module made back to the brain, with timestamps. The standing rule: no module ships without one. Claiming a module is "connected" is free. A proof page makes the claim expensive, which is the point.
The two failures this standard catches are the ones that actually happen. The confident orphan: a module reading a copy or a cache that nothing updates anymore, rendering beautifully forever. The read-proof exposes it, because the quoted value carries the source's date. The read-only tourist: a module that renders the brain but never feeds it. Its write-proof section stays empty, and on the page that emptiness prints in red as a verdict, not a blank. Two disciplines from our own builds: proof pages are generated from the module's own configuration, never hand-written, or they rot into marketing. And every proof page carries the date of its last disconnect test: rename a source, watch the page go red, put it back. A check that has never been seen to fail is not yet a check.
Generate a proof page for module [NAME]. Write dashboard/proof-[NAME].html, one self-contained file, dark, no internet requests. 1. READS: list every source file this module renders. For each, quote one real value read from it right now, plus the file's modified date. 2. WRITES: show the last 3 lines this module added to the brain (memory rows, log lines, hub updates), each with its timestamp. If there are none, print in red: READ-ONLY: this module does not feed the brain. 3. STATUS: green only if every read is younger than 48 hours AND a write exists from the last 7 days. Otherwise red, naming which side went quiet. 4. At the bottom, the disconnect test log: the date it was last run, what was renamed, what went red. Never fabricate a value, a timestamp, or a pass.
Why this works: the READ-ONLY line in red converts a silent design flaw into a visible debt. Modules that only take from the brain and never give back are the first ones to drift from reality.
The System Map: see every connection, catch every silence
A folder hides disconnection. Nothing in a file listing tells you the dreaming job stopped feeding the brief two weeks ago. The System Map is a module whose only job is making absence visible: every file, prompt, job, and screen as a node, every read and write as an edge, and every edge colored by how recently data actually flowed through it.
Green flowed within 48 hours. Amber is aging. Red and dashed is a wire nothing has used, and it goes on the list.
Run the map prompt and open the page. Nodes are your files, processors, and screens, laid out in columns. Edges are reads and writes, colored by freshness: green flowed inside 48 hours, amber inside a week, red longer. A panel at the corner lists everything DISCONNECTED. Fair warning about the first run: expect red. Every system that has never been mapped has dead wires. The map did not break anything; it ended the not-knowing.
Ours renders a live graph on the dashboard server, and three laws from building it transfer at every size. Edges are derived, never drawn: the map builds itself from evidence (the Read lines inside prompts, the paths each job writes, the scheduler's entries), because a hand-maintained map starts lying within a week. One verdict pipeline: the same freshness rule the dashboard tiles use decides edge colors, computed once and consumed everywhere, because two staleness rules produce two truths and a Tuesday argument. The coverage ratchet: every file in the repo is either on the map or explicitly marked ignored, and an unknown file is a failing check, not a mystery. That last one is what keeps the map complete as the system grows; new files cannot hide.
Build the system map. Write dashboard/system-map.html: one self-contained file, dark, no internet requests. 1. NODES: scan brain/, memory/, docs/session-logs/, prompts/, knowledge/, playbooks/, roadmap/, actions/, dashboard/. Every file is a node, grouped in columns by folder. 2. EDGES, derived only, never invented: - a prompt that says "Read: X" gets an edge X to that prompt. - a prompt that writes file Y gets an edge to Y. - scheduled jobs connect to the prompts they run. 3. COLOR each edge by its target's modified date: green under 48 hours, amber under 7 days, red beyond. 4. DISCONNECTED panel: every node with no edges, every edge red for more than 7 days, and any [[link]] pointing at a file that does not exist. 5. Keep it readable without zooming: columns, straight lines, a legend, and the generated date in large type. The map is a rendering. When it shows a problem, fix files and prompts, then rerun me. Never edit the map to look healthier.
Why this works: deriving edges from the Read lines means the map and the machinery can never drift apart; the same text that instructs the AI is the text that draws the wire.
Sentry and Slack: the brain learns to speak up
Once jobs run at night, a new failure mode appears: things break while you sleep, and nothing tells you. Two channels close that hole. Sentry is the smoke alarm: your scheduled scripts report crashes to it, and it emails you when one dies. You never browse it; it interrupts you. Slack is the voice: the brain posts the morning brief and the day's picked move to a channel on your phone. The alarm you hope stays silent, and the voice you hear every day.
Ours wires every scheduled job into Sentry with an errors-only policy, and the kill switch is deliberately trivial: the reporting address lives in one .env line, and deleting that line turns reporting off without touching code. Slack runs through an incoming webhook with a two-lane contract: the digest lane (informational, batched, twice a day at most) and the act-now lane (rare by definition; an act-now that fires weekly is mislabeled). The rule that keeps the channel alive: a notification that does not change what you do next gets cut, because alert fatigue kills the whole channel by week two. And the deepest lesson, paid for in silence: alert on missing success, not just on errors. A job that dies silently throws nothing. Watch the time since the last successful run, and alarm when it passes twice the schedule interval.
# Slack: last line of the night job. The webhook URL lives in
# .env, never inside a script, never in git.
curl -s -X POST -H 'Content-type: application/json' \
--data "{\"text\":\"Brief ready. Constraint: [X]. Today's
move: [Y].\"}" "$SLACK_WEBHOOK_URL"
# Sentry: top of every scheduled script (Node shown).
const Sentry = require('@sentry/node');
if (process.env.SENTRY_DSN) {
Sentry.init({ dsn: process.env.SENTRY_DSN });
}
# No SENTRY_DSN in .env means reporting is off.
# That one line is the kill switch.
# The watchdog rule, wherever your checks live:
# alert when (now - last SUCCESSFUL run) > 2x the schedule.
# Errors are loud. Silent death is what actually kills
# second brains.Why this works: the two-lane contract is doing the quiet work. The day your act-now lane fires and you drop everything without hesitating, you will know the digest lane earned that trust by staying boring.
Staying Sharp
Every tab before this one makes the brain bigger. This one is the four things that stop it getting dumber while it grows. You do not need them on day one. You need them somewhere past a couple of hundred notes, which is roughly the point where you can no longer remember what is in your own vault.
A bigger brain is not a better one
Here is how this breaks, and it is worth understanding before the fixes make sense. Search keeps working. It returns five notes every single time. They just quietly stop being the right five. Nothing errors, nothing turns red, no gate fails. A retrieval engine always returns something, and that is exactly why it can rot for a month before anybody notices.
The same silence covers the corpus itself. A note written in spring sits there in late summer reading like it is still true. Nothing ever reads it against the newer note that replaced it.
The golden set: a number before an opinion
Write down thirty questions you have actually asked your brain. Next to each one, write the note that should come back. Then run all thirty and count how many land in the top five results. That count is your recall score.
Do this before you change anything about how search works. Otherwise every future change is a guess, and you will never know whether the clever thing you added helped or hurt.
Thirty is not a magic number. It is small enough to write in an hour and big enough that one lucky hit does not move it.
The trap this caught, first run. Ours scored six out of thirty. Not because the notes were missing. Because the search index had not been rebuilt after a few hundred new notes landed, and a stale index does not complain. It answers every question, confidently, out of the half of the vault it knows about. After a rebuild the identical thirty questions scored twenty. Same notes, same questions, same engine. The only change was that the index had caught up.
Score every engine separately, never just the total. Ours falls back through three of them. The top one was scoring five while the two beneath it scored twenty, which is the exact opposite of how a fallback ladder is supposed to behave. A single overall number would have hidden that completely, because the lower rungs were quietly covering for the broken top rung.
Two out of three is a real score, not a failure. Some of the misses will be questions where no note exists yet. Record those separately. They are a writing problem, not a search problem, and fixing search will never move them.
Help me measure whether my brain can still find things. 1. Read my session logs and memory files. Propose 30 questions I have actually asked or would plausibly ask, spread across clients, tools, decisions and past mistakes. Not trivia. 2. For each one, name the ONE note that should come back. If no note answers it, mark it NO NOTE EXISTS and keep it. 3. Write brain/golden-set.md: the question, the expected note, and a blank score column. 4. Run every question through my search. Score a hit only if the expected note is in the top five. Run each search engine SEPARATELY and record a score per engine. 5. Write today's date and the scores at the top of the file. Report the misses grouped into: index problem, ranking problem, or no note exists. Do not change anything about how search works today. This run is the baseline that every later change gets judged against.
Why this works: it turns retrieval from a feeling into a number, and it costs one hour. Everything else in this tab is optional until this number exists, because without it you cannot tell an improvement from a regression.
Typed edges: the graph nobody has to type
Links between your notes exist only where somebody remembered to type them. Which means the map of your own business is always mostly missing, and the gaps are invisible because nothing knows what was never typed.
But you already have a closed vocabulary: your client names, your project names, the tools you use, your file paths. A short script reads every note looking for those exact words and writes the links itself. No AI is involved, so it costs nothing to run, it runs in seconds, and it cannot invent a connection that is not there.
Then you can finally ask the question a pile of notes could never answer: what else touches this?
Pattern matching, not a model. This is the one people over build. There is no embedding step and no AI call anywhere in it. You have a list of known names; you scan for them; you write an edge with a type on it (mentions, depends on, supersedes, blocks). Run it after every write, or nightly if that is simpler.
The closed vocabulary is the whole trick, and it is why this works better in a business vault than in a general one. A public note-taking tool has to guess what an entity is. You do not have to guess. Your client list is a folder. Your tool names are in your config. Your module names are your filenames. Feed those in as the dictionary and precision is close to perfect for free.
What it is worth: hand typed links tend to land in the low single digits per hundred notes, because typing brackets is a chore nobody does under deadline. Extraction turns the same vault into a real graph without anyone changing how they write. The payoff is the first time you ask what touches a thing and get back eleven notes, nine of which you had forgotten.
Build the link graph for my brain without me typing links. 1. Assemble my closed vocabulary from what already exists: client folder names, project names, tool and integration names, module names, file paths. This is the dictionary. Do not invent entries for it. 2. Scan every note for exact matches. For each hit write one edge: source note, entity, edge type (mentions, depends-on, supersedes, blocks), and the line it was found on. 3. Write them to brain/edges.ndjson, one JSON object per line, rebuilt from scratch each run so it never holds stale edges. 4. Report: total edges, the top 10 most connected entities, and any note with ZERO edges. A note connected to nothing is either mis-worded or does not belong. Use pattern matching only. No AI calls in this job, ever. If you cannot match it literally, it is not an edge.
Why this works: the graph builds itself out of words you were already writing, so it never depends on discipline. The rule that keeps it honest is the last line: a literal match or nothing. A guessed edge is worse than a missing one, because you will believe it.
An answer, not a pile of notes
Ask your brain a question and the normal answer is five whole notes dropped into the conversation for the AI to read. It works, and it is the expensive way to do it. You pay for every word of all five, every time, including the four that were not relevant.
Answer mode runs those same hits through a cheap model and gives you back four or five lines, the names of the notes it used, and one line saying what it could not find. You read the answer. The notes are still there if you want them.
Use the cheap model here, never your main one. The job is summarizing text that was just handed over, which is the easiest thing a language model does. Paying top rates for it is how a good idea turns into a bill.
Measure the loss and say it out loud. Ours loses roughly one answer in five against reading the notes directly, and that number is why it stays opt in rather than becoming the default. Fast reads get answer mode. Questions where being wrong costs a day still get the notes. Anyone who ships a compression layer without measuring what it drops has just added a confident liar to their stack.
The line about what it does not know is the point. A summary that only tells you what it found sounds complete whether it is or not. One honest sentence naming the gap is what makes the whole feature trustworthy, and it is the first thing to check if you are judging whether yours works.
Question: [the question] 1. Search the brain and take the top 5 notes. 2. Answer in 4 to 6 lines, in plain words, using ONLY what is in those notes. No outside knowledge, no filling gaps. 3. List the note filenames you used. 4. Add one line: WHAT I DO NOT KNOW. Name what the question asked for that the notes did not cover. If they covered everything, say so plainly. Never leave this line out. 5. If the notes disagree with each other, say that instead of picking a side or averaging them into mush. Use the cheapest model available for this job.
Why this works: step 4 is the whole feature. Steps 1 to 3 are a summarizer, and summarizers are everywhere. A summarizer that reliably names its own blind spot is the thing you can actually build a habit on.
Nothing catches a stale fact
The nightly job from the Dreaming tab reads what happened today. It never reads an old note against a new one. So a price you changed, a tool you dropped, a rule you reversed, all of it sits in the vault at full confidence, and the only thing that ever catches it is a person happening to read both notes in the same week.
The fix is a nightly pass that picks pairs of notes talking about the same thing at different times, asks whether they disagree, and puts the disputed pairs in your morning brief. It never edits anything. You rule on it.
Most pairs are not contradictions. They are supersessions. The old note was true then, the new one is true now, and nothing is wrong with either. This distinction is what makes the whole feature affordable. Call every one of them a conflict and the flag rate is so low against so many pairs that judging them is a week of work nobody will do. Give SUPERSEDED its own heading and the same pass produces a handful you can read with coffee.
Sample, do not compare everything. Every pair of notes is an enormous number of comparisons and almost all of them are unrelated. Compare only pairs that share an entity (which the graph from mechanism two just gave you for free) and have a real gap between their dates. That is where staleness actually lives.
Ship it dark and hand check the first twenty. Ours is built and deliberately switched off behind a flag file until the first twenty flags have been read by a human. A false contradiction is worse than no contradiction detection at all, because after two bad flags you stop reading the section, and then it may as well not exist.
It never resolves anything by itself. Which note is right is a judgment about your business. The machine finds the disagreement. You settle it.
Find where my brain argues with itself.
1. Take pairs of notes that share an entity and were written
at least 30 days apart. Sample, do not compare everything.
2. For each pair ask: do these disagree about a fact?
Sort every hit into exactly one bucket:
- SUPERSEDED: both were true, the newer one replaced it.
This is the common case. Say what changed and when.
- CONTRADICTION: they cannot both have been true. Rare.
Say precisely what conflicts.
- AGREES: drop it silently.
3. Write the hits into the daily brief under two headings,
SUPERSEDED first. Name both files and both dates.
4. Change NOTHING. Do not edit, merge or delete a note. You
are reporting a disagreement, not settling it.
Use the cheapest model. Keep this job off until I have read
the first 20 flags by hand and told you they are worth having.Why this works: two buckets instead of one is the difference between a feature that ships and a feature that is theoretically correct and permanently switched off. Almost everything it finds is a supersession, and a supersession is genuinely useful to see.
Compiled truth on top, evidence below
Append only files grow forever. A lessons file that reaches a megabyte is a file nobody opens, and its whole value was being read. The fix costs nothing and needs no code: every long file gets a short compiled section at the top saying what is true right now, with the append only history underneath it, untouched. Nothing is deleted. The reading cost stops climbing.
You have already built one of these without calling it that. The STATUS file from the Crawl phase is exactly this shape: a short signal on top of a long history. Apply the same shape to the two or three files that got fat, then stop.
The other cheap one: if you built a retrieval feature and left it switched off, switch it on. Worth checking before building anything new here. Ours had a working pull mode that read the current task at session start and queried the brain unprompted, sitting inert behind a flag file that had never been created. Built, paid for, doing nothing.
Skills: procedures the AI can load
A skill is a step-by-step procedure saved as a text file. The AI loads it on demand and follows it exactly. Skills are how good process survives: write the checklist once, and every future session runs it the same way.
Think of skills as the difference between telling a new employee "handle the close-out" and handing them a laminated checklist. The laminated checklist wins every time. Whenever you find yourself giving the AI the same instructions twice, that is a skill waiting to be written.
In Claude Code a skill is a markdown file with a small front matter block (name, description) living in a skills directory (project-level or global). The description tells the AI when the skill applies; the body is the procedure. Invocation is by name or automatic when the task matches. Two disciplines keep a skills library healthy: skills state their inputs and outputs explicitly (a fresh session must be able to run one without asking questions), and skills reference files by role ("the status file") with the actual path stated once at the top, so renames do not rot the whole library.
--- name: session-log description: Run at the end of every session. Writes the log, updates status, captures lessons. --- # Session close-out 1. Write docs/session-logs/[today].md with three headings: Completed / Left open / Start next with. 2. Update brain/STATUS.md: move finished items out of NOW, promote the top of NEXT. 3. Ask: "any mistake this session worth a rule?" If yes, append it to brain/lessons.md (max 3, dated, 2 sentences). 4. Ask: "any approach that worked well?" If yes, append to brain/patterns.md with when-to-apply. 5. Commit everything: git add -A && git commit -m "session log [today]"
Why this works: the close-out is the loop's most skipped step when it lives in memory, and the most reliable step when it lives in a file the AI executes line by line.
The skills that run this system
The production library holds about fifty skills. These fourteen are the ones that operate the hive mind itself. Build them in this order; each is a markdown file following the format above.
| Skill | When it fires | What it does |
|---|---|---|
| session-brief | Session start | Pulls status, last log, queue, and freshness warnings into one scannable brief. |
| session-log | Session end | The close-out checklist: log, status update, lessons, patterns, commit. |
| brain-search | Any question touching the past | Semantic query over the whole corpus; returns top matches formatted for prompting. |
| memory-save | The moment a fact appears | Writes a typed memory file plus its index line; checks for duplicates first. |
| dreaming | Nightly, scheduled | Read-only synthesis of the last 24h: what happened, lessons, tomorrow's questions. |
| night-shift | Nightly, scheduled | The maintenance pass: rebuild search index, re-check proof lanes, refresh generated docs. |
| insight-audit | Nightly, scheduled | The blind-spots auditor: what is being missed or wrongly assumed correct. |
| council | Decisions where being wrong is expensive | Five advisors with opposing lenses answer independently, peer-review anonymously, a chairman synthesizes a verdict. |
| improve-rounds | "Make this better" | Themed improvement passes (fix, restructure, polish, resonate, innovate, synthesize), each gated on never shipping worse. |
| goal-lock | After any plan improves | Gates the improved plan against the original ask, criterion by criterion, with quoted evidence. Catches drift. |
| one-shot | Big idea to executable plan | The pipeline: council locks the goal, improvement rounds harden the plan, goal-lock gates it, out comes a contract a fresh session can execute. |
| instinct-learn | When evidence repeats | Watches for lessons that keep proving true and promotes them toward standing reflexes. |
| skill-builder | Second time you repeat instructions | Turns the repeated instructions into a new skill file, correctly formatted. |
| report-writer | Any human-facing artifact | House rules for reports: plain language, evidence cited, self-audit receipt on the page. |
The knowledge pipeline: borrowed brains
Your hive mind should not only hold what YOU learn. It can ingest the best published thinking in your field and make it queryable. The production system did this with Alex Hormozi's business playbooks: his published books and free public content, pulled into the knowledge base, indexed, and surfaced as cards the AI can apply to live decisions. When a pricing question comes up, the system answers with the operator's own history AND the best published framework, side by side.
Start with the sources themselves: Acquisition.com (the free courses and books) and the three books, $100M Offers, $100M Leads, and $100M Money Models. Whatever your field's equivalent is, that is your first ingestion target. The stage-by-stage plumbing of this pipeline is broken down under The Machinery on The Loop tab, and what the ingested knowledge gets used FOR is the whole Growth Stack tab.
The pipeline is four stages, each an archetype you already know. Ingest (integrator): pull transcripts and text from public sources on a schedule. Index: chunk and embed into the same semantic search the brain uses, tagged by source. Surface (display): render as one-idea cards, each linked to its source passage. Apply (agent lane): a scheduled or on-demand AI pass that takes a live business question, retrieves the relevant frameworks, and drafts an answer for human review. Keep ingested knowledge in its own namespace so a retrieval can be scoped to "my history", "the playbooks", or both.
Question from the operator: [the live question] Retrieved from OUR history: [top brain-search results] Retrieved from THE PLAYBOOKS: [top knowledge-base results] Answer in three parts: 1. What our own history says (cite the memories) 2. What the published frameworks say (cite the sources) 3. Your recommendation where they agree or conflict Plain language. If the frameworks conflict with our history, say so explicitly; do not average them into mush.
Why this works: separating "our history" from "the frameworks" prevents the most common failure of knowledge bases: generic advice wearing your company's name.
Ready to build yours?
Everything you just read grows from two text files and one habit. The companion template walks you there in seven phases, each with a done-when checklist your AI will hold you to.
| Phase | Time | What you will have |
|---|---|---|
| Crawl | Day 1, under 10 minutes | A constitution, a status file, and the session ritual. The loop exists. |
| Walk | Weeks 1 to 2 | Typed memories, a lessons file that grows, retrieval instead of re-research. |
| Run | Months 1 to 2 | Hooks automate the ritual, a nightly job writes your first morning briefs, your first dashboard screen if you want one. |
| Fly | Month 3 and on | Dreaming synthesis, rule graduation, proof lanes, a system that improves itself while you sleep. |
| Profit Engine | About 45 minutes, once the loop runs | The owner interview, your constraint named in your numbers, the playbook worksheets, and one needle-moving action picked every morning. |
| Dashboard | About 20 minutes, any time after Run | One prompt renders the brain as a single screen: today's move, your constraint, your four numbers, every tile naming its source file. |
| Wiring | An evening to set up, then ongoing | Obsidian opened on the vault, a proof page for every module, the system map with its DISCONNECTED panel, and Sentry plus Slack so the brain can reach you. |
Or hand the template file to your AI directly: "Read this file and onboard me into building my own hive mind." It contains a machine-readable manifest of every file to create, phase by phase, with the done-when gates built in.
Questions people actually ask
Do I need to know how to code? No for Crawl and Walk: those are text files and habits. Run and Fly involve small scripts (a cron job, a hook); your AI writes those for you when you get there. The system was designed to be built WITH the AI, not before it.
What does it cost to run? The brain itself is free: text files and git. The running costs are your AI subscription and, if you reach Fly, the overnight AI calls (a nightly synthesis is one or two calls per night). No servers, no databases, no vendor to pay.
Do I need 227 modules? No. The 227 exist because one operator kept asking new questions for a year. You need zero modules to get the full value of the loop. Build your first screen when you notice a question you ask every single day.
Do I need the dashboard at all? No. The markdown brain alone is a complete product. The dashboard is its face, not its heart.
How long until it feels smart? The loop pays off the first time a session opens already knowing yesterday. That is day two. The compounding feeling (rules preventing mistakes you forgot you made) arrives around week three, when lessons.md has 15 to 20 entries.
What if I fall off the ritual? The system degrades gracefully: files do not rot, they just wait. Hooks (Run phase) remove the willpower from the ritual entirely, which is why the template pushes you there by month two.
The one habit that carries it all
If you take nothing else: end every session by writing three lines. What got done. What is open. What tomorrow starts with. Every advanced mechanism in this playbook (the dreaming, the graduation of rules, the proof lanes) is scaffolding built around that single habit. The operators who get compounding value are not the ones with the fanciest dashboards. They are the ones whose loop never skips a night.
We build visibility, not other people's systems
This kit is free and there is nothing behind it. No email box, no signup, no paid version with the good parts in it. What we run is what is written in these files.
We do not build, install, or manage anybody's internal AI system, and we are not looking to. If you want one, these two files are the whole thing, and your own AI can build it with you in an afternoon. That is the point of giving it away.
What we do sell is different work. SwarmSystem makes local service businesses the one that gets named first when a homeowner asks Google, ChatGPT, or Siri for a plumber, an HVAC tech, or an electrician. More calls, more booked jobs, and you own everything we build.
If you want to see where your business shows up right now, the scan is free and takes about a minute.
The call is about your visibility, not a build session for this kit.