Skip to content

Compiler-accurate context for C and C++ agents.

ByteAsk Context reads your project through its real build, so Claude Code knows where a change belongs, what each call resolves to, and what else has to change.

On every plan, Free included. For Claude Code and other MCP clients.

“Bug report: duplicate packets are sometimes counted as gaps. When seq_no wraps around past 4294967295 back to 1, stats.gaps increments and the duplicate check stops working.”

find_code_for_task# ByteAsk core pack (setting 'default', commit b9fdd0c9eb81, gcc 12.2.0; compiler and build facts, not text search)## Where the change most likely belongs1. tbt::FeedHandler::on_packet - include/tbt/handler.hpp:56-74 `void on_packet(const Packet &pkt)`2. tbt::FeedHandler::stats - include/tbt/handler.hpp:92-92 `const HandlerStats &stats() const`3. tbt::HandlerStats - include/tbt/handler.hpp:25-36## The code of 1 (include/tbt/handler.hpp; line numbers are the file's) 56 void on_packet(const Packet& pkt) { 57 ++stats_.packets; 58 const wire::StreamHeader& h = pkt.header; 59 if (h.stream_id == 0 || h.stream_id > Venue::kStreams) { ++stats_.bad_stream; return; } 60 61 // Line arbitration upstream can forward the same packet twice. 62 uint32_t& last = last_seq_[h.stream_id]; 63 if (h.seq_no <= last) { ++stats_.duplicates; return; } 64 if (h.seq_no != last + 1) ++stats_.gaps; 65 last = h.seq_no; …## What it calls (overloads as the compiler resolved them)- void on_order(const wire::OrderMsg &m) - include/tbt/handler.hpp:109- inline wire::OrderMsg read_order(const uint8_t *body) - include/tbt/decoder.hpp:23## Same shape nearby (often the second place a change needs)- tbt::FeedHandler::Slot::Slot - include/tbt/handler.hpp:98 `explicit Slot(const Instrument &i)` (same parameters)## Test and check- Existing test case of on_packet (new tests go next to it): tests/replay_test.cpp:37 h->on_packet(pkt);

A real answer from ByteAsk to Claude Code on a demo feed-handler repository, trimmed for length.

What your agent can ask

The index is built from your compile_commands.json, so it sees the code your compiler sees.

  • Where does this change belong?

    Places in your code ranked for the task, each with its evidence and the code itself.

  • What does this call actually reach?

    The code and callers of a function, with overloads and template instantiations as the compiler resolved them.

  • What else does this change need?

    The sibling overloads and other call sites a change probably has to touch too.

  • How does fmt do it?

    Search public C and C++ libraries ByteAsk has indexed, such as fmt, abseil and spdlog.

One prompt to set up. One small script, checked first.

Your agent shows every change and the cost before it runs anything.

  1. Paste one prompt

    Your agent registers the ByteAsk MCP server. In Claude Code and Codex it also installs one small hook script after checking its SHA-256, and adds a short instruction block (in ~/.claude/CLAUDE.md for Claude Code).

  2. Sign in

    Choose Allow for the hook in your browser, restart your agent, then finish its MCP sign-in. In Claude Code: type /mcp, pick byteask, choose Authenticate.

  3. Approve what is indexed

    Your agent asks first and previews exactly which files would be uploaded, by folder. Leave any folder out.

  4. Work as usual

    When you describe a bug or change, the hook asks ByteAsk first, so your agent starts from the ranked places. After it edits files, it syncs only the changed ones.

Needs a compile_commands.json, a git repository (a remote is optional) and Python 3. Linux and macOS.

Set up ByteAsk (https://byteask.ai) for me.

Here are your instructions: https://byteask.ai/agent-guide.txt
Read them in full and follow them step by step.
Ask me what you need in one message, then do the whole setup yourself.
Never spend money without asking me first.
Manual setup
Works with
  • Claude Code
  • Codex
  • Cursor
  • Windsurf
  • VS Code
Read the setup guide

What leaves your machine, and what doesn’t.

Indexing uploads source files to ByteAsk. Here is exactly which ones, and how to have them deleted.

Before you approve
No code. No code is uploaded until you sign in and approve indexing a repository.
When you type a task
In a C or C++ git repository, the hook sends your request and the repository’s remote address (or, without a remote, its first commit’s id) to ByteAsk before Claude starts, and adds ByteAsk’s answer to Claude’s context. Anywhere else it sends nothing.
When you approve
The files your build reads, uploaded to ByteAsk’s servers: sources, headers, generated headers and the system headers they include. Only from the folders you keep.
Not uploaded
Docs, test data, assets and .env files.
After your agent edits
Only the changed files from the list you approved.
Read by a model
To rank where a task’s change belongs, a small OpenAI model reads short excerpts of candidate code through OpenAI’s API. Under OpenAI’s API terms, that data is not used for training.
Deleting
Delete a repository or your whole account any time at app.byteask.ai. Access ends at once and copies are removed.
For companies
A dedicated server, or on-prem. Contact us.
Security details in the Trust Center

Start on the Free plan. No card needed.

To remove it later, run the two commands under Remove in the setup guide.