Skip to content

feat(obsidian): add obsidian:cli skill - #586

Merged
baleen37 merged 3 commits into
mainfrom
feat/obsidian-cli-skill
Mar 30, 2026
Merged

feat(obsidian): add obsidian:cli skill#586
baleen37 merged 3 commits into
mainfrom
feat/obsidian-cli-skill

Conversation

@baleen37

@baleen37 baleen37 commented Mar 29, 2026

Copy link
Copy Markdown
Owner

Summary

Adds obsidian:cli skill that guides Claude to use the official Obsidian CLI instead of directly reading vault files.

Changes

  • plugins/obsidian/skills/cli/SKILL.md — new skill for Obsidian vault interaction via CLI

Tests

  • Verified obsidian help works with Obsidian app running
  • Tested baseline (no skill) vs. with skill: without skill Claude reads files directly; with skill Claude uses obsidian CLI commands

Summary by CodeRabbit

  • Documentation
    • Added Obsidian CLI skill docs with setup, workflow, and usage tips for vault operations.
    • Added a new Jira daily-standup skill doc describing queries, report template, and edge-case behavior.
    • Revised the Jira spec-to-backlog skill doc to accept general spec input and updated templates and edge-case guidance.
  • New Features
    • Published a new Obsidian plugin entry (marketplace metadata and package metadata) for vault/CLI integration.

Adds a new skill for interacting with the Obsidian vault via the official
Obsidian CLI. The skill guides Claude to use `obsidian` CLI commands instead
of directly accessing vault files.
@baleen37
baleen37 enabled auto-merge (squash) March 29, 2026 23:53
@coderabbitai

coderabbitai Bot commented Mar 29, 2026

Copy link
Copy Markdown
📝 Walkthrough

Walkthrough

Added Obsidian plugin metadata and a new CLI skill doc; added an Obsidian entry to the marketplace; added a Jira daily-standup skill doc; and revised the Jira spec-to-backlog skill documentation.

Changes

Cohort / File(s) Summary
Obsidian plugin & marketplace
plugins/obsidian/.claude-plugin/plugin.json, .claude-plugin/marketplace.json
Added Obsidian plugin metadata (plugin.json) and a new obsidian entry in the marketplace JSON (description, source path, category, tags, version).
Obsidian CLI Skill Documentation
plugins/obsidian/skills/cli/SKILL.md
New skill doc defining a cli skill for operating an Obsidian vault via the obsidian CLI: frontmatter, prerequisites, four-step workflow, usage tips (fuzzy matching, vault=<name>, format=json, CLI help reference).
Jira skills — new
plugins/jira/skills/daily-standup/SKILL.md
Added daily-standup skill doc: multi-step workflow with three JQL queries, field selections, backlog selection flow, follow-up prompts, fixed report template, and edge-case behaviors.
Jira skills — updated
plugins/jira/skills/spec-to-backlog/SKILL.md
Rewrote spec-to-backlog workflow to accept spec content from conversation or files (removed Confluence-specific fetch steps), updated templates and edge-case guidance, and adjusted descriptions/overview.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

🐇 I hop through vaults with a CLI song,
Opening notes and appending along.
New docs and plugins — I nudge the way,
Vaults, standups, specs — let's flourish today! ✨

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat(obsidian): add obsidian:cli skill' accurately reflects the main change: introducing a new Obsidian CLI skill for interacting with Obsidian vaults, which is supported by the new SKILL.md file and plugin registration changes.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/obsidian-cli-skill

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

- Add daily-standup skill: fetches assignee's Jira issues and formats
  into standup template (어제 한 일 / 오늘 할 일 / blocker / insight)
- Remove Confluence dependency from spec-to-backlog: accepts any input
  source (markdown, free text, conversation context)

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
plugins/obsidian/skills/cli/SKILL.md (1)

10-17: Add explicit fallback when prerequisites are missing.

Consider adding one line to the workflow telling the model to report actionable remediation (start Obsidian, enable CLI, verify obsidian help) before attempting commands.

Proposed doc tweak
 ## Workflow
 
 1. **Understand** what the user wants to do
