cd /news/ai-tools/show-hn-vibe-zsh-turn-natural-langua… Β· home β€Ί topics β€Ί ai-tools β€Ί article
[ARTICLE Β· art-44106] src=github.com β†— pub= topic=ai-tools verified=true sentiment=↑ positive

Show HN: Vibe zsh, turn natural language into shell commands

Developer Skymoore released Vibe Zsh, an open-source tool that converts natural language descriptions into shell commands using AI. The plugin integrates with Oh-My-Zsh and supports multiple AI providers including OpenAI, Anthropic, and local models via Ollama, offering features like OS-aware generation and command previews.

read10 min views1 publishedJun 29, 2026
Show HN: Vibe zsh, turn natural language into shell commands
Image: source

Transform natural language into shell commands using AI. Works natively with OpenAI, Anthropic, Groq, OpenRouter, Ollama, LM Studio, and more.

list all docker containers


docker ps -a
  • 🧠 Natural language to commands- Just describe what you want - πŸ–₯️ OS-aware generation- Commands that work on YOUR system (macOS/Linux/Windows) - ⚑ Lightning fast- Cached responses are 100-400x faster - 🎬 Streaming output- Typewriter effect with progress indicators - πŸ”Œ Multi-provider- Native support for OpenAI, Anthropic, Groq, OpenRouter, Ollama, LM Studio, and more - πŸ›‘οΈ Safe by default- Preview commands before execution - πŸ“š Learn while you work- Inline explanations for every command - πŸ“œ Query history- Interactive menu to browse and re-run previous queries - 🎯 Single binary- One compiled binary, no runtime dependencies to install
brew tap skymoore/tap
brew install --cask vibe-zsh

The Homebrew installation automatically:

  • Installs vibe to ~/.oh-my-zsh/custom/plugins/vibe

  • Adds vibe

to your plugins list in~/.zshrc

  • Creates a global vibe-zsh

command for CLI usage

After installation, reload your shell:

source ~/.zshrc

Note: Requires Oh-My-Zsh. If not installed, the installer will provide instructions.

For oh-my-zsh integration:

curl -fsSL https://raw.githubusercontent.com/skymoore/vibe-zsh/main/install.sh | bash

Or using wget:

wget -qO- https://raw.githubusercontent.com/skymoore/vibe-zsh/main/install.sh | bash

This script downloads the latest release and installs it to ~/.oh-my-zsh/custom/plugins/vibe

. You'll need to manually add vibe

to your plugins list in ~/.zshrc

.

Clone the repository:

git clone https://github.com/skymoore/vibe-zsh.git ~/.oh-my-zsh/custom/plugins/vibe

Build the binary:

cd ~/.oh-my-zsh/custom/plugins/vibe
make build

Add to your.zshrc

:

plugins=(... vibe)

Reload your shell:

source ~/.zshrc

Add these to your ~/.zshrc

(all optional).

vibe-zsh uses gollm to talk to each provider natively. There are two kinds of provider:

Hosted providers(openai

,anthropic

,groq

,openrouter

,deepseek

,google-openai

,mistral

,cohere

) have a fixed endpoint built in. You only need to choose the provider, setVIBE_API_KEY

, and pick aVIBE_MODEL

β€” you donot setVIBE_API_URL

.Local providers(ollama

,lmstudio

,vllm

) run on your machine. SetVIBE_API_URL

to point at the local server; no API key is required.

Select a provider with VIBE_PROVIDER

. If you don't set it, vibe infers the provider from VIBE_API_URL

(e.g. an openrouter.ai

or :11434

URL), which is mainly there to keep older configs working. Setting VIBE_PROVIDER explicitly is the recommended approach.

The default

VIBE_MODEL

isllama3:8b

(chosen for the default Ollama setup). Always setVIBE_MODEL

when you use a hosted provider, or requests will ask for a model that doesn't exist there.

export VIBE_PROVIDER="openai"
export VIBE_API_KEY="sk-..."
export VIBE_MODEL="gpt-4o"
export VIBE_PROVIDER="anthropic"
export VIBE_API_KEY="sk-ant-..."
export VIBE_MODEL="claude-3-5-sonnet-20241022"
export VIBE_PROVIDER="groq"
export VIBE_API_KEY="gsk_..."
export VIBE_MODEL="llama-3.1-70b-versatile"
export VIBE_PROVIDER="openrouter"
export VIBE_API_KEY="sk-or-..."
export VIBE_MODEL="anthropic/claude-3.5-sonnet"
export VIBE_PROVIDER="ollama"
export VIBE_API_URL="http://localhost:11434/v1"
export VIBE_MODEL="llama3:8b"
export VIBE_PROVIDER="lmstudio"
export VIBE_API_URL="http://localhost:1234/v1"
export VIBE_MODEL="local-model"

Note on validation:gollm checks your configuration when vibe starts. Hosted providers validate the API key format up front (for example, Anthropic keys must start withsk-ant-

), and local providers must already be running and reachable. If a provider is misconfigured, vibe reports an actionable error on the first query rather than silently failing.

Custom OpenAI-compatible gateways:theopenai

provider always points atapi.openai.com

