Run capture every minute on macOS
Run these path settings in a new terminal. Keep the locations from the earlier lessons, or adapt all three consistently.
export AGENT_VAULT_CODE="$HOME/Developer/obsidian-master"
export AGENT_VAULT_PATH="$HOME/Knowledge/AgentVault"
export AGENT_VAULT_STATE="$HOME/Library/Application Support/AgentVaultGuide"
cd "$AGENT_VAULT_CODE"First run automode tick manually and confirm the status has no capture or index error. Keep paused: true. Then create ~/Library/LaunchAgents/com.example.agent-vault-guide.plist in a text editor with the following contents. Replace every YOUR_USER and create the LaunchAgents folder if needed.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"><dict>
<key>Label</key><string>com.example.agent-vault-guide</string>
<key>ProgramArguments</key><array>
<string>/Users/YOUR_USER/Developer/obsidian-master/.venv/bin/python</string>
<string>-m</string><string>agent_vault.automode</string>
<string>tick</string><string>--runtime</string>
<string>/Users/YOUR_USER/Library/Application Support/AgentVaultGuide</string>
</array>
<key>WorkingDirectory</key><string>/Users/YOUR_USER/Developer/obsidian-master</string>
<key>RunAtLoad</key><true/>
<key>StartInterval</key><integer>60</integer>
<key>StandardOutPath</key><string>/Users/YOUR_USER/Library/Application Support/AgentVaultGuide/worker.log</string>
<key>StandardErrorPath</key><string>/Users/YOUR_USER/Library/Application Support/AgentVaultGuide/worker-error.log</string>
</dict></plist>plutil -lint "$HOME/Library/LaunchAgents/com.example.agent-vault-guide.plist"
launchctl bootstrap "gui/$(id -u)" "$HOME/Library/LaunchAgents/com.example.agent-vault-guide.plist"
launchctl print "gui/$(id -u)/com.example.agent-vault-guide"This registers the job for your logged-in user, not a system-wide service. Inspect System/Intake/Auto-Status.json in the vault after a minute. A registered job is not proof that its last scan succeeded. If the job already exists, inspect it rather than repeatedly bootstrapping it.
To stop scheduled capture, unload this tutorial's job:
launchctl bootout "gui/$(id -u)/com.example.agent-vault-guide"By contrast, automode pause only stops judging. Capture continues while the job is loaded. Neither control stops your coding agents.
Bring in an existing notes folder
The source scanner makes physical copies and keeps earlier revisions. It does not move the original notes or replace them with symlinks. Create a separate sources.json in the tutorial runtime directory, adapting these paths:
{
"vault": "/Users/YOUR_USER/Knowledge/AgentVault",
"sources": [
{
"id": "project-notes",
"label": "Project notes",
"path": "/Users/YOUR_USER/Knowledge/ProjectNotes"
}
]
}.venv/bin/python -m agent_vault.vault_sources --config "$AGENT_VAULT_STATE/sources.json"
.venv/bin/python -m agent_vault.retrieval --vault "$AGENT_VAULT_PATH" --index-onlyUse a separate source folder, not the Agent Vault itself. Review the selected files first. Omitting --judge keeps this scan local. Inspect the copy manifests under System/SourceSync. The intake schedule above does not schedule this separate scanner; rerun it when you want to import changes.
Enable hosted judging only after reviewing the boundary
Local capture and search work without a TypeSafe key. Optional Jev judging sends selected passages and bounded context to TypeSafe. It produces advisory scores and receipts, not verified facts or automatically accepted memory. The local judge replacement remains planned in this source snapshot.
If you choose to enable it, supply TYPESAFE_API_KEY privately. The bridge also reads that key from ~/Library/Application Support/AgentVault/.env. That credential location is shared with other AgentVault deployments, not the tutorial queue directory. Do not put credentials in the vault, shell history, repository or launchd plist. A launchd job does not inherit an interactive terminal's exported variables.
Before resuming, inspect the queued messages and confirm that they may leave the machine. The configured daily dollar limit uses estimated inference costs, not an authoritative provider spending cap. Check the adapter's pricing assumptions against your current service terms.
.venv/bin/python -m agent_vault.automode resume --runtime "$AGENT_VAULT_STATE"
.venv/bin/python -m agent_vault.automode tick --runtime "$AGENT_VAULT_STATE"
.venv/bin/python -m agent_vault.automode status --runtime "$AGENT_VAULT_STATE"Review receipts under System/Intake. Failed or interrupted requests need inspection; do not repeatedly restart them. Search reranking is a separate opt-in through retrieval --judge jev. Resuming intake does not turn it on.
Review a proposal before making it a maintained note
The consolidation module reads successful intake receipts and proposes source excerpts for review. It does not ask a model to rewrite history. If judging is still disabled and there are no successful receipts, an empty proposal list is expected.
.venv/bin/python -m agent_vault.consolidation propose --vault "$AGENT_VAULT_PATH" --limit 10Open System/Consolidation/Review.md in Obsidian. Follow a proposal back to the original passage. Check who said it, whether it still applies and whether later evidence corrects it. Related notes are word-based matches, not proof that the proposal is new or consistent.
After reviewing a proposal, replace PROPOSAL_ID and the reviewer name below. Choose a new note destination whose parent folder already exists:
.venv/bin/python -m agent_vault.consolidation accept \
--vault "$AGENT_VAULT_PATH" --id PROPOSAL_ID \
--target "Knowledge/Reviewed recovery decision.md" --reviewer "Your name"
.venv/bin/python -m agent_vault.retrieval --vault "$AGENT_VAULT_PATH" --index-onlyAcceptance preserves the source link and checks that the source has not changed. It refuses to overwrite a different note. The command also supports reject, defer and reopen with a reviewer and reason. A reviewed excerpt still needs evidence behind its claims.
The project also includes evaluation comparisons, explicit decision history and source reassessment. Those are separate workflows, not automatic learning enabled by this installation. Read their guides and configuration before running them; an evaluation can make hosted calls even without generating answers.
Verify a backup by restoring and rebuilding search
Create recovery.json in the tutorial runtime directory. Keep its destination outside the vault:
{
"vault": "/Users/YOUR_USER/Knowledge/AgentVault",
"code": "/Users/YOUR_USER/Developer/obsidian-master",
"destination": "/Users/YOUR_USER/Backups/AgentVault"
}.venv/bin/python -m agent_vault.recovery --config "$AGENT_VAULT_STATE/recovery.json"The command archives the vault and code, checks file hashes, restores into a temporary directory and rebuilds the index. Its verification requires START.md and searchable content, which the first lesson created. Inspect System/Recovery/Latest.json for the result.
A backup on the same disk is only the first copy. Keep another verified copy on a separate device. The recovery command does not restore host credentials, native sessions or the complete runtime queue. Mutable files are captured individually, not as one transactional snapshot.
Keep secrets and unrelated data out of the source checkout and vault before archiving them. Redacted Git publication is a different feature, and pattern-based redaction is not proof that every secret was removed. This guide does not enable remote publication.
Troubleshooting
The agent cannot find the module
Use the virtual environment's Python and run from the checkout containing agent_vault. Do not copy a developer's absolute path unchanged. Check the same paths in instructions and the launchd job.
The note exists but retrieval misses it
Refresh the index with the correct --vault, then retry a distinctive phrase. Read-only retrieval never refreshes the snapshot. FTS5 is word-based search, not semantic search; different wording may miss relevant evidence.
The worker is paused but new files still appear
Pause applies to judging. Capture and index refresh still run. Unload the scheduled job to stop its scans, and check for any other installed AgentVault jobs or hooks.
Obsidian's graph is full of technical files
In Graph filters, hide the archive and technical receipts with -file:/\.jsonl?$/ -path:"Archive/" -path:"System/SourceSync/". Turn attachments off. This changes the graph display, not the files or the bridge's search index.
Delegate this guide
Give this to your agent
Copy this prompt into your coding agent. It should check the prerequisites, carry out this guide and report what it verified.
Help me set up the Agent Vault bridge described in this guide. First verify that I have an authorised obsidian-master checkout, Python 3.12 with SQLite FTS5 and an Obsidian vault. If the source is unavailable, report that prerequisite instead of inventing a download. Inspect the current source and any existing configuration. Preserve existing instructions and hooks. Propose the exact source folders and destinations before capturing conversations. Start with synthetic notes and judging paused. Verify retrieval through the agents I choose, showing source references. Ask before enabling a persistent job, sending text to a hosted judge or publishing anything. Keep credentials out of the vault and repository. Test recovery in a temporary location and report what passed, what failed and how to stop the tutorial job. Do not claim this setup enforces circuit breakers on my agents.