yaak — Yet Another AI for the Kommandozeile
Translate natural language into bash commands using any OpenAI-compatible LLM. Supports 8 languages.
$ yaak list all rust files larger than 1MB
Thinking ....
Command: find . -name "*.rs" -size +1M -ls
? What next?: Execute / Refine / Copy / Abort
Install
# Quick install (macOS / Linux)
|
# Homebrew (macOS/Linux)
# Or via Cargo
Quick setup
Run the interactive config wizard:
$ yaak --config
yaak configuration wizard
────────────────────────────────────────
? Select your language:
1. English 5. Português
2. Deutsch 6. 中文
3. Español 7. 日本語
❯ 4. Français 8. 한국어
? Select your API provider:
1. OpenAI
2. Anthropic
3. Google Gemini
❯ 4. Ollama
5. Groq
6. Together AI
7. OpenRouter
8. LM Studio
9. vLLM
10. LocalAI
? Select a model: gemma3:4b
✓ Config written to ~/.config/yaak/config.toml
Configuration
yaak resolves settings in this priority order: CLI flags → environment variables → config file → defaults.
Config file
Run yaak --config to generate the config interactively, or create it manually:
On macOS, yaak also checks ~/Library/Application Support/yaak/config.toml.
Environment variables
# en, de, es, fr, pt, zh, ja, ko
Multi-language support
yaak supports 8 languages for its UI (prompts, errors, menus, labels):
| Code | Language |
|---|---|
en |
English |
de |
Deutsch |
es |
Español |
fr |
Français |
pt |
Português |
zh |
中文 |
ja |
日本語 |
ko |
한국어 |
Language is resolved in this order: --language flag → YAAK_LANGUAGE env var → language in config file → system locale → English.
# Set via CLI flag
# Set via environment variable
# Set via config file
# Add to ~/.config/yaak/config.toml:
# language = "fr"
# The config wizard includes a language selection step
When a non-English language is selected, yaak also instructs the LLM to respond with explanations in that language (in --explain mode), while keeping the structured output format intact.
Usage
yaak <description of what you want to do>
Options
| Flag | Short | Description |
|---|---|---|
--config |
-c |
Interactive configuration wizard |
--api-base URL |
-u |
API base URL |
--api-key KEY |
-k |
API key |
--model NAME |
-m |
Model name |
--yes |
-y |
Skip confirmation prompt |
--reverse |
-r |
Explain a command instead of generating |
--explain |
-e |
Alias for --reverse |
--copy |
-C |
Copy generated command to clipboard |
--context |
Include project type and file listing in prompt | |
--cache |
Reuse cached result for identical queries | |
--no-cache |
Force fresh API call, ignore cache | |
--history |
-H |
Show recent command history |
--last |
-l |
Re-execute the most recent command |
--search KEYWORD |
-s |
Search command history by keyword |
--language LANG |
-L |
UI language: en, de, es, fr, pt, zh, ja, ko |
--version |
-v |
Print version number |
--completions SHELL |
Generate shell completions (bash/zsh/fish) |
Examples
# Basic usage
# Use a local Ollama model
# Pipe-friendly (skip confirmation)
# Copy to clipboard instead of executing
# Explain a command
# View command history
# Re-run the last generated command
# Search history
# Include project context for smarter results
# Reuse a cached result (no API call)
Shell completions
Generate completions for your shell:
# Bash
# Zsh
# Fish
Safety
yaak blocks destructive commands (rm, dd, mkfs, shred, etc.) from being executed, including sudo variants and piped/chained sequences.
Compatible providers
yaak auto-detects the provider from the API base URL and uses the appropriate request format.
Anthropic (native Messages API):
- Anthropic —
https://api.anthropic.com/v1
Google Gemini (native Gemini API):
- Google Gemini —
https://generativelanguage.googleapis.com/v1beta
OpenAI-compatible (/v1/chat/completions):
- OpenAI —
https://api.openai.com/v1 - Ollama —
http://localhost:11434/v1(no key needed) - Groq —
https://api.groq.com/openai/v1 - Together AI —
https://api.together.xyz/v1 - OpenRouter —
https://openrouter.ai/api/v1 - Doubleword —
https://api.doubleword.ai/v1 - LM Studio —
http://localhost:1234/v1 - vLLM / LocalAI — your local URL
License
Apache-2.0