This document provides a comprehensive reference for all Obsidian Gemini Scribe settings.
The settings tab is organised into a permanently-open General section at the top — covering provider, API key, models, and the plugin state folder — followed by collapsible sections (▶ collapsed, ▼ expanded). Click any header to toggle it; expand/collapse state is remembered between sessions in the expandedSettingsSections setting. All collapsible sections start collapsed.
The order of sections is:
- General (always open) — provider, API key, models, plugin state folder, Show advanced settings toggle.
- User experience — your name, frontmatter key, streaming, diff view, session history toggle, tool execution logging.
- Automation — scheduled tasks, scheduler catch-up, and lifecycle hooks combined.
- Vault search index — semantic search over your vault using Google File Search.
Advanced sections — Tool permissions, MCP servers, Agent config, Debug — are tagged with an ADVANCED pill and only appear after toggling Show advanced settings at the bottom of General. Agent config bundles four related sub-areas (Custom Prompts, API configuration, Context management, Tool loop detection) under one collapsible since they all tune how the agent talks to the model.
The reference below groups settings by topic for lookup, which doesn't always map 1:1 to the UI section names. The annotation in parentheses tells you which UI section a topic appears under.
- Basic Settings (UI: General — provider, API key, models, plugin state folder)
- Model Configuration (UI: General — chat/summary/completion/image model selection)
- Custom Prompts (UI: Agent config — advanced)
- UI Settings (UI: User experience — streaming, tool execution logging, diff view, identity, frontmatter key, session history)
- Automation Settings (UI: Automation — scheduled task catch-up, lifecycle hooks toggle)
- Context management (UI: Agent config — advanced)
- Developer Settings (UI: split across Agent config, Tool permissions, MCP servers, Debug — including token usage display)
- Session-Level Settings
UI sections without a dedicated topic in this reference: Vault search index (covered in Semantic Search). The Automation section's task and hook management UI is covered in the Scheduled tasks and Lifecycle Hooks guides; the two persistent settings (autoRunCatchUp, hooksEnabled) are documented in Automation Settings below.
- Setting:
provider - Type:
'gemini' | 'ollama' | 'openai' - Default:
'gemini' - Description: The default model backend, used by every feature without an explicit override (see Per-feature provider).
geminicalls the Google Cloud API;ollamacalls a local Ollama daemon;openaicalls the OpenAI Chat Completions API (or a compatible server at a custom base URL). - Notes: Changing the provider re-initialises the plugin. Model selections persist across the change — the Gemini fields (
chatModelName,summaryModelName,completionsModelName,imageModelName), the Ollama fields (ollamaModelName,ollamaSummaryModelName,ollamaCompletionsModelName), and the OpenAI fields (openaiModelName,openaiSummaryModelName,openaiCompletionsModelName) are each stored separately, so returning to a provider restores the model you had there; a value is only reset if it's actually stale for its own provider (e.g. a deprecated Gemini model id), never merely because you switched providers. Cloud-only features (Google Search, URL Context, Deep Research, image generation, RAG indexing) are off whenollamaoropenaiis the default — unless you route them to Gemini individually. See the Ollama Setup Guide and OpenAI Setup Guide for details.
- Setting:
providerOverrides - Type:
Partial<Record<'chat' | 'summary' | 'completions' | 'rewrite' | 'webSearch' | 'rag' | 'imageGen', 'gemini' | 'ollama' | 'openai'>> - Default:
{}(every feature usesprovider) - Description: Routes individual features to a provider other than the default. Each settings row lists only the providers that support that feature, so e.g. Image generation offers Gemini only, while Chat/Summaries/Completions/Rewrite offer all three. This is what enables a mixed setup — chat on a local Ollama or OpenAI-compatible model, web search and image generation on Gemini.
- Notes:
- A feature is never routed to the cloud on your behalf. If the resolved provider can't serve a feature, that feature stays off; the plugin does not substitute a different one. Enabling a cloud feature is always an explicit choice.
- Choosing Gemini for a feature means that feature's requests — including note content — go to Google. Choosing OpenAI means they go to your configured OpenAI base URL. The settings UI names the affected features whenever this is the case.
- The API key field is shown whenever any feature is routed to Gemini, not just when Gemini is the default; the OpenAI API key field works the same way for OpenAI.
- Changing any override re-initialises the plugin, since tool registration, RAG, and image generation all key off the resolved providers.
- Unknown keys or provider ids in a hand-edited
data.jsonare dropped on load.
- Full capability matrix: Provider Capabilities
- Setting:
ollamaBaseUrl - Type: String
- Default:
http://localhost:11434 - Required when any feature uses
ollama: Yes - Description: HTTP endpoint of your Ollama daemon. Update if Ollama runs on a different host or port.
- Setting:
openaiBaseUrl - Type: String
- Default:
https://api.openai.com/v1 - Required when any feature uses
openai: Yes (falls back to the default if cleared) - Description: Endpoint OpenAI Chat Completions requests are sent to. Point this at an OpenAI-compatible local server instead — LM Studio, MLX, Ollama's OpenAI-compatible endpoint, etc. — to keep requests on your machine. See the OpenAI Setup Guide.
- Type: String
- Required: Yes, whenever any feature is routed to
gemini— including a single per-feature override under anollamaoropenaidefault. Not needed for an all-Ollama setup. - Storage: Stored securely using Obsidian's SecretStorage API (not saved in
data.json) - Description: Your Google AI API key for accessing Gemini models
- How to obtain: Visit Google AI Studio
- Migration: If upgrading from a previous version, your API key is automatically migrated from
data.jsonto secure storage on first load
- Setting:
openaiApiKeySecretName - Type: String (SecretStorage key name; the key value itself is never in
data.json) - Default:
""(unset) - Required: Yes, whenever any feature is routed to
openai— including a single per-feature override under a different default. For a local compatible server that doesn't validate keys, any placeholder value satisfies this requirement. - Storage: Stored securely using Obsidian's SecretStorage API, mirroring
apiKeySecretNamefor Gemini - How to obtain: Visit platform.openai.com/api-keys
- Setting:
userName - Type: String
- Default:
"User" - Description: Name used by the AI when addressing you in responses
- Setting:
historyFolder - Type: String
- Default:
gemini-scribe - Description: Folder where plugin stores history, prompts, and sessions
- Notes: The value is normalized on load and when saved (via
normalizePathsemantics) — a hand-typed trailing, leading, or duplicate slash is corrected automatically, so folder exclusion and subfolder paths never break on a malformed state-folder path. - Structure:
gemini-scribe/ ├── History/ # Legacy note-centric chat history files (v3.x and earlier) ├── Prompts/ # Custom prompt templates ├── Skills/ # Custom agent skills (<skill-name>/SKILL.md) ├── Agent-Sessions/ # Agent mode sessions with conversation history ├── Scheduled-Tasks/ # Scheduled task definitions and run output ├── Background-Tasks/ # Output from background deep-research and image-gen tasks ├── Hooks/ # Lifecycle hook definitions and run output (created when hooksEnabled is true) ├── debug.log # Current log file (when file logging is enabled) └── debug.log.old # Previous rotated log file
- Setting:
chatHistory - Type: Boolean
- Default:
false - Description: Store agent session history as markdown files in your vault
- Note: Sessions are saved in the Agent-Sessions subfolder with auto-generated titles
- Setting:
summaryFrontmatterKey - Type: String
- Default:
"summary" - Description: Frontmatter key used when storing document summaries
Each model picker is filtered to the models of the provider serving its own feature, so a chat-on-Ollama / summaries-on-Gemini setup offers the right models in each row. Every provider in use has its list loaded independently.
- Gemini — models are loaded from the bundled list and auto-refreshed from GitHub on startup (cached for 24h). Click Refresh model list in Settings → General — or run the Gemini Scribe: Refresh model list command — to fetch the latest list immediately (bypasses the cache).
imageModelNameis Gemini-only. - Ollama — dropdowns are populated from
GET <ollamaBaseUrl>/api/tags, listing whatever you have pulled. Click Refresh Ollama model list if a freshly pulled model doesn't appear. Ollama keeps only one model resident at a time, so its summary and completions pickers default to Same as chat model ('') — picking a distinct model there is supported but costs a model reload on every switch. - OpenAI — dropdowns are populated from
GET <openaiBaseUrl>/models, enriched with curated metadata (context window, vision support) for currentapi.openai.commodels; unrecognized ids (typically from a compatible server) get conservative defaults. Click Refresh OpenAI model list if a model doesn't appear. Unlike Ollama, OpenAI has no single-resident-model constraint, so chat, summary, and completions each default to their own model rather than inheriting the chat model.
Because each provider uses its own settings fields, re-routing a feature between providers preserves every provider's choice — returning to a provider restores the exact model you had.
- Setting:
chatModelName - Type: String
- Default:
gemini-flash-latest - Description: Model used for agent chat conversations and the Rewrite text with AI command
- Available Models (representative sample — the full list is auto-refreshed; see Model Discovery):
gemini-flash-latest- Gemini Flash Latest (fast and efficient, default for chat/summary/rewrite)gemini-flash-lite-latest- Gemini Flash Lite Latest (lightweight, default for completions)gemini-2.5-flash- Gemini 2.5 Flashgemini-2.5-pro- Gemini 2.5 Progemini-3-flash-preview- Gemini 3 Flash Previewgemini-3.1-pro-preview- Gemini 3.1 Pro Previewgemini-3.5-flash- Gemini 3.5 Flash
- Note: The full model list is loaded from the bundled
models.jsonand auto-refreshed from GitHub on startup (cached 24h). Click Refresh model list in Settings → General for an immediate refresh.
- Setting:
summaryModelName - Type: String
- Default:
gemini-flash-latest - Description: Model used for document summarization
- Used by: Summarize active file command, conversation compaction
- Note: Used when summaries are served by Gemini. When they're served by Ollama,
ollamaSummaryModelNameapplies instead and this value is left untouched.
- Setting:
completionsModelName - Type: String
- Default:
gemini-flash-lite-latest - Description: Model used for IDE-style auto-completions
- Note: Completions must be enabled via command palette
- Note: Used when completions are served by Gemini. When they're served by Ollama,
ollamaCompletionsModelNameapplies instead and this value is left untouched.
- Setting:
imageModelName - Type: String
- Default:
gemini-2.5-flash-image - Only shown when: Image generation is routed to a provider that supports it (Gemini today)
- Description: Model used for image generation via the
generate_imagetool and the Generate image command. Only models with image-generation capability appear in this dropdown. - Note: Interactions-only image models (e.g.
gemini-omni-flash-preview) generate through the Interactions API instead ofgenerateContent, regardless of the Use Interactions API toggle.
- Setting:
ollamaModelName - Type: String
- Default:
''(backfilled to the first pulled model once the daemon's list loads) - Only shown when: Chat is served by
ollama - Description: The local model used for chat and rewrite, and for any other Ollama-served feature left on Same as chat model. Stored separately from the Gemini
chatModelNameso re-routing preserves each provider's choice. Populated fromGET <ollamaBaseUrl>/api/tags.
- Settings:
ollamaSummaryModelName,ollamaCompletionsModelName - Type: String
- Default:
''— Same as chat model - Only shown when: That feature is served by
ollama - Description: Optional per-feature Ollama models. Ollama keeps one model resident at a time, so the default inherits
ollamaModelNameand avoids a reload on every call; set one only when the swap is worth it (a small, fast completions model is the usual case). A value naming a model the daemon no longer serves is reset to''rather than to another model, so the feature falls back to the chat model instead of silently switching.
- Settings:
openaiModelName,openaiSummaryModelName,openaiCompletionsModelName - Type: String
- Default:
'gpt-5.6-sol','gpt-5.6-terra','gpt-5.6-luna'respectively - Only shown when: That feature is served by
openai - Description: The OpenAI model used for each use case. Unlike Ollama, OpenAI has no single-resident-model constraint, so each use case keeps its own model rather than defaulting to "inherit the chat model." Populated from
GET <openaiBaseUrl>/models.
Custom prompts allow you to create reusable AI instruction templates that modify how the AI behaves for specific sessions.
- Setting:
allowSystemPromptOverride - Type: Boolean
- Default:
false - Description: Intended to gate whether custom prompts can completely replace the default system prompt. Currently has no effect: any prompt with
override_system_prompt: truein its frontmatter replaces the system prompt regardless of this setting. Toggling it on or off does not change that behavior. - Warning: Because the frontmatter flag alone controls the override, a custom prompt with
override_system_prompt: truecan break expected functionality if it doesn't include essential instructions — this setting will not prevent that.
- Create a markdown file in
[Plugin state folder]/Prompts/ - Write your custom instructions in the file
- Select it in the session settings modal (gear icon in the agent panel)
See the Custom Prompts Guide for detailed instructions.
- Setting:
streamingEnabled - Type: Boolean
- Default:
true - Description: Enable streaming responses in the chat interface for a more interactive experience
- Note: When disabled, full responses are displayed at once
- Setting:
logToolExecution - Type: Boolean
- Default:
true - Description: Append a summary of each tool execution to the session history file for auditing
- Format: Collapsible callout blocks showing tool name, key parameters, status, and duration
- Note: Takes effect immediately when toggled — no plugin reload needed
- Setting:
alwaysShowDiffView - Type: Boolean
- Default:
false - Description: Automatically open a diff view when the agent proposes file changes, instead of requiring a button click
- When off: The confirmation card shows a summary and a "View changes" button. Click it to open the diff view
- When on: The diff view opens automatically alongside the confirmation card
- Note: The diff view lets you edit the proposed content before approving. If you modify content, the tool result reports
userEdited: trueso the agent knows
- Setting:
expandedSettingsSections - Type:
string[] - Default:
[] - Description: Internal list of section ids that are currently expanded in the settings tab. Updated automatically when you toggle a section. Known ids:
ui,automation,rag,tool-permissions,mcp-servers,agent-config,debug,per-feature-provider. (General itself is always open and has no id; its Per-feature provider sub-section is separately collapsible and tracked asper-feature-provider.) - Note: Edit
data.jsondirectly to pre-expand sections (for example, on a new install) or restore a custom layout after migrating vaults.
These settings appear in the Automation section of the plugin settings (UI: Automation). Task and hook management controls (creating, editing, and running tasks/hooks) are covered in the Scheduled tasks and Lifecycle Hooks guides.
- Setting:
autoRunCatchUp - Type: Boolean
- Default:
false - Description: When enabled, tasks with
runIfMissed: truethat were missed while Obsidian was closed are submitted silently as background tasks on startup, without showing the approval modal. - When disabled: The "Missed scheduled runs" modal appears on startup so you can choose Run or Skip per task. A red
!badge on the status bar persists if the modal is dismissed without acting. - See also: Catch-up Runs
- Setting:
hooksEnabled - Type: Boolean
- Default:
false - Description: Subscribe to vault events (file created/modified/deleted/renamed) and dispatch them to hook definitions in
[state-folder]/Hooks/. Each matching event fires a headless agent run with debounce, rate-limit, and loop-prevention guards. - Why opt-in: Vault events fire continuously; an unintentionally-broad hook can drain API quota quickly. The default is off so users opt in deliberately.
- See also: Lifecycle Hooks
Context management automatically monitors and controls conversation size to prevent exceeding model token limits.
- Setting:
contextCompactionThreshold - Type: Number (percentage, 5-50)
- Default:
20 - Description: Percentage of the model's input context window at which automatic compaction occurs
- How it works: When conversation tokens exceed this percentage, older turns are summarized and replaced with a compact summary while preserving recent messages
- Hard ceiling: Aggressive compaction triggers at 80% of the input limit to prevent API errors
When a session crosses the compaction threshold the plugin runs a cheaper pass before reaching for full summarization:
- Phase 1 — tool-result truncation. Walks history and replaces oversized (>4 KB)
functionResponsepayloads in older turns with a small{ truncated: true, truncatedFrom: N, note: "..." }marker. The most recent two tool-result turns are kept intact so the agent reasoning across recent tool calls still has the full text. This is purely structural — no LLM call, no extra tokens spent. - Re-evaluation. If phase 1 freed enough room to put us back under the threshold (e.g., a single 600 KB
read_filewas responsible for most of the bloat), the request goes out with the truncated history and phase 2 is skipped entirely. - Phase 2 — summarization. Only fires when truncation alone wasn't enough. Older turns are summarized via an LLM call into a single context-summary entry preserving recent messages.
Below the threshold, neither phase fires — older history bytes are left untouched so Gemini's implicit prefix cache stays valid and subsequent turns keep their cached-token discount. Truncation breaks the cache from the modified point forward, so it's restricted to turns where we'd be paying that cost anyway (compaction would have run otherwise).
Re-issuing a tool call brings the full output back if the agent needs it. The behavior is always-on and not currently exposed as a setting.
Compaction isn't only checked before the initial request — AgentLoop re-checks after every tool batch, so a long tool chain (many iterations in a single turn) can be compacted mid-flight instead of only at the start of the next user turn. Mid-loop compaction never touches the current tool chain's own turns (the ones carrying the in-flight functionCall/thoughtSignature continuity) — only turns from before the chain started are eligible, so an in-progress multi-step tool sequence is never summarized out from under itself.
Advanced settings for developers and power users. Access by clicking "Show advanced settings" in the plugin settings.
- Setting:
debugMode - Type: Boolean
- Default:
false - Description: Enable detailed console logging for troubleshooting
- Use case: Debugging API issues, tool execution problems, or unexpected behavior
- Setting:
showTokenUsage - Type: Boolean
- Default:
false - Description: Display estimated token count in the agent input area
- Display format:
Tokens: ~N / M (X%)showing total prompt tokens, model limit, and percentage used. When part of the prompt was served from Gemini's cache, an additional· Y% cachedsuffix appears; when the model reports its reasoning (thinking) token count for the last response, a· Z reasoningsuffix appears. Both suffixes can appear together - How it works: Token counts update live after each API response, including during tool call chains. Gemini's implicit caching means repeated content (system prompt, tool definitions) is often served from cache — the cached percentage rewards stable prefixes (system prompt, pinned history). The reasoning count appears only for models that report thinking tokens (Gemini thinking models); reasoning tokens are output-side and included in the response's total, so they don't count against the context window the percentage measures
- Visual indicators:
- Normal (muted text) — well under threshold
- Yellow — approaching compaction threshold (≥80% of threshold)
- Orange/red — at or above compaction threshold
- Setting:
fileLogging - Type: Boolean
- Default:
false - Description: Write log entries to a file (
debug.log) in the plugin state folder - Behavior:
- Errors and warnings are always written to the log file when enabled
- Debug-level entries (
log(),debug()) are only written when Debug mode is also enabled - Log files are automatically rotated at 1 MB (previous log kept as
debug.log.old) - Writes are batched and debounced to minimize I/O impact
- Use case: Sharing diagnostic information in bug reports, or letting the agent self-diagnose issues via the bundled
gemini-scribe-helpskill (which exposesdebug.loganddebug.log.oldas activatable resources only when this setting is on) - Note: Log files are stored in the plugin state folder and are automatically excluded from RAG indexing. The standard
read_filetool blocks the state folder; the help skill is the supported path for the agent to read these logs.
- Setting:
useInteractionsApi - Type: Boolean
- Default:
true - Only applies when: Gemini serves at least one use case (the toggle is hidden when no feature is routed to Gemini — e.g. an all-Ollama or all-OpenAI setup — and shown whenever chat, summary, or any other feature is routed to Gemini)
- Description: Routes Gemini requests through Google's GA Interactions API (
interactions.create) instead of the legacygenerateContentAPI. This is now the default transport; existing installs are migrated to it automatically (a one-time flip you can reverse by turning the toggle off). - Privacy: Runs statelessly (
store: false) — conversation history is replayed with each request, and the plugin does not persist Interactions state on Google's side between turns. (Requests are still sent to Google to generate each response, subject to Google's standard API data-handling terms.) - Status: Default-on. Responses stream incrementally (text, reasoning, and tool calls); turn it off to fall back to the legacy
generateContentpath if you hit issues. - Scope: Governs the conversational chat transport only. Image generation (the
generate_imagetool and Generate image command) always usesgenerateContentregardless of this setting — unless the selected image model is interactions-only (see below), in which case it uses the Interactions API. - Interactions-only models: Models flagged
interactionsOnlyin the model catalog (e.g.gemini-omni-flash-preview, an image-generation model) are only served by the Interactions API, so requests to them always route through it even when this toggle is off. Features that still run ongenerateContent(Google Search grounding, web fetch, RAG semantic search) substitute the default chat model if an interactions-only model ever ends up configured as the chat model.
- Setting:
customBaseUrl - Type: String
- Default:
""(empty) - Only applies when: Gemini serves at least one use case (Ollama has its own
ollamaBaseUrlsetting and OpenAI has its ownopenaiBaseUrlsetting; both ignore this value, and the field is hidden when no feature is routed to Gemini) - Description: Overrides the default Google API base URL for all SDK calls. Use this to route requests through a corporate proxy, local gateway, or regional mirror.
- Example:
https://my-proxy.example.com - Scope: Applies to every Google API call site in the plugin (chat, streaming, image generation, web fetch, Google Search/Maps grounding, RAG indexing, deep research, context management).
- Note: Leave blank to use the official Google endpoint. Invalid URLs will show a warning and be cleared automatically.
- Security note: Requests routed through this proxy will include your Google API key in the
x-goog-api-keyheader.
- Setting:
maxRetries - Type: Number
- Default:
3 - Description: Maximum number of retry attempts when a model request fails
- Note: Uses exponential backoff between retries. Applies to streaming and non-streaming requests alike, which share one retry policy.
- Setting:
initialBackoffDelay - Type: Number (milliseconds)
- Default:
1000 - Description: Initial delay before the first retry attempt
- Note: Subsequent retries use exponential backoff (2x, 4x, 8x, etc.), plus up to 10% random jitter so that several clients retrying after the same rate limit don't do so in lockstep. Each wait is capped at 60 seconds, so a large initial delay cannot push a retry arbitrarily far out.
- Note: When the API supplies its own retry delay (a
RetryInfohint on a 429), that value is used instead of the backoff — also capped at 60 seconds.
- Setting:
temperature - Type: Number (0.0-2.0)
- Default:
0.7 - Description: Controls response creativity and randomness
- Lower (0.0-0.5): More focused, deterministic, consistent
- Medium (0.5-1.0): Balanced creativity and coherence
- Higher (1.0-2.0): More creative, varied, unpredictable
- Note: Ranges automatically adjusted based on selected model's capabilities
- Setting:
topP - Type: Number (0.0-1.0)
- Default:
1.0 - Description: Controls response diversity via nucleus sampling
- Lower values (0.1-0.5): More focused on likely tokens
- Higher values (0.5-1.0): More diverse vocabulary
- Note: Works in conjunction with temperature
Model discovery is automatic — no user-configurable settings are required. On startup, the plugin fetches the latest available Gemini models from GitHub and falls back to the bundled list if the fetch fails. The remote list is cached in data.json under remoteModelCache for 24 hours; subsequent reloads within that window are no-ops.
To pick up a newly-published model without waiting for the cache to expire, click Refresh model list in Settings → General, or run the Gemini Scribe: Refresh model list command (gemini-scribe:refresh-model-list). Both honor the same skip conditions as the auto-fetch — they no-op when no feature is routed to Gemini or the host reports offline, and surface the outcome via a Notice. When any feature uses Ollama, a separate Refresh Ollama model list row re-queries the daemon for newly pulled models; when any feature uses OpenAI, a Refresh OpenAI model list row re-queries GET <openaiBaseUrl>/models. In a mixed setup, only the rows for providers actually in use are shown.
When Google retires a model (the API starts returning 404 "no longer available" — e.g. gemini-3-pro-preview in July 2026), it is removed from the catalog and any settings still pointing at it are migrated automatically on the next reload: to the retired model's designated successor when one exists (gemini-3-pro-preview → gemini-3.1-pro-preview), otherwise to the default model for that role.
- Setting:
stopOnToolError - Type: Boolean
- Default:
true - Description: Stop agent execution when a tool call fails
- When enabled: Agent stops immediately if any tool fails
- When disabled: Agent continues executing subsequent tools despite failures
Prevents the AI agent from executing identical tools repeatedly, which can cause infinite loops.
- Setting:
loopDetectionEnabled - Type: Boolean
- Default:
true - Description: Detect and prevent infinite tool execution loops
- Setting:
loopDetectionThreshold - Type: Number
- Default:
3 - Range: 2-10
- Description: Number of identical tool calls before a loop is detected
- Setting:
loopDetectionTimeWindowSeconds - Type: Number (seconds)
- Default:
30 - Range: 10-120
- Description: Time window for detecting repeated calls
- Example: If threshold is 3 and window is 30s, calling the same tool 3+ times within 30 seconds triggers detection
Controls which agent tools execute automatically, which require user confirmation before each run, and which are blocked entirely. Access via Settings → Gemini Scribe → Show advanced settings → Tool permissions.
- Setting:
toolPolicy.activePreset - Type: String
- Default:
cautious - Options:
| Preset | Label | Read tools | Write tools | Destructive tools | External tools |
|---|---|---|---|---|---|
read_only |
Read only | Auto | Blocked | Blocked | Blocked |
cautious |
Cautious (default) | Auto | Ask | Ask | Ask |
edit_mode |
Edit mode | Auto | Auto | Ask | Ask |
yolo |
YOLO mode | Auto | Auto | Auto | Auto |
custom |
Custom | Per-tool overrides | Per-tool overrides | Per-tool overrides | Per-tool overrides |
- YOLO mode warning: Selecting YOLO mode requires explicit confirmation in a modal. All operations execute without prompts — use only in trusted, well-understood workflows.
- Custom preset: Automatically activated when you override any individual tool's permission. Selecting a named preset resets all per-tool overrides.
- Setting:
toolPolicy.toolPermissions - Type: Object (tool name → permission)
- Default:
{}(empty — preset governs all tools) - Description: Each registered tool can be individually set to
deny(blocked),ask_user(confirmation required), orapprove(runs automatically) — these are the values persisted indata.jsonfor this setting. Overrides take precedence over the active preset. Setting an override causes the preset to switch tocustom. (This is distinct from thetoolPolicyYAML block used by Projects, Scheduled Tasks, and Hooks, which uses the shorterdeny/ask/allowaliases in frontmatter — see those guides.)
MCP (Model Context Protocol) server support allows the agent to use tools from external MCP servers. Supports both local (stdio) and remote (HTTP) servers.
- Setting:
mcpEnabled - Type: Boolean
- Default:
false - Description: Enable connections to MCP servers for external tool integration
- Setting:
mcpServers - Type: Array of server configurations
- Default:
[] - Description: List of MCP server configurations
Each server configuration includes:
| Field | Type | Description |
|---|---|---|
name |
String | Unique server name |
transport |
String | Transport type: "stdio" (local) or "http" (remote). Default: "stdio" |
command |
String | Command to spawn the server (stdio only) |
args |
String[] | Command arguments (stdio only) |
url |
String | Server URL (http only, e.g., http://localhost:3000/mcp) |
envSecretName |
String | SecretStorage key for the server's env vars (stdio only; values are not stored in data.json) |
enabled |
Boolean | Connect on plugin load |
trustedTools |
String[] | Tools that skip confirmation |
Environment variable values are kept in Obsidian's SecretStorage (the OS keychain), not in data.json. The config only stores envSecretName, a pointer to the keychain entry.
See the MCP servers Guide for setup instructions.
Session settings override global defaults for specific agent sessions. Access via the settings icon in the session header.
- Model: Override the default chat model for this session
- Temperature: Session-specific temperature setting
- Top-P: Session-specific top-p setting
- Custom Prompt: Select a custom prompt template for this session
- Add specific notes as persistent context for the session
- Context files are automatically included with every message
- Use @ mentions in chat to add files
- Active note is automatically included by default
Session-level permissions allow bypassing confirmation dialogs for specific operations during the current session only.
Available permission bypasses:
- File creation
- File modification
- File deletion
- File moving/renaming
Note: Permissions reset when you create a new session or load a different session.
- Model Selection: Flash models (8B, standard) are faster but less capable than Pro models
- Temperature: Higher values may require more processing time
- Model Discovery: Minimal performance impact; runs in background
- Loop Detection: Negligible overhead; recommended to keep enabled
- API Key: Your API key is stored securely via Obsidian's SecretStorage and is not written to
data.json. Never share your API key or commit it to version control - System Folders: Plugin automatically protects Obsidian's configuration folder (
.obsidianby default, or a renamed one) and plugin state folders from tool operations - Tool permissions: Review tool operations before approving (when confirmations are enabled)
- System Prompt Override: Use with caution; can break expected functionality
- Check API key is valid
- For Gemini: click Refresh in the Refresh model list row (Settings → General), or run the Gemini Scribe: Refresh model list command. The auto-fetch runs at most once every 24 hours, so a freshly published model won't appear until the cache expires unless you force a refresh.
- For Ollama: go to Settings → General and click Refresh in the Refresh Ollama model list row after pulling new models
- For OpenAI: go to Settings → General and click Refresh in the Refresh OpenAI model list row — useful after changing the base URL or loading a different model in a compatible server
- Check console for errors (with Debug mode enabled)
- Enable Debug mode and Log to File
- Check Loop Detection settings
- Review Stop on Tool Error setting
- Examine console logs or
debug.login the plugin state folder for specific errors
- Verify "Enable session history" is toggled on
- Check Plugin state folder path is valid
- Ensure you have write permissions to vault
For more help, see the Getting Started Guide or open an issue.