+2. **Check prerequisites**: if Obsidian/CLI is unavailable, tell the user exactly how to enable it
-2. **Look up** the right command if unsure: `obsidian help <command>`
-3. **Execute** with the Bash tool
-4. **Present** results clearly — don't just dump raw output
+3. **Look up** the right command if unsure: `obsidian help <command>`
+4. **Execute** with the Bash tool
+5. **Present** results clearly — don't just dump raw output
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@plugins/obsidian/skills/cli/SKILL.md` around lines 10 - 17, Update the
Workflow section in SKILL.md to add an explicit fallback step before executing
commands: detect missing prerequisites (Obsidian not running or `obsidian` CLI
not on PATH) and instruct the model to report actionable remediation (how to
start Obsidian, enable CLI in Obsidian Settings → CLI, and verify with `obsidian
help`) before attempting to "Execute with the Bash tool"; place this as a new
step between "Look up" and "Execute" so functions like the guidance for "Execute
with the Bash tool" and "Present results" only run when prerequisites are
satisfied.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@plugins/obsidian/skills/cli/SKILL.md`:
- Around line 10-17: Update the Workflow section in SKILL.md to add an explicit
fallback step before executing commands: detect missing prerequisites (Obsidian
not running or `obsidian` CLI not on PATH) and instruct the model to report
actionable remediation (how to start Obsidian, enable CLI in Obsidian Settings →
CLI, and verify with `obsidian help`) before attempting to "Execute with the
Bash tool"; place this as a new step between "Look up" and "Execute" so
functions like the guidance for "Execute with the Bash tool" and "Present
results" only run when prerequisites are satisfied.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 20d5bcdc-b464-4158-a074-8dc543ef1374

📥 Commits

Reviewing files that changed from the base of the PR and between 0b727df and 0e0a125.

📒 Files selected for processing (1)
  • plugins/obsidian/skills/cli/SKILL.md

auto-merge was automatically disabled March 29, 2026 23:57

Repository rule violations found

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (1)
plugins/jira/skills/spec-to-backlog/SKILL.md (1)

41-44: Add guardrails before reading arbitrary file paths.

This step should constrain file type/size (or ask user confirmation) before reading, to avoid token blowups and accidental non-text reads.

Suggested wording update
 ### If the user referenced a file path
 
