Agent skill

pkm

Use pkm for personal knowledge management with temporal awareness, quality filtering, hybrid search, and relationship tracking with LSP and MCP server integration.

Stars 163
Forks 31

Install this agent skill to your Project

npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/data/pkm

SKILL.md

PKM - Personal Knowledge Management Skill

You are a specialist in using pkm, a Personal Knowledge Management system that provides a knowledge layer between Claude Code (MCP) and lancer/LanceDB. PKM offers temporal awareness, quality filtering, token-efficient search, and document curation tools for managing workspace knowledge.

What is PKM?

pkm is an advanced knowledge management system that provides:

  • Temporal awareness: Track document freshness and identify stale content
  • Quality filtering: Filter by certainty level and information type (facts, analysis, ideas)
  • Hybrid search: Combines vector (semantic) and BM25 (full-text) search
  • Relationship tracking: Document wikilinks, references, and backlinks
  • Quality audits: Systematic review of knowledge base quality
  • LSP server: Wikilink autocomplete in editors
  • MCP integration: Claude Desktop integration for intelligent search

Core Capabilities

  1. Index: Index workspace documents (titles and/or content)
  2. Search: Search with quality filters (certainty, info type, freshness)
  3. Relationships: Track document relationships and wikilinks
  4. Backlinks: Query what links to a document
  5. Quality Audit: Review and improve knowledge base quality
  6. Stats: Analyze indexed content statistics
  7. LSP/MCP: Editor integration and Claude Desktop integration

Quick Start

Basic Search

bash
# Search workspace documents
pkm search "kubernetes deployment strategies"

# Search with quality filters
pkm search --facts-only --fresh-only "API authentication"

# Search with result limit
pkm search -n 5 "error handling patterns"

Basic Indexing

bash
# Index current directory (both titles and content)
pkm index

# Index specific directory
pkm index ~/Documents/notes/

# Index specific files
pkm index note1.md note2.md

Document Indexing

Index Command Options

bash
# Index both titles and content (default)
pkm index ./notes/

# Index only titles (LSP autocomplete)
pkm index --titles-only ./notes/

# Index only content (search)
pkm index --content-only ./notes/

# Index to specific table
pkm index --table my_knowledge ./notes/

# Index specific file extensions
pkm index --extensions md,txt,pdf ./documents/

# Force re-index
pkm index --force ./notes/

Index from stdin

bash
# Pipe file paths to index
find ~/Documents -name "*.md" -mtime -7 | pkm index --stdin

# From git changed files
git diff --name-only main | grep "\.md$" | pkm index --stdin

Index Modes

Hybrid index (default):

bash
# Vector + BM25 full-text search
pkm index ./notes/

Vector-only index:

bash
# Skip BM25 (faster indexing, semantic search only)
pkm index --no-hybrid ./notes/

Index Management

bash
# Quiet mode (suppress progress)
pkm index --quiet ./large-corpus/

# Dry run (see what would be indexed)
pkm index --dry-run ./notes/

# Verbose logging
pkm index -v ./notes/

Search Operations

Search Command Options

bash
# Basic search
pkm search "machine learning algorithms"

# Limit results
pkm search -n 10 "API design patterns"

# Set minimum score threshold
pkm search --min-score 0.1 "database optimization"

# Specify database path
pkm search --db-path ~/my-db "query"

# Specify workspace root
pkm search --workspace-root ~/Documents "query"

# Custom table name
pkm search --table-name custom_table "query"

Quality Filters

Filter by information type:

bash
# Show only facts
pkm search --info-type fact "kubernetes architecture"
pkm search --facts-only "docker commands"

# Show only analysis
pkm search --info-type analysis "performance bottlenecks"

# Show only ideas
pkm search --info-type idea "feature proposals"

Filter by certainty:

bash
# High certainty only
pkm search --certainty high "security best practices"

# Medium certainty
pkm search --certainty medium "migration strategies"

# Low certainty (speculative)
pkm search --certainty low "future trends"

Filter by freshness:

bash
# Maximum age in days
pkm search --max-age 30 "recent updates"

# Only fresh documents
pkm search --fresh-only "current status"

# Exclude stale documents
pkm search --exclude-stale "active projects"

Combined Filters

bash
# Facts from last 30 days
pkm search \
  --facts-only \
  --max-age 30 \
  "authentication implementation"

