pi-heartbeat
Configure periodic health checks via HEARTBEAT.md and the /heartbeat command.
Read, create, and update notes in Espen's Obsidian vault (PARA method). Use when asked about notes, tasks, projects, dashboards, daily logs, or anything in the vault.
$ npx -y skills add espennilsen/pi --skill obsidian-vault --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/obsidian-vaultContext preview
The summary Claude sees to decide when to auto-load this skill.
Read, create, and update notes in Espen's Obsidian vault (PARA method). Use when asked about notes, tasks, projects, dashboards, daily logs, or anything in the vault.
name: obsidian-vault description: Read, create, and update notes in Espen's Obsidian vault (PARA method). Use when asked about notes, tasks, projects, dashboards, daily logs, or anything in the vault.
/Users/espen/Library/CloudStorage/OneDrive-Espennilsen.net/2-Areas/Digital_Life/Obsidian/e9n
**Always confirm with Espen before creating, modifying, or deleting any vault file.**
The vault has established automation (Dataview queries, Templater templates, dashboards). Breaking these patterns can cascade.
1. Read the vault's own `AGENTS.md` for full context on structure, plugins, workflows, and conventions 2. Read the relevant `_Index.md` file for the section you're working in 3. Check the `🏷️ Tag Taxonomy.md` for correct tag usage
1. Projects/ — Active initiatives with deadlines 2. Areas/ — Ongoing responsibilities (Education, Finance, Health, Personal Dev, Romance) 3. Resources/ — Reference materials (AI, Books, Career, Homelab, Languages, Programming) 4. Archive/ — Completed or inactive items Notes/ — Daily/Weekly/Monthly notes with habit tracking Tasks/ — TaskNotes (one task per note) Templates/ — 23+ Templater templates Weekly Reviews/ — Periodic reflections
The vault has the **Local REST API** plugin (v3.4.3) running. Prefer this over direct filesystem access — it respects Obsidian's internal state, caches, and metadata.
Base URL: http://localhost:27223 API Key: d4fc944e64f535df05b34c2e8596c4e3eaffc6dfd5b5ee15e76789a4ab96698a Auth: Authorization: Bearer <key>
curl -s "http://localhost:27223/vault/" -H "Authorization: Bearer $OBSIDIAN_API_KEY" curl -s "http://localhost:27223/vault/1.%20Projects/" -H "Authorization: Bearer $OBSIDIAN_API_KEY"
curl -s "http://localhost:27223/vault/PATH.md" \ -H "Authorization: Bearer $OBSIDIAN_API_KEY" \ -H "Accept: text/markdown"
curl -s "http://localhost:27223/vault/PATH.md" \ -H "Authorization: Bearer $OBSIDIAN_API_KEY" \ -H "Accept: application/vnd.olrapi.note+json"
curl -s -X POST "http://localhost:27223/search/simple/?query=TERM&contextLength=100" \ -H "Authorization: Bearer $OBSIDIAN_API_KEY"
Returns: `[{ filename, score, matches: [{ match: {start, end}, context }] }]`
curl -s -X POST "http://localhost:27223/search/" \ -H "Authorization: Bearer $OBSIDIAN_API_KEY" \ -H "Content-Type: application/vnd.olrapi.dataview.dql+txt" \ -d 'TABLE file.ctime AS "Created" FROM "1. Projects" WHERE status = "active" LIMIT 10'
# Find notes with a specific tag
curl -s -X POST "http://localhost:27223/search/" \
-H "Authorization: Bearer $OBSIDIAN_API_KEY" \
-H "Content-Type: application/vnd.olrapi.jsonlogic+json" \
-d '{"in": ["project/active", {"var": "tags"}]}'curl -s -X PUT "http://localhost:27223/vault/PATH.md" \ -H "Authorization: Bearer $OBSIDIAN_API_KEY" \ -H "Content-Type: text/markdown" \ -d '--- created: 2026-02-09 type: note tags: [type/note] --- # Title Content here'
curl -s -X POST "http://localhost:27223/vault/PATH.md" \ -H "Authorization: Bearer $OBSIDIAN_API_KEY" \ -H "Content-Type: text/markdown" \ -d 'Content to append'
curl -s -X PATCH "http://localhost:27223/vault/PATH.md" \ -H "Authorization: Bearer $OBSIDIAN_API_KEY" \ -H "Content-Type: text/markdown" \ -H "Operation: append" \ -H "Target-Type: heading" \ -H "Target: Heading 1::Subheading" \ -d 'New content under this heading'
curl -s -X DELETE "http://localhost:27223/vault/PATH.md" \ -H "Authorization: Bearer $OBSIDIAN_API_KEY"
# Current daily note curl -s "http://localhost:27223/periodic/daily/" \ -H "Authorization: Bearer $OBSIDIAN_API_KEY" \ -H "Accept: text/markdown" # Specific date curl -s "http://localhost:27223/periodic/daily/2026/2/9/" \ -H "Authorization: Bearer $OBSIDIAN_API_KEY" \ -H "Accept: text/markdown"
If the REST API is down, fall back to direct file access:
VAULT="/Users/espen/Library/CloudStorage/OneDrive-Espennilsen.net/2-Areas/Digital_Life/Obsidian/e9n" # Read a note cat "$VAULT/PATH.md" # Find by name find "$VAULT" -name "*.md" | grep -i "search term" # Find by content grep -rl "search term" "$VAULT" --include="*.md" # Recent daily notes ls -lt "$VAULT/Notes/Daily/" | head -10
This repository is my Pi coding agent home directory. I keep it under version control and symlink it to ~/.pi/agent so Pi loads configuration, extensions, skills, and runtime state from here.
Configure periodic health checks via HEARTBEAT.md and the /heartbeat command.
Manage persistent memory across sessions. Use when asked to remember, recall, forget, or review what was stored. Covers long-term…
Track and manage projects with git status via dashboard and tool.
Delegate tasks to specialized subagents for parallel or sequential execution.
Audit, generate, update, and lint AGENTS.md files across all projects. Use when asked to check project context files, scaffold…