AI coding agent for C and C++

Backed by Y Combinator

Writes C++. Proves it compiles, runs, and passes.

ByteAsk works in your terminal. It edits the code, runs the compiler, the sanitizers and your tests, and can drive the gdb session you already have open. You review the diff.

$ curl -fsSL https://code.byteask.ai/install.sh | sh

Zero data retention. Your code is processed, then dropped.

~/orderd — byteaskrunning
0 tool calls
Apply this change?
ApproveSkip

Works with the tools you already use

C/C++C/C++LLVMLLVMGCCGCCclangclangCompiler ExplorerCompiler ExplorergdbgdbValgrindValgrindSanitizersSanitizers
perfperfmakemakeCMakeCMakeQuickBenchQuickBenchvcpkgvcpkgConanConanGitGitLinuxLinux

It does the work you would have checked anyway

Built-in C and C++ tools
Tools used this turn
⚙g++2 calls
▶gdb3 calls
◔valgrind1 call
≋perf1 call
◈objdump2 calls

Compilers, sanitizers, debuggers, profilers and binary analysis, each one a visible tool call.

Grounded reference corpora
Results
ISO C++ · [dcl.init]
“…the object is value-initialized…”
[1]
ARM ARM · D5.2
“…register offset 0x1C, bit 3…”
[2]
MISRA · no match
Reported as a miss, not guessed.
miss

Standards and datasheets returned as excerpts, or an explicit miss.

Intel intrinsics indexed
Intrinsics Guide
__m256 _mm256_add_ps(__m256 a, __m256 b)
Latency4
Throughput0.5
CPUIDAVX
Headerimmintrin.h

The full dataset, looked up rather than recalled.

It runs the compiler
Build
✓cmake -B build0.8s
✓g++ -O2 -Wall1.4s
✓ctest3/3
○Diff ready

Your flags, your build system. The diff you review has already been built.

It joins your gdb
gdb · orderd bridge armed
(gdb) bt
#0 cancel_all()
#1 main()
(gdb) byteask attach
joined · breakpoints kept

Through a bridge you arm yourself, inside the session you already have open.

It shows the raw output
AddressSanitizer
heap-buffer-overflow
WRITE of size 8
#0 cancel_all()
  order_book.cpp:88
#1 main
  order_book.cpp:141

Frames, files and line numbers intact, so you can audit the reasoning.

It asks before it acts
Proposed change
− for (i = 0; i <= n; ++i)
+ for (i = 0; i < n; ++i)
ApproveSkip

Read-only commands run. Anything that changes state is proposed first.

It joins the gdb session you already have open.

Linux allows one debugger per process. ByteAsk joins through a bridge you start in your gdb, reads the live state, and asks before it changes anything.

How a session is wired.

A shell agent · Claude CodeLocked out
claude, ~/orderd Your gdb is holding the process. One tracer per process. The kernel refuses a second debugger while yours is attached.
In your session · byteaskJoined
byteask, ~/orderd Your gdb is stopped on the bug, and you ask an agent for help. Joined through the bridge you started. Your breakpoints are still set for the next turn.

Your gdb holds the process. A second debugger is refused by the kernel. ByteAsk goes through the bridge you started. Check it yourself: while your gdb holds a process, run gdb -p <pid> in another shell.

You get the tool's full output.

ByteAsk builds with your flags, runs the sanitizers, and runs your tests. It hands back the raw report with the frames, files and line numbers intact, so you can check the agent's reasoning against the same evidence.

g++ 12.2 · AddressSanitizerOverflow
ERROR: AddressSanitizer: heap-buffer-overflow WRITE of size 8, thread T0 #0 cancel_all() order_book.cpp #1 main order_book.cpp

g++ 12.2 with AddressSanitizer, captured 2026-09-03. Source and script in demo/outputs. The overflow is the one bug in order_book.cpp: cancel_all() walks the level array one iteration too far.

ctestPassed
1/3 Test #1 ... Passed 2/3 Test #2 ... Passed 3/3 Test #3 ... Passed 100% tests passed, 0 tests failed

ctest on the same tree, same run. The three demo tests from the same tree, each a plain executable that returns zero when it passes. Nothing in these two blocks was typed by hand. They are what the tools printed.

Every tool call is visible

Each one runs as its own step you can see, with its arguments and its output, so nothing the agent does is hidden behind a summary.

Compile and navigate
Symbols · clangd
▾ OrderBookclass
add_order()fn
cancel_all()fn
levels_field
▸ Matcherclass
▸ Lexerclass

It reads the project the way clangd does. Generates compile_commands.json, then navigates by symbol rather than by grep.

