atomicbot-ai/atomic-agent/obsidian

Trust tier 3
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

Read, search, and create Markdown notes inside an Obsidian vault on disk.

Install

npx vskill@latest install atomicbot-ai/atomic-agent/obsidian

SKILL.md

obsidian

Operate on the user's Obsidian vault as plain Markdown files. Obsidian itself does not need to be running — the vault is just a directory tree of .md files.

Setup check (lazy — resolve path once, don't re-probe)

The vault path resolves as $OBSIDIAN_VAULT_PATH env var → fallback ~/Documents/Obsidian Vault. Resolve it once when you first need it this conversation; do not re-probe printenv on every turn. Operate on the resolved path directly and map failures:

  • os.fs.list / read errors with ENOENT / "no such file or directory" → Setup playbook → "Vault path does not exist".
  • the path exists but holds no .md files → Setup playbook → "Resolved path is not a real vault".

Vault paths often contain spaces — pass them through os.fs.* tools verbatim, no quoting needed.

Setup playbook (when prerequisites are missing)

When a check fails, the agent's job is to OFFER concrete help and EXECUTE the fix itself — not to dump setup instructions on the user. Use this dialogue shape:

  1. State plainly what is missing.
  2. Offer the most direct remediation the agent can perform via tools.
  3. Wait for the user's reply.
  4. Execute the fix via tools.
  5. Retry the original command; only then proceed.
Vault path does not exist

Reply:

"I couldn't find an Obsidian vault in either $OBSIDIAN_VAULT_PATH or ~/Documents/Obsidian Vault. Send me the absolute path to your vault — I'll verify it and save it to ~/.atomic-agent/.env so I can find it automatically in the future."

When the user replies with a path, verify it exists:

[{ "tool": "os.fs.list", "args": { "path": "<user-supplied-path>" } }]

If it lists .md files, persist the choice:

[{ "tool": "os.fs.write", "args": {
"path": "~/.atomic-agent/.env",
"mode": "append",
"content": "\nOBSIDIAN_VAULT_PATH=<user-supplied-path>\n"
} }]

Then reply: "Vault found and saved. Restart the agent so the env variable is picked up — I'll continue after the restart. (I'm already using the path for the current session.)" Continue using the path in-memory for the current session — no need to wait for restart to serve the user's request.

If the path does NOT contain .md files, ask once more before persisting: "There are no markdown files at this path. Is the vault really there, or is it a different path?"

Resolved path is not a real vault

Same playbook as above, but skip the "not found" framing — just say: "The default folder (~/Documents/Obsidian Vault) exists, but it doesn't look like an Obsidian vault — there are no markdown files. Send me the correct path."

When to use

  • The user asks to read, list, search, create, or append to notes in their Obsidian vault.
  • Markdown-native knowledge management with [[wikilinks]] between notes.

When NOT to use

  • Apple Notes (cross-device iCloud) — use the apple-notes skill instead.
  • Agent-internal scratch notes that don't need to live in the vault — use the memory.notes.store tool.

Common operations

List notes

All Markdown files in the vault:

os.fs.glob { patterns: ["**/*.md"], cwd: "<vault>" }

Notes in a specific subfolder:

os.fs.glob { patterns: ["Daily/**/*.md"], cwd: "<vault>" }
Read a note
os.fs.read { path: "<vault>/Note Name.md" }

For very long notes, use offset / limit to page through.

Search by filename
os.fs.glob { patterns: ["**/*keyword*.md"], cwd: "<vault>" }
Search by content
os.fs.grep { pattern: "keyword", path: "<vault>", glob: ["*.md"] }

Use outputMode: "files_with_matches" to get just the file list.

Create a new note
os.fs.write { path: "<vault>/New Note.md", content: "# Title\n\nBody here.\n" }
Append to an existing note
os.fs.write { path: "<vault>/Existing Note.md", content: "\nAppended line.\n", mode: "append" }

Notes

  • Wikilinks use the [[Note Name]] syntax (no .md extension). Use them when creating notes that should link to other notes — Obsidian will render them as clickable links and surface backlinks automatically.
  • Daily notes typically live under Daily/YYYY-MM-DD.md — confirm the user's pattern before assuming.
  • Do not edit .obsidian/ config files unless the user explicitly asks; they hold the vault's plugin and theme settings.

Security

  • Security scanPassed, 95 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
93
Repository forks
11
7-day trend score
23

Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/atomicbot-ai/atomic-agent/obsidian/badge)](https://verified-skill.com/skills/atomicbot-ai/atomic-agent/obsidian)

Something wrong with this skill or its page? Tell us.