musingfox/cc-plugins/tree/main/obsidian-workspace
obw
Obsidian Workspace——プロジェクト単位の vault 生産性ツール(キャプチャ / ノート / PM)。スキルがフォルダー構成とテンプレートを管理し、/obw:pm は仕様をブロッキングチケットへ分割します。/issue はプロジェクトの dashboard のビューを一覧し、Mermaid をテキスト図として描画し、viz 経由でカードをブラウザーに開ける Claude Mod ペインです。Vault I/O は公式 obsidian-cli スキルを通して Obsidian CLI を使います。
この mod について
Obsidian Workspace
Claude Code のクイックキャプチャ、長文ノート、プロジェクト管理を行う、プロジェクト単位の Obsidian vault 生産性ツールです。スキルがフォルダー構成、ファイルテンプレート、PM の規約を管理し、/issue Claude Mod はプロジェクトの dashboard のビューをペインに一覧表示します。vault I/O は Obsidian CLI 経由で実行し、構文は公式の obsidian:obsidian-cli スキルに委ねます。各スキルファイルは小さく保たれているため、コンテキスト予算を消費しません。
プラグイン識別子:obw(スキルは /obw:<name> または自然言語で呼び出します)。
スキル
| スキル | 目的 |
|-------|---------|
| /obw:init | vault の選択、.obsidian.yaml の作成、スターターテンプレートのインストール、プロジェクトワークスペースの初期化、古い構成の移行 |
| /obw:jot <text> | クイックキャプチャ(タイムスタンプ付きの箇条書きを今日のデイリーノートへ追加)または長文ノート——入力の形で振り分け |
| /obw:pm [intent] | プロジェクト単位のタスク / ドキュメントライフサイクル。仕様をブロッキングチケットへ分割 |
仕組み
- Vault I/O は
obsidianCLI を通してメインコンテキストから直接実行します(サブエージェントは使いません)。このプラグインは CLI 構文を複製せず、公式のobsidian:obsidian-cliスキルとobsidian helpに委ねます。 - デイリーノート は Obsidian の Daily Notes コアプラグイン(フォルダー / ファイル名 / テンプレート)を使います。クイックキャプチャは
daily:appendを呼び出します。 - テンプレート(
task、doc)は vault の Obsidian Templates フォルダーにあります。/obw:initでは、同じ名前のファイルがまだ存在しない場合だけtemplates/からスターターファイルをコピーします——編集内容を上書きすることはありません。 - Dashboard は Obsidian Bases(
.baseファイル——Obsidian 1.9+ のコア機能)です。プラグイン内部のテンプレートから shell substitution で生成するため、内容が Claude のコンテキストに入ることはありません。
Issue ペイン
/issue <view> を実行すると、/obw:pm が作成した設定済みプロジェクトの dashboard.base からビューを一覧し、選択したカードのタイトル、状態、優先度、markdown 本文を同じペインで読めます。引数なしの /issue はビュー選択の下に All Tasks ビューを開き、矢印キーで操作するリストを表示します。カードは状態(todo、in-progress、blocked、done)でグループ化され、各見出しにカード数が付き、各行は [H|M|L] <title> <due> <tags> を優先度順に表示します。done は先頭で折りたたまれます。リストをクリックしてキー入力を渡し、↑↓ で移動、PgUp/PgDn でページ移動、→ または Enter でカードを開くか見出しを展開、← でリストへ戻るか見出しを折りたたみます。このリストにはターミナルまたはデスクトップが必要です。それ以外の場所では All Tasks は他のビューが使うフラットリストにフォールバックします。他のビューは常にフラットリストです。All Tasks のない dashboard は Active を開き、/obw:pm refresh dashboard の実行を促します。/issue <card> はカードを直接開きます。ペインは設定不足、利用できない CLI 出力、カード不足をその場で報告し、vault の内容を会話へ追加しません。
細い線でカードをリストから分けます。状態と優先度は色付きラベルになり、カードの Acceptance Criteria セクションにチェックボックスがあれば AC <checked>/<total> の件数が続きます。エラーは赤で描画し、進行状況と空リストの通知は暗く表示します。
カード本文の Mermaid ブロックは uvx [email protected] によりペインでテキスト図として描画され、uv が必要です。uv は任意です。uv がなければ、ブロックはカード内のコードブロックのままです。図の種類が未対応、%% コメントまたは --- frontmatter で始まる、termaid が失敗する、何も出力しない、5 s より長くかかる場合もコードブロックのままです。カードを先に描画し、図の準備ができたものからコードブロックを置き換えるため、最初の実行では uv が termaid を取得するまでコードブロックが表示されることがあります。
表示中のカードには Open in browser Button があり、viz プラグインの render.sh を通して Mermaid を含むカード本文を描画します。Button は viz がインストールされ、$CLAUDE_CONFIG_DIR または ~/.claude の installed_plugins.json から見つかり、ターミナル上にいる場合だけ表示されます。ブラウザーを開くには macOS の open を使い、SSH 経由ではペインにページの URL を表示します。カードをどこへ描画したか、または描画できなかった理由をペインが報告します。ページは Claude Code を実行しているマシンで開きます。SSH 変数を設定しないターミナルマルチプレクサーや relay(たとえば herdr)経由でセッションに接続している場合、ブラウザーは見ている端末ではなく、そのホストで開きます。
tailnet 上の別のデバイスからページを読むには、tailscale serve --bg --https=18090 18090 で viz のポートを一度プロキシします。各レンダーの後、ペインは tailscale serve status --json を読み、ページのポートを覆うマッピングがある場合は Tailnet: https://<machine>.<tailnet>.ts.net:18090/… の行を追加します。ペイン自身がマッピングを作ることはありません。マッピングがなければ、開いたページだけを表示します。
次でプラグインをテストします。
claude plugin test obsidian-workspace
Claude Mods がデフォルトで有効になる Claude Code 2.1.287 以降が必要です。Claude Code 2.1.287 を対象にビルドおよびテストしています。
前提条件
- 公式の
obsidianプラグイン(obsidian-skillsmarketplace から)。プラグイン依存として宣言されているため、marketplace を追加していれば(claude plugin marketplace add)このプラグインと一緒に自動インストールされます - Obsidian アプリが実行中(ヘッドレス CLI も可)
- Obsidian のコミュニティプラグイン
obsidian-cliをインストールして有効化。プラグイン名はobsidian-cliですが、インストールされる実行ファイルはobsidianです(obsidian vault=<name> ...として呼び出します)。Yakitrak による無関係なスタンドアロンobsidian-cliバイナリではありません - Templates コアプラグインを有効化(
/obw:pmに必要——task/docテンプレート) - Daily Notes コアプラグインを有効化(
/obw:jotのクイックキャプチャに必要) - Bases コアプラグインを有効化(
/obw:pmの dashboard にだけ必要——Obsidian 1.9+ に同梱) - uv(任意。
/issueペインがuvx [email protected]で Mermaid ブロックをテキスト図として描画できます——なければコードブロックとして表示します) - viz プラグイン(任意。
/issueペインの Open in browser Button を有効にします——なければ Button は描画されません) - Claude Code 2.1.287 以降(
/issueペインにだけ必要。スキル自体には不要)
インストール
/plugin install obsidian-workspace
権限(推奨)
Vault の操作は obsidian CLI といくつかの Unix ヘルパーを shell から呼び出します。権限プロンプトの繰り返しを避けるには、ユーザーの settings.json(~/.claude/settings.json)へ次を一度追加します。
{
"permissions": {
"allow": [
"Bash(obsidian:*)",
"Bash(cat:*)",
"Bash(jq:*)",
"Bash(cp:*)",
"Bash(sed:*)"
]
}
}
または、動かなくなった /obw:init の後で /fewer-permission-prompts を実行してください。トランスクリプトをスキャンして同じリストを提案します。
設定
プロジェクトルートで /obw:init を実行します。生成される .obsidian.yaml:
vault: MyVault
note:
default_folder: Inbox
filename_strategy: title # title | slug | timestamp-title
pm:
project: my-project # Omit this section to disable /obw:pm
デイリーノートのフォルダー / ファイル名 / テンプレートは .obsidian.yaml にはありません。Obsidian の Daily Notes 設定から取得されます。
Vault の構成(/obw:pm)
pm/
├── dashboard.base # Cross-project dashboard (optional, Bases)
└── {project}/
├── dashboard.base # Project dashboard (Bases)
├── tasks/ # Active tasks
│ └── archive/ # Completed tasks
└── docs/ # Docs
各プロジェクトには tasks/、docs/、dashboard.base が必ずあります。/obw:init が先に三つすべてを作るため、プロジェクトが空のフォルダーだけになることはありません。
0.9 より前の vault をアップグレードするには、/obw:init を再実行します。古い構成を検出し、archive/ を tasks/archive/ へ移動する(CLI 経由なのでリンクも追従)、既存ノートの title プロパティを補完する、新しいビューで dashboard を再生成する、という選択肢をそれぞれ提示します。既存のファイル名は変更しません。
プラグイン更新で dashboard ビューが追加されることがあります。既存の vault で /obw:pm refresh dashboard を実行すると、All Tasks(および新しいテンプレートビュー)を取り込めます。更新ではテンプレートから dashboard.base を再生成するため、ファイルへの手編集は上書きされます。先に警告して確認を求めます。
ファイル名
すべてのノートは kebab-case(Implement Auth → implement-auth.md)で、/obw:jot のノートと /obw:pm のタスク / ドキュメントの両方に適用されます。Obsidian の {{title}} はファイル名へ解決されるため、人間向けのタイトルは title プロパティに保存されます。dashboard が表示するのもこの値です。
プロパティ schema
Dashboard と検索は次の frontmatter フィールドに依存します。インストール済みのテンプレートを編集する場合も、フィールド名は維持してください。
- Task——
title、type: task、status(todo/in-progress/blocked/done)、priority(high/medium/low)、project、due(日付)、tags(リスト)、parent(リンク)、blocked_by(リンクのリスト)、related(リンクのリスト)、created、completed - Doc——
title、type: doc、project、created、updated
タスクの関係
タスクは三つのプロパティ——blocked_by、related、parent(epic → subtask)——を通じて wikilink で相互にリンクします。独立した issue ID はありません。kebab のファイル名がハンドルであり、ノートの名前を変えると Obsidian がリンクを書き換えます。
保存する方向は一つだけです。タスクが何をブロックし、どのサブタスクを持つかは Obsidian の backlinks ペインから得られます。blocked_by と並べて blocks フィールドを追加すると、ずれが生じるだけです。ブロッカーを追加すると status: blocked が設定され、タスクをアーカイブすると、まだ依存しているものを一覧してからブロック解除するか確認します。チケット分割ではブロック関係を blocked_by に書き込みます。ブロックされていないフロンティアはビューではなく、-[blocked_by: wikilink を除外する search です。
例
/obw:jot #worklog 完成 API 重構 PR,等 review
/obw:jot API Redesign Proposal --folder Architecture --tag design
/obw:pm add task implement-auth, high priority, due 2026-05-01
/obw:pm implement-auth is blocked by db-migration
/obw:pm implement-auth is done, archive it
/obw:pm split this spec into tickets
/obw:pm refresh dashboard
インストール
まず作者の README で marketplace とプラグイン名を確認してください。コマンドはリポジトリの構成によって変わる場合があります。
claude plugin marketplace add musingfox/cc-plugins claude plugin install obw
原文 / README
Obsidian Workspace
Project-scoped Obsidian vault productivity for Claude Code — quick capture, long-form notes, and project management. Skills own folder layout + file templates + PM conventions, while the /issue Claude Mod lists a view of the project's dashboard in a pane; vault I/O runs through the Obsidian CLI, deferring to the official obsidian:obsidian-cli skill for syntax. Each skill file is kept small so it doesn't burn your context budget.
Plugin identifier: obw (skills invoked as /obw:<name> or via natural language).
Skills
| Skill | Purpose |
|-------|---------|
| /obw:init | Pick a vault, write .obsidian.yaml, install starter templates, bootstrap the project workspace, migrate an older layout |
| /obw:jot <text> | Quick capture (timestamped bullet to today's daily note) or long-form note — triages by input shape |
| /obw:pm [intent] | Task / document lifecycle, project-scoped; split a spec into blocking tickets |
How It Works
- Vault I/O goes through the
obsidianCLI, run directly in the main context (no sub-agent). This plugin does not duplicate CLI syntax; it defers to the officialobsidian:obsidian-cliskill andobsidian help. - Daily notes use Obsidian's Daily Notes core plugin (folder / filename / template). Quick capture calls
daily:append. - Templates (
task,doc) live in your vault's Obsidian Templates folder. On/obw:initthe plugin copies starter files fromtemplates/only if the same name doesn't already exist — it never overwrites your edits. - Dashboards are Obsidian Bases (
.basefiles — core in Obsidian 1.9+) generated from plugin-internal templates via shell substitution, so contents never enter Claude's context.
Issue Pane
Run /issue <view> to list a view from the configured project's dashboard.base, created by /obw:pm, then select one to read its title, status, priority, and markdown body in the same pane. /issue with no argument opens the All Tasks view as an arrow-key list under the view picker: cards grouped by status (todo, in-progress, blocked, done), each heading with its card count, each row reading [H|M|L] <title> <due> <tags> sorted by priority, and done folded at the start. Click the list to give it the keys; ↑↓ move, PgUp/PgDn page, → or Enter opens a card or unfolds a heading, and ← goes back to the list or folds a heading. The list needs the terminal or desktop; elsewhere All Tasks falls back to the flat list other views use. Other views stay flat lists. A dashboard without All Tasks opens Active and says to run /obw:pm refresh dashboard. /issue <card> opens that card directly. The pane reports missing configuration, unavailable CLI output, and missing cards in place without adding vault content to the conversation.
A thin rule sets the card off from the list. Status and priority are coloured labels, followed by an AC <checked>/<total> count when the card's Acceptance Criteria section has checkboxes. Errors are drawn in red; progress and empty-list notices stay dim.
Mermaid blocks in the card body are drawn in the pane as text diagrams by uvx [email protected], which needs uv. uv is optional: without it, a block stays the code block it is in the card. A block also stays a code block when its diagram type is not supported, when it starts with a %% comment or --- frontmatter, or when termaid fails, prints nothing, or takes longer than 5 s. The card is drawn first and each diagram replaces its code block when it is ready, so the first run may show the code block until uv has fetched termaid.
A shown card has an Open in browser Button that renders the card body, Mermaid included, through the viz plugin's render.sh. The Button appears only when viz is installed, found through installed_plugins.json under $CLAUDE_CONFIG_DIR or ~/.claude, and only in the terminal. Opening the browser uses macOS open; over SSH the pane shows the page's URL instead. The pane reports where the card was rendered, or why it was not. The page opens on the machine running Claude Code: when you reach the session through a terminal multiplexer or relay that does not set the SSH variables (herdr, for example), the browser opens on that host, not on the device you are looking at.
To read the page from another device on your tailnet, proxy viz's port once with tailscale serve --bg --https=18090 18090. After each render the pane reads tailscale serve status --json and, when a mapping covers the page's port, adds a Tailnet: https://<machine>.<tailnet>.ts.net:18090/… line. The pane never creates a mapping itself; without one it shows only the opened page.
Test the plugin with:
claude plugin test obsidian-workspace
The pane needs Claude Code 2.1.287 or later, where Claude Mods are on by default. Built and tested against Claude Code 2.1.287.
Prerequisites
- Official
obsidianplugin (from theobsidian-skillsmarketplace) — declared as a plugin dependency, so it auto-installs with this plugin as long as that marketplace is added (claude plugin marketplace add) - Obsidian app running (headless CLI also works)
- Obsidian community plugin
obsidian-cliinstalled and enabled. The plugin's name isobsidian-clibut the executable it installs isobsidian(invoked asobsidian vault=<name> ...). This is not the unrelated standaloneobsidian-clibinary by Yakitrak. - Templates core plugin enabled (required for
/obw:pm—task/doctemplates) - Daily Notes core plugin enabled (required for
/obw:jotquick capture) - Bases core plugin enabled (required only for
/obw:pmdashboards — bundled in Obsidian 1.9+) - uv (optional; lets the
/issuepane draw Mermaid blocks as text diagrams throughuvx [email protected]— without it they show as code blocks) - viz plugin (optional; enables the
/issuepane's Open in browser Button — without it the Button is not drawn) - Claude Code 2.1.287 or later (required only for the
/issuepane; the skills do not need it)
Installation
/plugin install obsidian-workspace
Permissions (recommended)
Vault operations shell out to the obsidian CLI plus a few Unix helpers. To avoid repeated permission prompts, add these to user settings.json (~/.claude/settings.json) once:
{
"permissions": {
"allow": [
"Bash(obsidian:*)",
"Bash(cat:*)",
"Bash(jq:*)",
"Bash(cp:*)",
"Bash(sed:*)"
]
}
}
Or run /fewer-permission-prompts after a stuck /obw:init and it will scan transcripts and propose the same list.
Configuration
Run /obw:init in a project root. The generated .obsidian.yaml:
vault: MyVault
note:
default_folder: Inbox
filename_strategy: title # title | slug | timestamp-title
pm:
project: my-project # Omit this section to disable /obw:pm
Daily note folder / filename / template are not in .obsidian.yaml — they come from Obsidian's Daily Notes settings.
Vault Layout (/obw:pm)
pm/
├── dashboard.base # Cross-project dashboard (optional, Bases)
└── {project}/
├── dashboard.base # Project dashboard (Bases)
├── tasks/ # Active tasks
│ └── archive/ # Completed tasks
└── docs/ # Docs
Every project gets tasks/, docs/, and dashboard.base — /obw:init creates all three up front, so a project is never a bare folder.
Upgrading a vault from before 0.9: re-run /obw:init. It detects the old layout and offers, each separately, to move archive/ into tasks/archive/ (through the CLI, so links follow), backfill the title property on existing notes, and regenerate the dashboards with the new views. Existing filenames are never renamed.
A plugin update can add dashboard views. Run /obw:pm refresh dashboard to bring in All Tasks (and any other new template view) on an existing vault. The refresh regenerates dashboard.base from the template, so hand edits to that file are overwritten; it warns and asks first.
Filenames
All notes are kebab-cased (Implement Auth → implement-auth.md), for both /obw:jot notes and /obw:pm tasks / docs. Because Obsidian's {{title}} resolves to the filename, the human-readable title lives in the title property — that is what the dashboards display.
Property Schema
Dashboards and searches depend on these frontmatter fields. If you edit the installed templates, keep the field names.
- Task —
title,type: task,status(todo/in-progress/blocked/done),priority(high/medium/low),project,due(date),tags(list),parent(link),blocked_by(list of links),related(list of links),created,completed - Doc —
title,type: doc,project,created,updated
Task Relations
Tasks link to each other by wikilink through three properties — blocked_by, related, and parent (epic → subtask). There is no separate issue ID: the kebab filename is the handle, and Obsidian rewrites links when a note is renamed.
Only one direction is stored. What a task blocks, and what its subtasks are, come from Obsidian's backlinks pane — a blocks field alongside blocked_by would only drift. Adding a blocker sets status: blocked; archiving a task lists whatever still depends on it and asks before unblocking. Ticket splitting writes its blocking edges to blocked_by; the unblocked frontier is a search excluding -[blocked_by: wikilinks, not a view.
Examples
/obw:jot #worklog 完成 API 重構 PR,等 review
/obw:jot API Redesign Proposal --folder Architecture --tag design
/obw:pm add task implement-auth, high priority, due 2026-05-01
/obw:pm implement-auth is blocked by db-migration
/obw:pm implement-auth is done, archive it
/obw:pm split this spec into tickets
/obw:pm refresh dashboard
