Skip to content

Obsidian

Connect your Triggerfish agent to one or more Obsidian vaults so it can read, create, and search your notes. The integration accesses vaults directly on the filesystem -- no Obsidian app or plugin is required.

What It Does

The Obsidian integration gives your agent these tools:

ToolDescription
obsidian_readRead a note's content and frontmatter
obsidian_writeCreate or update a note
obsidian_listList notes in a folder
obsidian_searchSearch note contents
obsidian_dailyRead or create today's daily note
obsidian_linksResolve wikilinks and find backlinks
obsidian_deleteDelete a note

Setup

Step 1: Connect Your Vault

bash
triggerfish connect obsidian

This prompts for your vault path and writes the config. You can also configure it manually.

Step 2: Configure in triggerfish.yaml

yaml
obsidian:
  vaults:
    main:
      vaultPath: ~/Obsidian/MainVault
      defaultClassification: INTERNAL
      excludeFolders:
        - .obsidian
        - .trash
      folderClassifications:
        "Private/Health": CONFIDENTIAL
        "Private/Finance": RESTRICTED
        "Work": INTERNAL
        "Public": PUBLIC
OptionTypeRequiredDescription
vaultPathstringYesAbsolute path to the Obsidian vault root
defaultClassificationstringNoDefault classification for notes (default: INTERNAL)
excludeFoldersstring[]NoFolders to ignore (default: .obsidian, .trash)
folderClassificationsobjectNoMap folder paths to classification levels

Multiple Vaults

You can connect multiple vaults with different classification levels:

yaml
obsidian:
  vaults:
    personal:
      vaultPath: ~/Obsidian/Personal
      defaultClassification: CONFIDENTIAL
    work:
      vaultPath: ~/Obsidian/Work
      defaultClassification: INTERNAL
    public:
      vaultPath: ~/Obsidian/PublicNotes
      defaultClassification: PUBLIC

Folder-Based Classification

Notes inherit classification from their folder. The most specific matching folder wins:

yaml
folderClassifications:
  "Private": CONFIDENTIAL
  "Private/Health": RESTRICTED
  "Work": INTERNAL

With this config:

  • Private/todo.md is CONFIDENTIAL
  • Private/Health/records.md is RESTRICTED
  • Work/project.md is INTERNAL
  • notes.md (vault root) uses defaultClassification

Classification gating applies: the agent can only read notes whose classification level flows to the current session taint. A PUBLIC-tainted session cannot access CONFIDENTIAL notes.

Security

Path Confinement

All file operations are confined to the vault root. The adapter uses Deno.realPath to resolve symlinks and prevent path traversal attacks. Any attempt to read ../../etc/passwd or similar is blocked before the filesystem is touched.

Vault Verification

The adapter verifies that a .obsidian/ directory exists at the vault root before accepting the path. This ensures you are pointing at an actual Obsidian vault, not an arbitrary directory.

Classification Enforcement

  • Notes carry classification from their folder mapping
  • Reading a CONFIDENTIAL note escalates session taint to CONFIDENTIAL
  • The no-write-down rule prevents writing classified content to lower-classified folders
  • All note operations pass through the standard policy hooks

The adapter understands Obsidian's [[wikilink]] syntax. The obsidian_links tool resolves wikilinks to actual file paths and finds all notes that link back to a given note (backlinks).

Daily Notes

The obsidian_daily tool reads or creates today's daily note using your vault's daily note folder convention. If the note doesn't exist, it creates one with a default template.

Frontmatter

Notes with YAML frontmatter are parsed automatically. Frontmatter fields are available as metadata when reading notes. The adapter preserves frontmatter when writing or updating notes.