Intelligence at the core, for one person

Technical walkthrough. I put intelligence at the core of organisations, built around people. This is what that looks like when the organisation is one person.

This is a setup you can run on your own. The record sits in one place, in plain text, so every agent you point at it reads the same thing: Claude Code, Codex, Kimi K2, whatever comes next. Change it once and it's changed in all of them.

People expect a platform. It is nothing: no vendor owns it, it never goes out of date, and anything you buy later can read it. Nothing you decide in your first month locks you in.

You don't need to understand all of what's below. Copy and paste this page into the AI of your choice and it will tell you what to do to get it set up.

The files every agent reads

Every tool gives you somewhere to put this and every one calls it something different: custom instructions, project files, a rules file, memory. Mine is a folder of plain text files that all of them read.

All ten load before I type anything: who I am, how I write, what I won't write, what's protected, what I refuse, and the checks on finished work. 249KB, every session.

That is a deliberate trade. I want every tool to start from the complete identity layer. The deeper context beneath it still loads only when the task calls for it.

I counted 443 instructions in the seven-file load on 20 August. All ten now load, so the current count is higher.

The rule: make the load boundary explicit. My identity loads together; deeper context stays on demand.

How it's built
~/os/
├── identity/    10 files. All 10 load every session (249KB): who · direction ·
│                comms · boundaries · energy-and-rhythm · situational-rules ·
│                values · writing-blacklist · draft-check · interests.
├── context/     on demand: the IP, the people, the tool stack, the
│                page doctrine, and a corpus of my own sent writing by register.
├── skills/      the procedures
├── agents/      the specialists
└── templates/   reusable structures

The tool's own config file is a pointer at ~/os/ and a short read-first list. A start-of-session script does the loading, so the same core works in a second tool without being copied into it.

One core, two roots

Work and the rest of life run off the same core, into separate roots. The wall is one-directional: personal detail never surfaces in a work artefact or on a public page.

That wall is a written rule in the always-loaded layer. Nothing enforces it.

The rule: one core, split by domain. A second account fragments the record.

How it's built

~/os/ is the core. ~/work/ and ~/life/ are the roots it serves, each with its own entry file and its own specialists. Household money goes to a different one from business money, so the two never co-mingle for tax.

Reading a rule is not running one

I read my own writing rules end to end, then drafted 1,245 words and sent 721. Reading them changed nothing about what got written.

So they stopped being a document and became small programs that run on their own, at fixed moments. Six of them.

Two are reflexes: they run automatically, at the start and the end. One loads the record before I type. One files anything worth keeping when I finish, and saves the day's changes.

Four are gates: they sit in the way of anything leaving. One won't let the private files be pushed anywhere from this tool. The other tool I run has no equivalent. One won't let a page go live if it's missing a version stamp or the right privacy setting. Two check what I've written against my own writing rules before it goes out, including email, which never gets saved as a file to check.

The rule: anything that has to happen every time is a script, not a reminder. And the check runs against the finished words, never before them.

How it's built

Six hooks, four events, one config file.

SessionStart            → session-context.sh      loads ~/os/identity/ + today's date

Stop                    → session-reflect.sh      proposes durable filings;
                                                  git-commits ~/os. Loop-guarded,
                                                  debounced to once / 30 min.
                        → comms-gate.sh           scans the finished turn for an
                                                  unsent draft. High-precision
                                                  markers only (a sign-off, a
                                                  quoted draft, a Subject line).

PreToolUse(Bash)
  if Bash(git *)        → git-push-guard.sh       DENY  push or remote-add in ~/os
                                                  ASK   any other git push
  if Bash(git commit*)  → artefact-audit-guard.sh audits the working tree across
                                                  the three site repos; DENIES the
                                                  commit on a failed house standard.
                                                  Fails OPEN on its own errors so it
                                                  can never brick committing; closed
                                                  only on a real audit failure.

PostToolUse(Write|Edit) → draft-check.sh          injects the checklist the moment an
                                                  outward artefact is written.
                                                  Silent on notes, memory, code.

The two git gates block. The two writing gates are advisory.

The loop needs something to reflect on

A reflex with nothing to read files nothing. Through the day, observations, decisions and loose ends go to a daily note, a running log, a signal inbox and a jobs list. The end-of-session filing goes to a memory store: one fact per file, a one-line description on each, links between them, under an index that loads at the start of every session.

The rule: a system that learns needs a record to learn from.

How it's built

Each memory is a markdown file with a name, a one-line description used to decide relevance on recall, and a type: who I am, guidance I've given, live project state, or a pointer to something external. Bodies cross-link by name. The index that loads every session is 22.3KB against a ceiling of about 24.4KB, past which the tail stops loading, so index lines stay short and superseded entries get retired. The store is its own local git repo with a pre-push hook that hard-blocks any push.

