一键导入
yams
Code indexing, exact/semantic search, graph-assisted code navigation, and project memory
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Code indexing, exact/semantic search, graph-assisted code navigation, and project memory
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
| name | yams |
| description | Code indexing, exact/semantic search, graph-assisted code navigation, and project memory |
| license | GPL-3.0 |
| compatibility | opencode |
| metadata | {"tools":"cli, mcp","categories":"search, indexing, memory, knowledge-graph"} |
# 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" --cwd . # Code pattern search scoped to current project
yams grep -e "--flag" --cwd . # Explicit pattern for leading '-' text
yams grep -g "*.cpp" "TODO" # rg-style glob filtering
yams grep --minimal "TODO" # Compact grep-style output
yams search "query" # Semantic/hybrid search
# Graph
yams graph --explore <query> # Agent context: symbols, relationships, snippets
yams graph --name <file> # Raw 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
# graph owns path/tree/topology inspection; retired tree is not top-level
# Agent storage
yams list --format json # Scriptable list output
yams list --show-metadata # Include metadata for work item
YAMS is the single source of truth for agent memory and work item.
Attach metadata to every yams add.
task - short task slug (e.g., list-json-refresh)phase - start | checkpoint | completeowner - agent or authorsource - code | note | decision | research# 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 "task=list-json-refresh,phase=checkpoint,owner=codex,source=code"
yams watch # Start watching current directory
yams watch --interval 2000 # Custom interval (ms)
yams watch --stop # Stop watching
yams status # Shows indexed file count
yams list --limit 10 # Recent indexed files
yams grep (fast, regex/literal; use --cwd . for repo scoping)yams search (embeddings/hybrid)yams graph --explore from a search/grep hityams graph, not retired top-level treeyams search, then follow graph_explore_hint when present# Exact pattern
yams grep "function authenticate"
# Regex pattern
yams grep "async.*await.*fetch"
# With context lines
yams grep "TODO" -A 2 -B 2
# Filter by extension
yams grep "import" --ext py
# rg-style glob filter (repeatable)
yams grep -g "src/**/*.cpp" "TODO"
# Compact grep-style output (default is richer agent context)
yams grep --minimal "TODO" -g "src/**/*.cpp"
# Scope to current working directory or an explicit directory
yams grep "TODO" --cwd .
yams grep "TODO" --cwd src/daemon
# Literal text (no regex)
yams grep "user?.name" -F
# Per-file match cap: --limit is an alias for -m/--max-count, not global
# Use search/list --limit for global result caps.
yams grep "TODO" -m 5
# Pattern starts with '-': use -- or explicit -e/--regexp
yams grep -- "--tags|foo" --include="docs/**/*.md"
yams grep --regexp "--tags|foo" -g "docs/**/*.md"
# 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
# Force metadata/FTS path for structured metadata
yams search "task=example-task" --type keyword --limit 10
# Unique task selection (avoid collisions)
yams search "task=example-task" --type keyword --limit 20
# 2) List all used task values with counts
# 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
# Index documentation
curl -s "https://docs.example.com/api" | yams add - --name "api-docs.md" \
--metadata "task=docs-cache,phase=checkpoint,owner=codex,source=research"
# Store with metadata
yams add notes.md --metadata "task=research-auth,phase=checkpoint,owner=codex,source=research"
# 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 "task=auth-decision,phase=checkpoint,owner=codex,source=decision"
# 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.task=="example-task")'
# Metadata + tags are separate in JSON output
yams list --format json --show-metadata \
| jq '.documents[] | {name,metadata,tags}'
# 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
# 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
# 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
Use graph after search/grep finds a likely entry point. Graph answers "what is connected to this?" and should guide local reads, not replace them.
# Preferred follow-up after search/grep hints: ranked symbols + line-numbered snippets
yams graph --explore "authenticateUser" --max-files 3
# Explore a file path when the result path is more useful than a symbol name
yams graph --explore src/auth/login.ts --max-files 8
# JSON for tool consumers
yams graph --explore "RequestHandler" --json
Notes:
yams search and yams grep results may emit graph_explore_hint; run that exact command before broad local search.--explore is budgeted for agents: entry symbols, related files, relationship summaries, and line-numbered snippets.--explore fails or looks stale, fall back to raw traversal plus local reads.# List available node types and relation types
yams graph --list-types
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"
# List scoped node types
yams graph --list-type function --scope-cwd --limit 50
# Show file dependencies and symbols
yams graph --name src/auth/login.ts --depth 2 --limit 50
# Filter by relation type when doing blast-radius review
yams graph --name src/main.ts --relation includes --depth 1
yams graph --node-key "func:authenticate" --relation calls --depth 2
# Output as JSON or DOT
yams graph --name src/auth/login.ts --format json
yams graph --name src/auth/login.ts --format dot > graph.dot
Common relations: calls, includes, contains, defined_in, located_in, has_version, semantic_neighbor.
# Find subsystem clusters and their medoid/bridge/core files
yams graph --topology-snapshots
yams graph --topology-clusters
yams graph --cluster <cluster-id>
Use topology when entering an unfamiliar subsystem. Start with medoids for representative files, bridges for cross-subsystem coupling, and core files for local implementation detail.
YAMS exposes tools via Model Context Protocol for programmatic access.
yams serve # Start MCP server (quiet mode)
yams serve --verbose # With logging
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 |
Notes:
query and execute accept arrays (steps / operations) and run them in order.query.steps[i] result is available to later steps via $prev (e.g., $prev.results[0].hash).describe to discover the parameter schema for an operation at runtime.Example (pipeline: search -> get):
{
"name": "query",
"arguments": {
"steps": [
{"op": "search", "params": {"query": "auth middleware", "limit": 1}},
{"op": "get", "params": {"hash": "$prev.results[0].hash", "include_content": true}}
]
}
}
{
"mcpServers": {
"yams": {
"command": "yams",
"args": ["serve"]
}
}
}
| Variable | Effect |
|---|---|
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 |
# 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
| 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 |