Try Studio
In Browserno installDesktop Mac AppDesktop Windows App
GitHub & Skills
Download Skill for ClaudeDownload Skill for OpenAI Codex
For
Myself — personal twinMy company — team memory
Docs Overview Edit on GitHub

Second Brain Link Documentation

Turn your data exports — LinkedIn, Facebook, Instagram, Google, or your company's — into a private, local, AI-queryable second brain. This page covers everything: install, build, reference, and how it all works.

Introduction

Your life is scattered across platforms — connections on LinkedIn, friends on Facebook, follows on Instagram, contacts and calendar in Google. Each gives you a data export, and each sits dead in a zip. Second Brain Link pulls them into one structured knowledge vault your AI can think with — and the same person across two networks becomes a single, richer note.

  1. You download your own data archive(s) — from one network or several. They're yours; each platform provides them on request.
  2. Second Brain Link runs 100% locally, detects which source(s) you've given it, and transforms them into one clean Obsidian vault: people, companies, your voice, your career intent, your interests, and how the algorithms categorize you.
  3. You point Claude (or Codex) at the vault. Now you have a digital twin that knows your whole history across platforms and can reason, plan, and draft from it.

Nothing is uploaded. No account, no server, no telemetry. The output is plain Markdown files you fully own — delete it, fork it, grep it.

Why it's different

  • Local-first and private by construction. The transform makes zero network calls; your data never leaves your machine.
  • Privacy is in the code, not a policy. Contacts' emails and phone numbers are stripped at parse time; message bodies are never imported — only a "how often / how recently" signal.
  • You own the output. Plain Markdown, no lock-in.
  • MIT licensed, free, no catch.

Using the app — 3 steps

However you open Second Brain Link — the Studio web app or the desktop app — the flow is the same. A short wizard walks you through it on first launch; here it is in full.

1

Install the skill & run your AI locally

Add the Second Brain skill to Claude Code or OpenAI Codex and run it on your own machine — it does the building and reasoning. Cloud run — paid, coming soon

Grab the skill straight from the repo: Claude skill · OpenAI skill.

2

Add your sources & (re)seed the vault

Download your data exports (LinkedIn, Facebook, Instagram, Google…), then upload them in Studio and run the build. Studio seeds — or re-seeds — your vault from the fresh data, fully on your machine.

3

Connect your assistant

Use Claude Code / Codex locally, or paste your Anthropic / OpenAI / … API key in Studio's Assistant settings. Either way, calls go straight to the provider — your keys and notes never pass through us.

The local, open-source flow is free forever. Hosted cloud seeding & vault storage are an optional paid add-on — see pricing.

Second Brain Studio — web & desktop

Studio is the friendly front door to your brain: a live workspace where you browse the knowledge graph, read & edit notes, and chat with an AI that reasons over everything. It runs locally — your API keys and data stay on your machine.

Open the web app

  • Go to the Studio web app — nothing to install. It opens your vault right in the browser.
  • First run shows the 3-step wizard above. Drop in your export zips to seed the vault, then open the graph, notes, or chat.

Install the desktop app

  • Download for your platform: macOS · Windows.
  • The desktop app is the same Studio in a native window — better for working offline and keeping a vault open alongside Obsidian.

Where to go for what

Vault & Graph

Explore people, orgs, places and posts. Filter, search, and click any node to open its note.

Assistant (chat)

Ask in plain language; it cites the notes it used. Add your API key in Assistant settings, or route through local Claude Code / Codex.

Sources

Upload new export zips any time and re-run the build to refresh your vault with the latest data.

Quick start

From zips to a working brain in about a minute of compute. You'll need Claude Code or OpenAI Codex, Python 3.8+, and (recommended) Obsidian. No other dependencies.

Download your data ~5 min per platform

Each platform hands you an export on request — pick JSON where asked:

LinkedInCSV
  1. Settings & Privacy → Data Privacy
  2. Get a copy of your data
  3. Choose the larger archive

Can take up to 24h · link valid ~72h

FacebookJSON
  1. Settings → Your information
  2. Download your information
  3. Format: JSON
InstagramJSON
  1. Accounts Center → Your information and permissions
  2. Download your information
  3. Format: JSON
GoogleTakeout
  1. Open takeout.google.com
  2. Deselect all
  3. Select Contacts, Calendar, YouTube, Maps, Profile

Organize by entity 1 folder per person/company

