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.
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
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
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.
npx skills add https://github.com/sonichi/sutando --skill "skills/obsidian-vault"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
- 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. - 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… - 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. - 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" - 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
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
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 59/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 359 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated 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
thoughtfor stream-of-consciousness,taskfor action-shaped,noteotherwise.
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 sweepstasks/+results/+notes/+pending-questions.mdintoSutando/Agent/. No background process; runs once and exits. Schedule it yourself viacrons.jsonat whatever cadence you want.- Nightly
dream.pycron — Opus-4.7-judged cross-linking (inline(cf. [[X]])citations + tiered## Strongly Related/## Related/## See alsofooter 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.jsonto run on a cadence (default template addsobsidian-dreamnightly at 03:37, which sweeps + judges in one go).
CLI flags worth knowing:
python3 src/obsidian-mirror.py --force— bypass the env gate (used byrun_dreamvoice 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.pydriven viawork()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).