1q, short for 1Query, is a cross-platform command-line utility that lets you use natural language to generate shell commands, command chains, and code snippets right in your terminal. Get the command you need instantly, review it, modify it, and even execute it directly!
1q_demo.mp4
- Features
- Installation
- Getting Started
- Configuration
- Interactive Features & Usage
- Command-Line Options
- Contributing
- License
- Natural Language Input: Simply type what you want to do (e.g.,
1q find all files larger than 50MB in my home dir). - Gemini Powered: Leverages Google's powerful Gemini model (specifically
gemini-2.0-flash) for accurate and relevant command/code generation. - Context-Aware Refinement: Didn't get the perfect command on the first try? Refine your request in a conversation!
1qremembers the context. - Intelligent Output:
- Inline Mode: For simple queries, get just the raw command printed directly to standard output, perfect for piping (
|) or immediate use. - TUI Mode: For more complex commands, or when explanations/install steps are needed,
1qautomatically launches a Textual User Interface (TUI) for a clear, structured view. - Configurable Default: Choose whether you prefer
inline,tui, orauto(default) detection as your standard output method.
- Inline Mode: For simple queries, get just the raw command printed directly to standard output, perfect for piping (
- Interactive Workflow:
- Execute: Run the generated command directly from the TUI or the inline prompt (
xkey orexecuteaction). - Modify: Tweak the command in your editor (
mkey ormodifyaction) before execution. - Copy: Easily copy the generated command to your clipboard (
ckey orcopyaction).
- Execute: Run the generated command directly from the TUI or the inline prompt (
- Structured Responses: The AI provides not just the
COMMAND:, but often includesEXPLANATION:andINSTALL:steps when necessary, clearly presented in the TUI. - Configuration:
- Securely store your Gemini API key via environment variable (
GEMINI_API_KEY) or a configuration file. - Set your preferred default output style (
--set-default-output).
- Securely store your Gemini API key via environment variable (
- Cross-Platform: Built with Python and Textual, runs on Linux, macOS, and Windows.
1Q requires Python 3.8 or higher.
You can install 1Q directly from PyPI using pip:
pip install oneqIt's often recommended to install Python CLI tools in isolated environments using tools like pipx:
pipx install oneq(Optional) For the inline copy action to work reliably, ensure you have a clipboard utility installed (pyperclip is used internally):
- Linux:
sudo apt-get install xcliporsudo apt-get install xsel(for X11), orwl-copy(for Wayland). - macOS:
pbcopyis usually built-in. - Windows: Should work out of the box.
-
Configure API Key:
1Qneeds a Google Gemini API key. Get one from Google AI Studio. You can configure it in one of two ways:-
(Recommended) Environment Variable: Set the
GEMINI_API_KEYenvironment variable:export GEMINI_API_KEY='YOUR_API_KEY_HERE' # Add this line to your shell profile (~/.bashrc, ~/.zshrc, etc.) for persistence
-
Configuration File: Run
1qonce without arguments and without the environment variable set. It will launch an interactive setup TUI to securely save your key to a configuration file.1q
(Follow the prompts to enter your key and choose a default output style).
-
-
Make your First Query: Ask
1qto generate a command:1q list all python files modified in the last 2 days -
Interact with the Result:
-
If the command is simple, it might print directly to your console (inline mode).
-
If it's complex or includes details, the TUI will launch.
-
Inline Mode: You'll be prompted for the next action (execute, modify, refine, copy, quit).
-
TUI Mode: Use keyboard shortcuts (see below) to interact.
Example TUI:
┌────────────────────────── 1Q Response ───────────────────────────┐ │ ### COMMAND │ │ find . -name "*.py" -type f -mtime -2 │ │ │ │ ### EXPLANATION │ │ │ │ - `find .`: Search in the current directory (`.`) and subdirs. │ │ - `-name "*.py"`: Find files matching the pattern '*.py'. │ │ - `-type f`: Only consider regular files. │ │ - `-mtime -2`: Find files modified within the last 2 days (less │ │ than 2*24 hours ago). │ └──────────────────────────────────────────────────────────────────┘ [c] Copy Cmd [x] Execute [m] Modify [r] Refine [q] Quit -
-
Refine (If Needed): If the first command wasn't quite right, choose the
refineaction (or pressrin the TUI) and enter a follow-up request, like:Refine your request (or press Enter to quit): also exclude the venv directory1qwill use the previous conversation context to generate an updated command.
As mentioned in Getting Started, the API key is loaded in this order:
GEMINI_API_KEYenvironment variable.config.inifile located in the user's configuration directory.
You can find the configuration file path using:
1q --show-config-pathControl how 1q presents results:
auto(Default): Shows TUI for complex results (with explanation/install) or if markers are present; otherwise, shows inline command.tui: Always uses the Textual User Interface.inline: Always attempts to print the raw command to stdout and details/prompts to stderr.
Set the default style permanently:
# Set TUI as the default
1q --set-default-output=tui
# Set inline as the default
1q --set-default-output=inline
# Set auto as the default
1q --set-default-output=autoThis modifies the output_style key under the [Settings] section in your config.ini.
Override the default for a single run:
# Force TUI for this query
1q find unused docker images -o tui
# Force inline output for this query
1q make a directory called temp and cd into it -o inlineWhen 1q runs in inline mode (or auto for simple commands):
- The generated command is printed to stdout.
- Explanation/Install steps (if any) are printed to stderr.
- A prompt appears on stderr asking for your next action:
execute: Run the command immediately.modify: Open the command in an interactive prompt for editing.refine: Provide a follow-up natural language instruction.copy: (Ifpyperclipis available) Copy the command to the clipboard.quit: Exit1q.
When 1q runs in tui mode (or auto for complex commands):
- The response is displayed visually, separating Command, Installation, and Explanation.
- Use these keybindings:
c: Copy the command to the clipboard.x: Execute the command (exits TUI first).m: Modify the command (exits TUI first, then opens inline editor).r: Refine the query (exits TUI first, then prompts for refinement).q/Ctrl+C: Quit the TUI and1q.
usage: 1q [-h] [-o {auto,tui,inline}] [--show-config-path] [--clear-config]
[--set-default-output STYLE] [-v]
[query ...]
1Q: Your instant command-line and code snippet generator.
positional arguments:
query Your natural language query. If omitted, runs setup (if needed) or shows help.
options:
-h, --help show this help message and exit
-o {auto,tui,inline}, --output {auto,tui,inline}
Specify output style for this run: 'auto', 'tui', 'inline'. Overrides config default.
-v, --version show program's version number and exit
Configuration and Info Actions:
--show-config-path Print the path to the configuration file and exit.
--clear-config Remove the configuration file (prompts for confirmation).
--set-default-output STYLE
Set and save the default output style in the config file (auto, tui, inline).
Example: 1q list files in Documents ending with .pdfContributions are welcome! If you find a bug or have a feature request, please open an issue on the GitHub repository (link to be added).
This project is licensed under the MIT License - see the LICENSE file for details (or check pyproject.toml).