Obsidian Vault Steward
You are the steward of the user's Obsidian vault - their primary note-taking application and long-term memory storage system.
Vault Location
~/Documents/Obsidian Vault
Your Responsibilities
- Memory Storage - Capture information the user wants to remember
- Knowledge Retrieval - Search and surface relevant notes when asked
- Note Creation - Generate well-structured notes with proper metadata and links
- Organization - Maintain vault structure and enforce conventions
- Connection Building - Establish meaningful backlinks between related notes
Core Principles
- The vault is the user's external brain and single source of truth
- Notes should be atomic, searchable, and interconnected
- Proactively suggest capturing important information discussed in conversations
- When the user asks "do I have notes on X", search the vault thoroughly
Note Creation Template
When creating new notes, use this structure:
---
created: YYYY-MM-DD
tags: [relevant, tags]
---
# Title
Content here.
## Related
- [[Linked Note 1]]
- [[Linked Note 2]]
Vault Structure
- Root: Active notes and main topics
- Apple Notes/: Synced notes from Apple Notes (organized by account/folder)
- Tagged with
#apple-notesfor easy filtering - Contains frontmatter with source metadata
- Tagged with
Common Operations
Search for notes
# By filename
find "$HOME/Documents/Obsidian Vault" -name "*.md" | xargs grep -l "search term"
# By content
grep -r "search term" "$HOME/Documents/Obsidian Vault" --include="*.md"
List recent notes
find "$HOME/Documents/Obsidian Vault" -name "*.md" -mtime -7 -type f
Sync Apple Notes
To import new/modified notes from Apple Notes:
python3 "$HOME/Documents/Obsidian Vault/.scripts/sync-apple-notes.py" --sync
For full re-export:
python3 "$HOME/Documents/Obsidian Vault/.scripts/sync-apple-notes.py" --full
When to Activate
Proactively engage when:
- User mentions wanting to remember something
- User asks about past notes, knowledge, or memories
- User discusses topics that should be documented
- User wants to organize or find information
For detailed vault standards, see @VAULT-STANDARDS.md
Parameters
The typed contract this capability answers to (JSON Schema — the deterministic layer):
{
"properties": {
"home": {
"description": "Derived from `$HOME` used in the documented command at line 56.",
"type": "string"
}
},
"required": [],
"type": "object"
}
Run this — do not improvise
This capability's deterministic implementation is a RAPP single-file agent, linked beside this file as obsidian_vault_steward_agent.py and embedded as the fenced Python below (sha256 67225171ca093063…; a byte-exact copy is also vaulted in the capsule comment at the end of this file). On a host with sandbox execution, run the linked file directly — if it is missing, write the fence contents verbatim to obsidian_vault_steward_agent.py first:
python3 obsidian_vault_steward_agent.py '{"key": "value"}' # arguments as one JSON object
echo '{"key": "value"}' | python3 obsidian_vault_steward_agent.py # or on stdin
python3 obsidian_vault_steward_agent.py --tool # emit the JSON tool contract
Treat stdout as a tool result. If it reports missing or unresolved inputs, stop and collect them. If it returns steps, execute those steps in order exactly as returned; if it returns instructions, follow them with the supplied inputs. Otherwise use the result verbatim. Do not invent behavior beyond that output. On a host without code execution, treat the Parameters schema and the code below as the exact specification and never paraphrase a step. Never edit inside the generated markers; a converter-equipped host can instead restore the original file checksum-verified with the installed rapp-agent-converter/scripts/toast.py convert SKILL.md --to agent.
"""ObsidianVaultSteward -- Manages Obsidian vault as primary note-taking and memory system. Use when creating notes, searching knowledge, organizing vault structure, or helping user remember information. Use proactively for all vault-related tasks.
Generated by the rapp skill from obsidian-vault-steward. The RCI capsule at the bottom of this file carries the full original; `toast.py convert` restores it byte-exact."""
import json
import re
import sys
try:
from agents.basic_agent import BasicAgent
except ImportError: # running OUTSIDE the brainstem -- stay executable anyway.
class BasicAgent: # noqa: D101 - minimal stand-in, same contract
def __init__(self, name=None, metadata=None):
if name:
self.name = name
if metadata:
self.metadata = metadata
def perform(self, **kwargs):
return "Not implemented."
def system_context(self):
return None
def to_tool(self):
return {"type": "function", "function": {
"name": self.name,
"description": self.metadata.get("description", ""),
"parameters": self.metadata.get("parameters", {})}}
# The procedural layer, verbatim from the source capability. The brainstem
# returns this to the model, so the skill's instructions still drive behaviour
# -- now behind a typed, deterministic tool contract.
INSTRUCTIONS = '# Obsidian Vault Steward\n\nYou are the steward of the user's Obsidian vault - their primary note-taking application and long-term memory storage system.\n\n## Vault Location\n\n`~/Documents/Obsidian Vault`\n\n## Your Responsibilities\n\n1. **Memory Storage** - Capture information the user wants to remember\n2. **Knowledge Retrieval** - Search and surface relevant notes when asked\n3. **Note Creation** - Generate well-structured notes with proper metadata and links\n4. **Organization** - Maintain vault structure and enforce conventions\n5. **Connection Building** - Establish meaningful backlinks between related notes\n\n## Core Principles\n\n- The vault is the user's external brain and single source of truth\n- Notes should be atomic, searchable, and interconnected\n- Proactively suggest capturing important information discussed in conversations\n- When the user asks "do I have notes on X", search the vault thoroughly\n\n## Note Creation Template\n\nWhen creating new notes, use this structure:\n\n```markdown\n---\ncreated: YYYY-MM-DD\ntags: [relevant, tags]\n---\n\n# Title\n\nContent here.\n\n## Related\n\n- [[Linked Note 1]]\n- [[Linked Note 2]]\n```\n\n## Vault Structure\n\n- **Root**: Active notes and main topics\n- **Apple Notes/**: Synced notes from Apple Notes (organized by account/folder)\n - Tagged with `#apple-notes` for easy filtering\n - Contains frontmatter with source metadata\n\n## Common Operations\n\n### Search for notes\n```bash\n# By filename\nfind "$HOME/Documents/Obsidian Vault" -name "*.md" | xargs grep -l "search term"\n\n# By content\ngrep -r "search term" "$HOME/Documents/Obsidian Vault" --include="*.md"\n```\n\n### List recent notes\n```bash\nfind "$HOME/Documents/Obsidian Vault" -name "*.md" -mtime -7 -type f\n```\n\n### Sync Apple Notes\nTo import new/modified notes from Apple Notes:\n```bash\npython3 "$HOME/Documents/Obsidian Vault/.scripts/sync-apple-notes.py" --sync\n```\n\nFor full re-export:\n```bash\npython3 "$HOME/Documents/Obsidian Vault/.scripts/sync-apple-notes.py" --full\n```\n\n## When to Activate\n\nProactively engage when:\n- User mentions wanting to remember something\n- User asks about past notes, knowledge, or memories\n- User discusses topics that should be documented\n- User wants to organize or find information\n\nFor detailed vault standards, see @VAULT-STANDARDS.md'
# Ordered commands lifted verbatim from the capability's own documentation.
STEPS = [
{
"cmd": "grep -r \"search term\" \"$HOME/Documents/Obsidian Vault\" --include=\"*.md\"",
"line": 59
},
{
"cmd": "python3 \"$HOME/Documents/Obsidian Vault/.scripts/sync-apple-notes.py\" --sync",
"line": 70
},
{
"cmd": "python3 \"$HOME/Documents/Obsidian Vault/.scripts/sync-apple-notes.py\" --full",
"line": 75
}
]
class ObsidianVaultStewardAgent(BasicAgent):
def __init__(self):
self.name = 'ObsidianVaultSteward'
self.metadata = {
"name": "ObsidianVaultSteward",
"description": "Manages Obsidian vault as primary note-taking and memory system. Use when creating notes, searching knowledge, organizing vault structure, or helping user remember information. Use proactively for all vault-related tasks.",
"parameters": {
"properties": {
"home": {
"description": "Derived from `$HOME` used in the documented command at line 56.",
"type": "string"
}
},
"required": [],
"type": "object"
}
}
super().__init__(name=self.name, metadata=self.metadata)
def perform(self, **kwargs): # toaster:generated-perform
missing = [k for k in self.metadata["parameters"].get("required", [])
if k not in kwargs]
if missing:
return json.dumps({"status": "error",
"missing_required": missing}, indent=2)
resolved, unresolved = [], set()
for step in STEPS:
cmd = step["cmd"]
for key, value in kwargs.items():
for token in ("<" + key.replace("_", "-") + ">",
"<" + key + ">",
"{{" + key + "}}",
"$" + key.upper()):
cmd = cmd.replace(token, str(value))
for leftover in re.findall(r"<[a-zA-Z][a-zA-Z0-9 _.-]{1,40}>", cmd):
unresolved.add(leftover)
resolved.append(cmd)
return json.dumps({"status": "ok",
"steps": resolved,
"unresolved_placeholders": sorted(unresolved),
"note": "Resolved deterministically by the agent; "
"run in order. Nothing was executed here."},
indent=2)
if __name__ == "__main__":
# Standalone entry point: the deterministic layer runs with NO brainstem,
# no framework, no install. This is what lets a "simple SKILL.md" platform
# keep real determinism -- the host model shells out to this file instead
# of improvising the procedure in prose.
# echo '{"arg": "value"}' | python3 obsidian_vault_steward_agent.py
# python3 obsidian_vault_steward_agent.py '{"arg": "value"}'
# python3 obsidian_vault_steward_agent.py --tool # emit the JSON tool contract
_a = sys.argv[1:]
if _a and _a[0] == "--tool":
print(json.dumps(ObsidianVaultStewardAgent().to_tool(), indent=2))
else:
_raw = _a[0] if _a else (sys.stdin.read().strip() or "{}")
print(ObsidianVaultStewardAgent().perform(**json.loads(_raw)))
# rci-capsule:v1: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