Install any skill in seconds. Free to start, no credit card required.
Get Started Free →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.
.claude/skills/sonichi-obsidian-vault/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | -12% | 0% |
| case-17 | ✗→✓ | ▲ Improved | -3% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 61% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 54% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -12% | 0% |
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.
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.
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 blockThis subfolder convention keeps Sutando's writes out of the way of anything else you put in the vault later.
kind="note"kind="task"kind="thought"thought for stream-of-consciousness, task for action-shaped, note otherwise.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.
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.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=1Then either:
python3 src/obsidian-mirror.py (single sweep + exit).obsidian-dream entry to your per-host crons.json to run on a cadence (it is not included in the default template). The nightly job 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.
scripts/search.py, scripts/daily-roundup.py driven via work() so heavier ops don't block the voice turn.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).
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-06 | fail→pass | 11,911 | 4,706 | -60% | 1 | 1 | 0% | 2,088 | 1,843 | -12% | 0 | 0 | — |
case-17 | fail→pass | 10,253 | 2,318 | -77% | 1 | 1 | 0% | 1,488 | 1,446 | -3% | 0 | 0 | — |
case-01 | fail→pass | 5,900 | 2,897 | -51% | 1 | 1 | 0% | 1,011 | 1,628 | +61% | 0 | 0 | — |
case-02 | fail→fail | 6,291 | 7,819 | +24% | 1 | 1 | 0% | 898 | 1,807 | +101% | 0 | 0 | — |
case-03 | fail→pass | 6,122 | 1,702 | -72% | 1 | 1 | 0% | 863 | 1,326 | +54% | 0 | 0 | — |
case-04 | fail→pass | 12,123 | 3,385 | -72% | 1 | 1 | 0% | 1,819 | 1,600 | -12% | 0 | 0 | — |
case-05 | fail→pass | 9,293 | 5,088 | -45% | 1 | 1 | 0% | 1,416 | 1,802 | +27% | 0 | 0 | — |
case-07 | fail→pass | 10,147 | 1,864 | -82% | 1 | 1 | 0% | 1,500 | 1,300 | -13% | 0 | 0 | — |
case-08 | fail→pass | 12,476 | 3,732 | -70% | 1 | 1 | 0% | 1,903 | 1,670 | -12% | 0 | 0 | — |
case-09 | pass→pass | 4,479 | 1,745 | -61% | 1 | 1 | 0% | 676 | 1,271 | +88% | 0 | 0 | — |
case-10 | fail→pass | 9,769 | 1,839 | -81% | 1 | 1 | 0% | 1,445 | 1,381 | -4% | 0 | 0 | — |
case-11 | fail→pass | 12,540 | 2,049 | -84% | 1 | 1 | 0% | 1,985 | 1,393 | -30% | 0 | 0 | — |
case-12 | pass→pass | 10,251 | 2,979 | -71% | 1 | 1 | 0% | 1,573 | 1,564 | -1% | 0 | 0 | — |
case-13 | fail→pass | 17,047 | 2,610 | -85% | 1 | 1 | 0% | 2,575 | 1,492 | -42% | 0 | 0 | — |
case-14 | pass→pass | 6,994 | 1,676 | -76% | 1 | 1 | 0% | 909 | 1,287 | +42% | 0 | 0 | — |
case-15 | fail→pass | 8,972 | 1,637 | -82% | 1 | 1 | 0% | 1,254 | 1,301 | +4% | 0 | 0 | — |
case-16 | pass→pass | 8,103 | 1,770 | -78% | 1 | 1 | 0% | 1,183 | 1,323 | +12% | 0 | 0 | — |
case-18 | fail→pass | 12,405 | 2,155 | -83% | 1 | 1 | 0% | 1,990 | 1,453 | -27% | 0 | 0 | — |
case-19 | pass→pass | 4,660 | 1,622 | -65% | 1 | 1 | 0% | 716 | 1,303 | +82% | 0 | 0 | — |
case-20 | pass→pass | 13,202 | 4,264 | -68% | 1 | 1 | 0% | 1,807 | 1,621 | -10% | 0 | 0 | — |
case-21 | fail→pass | 11,663 | 2,172 | -81% | 1 | 1 | 0% | 1,917 | 1,401 | -27% | 0 | 0 | — |
case-22 | fail→pass | 7,534 | 2,219 | -71% | 1 | 1 | 0% | 999 | 1,406 | +41% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +68 percentage points is the difference between those two pass rates over the 21 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.