The methods load with the task

The procedures sit dormant until their task comes up: how I draft an email, scope a proposal, design a teaching session, write a long piece, plan a day, run the Friday audit. The specialists get called by hand for a specific job: a reviewer, a sparring partner, a financial view, an academic panel, a researcher. Flat, with nothing routing between me and them.

Writing one of these does not install it. Authoring is not installing.

The rule: expertise loads when its task arrives, and you do the orchestrating.

How it's built

Both libraries live in ~/os/ and reach the tool through symlinks. A file written into ~/os/skills/ without a matching link is invisible to every session and silently does nothing. Six were stranded that way for weeks, and one more was linked but missing a key its loader needed, which is the same failure one layer down.

Each specialist declares what it is, reviewer or sparring partner or verifier, before what it does, and reports back rather than acting.

Then wire it to where the work is

Notion, mail, calendar, the drive, the books, the domains, the sites. A connection amplifies whatever the setup already is.

The rule: wire to where the work lives, and wire it last.

How it's built

Notion, Gmail, Google Calendar, Google Drive, Xero, Netlify, GoDaddy, Canva and the browser. Each is a live read into a system that already holds the work, so nothing is answered from a copy of it.

What comes out is a page

Output is a page. Owned, addressable, version-stamped, routed by who should see it, from fully public down to gated behind a login. This one is an instance of it.

The rule: own the address the work arrives at.

How it's built

Three site repos, each its own deployment. A _headers file carries the index posture per surface. Every page has a fixed version widget that opens into its own change log. The commit gate above audits all three.

Keeping it true

It all sits in version control. When a fact sharpens I overwrite the one live source and let history hold what it used to say. No stale second copy quietly steering the work.

This page has been wrong. On 6 August it described three hooks while six were running, claimed a specialist that had never been installed, and left the memory store out entirely.

The record travels and the guards don't. Hooks and permissions are configuration, and configuration stops at the tool it was written in. Run your core through a second tool and it arrives with none of them.

One of mine doesn't run in the tool it was written in. The rule that every outward draft gets reviewed before I see it needs the tool to call a second agent, and a session that won't do that on its own leaves the rule written and not running. I found it on 20 August, in a session that had just rewritten this page's opening.

The rule: overwrite, don't stack. A guard you built in one tool is not a property of your setup. Neither is one that needs the tool's permission to fire.

How it's built

~/os/ is a local git repo with no remote. The end-of-session reflex commits it. No remote is deliberate: the core holds confidential material, and offsite backup is a separate call.

Run it against yours

This whole page is a file. Put it into your AI and have it score your setup against the nine checks: where you sit on each, and what to build next.

Then paste it into Claude, ChatGPT, or whatever you use, and hit send. Or download the file.

  1. The record. Outside the tool, in files you own, with a small always-loaded layer separate from a deeper on-demand one?
  2. The wall. One core covering everything, with your domains held apart by a rule rather than fragmented into separate systems?
  3. The reflexes. Context loaded at the start and durable facts filed at the end, without you asking?
  4. The gates. Your own standard running against finished work, before anything publishes?
  5. The journal. Something real for the loop to reflect on, and a linked store the filing goes to?
  6. The methods. Recurring moves packaged to load on demand, and specialists you call by hand?
  7. The connections. Wired to where the work already is, and wired after the core was right?
  8. The output. Arriving as an owned, addressable, version-stamped page?
  9. Canonise. One live source, overwritten when it sharpens, no stale second copy?

10. The discipline of the core itself. I left this one out because nobody had finished it. Measuring my own for two weeks gave it a shape, and I fail four of the five parts today.

  • A budget. The seven-file load counted 443 instructions on 20 August, against the 150 to 200 a current model follows well. All ten files now load. Failing by deliberate choice.
  • A ceiling. The index that loads every session sits 1,525 bytes under the point where its tail stops loading, and nothing tells you when it does. Close.
  • A copy somewhere else. Mine is on one machine, deliberately, because the core holds confidential material. It is still one machine. Failing.
  • Enforcement in every tool you run. The guard that stops the private core being pushed exists in one of the two tools I use. Failing.
  • A link check. Two procedures written three days ago are invisible to every session, because writing a file into the folder is not the same as installing it. Failing.

The rule: the core gets audited on the same terms as everything it holds.

Then run it again once it has grown

The nine checks ask whether you have the thing. Later the question is whether you have too much of it. These files grow one rule at a time: the agent gets something wrong, you add a rule, nobody takes one out.

