Show HN: Semble – Code search for agents that uses 98% fewer tokens than grep

github.com

121 points by Bibabomas 8 hours ago

Hey HN! We (Stephan and Thomas) recently open-sourced Semble. We kept running into the same problem while using Claude Code on large codebases: when the agent can't find something directly, it falls back to grep, reading full files or launching subagents. This uses a lot of tokens, and often still misses the relevant code. There are existing tools for this, but they were either too slow to index on demand, needed API keys, or had poor retrieval quality.

Semble is our solution for this. It combines static Model2Vec embeddings (using our latest static model: potion-code-16M) with BM25, fused via RRF and reranked with code-aware signals. Everything runs on CPU since there's no transformers involved. On our benchmark of ~1250 query/document pairs across 63 repos and 19 languages, it uses 98% fewer tokens than grep+read and reaches 99% of the retrieval quality of a 137M-parameter code-trained transformer, while being ~200x faster.

Main features:

- Token-efficient: 98% fewer tokens than grep+read

- Fast: ~250ms to index a typical repo on our benchmark, ~1.5ms per query on CPU (very large repos may take longer)

- Accurate: 0.854 NDCG@10, 99% of the best transformer setup we tested

- MCP server: drop-in for Claude Code, Cursor, Codex, OpenCode

- Zero config: no API keys, no GPU, no external services

Install in Claude Code with: claude mcp add semble -s user -- uvx --from "semble[mcp]" semble

Or check our README for other installation instructions, benchmarks, and methodology:

Semble: https://github.com/MinishLab/semble

Benchmarks: https://github.com/MinishLab/semble/tree/main/benchmarks

Model: https://huggingface.co/minishlab/potion-code-16M

Let us know if you have any feedback or questions!

jerezzprime 4 hours ago

I'd be interested in seeing actual agent benchmarks (eg CC or Copilot CLI with grep removed and this tool instead).

For example, I have explored RTK and various LSP implementations and find that the models are so heavily RL'd with grep that they do not trust results in other forms and will continually retry or reread, and all token savings are lost because the model does not trust the results of the other tools.

  • stephantul 3 hours ago

    Yeah we're also interested in doing this, it's on the roadmap together with optimization of the prompt and descriptions so that models have an easier time using it.

    Perhaps anecdotally: we do use this tool ourselves of course, and it's been working pretty well so far. Anthropic models call it and seem to trust the results.

  • giancarlostoro 3 hours ago

    I forced Claude to have a global memory for RTK and my own AI memory system (GuardRails) which it happily uses both, the only times it doesnt use GuardRails is if I dont mention it at all, otherwise it always uses RTK unless RTK falls apart running a tool it does not support.

  • nextaccountic 2 hours ago

    Codex CLI is quite happy running RTK. Well with GPT 5.5 xhigh anyway

    One thing that irks me is that when it doesn't support eg. a cli flag of find, it gives an error message rather than sending the full output of the command instead. Then the agent wastes tokens retrying, or worse, doesn't even try because the prompting may make them afraid to not run commands without rtk

    • aleksiy123 1 hour ago

      how effective is RTK for you? worth using?

      • maille 57 minutes ago

        Wondering too

  • AussieWog93 1 hour ago

    I just put something in my global CLAUDE.md (under ~/.Claude) asking it to use the LSP instead of grep and have never had this issue since.

    • gigatexal 1 hour ago

      My q would have been this. Lsp solved this no?

    • yakbarber 1 hour ago

      can you share that prompt?

abcdefg12 2 hours ago

Shouldn’t it be a part of the harness at least for local codebase? I wonder how many harnesses are doing that already.

  • dopidopHN2 2 hours ago

    I'm playing with PI as a custom harness ( for Claude code because that what is provided to me )

    I will try that ! It make sense and I'm curious to see results, for this or any similar projects mentioned in the thread

singpolyma3 2 hours ago

Semantic code search seems like a useful tool for a human too. Not just for agents.

wrxd 1 hour ago

I also like the index feature form https://maki.sh Source code has a lot of structure, using a real parser instead of grepping and reading files can potentially save a lot of tokens

jahala 1 hour ago

This looks great! I built a tool in the same space- and I found that the biggest challenge was often to get the agent to prefer to use the tool over bash tools. What’s your experience with that?

  • Escapade5160 1 hour ago

    Setup hooks. Hooks are how your harness forces compliance with your own rules.

smcleod 2 hours ago

How does it compare to context-mode or serina that are both well established now?

porker 2 hours ago

Congratulations on the release!

Could you add fff to the benchmarks?

ramsono 50 minutes ago

Very useful thanks for sharing!

mrpf1ster 5 hours ago

Does this work well for non-coding documents as well? Say api docs or AI memory files?

  • stephantul 5 hours ago

    Hey, this is something we're actively investigating. We recently added a flag, `--include-text-files`, which, when set, also makes Semble index regular documents (i.e., markdown, text, json). This should also work relatively well.

esafranchik 6 hours ago

Is the benchmark measuring one-shot retrieval accuracy, or Coding agent response accuracy?

  • stephantul 6 hours ago

    Hey! Co-author here. The benchmark currently only measures retrieval accuracy.

    We’re interested in measuring it end to end and also optimizing, e.g. the prompt and tools, for this, but we just haven’t gotten around to it.

    • esafranchik 6 hours ago

      Two follow-ups:

      1) How do you compare accuracy? by checking if the answer is in any of the returned grep/bm25/semble snippets?

      2) How do you measure token use without the agent, prompt, and tools?

      • stephantul 6 hours ago

        1) yes! It’s not accuracy, but ndcg 2) we assume that if the agent gets the correct answer in the returned snippets it does not need to read further

        • esafranchik 5 hours ago

          Wouldn't NDCG/token results vary wildly depending on the agent's query and the number of returned items?

          e.g. agents often run `grep -m 5 "QUERY"` with different queries, instead of one big grep for all items.

          • stephantul 5 hours ago

            The same holds for semble: the agent can fire off many different semble queries with different k/parameters.

            I guess the point we’re trying to make is that you need fewer semble queries to achieve the same outcome, compared to grep+readfile calls.

ludicrousdispla 5 hours ago

grep doesn't need tokens, so what is 98% fewer than zero?

  • stephantul 5 hours ago

    You need readfile to do something with those tokens. Grep only gives you the matching lines, not the context.

    • djaboss 5 hours ago

      `grep -C $NUM` ? ;)

      • stephantul 5 hours ago

        Even so. Take a look at the NDCG numbers for grep. It's not pretty

vikeri 2 hours ago

very curious to give it a spin but why write a cli in python? would surely be faster and more portable with go or rust?

  • skeledrew 1 hour ago

    Perhaps Python is their main language (they seem to be ML peeps, which would make that most likely), which means it's easier for them to do manual reviews even if they're using AI for implementing, etc.