Skip to content

Configuration Reference

The complete config schema for pi-vault-mind. Two config files exist, and they merge (global → project).

File locations

Scope Path Applies
Global ~/.pi/agent/vault-mind.config.json All projects, all directories
Project ./pi-vault-mind.config.json (or .pi/vault-mind.config.json) This project only

Use /wiki setup to write the global config. Use /wiki init to write a project config.

Top-level shape

{
  "version": 2,
  "wiki": { ... },
  "collections": { ... },
  "injectors": [ ... ],
  "extensionCompatibility": { ... }
}

wiki — embedding, graph, vaults

{
  "wiki": {
    "dataDir": ".lancedb",
    "embedding": {
      "provider": "transformers",
      "ollamaModel": "embeddinggemma",
      "ollamaHost": "http://127.0.0.1:11434"
    },
    "graph": {
      "enabled": true,
      "canvasSync": true
    },
    "ftsEnabled": true,
    "httpPort": 11435,
    "vaults": {
      "default": {
        "path": "/home/you/Obsidian/MyVault",
        "autoSync": true,
        "autoSyncTags": ["decision", "insight", "requirement"],
        "autoSyncMinLength": 200
      }
    }
  }
}
Field Type Default Description
dataDir string .lancedb Where to put the LanceDB files (relative to cwd or absolute)
embedding.provider enum transformers transformers (offline, downloads all-MiniLM-L6-v2) or ollama
embedding.ollamaModel string embeddinggemma Model name when provider = ollama
embedding.ollamaHost string http://127.0.0.1:11434 Ollama API endpoint
graph.enabled boolean true Extract entity-relation edges from entries
graph.canvasSync boolean true Sync the entity graph to Obsidian .canvas files
ftsEnabled boolean true Build a Tantivy full-text index alongside the vector index
httpPort number 11435 Port for the HTTP server (Obsidian ↔ pi bridge). Binds 127.0.0.1.
vaults object {} Map of vault name → vault config (see below)
vaults.<name>.path string (required) Absolute path to the Obsidian vault
vaults.<name>.autoSync boolean true Auto-write substantial entries to the vault
vaults.<name>.autoSyncTags string[] [] Tags that always trigger auto-sync, regardless of length
vaults.<name>.autoSyncMinLength number 200 Minimum character count for auto-sync

collections — JSONL storage definitions

{
  "collections": {
    "main": {
      "path": "collections/main.jsonl",
      "schema": ["id", "domain", "source", "fact", "tag", "artifact"],
      "dedupField": "fact"
    },
    "pending": {
      "path": "collections/pending.jsonl",
      "schema": "main"
    }
  }
}
Field Type Description
<name>.path string File path (relative to project root, or absolute)
<name>.schema string[] | string Field names. Use a string to inherit another collection's schema
<name>.dedupField string Field to check for duplicates in autopilot mode

Built-in collections

These are created by /wiki init and are typically always present:

  • main — the primary collection for substantial knowledge
  • pending — staging area for gated mode and promote_wiki
  • context_events — auto-appended when pi-context integration is enabled

Example domain: research

{
  "collections": {
    "findings": {
      "path": "research/findings.jsonl",
      "schema": ["id", "paper", "claim", "evidence", "confidence", "tag"],
      "dedupField": "claim"
    }
  }
}

Example domain: decision log

{
  "collections": {
    "decisions": {
      "path": "decisions/log.jsonl",
      "schema": ["id", "date", "context", "decision", "rationale", "status", "owner"],
      "dedupField": "decision"
    }
  }
}

injectors — context injection

Injectors automatically inject matching collection entries into the LLM system prompt when the user types a matching pattern.

{
  "injectors": [
    {
      "name": "draft-context",
      "regex": "draft\\s+(\\S+)",
      "collection": "main",
      "filterField": "tag"
    }
  ]
}
Field Type Description
name string Human-readable name
regex string Regex pattern matched against the user's prompt
collection string Which collection to query on match
filterField string Field to use as the filter (typically tag)
artifactPath string Optional — file to also inject as raw markdown

Example — lit-review trigger:

{
  "injectors": [
    {
      "name": "lit-review",
      "regex": "review\\s+(\\S+)",
      "collection": "findings",
      "filterField": "tag",
      "artifactPath": "research/synthesis.md"
    }
  ]
}

User types: review transformers → system prompt is pre-loaded with findings tagged transformers + the contents of research/synthesis.md.

extensionCompatibility — opt-in extensions

{
  "extensionCompatibility": {
    "pi-context": {
      "enabled": true,
      "tagPatterns": [],
      "autoEnableAcm": true,
      "enhanceInjectors": false,
      "indexContextEvents": true
    }
  }
}
Field Type Default Description
pi-context.enabled boolean false Master toggle for pi-context integration
pi-context.tagPatterns string[] [] Regex patterns; if a pi-context tag matches, auto-query relevant collections and inject
pi-context.autoEnableAcm boolean true Auto-trigger /acm on session start to link context state
pi-context.enhanceInjectors boolean false Allow pi-context state to refine native injectors
pi-context.indexContextEvents boolean true Append pi-context events to the context_events collection

See also

  • Toolsconfigure_wiki writes this file
  • Commands/wiki setup and /wiki init write the initial config
  • Extension wiring — what extensionCompatibility actually wires up at runtime