A memory-first knowledge base for {{DOMAIN}}. Durable facts compiled into
05 concepts/ (relationships inline via [[wikilinks]]), sources in raw/, mapped by
index.md. Built on the Karpathy "knowledge-base-as-compiler" method.
- [[SCHEMA]] — how this KB works (the method). Read first.
- [[index]] — the map (start point after AGENTS).
- [[Actions]] — the single live to-do dashboard (every open
#action).
This KB is two tools working together:
- Claude Code — the agent that maintains the base: it captures, compiles, links, and lints, reading
AGENTS.md(viaCLAUDE.md) +SYSTEM/SCHEMA.mdevery session and doing the bookkeeping for you. - Obsidian — how you read and navigate it. The vault is plain markdown (any editor works), but Obsidian is the intended "IDE": it renders
[[wikilinks]], gives you a backlinks panel and graph view, and — with one plugin — turnsActions.mdinto a live to-do dashboard.
Karpathy's framing: "Obsidian is the IDE; the LLM is the programmer; the wiki is the codebase."
Steps:
- Install both tools — Claude Code (the agent) and Obsidian (free).
- Get the repo — two modes:
- Clone mode (simplest):
git clonethis design repo and use it directly. Your personal content lives in the numbered content folders (00 daily/…05 concepts/, plusraw/,attachments/), which git ignores by default — nothing personal can be committed by accident, andgit pullbrings framework updates any time without conflicts. - Instance-repo mode (own history): copy the folder into your own private repo
and add this repo as a fetch-only
upstream(push URL disabled) — pull framework updates inward with the shipped skillPull Framework Updates from CNTXT1. This is how the maintainer's own instance runs.
- Clone mode (simplest):
- Bootstrap with Claude Code.
cdinto the folder, runclaude, and sayfollow setup.md. It interviews you (~10 min), fills the templated{{placeholders}}, and runs one full capture→compile loop so you see the method work once. (Prefer to do it by hand?setup.mdhas a manual path.) - Open it as an Obsidian vault. Obsidian → Open folder as vault → pick your renamed folder. Then enable the Tasks community plugin (Settings → Community plugins → Browse → search "Tasks" → Install → Enable) — this is what makes
Actions.mdaggregate every#actioninto one live view. Without it, thetasksquery blocks just render as code. - Start the daily habit (below): drop notes at the root, and periodically ask Claude to "file the inbox" and "run the knowledge health check."
Full walkthrough — including the no-agent manual path and what you'll have when it's done — is in setup.md.
The vault uses a numbered GTD-shaped layout so the
Obsidian file explorer sorts it by altitude — one folder per level of focus,
chained by frontmatter up-links (area: / serves: / horizon:):
| Folder | What lives there |
|---|---|
00 daily/ |
Day notes (not compiled truth) |
01 Horizons/ |
Goals (H3) · vision (H4) · purpose & principles (H5) |
02 Areas/ |
Ongoing responsibilities, reviewed on a cadence (H2) — physical things in Assets/ |
03 Projects/ |
Finite workstreams with an endpoint (H1) — done ones move to archive/ |
04 People/ |
One note per person or vendor (type: org) |
05 concepts/ |
Compiled, evergreen knowledge |
raw/ |
Append-only source captures |
Plus Skills/ + Agents/ (generated mirrors of the canonical .claude/ skills and
roles), attachments/, excalidraw/, and SYSTEM/ (schema, scripts, ledgers).
Folder names live in one place, SYSTEM/bin/kb-folders.json. Coming from the older
Knowledge/ layout? See MIGRATING.md.
The vault root is the inbox. Drop new notes/files anywhere at the root; they
get triaged into raw/ and compiled into 05 concepts/. The only permanent root
residents are README.md, index.md, Actions.md, CLAUDE.md, and AGENTS.md — if you
see anything else loose at the root, it's waiting to be filed (ask Claude to
"file the inbox" or "run the knowledge health check"). Full method in
AGENTS.md.
| Doc | Use it for |
|---|---|
| AGENTS.md · index.md | The knowledge base, structured with the Karpathy compiler method. Read AGENTS.md (how it works) then index.md (the map). Concepts in 05 concepts/, sources in raw/. |
| Actions.md | The single live to-do view — every open #action across the KB (needs the Obsidian Tasks plugin). |
.claude/ is the project-level agent surface — auto-discovered by Claude Code, Grok Build, and other SKILL.md-standard agents. Skills, agents, and commands are files in this folder. Hooks are not: /hooks is a slash-command UI over a "hooks" block in settings JSON, not a .claude/hooks/ markdown folder.
| Path | What |
|---|---|
skills/ |
Canonical runbooks. Visible Skills/ notes are generated mirrors — edit here, never the mirror. |
agents/ |
Named roles (research, compile, lint, project-worker). Visible Agents/*.md notes are generated mirrors. |
commands/ |
Project slash commands (e.g. spawn). |
settings.json |
Project hooks (committed, shared with the repo). |
settings.local.json |
Local permissions / personal hooks — gitignored, not shared. |
Where you put a "hooks" block decides its scope:
| File | Scope |
|---|---|
.claude/settings.json |
This vault only — this is what the kit ships |
.claude/settings.local.json |
This vault, you only |
~/.claude/settings.json |
Every project on your machine |
Claude Code and Grok both read the project file. First session: trust the folder when prompted (Grok: /hooks-trust). Until then, project hooks are skipped. Inspect what's loaded with /hooks.
Shipped registrations (scripts live in SYSTEM/optional/automation/; this file only points at them):
| Event | Script | What it does |
|---|---|---|
SessionStart |
sessionstart-hook.sh |
Emits the generated boot bundle (SYSTEM/bin/build_boot_bundle.sh): host + jobs, the index.md Quick map, the live inbox, #priority actions, today's calendar/plan, log tail. Falls back to an older inline loader if the script is absent. |
Stop |
close-ritual-stop-hook.sh |
Once per dirty-tree session, reminds you to say "close". Never blocks. |
PostToolUse + Stop |
catch-porting-candidates.sh |
Nudges when generic/team files look like they belong downstream. No-op until you set CNTXT1_CLONE / TEAMS_REPO in the script. |
These are accelerants. AGENTS.md + index.md still orient a session without the loader; the Close a Session skill + the 6pm job still close one without the Stop reminder. Disable a single hook from /hooks, or set "disableAllHooks": true in a settings file.
The SessionStart script needs jq. Calendar in that payload is read-only from a cache — it stays empty until you install the optional gws job.
Not project hooks (still opt-in, still user-global / launchd): the 8am daily plan, 6pm summary, calendar fetch, Claude Desktop MCP. Those stay in SYSTEM/optional/automation/README.md. Copy the SessionStart script to ~/.claude/hooks/ only if you want the loader when you're not in this repo.
Your KB is a private instance generated from this kit, with its own
independent git history — deliberately not a GitHub fork. Forks of a public
repo can't be made private, and shared history would put your personal
content one mistyped git push (or one PR from the wrong branch) away from
being published. With independent histories, no single command can leak.
The two sync directions have opposite risk profiles, so they use opposite tooling:
Kit → instance (safe — automate it). Everything in this repo is already public, so pulling it into your private vault can't leak anything. One-time setup, from your vault root:
git remote add upstream https://github.com/caseycapshaw/CNTXT1.git
git remote set-url --push upstream DISABLED # git physically cannot push
Then adopt any kit improvement with git fetch upstream +
git cherry-pick <sha>. Files that stay byte-identical across instances
(SYSTEM/SCHEMA.md, SYSTEM/bin/*, most Skills/, templates) apply cleanly;
files your instance has populated (index.md, AGENTS.md, the concept
indexes) occasionally need a small manual merge. Step-by-step skill:
Skills/DO/Pull Framework Updates from CNTXT1.md.
Instance → kit (dangerous — stays manual). Personal content never leaves
your vault, so this direction is a deliberate, hand-operated path:
re-template to {{placeholders}}, run the identifier grep gate, and go
through this repo's CI (privacy gate + review). Skill:
Skills/DO/Sync an Improvement to CNTXT1.md.
Rule of thumb: author upstream-first. When you're about to build something generic — a lint check, a runbook, a template improvement — build it here (PRs welcome, see Contributing) and pull it into your vault via the safe direction. That keeps every framework enhancement maintained in exactly one place; the manual outward sync is only for improvements you discover after they're already implemented privately.
Last updated: {{DATE}}.
The CNTXT1 starter kit (templates, schema, scripts) is MIT-licensed — free to use, copy, and adapt. Your own knowledge base built from it is yours; delete this section when you personalize the repo.
Generic improvements to the framework are welcome — see .github/CONTRIBUTING.md. One rule dominates: this repo ships a framework, never personal content.