No description
Find a file
Emt-lin 6d878e175c
feat(agent-projects): project-scoped Agent Mode — Agent Home PR2 (#2604)
* feat(agent-mode): project-scoped Agent Mode workspaces (PR2)

Turn Agent Mode "projects" into Claude Projects-style workspaces: entering a
project gives a scoped workspace with its own sessions, chat history, and
materialized context, while the global workspace becomes one special scope
(GLOBAL_SCOPE sentinel) sharing the same code path.

Session scope
- AgentSessionManager stores sessions by internal id but binds each to an
  immutable projectId; per-scope MRU, resolveSessionCwd, getSessionsForScope, and
  enterProject/exitProject all key off that projectId, and the active-session
  invariant (active.projectId === activeProjectId) keeps existing UI helpers
  untouched.
- Backend restarts / in-place replacement inherit the replaced session's
  projectId; project scope reuses the warm process instead of adopting the
  vault-root probe session.
- Re-entering a project opens as a fresh visit: conversational chats detach from
  the tab strip (kept live in the pool, listed in chat history) instead of
  dragging every prior tab back, while an unused empty landing is reused rather
  than stacked. The global workspace keeps its restore-the-last-tab behavior.

Context materialization (off-vault shared cache)
- projectContextMaterializer + contextCacheStore + manifestBuilder capture a
  project's URL/YouTube/PDF context once per session (single-flight per project)
  into a per-vault, off-vault store shared across projects
  (~/.obsidian-copilot/vaults/<vaultId>/context-cache/): a source referenced by N
  projects is converted once per vault, not N times. Paths derive from one source
  of truth (conversionsLocation.ts); getVaultId lives in utils/appPaths.
- Layout: shared remotes/ + files/ snapshots keyed by source identity (md5),
  per-project markers/<md5(projectId)>/ failure markers. A root-confined node:fs
  backend (createNodeContextCacheFs) writes atomically (temp+rename), throws on
  write/mkdir/read while list/remove/clear tolerate a missing target (the store
  treats a failed read as a cache miss), and never ascends past the cache root; it
  loads node:fs lazily behind the desktop boundary so Obsidian mobile never pulls
  it into the bundle.
- A per-artifact async-mutex lock makes two projects cold-converting the same
  source converge to a single fetch (the waiter re-reads meta inside the lock and
  cheap-skips). Shared snapshots are never reconciled per-project; a project's
  stale marker is cleared on a cheap-skip hit or when a usable stale snapshot
  survives a failed refresh.
- Cache semantics match the legacy CAG cache: a successful snapshot is kept
  indefinitely (fingerprint cheap-skip, no TTL); a failure with no usable
  snapshot writes a marker and is cheap-skipped on later automatic runs
  (re-surfacing the error) until the file changes or the user retries. A
  schemaVersion stamped into every snapshot/marker makes a future format change
  re-materialize instead of misreading stale content; MATERIALIZED_SOURCE_TYPES
  is the single source of truth for source kinds.
- The first prompt inlines a <project_context> block listing absolute snapshot
  paths (keyed by type:source so a same-URL web+youtube pair resolves correctly)
  so all three backends reach the shared store; opencode gets an
  external_directory allow for the cache root. Per-source status mirrors CAG's
  ProjectLoadTracker into the projectId-keyed agentProjectContextLoadAtom
  (remotes parallel, files sequential; each flips Ready/Failed as it settles) and
  the composer shows a context status icon and queues sends while materializing.
  The never-reject contract and contextSignature/warm reactivity are preserved;
  released CAG caches (.copilot/*) are untouched.

Instructions mirror
- project.md stays the single source of truth, with a marker-gated AGENTS.md
  mirror generated by ensureAgentsMirror: codex/opencode auto-discover it from
  the session cwd, claude gets the same composed instructions via
  getProjectProfile. A built-in project policy is layered into each project's
  instructions (a user-authored, unmarked AGENTS.md is left untouched).

Landing & project UI
- AgentLandingStack spine with project landing state, header, Welcome card,
  Project Chats tab variant, and project CRUD (anchored create popover, edit
  modal, overflow menu); shelf lists cap at 5 behind a View-all popover.
- One context editor (ProjectContextSourceEditor) is shared by the home shelf and
  the Edit Project modal; the Manage modal leads with a Links section whose single
  add affordance is the sidebar "+URL" popover (the old right-pane inline URL
  input is removed for consistency with Tags/Folders/Files). A three-state
  (processing / ready / failed) status popover offers inline per-source retry, its
  landing refresh deferred to popover-close and scope-guarded. The web/youtube
  classification is consolidated into one UrlKind type reused across every URL
  surface. Truncated previews mark the cut with a labelled divider and a "Copy
  full content" pill, and cap render so large snapshots don't freeze the modal.

History scope
- Agent chat history is scope-keyed: a project view lists only its own chats,
  while GLOBAL_SCOPE is the flat all-chats view. Native session history is scoped
  to projects and resumed transcripts hydrate from the session's scope cwd; legacy
  chats with no projectId resolve to GLOBAL_SCOPE. A failed resume/create during a
  cross-scope history load rolls back the active scope (rollbackHistoryLoadScope)
  so the active-session invariant can't be left split.

Todo / plan
- Unified backend todo lists across claude/codex/opencode feed the project info
  popover, with per-session todo-id tracking and symmetric plan clear.

Hardening & fixes
- contextCacheFs rejects `..`, absolute, and root-escaping paths; symlink escape
  is documented as out of the cache's threat model.
- A hard-disabled composer (orphaned project) blocks keyboard sends and queued
  flushes, not just pointer events, so a turn can't drain into a dead project.
- The per-message attachment envelope is renamed <copilot-context> ->
  <attached_context> to disambiguate from the project-wide <project_context>.

Tests
- 30+ suites covering session scope, the off-vault cache store/fs (including a
  real-filesystem dedup integration test), the materializer, AGENTS.md mirror,
  todo-plan pipeline, landing UI, the context-signature refresh state machine, and
  the opencode external_directory allow; plus a mobile load-boundary smoke guard
  over the cache consumers.

* fix(agent-mode): keep project edit modal open on save failure

ProjectInfoPopover's edit onSave swallowed updateProject errors into a
Notice, so onSave resolved and AddProjectModal closed — discarding the
user's edits on duplicate-name / folder-collision failures. Log and
rethrow instead so the modal keeps the form open and surfaces the error,
matching AgentProjectRowActions.handleEdit.

* fix(agent-mode): preserve project context after first-turn fan-out; clear off-vault markers on delete

A first-turn multi-agent fan-out set firstPromptSent while only the
ephemeral sub-sessions received the <project_context> block — the visible
backend is never prompted on that path. The next normal turn then injected
null, permanently stripping the project manifest from the main chat. Stop
the fan-out branch from consuming the first-turn flag so the next visible
turn delivers it. Adds a regression test.

Also clear the off-vault failure-marker bucket (markers/<md5(projectId)>)
in deleteProject so a project recreated under the same id can't inherit
stale negative-cache state. Desktop-gated + dynamically imported; the
helper roots a confined fs at the bucket and reuses recursive clear().

* fix(agent-mode): refresh empty project landing on System Prompt edit

An empty landing session bakes in its project instructions at creation
(Claude via systemPromptAppend, codex/opencode via the AGENTS.md mirror),
but the landing-refresh trigger keyed on the materialization signature,
which deliberately omits systemPrompt. A System-Prompt-only edit therefore
left the open landing untouched, so the first message ran with stale
instructions until a manual new chat.

Add getProjectLandingCaptureSignature (materialization signature + the
instruction body) and key the landing-refresh observer on it, leaving
getProjectContextSignature untouched so prompt edits never trigger
re-materialization. Adds tests.

* fix(agent-mode): preserve compose draft typed during landing refresh

The empty-landing context refresh replaces the session in place; its
draftEmpty guard ran before the async backend-startup window, so text the
user typed during that window landed in the old session's draft and was
pruned when the old session closed — breaking the guard's stated 'never
discard text the user has started typing' contract.

Add useAgentInputDrafts.migrateDraft and call it right after the swap to
carry any draft typed during startup onto the new session id. Writes
setDrafts directly to bypass the live-id guard; ordering is safe because
closeSession awaits cancel() before deleting the old session, so the
source draft is still present when migration runs. Adds tests.

* fix(agent-mode): don't reuse a project landing that captured stale instructions

The previous fix made the active landing refresh on a System-Prompt edit,
but enterProject's session-reuse path gated only on the materialization
dirty flag, which deliberately ignores systemPrompt. So editing a
non-active project's System Prompt then re-entering reused the old landing
and ran the next turn with stale captured instructions.

Track a per-session landing-capture signature (materialization signature +
instruction body) at creation and require a reuse candidate to match the
live project config. When spawning fresh, detach existing empty landings so
a stale blank one can't linger. Leaves the materialization dirty machinery
untouched (it must stay systemPrompt-insensitive). Adds a regression test.

* docs(agent-mode): note PR2 tag/extension routing and Tier-1 exclusion scope

Two DESIGN NOTEs at the project context materializer, recording decisions
already settled in PR2_DESIGN.md so future reviews don't re-flag them:
- tag/extension inclusions are forwarded as source labels and reached via the
  agent's native search; precise resolution (MCP tag_search) is a PR3 item.
- exclusions are Tier 1 (best-effort: don't materialize / don't feed); they do
  not hard-block the agent's native grep — that needs a Tier 2/3 sandbox,
  deferred past PR2.

* fix(agent-mode): let project sessions read opted-in off-vault context

The built-in project prompt's default-only-cwd rule buried its carve-out in
a negative clause, so agents read an off-vault materialized snapshot path
(~/.obsidian-copilot/.../context-cache/...) as a forbidden external file and
declined to read it — even though the project itself configured that source.

Restructure the built-in prompt by axis (write / read+exception / boundary)
and name the <project_context> block explicitly: sources listed there are
opt-in to read and search even outside cwd, and a -> <abs path> snapshot
pointer is read directly. Pin the cross-file <project_context> tag coupling
with a regression test that diffs the prompt against the manifest's real
output.

* refactor(agent-mode): unify agent context status into one shared view

Per-item conversion status (icon + label + lookup key) was duplicated across
three agent surfaces: the composer status popover, the Manage modal's Links
panel, and — newly needed — its File Context file list. Each had its own
status->icon mapping, and the file list had none at all (it was wired to the
CAG load atom, which the agent pipeline never populates, so agent files showed
no status while URLs did).

Introduce processingItemStatusView as the single source of truth
(processingSourceKey / buildProcessingItemLookup / getProcessingStatusLabel /
ProcessingStatusIcon) and route all three surfaces through it. The Manage modal
now builds one agent status lookup (gated to the agent variant) shared by both
the Links panel and the file list, so file rows finally show conversion status
keyed by file:<path>. The legacy CAG status stays separate (different cache,
different semantics). Adds useAgentProcessingItems({ enabled }) so CAG/mobile
callers skip the off-vault read entirely.

* feat(agent-mode): show conversion status + snapshot preview for project files

The context editor's File Context list showed no conversion status or preview
for agent project files, while the Links panel showed both for URLs — an
asymmetry, since file snapshots also live in the off-vault cache. Wire file
rows to the same agent status pipeline: a ready file now shows its status icon
and a 'view parsed content' arrow that opens the off-vault snapshot via
openAgentCachedItemPreview (the same opener URLs use). Markdown has no snapshot
so it shows neither; the CAG path is unchanged.

Collapse the per-prop enableLinks branching at the row into one
getFileRowStatusProps resolver (agent vs CAG dispatched once). Also corrects
stale comments flagged in review (STATUS_COLOR is CAG-badge-only; the agent
hook still subscribes to its atom but the value is unused when disabled).

* refactor(agent-mode): neutralize reviewer-dialogue comments; share source builder

Drop the "if a future review flags this, point them here" reviewer-meta
sentences from this branch's own comments (keeping all why/invariant
rationale), leaving the pre-existing base-convention instances untouched.

Extract buildAgentProcessingSources() so useAgentProcessingItems and
useAgentPersistentFailureCount construct the AgentProcessingSource[] shape
through one shared pure helper instead of two copies that could drift; each
hook still passes its own candidate set (draft vs saved), so behavior is
unchanged.

* fix(agent-mode): restore the <copilot-context> attachment envelope

The per-message attachment envelope was renamed <copilot-context> →
<attached_context> in an earlier feature commit (8b880361), bundled as an
incidental "disambiguate from <project_context>" tweak. That changed AI prompt
content emitted to EVERY agent chat (not just project-scoped ones) without an
explicit request, against the repo rule "Never modify AI prompt content unless
the user explicitly asks"; base v4-preview has used <copilot-context> since
Agent Mode was introduced. Revert the tag (the inner instruction text was
unchanged) so the established prompt contract is preserved. The two
claudeSessionTranscript tests already expected <copilot-context>, so this also
restores prod/test consistency.

* fix(agent-mode): supersede a stale in-flight context materialization on edit

The per-project single-flight let any non-force caller join the in-flight run
unconditionally. If a project's context was edited while an earlier
materialization was still running (slow URL/PDF conversion + a queued first
prompt), the next session joined the stale run and received the pre-edit
<project_context> / additionalDirectories — the queued send could flush with
the old source set, and the new links/files were only captured on a later chat.

Carry the run's context signature in the in-flight entry and join only when it
matches the caller's current record signature; a differing signature supersedes
via the existing take-over-slot path (which defers disk work until the prior run
settles, so no cache-file race). Regression test added to the single-flight
describe.

* fix(agent-mode): roll back project scope when auto-spawn fails

enterProject optimistically parks the prior scope, points activeProjectId
at the new project, detaches its tabs, and nulls activeSessionId before
awaiting the auto-spawn of the scope's first session. When that spawn
rejects (e.g. a missing backend binary), the callers only surface a
Notice, leaving the manager scoped to a project with no active chat until
the user manually recovers.

Wrap the project-scope auto-spawn in spawnEnteredScopeOrRollback, which
restores the previous scope's activeProjectId + active-session pointer and
re-notifies on failure, then rethrows so the caller still reports it. The
rollback is guarded on still being parked in the attempted scope so a
concurrent enterProject isn't clobbered — mirroring the existing
rollbackHistoryLoadScope precedent for the history-load path.

* fix(agent-mode): address review findings (URL trim perf, snapshot meta parse, docs)

Three PR-introduced fixes from the PR2 review plus a deferral note:

- urlTagUtils: rewrite trimUrlTrailingPunctuation from O(n²) (a full split
  scan per stripped char) to O(n) — pre-count brackets once, then walk the end
  pointer left. A pathological trailing-bracket paste no longer freezes the main
  thread. Semantics are unchanged (balanced brackets kept, unbalanced stripped,
  hidden punctuation re-trimmed). Adds a 100k perf tripwire test.

- contextCacheStore: anchor parseSnapshotMeta's close marker to a line boundary
  (\n--> ) instead of the first --> anywhere, which a source path containing -->
  would match inside the embedded JSON, truncating it and forcing a permanent
  cache miss. Adds a regression test.

- projects/state: correct doc comments — project.md is the SSOT, AGENTS.md is
  its generated mirror (was inverted).

- AgentSessionManager: DESIGN NOTE only — detached sessions on project re-entry
  are kept alive intentionally and not yet evicted; bounding the idle class is
  deferred (needs a per-session backend close primitive).
2026-06-28 00:33:22 -07:00
.claude introduce model migration script 2026-05-28 16:03:46 -07:00
.cursor/rules Improve the regex for composer codeblock (#1778) 2025-09-03 13:51:34 -07:00
.github fix(mobile): guard Agent Mode off the mobile load path (#2577) 2026-06-06 21:56:58 -07:00
.husky chore(deps): swap unmaintained/legacy deps per e18e module-replacements (#2447) 2026-05-14 01:12:52 -07:00
__mocks__ feat(agent-projects): project-scoped Agent Mode — Agent Home PR2 (#2604) 2026-06-28 00:33:22 -07:00
designdocs feat(agent-projects): project-scoped Agent Mode — Agent Home PR2 (#2604) 2026-06-28 00:33:22 -07:00
docs feat(agent-mode): one-click "Report an Issue" flow with screenshot + frame log (#2614) 2026-06-15 16:43:26 -07:00
images Reduce images size in half in README without losing quality (#1966) 2025-10-30 16:58:32 -07:00
scripts feat(agent-projects): project-scoped Agent Mode — Agent Home PR2 (#2604) 2026-06-28 00:33:22 -07:00
src feat(agent-projects): project-scoped Agent Mode — Agent Home PR2 (#2604) 2026-06-28 00:33:22 -07:00
typings feat(agent-mode): introduce Agent Mode feature 2026-05-20 19:05:41 -07:00
.editorconfig Create vector store per vault (#348) 2024-03-08 21:50:45 -08:00
.gitignore Add BYOK settings - agent enablement 2026-05-28 16:02:47 -07:00
.npmrc Initial commit 2023-03-30 17:15:32 -07:00
.prettierrc Refactor Settings, add formatting (#518) 2024-08-20 21:53:09 -07:00
AGENTS.md Add BYOK settings - agent enablement 2026-05-28 16:02:47 -07:00
CLAUDE.md fix(agent-mode): surface missing provider credentials (#2529) 2026-05-29 23:39:18 -07:00
components.json Add tw prefix to tailwind (#1497) 2025-05-31 22:30:54 -07:00
CONTRIBUTING.md Add npm run test:vault for fast worktree-to-vault plugin reload (#2477) 2026-05-19 12:05:49 -07:00
esbuild.config.mjs fix(mobile): guard Agent Mode off the mobile load path (#2577) 2026-06-06 21:56:58 -07:00
eslint.config.mjs feat(agent-mode): one-click "Report an Issue" flow with screenshot + frame log (#2614) 2026-06-15 16:43:26 -07:00
jest.config.js feat(agent-projects): project-scoped Agent Mode — Agent Home PR2 (#2604) 2026-06-28 00:33:22 -07:00
jest.setup.js chore(lint): enable obsidianmd/no-global-this and fix violations (#2413) 2026-05-13 01:14:47 -07:00
knip.json chore(deps): remove unused deps and dead code to shrink bundle (#2460) 2026-05-14 22:25:59 -07:00
LICENSE Add license 2023-03-30 23:52:55 -07:00
local_copilot.md docs: update local copilot instructions for macOS (#1077) 2025-01-22 14:51:34 -08:00
manifest.json release: v3.3.3 (#2494) 2026-05-20 18:27:22 -07:00
nodeModuleShim.mjs feat(agent-mode): introduce Agent Mode feature 2026-05-20 19:05:41 -07:00
package-lock.json feat(agent-mode): show recent chats from native harness history regardless of markdown autosave (#2591) 2026-06-10 21:35:46 -07:00
package.json fix(mobile): guard Agent Mode off the mobile load path (#2577) 2026-06-06 21:56:58 -07:00
README.md feat(relevant-notes): dedicated pane with redesigned populated view (#2559) 2026-06-05 06:54:12 +08:00
RELEASES.md release: v3.3.3 (#2494) 2026-05-20 18:27:22 -07:00
tailwind.config.js feat(agent-projects): project-scoped Agent Mode — Agent Home PR2 (#2604) 2026-06-28 00:33:22 -07:00
tsconfig.json Merge 3.1.0 preview (#1906) 2025-10-10 21:38:50 -07:00
version-bump.mjs chore(release): make prerelease tooling stop poisoning master's manifest.json (#2429) 2026-05-13 15:53:48 -07:00
versions.json release: v3.3.3 (#2494) 2026-05-20 18:27:22 -07:00
wasmPlugin.mjs Format code (#521) 2024-08-21 15:16:22 -07:00

Copilot for Obsidian

The Ultimate AI Assistant for Your Second Brain

GitHub release (latest SemVer) Obsidian Downloads

Documentation | Youtube | Report Bug | Request Feature

Reward Banner

The What

Copilot for Obsidian is your invault AI assistant with chat-based vault search, web and YouTube support, powerful context processing, and ever-expanding agentic capabilities within Obsidian's highly customizable workspace - all while keeping your data under your control.

The Why

Today's AI giants want you trapped: your data on their servers, prompts locked to their models, and switching costs that keep you paying. When they change pricing, shut down features, or terminate your account, you lose everything you built.

We are building the opposite. Our goal is to create a portable agentic experience with no provider lock-in. Data is always yours. Use whatever LLM you like. Imagine that a brand new model drops, you run it on your own hardware, and it already knows about you (long-term memory), knows how to run the same commands and tools you have defined over time (as just markdown files), and becomes the thought partner and assistant that you own. This is AI that grows with you, not a subscription you're hostage to.

This is the future we believe in. If you share this vision, please support this project!

Key Features

  • 🔒 Your data is 100% yours: Local search and storage, and full control of your data if you use self-hosted models.
  • 🧠 Bring Your Own Model: Tap any OpenAI-compatible or local model to uncover insights, spark connections, and create content.
  • 🖼️ Multimedia understanding: Drop in webpages, YouTube videos, images, PDFs, EPUBS, or real-time web search for quick insights.
  • 🔍 Smart Vault Search: Search your vault with chat, no setup required. Embeddings are optional. Copilot delivers results right away.
  • ✍️ Composer and Quick Commands: Interact with your writing with chat, apply changes with 1 click.
  • 🗂️ Project Mode: Create AI-ready context based on folders and tags. Think NotebookLM but inside your vault!
  • 🤖 Agent Mode (Plus): Unlock an autonomous agent with built-in tool calling. No commands needed. Copilot automatically triggers vault, web searches or any other relevant tool when relevant.

Copilot's Agent can call the proper tools on its own upon your request.

Product UI screenshot

Table of Contents

Copilot V3 is a New Era 🔥

After months of hard work, we have revamped the codebase and adopted a new paradigm for our agentic infrastructure. It opens the door for easier addition of agentic tools (MCP support coming). We will provide a new version of the documentation soon. Here is a couple of new things that you cannot miss!

  • FOR ALL USERS: You can do vault search out-of-the-box without building an index first (Indexing is still available but optional behind the "Semantic Search" toggle in QA settings).
  • FOR FREE USERS: Image support and chat context menu are available to all users starting from v3.0.0!
  • FOR PLUS USERS: Autonomous agent is available with vault search, web search, youtube, composer and soon a lot other tools! Long-term memory is also a tool the agent can use by itself starting from 3.1.0!

Read the Changelog.

Why People Love It ❤️

  • "Copilot is the missing link that turns Obsidian into a true second brain. I use it to draft investment memos with text, code, and visuals—all in one place. Its the first tool that truly unifies how I search, process, organize, and retrieve knowledge without ever leaving Obsidian. With AI-powered search, organization, and reasoning built into my notes, it unlocks insights Id otherwise miss. My workflow is faster, deeper, and more connected than ever—I cant imagine working without it." - @jasonzhangb, Investor & Research Analyst
  • "Since discovering Copilot, my writing process has been completely transformed. Conversing with my own articles and thoughts is the most refreshing experience Ive had in decades.” - Mat QV, Writer
  • "Copilot has transformed our family—not just as a productivity assistant, but as a therapist. I introduced it to my nontechnical wife, Mania, who was stressed about our daughters upcoming exam; within an hour, she gained clarity on her mindset and next steps, finding calm and confidence." - @screenfluent, A Loving Husband

Get Started

Install Obsidian Copilot

  1. Open Obsidian → Settings → Community plugins.
  2. Turn off Safe mode (if enabled).
  3. Click Browse, search for “Copilot for Obsidian”.
  4. Click Install, then Enable.

Set API Keys

Free User

  1. Go to Obsidian → Settings → Copilot → Basic and click Set Keys.
  2. Choose your AI provider(s) (e.g., OpenRouter, Gemini, OpenAI, Anthropic, Cohere) and paste your API key(s). OpenRouter is recommended.

Copilot Plus/Believer

  1. Copy your license key at your dashboard. Dont forget to join our wonderful Discord community!
  2. Go to Obsidian → Settings → Copilot → Basic and paste the key into in the Copilot Plus card.

Usage

Free User

Chat Mode: reference notes and discuss ideas with Copilot

Use @ to add context and chat with your note.

Chat Mode

Ask Copilot:

Summarize Q3 Retrospective and identify the top 3 action items for Q4 based on the notes in {01-Projects}.

Chat Mode

Vault QA Mode: chat with your entire vault

Ask Copilot:

What are the recurring themes in my research regarding the intersection of AI and SaaS?

Vault Mode

Copilot's Command Palette

Copilot's Command Palette puts powerful AI capabilities at your fingertips. Access all commands in chat window via / or via right-click menu on selected text.

Add selection to chat context

Select text and add it to context. Recommend shortcut: ctrl/cmd + L

Add Selection to Context

Quick Command

Select text and apply action without opening chat. Recommend shortcut: ctrl/cmd + K

Quick Command

Edit and Apply with One Click

Select text and edit with one RIGHT click.

One-Click Commands

Create your Command

Create commands and workflows in Settings → Copilot → Command → Add Cmd.

Create Command

Command Palette in Chat

Type / to use Command Palette in chat window.

Prompt Palette

Open it from the command palette (Open Relevant Notes) to get its own pane that surfaces related content and links for whatever note you're viewing.

Use it to quickly reference past research, ideas, or decisions—no need to search or switch tabs.

Relevant Notes

Copilot Plus/Believer

Copilot Plus brings powerful AI agentic capabilities, context-aware actions and seamless tool integration—built to elevate your knowledge work in Obsidian.

Get Precision Insights From a Specific Time Window

In agent mode, ask copilot:

What did I do last week?

Time-Based Queries

Agent Mode: Autonomous Tool Calling

Copilot's agent automatically calls the right tools—no manual commands needed. Just ask, and it searches the web, queries your vault, and combines insights seamlessly.

Ask Copilot in agent mode:

Research web and my vault and draft a note on AI SaaS onboarding best practices.

Agent Mode

Understand Images in Your Notes

Copilot can analyze images embedded in your notes—from wireframes and diagrams to screenshots and photos. Get detailed feedback, suggestions, and insights based on visual content.

Ask Copilot to analyze your wireframes:

Analyze the wireframe in UX Design - Mobile App Wireframes and suggest improvements for the navigation flow.

Image Understanding

One Prompt, Every Source—Instant Summaries from PDFs, Videos, and Web

In agent mode, ask Copilot

*Compare the information about [Agent Memory] from this youtube video: [URL], this PDF [file], and @web[search results]. Start with your

 conclusion in bullet points in your response*

One Prompt, Every Source

Need Help?

  • Check the documentation for setup guides, how-tos, and advanced features.
  • Watch Youtube for walkthroughs.
  • If you're experiencing a bug or have a feature idea, please follow the steps below to help us help you faster:
    • 🐛 Bug Report Checklist
      • ☑️Use the bug report template when reporting an issue
      • ☑️Enable Debug Mode in Copilot Settings → Advanced for more detailed logs
      • ☑️Open the dev console to collect error messages:
        • Mac: Cmd + Option + I
        • Windows: Ctrl + Shift + I
      • ☑️Turn off all other plugins, keeping only Copilot enabled
      • ☑️Attach relevant console logs to your report
      • ☑️Submit your bug report here
    • 💡 Feature Request Checklist
      • ☑️Use the feature request template for requesting a new feature
      • ☑️Clearly describe the feature, why it matters, and how it would help
      • ☑️Submit your feature request here

FAQ

Why isnt Vault search finding my notes?

If you're using the Vault QA mode (or the tool @vault in Plus), try the following:

  • Ensure you have a working embedding model from your AI model's provider (e.g. OpenAI). Watch this video: AI Model Setup (API Key)
  • Ensure your Copilot indexing is up-to-date. Watch this video: Vault Mode
  • If issues persist, run Force Re-Index or use List Indexed Files from the Command Palette to inspect what's included in the index.
  • ⚠️ Dont switch embedding models after indexing—it can break the results.
Why is my AI model returning error code429: Insufficient Quota?

Most likely this is happening because you havent configured billing with your chosen model provider—or youve hit your monthly quota. For example, OpenAI typically caps individual accounts at $120/month. To resolve:

  • ▶️ Watch the “AI Model Setup” video: AI Model Setup (API Key)
  • 🔍 Verify your billing settings in your OpenAI dashboard
  • 💳 Add a payment method if one isnt already on file
  • 📊 Check your usage dashboard for any quota or limit warnings

If youre using a different provider, please refer to their documentation and billing policies for the equivalent steps.

Why am I getting a token limit error?

Please refer to your model providers documentation for the context window size.

⚠️ If you set a large max token limit in your Copilot settings, you may encounter this error.

  • Max tokens refers to completion tokens, not input tokens.
  • A higher output token limit means less room for input!

🧠 Behind-the-scenes prompts for Copilot commands also consume tokens, so:

  • Keep your message length short
  • Set a reasonable max token value to avoid hitting the cap

💡 For QA with unlimited context, switch to the Vault QA mode in the dropdown (Copilot v2.1.0+ required).

🙏 Thank You

If you share the vision of building the most powerful AI agent for our second brain, consider sponsoring this project or buying me a coffee. Help spread the word by sharing Copilot for Obsidian on Twitter/X, Reddit, or your favorite platform!

BuyMeACoffee

Acknowledgments

Special thanks to our top sponsors: @mikelaaron, @pedramamini, @Arlorean, @dashinja, @azagore, @MTGMAD, @gpythomas, @emaynard, @scmarinelli, @borthwick, @adamhill, @gluecode, @rusi, @timgrote, @JiaruiYu-Consilium, @ddocta, @AMOz1, @chchwy, @pborenstein, @GitTom, @kazukgw, @mjluser1, @joesfer, @rwaal, @turnoutnow-harpreet, @dreznicek, @xrise-informatik, @jeremygentles, @ZhengRui, @bfoujols, @jsmith0475, @pagiaddlemon, @sebbyyyywebbyyy, @royschwartz2, @vikram11, @amiable-dev, @khalidhalim, @DrJsPBs, @chishaku, @Andrea18500, @shayonpal, @rhm2k, @snorcup, @JohnBub, @obstinatelark, @jonashaefele, @vishnu2kmohan

Copilot Plus Disclosure

Copilot Plus is a premium product of Brevilabs LLC and it is not affiliated with Obsidian. It offers a powerful agentic AI integration into Obsidian. Please check out our website obsidiancopilot.com for more details!

  • An account and payment are required for full access.
  • Copilot Plus requires network use to facilitate the AI agent.
  • Privacy & Data Handling:
    • Free tier: Your messages and notes are sent only to your configured LLM provider (OpenAI, Anthropic, Google, etc.). Nothing goes to Brevilabs servers.
    • Plus tier: Messages go to your configured LLM provider. File conversions (PDF, DOCX, EPUB, images, etc.) are processed by Brevilabs servers only when you explicitly trigger these features via @ commands.
    • Processing vs. Retention: We process your data to deliver the feature you requested, then discard it. No message content, file uploads, or documents are retained on our servers after processing.
    • User ID: A randomly generated UUID is sent with Plus API requests for service delivery (license abuse prevention, rate limiting) but is not used for user tracking, profiling, or analytics.
  • Please see the privacy policy on the website for more details.
  • The frontend code of Copilot plugin is fully open-source. However, the backend code facilitating the AI agents is close-sourced and proprietary.
  • We offer a full refund if you are not satisfied with the product within 14 days of your purchase, no questions asked.

Authors

Brevilabs Team | Email: logan@brevilabs.com | X/Twitter: @logancyang