Project Name
Vault template
First committed by asakin
Published in asakin/llm-context-base. Publisher page
74 GitHub stars
What it is
A git template for building your own LLM-powered personal wiki. Training period, metadata standard, lint system included. Clone and go.
AutoGineer overview, from the brain’s own files
llm-context-base is an opinionated template designed to turn a local git repository into an LLM-powered personal wiki. It implements a three-layer pattern consisting of raw source documents, an LLM-maintained wiki, and a schema configuration. The system is designed to adapt to a user's workflow over time, eliminating the need for upfront taxonomy design. It includes a metadata standard for queryable files, an inbox-first capture system with a 7-day TTL, and a linting system to maintain document health. It supports various AI tools including Claude Code, Cursor, and GitHub Copilot, providing a consistent interface for managing personal knowledge.
How it works
Memory model: LLM wiki
AutoGineer overview, from the brain’s own files
The system uses a specific folder structure including 1-Projects, 2-Knowledge, 3-Journal, and 4-Private, alongside configuration and metadata folders. Users capture information into an _inbox folder, which the AI then processes and files according to a metadata standard. The system is bootstrapped via configuration files in .claude, .cursor, and .github, which direct the AI to follow instructions located in _config and _meta. It uses a training period to learn user patterns and maintains documentation through a split README file that separates user-specific content from framework documentation.
| Folder | Role | Files |
|---|---|---|
| .claude | agent-config | 2 |
| .cursor | agent-config | 1 |
| .github | agent-config | 1 |
| .obsidian | obsidian-config | 7 |
| assets | attachments | 2 |
| docs | docs | 13 |
| examples | examples | 4 |
| 1-Projects | folder | 3 |
| 2-Knowledge | folder | 5 |
| 3-Journal | folder | 1 |
| 4-Private | folder | 1 |
| _config | folder | 4 |
| _inbox | folder | 1 |
| _meta | folder | 14 |
| _output | folder | 1 |
| _sources | folder | 2 |
The agent reads
- CONTRIBUTING.md evidence: .claude/CLAUDE.md
- _config/config.md evidence: README.md
The agent writes
- _config/config.md evidence: .claude/CLAUDE.md
- _config/context.md evidence: .claude/CLAUDE.md
- _inbox/ evidence: .claude/CLAUDE.md
- _output/ evidence: README.md
Requirements
Apps: Obsidian
Databases: MongoDB, PostgreSQL
Works with: Claude Code, GitHub Copilot, Cursor, Devin (ex-Windsurf)
Set it up
- Download the brain as a ZIP and unzip it where you keep your notes or project: https://mp-staging.autogineer.com/agent-brains/asakin/llm-context-base/download
In Obsidian, choose “Open folder as vault” and pick the folder.
Claude Code reads .claude/CLAUDE.md from this folder automatically.
cd llm-context-base && claude
AutoGineer scanned these files at commit 3c096ca.
First committed by asakin. Published in asakin/llm-context-base. Licence: Apache License 2.0.
Usage
AutoGineer overview, from the brain’s own files
- Capture unstructured notes into the inbox for later organization by the AI.
- Maintain decision records with context, options, and rationale.
- Query the wiki to synthesize information across multiple documents.
- Run linting commands to identify stale files or missing metadata.
- Manage project initiatives with briefs and timeline tracking.
- Generate reports or summaries from stored knowledge.
- “Capture this: here's how our onboarding process works...”
- Creates a file in the inbox and offers to file it in the appropriate location.
- “We decided to use PostgreSQL over MongoDB, let me document why”
- Generates a decision record with context, options, rationale, and an outcome section.
- “What do we know about our hiring process?”
- Scans file summaries and synthesizes an answer with source citations.
- “Lint the wiki”
- Surfaces stale files, missing metadata, and orphaned documents.
Documentation by asakin
[Project Name]
This README will be personalized during your first session.
<!-- llm-context-base:framework-readme -->
llm-context-base
An opinionated template for building your own LLM Wiki.
Use the template, point your AI assistant at it, and start talking. Over time, it learns how you work and adapts its structure to your needs without you having to design anything upfront.
How This Relates to Karpathy's LLM Wiki
Andrej Karpathy's LLM Wiki gist describes a three-layer pattern: raw source documents → an LLM-maintained wiki → a schema config file (like CLAUDE.md or AGENTS.md). The LLM reads sources, maintains structured wiki pages, and follows the schema config to stay consistent.
llm-context-base implements this pattern as a ready-to-use template — so you don't have to build it from scratch. What it adds on top of the base pattern:
Metadata standard — every file gets a queryable header (type, summary, tags, status, date). The LLM scans these instead of loading full files, which scales cleanly to hundreds of documents.
Inbox-first capture — a frictionless landing zone with a 7-day TTL. You capture without deciding where things go. The LLM files them later.
Training period — the system starts chatty (learning your patterns) and goes quiet as it adapts. You never design a taxonomy upfront.
Lint system — surfaces stale files, missing metadata, and orphaned docs on demand.
Multi-LLM support — bootstrap shims for Claude Code, Cursor, Copilot, Windsurf, and others. One config, any tool.
Full comparison with the Karpathy pattern →
Quick Start
1. Create your copy. Click "Use this template" on GitHub. Make it private. Clone it.
git clone https://github.com/YOUR-USERNAME/my-wiki.git
cd my-wiki2. Set up your workspace. Open the repo as an Obsidian vault on one side, your AI agent on the other. You talk to the AI — it builds the wiki. You watch it happen in Obsidian.
Full Obsidian setup → · No Obsidian? Any editor + any supported AI tool works fine.
3. Fill in your profile. Open _config/config.md, fill in the About You section, and set Training Start Date to today.
4. Start talking. Open in your AI tool of choice and go:
"Capture this: here's how our onboarding process works..."
"We decided to use PostgreSQL over MongoDB, let me document why"
"What do we know about our deployment process?"
"Lint the wiki, what needs attention?"
That's it. The system adapts to what you actually need.
Want to stay updated as the framework improves? The template approach gives you a clean start but disconnects you from upstream. If you want to pull future improvements (new protocols, better training behavior, bug fixes), use the Framework Track setup instead.
What Makes This Different
It learns how you work. The first 30 days are a training period. Your AI asks questions, suggests directories, and logs what it learns. By day 45, it's quiet and efficient. You never design a taxonomy upfront. Full details →
Capture first, organize later. Everything lands in _inbox/ with a 7-day TTL. You never hesitate to capture because you don't have to decide where it goes yet. Your AI files it later.
Your README stays yours. This file has two sections split by a marker. Above it: your personal project README, maintained by your AI as the wiki evolves. Below it: the framework docs, which track upstream cleanly. You get living documentation without merge conflicts.
Patterns are captured as they emerge. When your AI learns a new convention or preference during a conversation, it writes it down immediately, not at commit time. Nothing is lost if you commit from the command line without AI involvement.
Every file is queryable. A metadata standard on every document means your AI can scan summaries and tags without loading full files. This scales to hundreds of documents.
It maintains itself. Lint checks surface stale files, missing metadata, and orphaned docs. The system even reviews its own instruction efficiency to prevent context window bloat as your wiki grows.
What You Can Do
| Say this | What happens |
|---|---|
| "Capture this: here's how we set up monitoring..." | Creates a file in _inbox/, offers to file it |
| "We decided to use Terraform over Pulumi, document why" | Decision record with context, options, rationale, and an outcome section to fill in later |
| "What do we know about our hiring process?" | Scans summaries, synthesizes an answer with source citations |
| "Lint the wiki" | Surfaces stale files, missing metadata, orphaned docs |
| "Start a new initiative: migrate to Kubernetes" | Project workspace with brief, timeline, artifact tracking |
| "Create a slide deck summarizing Q1 decisions" | Generates output in _output/, dated and organized |
These form a cycle. Capture feeds queries, queries inform decisions, decisions get tracked, lint keeps it all healthy. The system compounds over time.
Go Deeper
| Topic | What's there |
|---|---|
| Training Phases | How the system adapts to you over 30 days |
| Directory Structure | What each folder is for, why there are only 4 |
| Journal Sync & Privacy | Syncing 3-Journal/ across devices — plaintext, git-crypt, or external |
| Metadata Standard | The format that makes everything queryable |
| Supported Tools | Claude Code, Cursor, Copilot, Windsurf, ChatGPT, and others |
| Obsidian Setup | Pre-configured vault, plugins, web clipper |
| Design Decisions | Why the system works the way it does |
| FAQ | Common questions |
| Linked Code Repos | Connect wiki project entries to real code repos — workspace files, context files, Obsidian plugin dev |
| Extending & Contributing | Customize locally vs. contribute upstream |
| Future Directions | Where this is headed |
| Philosophy | The deeper thinking behind the system |
The examples/ directory has four sample files showing the metadata standard in action. Read them, then delete them when you're comfortable.
Credits
Built on Andrej Karpathy's LLM Wiki Pattern. Implementation by Ariel Sakin, refined over several months of daily use managing business operations.
License
Apache 2.0. See LICENSE.
_config/config.md
Personal OS Configuration
This file is the brain of your personal knowledge system. Your AI assistant reads it at the start of every session. It serves three purposes:
Your profile — who you are and what you need (you fill this in)
Training controller — manages the adaptation period (automatic)
LLM instructions — tells your AI how to behave (don't modify unless you know what you're doing)
About You
<!-- Fill this in. Be specific — the more context you give, the better your AI adapts. -->
Name: [Your name]
Role: [Your role — e.g., "Software engineer at a startup", "CIO at a mid-size company", "Freelance designer", "Home cook and recipe collector"]
Goals: [What you want this system to help you with — 2-3 sentences]
Context: [Any additional context about your work, team, tools, industry]
Conversation Tone
<!-- Controls how your AI talks to you in chat — not how it writes files. File tone is governed by templates and per-file instructions. Edit this freely. It's just a prompt your AI reads each session. The key distinction to keep in mind: - Chat responses (the terminal): this is a conversation. Adjust the register here. - Files the AI creates or edits: those are durable content. A different standard applies. Whatever you set here should NOT bleed into wiki articles, decisions, drafts, or docs. Suggestions for what to put here: - How formal or casual you want the AI to sound - Whether to use emojis (and how — structural anchors vs. inline decoration are very different) - Specific things the AI does that annoy you (LLMs have learned patterns from human writing that produce tics — em dashes, filler phrases, over-explaining — you can suppress them here) - Response length preferences -->
Conversational and direct, like talking to a technically sharp colleague
Use emojis in chat for structure and visual clarity — section headers, status indicators, categories. Not inline as word replacements.
Short responses by default — lead with the answer or the action, not the reasoning
When you produce a file or artifact, let it speak for itself — don't summarize what you just wrote
Files and wiki content use a different register: professional, no emojis, no casual language
System Settings
Training Start Date: [YYYY-MM-DD — set this to today when you first start using the system]
Training Period Days: 30
Current Phase: training
Preserve Important Sources: no
<!-- Phases: - training: The system is learning your needs. It asks questions, suggests structure, logs adaptations. - cooldown: The system reduces suggestions by ~70%. Uses what it learned. 14 days after training ends. - established: The system is quiet and efficient. Only speaks up when something is broken. The AI calculates the phase automatically from Training Start Date + Training Period Days. You can also manually set Current Phase if you want to skip ahead or extend training. Preserve Important Sources: when set to "yes", the AI will selectively preserve original source documents in _sources/ when filing inbox items it judges important enough to keep. During training, it will ask once or twice to calibrate your preferences. -->
Training Log
<!-- During the training period, your AI will log observations here about how you use the system. -->
<!-- This builds up over time and helps the system adapt to YOUR specific needs. -->
<!-- Don't delete this section — it's your system's memory of what it learned about you. -->
Structure Adaptations
<!-- AI logs structural changes it suggests or makes. Example: -->
<!-- - 2026-04-10: Created 5-Recipes/ directory — user captures cooking content frequently -->
Preferences Learned
<!-- AI logs your preferences as it discovers them. Example: -->
<!-- - 2026-04-08: User prefers short file names without dates in the name -->
<!-- - 2026-04-12: User wants decisions to include cost analysis -->
Directories Added
<!-- AI logs new directories created based on your needs. Example: -->
<!-- - 2026-04-10: 5-Recipes/ — user is building a recipe collection -->
<!-- - 2026-04-15: 6-Reading-Notes/ — user captures book and article notes -->
Personal context (small facts about you, key people, preferences) is stored in
_config/context.md. Your AI populates it during training.
Your Conventions
<!-- As training progresses, the AI fills this in based on your usage patterns. -->
<!-- Once established, these become the rules for how the system operates for you. -->
File Naming: [discovered during training]
Tags You Use: [discovered during training]
Content Types: [discovered during training]
Preferred Structure: [discovered during training]
LLM Instructions
Note: Everything below is instructions for your AI assistant. Modify only if you understand the implications.
Session Start Protocol
At the start of every session:
Read this file (
_config/config.md)Calculate the current phase (see Phase Calculation below)
Read
_meta/instructions/general.mdRead
PHILOSOPHY.md(during training and cooldown only)Adjust behavior based on the current phase
Phase Calculation
today = current date
start = Training Start Date
training_end = start + Training Period Days
cooldown_end = training_end + 14 days
if Current Phase is manually set to something other than "training", use that.
Otherwise:
if today < training_end → phase = "training"
else if today < cooldown_end → phase = "cooldown"
else → phase = "established"
training_progress = (today - start) / Training Period DaysBehavior by Phase
Training Phase (Day 0 → Training Period Days)
Goal: Learn everything about how this person works and what they need.
Be proactive and conversational
Ask training questions about how the user works, what they need, what's missing (frequency governed by easing curve below)
When content doesn't fit existing directories, suggest new ones
Propose naming conventions based on observed patterns
Log observations to the Training Log section above (structure adaptations, preferences, new directories)
Explain what you're doing and why — teach the system
At the end of each session, update the Training Log with anything new you learned
Offer to create templates when you see repeated content patterns
Training phases use a 20/30/50 easing curve (relative to Training Period Days):
Discovery (first 20%): 1-2 training questions per day. Proactively suggest structure inline. Propose new directories on the first item that doesn't fit — don't wait for patterns.
Refinement (next 30%): ~1 training question per day. Suggest structure only when patterns are clear (2-3 similar items).
Quiet (final 50%): Training questions only when genuinely needed — maybe 1-2 per week. Only suggest new directories when very clear.
Training question frequency is per day, not per response. Structure suggestions (proposing where to file content, suggesting new directories) are not training questions — they happen inline as part of the normal response.
Training Status Footer — shown only when there are training questions to ask:
───────────────────────────
🧠 Training — Day [X] of [Y] [progress bar] [percent]%
Phase: [Discovery / Refinement / Quiet] ([phase description])
📋 Training questions:
1. [question 1]
2. [question 2]
───────────────────────────Footer rules:
Only show the footer when there are actual training questions. No footer = no questions for this response.
The session start protocol still shows training phase status on every session, regardless of questions.
Phase descriptions: Discovery (first 20%) → "learning your patterns", Refinement (next 30%) → "refining what I know", Quiet (final 50%) → "almost done learning"
Progress bar: 20 chars wide,
█for filled,░for unfilledNumber the questions (1, 2, 3…) so the user can answer by number
Training questions go ONLY in the footer — never inline in the response body
Never ask meta-questions about the training system itself. Questions are about the user's content, preferences, naming, and structure — never about the AI's internals.
Structured question tools: If the environment provides a structured question UI (e.g., AskUserQuestion in Claude Code), prefer it over text questions in the footer. The structured UI gives numbered options with descriptions and a skip button — better UX. Frame questions as 2-4 options covering likely answers, with a free-text fallback. When using structured tools, still show the footer status line (day/progress/phase) but replace the questions section with: "📋 See question prompt above ☝️"
Unanswered questions: If the user doesn't answer a training question, do NOT treat silence as a signal. They may have been busy. Re-ask the question next time there's a question slot.
User override: If the user tells you to stop asking questions, skip training, reduce frequency, or expresses annoyance — respect it immediately:
Reduce frequency → act as if you're in the next phase
Skip training → set Current Phase to cooldown or established in config.md
Don't apologize excessively — just adjust.
Cooldown Phase (Training Period Days → Training Period Days + 14)
Goal: Validate that learned preferences work. Make final adjustments.
Reduce proactive suggestions by ~70%
Only ask questions when genuinely ambiguous or clarifications are needed
Stop logging to Training Log (it should be stable by now)
Update "Your Conventions" section if not yet filled in
Focus on execution over exploration
If something seems wrong with the learned conventions, ask — but briefly
Show a minimal training footer on each response:
🧠 Cooldown — wrapping up training, mostly quiet now.
Established Phase (after Cooldown)
Goal: Be mostly invisible. Just work.
Execute efficiently with minimal commentary
Only suggest changes when something is clearly broken or contradictory
No unsolicited questions about preferences or structure
The system should feel like it reads your mind
Still follow the metadata standard and all instruction modules
Still run lint checks when asked
Do not show any training status footer
Core Behaviors (All Phases)
Always follow the metadata standard in
_config/standard.md— every file gets a metadata blockInbox first — new captures go to
_inbox/unless the user specifies a locationCite sources — when answering queries, always reference the source file and its Updated date
Don't hallucinate content — if a file doesn't exist, say so and offer to create it
Respect the .gitignore —
4-Private/and3-Journal/are sensitive; don't reference their contents in public outputsFollow instruction modules in
_meta/instructions/— they define specific behaviors for knowledge queries, linting, writing, and definition of doneLoad instructions just-in-time — don't read all instruction modules at startup. Load them only when triggered (see the routing table in
_meta/instructions/general.md). This keeps context windows small as the wiki grows.
73 files
- .claude/CLAUDE.md
- .claude/settings.json
- .cursor/rules/bootstrap.mdc
- .cursorrules
- .github/copilot-instructions.md
- .gitignore
- .obsidian/app.json
- .obsidian/appearance.json
- .obsidian/core-plugins.json
- .obsidian/daily-notes.json
- .obsidian/graph.json
- .obsidian/snippets/llm-wiki.css
- .obsidian/templates.json
- .windsurfrules
- 1-Projects/README.md
- 1-Projects/_SHIPPED/.gitkeep
- 1-Projects/_parked/README.md
- 2-Knowledge/Decisions/.gitkeep
- 2-Knowledge/HowTo/.gitkeep
- 2-Knowledge/README.md
- 2-Knowledge/References/.gitkeep
- 2-Knowledge/log.md
- 3-Journal/README.md
- 4-Private/README.md
- ATTRIBUTION.md
- CODE_OF_CONDUCT.md
- CONTRIBUTING.md
- LICENSE
- PHILOSOPHY.md
- README.md
- WIKI-LOG.md
- _config/config.md
- _config/context.md
- _config/standard.md
- _config/tools.md
- _inbox/README.md
- _meta/instructions/agent-write.md
- _meta/instructions/blog-posts/instructions.md
- _meta/instructions/definition-of-done.md
- _meta/instructions/general.md
- _meta/instructions/knowledge-lint.md
- _meta/instructions/knowledge-query.md
- _meta/instructions/optimization-review.md
- _meta/templates/blog-post.md
- _meta/templates/decision.md
- _meta/templates/inbox-capture.md
- _meta/templates/initiative.md
- _meta/templates/journal-entry.md
- _meta/templates/knowledge-article.md
- _meta/templates/meeting-notes.md
- _output/README.md
- _sources/.gitkeep
- _sources/README.md
- assets/.gitkeep
- assets/clipper-template.json
- docs/claude-code-setup.md
- docs/design-decisions.md
- docs/directory-structure.md
- docs/extending-and-contributing.md
- docs/faq.md
- docs/future-directions.md
- docs/journal-sync.md
- docs/linked-code-repos.md
- docs/llm-wiki-pattern.md
- docs/metadata-standard.md
- docs/obsidian-setup.md
- docs/supported-tools.md
- docs/training-phases.md
- examples/example-decision-record.md
- examples/example-inbox-capture.md
- examples/example-initiative.md
- examples/example-knowledge-article.md
- migrate-to-yaml-frontmatter.py
Advantages
- The system adapts to user patterns over a 30-day training period without requiring upfront taxonomy design. evidence: README.md
- Metadata standards on every document allow the AI to scan summaries and tags without loading full files, enabling scalability. evidence: README.md
- The inbox-first capture system allows for frictionless entry of information with a 7-day TTL for later filing. evidence: README.md
Limitations
- The template approach disconnects the user from upstream updates unless the Framework Track setup is used. evidence: README.md
Security
Risk level: No risk found
This brain runs
Agent instructions that run or fetch something (1)
.claude/CLAUDE.md:**Exception:** If the user's first message is a `/init` command or a meta question about the repo setup, complete that first — then run the Session Start Protocol on the next exchange.
Attribution and licence
- First committed by
asakin
- Publisher
- Ariel Sakin (Community)
- Source
- asakin/llm-context-base · commit 3c096ca
- Licence
- Apache License 2.0 (files served here)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
- Contributors
- asakin, claude
AutoGineer is not affiliated with or endorsed by asakin.
Download
The ZIP holds the files AutoGineer serves, with ATTRIBUTION.md and the licence. Download llm-context-base.zip