ClaudeMods
☰
JA
● 0 人がオンライン ・閲覧 0 回
スポンサー作品を投稿
GitHub リポジトリ · 投稿者 musingfox

obw

Obsidian Workspace——プロジェクト単位の vault 生産性ツール(キャプチャ / ノート / PM)。スキルがフォルダー構成とテンプレートを管理し、/obw:pm は仕様をブロッキングチケットへ分割します。/issue はプロジェクトの dashboard のビューを一覧し、Mermaid をテキスト図として描画し、viz 経由でカードをブラウザーに開ける Claude Mod ペインです。Vault I/O は公式 obsidian-cli スキルを通して Obsidian CLI を使います。

musingfox@musingfox

musingfox/cc-plugins/tree/main/obsidian-workspace

翻訳済み

この 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 は obsidian CLI を通してメインコンテキストから直接実行します(サブエージェントは使いません)。このプラグインは 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-skills marketplace から)。プラグイン依存として宣言されているため、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 obsidian CLI, run directly in the main context (no sub-agent). This plugin does not duplicate CLI syntax; it defers to the official obsidian:obsidian-cli skill and obsidian 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:init the plugin copies starter files from templates/ only if the same name doesn't already exist — it never overwrites your edits.
  • Dashboards are Obsidian Bases (.base files — 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 obsidian plugin (from the obsidian-skills marketplace) — 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-cli installed and enabled. The plugin's name is obsidian-cli but the executable it installs is obsidian (invoked as obsidian vault=<name> ...). This is not the unrelated standalone obsidian-cli binary by Yakitrak.
  • Templates core plugin enabled (required for /obw:pm — task / doc templates)
  • Daily Notes core plugin enabled (required for /obw:jot quick capture)
  • Bases core plugin enabled (required only for /obw:pm dashboards — bundled in Obsidian 1.9+)
  • uv (optional; lets the /issue pane draw Mermaid blocks as text diagrams through uvx [email protected] — without it they show as code blocks)
  • viz plugin (optional; enables the /issue pane's Open in browser Button — without it the Button is not drawn)
  • Claude Code 2.1.287 or later (required only for the /issue pane; 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

関連作品