type: user

role: user

content: can we setup a skill that will use the obsidian MCP to write context and read context?

permissionMode: default

userType: external

entrypoint: cli

gitBranch: ruth-plugin


addedBlocks:
## claude.ai Context7
Use this server to fetch current documentation whenever the user asks about a library, framework, SDK, API, CLI tool, or cloud service -- even well-known ones like React, Next.js, Prisma, Express, Tailwind, Django, or Spring Boot. This includes API syntax, configuration, version migration, library-specific debugging, setup instructions, and CLI tool usage. Use even when you think you know the answer -- your training data may not reflect recent changes. Prefer this over web search for library docs.

Do not use for: refactoring, writing scripts from scratch, debugging business logic, code review, or general programming concepts.

type: attachment


content:
- update-config: Use this skill to configure the Claude Code harness via settings.json. Automated behaviors ("from now on when X", "each time X", "whenever X", "before/after X") require hooks configured in settings.json - the harness executes these, not Claude, so memory/preferences cannot fulfill them. Also use for: permissions ("allow X", "add permission", "move permission to"), env vars ("set X=Y"), hook troubleshooting, or any changes to settings.json/settings.local.json files. Examples: "allow npm commands", "add bq permission to global settings", "move permission to user settings", "set DEBUG=true", "when claude stops show X". For simple settings like theme/model, suggest the /config command.
- keybindings-help: Use when the user wants to customize keyboard shortcuts, rebind keys, add chord bindings, or modify ~/.claude/keybindings.json. Examples: "rebind ctrl+s", "add a chord shortcut", "change the submit key", "customize keybindings".
- simplify: Review changed code for reuse, quality, and efficiency, then fix any issues found.
- fewer-permission-prompts: Scan your transcripts for common read-only Bash and MCP tool calls, then add a prioritized allowlist to project .claude/settings.json to reduce permission prompts.
- loop: Run a prompt or slash command on a recurring interval (e.g. /loop 5m /foo). Omit the interval to let the model self-pace. - When the user wants to set up a recurring task, poll for status, or run something repeatedly on an interval (e.g. "check the deploy every 5 minutes", "keep running /babysit-prs"). Do NOT invoke for one-off tasks.
- schedule: Create, update, list, or run scheduled remote agents (routines) that execute on a cron schedule. - When the user wants to schedule a recurring or one-time remote agent ("run this every Monday", "open a cleanup PR for X in 2 weeks"), or to manage existing routines. ALSO OFFER PROACTIVELY: after you finish work that has a natural future follow-up, end your reply with a one-line offer to schedule a background agent to do it. Strong signals: a feature flag / gate / experiment / staged rollout was just shipped (offer a one-time agent in ~2 weeks to open a cleanup PR or evaluate results), a new alert/monitor was created (offer a recurring agent to triage it), a TODO/migration with a "remove once X" condition was left behind (offer a one-time agent to do the removal). Skip the offer for refactors, bug fixes, and anything that is done once it ships. Name a concrete action and cadence ("in 2 weeks", "every Monday") and only offer when the run just succeeded — do not pitch a schedule for something that has not happened yet.
- claude-api: Build, debug, and optimize Claude API / Anthropic SDK apps. Apps built with this skill should include prompt caching. Also handles migrating existing Claude API code between Claude model versions (4.5 → 4.6, 4.6 → 4.7, retired-model replacements).
TRIGGER when: code imports `anthropic`/`@anthropic-ai/sdk`; user asks for the Claude API, Anthropic SDK, or Managed Agents; user adds/modifies/tunes a Claude feature (caching, thinking, compaction, tool use, batch, files, citations, memory) or model (Opus/Sonnet/Haiku) in a file; questions about prompt caching / cache hit rate in an Anthropic SDK project.
SKIP: file imports `openai`/other-provider SDK, filename like `*-openai.py`/`*-generic.py`, provider-neutral code, general programming/ML.
- init: Initialize a new CLAUDE.md file with codebase documentation
- review: Review a pull request
- security-review: Complete a security review of the pending changes on the current branch


type: ai-title

aiTitle: Create Obsidian MCP skill for context management


type: message

role: assistant

type: thinking

service_tier: standard

speed: standard

type: assistant


type: text

text: Let me check your existing skills setup before we design this.


Bash

