Features
A complete reference to everything ByteAsk can do. All features documented here exist in the shipped binary; nothing is speculative.
Interactive TUI
The default mode. ByteAsk opens a full-screen terminal UI (built with Ratatui + Crossterm) that shows:
- A streaming conversation pane with the model's reasoning and tool calls
- An approval prompt whenever the agent wants to run a shell command or edit a file
- A status line showing the current model, token usage, and session name
- A composer (the input box) at the bottom, with optional Vim keybindings
byteask # open TUI (starts with empty prompt)
byteask "fix the null deref" # open TUI with an initial prompt
The TUI supports slash commands (see Slash Commands), /plan mode for structured multi-step tasks, and side conversations via /side or /btw.
Non-interactive / Scripting mode
Use byteask exec for CI pipelines, shell scripts, or any automation where you don't want the TUI:
byteask exec "add unit tests for parser.cpp"
byteask exec - < prompt.txt # read prompt from stdin
byteask exec --json "refactor the config" # JSONL output on stdout
Key exec flags:
| Flag | Description |
|---|---|
--json | Print events as JSONL (one event per line) |
-o FILE | Write the agent's final message to a file |
--ephemeral | Run without writing any session files to disk |
--ignore-user-config | Skip ~/.byteask/config.toml |
--ignore-rules | Skip .rules files in the project |
--output-schema FILE | Constrain the model's final response to a JSON Schema |
--skip-git-repo-check | Allow running outside a Git repo |
Approval modes
ByteAsk asks for your approval before taking actions. The policy is set via --ask-for-approval (or approval_policy in config):
| Mode | CLI value | Behavior |
|---|---|---|
| On request | on-request | Default. The model decides when to ask; most read-only actions proceed silently |
| Untrusted | untrusted | Only known-safe read-only shell commands auto-approve; everything else requires confirmation |
| Never | never | Never interrupt; failures are fed back to the model automatically |
byteask --ask-for-approval untrusted "audit the build system"
byteask --ask-for-approval never "run all the tests and fix failures"
You can also bypass all approvals (use with care):
byteask --dangerously-bypass-approvals-and-sandbox "..."
# or the alias:
byteask --yolo "..."
The /approve slash command lets you approve a single retry mid-session without changing the global policy.
Sandboxing
ByteAsk sandboxes the shell commands it runs:
- Linux: bubblewrap (
bwrap). Installed automatically byinstall.sh. Falls back to--sandbox danger-full-accessifbwrapis unavailable. - macOS: Native macOS Seatbelt — no extra install required.
Sandbox modes, set via --sandbox:
| Mode | Flag value | Description |
|---|---|---|
| Read-only | read-only | Default. Agent can read any file but cannot write outside approved paths |
| Workspace write | workspace-write | Agent can write anywhere inside the current working directory |
| Full access | danger-full-access | No filesystem restrictions |
byteask --sandbox workspace-write "generate test fixtures"
sandbox_mode in config.toml is a legacy integer field. String sandbox values must go through the --sandbox CLI flag.
C/C++ tooling
ByteAsk ships 18 built-in tools for the C and C++ ecosystem. They are available in every session:
Compiler tools
| Tool | Description |
|---|---|
cpp_compile_db | Generate or update compile_commands.json (via bear/cmake/ninja) |
cpp_nav | Semantic navigation via clangd LSP (go-to-definition, find-references) |
cpp_godbolt | Compile and disassemble on Compiler Explorer with friendly compiler names and library resolution |
cpp_insights | Run C++ Insights to expand templates, lambdas, and range-for loops |
Static analysis
| Tool | Description |
|---|---|
cpp_tidy | Run clang-tidy with your .clang-tidy config |
cpp_format | Apply clang-format formatting |
cpp_check | Run cppcheck static analysis |
Dynamic analysis
| Tool | Description |
|---|---|
cpp_sanitize | Build and run with ASan, UBSan, TSan, or Valgrind |
debug | Run gdb or lldb in batch mode (breakpoints, backtraces, expressions) |
debug_session | Drive an interactive, stateful gdb/lldb session across multiple turns |
debug_attach | AI pair-debugging: attach to a live gdb session already running on your process |
debug_record | Record and replay a deterministic trace with rr |
Profiling
| Tool | Description |
|---|---|
cpp_perf | Profile with Linux perf or Callgrind |
cpp_bench | Micro-benchmark via QuickBench |
Binary analysis
| Tool | Description |
|---|---|
cpp_binary | Inspect binaries with objdump, nm, and readelf |
cpp_symbolize | Symbolize addresses with addr2line (PIE-aware) |
cpp_decompile | Decompile with Radare2 or Ghidra |
Reference
| Tool | Description |
|---|---|
cpp_intrinsic | Look up Intel intrinsics from the full 7 126-entry dataset |
Online tools (cpp_godbolt, cpp_insights, cpp_bench) call their respective public APIs directly from your machine, so no gateway round-trip is needed.
debug_attach lets ByteAsk drive a gdb session you already have open. Start gdb on your process, then prompt ByteAsk to attach — it reads thread state, evaluates expressions, and proposes fixes without touching your session's control flow.
Every C/C++ and reference tool call renders as its own cell in the TUI — you see exactly which tool ran, its arguments, and its output (e.g. cpp_godbolt, or 📚 autosar_ref), inline in the conversation. Nothing the agent runs is hidden.
Grounded reference tools
Beyond the toolchain above, ByteAsk ships grounded reference tools for hardware, firmware, and safety-critical engineering. Each one searches a curated corpus of standards and datasheets and returns verbatim, page-cited excerpts — never a paraphrase from model memory. On a miss it says "no confident match" instead of guessing, which is exactly the class of fact (register offsets, rule numbers, MSR addresses, wire-protocol field offsets) that LLMs hallucinate worst.
| Tool | Corpus |
|---|---|
autosar_ref | C/C++ safety & coding standards — AUTOSAR C++14, MISRA C++:2008, MISRA C:2012, C++ Core Guidelines, ISO C++ (N4950), C11 (N1570) |
mcu_ref | Embedded silicon & firmware — STM32F4 (RM0090), Arm Cortex-M TRMs, ESP32, Modbus, CAN / ISO-TP, MQTT, linker scripts |
fpga_ref | AMD/Xilinx FPGA — UltraScale/7-series transceivers, Vivado/Vitis HLS, LogiCORE IP (Ethernet, PCIe, DMA, DDR4), AMBA AXI / AXI4-Stream |
hft_ref | Trading & low-latency networking — Nasdaq ITCH/OUCH, NYSE Pillar, Cboe PITCH/BOE, FIX/SBE, TCP/IP RFCs, IEEE 1588 PTP, SFP/QSFP |
grid_ref | Grid interconnection & DER — IEEE 1547.1 / 2030.5, SunSpec Modbus, ENA G98/G99, AS/NZS 4777.2, BS EN 50549 |
scpi_ref | Test & measurement — SCPI-1999, VISA, and instrument manuals (Yokogawa, Tektronix, Chroma, Kikusui, and more) |
x86_ref | The x86-64 Software Developer's Manual — instructions, MSRs, encodings |
Two supporting tools round out the set: ref_context (expand around a reference hit) and ref_request (log a gap when the corpus doesn't cover a document you need).
These are ByteAsk-managed — the corpus is hosted by ByteAsk and queried over the network. Only your search query is sent; your code and prompts are not part of the lookup.
Self-hosted models
Point ByteAsk at your own OpenAI-compatible model server (vLLM, TGI, SGLang, Ollama, LM Studio, llama.cpp, a DGX box, or a LiteLLM proxy) and use it in /model like a cloud model — your compute, never metered, prompts never touch ByteAsk's servers.
byteask models add my-model --url http://your-host:8000
byteask models add local-llama --ollama
It appears in the picker as self/my-model. See the dedicated Self-Hosted Models page for the full byteask models add / list / test / remove reference, wire auto-detection, and the tool-calling caveats for open-weight models.
Session management
Every TUI conversation is persisted in a local SQLite database under ~/.byteask/.
CLI subcommands
byteask resume # interactive picker of saved sessions
byteask resume <id> # resume a specific session by ID
byteask fork <id> # branch off a previous session
byteask archive <id> # archive (hide from default list)
byteask unarchive <id> # restore an archived session
byteask delete <id> # permanently delete a session
Inside the TUI, use /resume, /fork, /archive, /delete, or /new (start a fresh session without exiting).
Multimodal input
Attach one or more images to your prompt:
byteask --image screenshot.png "what's wrong with this output?"
byteask -i diagram.png -i callstack.png "explain the crash"
The model receives the image as part of the first message. Supported on any model whose catalog entry lists "image" in input_modalities.
Model configuration
Selecting a model
byteask --model gpt-5.4 "..." # per-invocation
byteask -m claude-opus-4-8 "..."
Or set it permanently in config:
model = "gpt-5.4"
Inside the TUI, use /model to open an interactive model picker. The picker shows all models in your catalog with their context window and capabilities.
Reasoning effort
# "none" | "minimal" | "low" | "medium" (default) | "high" | "xhigh" | "ultra"
model_reasoning_effort = "medium"
Model catalog
ByteAsk uses a JSON model catalog (~/.byteask/models-catalog.json) to extend the built-in model list with provider metadata. The catalog is fetched automatically on first install and on byteask login. The served catalog spans three providers plus an automatic router:
| Provider | Models |
|---|---|
| OpenAI | gpt-5.4 (default), gpt-5.5, gpt-5.6-sol, gpt-5.6-terra, gpt-5.6-luna |
| Auto | auto — automatically picks a model for each query |
| Anthropic | claude-opus-4-8, claude-sonnet-5, claude-sonnet-4-6, claude-fable-5 |
gemini-3.5-flash, gemini-3.1-pro-preview |
All of these route through ByteAsk's managed gateway — you don't need any provider API key. To use your own key instead, see BYOK; to run your own model, see Self-hosted models.
Web search
ByteAsk can search the web while answering your prompt:
byteask --search "what's the latest clang-tidy check for modernize-use-ranges?"
Or enable it persistently:
# "disabled" | "cached" (default) | "indexed" | "live"
web_search = "live"
Additional web search options:
[tools.web_search]
context_size = "medium" # "low" | "medium" | "high"
allowed_domains = ["cppreference.com", "isocpp.github.io"]
MCP support
ByteAsk implements the Model Context Protocol on both sides:
- As a client: connect to any external MCP server and use its tools.
- As a server: expose ByteAsk's capabilities to other MCP clients via
byteask mcp-server(stdio transport).
Connecting an MCP server
[mcp_servers.my-server]
command = "/usr/local/bin/my-mcp-server"
args = ["--port", "8080"]
env = { MY_ENV_VAR = "value" }
enabled = true
Or use HTTP/SSE transport:
[mcp_servers.remote-server]
url = "https://example.com/mcp"
bearer_token_env_var = "MY_SERVER_TOKEN"
Manage servers from the CLI
byteask mcp list
byteask mcp add <name> <command> [args...]
byteask mcp remove <name>
Inside the TUI, use /mcp to list active MCP servers and their tools, or /mcp verbose for full tool schemas.
Run ByteAsk as an MCP server
byteask mcp-server
This starts ByteAsk in stdio MCP server mode, allowing any MCP-compatible client (Cursor, Claude Desktop, etc.) to use ByteAsk as a tool.
Plan mode
Switch the agent into an explicit planning mode where it drafts a step-by-step plan before executing:
/plan
You can review and edit the plan before execution begins. Plan mode uses a separate (higher) reasoning effort by default, configurable via:
plan_mode_reasoning_effort = "high"
Multi-agent / side conversations
| Slash command | Description |
|---|---|
/agent | Switch the active agent thread |
/subagents | List all running agent threads |
/side or /btw | Start an ephemeral fork side conversation — ask a quick question without interrupting the main task |
Memories
ByteAsk can remember facts across sessions. Use /memories to view, add, edit, or delete memories. Memories are stored locally and injected into future system prompts.
[memories]
enabled = true
Hooks
Lifecycle hooks let you run shell commands at specific points in a ByteAsk session (e.g. before the agent edits a file, after it finishes a turn):
[hooks]
pre_tool_call = ["echo 'about to call a tool'"]
post_tool_call = ["./notify.sh"]
Manage and inspect hooks with the /hooks slash command.
Profiles
Named profiles let you switch between config presets:
[profile.ci]
approval_policy = "never"
sandbox = "workspace-write"
model = "gpt-5.4"
byteask --profile ci "fix all test failures"
Vim mode
Enable Vim keybindings in the TUI composer:
/vim # toggle Vim mode for the current session
Or make it the default:
[tui]
vim_mode_default = true
Shell environment policy
Control which environment variables are passed to the agent's shell:
[shell_environment_policy]
inherit = "core" # "all" | "core" | "none"
exclude = ["SECRET_KEY"]
set = { CI = "true" }
include_only = ["PATH", "HOME", "CC", "CXX"]
Plans, usage & credit
ByteAsk accounts run on a usage-metered plan. You can see and manage everything from inside the TUI with the ByteAsk account slash commands.
Usage windows
Usage is metered over two windows that reset independently:
| Window | Resets |
|---|---|
| 5-hour | A rolling 5-hour budget |
| Weekly | A rolling 7-day budget |
Check your remaining budget any time with /usage — it shows a percentage bar and the exact reset time for each window.
Plans
| Plan | Price | Usage |
|---|---|---|
| Free | $0 | Base monthly usage |
| Pro | $20/mo | More usage than Free |
| Max | $100/mo | Highest usage |
Upgrade in place with /upgrade pro or /upgrade max. Your plan activates automatically once payment completes.
Credit ("Extra usage")
Beyond your plan you can hold account credit, shown as the Extra row in /usage. Credit is spent automatically once your plan's 5-hour and weekly budgets are exhausted, so it extends your usage rather than replacing it. Two ways to earn it:
- Referrals —
/referral-codeprints your code plus share commands. When someone installs with your code and signs up, you both get $10 of credit. Hit 3 successful referrals and your first month of Pro is free. The/referral-codecard shows your live progress toward that reward. - Vouchers —
/voucher <code>redeems a voucher for a one-time credit top-up.
Everything about plans and usage is enforced server-side, so it applies to every client the moment it changes. The client never sees dollar amounts for plan usage — only percentages. The single exception is the credit balance, which is inherently a dollar amount.
BYOK (Bring Your Own Key)
Use your own OpenAI, Anthropic, or Gemini API key. Your key is stored locally (~/.byteask/byok-config.json, mode 0600) and traffic goes directly to the provider — it never passes through ByteAsk's servers.
byteask byok set # interactive key setup
byteask byok status # show which models use BYOK vs managed
byteask byok remove # remove a stored key
byteask byok off # disable BYOK for all models
Shell completions
Generate tab completions for your shell:
byteask completion bash >> ~/.bashrc
byteask completion zsh >> ~/.zshrc
byteask completion fish >> ~/.config/fish/completions/byteask.fish
Diagnostics
byteask doctor # check installation, config, auth, and connectivity
byteask debug # sub-tool for inspecting models, traces, and config
byteask features # list all feature flags and their current state