OPM
Overview
opm keeps coding-project memory in Obsidian using plain Markdown plus YAML frontmatter.
It records durable facts, decisions, pitfalls, and next steps from coding work.
Default behavior: load only the reference needed for the user's current OPM task. Do not call implementation skills unless the user explicitly asks to start implementation.
Configuration
OPM needs one Obsidian vault root.
Preferred configuration:
OBSIDIAN_VAULT_ROOT=<user's Obsidian vault path>
If OBSIDIAN_VAULT_ROOT is missing or points to a non-existent folder, ask the user for their Obsidian vault path before creating or editing notes. Do not assume the author's local path and do not write into a random fallback directory without confirmation.
Suggested examples to show users:
# macOS / Linux
export OBSIDIAN_VAULT_ROOT="$HOME/Obsidian/ProjectMemory"
# Windows PowerShell
setx OBSIDIAN_VAULT_ROOT "D:\\Obsidian\\ProjectMemory"
Project notes live under:
${OBSIDIAN_VAULT_ROOT}/10-Projects項目/<project-name>/
Expand ~ before running shell commands.
Skill Boundary
Use this skill for:
- Creating a project memory in Obsidian.
- Recording development sessions, decisions, pitfalls, TODOs, platform differences, or feedback.
- Reviewing existing project notes.
- Auditing a repo and writing durable findings into Obsidian.
- Cleaning accumulated project notes into long-term knowledge.
Do not use this skill as the implementation owner. Route implementation to:
- planning/architecture ->
software-dev-core - Vue/admin UI ->
frontend-dev - backend service ->
backend-dev - schema/SQL/migration ->
database-dev - API contract/auth/webhook/third-party integration ->
api-integration
For project creation, opm may judge and record the stack/next responsible skill, but it should not invoke those skills automatically.
Lazy Task Router
| User intent | Read only |
|---|---|
| Create full project memory | references/project-create.md + references/obsidian-structure.md; if goal is vague, also references/goal-grilling.md |
| Quick preset project | references/project-create.md + references/preset-stacks.md + references/obsidian-structure.md; if goal is vague, also references/goal-grilling.md |
Quick record: 用 opm 记一下 |
references/record-memory.md; read obsidian-structure.md only if frontmatter/location is needed |
| Detailed/layer-aware record | references/record-memory.md + references/development-detailing.md |
| Reopen/review project | references/review-audit.md |
| Audit current repo/project | references/review-audit.md + references/development-detailing.md + references/obsidian-structure.md |
| Clean knowledge base | references/knowledge-cleanup.md |
Core Rules
- Use one Obsidian folder per project.
- Use only Markdown and YAML frontmatter; no tool-specific syntax.
- Never store plaintext passwords, keys, tokens, or long-lived secrets.
- Append or refine existing notes; do not duplicate files or overwrite stable history.
- Update
last_updatedonly on notes actually edited in the current session. - Only
project-brief.mdmay updatenext_step. - Put unclear information into a
待整理section instead of inventing certainty. - Before external or destructive actions, including GitHub repo creation, pushing code, deleting files, or publishing, show the plan and ask for confirmation.
- If GitHub/external actions fail, degrade to Obsidian-only notes plus manual steps; do not silently skip failures.
Output Contracts
Review existing memory with exactly four sections:
- 当前状态 + 上次进度
- 最近 3 条踩坑/决策
- 已验证稳定、不要再改动的技术栈
- 明确的下一步动作
Audit conclusion must be exactly one of:
- 一致
- 部分一致
- 偏离
Every audit difference must include evidence file paths.