Skip to main content
devin-search

ci

OpenSSF Scorecard License: MIT Python 3.10+ GitHub stars Last commit devin-* ecosystem PRs welcome

Part of the DEVIN ecosystem
Track: Understand · Nature: product
For: Developers, AI engineers, Data Scientists
Interface: CLI
Path: Data Scientists · step 2/4 — after devin-graph, before devin-history

devin-search

Unofficial community project. Not affiliated with, endorsed by, or sponsored by Cognition AI. "Devin" is a trademark of Cognition AI.

Linux · Personal Windows · Corporate Windows

Part of the awesome-devin ecosystem: the curated hub for the devin-* tools.

Full-text search across all your Devin sessions — find that command, that error message, that file path or that decision from months ago in under a second.

The problem

Devin keeps your entire session history in local SQLite stores (sessions.db, User/acp-messages/*.db) — but offers no way to search across them. You remember Devin fixed a flaky test or ran a specific kubectl command three weeks ago, and the only way back is scrolling through sessions one by one. Generic grep over the raw databases mostly hits JSON noise and knows nothing about who said what.

Prior art

  • Full-text search over chat/agent history is well-established: everything here leans on SQLite's built-in FTS5 engine with BM25 ranking — the same approach used by ripgrep-style tools, mail clients and sqlite-utils.
  • tokmesh and UniSessions document/parse the CLI sessions.db; the schema itself is tracked by devin-internals-spec, which this project uses for versioned, read-only access.
  • devin-history (sibling repo) exports sessions to Markdown/JSON; devin-search complements it with instant ranked lookup instead of a static dump.

What makes it Devin-native

Results are role-tagged and session-linked, not raw grep hits. The indexer understands Devin's real message structure through devin-internals-spec's typed parsers: user prompts vs assistant replies vs tool calls (including prompt_history shell commands and GUI acp-messages sessions), each stamped with its working directory and a ref back to the exact source row. And because the store schema has had 17 migrations already, indexing fails loudly on an unknown schema version instead of silently misreading it.

Install

Requires Python ≥ 3.10 and pipx or uv: uv tool install devin-search or pip install devin-search. Per-OS setup lives in the platform guides: Linux · Personal Windows · Corporate Windows.

Usage

# build/update the index (auto-detects Devin's stores; safe to re-run —
# only new rows are indexed each time)
devin-search index

# search everything
devin-search query "kubectl delete pod"

# filters: role, project, date, limit — --json on every command
devin-search query "TypeError" --role assistant --project myrepo
devin-search query "migration" --since 2026-09-01 --limit 5 --json

# link hits to devin-history export notes
devin-search query "kubectl" --history-dir ~/notes/devin-history

# deterministic index: sessions.db only, never the auto-detected acp dir
devin-search index --no-acp

# zero-hit stats from the local query log (evidence for/against semantic
# search — SE-1's trigger; log is opt-out via query --no-log)
devin-search misses

Hits print as WHEN · ROLE · PROJECT · SESSION · SNIPPET with the match wrapped in «»; each hit carries a ref (e.g. node:1234, acp:file.db:7) pointing back to the exact source row.

With --history-dir <dir> pointing at a devin-history export directory, each hit whose session has an exported note gets a note: <path> line under its row (and a history_note field in --json). Notes are matched by the <YYYY-MM-DD>_<session-id>.md filename devin-history writes (.json exports work as a fallback). A missing note produces no link and no error — the flag is purely additive.

Works with Devin alone (Devin-only mode)

devin-search builds and queries a fully local index over Devin's session stores. Nothing is sent anywhere; the index lives on your disk next to the data it covers.

Platform support

Tested on Windows and Linux (windows-latest + ubuntu-latest in CI). The CLI session DB is auto-detected from %APPDATA%/devin/cli/sessions.db on Windows and $XDG_DATA_HOME/devin/cli/sessions.db on Linux (default ~/.local/share/devin/cli/sessions.db). ACP logs are searched under $XDG_CONFIG_HOME/Devin/User/acp-messages (default ~/.config/Devin/User/acp-messages). A legacy ~/.config/devin layout is also checked. Use --sessions-db or --acp-dir to override.

Limitations

  • Schema-gated. Only sessions.db schema v15–v17 is accepted; newer versions fail loudly (update devin-internals-spec first).
  • Opaque payloads. chat_message, tool_call_*_json and acp payload formats are undocumented/unstable — text extraction is best-effort and tolerant, not contractual.
  • Keyword search only (M1). BM25 over tokens — no synonyms or embeddings; semantic search is an opt-in M2 candidate.
  • Deletion lag. New rows are picked up incrementally, but rows deleted mid-table upstream can stay in the index until --rebuild (tail-pruned sources are detected and re-indexed automatically).
  • Read-only by design — the tool never writes to Devin's stores; the only file it creates is search.db.

Development

pip install -e ".[dev]"
pytest

Fixtures are generated at test time by devin_internals.fixtures (real v17 DDL, synthetic rows) — no binary fixtures are committed.

Adapters (MCP server, Devin skill, plugin)

devin_search.mcp_server exposes one read-only tool via the devin-search-mcp entry point (pip install 'devin-search[mcp]'): search_query (same JSON as devin-search query --json).

adapters/ is a self-contained Devin plugin root (adapters/.devin-plugin/plugin.json + adapters/skills/devin-search/SKILL.md), installed with devin plugins install Icaro0310/devin-explore#packages/search/adapters — it ships in the repo, not inside the wheel. The manifest launches the server through uvx --from 'devin-search[mcp]' devin-search-mcp, which resolves once the matching PyPI release ships; until then run the source-installed devin-search-mcp directly or point a local manifest copy at the checkout (uvx --from './packages/search[mcp]' devin-search-mcp).

MCP host configs

Same stdio server in other hosts — server name devin-search:

Zed — context_servers in ~/.config/zed/settings.json:

{ "context_servers": { "devin-search": { "command": { "path": "devin-search-mcp", "args": [] } } } }

JetBrains AI Assistant — Settings → Tools → AI Assistant → Model Context Protocol → Add:

{ "mcpServers": { "devin-search": { "command": "devin-search-mcp" } } }

Antigravity — ~/.gemini/config/mcp_config.json:

{ "mcpServers": { "devin-search": { "command": "devin-search-mcp" } } }

When to use this

  • You remember Devin ran a command, hit an error, touched a file, or made a decision, and scrolling sessions one by one is too slow.
  • You want ranked results tagged by role (user / assistant / tool call) with a ref back to the exact source row.
  • Your session history must stay on disk — the index is fully local, no telemetry, no network calls.
  • You want incremental indexing: re-running devin-search index only picks up new rows.

When NOT to use this

  • You need semantic or synonym-aware search — M1 is keyword BM25 only; embeddings are an opt-in M2 candidate.
  • You need session observability (activity, context size, token peaks) — use devin-metrics; or relationship queries — use devin-graph.
  • Your sessions.db schema is outside v15–v17 — indexing refuses loudly rather than misreading it.

FAQ

What is devin-search? A local full-text search engine over your Devin session history. It indexes Devin's SQLite stores with FTS5/BM25 and answers queries like devin-search query "kubectl delete pod" in under a second, with results tagged by role and linked back to the source row.

Does devin-search send my session data anywhere? No. Everything runs locally: it reads Devin's stores read-only and writes a single search.db index next to your data. There are no network calls and no telemetry.

Does it write to or modify Devin's databases? No. Devin's stores are opened read-only by design; the only file devin-search creates is its own search.db index.

How is this different from devin-history? devin-history exports sessions to static Markdown/JSON files. devin-search complements it with instant ranked lookup across all sessions, without exporting anything.

License

MIT — see LICENSE.

Metadata

Release files for devin-search 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for devin-search 0.1.2
File Size Uploaded
devin_search-0.1.2.tar.gz 31.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for devin-search 0.1.2
File Interpreter ABI Platform
devin_search-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 54.2 kB

Release files / devin_search-0.1.2.tar.gz

Download URL devin_search-0.1.2.tar.gz
Size 31.4 kB
Tags Source
SHA-256 checksum
How to use checksums
b15f5f84fe1ea4c4bb727a50925ff02810b5ae9773c8f96bb67d76a02e20c27a
BLAKE2b-256 checksum
How to use checksums
90006d5881b3f52726735fc116c977f52031118ae969362a0f4df19a66a8d4de
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / devin_search-0.1.2-py3-none-any.whl

Download URL devin_search-0.1.2-py3-none-any.whl
Size 22.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8a13183e413144f60b8b35cc7d327d6e03fa80b6615d90d3706379eb7353a47f
BLAKE2b-256 checksum
How to use checksums
cea5b1e841a25a6e065a9a67ac667ccd4f506b7a83a906f4917b7a38733400c4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release history Release notifications | RSS feed

0.2.1

2 release files

0.2.0

2 release files

This release

0.1.2 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page