Local-first LLM knowledge compiler for Obsidian. Drop notes or record voice into raw/; the wiki compiler turns them into a structured, interlinked wiki under wiki/.
Repository: github.com/mohammadmaso/echowiki
Once published, install EchoWiki from any vault:
- Settings → Community plugins → Browse → search EchoWiki → Install → Enable.
- Open Settings → EchoWiki, add your LLM and STT API keys, then use the commands below.
EchoWiki creates raw/ and wiki/ folders in your vault automatically. You do not need to clone this repo unless you are developing EchoWiki itself.
- Bump
versionin rootmanifest.jsonandobsidian-plugin/manifest.json(keep them identical). - Commit and push to
main. - Create and push a matching git tag (example:
0.1.0). GitHub Actions buildsmain.js,manifest.json, andstyles.css. - Submit or update at community.obsidian.md → Plugins → New plugin (first time only) with repo URL
https://github.com/mohammadmaso/echowiki.
EchoWiki is designed so the repo root is your Obsidian vault. Your personal notes (raw/, wiki/) stay local and are not committed to git.
git clone https://github.com/mohammadmaso/echowiki.git
cd echowiki
nvm use # Node.js >= 22.13 (see .nvmrc)
npm install
npm run build:pluginThis builds the Obsidian plugin (obsidian-plugin/main.js), bundling the compiler and Vercel AI SDK in-process — no separate server process.
- In Obsidian, choose Open folder as vault.
- Select the cloned
echowikifolder (the repo root). - Obsidian creates
.obsidian/locally (gitignored — your settings stay private).
On first plugin load, EchoWiki creates empty raw/ and wiki/ folders with the expected subfolders.
Optional: copy the starter compiler instructions into your wiki:
cp templates/wiki/AGENTS.md wiki/AGENTS.mdSymlink or copy the built plugin into Obsidian’s plugin directory:
mkdir -p .obsidian/plugins/echowiki
cp obsidian-plugin/manifest.json obsidian-plugin/styles.css obsidian-plugin/main.js .obsidian/plugins/echowiki/Then in Obsidian:
- Settings → Community plugins → Turn on community plugins
- Enable EchoWiki
The status bar should show EchoWiki: ready.
Settings → EchoWiki:
| Setting | Purpose |
|---|---|
| LLM API key / model / base URL | Text compilation (any OpenAI-compatible endpoint) |
| STT base URL / API key / model | Voice transcription (/audio/transcriptions) |
| Language | Compilation output language (e.g. en, fa) |
| Watch mode | Auto-compile when files change under raw/ |
| Require approval | Queue new raw files until you approve them |
API keys are stored only in .obsidian/plugins/echowiki/data.json on your machine (never committed).
| Action | How |
|---|---|
| Drop a note for compilation | Save a .md or .txt file in raw/, or use EchoWiki: Send active note to raw/ |
| Record a voice note | Ribbon mic icon, or EchoWiki: Record voice note |
| Compile one file | Open a file under raw/, run EchoWiki: Compile active raw file |
| Approve queued files | EchoWiki: Review pending compilations (when require approval is on) |
| Browse results | Open wiki/index.md, graph view on wiki/, follow [[wikilinks]] |
Compilation writes to wiki/summaries/, updates wiki/concepts/ and wiki/entities/, and refreshes wiki/index.md and wiki/log.md.
Open the project root as your Obsidian vault. It must contain sibling folders:
<vault>/
├── raw/ # incoming notes and voice transcripts
└── wiki/ # compiled summaries, concepts, entities, index, log
The plugin runs compilation in-process via the Vercel AI SDK — you do not need Node.js on your PATH or a separate server. It works on Obsidian desktop and mobile (iOS/Android).
- Obsidian 1.5.0+ (desktop or mobile)
- LLM and STT API keys configured in plugin settings (network required for compilation and voice transcription)
From the repo root:
npm install
cd obsidian-plugin
npm install
npm run buildCopy or symlink the plugin folder into your vault:
<vault>/.obsidian/plugins/echowiki/
├── main.js
├── manifest.json
└── styles.css
Enable EchoWiki in Obsidian → Settings → Community plugins.
Configure in Obsidian → Settings → EchoWiki:
| Setting | Purpose |
|---|---|
| LLM API key / model / base URL | OpenAI-compatible chat endpoint for compilation |
| STT base URL / API key / model | Voice transcription (/audio/transcriptions) |
| Watch mode | Auto-detect new/changed files in raw/ |
| Require approval | Hold raw files in a pending queue until approved |
Status appears in the status bar on desktop (EchoWiki: ready or EchoWiki: compiling...). On mobile, use command palette notices during compilation.
- EchoWiki: Record voice note — mic → STT →
raw/<timestamp>.transcript.md - EchoWiki: Send active note to raw/ — copy current note into
raw/ - EchoWiki: Compile active raw file — run compilation on the open raw note
- EchoWiki: Review pending compilations — approve or reject queued raw files
Ribbon: microphone icon opens the voice recorder.
For headless compilation from the terminal (Node.js ≥ 22.13):
export OPENAI_API_KEY=sk-...
npm run compile -- raw/my-note.mdOptional flags: --kb-dir <vault-root> (defaults to current directory).
- Text path: Create a note → Send active note to raw/ → file appears in
raw/→ Compile active raw file →wiki/summaries/<name>.mdis created. - Voice path:Record voice note → transcript
.mdappears inraw/with the same pipeline as manual notes. - Watcher: With watch mode on, save a file under
raw/→ compilation triggers (or approval prompt if enabled). - Approval: With require approval on, compilation waits until you approve in Review pending compilations; with it off, compile runs immediately.
- Obsidian graph: Open graph view on
wiki/and confirm new pages link via[[wikilinks]].
| Variable | Purpose |
|---|---|
OPENAI_API_KEY | LLM provider key |
LLM_MODEL | Model id (default openai/gpt-5-mini; provider prefix is stripped) |
OPENAI_BASE_URL | Optional OpenAI-compatible base URL |
See .env.example for a minimal CLI setup.
src/
├── llm/ # Vercel AI SDK client
├── wiki/ # Compilation pipeline (summaries, concepts, entities)
└── compiler-api.ts # Public compile entry point
obsidian-plugin/ # Obsidian plugin (desktop + mobile; bundles compiler in-process)
raw/ # Universal ingestion folder
wiki/ # Compiled Obsidian-compatible wiki output
- Vercel AI SDK
- Product/tech context:
.ai/01-PRD.md,.ai/02-TECH-SPEC.md - Task breakdown:
.ai/03-TASKS.md