# High certainty analysis (fresh)
pkm search \
  --info-type analysis \
  --certainty high \
  --fresh-only \
  "performance optimization"

# Recent ideas with threshold
pkm search \
  --info-type idea \
  --max-age 14 \
  --min-score 0.15 \
  -n 5 \
  "feature enhancements"

Output Formats

bash
# Text output (default)
pkm search "query"

# JSON output for scripting
pkm search --output json "query" | jq '.results[] | .path'

# Verbose logging
pkm search -v "query"

Relationship Tracking

Query Outgoing Relationships

bash
# Show all links from a document
pkm relationships --source notes/architecture.md

# Filter by relationship type
pkm relationships --source notes/api.md --rel-type wikilink

# JSON output
pkm relationships --source notes/design.md --output json

Query Backlinks

bash
# Show what links to a document
pkm backlinks notes/concepts/auth.md

# Filter by relationship type
pkm backlinks notes/api-spec.md --rel-type reference

# JSON output
pkm backlinks notes/design.md --output json

Relationship Use Cases

bash
# Find related documents
pkm relationships --source current-work.md

# Discover document impact
pkm backlinks important-concept.md

# Build knowledge graph
pkm relationships --source index.md --output json | \
  jq '.relationships[] | .target'

# Find orphaned documents (no backlinks)
pkm backlinks my-note.md | grep -q "No backlinks" && \
  echo "Orphaned document"

Index a Single Document

bash
# Index document for relationship tracking
pkm index-doc notes/new-concept.md

# With custom database
pkm index-doc --db-path ~/kb notes/article.md

# Verbose output
pkm index-doc -v notes/research.md

Quality Management

Quality Audit

bash
# Audit entire workspace
pkm quality-audit

# Audit specific area/topic
pkm quality-audit --area kubernetes

# JSON output
pkm quality-audit --output json

# Verbose audit
pkm quality-audit -v

What quality-audit checks:

  • Documents missing quality metadata
  • Stale documents needing updates
  • Low certainty information
  • Missing or unclear info types
  • Document completeness

Find Stale Documents

bash
# Find documents exceeding freshness threshold
pkm find-stale

# With workspace root
pkm find-stale --workspace-root ~/Documents/notes

# Verbose output
pkm find-stale -v

Verification Queue

bash
# Show documents needing review
pkm verify-queue

# With specific workspace
pkm verify-queue --workspace-root ~/kb

# Verbose output
pkm verify-queue -v

Statistics and Analysis

Workspace Statistics

bash
# Show basic stats
pkm stats

# Detailed breakdown by file extension
pkm stats -d

# Detailed stats with custom database
pkm stats --db-path ~/my-kb -d

# JSON output
pkm stats --output json

Stats include:

  • Total documents indexed
  • Document counts by type
  • Table information
  • Embedding models used
  • Index sizes

Table Management

List Tables

bash
# List all tables in database
pkm tables

# With custom database path
pkm tables --db-path ~/my-kb

# Verbose output
pkm tables -v

Server Modes

LSP Server (Wikilink Autocomplete)

bash
# Start LSP server for editor integration
pkm lsp

# With verbose logging
pkm lsp -v

Purpose: Provides wikilink autocomplete in editors (VSCode, Neovim, etc.)

MCP Server (Claude Desktop)

bash
# Start MCP server
pkm mcp

# With verbose logging
pkm mcp -v

Purpose: Integrates PKM search into Claude Desktop for intelligent document retrieval.

Environment Variables

bash
# Set default database path
export PKM_DB_PATH=~/my-knowledge-base
pkm search "query"

# Set workspace root
export PKM_ROOT=~/Documents/notes
pkm index

# Both together
export PKM_DB_PATH=~/kb
export PKM_ROOT=~/notes
pkm search "query"

Common Workflows

Workflow 1: Initial Workspace Setup

bash
# 1. Index your workspace
cd ~/Documents/notes
pkm index

# 2. Check statistics
pkm stats -d

# 3. Test search
pkm search "recent projects"

# 4. Run quality audit
pkm quality-audit

Workflow 2: Daily Knowledge Work

bash
# 1. Find stale documents to review
pkm find-stale

# 2. Search for high-quality facts
pkm search --facts-only --certainty high "project status"

# 3. Index new/modified documents
find . -name "*.md" -mtime -1 | pkm index --stdin

# 4. Check relationships
pkm relationships --source today-notes.md

Workflow 3: Research and Analysis

