Your Obsidian vault becomes shared memory for Claude, Cursor, and every MCP-compatible agent on your machine.
Built for ObsidianFive core surfaces, one plugin. Switch between them to see what your vault feels like once it's connected.
Hybrid retrieval — BM25 + vector + multi-hop graph expansion — returns answers grounded in your notes. Click a citation to jump to the source. Suggested starters get you out of the blank-page state.
You've already written everything. Your standups, your design docs, your half-finished thoughts. The problem isn't capturing knowledge — it's making it usable by the agents you work with every day.
Claude Desktop forgot what you decided last week.
HangarX remembers.
Cursor doesn't know your team's conventions.
HangarX answers from your notes.
You repeat yourself across every new chat.
HangarX is the source of truth all of them read.
It's not another chat UI bolted onto Obsidian. It's the connective tissue that makes your existing AI tools dramatically more useful.
Cloud mode is the fastest way to try HangarX. Sign-in is OAuth — no key copy-paste.
That's it. Your vault is now searchable, your agents can read it, and you can ask questions from inside Obsidian.
.cortex/, .obsidian/, and your templates are excluded by default.Run everything on your machine — your notes never leave the laptop.
docker-compose.cortex.yml next to your notes with your keys baked in (encrypted at rest).docker compose -f docker-compose.cortex.yml up -dPaste the prompt below into any agentic coding assistant. It checks Docker is running, starts the stack, polls the health endpoint, and surfaces logs if something fails — same prompt the plugin's “Copy LLM setup prompt” button uses.
You're helping me bring up the HangarX local stack for the Obsidian plugin (https://community.obsidian.md/plugins/hangarx). Be terse — one update per phase, no narration. 1. Find docker-compose.cortex.yml at the root of my Obsidian vault. Ask me for my vault path if you can't infer it. If the file doesn't exist, stop and tell me to open Obsidian → Settings → HangarX → Local mode → click "Save to vault" in step 2, then re-run this prompt. 2. Verify Docker is ready: `docker --version` and `docker ps` both succeed. If Docker Desktop isn't installed, point me to https://www.docker.com/products/docker-desktop/ and stop. If installed but not running, launch it (`open -a Docker` on macOS) and wait until `docker ps` succeeds before continuing. 3. cd to my vault and run: docker compose -f docker-compose.cortex.yml up -d First run pulls hangarx/cortex-api, falkordb/falkordb, and pgvector/pgvector:pg16 — expect a few minutes. 4. Poll `curl -sf http://127.0.0.1:3400/health` every 3 seconds for up to 90 seconds. If it doesn't come up, show me the last 30 lines of `docker compose -f docker-compose.cortex.yml logs cortex-api`. 5. Once healthy, tell me to open Obsidian's command palette and run "HangarX: Sync". The plugin's settings page will flip from the three-step wizard to "✓ Local stack running" on its next probe. If anything fails: - Port 3400 in use → `lsof -i :3400`. Either stop that process or change CORTEX_PORT in the compose file and re-run with `up -d --force-recreate`. - cortex-api exits immediately → check the logs. Most common: missing LLM provider key (re-save the YAML from Obsidian with a key configured) or Postgres healthcheck failing on first boot (`docker compose down -v` and retry). Don't generate the docker-compose file yourself — the plugin owns it (encryption keys + provider keys are baked in by Obsidian so re-saves stay in sync). If the file is missing or broken, hand control back to the plugin's "Save to vault" button.
Bring your own keys (BYOK)
Add or rotate keys anytime in LLM provider keys. The plugin pushes the change to the running container's encrypted runtime config — no Compose re-save, no docker compose up. Switch the active chat model per-request from the LLM (runtime) panel.
Fully offline
Run Ollama locally and pick it as the chat provider. For embeddings, switch the Embedding provider to Ollama and run ollama pull nomic-embed-text — the entire stack then makes zero cloud API calls.
Requires Docker Desktop. No source code, no Node.js, no compile step — images are pulled from Docker Hub.
The Agents section in settings shows every supported harness as a one-click row. HangarX merges its MCP server entry into the client's config file non-destructively — your other MCP servers are preserved.
Claude Desktop
Anthropic's desktop chat app
Claude Code
Anthropic's CLI coding agent
Cursor
AI-first code editor
Cline
VS Code autonomous coding extension
Windsurf
Codeium's agentic IDE
Other MCP-compatible app
Zed, Goose, Codex CLI, or any custom client via JSON snippet
A focused toolset tuned for the vault-side workflows agents actually run — workspace awareness, retrieval, sync, and recovery. Plugin-only tools (sync, dedupe, active-note) are flagged below because they need direct vault access that a remote API can't provide.
What agents reach for first.
| cortex_ask | Synthesized Q&A grounded in your vault — multi-hop retrieval + citations |
| cortex_recall | Search both agent memories and the vault graph; results tagged by source |
| cortex_search_entities | Find entities by name + optional type (Person, Project, Concept, …) |
| cortex_stats | Graph totals + per-type entity / relationship breakdowns |
Plugin-only — the agent knows what the user is looking at.
| cortex_active_note | Path, content, and frontmatter of the markdown file open right now |
| cortex_recent_notes | Most-recently-modified notes — temporal context for "what have you been working on?" |
| cortex_get_note | Full content + outgoing links + backlinks for one note by vault path |
| cortex_related | Notes related to a given note via wikilinks, embeddings, or extracted entities |
| cortex_paths | Shortest paths between two entities — multi-hop graph reasoning |
| cortex_suggest_links | Wikilink suggestions for a note driven by entity matching |
| cortex_contradictions | Surface inconsistencies across notes |
| cortex_remember | Persist a fact / decision / insight. Auto-ingests into the graph and merges caller frontmatter so aliases / tags register. |
| cortex_delete_note | Soft-delete a note (OS trash by default; cascades cleanup through graph + sync index) |
| cortex_ingest_url | Scrape a URL and add it to the graph as a new document |
Plugin-only — the agent can keep its own graph in sync.
| cortex_sync | Full or path-scoped vault sync; force flag bypasses the hash check for graph-reset recovery |
| cortex_sync_status | Pending changes, last sync time, drift detection (server-graph-empty hint) |
| cortex_rebuild | Async embedding backfill + community detection; returns a jobId to poll |
| cortex_rebuild_status | Poll a cortex_rebuild jobId for completion + per-step success flags |
| cortex_dedupe | Merge duplicate Entity nodes by (workspace, type, name); dryRun previews the plan |
Need workflows, custom tools, advanced search variants, or live event streams? Those live on the Cortex API directly — 50+ additional tools when an agent skips the plugin bridge and connects straight to cortex.hangarx.ai (Cloud) or your local 127.0.0.1:3400. Less common, but documented in the plugin README.
You don't have to use external agents. The plugin ships with:
Ask your vault (⌘P)
Multi-hop chat over your knowledge graph with citations back to source notes. Suggested starters get you out of the blank-page state.
Show on graph
Push chat answers into Obsidian's built-in Graph view. Cited entities stay highlighted, everything else dims. Toggle the pin to auto-highlight every future answer.
Two-way sync modal
Push, pull, two-way, diff, force re-ingest — all in one modal. Mid-flight cancellation drains in-flight server workers cleanly.
Inline link suggestions
Ghost-text [[wikilink]] autocompletes driven by entity matches in your graph. Tab to accept, Esc to dismiss.
Knowledge graph stats
Totals + per-type breakdowns for entities and relationships. Surfaced both in Obsidian and to external agents via the cortex_stats MCP tool.
Switch LLMs on the fly
Pick Gemini, Claude, GPT-4o, Kimi K2.5, Llama, Qwen, or Ollama per request — no container restart. BYOK keys live encrypted on the server and update the runtime config immediately.
Slash commands in chat
Type /sync, /sync-status, /rebuild, or /dedupe to trigger vault-side actions the chat agent can't reach. /sync shows live per-file progress, ETA, and a Cancel button. /help lists everything available. Natural-language phrasings like “sync the vault” route through the same handler.
Drift detection
The plugin watches whether your docker-compose.cortex.yml on disk matches what the current plugin version expects. If a new release pins a fresher cortex-api image, a sticky Notice surfaces with a one-click Save & copy recreate command button. No stale stacks.
Cloud mode
Notes are sent to the HangarX hosted API for entity extraction and embedding. They're stored in your scoped workspace and never used to train models. Revoke access anytime from your API keys settings.
Local mode
Nothing leaves your machine. The Docker stack runs FalkorDB (graph), Postgres + pgvector (embeddings), and the Cortex API. You bring an LLM key — or run Ollama for fully offline.
What's excluded by default
.cortex/, .obsidian/, and templates/. Configure include/exclude lists in What to sync.
Attachments
Images, PDFs, and other binaries referenced by your notes are ingested by default. Toggle off in Sync attachments.
| Command | Description |
|---|---|
| HangarX: Ask your vault | Open the Q&A chat |
| HangarX: Sync | Open the multi-purpose sync modal |
| HangarX: Sync current note | Push only the active file |
| HangarX: Diff vault vs knowledge graph | Open the 4-bucket diff view |
| HangarX: Pull graph entities into vault | Materialize entities as markdown |
| HangarX: Force re-ingest entire vault | Re-sync everything (use after a server reset) |
| HangarX: Connect agents (Claude, Cursor)… | Jump to the Agents settings panel |
| HangarX: Knowledge graph stats | Show entity / relationship totals + breakdowns |
| HangarX: Ingest URL into knowledge graph | Scrape a URL and add it to the graph |
| HangarX: Show onboarding | Reopen the first-run walkthrough |
A deep tour of how the plugin works, every setting, and what each piece does. If you just want to ship, the quick start is enough.
HangarX turns your vault into a queryable knowledge graph + vector index, then exposes it over MCP (Model Context Protocol) so any compliant agent can read and write to it. Nothing magical — just three layers wired together:
cortex-mcp) wraps the API and exposes a small set of tools. Agents you connect call those tools to ask questions, recall facts, or trace ideas back to source notes.Reads are sub-100ms after the index warms up. Writes from agents (cortex_remember) are stored as new entities with provenance so you can see which agent claimed what, when.
Three ways to install, in order of how most people do it.
Community Plugins (recommended)
From release URI
Click the install button anywhere on this page (or copy obsidian://show-plugin?id=hangarx-obsidian) and Obsidian opens the install dialog directly.
Manual / BRAT
Grab main.js, manifest.json, and styles.css from the latest GitHub release into .obsidian/plugins/hangarx-obsidian/, then enable.
Everything is in Settings → HangarX. Defaults are sensible; the fields you actually touch are below.
| Setting | What it does |
|---|---|
| Mode | Cloud (HangarX hosted) or Local (Docker). Cloud is OAuth-managed; Local is BYO infrastructure. |
| API URL | Auto-set per mode — https://cortex.hangarx.ai for Cloud, http://localhost:3400 for Local. Editable as an advanced override only (custom self-hosted endpoint). |
| API key | Auto-filled when you sign in via OAuth (Cloud). Generate or revoke from the dashboard. Click Test to verify. |
| Workspace | The graph namespace your vault writes to. One vault → one workspace by convention. |
| LLM provider keys (BYOK) | Local mode. Paste any combination of Gemini, OpenAI, Anthropic, Moonshot (Kimi), HuggingFace, OpenRouter, or xAI keys. Stored encrypted on the cortex-api and pushed to the running container immediately — no docker rebuild. |
| LLM (runtime) | Per-request chat provider + model. Pick Gemini, Claude, GPT-4o, Kimi K2.5, Llama 3.3, Qwen, or Ollama and click Apply — takes effect on the very next chat answer with no container restart. |
| Embedding provider | Local mode. Gemini (default) or Ollama (fully offline — run `ollama pull nomic-embed-text` first). Switching providers requires a re-ingest because vector dimensions differ. |
| What to sync | Include / exclude globs. Defaults exclude .obsidian/, .cortex/, and templates/. |
| Sync attachments | Pull in PDFs, images, and other binaries referenced by your notes. On by default; toggle off in low-bandwidth setups. |
| Sync on startup | Run a sync automatically when Obsidian opens. Off by default — trigger manually via the Sync modal or the command palette. |
| Auto-highlight on graph | When on, every chat answer auto-pushes its cited entities into Obsidian's Graph view filter (non-matching nodes dim, cited ones stay highlighted). Off by default; toggle from the pin button on any answer or here in settings. |
| Agents panel | One-click installer that merges HangarX into Claude Desktop / Claude Code / Cursor / Cline / Windsurf MCP configs without overwriting existing entries. |
Vault sync
Change-detection by content hash, not modified time. Edits to .cortex/, .obsidian/, and templates are skipped. Deletes are propagated, so removing a note also removes its entities (configurable).
First sync uploads everything; subsequent syncs are diff-based and finish in seconds for typical vaults.
Ask your vault (⌘P)
GraphRAG chat that runs hybrid retrieval (BM25 + vector + graph expansion via PageRank) and cites the source notes inline. Click a citation to jump straight to the note.
Multi-hop questions like “What did we decide about pricing in the Q3 review, and who pushed back?” traverse relationships rather than just matching keywords.
Show on graph
Each chat answer can push its cited entities into Obsidian's built-in Graph view filter. Non-matching nodes dim, cited ones stay highlighted. Toggle the pin to make every future answer auto-highlight without clicking again.
Two-way sync modal
One UI for Push, Pull, Two-way, Diff (4-bucket reconciliation: vault-only · drifted · graph-only · in-sync), and Force re-ingest. Mid-flight cancellation propagates to in-flight server workers via a job ID and drains cleanly within ~30 seconds.
Inline link suggestions
Ghost-text wikilink autocomplete driven by entity matches in your graph. As you type, HangarX detects when you're referencing a known entity and suggests a [[wikilink]]. Tab accepts,Esc dismisses.
Knowledge graph stats
Totals and per-type breakdowns for entities, relationships, and documents. Surfaced both in Obsidian's stats panel and to external agents via the cortex_stats MCP tool, so a connected Claude or Cursor session can answer “how big is my graph?” in one call.
Switch LLMs on the fly
Pick Gemini, Claude, GPT-4o, Kimi K2.5, Llama 3.3, Qwen, or Ollama per request — no container restart. BYOK keys live encrypted in Postgres on the server and update the runtime config immediately when you save them in settings.
MCP tools for agents
Once an agent is connected, it gets the nine tools listed in Agents — including cortex_stats for graph totals and cortex_paths for multi-hop reasoning. Writes (cortex_remember) record provenance so you can audit what each agent claimed.
Cloud / Local toggle
Per-mode connection state. Switching from Cloud to Local doesn't migrate data — re-ingest in the new mode to rebuild the graph there. Both modes can coexist; the active one is whichever is selected.
Provenance & contradictions
Every claim is tagged with the note it came from. The cortex_contradictions tool surfaces cases where two notes assert conflicting facts about the same entity — handy when reconciling old decisions.
When you run the local Docker stack, three containers come up. You don't have to think about them, but here's the shape:
cortex-api
Node service on port 3400. Handles ingest, extraction, retrieval, and the MCP endpoint.
falkordb
Cypher-compatible graph database for entities and relationships. Built on Redis, so it also serves as the in-stack cache for query results and working memory — no separate Redis container needed.
postgres + pgvector
Stores chunks, embeddings, episodes, and provenance. Used for hybrid search.
.env editing required.docker compose up, no --force-recreate. The runtime config is encrypted in Postgres and the model router consults it on every request, so the change is effectively instant.docker compose ps shows the cortex-api container as healthy. Check docker compose logs cortex-api for startup errors. The most common cause is a missing LLM key — open Settings → HangarX → LLM provider keys, paste at least one key, then click Save to vault and run docker compose -f docker-compose.cortex.yml up -d --force-recreate so the container picks them up.docker logs cortex-api to find it.cortex_stats, agents like Claude Desktop had no way to answer “how big is my graph?” — the existing tools all required a query string and returned ranked matches, not totals. Now an agent can call cortex_stats and get { totalEntities, totalRelationships, entityTypes, relationshipTypes } directly. Ships in plugin v0.0.5+; reconnect your agents to pick it up.Install the plugin, sign in, and your vault becomes shared memory across every AI tool you already use.