Rename your-name to your actual name — the folder name becomes your brain — then unzip each export into its source subfolder. One source is fine; several get merged.

data/
data/ ├── personal/jane/linkedin/ · facebook/ · instagram/ · google/ └── company/acme/linkedin_company/ · google_workspace/ · slack/

Personal + company exports in one run build sibling vaults — plus a _correlations/ brain linking people across them. Everything under data/ is git-ignored.

Install the Agent Skill one command

Run this

install — Claude Code + OpenAI Codex
git clone https://github.com/vicovan/second-brain-link && cd second-brain-link python3 packaging/build_skill.py all --install # Claude Code → ~/.claude/skills/ · OpenAI Codex → ~/.agents/skills/

Restart your agent — the second-brain-link skill loads at startup. Verify with ls ~/.claude/skills/second-brain-link/.

Claude.ai / Claude Desktop: upload dist/claude/second-brain-link.skill under Settings → Capabilities → Skills (enable Code execution).

Build your brain ~60 s · zero AI cost

Say this to your agent

"Build my second brain from the exports in data/ — profile them first, show me the planned structure, then build with --full."

Or run it yourself:

build
# one brain per entity under data/ (+ _correlations/) python3 engine/scripts/build_vault.py data -o vault --full # then point it at your goals — deterministic, re-runnable python3 engine/scripts/analyze.py vault/personal/<you>-brain \ --goals fundraising,bd,jobsearch,datamining,personalization \ --graph-config vault/.obsidian/graph.json

Open it and start asking Obsidian · Claude Code · Codex

  • Open the vault folder in Obsidian — start at Home.md; _STRUCTURE.md maps every folder; Graph view colors every note by source.
  • Work it inside Obsidian with the Claudian plugin (Claude Code in a side panel) or Obsidian Copilot (vault-wide Q&A + generated /commands).
  • Or point Claude Code / Codex at the folder from a terminal and give it a goal — e.g. "who are my warmest paths to a Series A investor?"

Supported sources

Give it one source or a combined archive with several — it detects and merges them all. Unknown files are summarized, never dropped.

Personal sources — a digital twin

LinkedInCSVmost complete

Profile, positions, skills, connections, companies, recommendations, posts/comments, job applications, algorithmic inferences, ad profile, search history.

FacebookJSON

Friends → people, posts/comments → voice, liked pages → interests, ad-interests/predictions → the algorithmic mirror, check-ins → places, message signal (no bodies).

InstagramJSON

Profile, followers/following, posts & captions, topics/interests, message signal.

Google Takeoutmixed

Contacts → people, Calendar → events, YouTube subscriptions → interests, Maps → places, Profile → identity.

Company sources — a Company Brain

LinkedIn CompanyCSV

Org profile, employees, followers, company posts.

Google Workspacemixed

Directory users → employees, shared calendars → events, shared drives → projects.

SlackJSON

Members → people, channels → projects, messages → signal only (no bodies).

New sources (X, GitHub, Strava — anything with a data export) are usually just a JSON mapping.

How it works

Every network changes its export format over time and across regions. A hardcoded converter breaks the moment that drifts — so Second Brain Link detects, adapts, builds, then verifies it left nothing behind:

01Detect + profile

Which source(s)? Reads every file & column → schema map.

02Adapt

Optimizes the mapping to your actual export schema.

03Build

Normalizes all sources into one vault, in seconds.

04Verify

Coverage report; loops if gaps remain.

  1. Detect + profile. Identifies the source(s) in your archive, reads every file and column, and writes a schema_map.md — each file classified, each column typed, with privacy-safe samples. It also draws a mindmap and designs the brain structure.
  2. Adapt. Each source is a declarative JSON mapping (engine/mappings/sources/<name>.json). Files no mapping claims are rescued by a universal harvester and flagged in _COVERAGE.md under "Needs a mapping". Only genuine unknowns need your AI — it reads the schema map (never your raw data) and proposes a mapping.
  3. Build. A deterministic, dependency-free Python engine writes the entire unified vault in seconds with zero AI cost, merging people who appear in more than one source.
  4. Verify (+ correlate). _COVERAGE.md reports how much of your export was used; _SUMMARY.md gives seed counts. Anything unrecognized lands in 99-uncategorized/ — nothing is silently dropped. Multiple entities get a _correlations/ brain linking them.

Identity resolution