bash
# 1. Search for recent analysis
pkm search \
  --info-type analysis \
  --max-age 30 \
  --certainty high \
  -n 20 \
  "performance optimization"

# 2. Find related documents
pkm relationships --source research-notes.md

# 3. Discover citations
pkm backlinks key-concept.md

# 4. Export for review
pkm search --output json "research topic" | \
  jq '.results[] | {path, score, summary}' > research.json

Workflow 4: Knowledge Base Maintenance

bash
# 1. Find documents needing review
pkm verify-queue

# 2. Run quality audit
pkm quality-audit --output json > audit-results.json

# 3. Find stale content
pkm find-stale

# 4. Re-index updated documents
pkm index --force ./updated-notes/

# 5. Verify improvements
pkm stats -d

Workflow 5: Incremental Updates

bash
# 1. Find recently modified files
find ~/notes -name "*.md" -mtime -7 > recent.txt

# 2. Index only recent changes
pkm index --stdin < recent.txt

# 3. Search fresh content
pkm search --max-age 7 "latest updates"

# 4. Update statistics
pkm stats -d

Workflow 6: Integration with Git

bash
# Index files changed in current branch
git diff --name-only main | \
  grep "\.md$" | \
  pkm index --stdin

# Index uncommitted changes
git diff --name-only | \
  grep "\.md$" | \
  pkm index --stdin

# Re-index entire repository
pkm index --force .

Best Practices

1. Index Strategically

Title indexing (fast, for autocomplete):

bash
pkm index --titles-only ~/notes/

Content indexing (comprehensive, for search):

bash
pkm index --content-only ~/important-docs/

Full indexing (both):

bash
pkm index ~/knowledge-base/

2. Use Quality Filters Effectively

For verified information:

bash
pkm search --facts-only --certainty high "API endpoints"

For recent insights:

bash
pkm search --info-type analysis --max-age 14 "optimization"

For brainstorming:

bash
pkm search --info-type idea --exclude-stale "features"

3. Maintain Freshness

bash
# Regular freshness check
pkm find-stale

# Periodic re-indexing
pkm index --force ./active-projects/

# Exclude stale from searches
pkm search --exclude-stale "current work"

4. Track Relationships

bash
# After creating new note with wikilinks
pkm index-doc new-note.md
pkm relationships --source new-note.md

# Understand impact before editing
pkm backlinks important-concept.md

5. Regular Quality Audits

bash
# Weekly audit
pkm quality-audit --output json > audit-$(date +%Y%m%d).json

# Area-specific review
pkm quality-audit --area architecture

# Track verification queue
pkm verify-queue

6. Organize with Extensions

bash
# Index markdown notes
pkm index --extensions md ~/notes/

# Include PDFs and markdown
pkm index --extensions md,pdf ~/research/

# Text files only
pkm index --extensions txt ~/logs/

7. Use Appropriate Thresholds

Broad exploration:

bash
pkm search --min-score 0.05 "general topic"

Balanced results:

bash
pkm search --min-score 0.1 "specific concept"

High precision:

bash
pkm search --min-score 0.2 "exact information"

Integration Setups

Claude Desktop (MCP)

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

json
{
  "mcpServers": {
    "pkm": {
      "command": "pkm",
      "args": ["mcp"],
      "env": {
        "PKM_ROOT": "/Users/username/Documents/notes",
        "PKM_DB_PATH": "/Users/username/.pkm/db"
      }
    }
  }
}

VSCode (LSP)

  1. Start LSP server: pkm lsp
  2. Configure editor to connect to LSP endpoint
  3. Get wikilink autocomplete in markdown files

Advanced Usage

Custom Database Locations

bash
# Work with multiple knowledge bases
pkm search --db-path ~/work-kb "work queries"
pkm search --db-path ~/personal-kb "personal queries"

# Separate workspace and database
pkm index \
  --workspace-root ~/Documents/notes \
  --db-path ~/kb/notes-index

Scripting and Automation

bash
# Daily index automation
#!/bin/bash
cd ~/notes
find . -name "*.md" -mtime -1 | pkm index --quiet --stdin
pkm stats --output json > ~/stats/$(date +%Y%m%d).json

# Weekly quality report
#!/bin/bash
pkm quality-audit --output json > audit.json
pkm find-stale > stale.txt
pkm verify-queue > queue.txt

Batch Processing

