pi-heartbeat
Configure periodic health checks via HEARTBEAT.md and the /heartbeat command.
Manage Espen's projects across the Dev folder and Obsidian vault. Use for project status checks, creating new projects, syncing between code repos and vault notes, archiving, and cross-project search.
$ npx -y skills add espennilsen/pi --skill project-manager --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/project-managerContext preview
The summary Claude sees to decide when to auto-load this skill.
Manage Espen's projects across the Dev folder and Obsidian vault. Use for project status checks, creating new projects, syncing between code repos and vault notes, archiving, and cross-project search.
name: project-manager description: Manage Espen's projects across the Dev folder and Obsidian vault. Use for project status checks, creating new projects, syncing between code repos and vault notes, archiving, and cross-project search.
Manage projects spanning two systems:
DEV="/Users/espen/Dev" VAULT="/Users/espen/Library/CloudStorage/OneDrive-Espennilsen.net/2-Areas/Digital_Life/Obsidian/e9n"
Active projects and their locations. Resolve project references against this list first.
| Project | Dev Path | Vault Path | Stack | |---------|----------|------------|-------| | pi (Hannah) | `$DEV/pi` | `1. Projects/AI Projects/Pi (Hannah)` | Node/TypeScript, Pi agent | | e9n.dev | `$DEV/e9n.dev` | `1. Projects/e9n Agency` | Eleventy + Tailwind + Pagefind | | Starheim | `$DEV/Starheim` | `1. Projects/Starheim` | TanStack Start + React + Clerk + oRPC | | x10s | `$DEV/x10s` | — | Node/TypeScript | | x10s-pi | `$DEV/x10s-pi` | — | Monorepo, Docker + K8s | | Hovdan Seil AS | `$DEV/Hovdan Seil AS` | — | Eleventy + Tailwind | | hjernedal.no | `$DEV/hjernedal.no` | — | Next.js + Prisma + AI chatbot | | SalesGPT | `$DEV/SalesGPT` | — | Autonomous sales agent | | obsidian-agent | `$DEV/obsidian-agent` | — | Claude SDK + Obsidian | | MCP-Bridge | `$DEV/MCP-Bridge` | — | OpenAI API → MCP bridge | | stoic-tracker | `$DEV/stoic-tracker` | — | Monorepo, Docker | | Sail La Vie | `$DEV/Sail La Vie` | — | TanStack React + Firebase | | LocalBooks | `$DEV/LocalBooks` | — | React Native | | comfyui-cheatsheet | `$DEV/comfyui-cheatsheet` | — | Vue.js | | ClaudeCode | `$DEV/ClaudeCode` | — | Developer toolkit | | CrewMap | — | `1. Projects/CrewMap` | — | | VibeBox | — | `1. Projects/VibeBox` | — | | Languages | — | `1. Projects/Languages` | Thai + Spanish | | Health | — | `1. Projects/Health` | Bodybuilding, C25K, Weight Loss | | Sales Coaching | — | `1. Projects/Sales Coaching` | MEDDPICC | | University Courses | — | `1. Projects/University Courses` | Academic |
Get a quick status across all active projects:
# All git repos sorted by last commit (most recent first)
# Shows: project name, last commit timestamp, dirty file count
(for d in $DEV/*/; do
[ -d "$d/.git" ] || continue
name=$(basename "$d")
ts=$(git -C "$d" log -1 --format='%ct' 2>/dev/null)
date=$(git -C "$d" log -1 --format='%ai' 2>/dev/null | cut -d' ' -f1)
ago=$(git -C "$d" log -1 --format='%ar' 2>/dev/null)
dirty=$(git -C "$d" status --porcelain 2>/dev/null | wc -l | tr -d ' ')
week=$(git -C "$d" log --oneline --since="7 days ago" --no-merges 2>/dev/null | wc -l | tr -d ' ')
flag=""
[ "$dirty" -gt 0 ] && flag=" ⚠️ ${dirty} dirty"
[ "$week" -gt 0 ] && flag="${flag} 📝 ${week} this week"
echo "${ts:-0}|${name}|${date:-never}|${ago:-never}${flag}"
done) | sort -t'|' -k1 -rn | cut -d'|' -f2-# Obsidian project status cat "$VAULT/1. Projects/_Index.md"
For a specific project, gather comprehensive status:
PROJECT="project-name" # Git status git -C "$DEV/$PROJECT" status git -C "$DEV/$PROJECT" log --oneline -10 # Recent changes git -C "$DEV/$PROJECT" diff --stat HEAD~5 2>/dev/null # Tech stack detection ls "$DEV/$PROJECT/package.json" "$DEV/$PROJECT/Cargo.toml" "$DEV/$PROJECT/pyproject.toml" "$DEV/$PROJECT/go.mod" 2>/dev/null cat "$DEV/$PROJECT/package.json" 2>/dev/null | head -20 # README / docs cat "$DEV/$PROJECT/README.md" 2>/dev/null | head -50 # Open issues (if using GitHub) # Check for TODO/FIXME/HACK grep -rn "TODO\|FIXME\|HACK\|XXX" "$DEV/$PROJECT/src/" --include="*.ts" --include="*.tsx" --include="*.js" 2>/dev/null | head -20
For the vault side:
# Find related vault notes find "$VAULT" -name "*.md" -path "*/Projects/*" | xargs grep -l "$PROJECT" 2>/dev/null
When starting a new project, set up both systems:
**Dev side:**
mkdir -p "$DEV/new-project" cd "$DEV/new-project" git init # ... scaffold based on stack
**Vault side** (confirm with Espen first): 1. Read the Project Template: `cat "$VAULT/Templates/Project Template.md"` 2. Create the project note in `1. Projects/` following the template 3. Add correct frontmatter and tags per `🏷️ Tag Taxonomy.md` 4. Update `1. Projects/_Index.md` if it's not auto-generated by Dataview
Move a project to archived/inactive state:
**Dev side:**
# Ensure clean state git -C "$DEV/$PROJECT" status # Confirm no uncommitted work, then optionally: mv "$DEV/$PROJECT" "$DEV/! Archive/"
**Vault side** (confirm first): 1. Move the project folder from `1. Projects/` to `4. Archive/` 2. Update tags: change `#project/active` to `#project/completed` or `#project/archived` 3. Add completion date to frontmatter
Search across all code repos and vault notes:
# Search code grep -rl "search term" $DEV/*/src/ --include="*.ts" --include="*.tsx" --include="*.py" 2>/dev/null | head -20 # Search vault grep -rl "search term" "$VAULT" --include="*.md" 2>/dev/null | head -20 # Search git history across projects for d in $DEV/*/; do [ -d "$d/.git" ] || continue result=$(git -C "$d" log --all --oneline --grep="search term" 2>/dev/null | head -3) [ -n "$result" ] && echo "=== $(basename "$d") ===" && echo "$result" d
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…