Same move. Put this page into your AI and ask for the cut.

  1. Count what loads every session. Instruction units, not files. Under 150, stop here.
  2. Find the contradictions before cutting anything. Two rules that can't both hold make the agent unpredictable, and they are why people say it ignores them.
  3. Keep only what changes most answers. The rest moves to the layer that loads when its task arrives.
  4. Delete four kinds. Already said elsewhere. Vague. A file path, which will drift. And anything the model already does on its own, which you test by running it, because arguing about that one is arguing about the default.
  5. Delete a ban with nothing beside it. Naming what to avoid makes it more available. State the target instead.

When the agent gets something wrong, ask it why it decided that before you write the rule. Half the time what was missing is a fact.

The rule: give the always-loaded layer a budget, and make every new line spend against it.

Tell me what you did differently.

Back to Working frames · Read the design: The Verifiable Core · Read the organisational frame: The Intelligence-Centred Firm

As of

Last true: 25 August 2026

v3.5 · All ten identity files now load in every session. The page states the 249KB cost and keeps the deeper context on demand.

v3.4 · The tenth check is written. It was left open because nobody had finished it; two weeks of measuring this setup gave it five parts, and four of them fail here today — the instruction budget at 443 against 150 to 200, no copy off the machine, the private-core guard existing in one of the two tools I run, and two procedures written three days ago that no session can see. Same pass fixed the memory-index figure, stale at 20.1KB against a real 22.3KB. Same pass corrected the gates line, which claimed the guard stops the private files going anywhere and should have said anywhere from this tool. v3.3 · A second self-run added: the nine checks ask whether you have the thing, and this asks whether you have too much of it. Count, find the contradictions first, keep only what changes most answers, and delete the four kinds plus a ban with nothing beside it. It runs the same way as the checks, which is the point: nobody needs me to audit it for them. Rowan Starter is deleted, not retired. It packaged a configuration for someone else to inherit, which is the thing this page exists instead of. v3.2 · Three corrections. The always-loaded section now carries the number it was missing: a current model follows roughly 150 to 200 instructions well, and mine counted 443 in August 2026. The closing section gains a second instance of the page's own argument, found the day it was written: the rule that every outward draft gets reviewed needs the tool to call a second agent, and in a session that won't, the rule is written and not running. So a guard that needs the tool's permission is not a property of the setup either. And the counts came off skills, context and agents, which is what v3.0 said it had already done and hadn't: skills had moved from 16 to 18. v3.1 · One paragraph added to the intro, under the 15 August opening, which is unchanged. It carries the point the page was leaving out: that being nothing is the advantage, not a caveat. No vendor owns it, it does not go out of date, anything bought later can read it, and nothing decided in the first month locks anyone in. Lifted from how the same argument lands in a room. v3.0 · Rebuilt around the argument instead of the inventory. The ten structure cards were a taxonomy that could be read in any order; the page now runs as a sequence with the turn in the middle, where the writing rules moved out of files I read and into scripts that run. Retitled off the Verifiable Core, which was a prerequisite the title assumed. Same URL. Mechanics for each part now sit in a fold underneath it, so the argument reads clean and the build detail is there for anyone who wants it. Corrections against the live setup: the work/life wall is a written rule and nothing enforces it (previously implied enforcement); the config-file claim was wrong, it is a pointer plus a read-first list, not four lines; the memory index is 20.1KB against a 24.4KB ceiling. Counts that move on their own — files, commits, how many skills — are off the page, because they went stale twice inside the day they were written. Added what the harness does not carry between tools. Also fixed in the setup, not on the page: the research-analyst specialist had been linked since 6 August and never loaded, missing a key its loader needs. v2.8 · Took the kit off the page. The Rowan Starter card and the closing scaffold line are gone. The section is now "Take it and run it against yours", with a download link beside the copy button, and the page closes on a return leg: tell me what you did differently. Same pass, caught the setup up to what actually runs: "three hooks" was six, so the reflexes card splits into reflexes (two, start and end) and gates (four at the boundary, including the house-standard commit block and the two draft checks added 5 Aug); the capture layer now names the linked memory store; checks 3 and 6 follow. v2.7 · One-click on-ramp: added a "Copy this page for your AI" button. v2.6 · Removed the "open edge" closer. v2.5 · Rewrote the intro to lead flat-declarative; cut the four-step "Where to start" list. v2.4 · Promoted the Markdown self-audit as the lead way in. v2.3 · Added the nine-check rubric. v2.2 · Added the work/life split. v2.1 · Tightened. v2.0 · Rebuilt to describe my own operating structure rather than translate an engineering guide. v1.1 · Voice pass. v1.0 · First public version, adapted from a private working note shared with peers.