AgentSkillsCN

use-my-pkm

通过 $MY_PKM_PATH 环境变量,访问并操作用户的个人知识管理 vault。当用户希望使用其 PKM 系统、笔记、看板、收件箱项目,或知识库时,此技能便能派上用场。支持读写笔记、管理看板任务、整理收件箱,以及便捷导航知识库结构。

SKILL.md
--- frontmatter
name: use-my-pkm
description: Access and work with the user's personal knowledge management vault using $MY_PKM_PATH environment variable. Use when the user asks to work with their PKM system, notes, Kanban board, inbox items, or knowledge vault. Supports reading/writing notes, managing Kanban tasks, organizing inbox, and navigating the vault structure.

Use My PKM

Work with the user's personal knowledge management vault.

Vault Location

Path: $MY_PKM_PATH (environment variable)

Set this variable to your vault location:

bash
export MY_PKM_PATH=~/Vaults/my-pkm/my-pkm

IMPORTANT: Always use $MY_PKM_PATH in all commands, never hardcode the path.

Vault Structure

code
$MY_PKM_PATH/
├── 0-inbox/           # Temporary notes (organize later)
├── 1-notes/           # Organized notes (may have subdirs)
└── my-kanban.md       # Kanban board for task management

Note: We do NOT use PARA method. Simple structure: inbox + notes.

Kanban Board Format

The Kanban board is just a markdown file with special formatting for the obsidian-kanban plugin.

File: $MY_PKM_PATH/my-kanban.md

Structure

markdown
---
kanban-plugin: board
---

## Column Name

- [ ] Task item
- [ ] Task with link [[Note Name]]

%% kanban:settings

{"kanban-plugin":"board","list-collapse":[false,false,false,false,false]}

code
%%