-Read the file directly if it is accessible. For a local markdown file, read its contents and
-proceed to Step 3.
+If the file is accessible, first validate it is a text/markdown file and reasonably sized.
+If it is very large or non-text, ask the user to narrow the scope or provide excerpts.
+Then read contents and proceed to Step 3.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@plugins/jira/skills/spec-to-backlog/SKILL.md` around lines 41 - 44, Update
the "If the user referenced a file path" step so the skill applies guardrails
before reading any file: validate the file extension against a whitelist of text
types (e.g., .md, .txt, .json), check file size and refuse or ask for explicit
user confirmation if the file exceeds a safe token/byte threshold, and skip
non-text/binary files; change the sentence "Read the file directly..." in
SKILL.md to first perform these checks and prompt the user when needed, then
proceed to "read its contents and proceed to Step 3" only after
validation/confirmation.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@plugins/jira/skills/daily-standup/SKILL.md`:
- Around line 56-110: Multiple fenced code blocks in SKILL.md lack language
identifiers (triggering markdownlint MD040); update every triple-backtick block
(notably the block containing "참고용 Backlog (최근 업데이트 순): ...", the Step 3 prompt
starting with "도움(Risk/Blocker)이 필요한 사항이 있나요?", and the final report template
beginning "어제 한 업무는 무엇인가요?") by adding a language tag such as text (e.g., change
``` to ```text) so all fenced code blocks include a language identifier and the
linter warning is resolved.
- Around line 114-115: Remove the inline code spans that contain
leading/trailing spaces (the span showing two spaces then a hyphen and the span
showing hyphen then space) to satisfy markdownlint MD038; instead, reword those
examples in plain text describing the indentation (e.g., "two spaces before a
hyphen for a nested list item" and "a hyphen followed by a space for a top-level
item") or use a fenced code block if showing literal whitespace is necessary,
and update the SKILL.md list descriptions accordingly.
- Around line 97-99: The "오늘 할 일" template's example mixes a top-level and a
nested bullet (shown as "- [ISSUE-KEY] [summary]" followed by "  - [ISSUE-KEY]
[summary]"), causing one parent with one child; make all items peers by using
the same bullet depth for every line (i.e., remove the extra two-space indent so
every item is "- [ISSUE-KEY] [summary]") in the SKILL.md template example.
- Around line 28-44: Replace hardcoded status names in the three JQL queries
(Query A, Query B, Query C) with Jira universal statusCategory checks so the
queries work across workflows: in Query A replace status IN ("In Progress",
"Done") with statusCategory IN ("In Progress","Done"); in Query B replace status
= "In Progress" with statusCategory = "In Progress"; in Query C replace status =
"Backlog" with statusCategory = "To Do"; keep the rest of each JQL
(assignee/currentUser(), updated filters, ORDER BY) unchanged.

---

Nitpick comments:
In `@plugins/jira/skills/spec-to-backlog/SKILL.md`:
- Around line 41-44: Update the "If the user referenced a file path" step so the
skill applies guardrails before reading any file: validate the file extension
against a whitelist of text types (e.g., .md, .txt, .json), check file size and
refuse or ask for explicit user confirmation if the file exceeds a safe
token/byte threshold, and skip non-text/binary files; change the sentence "Read
the file directly..." in SKILL.md to first perform these checks and prompt the
user when needed, then proceed to "read its contents and proceed to Step 3" only
after validation/confirmation.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: a55f9e59-45c4-4120-b6ca-32ee68f8a701

📥 Commits

Reviewing files that changed from the base of the PR and between 0e0a125 and 6487c67.

📒 Files selected for processing (4)
  • .claude-plugin/marketplace.json
  • plugins/jira/skills/daily-standup/SKILL.md
  • plugins/jira/skills/spec-to-backlog/SKILL.md
  • plugins/obsidian/.claude-plugin/plugin.json
✅ Files skipped from review due to trivial changes (2)
  • plugins/obsidian/.claude-plugin/plugin.json
  • .claude-plugin/marketplace.json

Comment on lines +28 to +44
**Query A — 어제 한 일** (assignee, recently updated, active statuses):

```jql
assignee = currentUser() AND status IN ("In Progress", "Done") AND updated >= -1d ORDER BY updated DESC
```

**Query B — 오늘 할 일** (currently in progress):

```jql
assignee = currentUser() AND status = "In Progress" ORDER BY updated DESC
```

**Query C — 참고용 Backlog** (upcoming work, top 10):

```jql
assignee = currentUser() AND status = "Backlog" ORDER BY updated DESC
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🌐 Web query:

Jira JQL statusCategory vs status field hardcoded names

💡 Result:

In Jira JQL, the status field and statusCategory field differ significantly in their values and usage. statusCategory uses fixed, hardcoded category names that are consistent across all Jira instances and projects: "To Do", "In Progress", and "Done". These are case-sensitive and represent broad groupings of statuses (e.g., statusCategory = Done matches any status categorized as Done, like "Closed", "Resolved", etc.). This makes it reliable for cross-project queries without needing to know specific status names. The status field uses specific, customizable status names defined in workflows (e.g., "Open", "In Progress", "Done") or their numeric IDs (e.g., 10001). Status names vary by project/workflow and can change, so queries using names like status = "Done" may fail across projects or after renaming. Official docs note that operators like WAS, CHANGED match both historical names and associated IDs for resilience. In team-managed projects, using status IDs instead of names is often required for historical queries (e.g., status WAS 10103) due to bugs with names. Use statusCategory for portable, category-based searches; use status (preferably IDs for reliability) when targeting exact statuses.

Citations:


🌐 Web query:

Jira JQL status categories list standard available

💡 Result:

The standard available Jira status categories for use in JQL are "To Do", "In Progress", and "Done". These are the three fixed categories that all statuses belong to, as seen in the admin ViewStatuses.jspa page and used in queries like statusCategory in ("To Do", "In Progress"). They are represented by grey (To Do), blue (In Progress), and green (Done) colors. You cannot create new categories. Use in JQL: statusCategory = "To Do" or statusCategory in ("To Do", "Done").

Citations:


🌐 Web query:

Jira JQL statusCategory "In Progress" "Done" "To Do" documentation

💡 Result:

In Jira JQL, statusCategory is a field that groups statuses into three categories: "To Do" (grey), "In Progress" (blue), and "Done" (green). These categories are assigned when admins configure statuses in workflows. Syntax: statusCategory [operator] ("category") Supported operators: =, !=, IN, NOT IN Examples: - statusCategory = "To Do" - statusCategory IN ("To Do", "In Progress") - statusCategory != "Done" AND project = ABC Note: Values are case-sensitive ("To Do", not "todo"). This is more reliable than querying individual statuses, as it covers all statuses in a category regardless of custom names. Related function: statusCategoryChangedDate for timeline-based queries, e.g., statusCategoryChangedDate <= -7d.

Citations:


Use statusCategory instead of hardcoded status names in JQL—this ensures portability across Jira workflows.

Status names like "Backlog", "In Progress", and "Done" are project/workflow-specific and will fail when statuses are renamed or when queries run against other projects. Jira provides three universal status categories: "To Do", "In Progress", and "Done". Use statusCategory instead of status to avoid empty or incorrect results.

Recommended fix
-assignee = currentUser() AND status IN ("In Progress", "Done") AND updated >= -1d ORDER BY updated DESC
+assignee = currentUser() AND statusCategory IN ("In Progress", "Done") AND updated >= -1d ORDER BY updated DESC

-assignee = currentUser() AND status = "In Progress" ORDER BY updated DESC
+assignee = currentUser() AND statusCategory = "In Progress" ORDER BY updated DESC

-assignee = currentUser() AND status = "Backlog" ORDER BY updated DESC
+assignee = currentUser() AND statusCategory = "To Do" ORDER BY updated DESC
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
**Query A — 어제 한 일** (assignee, recently updated, active statuses):
```jql
assignee = currentUser() AND status IN ("In Progress", "Done") AND updated >= -1d ORDER BY updated DESC
```
**Query B — 오늘 할 일** (currently in progress):
```jql
assignee = currentUser() AND status = "In Progress" ORDER BY updated DESC
```
**Query C — 참고용 Backlog** (upcoming work, top 10):
```jql
assignee = currentUser() AND status = "Backlog" ORDER BY updated DESC
```
**Query A — 어제 한 일** (assignee, recently updated, active statuses):
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@plugins/jira/skills/daily-standup/SKILL.md` around lines 28 - 44, Replace
hardcoded status names in the three JQL queries (Query A, Query B, Query C) with
Jira universal statusCategory checks so the queries work across workflows: in
Query A replace status IN ("In Progress", "Done") with statusCategory IN ("In
Progress","Done"); in Query B replace status = "In Progress" with statusCategory
= "In Progress"; in Query C replace status = "Backlog" with statusCategory = "To
Do"; keep the rest of each JQL (assignee/currentUser(), updated filters, ORDER
BY) unchanged.

Comment on lines +56 to +110
```
참고용 Backlog (최근 업데이트 순):
1. SEARCH-12563 Slow path signal 증분 처리 구조 전환
2. SEARCH-12255 기등록된 검매핑에 대해 모델 파라미터로 상쇄 처리 기능 필요
...

오늘 할 일에 추가할 항목이 있나요? (번호로 답하거나 없으면 엔터)
```

Wait for user response. Add selected items to the "오늘 할 일" list.

---

### Step 3: Ask for Blocker and Insight

Ask in a single message:

```
도움(Risk/Blocker)이 필요한 사항이 있나요?
공유하고 싶은 인사이트가 있나요?
(없으면 엔터)
```

Wait for user response.

---

### Step 4: Output the Standup Report

Format and print the final report using this exact template:

```
어제 한 업무는 무엇인가요?
어제 한 업무
- [ISSUE-KEY] [summary]
- [ISSUE-KEY] [summary]




오늘 할 일을 적어보아요
- [ISSUE-KEY] [summary]
- [ISSUE-KEY] [summary]




도움(Risk/Blocker)이 필요해요.
[blocker content, or blank]



공유하고 싶은 인사이트를 적어봐요.
[insight content, or blank]
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Add language identifiers to fenced code blocks (markdownlint MD040).

Several fenced blocks omit a language tag, and lint is already flagging this.

Example fix
-```
+```text
 참고용 Backlog (최근 업데이트 순):
 ...
-```
+```

Also applies to: 127-139

🧰 Tools
🪛 markdownlint-cli2 (0.22.0)

[warning] 56-56: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


[warning] 73-73: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


[warning] 87-87: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@plugins/jira/skills/daily-standup/SKILL.md` around lines 56 - 110, Multiple
fenced code blocks in SKILL.md lack language identifiers (triggering
markdownlint MD040); update every triple-backtick block (notably the block
containing "참고용 Backlog (최근 업데이트 순): ...", the Step 3 prompt starting with
"도움(Risk/Blocker)이 필요한 사항이 있나요?", and the final report template beginning "어제 한
업무는 무엇인가요?") by adding a language tag such as text (e.g., change ``` to ```text)
so all fenced code blocks include a language identifier and the linter warning
is resolved.

Comment on lines +97 to +99
- [ISSUE-KEY] [summary]
- [ISSUE-KEY] [summary]

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix list hierarchy in “오늘 할 일” template.

The current example mixes top-level and nested bullets, which renders as one parent item with one child. If all items should be peers, use the same bullet depth.

Template adjustment
-- [ISSUE-KEY] [summary]
-  - [ISSUE-KEY] [summary]
+- [ISSUE-KEY] [summary]
+- [ISSUE-KEY] [summary]
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- [ISSUE-KEY] [summary]
- [ISSUE-KEY] [summary]
- [ISSUE-KEY] [summary]
- [ISSUE-KEY] [summary]
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@plugins/jira/skills/daily-standup/SKILL.md` around lines 97 - 99, The "오늘 할
일" template's example mixes a top-level and a nested bullet (shown as "-
[ISSUE-KEY] [summary]" followed by "  - [ISSUE-KEY] [summary]"), causing one
parent with one child; make all items peers by using the same bullet depth for
every line (i.e., remove the extra two-space indent so every item is "-
[ISSUE-KEY] [summary]") in the SKILL.md template example.

Comment on lines +114 to +115
- 어제 한 일: Query A 결과. 들여쓰기 두 칸(` - `).
- 오늘 할 일: Query B 결과 + 사용자가 추가한 Backlog 항목. 첫 번째 레벨(`- `), 하위 항목은 들여쓰기(` - `).

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Remove spaces inside inline code spans (markdownlint MD038).

Inline code like ` - ` and `- ` triggers lint warnings; describe indentation in text instead.

🧰 Tools
🪛 markdownlint-cli2 (0.22.0)

[warning] 114-114: Spaces inside code span elements

(MD038, no-space-in-code)


[warning] 115-115: Spaces inside code span elements

(MD038, no-space-in-code)


[warning] 115-115: Spaces inside code span elements

(MD038, no-space-in-code)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@plugins/jira/skills/daily-standup/SKILL.md` around lines 114 - 115, Remove
the inline code spans that contain leading/trailing spaces (the span showing two
spaces then a hyphen and the span showing hyphen then space) to satisfy
markdownlint MD038; instead, reword those examples in plain text describing the
indentation (e.g., "two spaces before a hyphen for a nested list item" and "a
hyphen followed by a space for a top-level item") or use a fenced code block if
showing literal whitespace is necessary, and update the SKILL.md list
descriptions accordingly.

@baleen37
baleen37 merged commit 71b786a into main Mar 30, 2026
5 checks passed
@baleen37
baleen37 deleted the feat/obsidian-cli-skill branch March 30, 2026 00:08
baleen-release-app Bot pushed a commit that referenced this pull request Mar 30, 2026
# [16.3.0](v16.2.1...v16.3.0) (2026-03-30)

### Features

* **obsidian:** add obsidian:cli skill ([#586](#586)) ([71b786a](71b786a))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant