Source profileQuality 59/100

sonichi/sutando/skills/obsidian-vault/SKILL.md

obsidian-vault

Voice-inline capture into a Sutando-owned Obsidian vault. The voice agent calls `add_to_vault(kind, body, title?)` directly — no core round-trip, no Obsidian plugin required. Filesystem-direct: Obsidian's watcher picks up the change instantly when the vault is open.

Source repository stars
359
Declared platforms
0
Static risk flags
1
Last source update
2026-07-28
Source checked
2026-07-28

Decision brief

What it does—and where it fits

Voice-inline capture into a Sutando-owned Obsidian vault. The voice agent calls addtovault(kind, body, title?) directly — no core round-trip, no Obsidian plugin required. Filesystem-direct: Obsidian's watcher picks up the change instantly when the vault is open.

Best for

    Not for

    • Tasks that require unconfirmed production actions or broad system permissions.
    • Environments where the pinned source and install steps cannot be inspected.

    Compatibility matrix

    Platform support, with evidence labels

    PlatformStatusEvidenceWhat to check
    CodexNot declaredNo explicit evidencePortability before use
    Claude CodeNot declaredNo explicit evidencePortability before use
    CursorNot declaredNo explicit evidencePortability before use
    Gemini CLINot declaredNo explicit evidencePortability before use
    Open the compatibility checker

    Installation

    Inspect first. Install second.

    The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

    Source-detected install commandSource
    npx skills add https://github.com/sonichi/sutando --skill "skills/obsidian-vault"
    Safe inspection promptEditorial

    Inspect the Agent Skill "obsidian-vault" from https://github.com/sonichi/sutando/blob/6a8f0fccd32e5aa620a3572c8885544f144bb6fe/skills/obsidian-vault/SKILL.md at commit 6a8f0fccd32e5aa620a3572c8885544f144bb6fe. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

    Workflow

    What the source asks the agent to do

    1. 01

      One-time setup in Obsidian

      Open Obsidian → File → Open vault → Open folder as vault → pick /obsidian-vault. Obsidian will remember it. The vault appears empty until you trigger your first capture.

      Open Obsidian → File → Open vault → Open folder as vault → pick /obsidian-vault. Obsidian will remember it. The vault appears empty until you trigger your first capture.
    2. 02

      Vault

      Lives at /obsidian-vault/ ( resolved via bash scripts/sutando-config.sh workspace — per sutando.config.local.json, defaulting to /workspace/; $SUTANDOWORKSPACE no longer honored as of v0.8 / 1440). Auto-created on first capture, with a .obsidian/ marker dir so Obsidian recognize…

      Lives at /obsidian-vault/ ( resolved via bash scripts/sutando-config.sh workspace — per sutando.config.local.json, defaulting to /workspace/; $SUTANDOWORKSPACE no longer honored as of v0.8 / 1440). Auto-created on first…
    3. 03

      Layout

      Everything Sutando writes lives under the Sutando/ subfolder, by kind:

      Everything Sutando writes lives under the Sutando/ subfolder, by kind:This subfolder convention keeps Sutando's writes out of the way of anything else you put in the vault later.
    4. 04

      Triggers (what the voice agent listens for)

      "save this as a note" / "note that X" → kind="note"

      "save this as a note" / "note that X" → kind="note""add to my tasks" / "todo: X" / "remind me to X" → kind="task""remember this thought" / "log this idea" → kind="thought"
    5. 05

      Opt-in: agent-state mirror + nightly dream

      addtovault (the voice-inline capture tool) is always available — it only writes when you explicitly say "save this as a note" / "todo: ..." / "thought: ...".

      src/obsidian-mirror.py — one-shot CLI that sweeps tasks/ + results/ + notes/ + pending-questions.md into Sutando/Agent/. No background process; runs once and exits. Schedule it yourself via crons.json at whatever cadenc…Nightly dream.py cron — Opus-4.7-judged cross-linking (inline (cf. [[X]]) citations + tiered Strongly Related / Related / See also footer block). Sweeps the mirror first, then judges.One-shot now: python3 src/obsidian-mirror.py (single sweep + exit).

    Permission review

    Static risk signals and limitations

    Reads files

    low · line 33

    The documentation asks the agent to read local files, directories, or repositories.

    Open Obsidian → **File → Open vault → Open folder as vault** → pick `<workspace>/obsidian-vault`. Obsidian will remember it. The vault appears empty until you trigger your first capture.

    Evidence record

    Why each signal appears

    EvidenceSourceComputedTestedEditorial
    SignalValueEvidence typeMeaning
    Quality score59/100ComputedDocumentation, specificity, maintenance, and trust rules
    Repository stars359SourceRepository attention, not individual Skill quality
    Compatibility0 platformsSourceDeclared in the catalog source record
    Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

    Pinned source

    Provenance and original SKILL.md

    Repository
    sonichi/sutando
    Skill path
    skills/obsidian-vault/SKILL.md
    Commit
    6a8f0fccd32e5aa620a3572c8885544f144bb6fe
    License
    MIT
    Collected
    2026-07-28
    Default branch
    main
    View the original SKILL.md

    obsidian-vault

    Voice-inline capture into a Sutando-owned Obsidian vault. The voice agent calls add_to_vault(kind, body, title?) directly — no core round-trip, no Obsidian plugin required. Filesystem-direct: Obsidian's watcher picks up the change instantly when the vault is open.

    Vault

    Lives at <workspace>/obsidian-vault/ (<workspace> resolved via bash scripts/sutando-config.sh workspace — per sutando.config.local.json, defaulting to <repo>/workspace/; $SUTANDO_WORKSPACE no longer honored as of v0.8 / #1440). Auto-created on first capture, with a .obsidian/ marker dir so Obsidian recognizes the folder as a vault.

    Layout

    Everything Sutando writes lives under the Sutando/ subfolder, by kind:

    <workspace>/obsidian-vault/
      .obsidian/                                 ← marker; Obsidian populates on first open
      Sutando/
        Notes/<slug>-<YYYY-MM-DDTHHMMSS>.md      kind="note"   → standalone file w/ frontmatter
        Tasks.md                                 kind="task"   → appended checkbox
        Thoughts/<YYYY-MM-DD>.md                 kind="thought" → appended timestamped block
    

    This subfolder convention keeps Sutando's writes out of the way of anything else you put in the vault later.

    Triggers (what the voice agent listens for)

    • "save this as a note" / "note that X" → kind="note"
    • "add to my tasks" / "todo: X" / "remind me to X" → kind="task"
    • "remember this thought" / "log this idea" → kind="thought"
    • Ambiguous capture intents → the tool description picks thought for stream-of-consciousness, task for action-shaped, note otherwise.

    One-time setup in Obsidian

    Open Obsidian → File → Open vault → Open folder as vault → pick <workspace>/obsidian-vault. Obsidian will remember it. The vault appears empty until you trigger your first capture.

    Opt-in: agent-state mirror + nightly dream

    add_to_vault (the voice-inline capture tool) is always available — it only writes when you explicitly say "save this as a note" / "todo: ..." / "thought: ...".

    Two automatic features are opt-in via env var and OFF by default:

    • src/obsidian-mirror.py — one-shot CLI that sweeps tasks/ + results/ + notes/ + pending-questions.md into Sutando/Agent/. No background process; runs once and exits. Schedule it yourself via crons.json at whatever cadence you want.
    • Nightly dream.py cron — Opus-4.7-judged cross-linking (inline (cf. [[X]]) citations + tiered ## Strongly Related / ## Related / ## See also footer block). Sweeps the mirror first, then judges.

    Both are gated by SUTANDO_OBSIDIAN_MIRROR. To enable, add to .env:

    SUTANDO_OBSIDIAN_MIRROR=1
    

    Then either:

    • One-shot now: python3 src/obsidian-mirror.py (single sweep + exit).
    • Or wire into skills/schedule-crons/crons.json to run on a cadence (default template adds obsidian-dream nightly at 03:37, which sweeps + judges in one go).

    CLI flags worth knowing:

    • python3 src/obsidian-mirror.py --force — bypass the env gate (used by run_dream voice tool).
    • python3 src/obsidian-mirror.py --since 1h — only sync sources modified in the last hour (faster sweep for frequent crons).

    The on-demand voice tool run_dream bypasses the gate — explicit user invocation always wins.

    What's not in this skill (yet)

    • Search / weekly roundup / multi-file edits — those are the "core" half of this integration. Plan: add scripts/search.py, scripts/daily-roundup.py driven via work() so heavier ops don't block the voice turn.
    • Obsidian Local REST API — community plugin that exposes HTTP endpoints. We don't use it. Filesystem-direct is simpler and has no plugin dependency. Could be a future opt-in for read-side flows.

    Loader

    Loaded by src/inline-tools.ts:loadSkillManifestTools() at voice-agent startup. To pick up changes: restart voice-agent and reconnect the web client (Gemini caches the tool list at session start).