Skip to content

Repository files navigation

synapse-capture

MIT license Python stdlib only Claude Code plugin

Drop anything into it: web pages, your own notes, meeting takeaways, business docs, drafts. AI wires it all into one connected brain built for two readers. Your AI reads the graph and answers with citations. You read the wiki, your own private Wikipedia.

Synapse turns Obsidian + Claude Code into a self-assembling second brain: atomic notes joined by typed edges (supports, contradicts, derived from...), each carrying provenance and a verification status. That's the LLM-wiki pattern evolved with connection-typing and a trust layer. And it isn't just what you read; it's what you think. Your writing and your sources land in the same graph, so you can ask where they agree and where they collide. Optionally, it also distills your Claude Code sessions' defining moments into the same graph, so context compounds instead of evaporating.

The Synapse Wiki homepage: your brain, browsable, with typed connections and verification badges on everything

How it works

flowchart LR
    A["Drop anything<br>web clip &middot; note &middot; PDF"] --> B["raw/ inbox"]
    B --> C["/ingest"]
    C --> D["typed knowledge graph<br>plain Markdown + YAML"]
    D --> E["Ask: /connect &middot; /compare &middot; /consensus<br>cited answers from your library"]
    D --> F["Browse: /browse<br>your private wiki"]
Loading

Two readers, one brain: the AI traverses the graph and answers with citations; you read the same brain as a wiki. Everything below is those two loops in detail.

Install

claude plugin marketplace add jakelherridge/synapse-capture
claude plugin install synapse-capture@synapse-capture

Then type /setup in Claude Code. It builds your vault, writes config, and walks you through everything. Full from-scratch walkthrough (new to Obsidian and Claude): SETUP.md.

The main loop: Drop → Ingest → Ask + Browse

  1. Drop. Anything lands in your vault's raw/ inbox, from either ramp:
    • From the internet: the Obsidian Web Clipper saves any article, YouTube page, or website there in one click.
    • From your desktop: drag in any file Claude can read. Your notes and drafts, meeting takeaways, journal entries, strategy memos, your team's post-mortems, exported chats, PDFs. Your own thinking is first-class input, not an afterthought.
  2. /ingest. Claude reads the inbox, discusses takeaways with you, writes atomic typed nodes wired into what you already know, validates the graph, and archives the source. Watch it grow in Obsidian's graph view.
  3. Ask. The AI half of the payoff. Starter prompts, every answer cited to your own library:
    • /connect <topic>: connect all of my thoughts on this
    • /compare <topic>: my view vs. my sources (agreements, tensions, my gaps)
    • /consensus <topic>: what everyone in my vault agrees on, with takeaways
  4. /browse. The human half: your Synapse Wiki, the whole vault rendered as a private, Wikipedia-like site. A homepage with search, a what's-new digest, and recent activity. An article page per idea with its typed connections in the margin and a hand-sketched local map. Compiled topic pages ("what I think" vs "what I've read", contradictions surfaced). And a zoomable map of the whole brain. It rebuilds itself deterministically in ~0.1s after every ingest and capture; zero dependencies, it's just files.
A node page: a pending finding with a red contradicts edge to a verified source The map: hand-drawn domain regions with typed edges, zoomable
Typed edges + trust: this pending note contradicts a verified source, and the wiki shows it. The map: your domains as regions, contradictions as red dashed ink, every dot clickable.

Every answer cites [[nodes]] with their verification status. Valuable syntheses get filed back as nodes, so the graph compounds.

Optional second loop: capture your sessions

Off by default. You're in control (capture_mode in ~/.config/synapse-capture/config.yaml):

Mode Behavior
"manual" (default) Nothing is auto-recorded. /distill captures the current chat when you ask; /pin "..." grabs one moment.
"always" SessionEnd / PreCompact hooks auto-distill every qualifying session's defining moments: decisions, findings, pivots.
  • Capture (write side): a deterministic pre-filter scrubs secrets and tool noise; a gated Haiku distiller proposes ≤7 structured moments; a deterministic writer validates against a closed schema, dedups against the graph, and never blind-overwrites (a superseding decision becomes a new node with a typed supersedes edge).
  • Read-back (read side): at SessionStart, the plugin injects the project's capture digest (past decisions, with status) so new sessions start already knowing what you settled.
  • Verification is demand-driven: captures land not-yet-verified; Claude asks you to confirm, correct, or discard one the first time it materially relies on it. Never-used captures stay pending, which is healthy, not neglect. /review exists for batch cleanup if you like inbox-zero.

Ingest and capture are fully independent. Use either without the other.

How it works (Compute, then Narrate)

The model half proposes (distiller/ingest analysis); a deterministic stdlib-Python half disposes (validation, secret rejection, dedup, no-overwrite writes, index and site builds). The vault ships in vault-template/: the ontology contract, the index builder/validator, the wiki generator, and a CLAUDE.md operating manual. It's all Markdown + YAML in a folder, yours to keep even if you uninstall the plugin.

Observability

bin/doctor.sh runs the full preflight: config, vault, CLI, auth mode, offline pipeline proof, capture consent, and the last 5 capture runs. Every capture attempt (success, skip, or failure, with the reason) appends one line to ~/.cache/synapse-capture/runs.log.

Safety

  • Secrets are redacted before distillation and rejected at write time (defense in depth).
  • Prompt injection: transcripts and clipped pages are data, never instructions; the writer validates every field against a closed schema.
  • Trust model: no path auto-promotes an AI-authored node to verified. Every status change is a human act.
  • Real transcripts are gitignored; the only committed .jsonl is a synthetic test fixture.

Requirements

  • claude CLI (works on OAuth out of the box; set ANTHROPIC_API_KEY for the leaner --bare distill mode).
  • python3 (stdlib only). Obsidian is optional but recommended: it's the editing view and the live graph, while the wiki is the reading view.

Tests

python3 -m unittest discover -s tests

MIT · CHANGELOG · video scripts: the teaser, the from-zero speedrun

About

A self-assembling second brain for Obsidian + Claude Code, built for two readers: your AI answers from a typed knowledge graph with citations; you browse it like your own private Wikipedia.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages