Skip to content
dsh.fish
Bundle

dsh-obsidian-channel

Let a DSH agent read and write your local Obsidian vault, with approval and one-click rollback.

Source
ShengenWu
License
MIT
Updated
Updated 4 days ago

Readme

# dsh-obsidian-channel

English · [中文](docs/README.zh.md)

[![version](https://img.shields.io/badge/version-0.1.1--rc.1-0f766e?style=flat-square)](https://github.com/ShengenWu/dsh-obsidian-channel/releases)
[![dsh](https://img.shields.io/badge/dsh-0.1.0--rc.6-7c3aed?style=flat-square)](https://github.com/deepseek-ai/deepseek-harness)
[![license](https://img.shields.io/badge/license-MIT-2563eb?style=flat-square)](LICENSE)
[![node](https://img.shields.io/badge/node-%3E%3D20-339933?style=flat-square)](https://nodejs.org)
[![topic](https://img.shields.io/badge/topic-dsh--plugin-111827?style=flat-square)](https://github.com/topics/dsh-plugin)

Work with a local Obsidian vault from [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness).

The 📓 button in the sidebar opens a home page for that vault. From there you can send the agent off to read a note, write today’s daily, or chase a broken wikilink. Writes ask you first. Anything this plugin changes can be rolled back. Obsidian itself does not need to be running.

## What you need

- **dsh web** installed and working
- Built against **dsh `0.1.0-rc.6`**
- A normal Obsidian vault folder on disk

## Install

```bash
dsh plugin --profile web add github:ShengenWu/dsh-obsidian-channel
```

Restart `dsh web` and open http://127.0.0.1:3080.

For a local checkout: `dsh plugin --profile web add /path/to/this/repo`.

## First run

1. Click 📓 **Obsidian** in the left sidebar.
2. If no vault is bound yet, paste the **absolute path** (`/Users/you/Notes` or `D:\Notes`) and bind it.
3. You get a home page. Default widgets are **Continue** (recent notes) and **Vault changes** (journal + rollback). Turn on Today / Search / Structure / Inbox / Links in Settings → Obsidian.
4. Click a note or a shortcut like “write today’s daily”. dsh opens a **new** session on that vault and drops text into the composer. It does not send for you.

The path is remembered. Later clicks only open the home page; they do not create another workspace.

![Vault home](docs/homepage.png)

## Day to day

**Talk from the home page.** Click a note, a broken link, or type at the bottom. Each click starts a fresh vault session so you are not dumped into last week’s thread.

**Daily notes follow Obsidian.** The home page and the agent read `.obsidian/daily-notes.json` first. If your vault uses `Daily` + `MM-DD-YYYY`, this plugin uses that path and will not invent another date order. Override it under Settings → Obsidian if you really want to.

**Writes wait for you.** Default is ask-every-time. You can switch to “ask once per task” or “never ask” (please don’t).

**Undo lives in Settings.** Settings → Obsidian has the change history: before / after, one-click rollback. A rollback is itself a journaled change, so you can undo the undo.

**Settings you actually care about:**

- vault path
- whether writes need approval
- daily-note folder and date format (optional; empty means “use Obsidian’s own setting”)
- extra directories the agent must not touch
- how long to keep the journal (30 days by default)

![Settings](docs/setting.png)

Vault sessions default to **Obsidian mode**: it does not change the mode on other workspaces. The persona is “help you tend a knowledge base”, not “write code”.

Reads can stay on the built-in read / grep / glob tools. Creates, replacements, appends, and deletes should go through the `obsidian_*` tools so they land in the journal. Native write / edit into this vault is blocked.

## What’s new in 0.1.1-rc.1

Pre-release after `0.1.0`. Pin it with `dsh plugin --profile web add github:ShengenWu/dsh-obsidian-channel#v0.1.1-rc.1`.

- Native folder pickers for the vault and the daily-note folder
- Home tiles in three sizes (S / M / L), drag to arrange, size in the ⋯ menu
- Click a note to edit it in a full overlay (source + preview)
- Today’s note is the note: click to open or create, **Agent** jumps to the vault workspace
- Recent-note titles use H1, then YAML `title`, then the filename
- Opening Obsidian no longer stays selected together with SSH / the task board

Still not in this cut: templates, weekly recap, `[[` completion.

## What’s in 0.1.0

- [x] Sidebar entry and vault home (today / recent / changes / broken links / shortcuts)
- [x] Approved create, update, append, delete, and batch edits
- [x] Change journal and one-click rollback
- [x] Settings page (bind the vault, approval policy, daily habit)
- [x] Daily-note path taken from Obsidian’s own config
- [x] Obsidian mode as the default for vault sessions; vault guidance only when the session is actually in the vault
- [x] Native write / edit into the vault is rejected
- [x] Composable homepage (shell + toggled widgets; default is continue + changes)
- [x] Search, list, structure, backlinks, and journaled move (rewrites `[[wikilinks]]`)
- [x] Literal `oldString` / `newString` update
- [x] Detect local vaults from Obsidian’s app config
- [x] Runtime skill `obsidian-vault` (available outside vault sessions)
- [ ] Daily / template cards and weekly recap
- [ ] `[[` completion in the composer — pick notes by title while typing a wikilink

Known gap: `bash` can still rewrite files and skip the journal. Be careful in a vault session.

## License

[MIT](LICENSE)

Issues welcome: <https://github.com/ShengenWu/dsh-obsidian-channel/issues>

This repo was built with dsh, Grok 4.6, and DeepSeek-v4-Pro-0813.

Install

dsh plugin --profile web add github:ShengenWu/dsh-obsidian-channel

Profile: web

  • This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.
  • This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.
Source