If "Sam Patel" is a LinkedIn connection, a Facebook friend, and a Google contact, you don't get three notes — you get one, tagged sources: [linkedin, facebook, google], with company and role filled in from whichever source knew it.

10-people/Sam-Patel.md
--- type: person sources: [linkedin, facebook, google] company: "[[Cedarpay]]" strength: strong last_contact: 2026-05-14 ---

People who appear across multiple networks are surfaced as your strongest multi-context relationships. Matching is conservative by design — a wrong merge is worse than a miss (sharper fuzzy matching lands in v1.2).

The vault it builds

A layered, Obsidian-native vault. _STRUCTURE.md is the map — it documents what every folder and file is, so you (or an agent) always know where things live.

your-vault/
your-vault/ ├── Home.md 🏠 start here — map of content + example prompts ├── CLAUDE.md how the agent navigates + privacy rules ├── 00-me/ identity — who the twin speaks as ├── 10-people/ one note per person (emails/phones stripped) ├── 15-organizations/ employers, targets, vendors ├── 20-reputation/ recommendations + endorsements ├── 30-voice/ posts, comments, interests ├── 40-career/ applications, preferences, saved jobs ├── 50-mirror/ how the algorithms see you ├── 60-learning/ · 70-services/ · 80-search/ · 85-places/ ├── 90-synthesis/ the payoff: network-map, positions-i-hold, target-companies, positioning-gaps ├── 99-uncategorized/ unrecognized files, summarized — never dropped ├── _quarantine/ sensitive files — intentionally NOT imported ├── _STRUCTURE.md · _SUMMARY.md · _COVERAGE.md └── 95-goals/ · Dashboard.md · _DATA_POINTS.md · _GRAPH.md ← analyze.py

Obsidian-native by construction

  • The graph is real. Filenames equal titles, so [[Acme Cloud]] resolves to the actual note — open Graph view and you literally see your network.
  • Properties work. Valid YAML frontmatter with native Properties: type, strength, ISO dates; wikilinks in properties are quoted so backlinks resolve.
  • Tags & filters. Every note carries source/<name> + type tags so the graph and search filter cleanly by where each fact came from.
  • One brain per entity. Multiple identities/companies each get their own vault, plus a _correlations/ brain with works_at edges between them.

Owner mode (--full): the default build is privacy-safe. For your own brain on your own machine, --full keeps everything — emails, phones, every extra column — still 100% local.

Goals & dashboards

A brain is only useful once pointed at a goal. After building, run the analyzer — deterministic and re-runnable in seconds (it reads frontmatter, no rebuild):

analyze
python3 engine/scripts/analyze.py vault/personal/<you>-brain \ --goals fundraising,bd,jobsearch,datamining,personalization \ --thesis "<what you raise for>" --icp "<who you sell to>" \ --graph-config vault/.obsidian/graph.json

It writes:

  • 95-goals/<goal>.md — ranked tables answering the goal, each ending in a ready-to-run AI prompt. Built-ins: fundraising, bd, jobsearch, datamining, personalization.
  • Dashboard.md — live Dataview tables: warm/dormant ties, network-by-company, a by-source breakdown.
  • _DATA_POINTS.md — every node type + relation + a field-enrichment-by-source matrix + a "mineable questions" catalog.
  • _GRAPH.md + --graph-config — colors the global graph by source and type (merges into .obsidian/graph.json, preserving your settings).
  • copilot-prompts/ — one-click /commands for Obsidian Copilot: /warm-intro, /investor-paths, /reconnect, /job-fit, /mine, /for-me.

Obsidian integration

Two ways to put an AI directly in your vault — both install from Settings → Community plugins:

Obsidian Copilotretrieval

Semantic Vault QA across all notes, plus the generated /commands. Best for instant retrieval and one-shot questions.

Claudianagentic

Claude Code itself in a side panel, with your brain as its working directory. Best for multi-step reasoning, drafting, and writing back into the vault.

The answer can be an artifact, not just a chat reply. Because the agent can write into the vault, ask for the output as a file: a .canvas board of your warmest investor paths, a live Dataview dashboard of dormant contacts, a note comparing 50-mirror/ to how you describe yourself. Whatever it generates follows the builder's conventions, so it's instantly first-class in the graph.

One honest limit: the export is a snapshot — sharp on your history, blind to this week. Re-export periodically to refresh; always-fresh sync is on the roadmap.

CLI reference

The engine is plain Python — every command runs without the Agent Skill installed.

