qqqa CLI
Two Rust commands for the terminal: qq answers a quick command-line question, and qa performs a single step with files and commands
- 628 ★ on the repository
- Last commit
Broad access
Why this level
- The qa command writes files and runs shell commands from the model's answer, and the `-y` flag removes confirmation
- API keys live in environment variables or `~/.qq/config.json`, and requests, piped data and history fragments go to the chosen model provider
- The codex, claude_cli and gemini_cli profiles launch the installed binaries of other agents with their authorization
Install
In your terminal, with SkillFoxx CLI
npx skillfoxx add cli/qqqaDetects the agents on your machine, shows the access level and pins the version.
Other ways to install
Access and checks
How we reviewBroad accessThe tool can change data, run commands or handle secrets.
- The qa command writes files and runs shell commands from the model's answer, and the `-y` flag removes confirmation
- API keys live in environment variables or `~/.qq/config.json`, and requests, piped data and history fragments go to the chosen model provider
- The codex, claude_cli and gemini_cli profiles launch the installed binaries of other agents with their authorization
This is third-party code. Review the repository files before installing.
What it does
The qqqa package puts two short binaries in your terminal. The `qq` command asks a model one question: `qq "convert mp4 to mp3"`. It is read-only, has no tools, streams the answer and colours it for the terminal. The `qa` command does more: it performs a single agent step and calls one of three tools that read a file, write a file or run a command. A command is shown first for confirmation, and the `-y` flag approves without asking for scripts. The tool deliberately keeps no sessions: no long conversation and no hidden memory, so every run is nearly independent of the last. You add context yourself: piped data (`git status | qq "what should I do next"`) and, optionally, the last qq and qa commands via the `--history` flag. A command from the answer can be copied to the clipboard automatically (`qq --enable-auto-copy`). The model is chosen with a profile in `~/.qq/config.json`. Out of the box there are OpenRouter (default, model openai/gpt-4.1-nano), OpenAI, Groq, Gemini, a local Ollama, and profiles that call the Codex CLI, Claude Code CLI and Gemini CLI binaries you installed, with their own login. Any OpenAI-compatible provider is added by editing the config. It runs on macOS, Linux and Windows.
Who it is for. For people who live in the terminal and want to quickly ask how to build a command, or hand a model one simple file operation, without opening a full agent.
Good fit when
- You need to recall the flags of ffmpeg, tar or find and want the answer in the terminal within seconds
- A command's output needs explaining: `git status | qq "what should I do next"` feeds the output to the model
- You need one checked operation: `qa "list Rust files under src sorted by size"` shows the command and runs it after confirmation
- The model has to fit a budget: the OpenRouter, Groq, OpenAI, Gemini and local Ollama profiles switch with the `--profile` flag
- You already pay for Codex CLI or Claude Code and want to call their binaries from the same qq and qa commands
Not a fit when
- The task needs several steps and independent work in a project: qa takes one step per call, and a full agent is needed for that
- You want a conversation with memory: qqqa keeps no sessions, and history holds only the last qq and qa commands
- The environment forbids running commands even with confirmation: qa has a command execution tool
- Cloud models are blocked on your network and you have no local model: without Ollama or a similar server there is nowhere to send requests
Example request
qa "find Rust files larger than 100 kilobytes in the current folder, show the command and run it after my confirmation"Limitations
The profile selects the model, and the key comes from an environment variable such as OPENROUTER_API_KEY, GROQ_API_KEY, OPENAI_API_KEY or GEMINI_API_KEY. The key can also be saved in `~/.qq/config.json`, which is created with safe permissions. The Codex CLI and Claude Code CLI profiles ask for no key: you need the `codex` or `claude` binary installed and `codex login` or `claude login` done. With the Codex profile the answer arrives whole, not streamed.
The anthropic profile exists in the config but is a placeholder and does not work yet. The default request timeout is 180 seconds. On Arch Linux another package may own `/usr/bin/qq`; then install the binaries to your own folder or build with `cargo install`. Whether OpenRouter, OpenAI, Groq, Gemini and Anthropic work from Russia was not checked for this card; a local Ollama needs no outside network.
How to disable. If you installed through Homebrew, run `brew uninstall qqqa`. If you unpacked a release archive, delete the qq and qa files from the folder on your PATH. Configuration and keys live in `~/.qq/config.json` (or `$XDG_CONFIG_HOME/qq/config.json`), and that file is deleted by hand.
FAQ
How do I install qqqa?
On macOS and Linux, run `brew install qqqa`. On Linux and Windows you can download an archive from GitHub Releases, unpack it and put qq and qa on the PATH. Then run `qq --init`: the wizard offers a provider and saves the config to `~/.qq/config.json`.
How is qq different from qa?
qq asks one question, is read-only and has no tools; it can take piped data and recent commands into account. qa performs one agent step with three tools, read_file, write_file and execute_command, and running a command needs confirmation.
Does qqqa need an API key?
The OpenRouter, OpenAI, Groq and Gemini profiles do, taking it from OPENROUTER_API_KEY, OPENAI_API_KEY, GROQ_API_KEY or GEMINI_API_KEY. For the codex, claude_cli and gemini_cli profiles the binary handles sign-in itself with `codex login` and `claude login`, and a local Ollama accepts any non-empty string.
How do I run qa in scripts without prompts?
The `-y` flag approves tool execution automatically, for example `qa -y "count lines across *.rs"`. It removes the confirmation safeguard, so use it only for vetted tasks.
Does qqqa remember earlier requests?
No, the tool deliberately keeps no sessions. History is off by default. You can turn it on during `qq --init` or with the `--history` flag, and then the last 10 commands whose first word is qq or qa are added to the request. Other terminal commands are never shared.
Discussion
No questions or reviews yet.
Related
CLI toolsA skills library that gives coding agents a development process: brainstorming, planning, TDD, subagents and code review
Skills for real engineers by Matt Pocock
Skills For Real Engineers
Small composable skills for engineering with agents: plan grilling, TDD, bug diagnosis, code review and architecture
Karpathy-inspired Claude Code guidelines
Karpathy-Inspired Claude Code Guidelines
Four principles in one CLAUDE.md against common LLM coding mistakes: silent assumptions, overengineering, drive-by edits
A plugin and skill that makes the agent write minimal code: reuse, stdlib and native platform features come first
GitHub toolkit for spec-driven development: the specify CLI adds agent commands and skills to a project, from principles to implementation
Garry Tan's skill suite that turns Claude Code into a virtual team: product, architecture, design, review, QA and shipping
Comparison with similar tools
Entries that share the main search query, and how they differ.
README in short
The README presents qqqa as two short terminal binaries and explains the naming: they are quick to type on QWERTY. It then covers the stateless philosophy, the case for OpenRouter as the default, the Codex CLI and Claude Code CLI profiles with configs, a feature list, installation through Homebrew and release archives, provider and profile setup, and terminal history. Usage examples for qq and qa end with a scenario for extracting audio from a video.