How it works — detail

From a folder of files to a connected wiki.

Margins is a Node process that connects Claude Desktop to a folder on your disk. You drop documents into the folder, ask Claude questions, and let Claude build a wiki underneath your originals as you go. The originals never move. The wiki grows file by file, each one accepted by you.

1What your folder looks like

A Margins vault is just a regular folder on your disk. After install and a few compiles, it has this shape. The originals you dropped in stay where you put them. Everything in wiki/ is generated by Claude through Margins, one accepted proposal at a time.

~/Documents/my-vault/the folder you point Margins at
├── CLAUDE.mdstarter operator instructions scaffolded at install
├── operator-manual.mdhuman-readable rules for the wiki
├── raw/conventional inbox for files you want to file later
│   ├── 2026-04-board-meeting.docxoriginal, untouched
│   ├── q3-strategy-doc.pdforiginal, untouched
│   └── product-update-mar.mdoriginal, untouched
├── // files can also live anywhere else in the vault
├── meetings/march-7-call.mdindexed if MARGINS_INGEST_ROOTS includes it
├── wiki/the structured layer Margins builds
│   ├── sources/one page per compiled file
│   │   ├── source-2026-04-board-meeting.md
│   │   ├── source-q3-strategy-doc.md
│   │   └── source-product-update-mar.md
│   ├── entities/people, companies, places, projects
│   │   ├── maya-chen.md
│   │   └── atlas-project.md
│   ├── concepts/durable ideas across multiple sources
│   │   └── release-cadence.md
│   ├── ingest-tracker.mdauto-updated row per accepted source page
│   └── index.mda navigable map of the vault
├── proposed/staging — pending writes waiting for your accept
│   └── wiki/sources/source-new-file.md
└── .margins/small hidden state: preferences, telemetry consent
The principle

Filesystem is truth. Frontmatter is the contract between source pages and the originals they describe. Margins is a local Node process that reads, suggests, and writes — but every write is staged in proposed/ first. You approve. Then it lands.

2How Margins interacts with the folder

When you talk to Claude in Claude Desktop, Claude has tools that read and write to your vault. Here is what happens when you say "compile this PDF" or "what did I learn from those meetings?"

You, in Claude Desktop

  1. "Help me file the PDF I just dropped into raw/"
  2. Claude shows what it found and asks for any context you want included.
  3. You confirm. Claude calls Margins.
  4. Claude returns: "Staged 1 proposal. Want me to walk you through it?"
  5. You read the proposal. Accept.

Claude, calling Margins tools

  1. margins_start runs on every new conversation. Returns vault stats, unprocessed file count, and recent preferences.
  2. list_unprocessed returns the PDF you just dropped.
  3. read_page on the PDF. Margins extracts text from the binary.
  4. propose_compile_from_raw with the path and a summary Claude generates.
  5. resolve_proposal with action=accept after your approval.

Margins, on disk

  1. Scans the configured ingest roots for files without a source page yet.
  2. Extracts text from PDF, DOCX, XLSX, EPUB, email, and more.
  3. Runs the compiler. Writes a structured markdown page to proposed/wiki/sources/...
  4. On accept: rename from proposed/ into the vault. Append a row to ingest-tracker.md.
  5. Original file stays put.

3How the connected wiki forms

The magic isn't the source pages themselves. It's that as multiple source pages accumulate, the same names and ideas start to recur. Margins surfaces those patterns. You accept proposals to build entity and concept pages. Those pages become hubs. Connections compound.

Raw files compile into source pages, which link into shared entity and concept hubs. RAW FILES SOURCE PAGES ENTITIES & CONCEPTS raw/board-meeting.docx original, untouched raw/q3-strategy.pdf original, untouched raw/march-email.eml original, untouched source-board-meeting.md raw_file: raw/board-meeting.docx mentions: [[maya-chen]], [[atlas-project]] source-q3-strategy.md raw_file: raw/q3-strategy.pdf mentions: [[maya-chen]], [[release-cadence]] source-march-email.md raw_file: raw/march-email.eml mentions: [[atlas-project]], [[release-cadence]] entities/maya-chen.md Source Log: ← source-board-meeting ← source-q3-strategy entities/atlas-project.md Source Log: ← source-board-meeting ← source-march-email concepts/release-cadence.md Source Log: ← source-q3-strategy ← source-march-email Left to right: 1. Raw files stay in place. Margins never moves or edits them. 2. Compile produces one source page per raw file, with wiki-links in the body. 3. Recurring entities and concepts become hubs that link back to every source that mentions them. Asking "what do I know about Maya?" reads maya-chen.md and follows its source-log links.