commands
# every entity under data/ → one brain each + _correlations/ python3 engine/scripts/build_vault.py data -o vault # a single source folder → a single brain python3 engine/scripts/build_vault.py \ data/personal/<you>/linkedin -o vault/my-brain # preview detection without writing anything python3 engine/scripts/build_vault.py data --dry-run # goals + dashboard + graph colors (after building) python3 engine/scripts/analyze.py \ vault/personal/<you>-brain --goals jobsearch # build + install the Agent Skill for both providers python3 packaging/build_skill.py all --install

Flags

FlagWhat it does
--fullOwner mode — keep your own emails/phones and quarantined personal files (still 100% local)
--emit obsidian|gbrain|bothOutput target — Obsidian vault (default) and/or a GBrain repo
--subject person|companyWhat the brain is rooted on (00-me/ vs 00-org/)
--provider claude|openaiWhich in-vault guide to write (CLAUDE.md vs AGENTS.md)
--mappings <dir>Override or add declarative JSON source mappings
--dry-runPreview detection without writing
--doctorPreflight check

Each output dir must be new or empty — the builder never clobbers existing notes.

Adding a source

Anything with a data export can become part of the brain. In order of preference:

  1. A declarative JSON mapping engine/mappings/sources/<name>.json: a detect block plus records[] that locate arrays and pluck fields via a tiny selector language into canonical col.add_* verbs. No Python, no engine edit. A mapping wins over a same-named Python adapter and can ship via --mappings <dir>.
  2. A Python adapter — only for bespoke cross-file logic: one file in engine/scripts/sources/personal/ or …/company/ (set SUBJECT="company" for company sources). Auto-discovered, no registry edit.
  3. An output target — one emitter file in engine/scripts/emitters/.

Either way the builder, privacy rules, Obsidian/GBrain output, and cross-source merging all work unchanged. Files no mapping claims are caught by the universal harvester and listed in _COVERAGE.md under "Needs a mapping" — your cue to add a rule for precision.

Project layout

second-brain-link/
second-brain-link/ ├── data/ ⬇ drop your exports here (git-ignored) ├── vault/ ⬆ your generated brains land here (git-ignored) ├── engine/ the shared, provider-neutral engine │ ├── scripts/ profile_export.py · build_vault.py · analyze.py │ │ ├── emitters/ obsidian (default) · gbrain │ │ └── sources/ personal/ + company/ adapters (auto-discovered) │ ├── mappings/ declarative JSON: sources/<name>.json │ └── references/ blueprint.md — the full data model ├── providers/ thin manifests: claude/SKILL.md · openai/SKILL.md ├── packaging/build_skill.py assembles engine + manifest → dist/ └── dist/ second-brain-link.skill per provider

One provider-neutral engine does the work; thin per-provider manifests ship it as a cross-model Agent Skill (the Agent Skills open standard).

Privacy model

  • Zero network calls in the core transform — verifiable in engine/scripts/.
  • Third-party PII stripped at parse time — across every source, contacts' emails and phones never become notes.
  • Message bodies never written — only a per-person count + last-contact date, which grades relationship strength.
  • Sensitive files never importedLogins, Receipts, Security Challenges, ImportedContacts and friends stay in your original archive, listed in _quarantine/.
  • The schema map redacts sensitive columns and masks any email/phone in samples.

Never commit your vault to a public repo — the generated .gitignore guards against accidents. Full write-up: the privacy model.

Roadmap

v0

LinkedIn → vault: full local transform, Obsidian-native

shipped
v0.5

Multi-source: Facebook, Instagram, Google — one merged vault

shipped
v0.7

Personal and company; GBrain emitter; --full owner mode

shipped
v0.8

Cross-model (Claude + Codex); multi-entity + _correlations/; JSON mappings + harvester

shipped
v1

More sources: X/Twitter, GitHub, Strava — usually just a JSON mapping

next
v1.2

Sharper entity resolution: stable IDs + precision-biased fuzzy matching

planned
v1.5

Keep it fresh: easy re-import/merge

planned
v2

The agent: meeting prep, drafting in your voice, reviving relationships

planned

Contributing

The most valuable contribution right now: run it on your real export and open an issue if any file or column didn't map cleanly — the schema_map.md it generates is exactly what we need to see. Parser robustness across the long tail of real accounts is how this gets great.

Created and maintained by Adrian Vicovan. Questions? Use our contact form.