What is Unified Chat Memory (UCM)?
mainhistory.db and memory.db stores. This enables cross-surface memory where insights learned in one tool can be recalled in another.repository·main·Indexed 42 days ago
https://github.com/pssah4/vault-operatorAn agentic AI operating layer for Obsidian (version 1.8.7+) that allows users to interact with their knowledge vault via a chatbot. Features include semantic and hybrid search, block-level provenance for PDF and Markdown ingestion, and the ability to generate DOCX, XLSX, and PPTX files. It includes a vault health check tool for auditing knowledge graphs and a fail-closed security model with a permission center and shadow git checkpoints for undoing changes. Version 3.8.2.
history.db and memory.db stores. This enables cross-surface memory where insights learned in one tool can be recalled in another.Vault Operator is a local-first plugin with no telemetry, analytics, or accounts. Network requests are only made under your control in the following scenarios:
web_search tool is invoked.catalog.json and skill packages from raw.githubusercontent.com. Downloads are verified against checksums.API keys are encrypted using Electron's safeStorage (OS keychain on macOS, Credential Manager on Windows, libsecret on Linux).
Files dropped into the chat are parsed once and available for the current turn only. From the next turn onwards, the parsed text is removed from the immediate context.
If you need an agent to operate on an attachment across multiple turns (e.g., a deep ingestion task), do not rely on the chat attachment. Instead:
Vault Operator organizes capabilities into four distinct buckets within the Skills tab in Settings. While they are managed differently, the agent treats all of them uniformly at runtime by loading them into the system prompt based on relevance.
| Category | Source / Storage | Lifecycle |
|---|---|---|
| Plugin | Generated by VaultDNAScanner; stored at {agent-folder}/data/skills/{plugin-id}/ | Automatically regenerated when plugins are enabled/disabled. |
| Built-in | Bundled with the plugin; materialized by BuiltinSkillMaterializer | Refreshed with software releases. |
| Agent | Created via skill-creator workflow; contains source: agent or source: learned in frontmatter | Survives built-in refreshes. |
| User | Manually written/imported; stored at {agent-folder}/data/skills/{name}/ | Persist until manually deleted by the user. |
To prevent large tool outputs from bloating the conversation history, the ResultExternalizer automatically manages results exceeding 2,000 characters.
How it works:
.vault-operator/cache/tmp/{taskId}/.Example Summary Format:
[search_files] Found 42 matches.
Top files:
- notes/foo.md
- notes/bar.md
...
Full results saved to: .vault-operator/cache/tmp/<taskId>/search_files-3.md
Use read_file("...") to see all matches with context.If the agent requires the full data, it should use the read_file tool with the provided path.
The ToolRepetitionDetector prevents the agent from getting stuck in infinite loops by monitoring tool calls.
tool:input combination appears 3 or more times.consecutiveMistakeLimit in AgentTask acts as a final safety net.Two runtime safety mechanisms are available to restrict agent behavior:
read and ui, ignoring all other toggles, presets, or existing grants.advancedApi.approvalTimeoutMinutes (set to 0 to wait indefinitely).Extracted components in the sidebar (located in src/ui/sidebar/) follow a consistent pattern for manual DOM management. Because there is no virtual DOM or reactive state, components do not have a lifecycle manager. Instead, each component:
Key sidebar components include:
AttachmentHandler: Handles drag-and-drop and document parsing.AutocompleteHandler: Manages slash commands and @-mentions.ToolPickerPopover: Displays tool selection prompts.VaultFilePicker: Enables file selection from the vault.HistoryPanel: Browses conversation history grouped by source-interface (e.g., All, Vault Operator, Claude.ai, etc.).CondensationFeedback: Notifies when context is being condensed.SuggestionBanner: Displays proactive agent suggestions.OnboardingFlow: Manages the first-run setup wizard.During Step 2 of a Deep Ingest, you must select an output mode. The agent defaults to conservative modes.
Available Modes:
source-plus-summary: Creates one dense note covering all chosen topics. Each take-away includes a block-ref to the source.source-plus-multi-zettel: Creates one bibliography note plus multiple atomic notes (Luhmann-style). Best for material that should be split into separate ideas.source-only: Writes a clean source note and the triage card, but keeps the take-aways in the chat dialog. You can create detailed notes for specific aspects on demand later.Recipes are vetted calls to external CLI programs (e.g., Pandoc export) that the agent can run using the execute_recipe tool. They use fixed, validated parameters to ensure safety.
Comparison with other customization methods:
/command.Instead of simple filename searching, Vault Operator uses a local semantic index to find notes based on their meaning. It traverses wikilinks and frontmatter to surface connections.
Configuration: The semantic index is opt-in. You can configure it to build:
Example prompt: "Find all notes related to behavioral economics and show me how they connect."Vault Operator manages memory via a configurable soft token budget in the system prompt.
ContextComposer fills the system prompt budget greedily using Reciprocal Rank Fusion (RRF) scores. It reallocates this budget dynamically based on the conversation topic (e.g., more coding facts for coding tasks).recall_memory tool, which the agent can call explicitly to search for specific information.