command: ls ~/.claude/commands/ 2>/dev/null && echo "---" && ls /Users/steve.briggs/projects/operations/.claude/commands/ 2>/dev/null || echo "no local commands"

description: List existing global and local skill commands

type: direct


ToolSearch

query: select:mcp__obsidian__get_vault_file,mcp__obsidian__create_vault_file,mcp__obsidian__search_vault,mcp__obsidian__list_vault_files,mcp__obsidian__get_active_file


query: select:mcp__obsidian__get_vault_file,mcp__obsidian__create_vault_file,mcp__obsidian__search_vault,mcp__obsidian__list_vault_files,mcp__obsidian__get_active_file


content: no local commands

stdout: no local commands


type: system

command: afplay ~/.claude/sounds/wc3/complete.mp3 2>/dev/null || true

level: suggestion


text:
A couple of design questions before I build this, Sir Charles of St Cheese:

1. **What kind of context?** Conversation summaries, project notes, task state, all of the above?
2. **Where in your vault?** Should I default to a `Claude/` directory, or do you have an existing structure I should slot into?
3. **One skill or two?** I'm thinking `/obsidian-save` (write context) and `/obsidian-load` (read context) as separate commands — or would you prefer a single `/obsidian-context save|load`?

My default proposal: two commands, both scoped to a `Claude/<project-name>/` folder in your vault — `/obsidian-save` summarizes the current conversation and writes a dated note, `/obsidian-load` searches that folder and pulls relevant notes into context. Does that match what you had in mind?


content: all of the above, lets add them to a dedicated Claude/ directory in the vault and lets do two skills


text: Let me check the commands directory and then build both skills.


Bash

command: ls -la ~/.claude/commands/ 2>/dev/null || echo "directory does not exist"

description: Check if commands directory exists


content: directory does not exist

stdout: directory does not exist


type: last-prompt

lastPrompt: all of the above, lets add them to a dedicated Claude/ directory in the vault and lets do two skills


description: Create commands directory


content: (Bash completed with no output)


Write

content:
Save current conversation context to an Obsidian note under the `Claude/` directory.

## What to save

Capture all of the following that are relevant to the current conversation:

- **Conversation summary**: What the user is trying to accomplish and why
- **Project context**: Relevant architecture, design decisions, or constraints discovered
- **Task state**: What has been completed, what is in progress, what is blocked or pending
- **Key decisions**: Any choices made and the reasoning behind them
- **Open questions**: Unresolved questions or things to revisit
- **Next steps**: Concrete actions that should follow from this session

## File location

Derive the project name from the current working directory (use the repo or app folder name). Save to:

```
Claude/<project-name>/<YYYY-MM-DD>-<short-slug>.md
```

Use today's date and a short 2-4 word slug describing the session topic (e.g. `2026-04-29-ruth-plugin-setup.md`).

If `$ARGUMENTS` is provided, use it as the slug instead of generating one.

## Note format

Use this structure:

```markdown
---
date: <YYYY-MM-DD>
project: <project-name>
tags: [claude-context]
---

# <Session Title>

## Summary
<1-3 sentence overview of what this session was about>

## Context
<Relevant project background, architecture notes, constraints>

## Decisions
<Decisions made and rationale>

## Task State
<What was completed, in progress, or blocked>

## Open Questions
<Anything unresolved>

## Next Steps
<Concrete follow-up actions>
```

## Steps

1. Determine the project name from the working directory.
2. Determine today's date.
3. Draft the note content based on the current conversation.
4. Use `mcp__obsidian__create_vault_file` to write the note to the vault.
5. Confirm to the user where the note was saved.


content:
Load context from Obsidian notes in the `Claude/` directory into the current conversation.

## Behavior

1. Derive the project name from the current working directory (use the repo or app folder name).
2. List files in `Claude/<project-name>/` using `mcp__obsidian__list_vault_files`.
3. If `$ARGUMENTS` is provided, treat it as a search query and use `mcp__obsidian__search_vault_smart` to find relevant notes across the entire `Claude/` directory instead of listing by project.
4. Read the most relevant notes:
   - Without args: read the 3 most recent notes for the current project (by filename date prefix).
   - With args: read the top 3 search results.
   - Use `mcp__obsidian__get_vault_file` to fetch each note's content.
5. Synthesize what you loaded into a brief summary for the user, covering:
   - What sessions were found and when they occurred
   - Key decisions or context that is now loaded
   - Any open questions or next steps from prior sessions that are still relevant
