一键导入
maintenance
Audit para-obsidian plugin for convention drift across skills, commands, hooks, and plugin registration.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Audit para-obsidian plugin for convention drift across skills, commands, hooks, and plugin registration.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
Web scraping, site crawling, search, structured data extraction, and AI-powered research with Firecrawl CLI. Use when you need full page content as markdown, JS-rendered pages, anti-bot bypass, crawling entire documentation sites, extracting structured data with schemas, or deep web research. Prefer WebFetch for quick questions about a known URL. Prefer WebSearch for finding links without full content.
Build production-grade MCP (Model Context Protocol) servers with observability, correlation ID tracing, and dual logging. Use when creating new MCP servers, adding tools to existing servers, implementing file logging, debugging MCP issues, wrapping CLI tools with spawnSyncCollect, or following Side Quest marketplace patterns. Covers @side-quest/core/mcp declarative API, @side-quest/core/spawn CLI wrapper patterns, Zod schemas, Bun runtime, and 9 gold standard patterns validated across Kit plugin (18 tools). Includes error handling, response format switching, MCP annotations, and graceful degradation.
Unified inbox processor - handles ALL content types (clippings, transcriptions, VTT files, attachments) with parallel subagents and single-table review. Routes to appropriate creator based on proposed_template.
Build production-grade CLI tools with Bun. Reference implementation covering argument parsing patterns (--flag value, --flag=value, --flag), dual markdown/JSON output, error handling, subcommands, and testing. Use when building CLIs, designing argument parsing, implementing command structures, reviewing CLI quality, or learning Bun CLI best practices.
Pure Bun-native filesystem utilities from @side-quest/core/fs. Use when you need command-injection-safe filesystem operations, prefer Bun over node:fs, or want token-efficient fs helpers. All functions use Bun.spawn, Bun.file(), or Bun.write() - no node:fs dependencies.
Expert guidance for building and maintaining the Para Obsidian inbox processing system - a security-hardened automation framework for processing PDFs and attachments with AI-powered metadata extraction. Use when building inbox processors, implementing security patterns (TOCTOU, command injection prevention, atomic writes), designing interactive CLIs with suggestion workflows, integrating LLM detection, implementing idempotency with SHA256 registries, or working with the para-obsidian inbox codebase. Covers engine/interface separation, suggestion-based architecture, confidence scoring, error taxonomy, structured logging, and testing patterns. Useful when user mentions inbox automation, PDF processing, document classification, security-hardened file processing, or interactive CLI design.
基于 SOC 职业分类
| name | maintenance |
| description | Audit para-obsidian plugin for convention drift across skills, commands, hooks, and plugin registration. |
| user-invocable | false |
| allowed-tools | Read, Glob, Grep, Bash |
Audit the para-obsidian plugin for convention drift. Scans 8 domains: plugin registration, frontmatter schema, completion signals, allowed-tools accuracy, cross-references, brain routing coverage, references directory integrity, and observability gaps.
Not user-invocable — brain routes to it via keywords like "maintenance", "audit", "lint", "health check", "check conventions", "plugin health".
Read the conventions knowledge base:
Read({ file_path: "<plugin-root>/skills/maintenance/references/conventions.md" })
Use these rules as the source of truth for all checks. The plugin root is plugins/para-obsidian relative to the repo root.
Check that every component on disk has a matching entry in .claude-plugin/plugin.json.
1.1 — Discover components on disk:
Glob({ pattern: "plugins/para-obsidian/skills/*/SKILL.md" })
Glob({ pattern: "plugins/para-obsidian/commands/*.md" })
Glob({ pattern: "plugins/para-obsidian/agents/*.md" })
1.2 — Read plugin.json:
Read({ file_path: "<plugin-root>/.claude-plugin/plugin.json" })
1.3 — Compare:
For each component on disk, verify it has a matching entry in the appropriate plugin.json array (skills, commands, agents). Report:
For each skills/*/SKILL.md, parse the YAML frontmatter and check required fields.
Required fields: name, description, user-invocable, allowed-tools
Additional checks:
name must match the directory nameargument-hint (warning if missing)Report:
argument-hintFor each user-invocable skill, check if the SKILL.md body contains a SKILL_RESULT pattern.
Grep({ pattern: "SKILL_RESULT", path: "plugins/para-obsidian/skills/*/SKILL.md" })
Cross-reference with frontmatter user-invocable: true from Step 2.
Report:
SKILL_RESULT completion signalFor each skill, compare tools referenced in the SKILL.md body against the allowed-tools frontmatter declaration.
Detection patterns:
para_create(, para_list(, para_fm_get(, etc.mcp__plugin_para-obsidian_para-obsidian__<tool>Read(, Write(, Edit(, Glob(, Grep(, Bash(, WebFetch(, WebSearch(AskUserQuestion(, Skill(, Task(Exclusions:
<!-- ... -->)Report:
allowed-toolsallowed-tools but not referenced in bodyScan all SKILL.md files for references to other skills, commands, or files, and verify they resolve.
Reference patterns to detect:
Skill({ skill: "para-obsidian:<name>" → check skills/<name>/SKILL.md exists/para-obsidian:<name> → check skills/<name>/SKILL.md or commands/<name>.md exists[text](references/<file>) → check file exists relative to skill directoryReport:
Read the brain skill's routing table and verify coverage.
Read({ file_path: "<plugin-root>/skills/brain/SKILL.md" })
Checks:
Report:
For each skill with a references/ subdirectory, verify files are actually referenced.
Glob({ pattern: "plugins/para-obsidian/skills/*/references/*" })
For each file found, check if the parent SKILL.md contains a reference to it (filename match in link text or path).
Report:
references/ not referenced from SKILL.md (possible dead content)references/ that doesn't existCheck that skills routed through brain have telemetry coverage.
8.1 — Verify brain-telemetry hook exists:
Read({ file_path: "<plugin-root>/hooks/hooks.json" })
Confirm a PostToolUse hook on Skill matcher exists and points to brain-telemetry.ts.
8.2 — Check SKILL_RESULT coverage:
Cross-reference skills in the brain routing table (Step 6) with completion signal coverage (Step 3). Skills in the routing table without SKILL_RESULT have an observability gap.
Report:
SKILL_RESULT (telemetry will show undefined status)After all 8 domains are audited, produce a summary:
SKILL_RESULT:{"status":"<status>","skill":"maintenance","summary":"<N> domains audited, <M> issues found","issues":[<issue-list>]}
Status logic:
ok — Zero errors, zero warningspartial — Zero errors, one or more warningserror — One or more errorsIssue format: Each issue in the array:
{
"domain": "<1-8 domain name>",
"severity": "error|warning|info",
"file": "<relative path>",
"message": "<what's wrong>",
"fix": "<suggested remediation>"
}
Present the results to Nathan as a readable summary, not raw JSON. Group by domain, show severity with clear markers (e.g., [ERROR], [WARN], [INFO]). End with the SKILL_RESULT line for brain parsing.
plugins/para-obsidian/).references/conventions.md first.