Skip to main content

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:

FlagDescription
--jsonPrint events as JSONL (one event per line)
-o FILEWrite the agent's final message to a file
--ephemeralRun without writing any session files to disk
--ignore-user-configSkip ~/.byteask/config.toml
--ignore-rulesSkip .rules files in the project
--output-schema FILEConstrain the model's final response to a JSON Schema
--skip-git-repo-checkAllow 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):

ModeCLI valueBehavior
On requeston-requestDefault. The model decides when to ask; most read-only actions proceed silently
UntrusteduntrustedOnly known-safe read-only shell commands auto-approve; everything else requires confirmation
NeverneverNever 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 by install.sh. Falls back to --sandbox danger-full-access if bwrap is unavailable.
  • macOS: Native macOS Seatbelt — no extra install required.

Sandbox modes, set via --sandbox:

ModeFlag valueDescription
Read-onlyread-onlyDefault. Agent can read any file but cannot write outside approved paths
Workspace writeworkspace-writeAgent can write anywhere inside the current working directory
Full accessdanger-full-accessNo filesystem restrictions
byteask --sandbox workspace-write "generate test fixtures"
warning

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

ToolDescription
cpp_compile_dbGenerate or update compile_commands.json (via bear/cmake/ninja)
cpp_navSemantic navigation via clangd LSP (go-to-definition, find-references)
cpp_godboltCompile and disassemble on Compiler Explorer with friendly compiler names and library resolution
cpp_insightsRun C++ Insights to expand templates, lambdas, and range-for loops

Static analysis

ToolDescription
cpp_tidyRun clang-tidy with your .clang-tidy config
cpp_formatApply clang-format formatting
cpp_checkRun cppcheck static analysis

Dynamic analysis

ToolDescription
cpp_sanitizeBuild and run with ASan, UBSan, TSan, or Valgrind
debugRun gdb or lldb in batch mode (breakpoints, backtraces, expressions)
debug_sessionDrive an interactive, stateful gdb/lldb session across multiple turns
debug_attachAI pair-debugging: attach to a live gdb session already running on your process
debug_recordRecord and replay a deterministic trace with rr

Profiling

ToolDescription
cpp_perfProfile with Linux perf or Callgrind
cpp_benchMicro-benchmark via QuickBench

Binary analysis

ToolDescription
cpp_binaryInspect binaries with objdump, nm, and readelf
cpp_symbolizeSymbolize addresses with addr2line (PIE-aware)
cpp_decompileDecompile with Radare2 or Ghidra

Reference

ToolDescription
cpp_intrinsicLook 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.

gdb attach

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.

Visible tool cells

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.

ToolCorpus
autosar_refC/C++ safety & coding standards — AUTOSAR C++14, MISRA C++:2008, MISRA C:2012, C++ Core Guidelines, ISO C++ (N4950), C11 (N1570)
mcu_refEmbedded silicon & firmware — STM32F4 (RM0090), Arm Cortex-M TRMs, ESP32, Modbus, CAN / ISO-TP, MQTT, linker scripts
fpga_refAMD/Xilinx FPGA — UltraScale/7-series transceivers, Vivado/Vitis HLS, LogiCORE IP (Ethernet, PCIe, DMA, DDR4), AMBA AXI / AXI4-Stream
hft_refTrading & low-latency networking — Nasdaq ITCH/OUCH, NYSE Pillar, Cboe PITCH/BOE, FIX/SBE, TCP/IP RFCs, IEEE 1588 PTP, SFP/QSFP
grid_refGrid interconnection & DER — IEEE 1547.1 / 2030.5, SunSpec Modbus, ENA G98/G99, AS/NZS 4777.2, BS EN 50549
scpi_refTest & measurement — SCPI-1999, VISA, and instrument manuals (Yokogawa, Tektronix, Chroma, Kikusui, and more)
x86_refThe 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:

~/.byteask/config.toml
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:

ProviderModels
OpenAIgpt-5.4 (default), gpt-5.5, gpt-5.6-sol, gpt-5.6-terra, gpt-5.6-luna
Autoauto — automatically picks a model for each query
Anthropicclaude-opus-4-8, claude-sonnet-5, claude-sonnet-4-6, claude-fable-5
Googlegemini-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.


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:

~/.byteask/config.toml
# "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

~/.byteask/config.toml
[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 commandDescription
/agentSwitch the active agent thread
/subagentsList all running agent threads
/side or /btwStart 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.

~/.byteask/config.toml
[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):

~/.byteask/config.toml
[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:

~/.byteask/config.toml
[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:

~/.byteask/config.toml
[tui]
vim_mode_default = true

Shell environment policy

Control which environment variables are passed to the agent's shell:

~/.byteask/config.toml
[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:

WindowResets
5-hourA rolling 5-hour budget
WeeklyA 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

PlanPriceUsage
Free$0Base monthly usage
Pro$20/moMore usage than Free
Max$100/moHighest 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-code prints 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-code card shows your live progress toward that reward.
  • Vouchers/voucher <code> redeems a voucher for a one-time credit top-up.
note

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