cd /news/ai-agents/i-built-a-local-index-of-my-own-work… · home topics ai-agents article
[ARTICLE · art-23581] src=dev.to pub= topic=ai-agents verified=true sentiment=↑ positive

I built a local index of my own work, then plugged it into Claude Code

A developer built a local SQLite index called DevRecall that consolidates activity from Git, GitHub, Jira, Linear, Confluence, Slack and Google Calendar into a searchable CLI tool. The developer then added an MCP server adapter, allowing Claude Code to query the index directly from the editor — enabling the coding agent to retrieve real project context like past bug fixes, Jira tickets and PRs without opening multiple tabs. The tool ships with slash commands for recall, session context injection, note capture and meeting brief generation, and becomes more useful over time as the local database grows from daily syncs.

read4 min publishedJun 6, 2026

I switch between projects a lot, and the most expensive part of starting a session is trying to remember what I was doing. Did I already try X two weeks ago? When did we decide on the Postgres migration approach? Who was on the last Slack thread about that auth bug? My laptop already had the answers, they were just scattered across Git history, the GitHub web UI, Jira, a Slack search box, and one Confluence doc I couldn't find without three guesses.

I had been keeping a side project that consolidated all of that into one local SQLite file. It's a small Go binary called DevRecall that pulls activity from Git, GitHub, Jira, Linear, Confluence, Slack and Google Calendar, runs it through FTS5 and on-device embeddings, and gives me a CLI I can ask "when did I touch the JWT refresh code?" without opening five tabs.

It worked. The CLI and the desktop app got used regularly, the standup and recall queries pulled real signal. Then I added an MCP server, and the tool stopped being something I invoke and started being something Claude Code invokes for me.

MCP is JSON-RPC over stdio. A coding agent (Claude Code, Cursor, Codex CLI, Continue, Zed) launches your server as a subprocess, sends initialize

, then tools/list

, then calls your tools as the user works. Stderr is yours, stdout is the protocol. That's basically the whole story for stdio servers.

The reason this changed things for me: the moment I stopped thinking of "the agent" as something I drove with devrecall chat

in a terminal, and started thinking of it as Claude Code, the existing tool catalogue I had already written for my own chat REPL suddenly belonged in Claude Code too. Same search_activities

, list_activities

, get_activity

, get_related_activities

functions. They did not need to change. They needed a thin adapter that spoke MCP instead of my own chat loop.

I added a devrecall mcp

subcommand. About 300 lines of Go for the protocol layer, plus a config block in the Claude Code plugin:

{
  "mcpServers": {
    "devrecall": {
      "command": "devrecall",
      "args": ["mcp"]
    }
  }
}

After restarting Claude Code, the agent could call any of fifteen tools against my local index. The first useful query I tried was something like "what was that auth bug I fixed in February?". It called current_time

to anchor "February" against today, then semantic_search_activities

with the query, then get_activity

on the top hit, then get_related_activities

to pull in the linked Jira ticket and PR. The output was a paragraph with three citations, all real, none invented.

After that I more or less stopped opening the desktop app for searches. The same data, the same tool catalogue, but invoked from inside the editor as a side effect of whatever I am working on.

The plugin ships four slash commands:

/devrecall:recall <query>

searches the index with citations./devrecall:context [days]

injects a brief of recent activity at the start of a session./devrecall:log <text>

captures a note (a decision, an observation) back into the index, which I use a lot for things I would otherwise forget by next sprint./devrecall:prep <date>

builds a meeting brief: event details plus what each attendee has been working on.Day one the index is empty. You connect sources (devrecall auth jira

, devrecall auth github

, etc.) and the daemon backfills 7 days. The local DB then grows from each sync, so the recall tools get more useful the longer you have it running. On a fresh install your first few queries will return mostly recent stuff. After a few weeks of normal use it starts handing back the kind of context you would otherwise have spent twenty minutes digging up by hand.

If you want history older than a week on a fresh machine, there's devrecall backfill --since 90d

(or --since 1y

). It hits the same APIs your daily sync uses, just with a wider window.

macOS:

brew install --cask pavelpilyak/devrecall/devrecall

That installs the GUI and the CLI. Then in Claude Code:

/plugin marketplace add pavelpilyak/devrecall-claude-plugin
/plugin install devrecall@devrecall

If you don't use Claude Code, the MCP server is just devrecall mcp

and you point any other MCP-compatible client at it (.cursor/mcp.json

, Continue config, Zed settings, etc.). I have hands-on tested Claude Code. The other clients should work because MCP is MCP, but I have not verified each one, so if it breaks somewhere I would like to know. macOS first. The CLI compiles on Linux. The Tauri desktop app has not been packaged for Linux yet, help welcome there.

Source: github.com/pavelpilyak/devrecall. Docs: devrecall.dev. MIT. Local-first by design, no SaaS plane, no telemetry.

── more in #ai-agents 4 stories · sorted by recency
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/i-built-a-local-inde…] indexed:0 read:4min 2026-06-06 ·