clangdCMakeCompiler ExplorerC++ Insights
Find the bug
Debug session
✓ASan clean0 reports
!UBSan: signed overflowline 52
✓TSan clean
⏪rr replaystep 412

Sanitizers, debuggers and deterministic replay. ASan, UBSan, TSan and Valgrind, batch and stateful gdb or lldb, and rr for a trace you can replay.

ASangdblldbValgrindrr
Static analysis
.clang-tidy · from your tree
modernize-use-nullptr
bugprone-use-after-move
performance-unnecessary-copy
readability-braces
cppcoreguidelines-*

Your config, not ours. clang-tidy and clang-format read the .clang-tidy and .clang-format already in your tree.

clang-tidyclang-formatcppcheck
Profiling
Hot path · perf
mainmatch()cancel_all
cancel_all()41%

Measure, then change. perf and Callgrind for the real workload, QuickBench for a single function.

perfCallgrindQuickBench
Binary analysis
objdump -d order_book
4011a2: 48 8b 45 f8 mov rax,[rbp-8]
4011a6: 48 83 c0 08 add rax,8
4011aa: c6 00 00 mov [rax],0
4011ad: e8 3e fe ff call free
4011b2: c9 leave

Down to the instruction. objdump, nm and readelf, PIE-aware symbolization, and decompilation when there is no source.

objdumpnmreadelf
Reference documents
Datasheet · §6.2
“The control register is at offset 0x1C. Bit 3 enables the transmit interrupt.”
Source[1] MCU-DS rev C
Matchexact passage

Reference documents it can cite. Built-in reference tools search these standards and datasheets and return the exact passage with a citation. If there is no match, they say so instead of guessing.

Use our models, your key, or your own server

Signed in. No key to paste.

Managed

Sign in and use OpenAI, Anthropic and Google models through ByteAsk. No API key to paste.

sk-••••••••••3f2a
straight to the provider

Your key

Use your own OpenAI, Anthropic or Gemini key. Traffic goes straight to the provider, not through ByteAsk.

localhost:11434 · not metered

Your server

Point ByteAsk at vLLM, Ollama, llama.cpp, LM Studio, TGI, SGLang or a LiteLLM proxy. Self-hosted models are not metered.

Four steps, then you are reviewing a diff

01

Install

One line on Linux, macOS or Windows, or a plugin for your editor.

02

Sign in

Sign in with a link sent to your email.

03

Describe the change

Say what you want in plain language, in your terminal.

04

Review the diff

It has already been built, run and tested.

Use it where you already write code.

A plugin for 6 editors, all driving the same CLI. Pick one, or stay in the terminal.

Also on Windsurf and VSCodium via Open VSX.

Every connector needs the byteask CLI on your PATH. Check with byteask --version.

Pick your platform

$ irm https://code.byteask.ai/install.ps1 | iex

Your code stays yours.

Zero-retention by design. Your machine carries a short-lived token and nothing more.

Zero data retention
Request processing
order_book.cpp
cancel_all() { … }
// prompt: "fix the overflow"
token = 7f3a…e1
✓Dropped. Nothing is kept.

Your prompts and code are processed to answer the request, then dropped. Nothing is kept. Read the privacy policy

Not used to train models
Training data
model training set
📁 your-repo/
Not today

Your repositories are not used to train any model. Ours or anyone's.

Passwordless sign-in
Sign in
byteask.ai/login?t=••••••••
Signed-in user
Signed in
No password. Nothing to paste.
✦✦✦

A signed magic link logs you in. No password to manage, and nothing to paste or leak.

The questions that decide it

ByteAsk joins the gdb session you already have open through a bridge you start, instead of competing with it for the process. It also builds, runs the sanitizers and runs your tests before you see the diff.

Linux allows one debugger per process. While your gdb is attached, the kernel refuses a second one. Check it yourself: run gdb -p <pid> in another shell.

No. Use managed models with no key to paste, your own OpenAI, Anthropic or Gemini key, or point ByteAsk at your own server.

Self-hosted models are not metered.

Reference tools search the standards and datasheets and return the exact passage with a citation. If there is no match, they say so instead of guessing.

There is a plugin for 6 editors, all driving the same CLI, plus Windsurf and VSCodium via Open VSX. Every connector needs the byteask CLI on your PATH.

Install ByteAsk.

Writes the change, then proves it compiles, runs and passes.

$ curl -fsSL https://code.byteask.ai/install.sh | sh
  1. 1
    Sign inwith a link sent to your email.
  2. 2
    Open your repoand run byteask in the terminal.
  3. 3
    Describe the changethen review a diff that has already been built and tested.