ClaudeMods
☰
KO
● 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> | 빠른 캡처(타임스탬프가 붙은 글머리 기호를 오늘의 daily note에 추가)또는 긴 노트——입력 형태에 따라 분류 | | /obw:pm [intent] | 프로젝트 단위 작업 / 문서 수명 주기; 사양을 차단 티켓으로 분할 |

작동 방식

  • Vault I/O는 obsidian CLI를 통해 메인 컨텍스트에서 직접 실행합니다(서브에이전트 없음)。이 플러그인은 CLI 문법을 복제하지 않고 공식 obsidian:obsidian-cli 스킬과 obsidian help에 맡깁니다.
  • Daily notes는 Obsidian의 Daily Notes 코어 플러그인(폴더 / 파일 이름 / 템플릿)을 사용합니다. 빠른 캡처는 daily:append를 호출합니다.
  • 템플릿(task、doc)은 vault의 Obsidian Templates 폴더에 있습니다. /obw:init에서 플러그인은 같은 이름의 파일이 아직 없을 때만 templates/에서 시작 파일을 복사하며 편집 내용을 덮어쓰지 않습니다.
  • Dashboard는 Obsidian Bases(.base 파일——Obsidian 1.9+의 코어 기능)입니다. 플러그인 내부 템플릿에서 셸 치환으로 생성하므로 내용이 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는 선택 사항입니다. 없으면 블록은 카드 안의 코드 블록으로 남습니다. 다이어그램 유형이 지원되지 않거나 %% 주석 또는 --- 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 도우미를 셸에서 호출합니다. 반복되는 권한 프롬프트를 피하려면 사용자 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

Daily note 폴더 / 파일 이름 / 템플릿은 .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

비슷한 프로젝트