Key Points

  • YAML frontmatter: kanban-plugin: board
  • Headers (##) = Columns
  • Checkboxes (- [ ]) = Cards/Tasks
  • Wiki-links ([[Note Name]]) = Link to notes in vault
  • Settings block at bottom (auto-generated by plugin)

Current Columns

  • Backlog
  • This-week
  • WIP
  • W8-for-feedback
  • Done

Critical PKM Rules

1. Concise Kanban Task Titles

ALWAYS extract concise, actionable titles from verbose input.

Examples:

User Says (Verbose)Kanban Title (Concise)Linked Note
"Transfer money to wife tomorrow at 3pm, she said she needs it for groceries and utility bill"Transfer money to wife[[Transfer-2026-01-24]]
"Remind me to call John about the project, he wanted to discuss the timeline and requirements"Call John about project[[Call-John-2026-01-24]]
"Add task: review the feature spec that Tom sent yesterday, need to provide feedback by Friday"Review feature spec[[Feature-Spec-Review]]
"I need to prepare slides for Monday's presentation about Q4 results"Prepare Q4 presentation slides[[Q4-Presentation]]

Pattern:

  • Extract: Action + Object (e.g., "Transfer money", "Call John", "Review spec")
  • Omit: When, why, who said what, contextual details
  • These details go into the linked note

2. Always Link Tasks to Detailed Notes

Every task with context MUST link to a note with full details.

Format:

markdown
## WIP

- [ ] Concise task title [[Note-Name]]

Note Template:

markdown
# Note-Name

**Due:** [When]

**Context:**
- [Detail 1]
- [Detail 2]
- [Detail 3]

**Status:** [Pending/In Progress/Blocked/Done]

Example:

Boss says: "Transfer money to wife tomorrow at 3pm, she needs it for groceries and also to pay the utility bill"

Kanban:

markdown
## WIP

- [ ] Transfer money to wife [[Transfer-2026-01-24]]

Note: $MY_PKM_PATH/1-notes/Transfer-2026-01-24.md

markdown
# Transfer-2026-01-24

**Due:** Tomorrow 3pm (2026-01-25 15:00)

**Context:**
- Wife needs money for groceries
- Also to pay utility bill

**Amount:** [To be confirmed]

**Status:** Pending

3. Auto-Organize Notes into Subdirectories

When 5+ notes on the same topic exist, create a subdirectory and move them.

Detection:

  • Monitor 1-notes/ directory
  • Group notes by topic (finance, work, personal, health, etc.)
  • When count >= 5, auto-organize

Steps:

  1. Detect topic from note titles/content
  2. Create subdirectory: $MY_PKM_PATH/1-notes/[topic]/
  3. Move related notes into subdirectory
  4. Verify wiki-links still work (Obsidian finds notes by name regardless of path)
  5. Report organization to user

Example:

Before:

code
1-notes/
├── Transfer-2026-01-20.md
├── Budget-Review.md
├── Invoice-Payment.md
├── Expense-Report.md
├── Tax-Prep-2026.md
└── Meeting-Notes.md

After (5+ finance notes detected):

code
1-notes/
├── finance/
│   ├── Transfer-2026-01-20.md
│   ├── Budget-Review.md
│   ├── Invoice-Payment.md
│   ├── Expense-Report.md
│   └── Tax-Prep-2026.md
└── Meeting-Notes.md

Report: "I organized five finance notes into a finance subdirectory"

4. Preserve Kanban Format

NEVER modify:

  • YAML frontmatter: kanban-plugin: board
  • Settings block: %% kanban:settings ... %%

ALWAYS preserve:

  • Exact column names
  • Checkbox format: - [ ] (space between brackets for incomplete)
  • Wiki-link format: [[Note Name]] (no .md extension)

Common Operations

Read Kanban Board

bash
cat "$MY_PKM_PATH/my-kanban.md"

Use cases:

  • User asks "What's on my plate?"
  • User says "Show me my tasks"
  • Before moving a task (need to find it first)

Add Task to Kanban

Step 1: Extract concise title from user input

Step 2: Determine column (Backlog, This-week, WIP, W8-for-feedback, Done)

Step 3: Add task with wiki-link:

markdown
## [Column Name]

- [ ] Concise task title [[Note-Name]]

Step 4: Create detailed note in 1-notes/ with full context

Step 5: Report completion to user

Move Task Between Columns

Step 1: Read Kanban to find task

Step 2: Remove from source column

Step 3: Add to destination column (preserve wiki-link)

Step 4: Report completion

Example:

bash
# User says: "Move transfer money task to Done"
# 1. Read Kanban, find in WIP: - [ ] Transfer money to wife [[Transfer-2026-01-24]]
# 2. Remove from WIP
# 3. Add to Done (change to checked): - [x] Transfer money to wife [[Transfer-2026-01-24]]
# 4. Respond: "Moved transfer money to Done"

Create New Note

In inbox (temporary/quick capture):

bash
echo "Content" > "$MY_PKM_PATH/0-inbox/Note Title.md"

In notes (organized):

bash
echo "Content" > "$MY_PKM_PATH/1-notes/Note Title.md"

Best practice:

  • Quick captures → inbox
  • Linked from Kanban → 1-notes/ (organized)

Move Note from Inbox to Notes

bash
mv "$MY_PKM_PATH/0-inbox/Note.md" "$MY_PKM_PATH/1-notes/Note.md"

List All Notes

bash
find "$MY_PKM_PATH" -name "*.md" -not -path "*/.obsidian/*" -not -name "my-kanban.md"

Search Notes Content

bash
grep -r "search term" "$MY_PKM_PATH" --include="*.md" --exclude-dir=".obsidian"

Check for Auto-Organization Opportunities

bash
# List all notes in 1-notes/ (excluding subdirs)
find "$MY_PKM_PATH/1-notes" -maxdepth 1 -name "*.md" -type f

# Count notes by topic (manual detection)
# Look for patterns in filenames: Transfer-*, Budget-*, Invoice-*, etc.

Working with Wiki-Links

Wiki-links ([[Note Name]]) in Obsidian reference the note by name, not path.

  • Link works regardless of folder: [[My Note]] finds 1-notes/My Note.md or 1-notes/finance/My Note.md
  • Use exact note name without .md extension
  • Links are case-sensitive
  • Advantage: Notes can be moved into subdirectories without breaking links

Best Practices

  1. Use environment variable - Always use $MY_PKM_PATH, never hardcode paths
  2. Preserve frontmatter - Keep kanban-plugin: board in my-kanban.md
  3. Preserve settings block - Don't modify the %% kanban:settings section
  4. Wiki-links for connections - Use [[Note Name]] to link related notes
  5. Inbox for quick capture - Put temporary/unorganized notes in 0-inbox/
  6. Notes for organized content - Move curated notes to 1-notes/
  7. Concise Kanban titles - Extract key action, put details in linked note
  8. Auto-organize proactively - Create subdirectories when notes accumulate

Example Workflows

Workflow 1: Add Task with Context (DETAILED)

User says: "Add to WIP: transfer money to wife tomorrow at 3pm, she needs it for groceries and utility bill"

Your steps:

  1. Extract concise title: "Transfer money to wife"

  2. Create note: $MY_PKM_PATH/1-notes/Transfer-2026-01-24.md

    markdown
    # Transfer-2026-01-24
    
    **Due:** Tomorrow 3pm (2026-01-25 15:00)
    
    **Context:**
    - Wife needs money for groceries
    - Also to pay utility bill
    
    **Status:** Pending
    
  3. Read Kanban:

    bash
    cat "$MY_PKM_PATH/my-kanban.md"
    
  4. Add to WIP column: Find ## WIP section, add:

    markdown
    - [ ] Transfer money to wife [[Transfer-2026-01-24]]
    
  5. Save Kanban (preserve YAML and settings block)

  6. Respond: "Added to WIP: Transfer money to wife. Created note with details."


Workflow 2: Move Task

User says: "Move the transfer money task to Done"

Your steps:

  1. Read Kanban:

    bash
    cat "$MY_PKM_PATH/my-kanban.md"
    
  2. Find task in WIP:

    markdown
    ## WIP
    
    - [ ] Transfer money to wife [[Transfer-2026-01-24]]
    
  3. Remove from WIP

  4. Add to Done (mark as completed):

    markdown
    ## Done
    
    - [x] Transfer money to wife [[Transfer-2026-01-24]]
    
  5. Save Kanban

  6. Respond: "Moved transfer money to Done"


Workflow 3: Quick Inbox Capture

User says: "Quick note: John mentioned the Q4 review is next Thursday"

Your steps:

  1. Create in inbox:

    bash
    echo "John mentioned the Q4 review is next Thursday" > "$MY_PKM_PATH/0-inbox/Q4-Review-$(date +%Y%m%d).md"
    
  2. Respond: "Saved note to inbox"


Workflow 4: Auto-Organize Notes

You notice: 6 finance-related notes in 1-notes/:

  • Transfer-2026-01-20.md
  • Budget-Review.md
  • Invoice-Payment.md
  • Expense-Report.md
  • Tax-Prep-2026.md
  • Credit-Card-Statement.md

Your steps:

  1. Create subdirectory:

    bash
    mkdir -p "$MY_PKM_PATH/1-notes/finance"
    
  2. Move notes:

    bash
    mv "$MY_PKM_PATH/1-notes/Transfer-2026-01-20.md" "$MY_PKM_PATH/1-notes/finance/"
    mv "$MY_PKM_PATH/1-notes/Budget-Review.md" "$MY_PKM_PATH/1-notes/finance/"
    # ... move all 6 notes
    
  3. Verify wiki-links still work (Obsidian finds by name, not path)

  4. Respond: "I organized six finance notes into a finance subdirectory"


Workflow 5: What's on my plate?

User says: "What do I need to do today?"

Your steps:

  1. Read Kanban:

    bash
    cat "$MY_PKM_PATH/my-kanban.md"
    
  2. Extract tasks from This-week and WIP columns

  3. Count tasks: 3 found

  4. Respond naturally: "You have three tasks today: Transfer money to wife, Call John about project, and Review feature spec"


Disambiguation: PKM Backlog vs Project Backlog

Problem: Multiple "backlogs" exist:

  • PKM Kanban Backlog column
  • Project backlogs (e.g., Jarvis project backlog, trading-bot backlog)

Solution: Default to PKM + Context Clues

Default Rule:

  • "Add to backlog" → PKM Kanban Backlog column (most common)

Context Clues for Project Backlog:

  • Explicitly mentions project name: "Add to jarvis backlog", "Add to trading-bot backlog"
  • Clearly technical: "Add to backlog: implement voice feedback", "Add to backlog: fix database migration"
  • Keywords: "feature", "bug", "refactor", "implement", "deploy"

When Ambiguous:

  • Ask for clarification: "Do you want this in your personal backlog or the [project] backlog?"

Examples:

User SaysInterpretation
"Add to backlog: transfer money to wife"PKM Kanban Backlog (personal task)
"Add to backlog: call John"PKM Kanban Backlog (personal task)
"Add to backlog: implement voice feedback for jarvis"Jarvis project backlog (technical + project name)
"Add to jarvis backlog: fix TTS voice quality"Jarvis project backlog (explicit project name)
"Add to backlog: review code"AMBIGUOUS → Ask: "Personal or project backlog?"

Notes

  • This vault uses Obsidian with the obsidian-kanban plugin
  • The vault is synced across computers (Obsidian Sync or similar)
  • Changes made via CLI will reflect in Obsidian UI immediately
  • Always use $MY_PKM_PATH environment variable for paths
  • Set MY_PKM_PATH in your shell profile (~/.bashrc, ~/.zshrc, etc.)
  • Concise task titles + detailed notes = clean Kanban board
  • Auto-organize when notes accumulate (5+ threshold)