From shelf
Display a formatted project status summary from Obsidian. Shows status, next step, latest progress, open issue count, and human-needed items. Read-only — does not modify anything.
How this skill is triggered — by the user, by Claude, or both
Slash command
/shelf:shelf-statusThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Display a formatted summary of the project's current state from Obsidian. This is a read-only command — it never writes or modifies any files.
Display a formatted summary of the project's current state from Obsidian. This is a read-only command — it never writes or modifies any files.
$ARGUMENTS
No arguments required.
Determine the project slug and base path. Priority order: explicit argument > .shelf-config > git remote defaults.
.shelf-config exists in the repo root:
a. Parse it: skip lines starting with # (comments) and blank lines; split each remaining line on the first = to get key and value; trim whitespace from both
b. Extract base_path and slug values
c. If both are present and non-empty: use them as $BASE_PATH and $SLUG — do NOT derive from git remote or prompt the user (FR-006). Skip to substep 4
d. If either is missing or empty: warn ".shelf-config is malformed — missing {key}. Falling back to defaults." and continue to substep 2.shelf-config:
a. If the user provided a project name as an argument: use it as $SLUG
b. Otherwise: run git remote get-url origin and extract the repo name (last path segment, strip .git suffix) as $SLUG
c. Set $BASE_PATH = "projects" (default){$BASE_PATH}/{$SLUG}/...mcp__obsidian-projects__read_file({ path: "{base_path}/{slug}/{slug}.md" })
/shelf-create first" and STOP (FR-028)Extract from YAML frontmatter:
status — current project statusnext_step — what to do nextlast_updated — when the project was last updatedtags — tech stack and category tagsrepo — repository URLproject — backlink to project dashboard (e.g., "[[slug]]") — display if presentList progress files:
mcp__obsidian-projects__list_files({ path: "{base_path}/{slug}/progress" })
.gitkeep): note "No progress entries yet"mcp__obsidian-projects__read_file({ path: "{base_path}/{slug}/progress/{latest_file}" })
Extract the last ## YYYY-MM-DD entry from that file.If MCP fails: warn "Could not read progress" and continue with other sections (NFR-004)
List issue notes:
mcp__obsidian-projects__list_files({ path: "{base_path}/{slug}/issues" })
For each file (excluding .gitkeep):
mcp__obsidian-projects__read_file({ path: "{base_path}/{slug}/issues/{filename}" })
Parse frontmatter and count:
status != closed)status == closed)Note: Issue notes now include project, tags, source, severity fields in frontmatter (from template system). Parse these for richer display if present.
If MCP fails: warn "Could not read issues" and continue (NFR-004)
From the dashboard content (already read in Step 3), parse the ## Human Needed section:
- [ ] (pending) and - [x] (completed) itemsPrint the complete status view:
# Project: {slug}
Status: {status}
Next step: {next_step or 'Not set'}
Last updated: {last_updated or 'Never'}
Tags: {comma-separated tags}
Repo: {repo_url}
## Latest Progress
{latest progress entry content, or "No progress entries yet"}
## Issues
Open: {N}
Closed: {N}
Total: {N}
## Human Needed
{list of pending items as "- [ ] item", or "No items requiring human attention"}
{if completed items exist: list as "- [x] item"}
npx claudepluginhub yoshisada/ai-repo-template --plugin shelfSearches MemPalace before answering questions about past work, people, projects, or prior decisions. Returns verbatim stored content instead of guessing from model memory.
Guides Payload CMS config (payload.config.ts), collections, fields, hooks, access control, APIs. Debugs validation errors, security, relationships, queries, transactions, hook behavior.
Implements vector databases with Pinecone, Weaviate, Qdrant, Milvus, pgvector for semantic search, RAG, recommendations, and similarity systems. Optimizes embeddings, indexing, and hybrid search.