Hamish153 downloadsRun a council of LLM value agents over your journal to surface decisions you have not made. Local-first via Ollama, OpenRouter, or any OpenAI-compatible endpoint.
A council of LLM agents that read your journal, surface the tensions you haven't resolved, and refuse to suggest a compromise.
Most journaling tools nudge you toward calm. Synod does the opposite. It treats each of your stated values — honesty, family, ambition, whatever they happen to be — as its own agent, lets each one read the same period of journal entries in isolation, then has a compiler look across their reports for the places where they pull in different directions. The output is a short bulletin in your vault: where you contradicted yourself, what each value would have you do, and what's left unresolved.
It runs entirely inside Obsidian. The default backend is Ollama on your own machine, so by default nothing leaves your laptop. You can swap to OpenRouter or any OpenAI-compatible endpoint later if you want.
Daily-journal LLMs tend to validate. They're great at "great work today" and terrible at "you keep saying you want to write more, and you keep saying yes to projects that prevent it."
Synod is a small bet that the more useful pattern is the opposite — quiet agents that hold a single value each, and a compiler whose only job is to point out where those values disagree. No therapy. No compromises. Just the friction.
If that sounds like something you'd want a longer answer to, the bulletins do the answering.
╭─────────────────────╮ ╭──────────────────╮ ╭────────────────╮
│ Import journal │────▶│ Per-value agent │────▶│ Compiler │
│ (Rosebud / folder / │ │ (parallel, fully │ │ (3 passes) │
│ daily notes) │ │ isolated) │ │ │
╰─────────────────────╯ ╰──────────────────╯ ╰────────┬───────╯
│
▼
╭──────────────────────╮
│ Bulletin (.md in │
│ vault) + side-panel │
│ status │
╰──────────────────────╯
After that, scheduling takes over (defaults to weekly; configurable).
Synod does not phone home and does not bundle remote code.
localhost. Nothing leaves your machine.data.json, human-readable bulletins as plain markdown.Pick yours from the Import journal entries command (or the Import button in the side panel). Each importer remembers its own folder and date-format settings, and the modal opens on whichever you used last.
| Importer | Source | Use when… |
|---|---|---|
rosebud |
Rosebud .md or .zip export |
You're migrating off Rosebud. |
obsidian-folder |
Any folder of markdown notes | Your journal is free-form notes. |
obsidian-journal |
Obsidian Journals / Daily Notes | Filenames are dates (YYYY-MM-DD). |
The Rosebud picker also accepts drag-and-drop. Imports are deduped on the SHA-256 of the normalised user text, so re-running is always safe.
On first load, Synod writes default prompt files into <vault>/Synod/_prompts/ (path configurable):
value-agent.md — per-value agent system promptcompiler-finder.md — Pass 1, the tension findercompiler-validator.md — Pass 2, the tension validatorcompiler-report-validator.md — Pass 0, the evidentiary gateschwartz-extractor.md — value-discovery promptEdit them like any other markdown note. The next run reads the changes. Use {value_name} / {value_definition} placeholders.
Everything sits under Settings → Community plugins → Synod:
npm install
npm run build # bundles to main.js
npm test # pure-function smoke tests (parsers, hashing, packing)
To install into a vault during development:
ln -s "$(pwd)" "/path/to/Vault/.obsidian/plugins/synod"
Then in Obsidian: Settings → Community plugins → enable Synod.
Plugin.loadData() / saveData(). No SQLite, no vector DB. Entries fit in context for typical journal sizes; if/when they don't, plug a vector store into agents/value-agent.ts.runValueAgent() takes only one value's (id, name, definition) plus the shared corpus. The compiler is the only module that ever sees all reports; its output is never fed back into the agents.llm/index.ts funnels generation through one Promise so single-GPU backends don't trample each other when value agents fan out. Hosted backends can lift this gate.[date — part k/N] blocks across LLM calls — never silently truncated.MIT — see LICENSE.
Repository: https://github.com/Slaymish/Synod · Issues and PRs welcome.