trvon / yams
Install for your project team
Run this command in your project directory to install the skill for your entire team:
mkdir -p .claude/skills/yams && curl -L -o skill.zip "https://fastmcp.me/Skills/Download/2538" && unzip -o skill.zip -d .claude/skills/yams && rm skill.zip
Project Skills
This skill will be saved in .claude/skills/yams/ and checked into git. All team members will have access to it automatically.
Important: Please verify the skill by reviewing its instructions before using it.
Code indexing, semantic search, and knowledge graph for project memory
0 views
0 installs
Skill Content
---
name: yams
description: Code indexing, semantic search, and knowledge graph for project memory
license: GPL-3.0
compatibility: claude-code, opencode
metadata:
tools: cli, mcp
categories: search, indexing, memory, knowledge-graph
---
# YAMS Skill (agent.md)
## Quick Reference
```bash
# Status & Health
yams status # Check daemon and index status
yams daemon start # Start background daemon
yams doctor # Diagnose issues
# Indexing
yams add <file> # Index single file
yams add . -r --include "*.py" # Index directory recursively
yams watch # Auto-index on file changes
# Search (use grep first, search for semantic)
yams grep "pattern" # Code pattern search (fast, exact)
yams search "query" # Semantic/hybrid search
# Graph
yams graph --name <file> # Show file relationships
yams graph --list-types # List node types with counts
yams graph --relations # List relation types with counts
yams graph --search "pattern" # Search nodes by label
# Agent storage
yams list --format json # Scriptable list output
yams list --show-metadata # Include metadata for PBI tracking
yams list --metadata-values pbi # Unique PBI values with counts
```
## Agent Memory Workflow
**YAMS is the single source of truth for agent memory and PBI tracking.**
### Required Metadata (PBI Tracking)
Attach metadata to every `yams add`.
- `pbi` - PBI identifier (e.g., `PBI-043`)
- `task` - short task slug (e.g., `list-json-refresh`)
- `phase` - `start` | `checkpoint` | `complete`
- `owner` - agent or author
- `source` - `code` | `note` | `decision` | `research`
### Index Project Files
```bash
# Index specific file types
yams add . -r --include "*.ts,*.tsx,*.js"
# Index with exclusions
yams add . -r --include "*.py" --exclude "venv/**,__pycache__/**"
# Index with metadata for tracking
yams add src/ -r --metadata "pbi=PBI-043,task=list-json-refresh,phase=checkpoint,owner=codex,source=code"
```
### Auto-Index with Watch
```bash
yams watch # Start watching current directory
yams watch --interval 2000 # Custom interval (ms)
yams watch --stop # Stop watching
```
### Verify Indexing
```bash
yams status # Shows indexed file count
yams list --limit 10 # Recent indexed files
```
## Search Patterns
### Decision Tree
1. **Code patterns** → `yams grep` (fast, regex)
2. **Semantic/concept** → `yams search` (embeddings)
3. **No results from grep** → Try `yams search`
### grep (Code Search)
```bash
# Exact pattern
yams grep "function authenticate"
# Regex pattern
yams grep "async.*await.*fetch"
# Fuzzy matching
yams grep "authentcation" --fuzzy
# With context lines
yams grep "TODO" -A 2 -B 2
# Filter by extension
yams grep "import" --ext py
# Literal text (no regex)
yams grep "user?.name" -F
```
### search (Semantic Search)
```bash
# Concept search
yams search "error handling patterns"
# Hybrid search (default)
yams search "authentication flow" --type hybrid
# Limit results
yams search "database connection" --limit 5
# Filter by file type
yams search "API endpoint" --ext ts
```
### search (Metadata-Only)
```bash
# Force metadata/FTS path for structured metadata
yams search "pbi=PBI-043" --type keyword --limit 10
# Unique PBI selection (avoid collisions)
# 1) Check exact PBI
yams search "pbi=PBI-002" --type keyword --limit 20
# 2) List all used PBI values with counts
yams list --metadata-values pbi
# 3) Choose the next unused PBI-### and continue
# Tag filters (tags are stored as metadata keys: tag:<name>)
yams search "plan" --type keyword --tags plan --limit 10
yams search "tagged logic" --type keyword --tags plan --limit 20
```
## Agent Storage
### Store Research
```bash
# Index documentation
curl -s "https://docs.example.com/api" | yams add - --name "api-docs.md" \
--metadata "pbi=PBI-043,task=docs-cache,phase=checkpoint,owner=codex,source=research"
# Store with metadata
yams add notes.md --metadata "pbi=PBI-043,task=research-auth,phase=checkpoint,owner=codex,source=research"
```
### Store Decisions
```bash
# Pipe decision record
echo "## Decision: Use JWT for auth
### Context
Need stateless authentication for microservices.
### Decision
JWT with RS256, 15min expiry, refresh tokens.
### Rationale
Stateless, scalable, industry standard.
" | yams add - --name "decision-jwt-auth.md" \
--metadata "pbi=PBI-043,task=auth-decision,phase=checkpoint,owner=codex,source=decision"
```
### Retrieve Knowledge
```bash
# Find related decisions
yams search "authentication decision"
# Find by metadata (JSON list is the source of truth)
yams list --format json --show-metadata \
| jq '.documents[] | select(.metadata.pbi=="PBI-043")'
# Metadata + tags are separate in JSON output
yams list --format json --show-metadata \
| jq '.documents[] | {name,metadata,tags}'
```
## Session Management
### Create Work Sessions
```bash
# Start named session
yams session start --name "feature-auth"
# List sessions
yams session ls
# Switch session
yams session use "feature-auth"
# Show current session
yams session show --json
```
### Session Scope
```bash
# Add files to session scope
yams session add --path "src/auth/**"
# Warm session cache (faster searches)
yams session warm --limit 100
# Search within session
yams search "login" --session
```
### Session Lifecycle
```bash
# Save session state
yams session save
# Load previous session
yams session load --name "feature-auth"
# Clear session cache
yams session clear
# End session
yams session close
```
## Graph Queries
### Explore Graph Structure
```bash
# List available node types with counts
yams graph --list-types
# List relation types with counts
yams graph --relations
# Search nodes by label pattern (wildcards: * any chars, ? single char)
yams graph --search "*Controller*"
yams graph --search "auth*"
yams graph --search "handle?Request"
```
### File Relationships
```bash
# Show file dependencies
yams graph --name src/auth/login.ts --depth 2
# Output as JSON
yams graph --name src/auth/login.ts --format json
# Output as DOT (for visualization)
yams graph --name src/auth/login.ts --format dot > graph.dot
```
### Symbol Navigation
```bash
# List all nodes of a type
yams graph --list-type function --limit 50
# Find isolated nodes (potential dead code)
yams graph --list-type function --isolated
# Filter by relation type
yams graph --name src/main.ts --relation imports
```
### Dead Code Detection
```bash
# Find unreferenced functions
yams graph --list-type function --isolated --limit 100
# Generate dead-code report (scoped to src/**)
yams graph --dead-code-report
# Inspect suspicious node
yams graph --node-key "func:authenticate" --depth 2
```
## MCP Integration
YAMS exposes tools via Model Context Protocol for programmatic access.
### Start MCP Server
```bash
yams serve # Start MCP server (quiet mode)
yams serve --verbose # With logging
```
### Available MCP Tools (Code Mode)
The MCP server exposes a small composite tool surface.
| Tool | Purpose |
|------|---------|
| `query` | Read-only pipeline: `search`, `grep`, `list`, `list_collections`, `list_snapshots`, `graph`, `get`, `status`, `describe` |
| `execute` | Write batch: `add`, `update`, `delete`, `restore`, `download` |
| `session` | Session lifecycle: `start`, `stop`, `pin`, `unpin`, `watch` (extensions enabled) |
| `mcp.echo` | Echo utility (optional alias: `mcp_echo` when `YAMS_MCP_RENAME_DOTTED_TOOLS=1`) |
Notes:
- `query` and `execute` accept arrays (`steps` / `operations`) and run them in order.
- Each `query.steps[i]` result is available to later steps via `$prev` (e.g., `$prev.results[0].hash`).
- Use `describe` to discover the parameter schema for an operation at runtime.
Example (pipeline: search -> get):
```json
{
"name": "query",
"arguments": {
"steps": [
{"op": "search", "params": {"query": "auth middleware", "limit": 1}},
{"op": "get", "params": {"hash": "$prev.results[0].hash", "include_content": true}}
]
}
}
```
### MCP Configuration
```json
{
"mcpServers": {
"yams": {
"command": "yams",
"args": ["serve"]
}
}
}
```
### MCP Environment Toggles
| Variable | Effect |
|----------|--------|
| `YAMS_MCP_MINIMAL_TOOLS=1` | Expose only `mcp.echo` (diagnostic mode) |
| `YAMS_MCP_RENAME_DOTTED_TOOLS=1` | Hide dotted tool names from `tools/list` and register `mcp_echo` alias |
| `YAMS_DISABLE_EXTENSIONS=1` | Disable YAMS extensions (removes `session`, disables some methods like `logging/setLevel`) |
| `YAMS_DAEMON_SOCKET=/path.sock` | Override daemon socket path used by MCP server |
## Troubleshooting
```bash
# Check daemon status
yams daemon status -d
# View daemon logs
yams daemon log -n 50
# Full diagnostic
yams doctor
# Repair index
yams doctor repair --all
# Fix embedding dimensions
yams doctor --fix-config-dims
```
## Environment Variables
| Variable | Purpose |
|----------|---------|
| `YAMS_DATA_DIR` | Storage directory |
| `YAMS_DAEMON_SOCKET` | Daemon socket path override |
| `YAMS_LOG_LEVEL` | Logging verbosity |
| `YAMS_SESSION_CURRENT` | Default session |
docs/skills/yams/SKILL.md