AI-powered terminal assistant that suggests or executes bash commands from natural language.
Project description
hai
A friendly shell assistant powered by LLMs
hai (pronounce like "hi") is a thin, context-aware wrapper around bash that brings natural language command generation directly to your terminal. Stop context-switching to look up git commands, bash syntax, or flagsโjust ask hai.
๐ฏ Quick Start
# Install (pipx recommended)
pipx install hai-sh
hai-install-shell
# Use directly
hai "show me files modified in the last 24 hours"
# Or with @hai prefix
@hai commit just README.md to main, I'm on feature-branch
# Or with keyboard shortcut - type your query then press Ctrl+X Ctrl+H
find large files in home directory
# Press Ctrl+X Ctrl+H
Example output:
โโโ Conversation โโโ
I'll search for files modified in the last 24 hours using find.
Confidence: 90% [โโโโโโโโโยท]
โโโโโโโโโโโโโโโโโโโ
โโโ Execution โโโ
$ find . -type f -mtime -1
./README.md
./src/app.py
./tests/test_app.py
โจ Features
Core Capabilities
- ๐ฏ Natural Language Interface: Just describe what you want in plain English
- ๐ฌ Dual Mode Operation:
- Command Mode: Generate and execute bash commands
- Question Mode: Get answers to your terminal/bash questions without executing anything
- ๐ Dual-Layer Output: See both the AI's reasoning and the actual command
- ๐ Context-Aware: Automatically includes current directory, git state, and environment
- ๐ Privacy-First: Supports local Ollama modelsโno API costs, data stays private
- โจ๏ธ Multiple Invocation Methods:
- Direct command:
hai "query" - @hai prefix:
@hai query - Keyboard shortcut:
Ctrl+X Ctrl+H(customizable)
- Direct command:
- ๐จ Smart Output Formatting: ANSI colors with auto-detection for pipes and terminals
LLM Provider Support
- OpenAI: GPT-4, GPT-4o, GPT-4o-mini, GPT-3.5-turbo
- Anthropic: Claude Opus 4.5, Claude Sonnet 4.5
- Ollama: Local models (llama3.2, mistral, codellama, etc.) - recommended for daily use
- Local Models: Custom GGUF model support
Shell Integration
- Bash: Keyboard shortcuts and @hai prefix detection
- Zsh: Full feature parity with bash
- Auto-completion: Future roadmap item
Advanced Features
- Confidence Scoring: Visual indicators show AI confidence (0-100%)
- Multi-step Commands: Handles complex workflows with
&&chaining - Environment Preservation: Safe environment variable handling
- Git Integration: Context-aware git operations
- Comprehensive Testing: 576 tests, 92% coverage
๐ Status
Current Version: v0.1 (Pre-release)
hai follows an agile development approach with frequent version increments.
What's New (Updated: 2024-12-20)
v0.1 Documentation Release:
- โ Complete installation guide (INSTALL.md)
- โ Comprehensive configuration guide (CONFIGURATION.md)
- โ 20+ usage examples and tutorial (USAGE.md)
- โ Integration test suite with realistic use cases
- โ Error messages and help system
- โ ANSI color support with TTY detection
- โ Dual-layer output formatter
Core Features (v0.1):
- โ Command execution engine
- โ Context gathering (cwd, git, env)
- โ LLM providers (OpenAI, Anthropic, Ollama)
- โ Shell integration (bash, zsh)
- โ Configuration system
- โ Output formatting
Roadmap
- v0.1 โ - Proof of Concept: Basic invocation, LLM providers, dual-layer output
- v0.2 ๐ง - Enhanced Context: History, session context, hybrid memory model
- v0.3 ๐ - Smart Execution: Confidence scoring, auto-execute vs. confirm
- v0.4 ๐ - Permissions Framework: Granular control over command execution
- v0.5 ๐ - Error Handling: Automatic retry with model upgrade for debugging
- v1.0 ๐ - Production Ready: Polished, tested, documented, secure
See ROADMAP.md for complete development plan.
๐ฆ Installation
Prerequisites
- Python: 3.9 or higher
- Shell: Bash 4.0+ or Zsh 5.0+
- LLM Provider: OpenAI API key, Anthropic API key, or Ollama (local)
Quick Install
# Install via pipx (recommended)
pipx install hai-sh
hai-install-shell # Install shell integration
# Or via pip
pip install hai-sh
# Verify installation
hai --version
Development Install
# Clone repository
git clone https://github.com/frankbria/hai-sh.git
cd hai-sh
# Using uv (recommended)
uv venv
source .venv/bin/activate
uv sync
# Run tests
pytest
Shell Integration Setup
For Bash:
# Add to ~/.bashrc
source ~/.hai/bash_integration.sh
For Zsh:
# Add to ~/.zshrc
source ~/.hai/zsh_integration.sh
Reload your shell:
source ~/.bashrc # or ~/.zshrc
๐ Full installation guide: INSTALL.md
๐ง Configuration
Quick Setup
On first run, hai creates ~/.hai/config.yaml:
# Default: Use free local Ollama
provider: "ollama"
model: "llama3.2"
providers:
# OpenAI (requires API key)
openai:
# Set OPENAI_API_KEY environment variable
model: "gpt-4o-mini"
# Anthropic (requires API key)
anthropic:
# Set ANTHROPIC_API_KEY environment variable
model: "claude-sonnet-4-5"
# Ollama (free, local)
ollama:
base_url: "http://localhost:11434"
model: "llama3.2"
context:
include_history: true
include_git_state: true
include_env_vars: true
output:
show_conversation: true
use_colors: true
Setting Up Ollama (Recommended)
Why Ollama?
- โ Free (no API costs)
- โ Private (data stays local)
- โ Fast (no network latency)
- โ Offline capable
Install Ollama:
# Linux
curl -fsSL https://ollama.com/install.sh | sh
# macOS
brew install ollama
# Start server
ollama serve
# Pull model
ollama pull llama3.2
Setting Up OpenAI
# Add to ~/.bashrc or ~/.zshrc
export OPENAI_API_KEY="sk-..."
# Update config
provider: "openai"
๐ Full configuration guide: CONFIGURATION.md
๐ Usage
Invocation Methods
1. Direct Command (Best for learning)
hai "find large files"
hai "show git status"
hai "what's taking up disk space?"
2. @hai Prefix (Best for daily use)
@hai list Python files modified today
@hai commit all changes with message 'Update docs'
3. Keyboard Shortcut (Best for speed)
# 1. Type your query
show me uncommitted git changes
# 2. Press Ctrl+X Ctrl+H
# 3. hai processes and suggests command
Example Queries
File Operations:
hai "find files larger than 100MB"
hai "show files modified in the last 24 hours"
hai "find all TypeScript files that import React"
Git Workflows:
hai "show uncommitted changes"
hai "create branch feature/auth and switch to it"
hai "show me what changed in the last commit"
System Information:
hai "what's using the most disk space?"
hai "show CPU and memory usage"
hai "find processes using port 8080"
Development Tasks:
hai "install Python dependencies from requirements.txt"
hai "run pytest with coverage"
hai "build Docker image and tag as latest"
Asking Questions (No Command Execution):
hai "What's the difference between ls -la and ls -lah?"
hai "How does git rebase work?"
hai "When should I use grep vs awk vs sed?"
hai "Explain what the -R flag does in chmod"
hai "Why would I use git merge instead of git rebase?"
๐ 20+ examples and tutorials: USAGE.md
๐ฏ Understanding Dual-Layer Output
hai operates in two modes automatically:
Command Mode (Action Requests)
When you request an action, hai shows both what the AI is thinking and what command it generates:
โโโ Conversation โโโ
I'll search for large files in your home directory and sort them by size.
The find command will look for files over 100MB, and du will show sizes in
human-readable format.
Confidence: 90% [โโโโโโโโโยท]
โโโโโโโโโโโโโโโโโโโ
โโโ Execution โโโ
$ find ~ -type f -size +100M -exec du -h {} + | sort -rh | head -20
1.2G /home/user/videos/movie.mp4
856M /home/user/downloads/ubuntu.iso
234M /home/user/.cache/spotify/Data/1234.cache
Execute this command? [y/N/e(dit)]:
Question Mode (Informational Questions)
When you ask a question, hai provides a direct answer without generating a command:
$ hai "What's the difference between rm -rf and rm -r?"
Both commands remove directories recursively (-r flag), but there's an
important difference in the -f flag:
- rm -r: Recursive removal, prompts for confirmation on write-protected files
- rm -rf: Recursive removal with -f (force), suppresses all prompts
โ ๏ธ Use rm -rf with extreme caution! It will delete everything without asking.
Confidence: 98% [โโโโโโโโโยท]
Benefits:
- Learning: Understand what commands do and why
- Transparency: See the AI's reasoning process
- Confidence: Visual indicator shows reliability (0-100%)
- Trust: Verify before executing (command mode)
- Knowledge: Get answers without execution (question mode)
๐ค Contributing
Contributions welcome! This project is in active development.
Development Setup
git clone https://github.com/frankbria/hai-sh.git
cd hai-sh
uv venv && source .venv/bin/activate
uv sync
pytest
Running Tests
# All tests
pytest
# With coverage
pytest --cov=hai_sh
# Specific category
pytest tests/unit/
pytest tests/integration/
Code Quality
# Format code
black hai_sh/ tests/
# Lint
ruff hai_sh/ tests/
Current Test Status
- Total Tests: 576 (all passing โ )
- Coverage: 92.18%
- Unit Tests: 560
- Integration Tests: 16
๐ฏ Design Philosophy
- Seamless Integration - Feel like a natural extension of bash
- Local-First - Support local/Ollama models for cost-effective daily use
- Safety - Clear permission boundaries, confidence-based execution
- Transparency - Always show what's happening (thinking + doing)
- Agile Evolution - Ship working increments frequently
๐ Documentation
-
INSTALL.md - Complete installation guide (792 lines)
- Prerequisites and system requirements
- pip and development installation
- Shell integration (bash/zsh)
- First-run configuration
- Troubleshooting guide
-
CONFIGURATION.md - Configuration reference (1272 lines)
- All configuration options explained
- Provider setup (OpenAI, Anthropic, Ollama)
- Context and output settings
- 7 example configurations
- Security best practices
-
USAGE.md - Usage guide and tutorial (1298 lines)
- Getting started tutorial
- 20+ example queries with output
- Common workflows
- Tips and best practices
- Advanced usage patterns
-
PRD.md - Product requirements and vision
-
ROADMAP.md - Development roadmap and milestones
๐ Security & Privacy
API Key Security
โ DO:
- Store API keys in environment variables
- Use
chmod 600on config files - Add config files to
.gitignore
โ DON'T:
- Commit API keys to git
- Share config files with credentials
- Use API keys in public repositories
Privacy-First Options
Use Ollama for complete privacy:
provider: "ollama" # All data stays on your machine
context:
include_history: false # Don't send command history
include_env_vars: false # Don't send environment
๐งช Testing
hai includes comprehensive test coverage:
Test Categories
- Unit Tests (560): Core functionality, edge cases, error handling
- Integration Tests (16): End-to-end workflows with realistic use cases
- Files modified in last 24 hours
- TypeScript files importing React
- Disk space analysis
- Python venv setup
- Git workflows
Test Infrastructure
- Framework: pytest with pytest-cov
- Mocking: MockLLMProvider for consistent testing
- Coverage: 92.18% code coverage
- CI/CD: Ready (workflows TBD)
๐ Troubleshooting
Common Issues
Command not found:
# Add to PATH
export PATH="$HOME/.local/bin:$PATH"
Keyboard shortcut not working:
# Check integration
_hai_test_integration
# Reload shell
source ~/.bashrc
Ollama connection refused:
# Start Ollama server
ollama serve
# Pull model
ollama pull llama3.2
๐ Full troubleshooting guide: INSTALL.md
๐ License
This project is licensed under the GNU Affero General Public License v3.0 - see LICENSE for details.
๐ Links
- GitHub: https://github.com/frankbria/hai-sh
- Issues: https://github.com/frankbria/hai-sh/issues
- Discussions: https://github.com/frankbria/hai-sh/discussions
- PyPI (coming soon): https://pypi.org/project/hai-sh/
๐ Inspiration & Credits
- Built with a similar agile approach to parallel-cc
- Inspired by the philosophy of making AI accessible and private
- Thanks to the open-source community for tools like Ollama, pytest, and pydantic
๐ Project Stats
- Lines of Code: ~10,000+
- Tests: 576 (100% passing)
- Coverage: 92.18%
- Documentation: 3,362 lines (INSTALL, CONFIGURATION, USAGE)
- Python Version: 3.9+
- License: AGPL-3.0
Status: ๐ง Under Active Development | v0.1 Pre-release
Say "hai" to your new shell assistant! ๐
Ready to get started? โ INSTALL.md
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hai_sh-0.1.0.tar.gz.
File metadata
- Download URL: hai_sh-0.1.0.tar.gz
- Upload date:
- Size: 75.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
29fea628b0a4da659450baf57df4644f7717861bc5726bb95b50b3e58791108b
|
|
| MD5 |
a2a43883057ab53bd78a50fd4ef9da33
|
|
| BLAKE2b-256 |
01d1ed49f4daa74ed57c4662566d465e65780b17503379a01c4b94637718dda7
|
File details
Details for the file hai_sh-0.1.0-py3-none-any.whl.
File metadata
- Download URL: hai_sh-0.1.0-py3-none-any.whl
- Upload date:
- Size: 82.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cdd76ef1ef92cc54975c9de4d381e34258118b7d4acdad24a1dab24007f17f0f
|
|
| MD5 |
f851e5bdefc006e59736a5a37b890afc
|
|
| BLAKE2b-256 |
319512bcd5f31fe4777ed9ab95740545e2bd17d95460d7d26d46b1ceae3c5c5c
|