Search...Search plugins and themes...
⌘K
Sign in
  • Get started
  • Download
  • Pricing
  • Enterprise
  • Account
  • Obsidian
  • Overview
  • Sync
  • Publish
  • Canvas
  • Mobile
  • Web Clipper
  • CLI
  • Learn
  • Help
  • Developers
  • Changelog
  • About
  • Roadmap
  • Blog
  • Resources
  • System status
  • License overview
  • Terms of service
  • Privacy policy
  • Security
  • Community
  • Plugins
  • Join the community
  • Discord
  • Forum / 中文论坛
  • Merch store
  • Brand guidelines
Follow us
DiscordTwitterBlueskyThreadsMastodonYouTubeGitHub
© 2026 Obsidian

Synod

HamishHamish2 downloads

Run 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.

Add to Obsidian
  • Overview
  • Scorecard
  • Updates2

Repository: https://github.com/Slaymish/Synod

A council of LLM "value agents" reads your journal, surfaces tensions you haven't resolved, and never suggests compromises. Runs entirely inside Obsidian; LLMs are reached via local Ollama, OpenRouter, or any OpenAI-compatible endpoint (e.g. llama-swap).

What it does

╭─────────────────────╮     ╭──────────────────╮     ╭────────────────╮
│ Import journal      │────▶│ Per-value agent  │────▶│ Compiler       │
│ (Rosebud / vault    │     │ (parallel, fully │     │ (3 passes)     │
│ folder / journals)  │     │  isolated)       │     │                │
╰─────────────────────╯     ╰──────────────────╯     ╰────────┬───────╯
                                                              │
                                                              ▼
                                              ╭──────────────────────╮
                                              │ Bulletin (.md in     │
                                              │ vault) + side panel  │
                                              │ status               │
                                              ╰──────────────────────╯

Three importers

Pick from the Import journal entries command (or the Import entries button in the side panel). Each importer remembers its own folder / date-format settings between runs, and the modal opens on whichever importer 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 SHA-256 of the normalised user text, so re-running an import never creates phantom duplicates.

Editable system prompts

On first load the plugin writes default prompt files into <vault>/Synod/_prompts/ (path configurable):

  • value-agent.md — per-value agent system prompt
  • compiler-finder.md — Pass 1 tension finder
  • compiler-validator.md — Pass 2 tension validator
  • compiler-report-validator.md — Pass 0 evidentiary gate
  • schwartz-extractor.md — value-discovery prompt

Edit them like any markdown note. The next pipeline run reads the changes. Use {value_name} / {value_definition} placeholder syntax.

Settings

Every knob is in Settings → Community plugins → Synod:

  • Provider: Ollama / OpenRouter / llama-swap, with separate models for the agent role and the compiler role, plus a Test connection button.
  • Output: vault root folder, mirror entries / values to vault toggles.
  • Prompts: folder location, "re-create defaults" button.
  • Schedule: bulletin interval (hours), run-on-startup, minimum entries.
  • Prompt budgets: char-per-call ceilings for extractor and value agents.
  • Tensions: severity threshold, escalation cooldown.
  • Active values: list with Active toggle and Delete.

Status & progress

Open the side panel via the ribbon icon (or Synod: Open status view). The view shows the live phase (ingesting → extracting → agents → compiling → writing → done), a progress bar, last-run timestamp, counts, and a tail of the log.

Privacy & network

  • Default backend is Ollama on localhost. Nothing leaves your machine.
  • OpenRouter / llama-swap modes only send data to the endpoint you configure in settings. The plugin makes no other network calls.
  • All journal text, value definitions, and reports are stored locally:
    • structured records in the plugin's data.json,
    • human-readable bulletins / value notes inside your vault.
  • No telemetry. No background uploads. No bundled remote code.

Build from source

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.

Releasing a new version

  1. Bump version in manifest.json (SemVer).
  2. Add an entry to versions.json mapping the new plugin version to the minimum compatible Obsidian version.
  3. Commit and push.
  4. Create and push a tag whose name exactly matches the version (no leading v):
    git tag -a 0.2.0 -m "0.2.0"
    git push origin 0.2.0
    
  5. The GitHub Actions workflow at .github/workflows/release.yml builds the plugin, runs tests, and publishes a draft release with main.js, manifest.json, and styles.css attached.
  6. Edit the draft release with notes, then publish.

Architecture notes

  • Storage: JSON via 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.
  • Isolation contract: runValueAgent() takes only one value's (id, name, definition) plus the shared corpus. The Compiler is the only module that sees all reports; its output is never fed back into the agents.
  • LLM single-flight: llm/index.ts funnels generation through one Promise so single-GPU backends don't trample each other when value agents fan out in parallel. Hosted backends can lift this gate.
  • Prompt budgeting: char-based proxy for tokens. Long entries are split into labelled [date — part k/N] blocks across LLM calls — never silently truncated.

License

MIT — see LICENSE.

99%
HealthExcellent
ReviewPassed
About
Surface unresolved tensions in your journal with a council of LLM value agents that never propose compromises. Import notes, connect to OpenAI-compatible endpoints, and output a bulletin and side-panel report via a three-pass compiler and parallel agents.
AIImportSidebar
Details
Current version
0.1.1
Last updated
12 hours ago
Created
13 hours ago
Updates
2 releases
Downloads
2
Compatible with
Obsidian 1.7.2+
License
MIT
Report bugRequest featureReport plugin
Author
HamishHamishslaymish
hamishburke.dev
GitHubslaymish
  1. Community
  2. Plugins
  3. AI
  4. Synod

Related plugins

HiNote

Add comments to highlighted notes, use AI for thinking, and flashcards for memory.

YTranscript

Easily fetch transcription for any YouTube video.

Snipd Official

Sync Snipd podcast highlights to your vault with transcript, notes, AI summaries and metadata.

Notebook Navigator

Alternative file browser with folders, tags, properties, calendar, previews, shortcuts, recent files, keyboard navigation, drag and drop, and pinned notes.

Recent Files

Display a list of recently opened files.

Copilot

Your AI Copilot: Chat with Your Second Brain, Learn Faster, Work Smarter.

Importer

Import data from Notion, Evernote, Apple Notes, Microsoft OneNote, Google Keep, Bear, Roam, and HTML files.

Claudian

Embeds Claude Code/Codex as an AI collaborator in your vault. Your vault becomes agent's working directory, giving it full agentic capabilities: file read/write, search, bash commands, and multi-step workflows.

Smart Connections

AI link discovery copilot. See related notes as you write. Lookup using semantic (vector) search across your vault. Zero-setup local model for embeddings, no API keys, private.

Zotero Integration

Insert and import citations, bibliographies, notes, and PDF annotations from Zotero.