Run any Skill in Manus
with one click
with one click
Run any Skill in Manus with one click
Get Started$pwd:
$ git log --oneline --stat
stars:373
forks:9
updated:April 25, 2026 at 18:48
SKILL.md
| name | yams |
| description | Code indexing, semantic search, and knowledge graph for 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" # 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 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)yams search (embeddings)yams search# 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
# 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
# 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"
# 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
# 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
# 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
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 |