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 knowledgepending— staging area forgatedmode andpromote_wikicontext_events— auto-appended whenpi-contextintegration 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¶
- Tools —
configure_wikiwrites this file - Commands —
/wiki setupand/wiki initwrite the initial config - Extension wiring — what
extensionCompatibilityactually wires up at runtime