, so it can't be redirected to a self-hosted gateway viaVIBE_API_URL

. To use an OpenAI-compatible endpoint that isn't OpenAI itself, setVIBE_PROVIDER

tolmstudio

orvllm

and pointVIBE_API_URL

at your gateway.

  • Type a natural language description in your terminal

  • Press Ctrl+G

  • Review the generated command (with explanations)

  • Press Enter

to execute, or edit first

History Menu:

Access your query history in two ways:

Keybinding: PressCtrl+X

thenH

Command: Typevh

and press Enter

Both methods open an interactive menu where you can:

  • Browse previous queries with arrow keys
  • Search with /

(filter mode) - Press Enter

to insert the generated command into your buffer - Press G

to regenerate a new command from the original query - Press V

to edit the original query in your buffer - Press A

orHome

to jump to the first entry - Press E

orEnd

to jump to the last entry - Press Esc

orQ

to cancel

The selected command appears on your command line, ready to execute!

Quick Regenerate:

Press Ctrl+X

then G

to instantly regenerate a new command from your most recent query without opening the menu.

Note: Don't run vibe-zsh history

or ./vibe history

directly - use vh

or the keybinding instead.

You can also use vibe directly from the command line:

vibe-zsh "list all docker containers"

~/.oh-my-zsh/custom/plugins/vibe/vibe "list all docker containers"

CLI Flags:

vibe-zsh --help                    # Show all available flags
vibe-zsh --debug "query"           # Enable debug logging
vibe-zsh --temperature 0.1 "query" # Override temperature
vibe-zsh --interactive "query"     # Confirm before execution

History Commands:

vh                                 # Interactive menu (recommended)
vibe-zsh history list              # List history in plain text
vibe-zsh history clear             # Clear all history

Query History:

Ctrl+X H

vh

vibe-zsh history list

vibe-zsh history clear

File Operations:

show me all hidden files including their sizes

Docker:

show logs of nginx container and follow them

Git:

show me commits from last week

Find & Search:

find all python files modified today

Tab Completion:

vibe <TAB><TAB>

Hide Explanations:

export VIBE_SHOW_EXPLANATION=false

Interactive Mode (confirm before inserting):

export VIBE_INTERACTIVE=true

Disable Cache:

export VIBE_ENABLE_CACHE=false

Disable Auto-Updates:

export VIBE_AUTO_UPDATE=false

Customize History Keybinding:

export VIBE_HISTORY_KEY="^R"      # Use Ctrl+R for history menu
export VIBE_REGENERATE_KEY="^[r"  # Use Alt+R for quick regenerate

Disable History:

export VIBE_ENABLE_HISTORY=false
Variable Default Description
API Configuration
VIBE_PROVIDER
(inferred from VIBE_API_URL )
LLM provider. Hosted: openai , anthropic , groq , openrouter , deepseek , google-openai , mistral , cohere . Local: ollama , lmstudio , vllm . Recommended to set explicitly.
VIBE_API_URL
http://localhost:11434/v1
Endpoint URL for local providers only (ollama , vllm ). Hosted providers ignore this and use their fixed endpoints.
VIBE_API_KEY
""
API key. Required for hosted providers; ignored by local providers.
VIBE_MODEL
llama3:8b
Model to use. Set this for hosted providers β€” the default only suits Ollama.
VIBE_TEMPERATURE
0.2
Generation temperature (0.0-2.0)
VIBE_MAX_TOKENS
1000
Max response tokens
VIBE_TIMEOUT
30s
Request timeout
Display Options
VIBE_SHOW_EXPLANATION
true
Show command explanations
VIBE_SHOW_WARNINGS
true
Show warnings for dangerous commands
VIBE_SHOW_PROGRESS
true
Show progress spinner during generation
VIBE_PROGRESS_STYLE
dots
Spinner style: dots, line, circle, bounce, arrow, runes (α›œ ᛃ α›‹)
VIBE_STREAM_OUTPUT
true
Stream output with typewriter effect
VIBE_STREAM_DELAY
20ms
Delay between streamed words
Behavior
VIBE_INTERACTIVE
false
Confirm before inserting command
VIBE_USE_STRUCTURED_OUTPUT
true
Use JSON schema for structured responses
VIBE_ENABLE_CACHE
true
Enable response caching
VIBE_CACHE_TTL
24h
Cache lifetime
Parsing & Retry
VIBE_MAX_RETRIES
3
Max retry attempts for failed parsing
VIBE_ENABLE_JSON_EXTRACTION
true
Extract JSON from corrupted responses
VIBE_STRICT_VALIDATION
true
Validate response structure
VIBE_SHOW_RETRY_STATUS
true
Show retry progress during generation
History
VIBE_ENABLE_HISTORY
true
Enable query history tracking
VIBE_HISTORY_SIZE
100
Maximum number of history entries
VIBE_HISTORY_KEY
^Xh (Ctrl+X H)
Keybinding for history menu
VIBE_REGENERATE_KEY
^Xg (Ctrl+X G)
Keybinding to regenerate last command
Updates & Debugging
VIBE_AUTO_UPDATE
true
Enable auto-update checks
VIBE_UPDATE_CHECK_INTERVAL
7d
How often to check for updates
VIBE_DEBUG_LOGS
false
Enable debug logging for troubleshooting