4The full toolkit Claude has

Claude has 17 tools in Margins. You never call them directly. You ask Claude things in plain language and Claude picks the right tool. Useful to know what's available so you can ask for it.

ToolWhat you'd ask ClaudeWhat it does
Read the vault
margins_start"What's in my vault?"Called automatically at the start of every conversation. Returns folder stats, unprocessed files, recent preferences, and a vault primer.
search_vault"Find the thing I wrote about X"Full-text and filename search across the entire vault, including binaries via text extraction.
read_page"Read the strategy doc"Pulls one file by path. Extracts text from PDFs, DOCX, and more.
get_backlinks"Who mentioned this person?"Finds every page that wiki-links to a given slug.
list_recent"What did I update yesterday?"Most recently modified files.
list_unprocessed"What haven't I filed yet?"Files in your vault that don't have a source page yet.
Build the wiki — propose, then accept
propose_compile_from_raw"File this PDF as a source"Reads a file, runs the compiler, stages a structured source page. Idempotent — won't double-stage.
propose_page"Draft an entity page for this person"Stages a new wiki page at the path you choose.
propose_edit"Add this fact to that page"Stages a string-replacement edit on an existing page.
append_to"Append this to today's daily note"Stages an append. Creates the page if it doesn't exist.
propose_wikilinks"Link this page to everything it mentions"Suggests wiki-link additions where plain text matches existing pages.
Review staged changes
list_proposals"Show me what's pending"Lists every staged proposal with destination path and size.
resolve_proposal"Accept that one"Accept moves the proposal into the live vault and auto-appends a tracker row. Reject deletes it.
Preferences and onboarding
record_preference"Always file my meetings as projects"Stores a one-line rule Margins re-reads at the start of every conversation.
recall_preferences(used by Claude automatically)Returns your stored preferences so proposals follow them.
record_telemetry_consent(asked once at install)Records whether you want to share anonymous usage data.

5The shape of your first month

The wiki doesn't appear at install. It grows file by file as you accept proposals. Compounding kicks in around the time you have ~15 source pages and the first entity hubs start naming patterns Claude can see across them.

Install + Day 1
Read works immediately

Point Margins at your folder. Open Claude Desktop. Ask questions about your files. Claude reads and quotes from them. No structure required yet.

raw/: any
wiki/: empty
source pages: 0
entities: 0
Days 2-7
First compiles

Claude offers to file the most substantive files. You accept the first batch one at a time. Each accept adds a structured source page and updates the tracker.

source pages: 5-10
entities: 0-2
tracker rows: matching
list_unprocessed: shrinking
Weeks 2-4
Hubs emerge

Recurring names start showing up across 3+ sources. Claude proposes entity pages for the load-bearing ones. You accept what matters. Concepts follow the same path.

source pages: 15-30
entities: 5-10
concepts: 2-4
backlinks: navigable
Month 2+
Compounding

"What do I know about this topic?" returns the entity page and its source log instead of re-reading raw files. New sources auto-link to existing entities.

source pages: 50+
entities: 15-25
full graph
read → search → traverse

6Before and after, at 30 days

Before Margins — just a folder
Files50
Structurenone
"What do I know about X?"open and skim each file
"What changed this week?"sort by mtime, open each
Connections between docsonly in your head
Time to answerminutes to hours
After 30 days of Margins
Files (raw)50, untouched
Source pages~30
"What do I know about X?"read the entity page
"What changed this week?"list_recent + tracker
Connections between docsnavigable via [[wiki links]]
Time to answerseconds

7What stays under your control

Try it on your own folder

One install command. Runs locally. No API key.

Get started