6. Explicitly tell the user: "I've loaded this context and will use it going forward in this conversation."

## Notes

- If no notes exist for the current project yet, say so and suggest running `/obsidian-save` at the end of a session.
- Do not dump raw note content at the user — synthesize and summarize it.
- If notes contain contradictory information, flag it and ask which is current.


content: File created successfully at: /Users/steve.briggs/.claude/commands/obsidian-save.md

type: create

content:
Save current conversation context to an Obsidian note under the `Claude/` directory.

## What to save

Capture all of the following that are relevant to the current conversation:

- **Conversation summary**: What the user is trying to accomplish and why
- **Project context**: Relevant architecture, design decisions, or constraints discovered
- **Task state**: What has been completed, what is in progress, what is blocked or pending
- **Key decisions**: Any choices made and the reasoning behind them
- **Open questions**: Unresolved questions or things to revisit
- **Next steps**: Concrete actions that should follow from this session

## File location

Derive the project name from the current working directory (use the repo or app folder name). Save to:

```
Claude/<project-name>/<YYYY-MM-DD>-<short-slug>.md
```

Use today's date and a short 2-4 word slug describing the session topic (e.g. `2026-04-29-ruth-plugin-setup.md`).

If `$ARGUMENTS` is provided, use it as the slug instead of generating one.

## Note format

Use this structure:

```markdown
---
date: <YYYY-MM-DD>
project: <project-name>
tags: [claude-context]
---

# <Session Title>

## Summary
<1-3 sentence overview of what this session was about>

## Context
<Relevant project background, architecture notes, constraints>

## Decisions
<Decisions made and rationale>

## Task State
<What was completed, in progress, or blocked>

## Open Questions
<Anything unresolved>

## Next Steps
<Concrete follow-up actions>
```

## Steps

1. Determine the project name from the working directory.
2. Determine today's date.
3. Draft the note content based on the current conversation.
4. Use `mcp__obsidian__create_vault_file` to write the note to the vault.
5. Confirm to the user where the note was saved.


content: File created successfully at: /Users/steve.briggs/.claude/commands/obsidian-load.md

content:
Load context from Obsidian notes in the `Claude/` directory into the current conversation.

## Behavior

1. Derive the project name from the current working directory (use the repo or app folder name).
2. List files in `Claude/<project-name>/` using `mcp__obsidian__list_vault_files`.
3. If `$ARGUMENTS` is provided, treat it as a search query and use `mcp__obsidian__search_vault_smart` to find relevant notes across the entire `Claude/` directory instead of listing by project.
4. Read the most relevant notes:
   - Without args: read the 3 most recent notes for the current project (by filename date prefix).
   - With args: read the top 3 search results.
   - Use `mcp__obsidian__get_vault_file` to fetch each note's content.
5. Synthesize what you loaded into a brief summary for the user, covering:
   - What sessions were found and when they occurred
   - Key decisions or context that is now loaded
   - Any open questions or next steps from prior sessions that are still relevant
6. Explicitly tell the user: "I've loaded this context and will use it going forward in this conversation."

## Notes

- If no notes exist for the current project yet, say so and suggest running `/obsidian-save` at the end of a session.
- Do not dump raw note content at the user — synthesize and summarize it.
- If notes contain contradictory information, flag it and ask which is current.


text:
Both skills are created at `~/.claude/commands/` (global, available in all projects):

**`/obsidian-save [optional-slug]`**
Summarizes the current session — conversation context, decisions, task state, open questions, next steps — and writes a dated note to `Claude/<project-name>/YYYY-MM-DD-<slug>.md`. Pass a slug to name it yourself, otherwise it generates one.

**`/obsidian-load [optional-search-query]`**
Lists the `Claude/<project-name>/` folder and reads the 3 most recent notes, then synthesizes what's loaded into a summary. Pass a search term to search across all `Claude/` notes instead.

Both will automatically derive the project name from wherever you're working. Try `/obsidian-save` at the end of this session to kick things off.


content: <local-command-caveat>Caveat: The messages below were generated by the user while running local commands. DO NOT respond to these messages or otherwise consider them in your response unless the user explicitly asks you to.</local-command-caveat>


content:
<command-name>/exit</command-name>
            <command-message>exit</command-message>
            <command-args></command-args>


content: <local-command-stdout>Catch you later!</local-command-stdout>