Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Index a source-code repo into the Memtrace knowledge graph and poll the job to completion. Use when the user asks to index, parse, ingest, reindex, watch, or prepare a source-code repo for Memtrace analysis, when code exploration needs an index, or when searches return 0/partial results for source paths under an indexed root. Use this before Grep, Glob, rg, find, or manual code search whenever the repo can be indexed. For ongoing watch mode / live re-indexing after the initial index, use memtrac
.claude/skills/syncable-dev-memtrace-index/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-10 | ✗→✓ | ▲ Improved | 14% | 0% |
| case-11 | ✗→✓ | ▲ Improved | -24% | 0% |
| case-12 | ✗→✓ | ▲ Improved | -30% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 19% | 0% |
| case-14 | ✗→✓ | ▲ Improved | -30% | 0% |
Index a local codebase into the persistent code knowledge graph. This is always the first step — it parses every source file, resolves cross-file relationships, detects API endpoints/calls, runs community detection and process tracing, and embeds all symbols for semantic search.
| Parameter | Purpose | |-----------|---------| | path | Absolute path to the directory to index | | incremental | Only re-parse changed files (use for subsequent runs) | | clear_existing | Wipe and rebuild from scratch |
> Parameter types: MCP parameters are strictly typed. Numbers (limit, depth, min_size, last_n, etc.) must be JSON numbers — not strings. Use limit: 20, never limit: "20". Passing a string yields MCP error -32602: invalid type: string, expected usize.
Full parameter spec for every Memtrace tool: references/mcp-parameters.md (bundled at the memtrace-skills plugin root).
Use the list_indexed_repositories MCP tool first. If the repo is already indexed and recent, skip to step 4.
Success criteria: You have a list of repo_ids and their last-indexed timestamps.
If a repo is present but searches miss a source subdirectory under that repo root (for example ui/, memtrace-ui/, web/, frontend/, or src/), treat that as a stale/partial index. Do not use grep as a workaround. Run incremental indexing on the repo root, then retry the Memtrace query.
Use the index_directory MCP tool:
path to the project root (absolute path)incremental: true if re-indexing after changesclear_existing: true only if a full rebuild is neededIf the selected path is just a folder containing multiple independent git repos, do not index that parent folder unless the user explicitly wants a shared workspace. For separate repos, index each repo root separately. For intentional sharing, ask the user to bless the parent explicitly with memtrace start --bless-workspace first, then verify the boundary with memtrace workspace status <path>.
Success criteria: You receive a job_id immediately.
Use check_job_status with the job_id every 2–3 seconds. The loop must never run unbounded — hard cap at ~100 polls (~5 minutes). On hitting the cap: stop polling, report the job_id and last observed status to the user, and tell them the job keeps running server-side — they (or you, later) can resume with check_job_status on that job_id or find it via list_jobs.
Pipeline stages in order: scan → parse → resolve → communities → processes → persist → embeddings → api_detect → done
Wait until status = "completed". If status = "failed", report the error message to the user.
After indexing completes, call list_indexed_repositories to confirm the repo appears with correct node/edge counts. Report: repo_id, languages detected, total symbols, total relationships.
Save the repo_id — most other memtrace tools require it.
| Error | Action | |-------|--------| | Path does not exist | Ask user to verify the absolute path | | Job status "failed" | Report the error message; suggest clear_existing: true for a fresh rebuild | | Timeout (job running > 5 min) | Large repos are normal, but respect the poll cap: stop, report job_id + last status, resume later via check_job_status / list_jobs. For monorepos, index subdirectories separately | | Already indexed | Use incremental: true to update, or skip indexing entirely |
index_directory returns a job handle immediately; check_job_status tracks it to a terminal state:
json{ "job_id": "6f9a2c1e-...-uuid" } { "status": "completed" }
While running, the job advances through the pipeline stages listed in step 3; status = "failed" carries an error message. The final user-facing report (confirmed via list_indexed_repositories) covers: repo_id, languages detected, total symbols, total relationships (node/edge counts).
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 5,028 | 3,221 | -36% | 1 | 1 | 0% | 308 | 1,300 | +322% | 0 | 0 | — |
case-02 | fail→fail | 7,228 | 4,157 | -42% | 1 | 1 | 0% | 469 | 1,342 | +186% | 0 | 0 | — |
case-03 | fail→fail | 10,904 | 5,391 | -51% | 1 | 1 | 0% | 738 | 1,312 | +78% | 0 | 0 | — |
case-04 | fail→fail | 9,246 | 3,123 | -66% | 1 | 1 | 0% | 1,488 | 1,168 | -22% | 0 | 0 | — |
case-05 | pass→fail | 8,761 | 3,705 | -58% | 1 | 1 | 0% | 1,450 | 1,280 | -12% | 0 | 0 | — |
case-06 | fail→fail | 3,203 | 2,811 | -12% | 1 | 1 | 0% | 358 | 1,187 | +232% | 0 | 0 | — |
case-07 | fail→fail | 7,310 | 4,669 | -36% | 1 | 1 | 0% | 1,186 | 1,444 | +22% | 0 | 0 | — |
case-08 | pass→pass | 11,358 | 3,207 | -72% | 1 | 1 | 0% | 1,741 | 1,558 | -11% | 0 | 0 | — |
case-09 | pass→pass | 4,356 | 2,223 | -49% | 1 | 1 | 0% | 742 | 1,413 | +90% | 0 | 0 | — |
case-10 | fail→pass | 8,940 | 3,636 | -59% | 1 | 1 | 0% | 1,475 | 1,686 | +14% | 0 | 0 | — |
case-11 | fail→pass | 11,594 | 3,028 | -74% | 1 | 1 | 0% | 1,843 | 1,402 | -24% | 0 | 0 | — |
case-12 | fail→pass | 11,592 | 2,578 | -78% | 1 | 1 | 0% | 2,058 | 1,432 | -30% | 0 | 0 | — |
case-13 | fail→pass | 29,418 | 2,687 | -91% | 1 | 1 | 0% | 1,239 | 1,474 | +19% | 0 | 0 | — |
case-14 | fail→pass | 12,649 | 3,344 | -74% | 1 | 1 | 0% | 2,214 | 1,544 | -30% | 0 | 0 | — |
case-15 | fail→fail | 12,306 | 3,539 | -71% | 1 | 1 | 0% | 2,066 | 1,439 | -30% | 0 | 0 | — |
case-16 | pass→pass | 5,540 | 2,284 | -59% | 1 | 1 | 0% | 852 | 1,343 | +58% | 0 | 0 | — |
case-17 | fail→pass | 17,536 | 2,807 | -84% | 1 | 1 | 0% | 1,237 | 1,440 | +16% | 0 | 0 | — |
case-18 | pass→pass | 11,389 | 3,627 | -68% | 1 | 1 | 0% | 1,729 | 1,570 | -9% | 0 | 0 | — |
case-19 | fail→pass | 10,748 | 2,986 | -72% | 1 | 1 | 0% | 1,653 | 1,492 | -10% | 0 | 0 | — |
case-20 | fail→pass | 8,531 | 2,114 | -75% | 1 | 1 | 0% | 1,390 | 1,293 | -7% | 0 | 0 | — |
case-21 | fail→fail | 3,005 | 3,293 | +10% | 1 | 1 | 0% | 454 | 1,461 | +222% | 0 | 0 | — |
case-22 | pass→pass | 9,740 | 2,421 | -75% | 1 | 1 | 0% | 1,516 | 1,400 | -8% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 13 counted toward the lift figure. The other 9 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +32 percentage points is the difference between those two pass rates over the 13 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.