bash
# Process multiple directories
for dir in ~/notes/*/; do
  echo "Indexing $dir"
  pkm index "$dir"
done

# Selective re-indexing
pkm stats --output json | \
  jq -r '.tables[] | select(.doc_count < 10) | .name' | \
  xargs -I {} pkm index --force --table {}

Troubleshooting

Issue: Search returns no results

Solutions:

bash
# Check if content is indexed
pkm stats -d

# Lower score threshold
pkm search --min-score 0.01 "query"

# Remove quality filters
pkm search "query"  # No filters

# Verify database path
pkm search --db-path ~/kb -v "query"

Issue: Stale documents not detected

Solutions:

bash
# Force re-index
pkm index --force .

# Check verbose output
pkm find-stale -v

# Verify workspace root
pkm find-stale --workspace-root ~/notes

Issue: Relationships not tracked

Solutions:

bash
# Index document for relationships
pkm index-doc document.md

# Verbose indexing
pkm index-doc -v document.md

# Re-index entire workspace
pkm index --force .

Issue: Poor search quality

Solutions:

bash
# Enable hybrid search (vector + BM25)
pkm index .  # Default is hybrid

# Adjust filters
pkm search --min-score 0.05 "query"

# Check for sufficient indexed content
pkm stats -d

Issue: LSP/MCP not working

Solutions:

bash
# Verify server starts
pkm lsp -v
pkm mcp -v

# Check environment variables
echo $PKM_ROOT
echo $PKM_DB_PATH

# Restart server
pkill -f "pkm lsp"
pkm lsp -v

Quick Reference

bash
# Indexing
pkm index                                # Index current directory
pkm index ~/notes/                       # Index specific directory
pkm index --titles-only ~/notes/         # Titles only (LSP)
pkm index --force ~/notes/               # Force re-index
pkm index --extensions md,pdf ~/docs/    # Specific file types

# Searching
pkm search "query"                       # Basic search
pkm search -n 10 "query"                 # Limit results
pkm search --facts-only "query"          # Facts only
pkm search --fresh-only "query"          # Fresh only
pkm search --certainty high "query"      # High certainty
pkm search --max-age 30 "query"          # Last 30 days

# Relationships
pkm relationships --source note.md       # Show outgoing links
pkm backlinks note.md                    # Show incoming links
pkm index-doc note.md                    # Index for relationships

# Quality management
pkm quality-audit                        # Audit workspace
pkm find-stale                          # Find stale documents
pkm verify-queue                        # Documents needing review
pkm stats -d                            # Detailed statistics

# Servers
pkm mcp                                 # Start MCP server
pkm lsp                                 # Start LSP server

# Output formats
pkm search --output json "query"        # JSON output
pkm stats --output json                 # JSON stats
pkm quality-audit --output json         # JSON audit

Common Patterns

Pattern 1: Quick Fact Lookup

bash
pkm search --facts-only --certainty high -n 5 "API authentication"

Pattern 2: Recent Analysis

bash
pkm search --info-type analysis --max-age 30 --fresh-only "optimization"

Pattern 3: Explore Related Content

bash
pkm relationships --source research.md && \
pkm backlinks research.md

Pattern 4: Daily Maintenance

bash
find . -name "*.md" -mtime -1 | pkm index --quiet --stdin && \
pkm find-stale

Pattern 5: Quality-Focused Search

bash
pkm search \
  --facts-only \
  --certainty high \
  --fresh-only \
  --min-score 0.15 \
  -n 10 \
  "deployment procedures"

Summary

Primary use cases:

  • Personal knowledge management with quality awareness
  • Temporal tracking of document freshness
  • Relationship discovery and backlink tracking
  • Quality audits and knowledge base maintenance
  • Integration with Claude via MCP

Key advantages:

  • Quality filtering (certainty, info type)
  • Freshness tracking (temporal awareness)
  • Hybrid search (semantic + full-text)
  • Relationship tracking (wikilinks, backlinks)
  • Token-efficient results for Claude
  • LSP integration for editor autocomplete

Most common commands:

  • pkm index ~/notes/ - Index workspace
  • pkm search --facts-only --fresh-only "query" - Quality search
  • pkm relationships --source note.md - Find relationships
  • pkm quality-audit - Audit knowledge base
  • pkm stats -d - Analyze workspace

Expand your agent's capabilities with these related and highly-rated skills.

Didn't find tool you were looking for?

Be as detailed as possible for better results