Capture- You type natural language and pressCtrl+G

Context- vibe detects your OS (macOS/Linux/Windows) and shell (zsh/bash/etc.)** Generate**- vibe sends your query with system context to the configured LLM** Parse**- Response is structured as command + explanations** Cache**- Response is cached for 24 hours (configurable)** Stream**- Command is streamed to your terminal with typewriter effect** Insert**- Command appears in your buffer for review** Execute**- You press Enter to run (or edit first)

vibe automatically detects your operating system and shell, ensuring generated commands work on your system:

macOS: Uses BSD utilities (e.g.,find

without-printf

,sed -i ''

)Linux: Uses GNU utilities (e.g.,find -printf

,sed -i

)Shell-specific: Generates syntax appropriate for zsh, bash, etc.

This means you get commands that actually work on your system, not generic Linux commands that fail on macOS!

First query:~500ms-2s (depends on LLM)** Cached query:~5-10ms (100-400x faster!) Binary size:~8MB Memory usage:**<10MB

  • βœ… Commands are never executed automatically
  • βœ… Full preview before execution
  • βœ… Edit commands before running
  • βœ… Warnings for dangerous commands
  • βœ… Optional interactive confirmation mode
  • βœ… Local-first with Ollama (your data stays private)

vibe automatically checks for updates once a week in the background (zero impact on performance). When an update is available, you'll see a notification:

⚠️  vibe v1.2.4 available (current: v1.2.3)
   Run: vibe --update

Manual Commands:

vibe --version              # Show current version
vibe --update               # Download and install latest version

Configuration:

export VIBE_AUTO_UPDATE=false           # Disable auto-update checks
export VIBE_UPDATE_CHECK_INTERVAL=14d   # Check every 2 weeks instead

Security:

  • All downloads are verified using SHA256 checksums
  • Checksums are published with each release
  • Original binary is backed up before replacement
  • Safe atomic file replacement

The update check runs in a background process after each command, so it never slows down your workflow. Updates are never installed automatically - you always control when to update.

Command not working after install:

  • Reload your shell: source ~/.zshrc

  • Verify plugin is in list: echo $plugins

  • Check binary exists: ls ~/.oh-my-zsh/custom/plugins/vibe/vibe

Slow responses:

  • Enable caching: export VIBE_ENABLE_CACHE=true

  • Use a faster model or local LLM

  • Check your network connection

Bad command suggestions:

  • Try a different/better model
  • Make your query more specific
  • Check model supports structured output

Corrupted or garbage output:

  • vibe now automatically handles corrupted LLM responses with multi-layer parsing

  • Enable debug logs to see what's happening: export VIBE_DEBUG_LOGS=true

  • Check logs for raw responses and parsing attempts

  • Try increasing retries: export VIBE_MAX_RETRIES=5

Parsing errors:

  • Enable JSON extraction: export VIBE_ENABLE_JSON_EXTRACTION=true

(default) - Disable strict validation temporarily: export VIBE_STRICT_VALIDATION=false

  • Check debug logs to see which parsing layer succeeded/failed
  • Some models produce cleaner JSON with lower temperature: export VIBE_TEMPERATURE=0.3

Ctrl+G does nothing:

  • Ensure plugin is loaded: which vibe

(should show a function) - Check no other plugin uses Ctrl+G

  • Try rebinding: bindkey '^G' vibe

  • Zsh with Oh-My-Zsh

  • An LLM provider β€” hosted (OpenAI, Anthropic, Groq, OpenRouter, etc.) or local (Ollama, LM Studio, vLLM)

  • macOS or Linux

brew uninstall --cask vibe-zsh
brew untap skymoore/tap  # Optional: remove the tap

Then remove vibe

from your plugins list in ~/.zshrc

and reload:

source ~/.zshrc
curl -fsSL https://raw.githubusercontent.com/skymoore/vibe-zsh/main/uninstall.sh | bash

Or using wget:

wget -qO- https://raw.githubusercontent.com/skymoore/vibe-zsh/main/uninstall.sh | bash

Then remove vibe

from your plugins list in ~/.zshrc

and reload:

source ~/.zshrc
git clone https://github.com/skymoore/vibe-zsh.git
cd vibe-zsh
make build        # Build for current platform
make build-all    # Build for all platforms
make test         # Run tests
make install      # Install to oh-my-zsh

Contributions welcome! This project uses:

  • Go 1.26+
  • Standard zsh scripting gollmfor native multi-provider LLM access

GPLv3 License - see LICENSE

Inspired by LoganPederson/vibe

Built for terminal productivity enthusiasts πŸš€

── more in #ai-tools 4 stories Β· sorted by recency
── more on @openai 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain β€” perfect for shipping the agent you just read about.

$git push zahid main
β†’ Live at https://your-agent.zahid.host βœ“
Get free account β†’ Pricing
from €0/mo Β· no card required
LIVE [news/show-hn-vibe-zsh-tur…] indexed:0 read:10min 2026-06-29 Β· β€”