Awesome-omni-skill using-contextd
Use when starting any session with contextd - introduces core tools for cross-session memory, semantic code search, and error remediation. REQUIRES contextd MCP server.
git clone https://github.com/diegosouzapw/awesome-omni-skill
T=$(mktemp -d) && git clone --depth=1 https://github.com/diegosouzapw/awesome-omni-skill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/tools/using-contextd" ~/.claude/skills/diegosouzapw-awesome-omni-skill-using-contextd && rm -rf "$T"
skills/tools/using-contextd/SKILL.mdUsing contextd
Prerequisites: contextd MCP Server
This skill REQUIRES the contextd MCP server.
Before using any contextd tools, verify availability:
- Check for
tools (use ToolSearch if needed)mcp__contextd__* - If tools are NOT available:
- Inform user: "contextd MCP server not configured"
- Suggest: "Run
to configure contextd"/contextd:init - Alternative: Use standard Read/Grep/Glob (no cross-session memory)
Error Handling
| Error | Meaning | Fix |
|---|---|---|
| MCP not configured | Run |
| Server not running | Run |
| First use | Will auto-create |
Input Validation Errors
contextd v1.5+ enforces strict input validation. Common errors:
| Error | Cause | Fix |
|---|---|---|
| Path contains | Use absolute paths or paths within project |
| Invalid characters in ID | Use format: , (1-64 chars) |
| Invalid characters in ID | Same as tenant_id format |
| Shell injection chars in glob | Remove , , , from patterns |
| Pattern like | Use standard globs: , , |
Pre-Flight Protocol (MANDATORY)
BEFORE any filesystem operation (Read, Grep, Glob), you MUST:
- Semantic code search with auto grep fallbacksemantic_search(query, project_path: ".")
- Check past learnings and solutionsmemory_search(project_id, query)
Skipping this is a protocol violation.
Core Tools
| Category | Tools | Purpose |
|---|---|---|
| Search | , , | Code lookup by meaning |
| Memory | , , , | Cross-session learning |
| Checkpoint | , , | Context preservation |
| Remediation | , , | Error pattern tracking |
| Context Folding | , , | Isolated sub-tasks |
| Reflection | , | Behavior pattern analysis |
Health Monitoring (HTTP)
contextd exposes HTTP health endpoints for monitoring vectorstore integrity:
| Endpoint | Purpose | Status Codes |
|---|---|---|
| Basic health with metadata summary | 200 OK, 503 Degraded |
| Detailed per-collection status | 200 OK |
Graceful Degradation (P0): If corrupt collections are detected, contextd quarantines them and continues operating with healthy collections. Check health status to detect degraded state.
Example health check:
curl -s http://localhost:9090/health | jq # {"status":"ok","metadata":{"status":"healthy","healthy_count":22,"corrupt_count":0}}
Search Priority
| Priority | Tool | When |
|---|---|---|
| 1st | | Auto-selects best method (indexed or grep fallback) |
| 2nd | | Have I solved this before? |
| 3rd | Read/Grep/Glob | Fallback for exact matches only |
Path Validation (contextd v1.5+)
All tools accepting
project_path validate paths before use:
- No directory traversal: Paths containing
are rejected../ - Affected tools:
,semantic_search
,repository_index
,repository_searchreflect_report - Use absolute paths or paths within the current project directory
The Learning Loop
1. SEARCH at task start (MANDATORY) semantic_search(query, project_path) memory_search(project_id, query) 2. DO the work (apply relevant memories) 3. RECORD at completion memory_record(project_id, title, content, outcome) 4. FEEDBACK when memories helped memory_feedback(memory_id, helpful)
Key Concepts
Tenant ID: Derived from git remote (e.g.,
github.com/fyrsmithlabs/contextd -> fyrsmithlabs). Verify with: git remote get-url origin | sed 's|.*github.com[:/]\([^/]*\).*|\1|'
Project ID: Scopes memories. Use repository name (e.g.,
contextd) or org_repo format for multi-org.
ID Format Requirements (contextd v1.5+)
Both
tenant_id and project_id must follow this format:
- Characters: Lowercase alphanumeric and underscores only (
,a-z
,0-9
)_ - Length: 1-64 characters
- Valid:
,my_project
,contextd
,org123fyrsmithlabs_marketplace - Invalid:
(uppercase, hyphen),My-Project
(slash),org/repo
(dots)project..name
Confidence: Memories have scores (0-1) that adjust via feedback. Higher = ranks first.
What to Record
Good memories:
- Non-obvious solutions
- Patterns that apply broadly
- Design decisions with rationale (the WHY)
- Mistakes and why they failed
Skip recording:
- Trivial fixes (typos, syntax)
- Project-specific details (put in CLAUDE.md)
Recording Design Decisions
When design involves significant discussion, capture the WHY:
{ "project_id": "contextd", "title": "ADR: Registry pattern for DI", "content": "DECISION: Use Registry interface.\nWHY: Idiomatic Go, single mock for tests.\nREJECTED: Passing individual services (constructor bloat).", "outcome": "success", "tags": ["adr", "architecture", "design-decision"] }
Optional: Conversation Indexing
Index past Claude Code sessions to pre-warm contextd:
# Via /init command /init --conversations # What it extracts: # - Error -> fix patterns (remediations) # - Learnings (memories) # - User corrections (policies)
Conversations are scrubbed for secrets before processing.
Common Mistakes
| Mistake | Fix |
|---|---|
| Using Read/Grep before contextd | FIRST |
| Not searching at task start | Always first |
| Forgetting to record learnings | at task completion |
| Re-solving fixed errors | when errors occur |
| Context bloat from sub-tasks | Use for isolation |
Memory Lifecycle
Temporal Decay & Expiration
Memories have a confidence score (0-1) that decays over time without reinforcement:
| Age | Decay Factor | Result |
|---|---|---|
| < 7 days | 1.0 | Full confidence |
| 7-30 days | 0.9 | Slight decay |
| 30-90 days | 0.7 | Moderate decay |
| > 90 days | 0.5 | Significant decay (but never deleted) |
Boost confidence via:
- Resets decay timermemory_feedback(memory_id, helpful=true)- Memory reuse in solutions - Auto-boosted when applied
Expiration policies:
- Auto-archive after 1 year without activityttl_days: 365
- For ADRs and critical decisionsnever_expire: true
Memory Types
| Type | Purpose | Default TTL |
|---|---|---|
| General knowledge gained | 180 days |
| Error -> fix mappings | 365 days |
| ADR/architecture choices | Never |
| What NOT to do | 365 days |
| Reusable code patterns | 180 days |
| STRICT constraints | Never |
Tag memories with type:
tags: ["type:learning", "category:testing"]
Query Expansion & Fuzzy Matching
Automatic Query Expansion
semantic_search and memory_search automatically expand queries:
| Original Query | Expanded To |
|---|---|
| "auth error" | "auth error", "authentication failure", "login issue", "401", "403" |
| "test fails" | "test fails", "test failure", "assertion error", "spec broken" |
| "slow query" | "slow query", "performance", "N+1", "timeout", "latency" |
Disable expansion:
expand_query: false
Fuzzy Matching
Handles typos and variations:
{ "query": "authetication", "fuzzy_threshold": 0.8, // 0-1, higher = stricter "fuzzy_max_edits": 2 // Levenshtein distance }
Results include match quality:
- Literal matchexact
- Meaning matchsemantic
- Typo-tolerant matchfuzzy
Hierarchical Namespaces
Structure project IDs for multi-team organizations:
org/team/project/module Examples: fyrsmithlabs/platform/contextd/api fyrsmithlabs/platform/contextd/vectorstore fyrsmithlabs/marketplace/fs-dev
Search scopes:
- All org memoriesfyrsmithlabs/*
- All platform teamfyrsmithlabs/platform/*
- Specific projectfyrsmithlabs/platform/contextd
Audit Fields
All memory operations record:
| Field | Description | Auto-set |
|---|---|---|
| Agent/session that created | Yes |
| ISO timestamp | Yes |
| Last modification | Yes |
| Times retrieved in searches | Yes |
| Last retrieval timestamp | Yes |
Query audit data:
{ "query": "authentication", "include_audit": true }
Claude Code 2.1 Patterns
Background Task Execution
Use
run_in_background: true for long-running searches:
Task( subagent_type: "general-purpose", prompt: "Search memories for authentication patterns across all projects", run_in_background: true ) // Continue other work... // Later, collect results: TaskOutput(task_id, block: true)
Task Dependencies with addBlockedBy
Chain dependent memory operations:
task1 = Task(prompt: "Index repository") task2 = Task(prompt: "Search indexed code", addBlockedBy: [task1.id]) task3 = Task(prompt: "Record findings", addBlockedBy: [task2.id])
PreToolUse Hook Example
Auto-search memories before any Read operation:
{ "hook_type": "PreToolUse", "tool_name": "Read", "prompt": "Before reading {{tool_input.file_path}}, search memories for relevant context about this file or module." }
PostToolUse Hook Example
Auto-record learnings after successful operations:
{ "hook_type": "PostToolUse", "tool_name": "Edit", "condition": "tool_output.success == true", "prompt": "If this edit fixed a bug or implemented a pattern worth remembering, call memory_record." }
Event-Driven State Sharing
Skills can share state via memory events:
{ "event": "memory_created", "filter": {"tags": ["type:decision"]}, "notify": ["consensus-review", "self-reflection"] }
Subscribe to events:
- New memory recordedmemory_created
- Feedback givenmemory_feedback
- New fix documentedremediation_recorded
- State preservedcheckpoint_saved