Hazzel
A small terminal coding agent. Bring your own key.
Hazzel lives in your terminal. It reads code, edits files, runs commands, and works with git — always with your approval first.
pip install hazzel
cd your-project
hazzel
Run /model, pick a provider, paste your key. Keys are stored at ~/.config/hazzel/config.json with 0600 permissions. Env vars (OPENAI_API_KEY, ANTHROPIC_API_KEY, MISTRAL_API_KEY, GROQ_API_KEY, GEMINI_API_KEY, DEEPSEEK_API_KEY, OPENROUTER_API_KEY) work too. Ollama runs local models with no key (OLLAMA_HOST overrides the default http://localhost:11434/v1).
Windows works too (PowerShell or cmd) — the full-screen menus gracefully fall back to plain prompts, no new dependencies.
❯ Fix the failing test in tests/test_agent.py
● read_file tests/test_agent.py
● edit_file src/hazzel/agent.py
● run_command pytest -q — passed
Why Hazzel?
Most coding agents keep getting bigger. Hazzel stays small on purpose.
The model suggests what to do. Hazzel decides whether and how to do it. Every mutation goes through you: file changes show a diff before they apply, shell commands ask first, and destructive git stays blocked.
If you want the most feature-heavy agent, there are better options. If you want a terminal agent you can see through, that's Hazzel.
What it does
- Read, search, and list your codebase. Tag files with
@pathto put them in context. - Create and edit files with diff preview and approval. Undo with
/undo. - Run shell commands with approval and timeout, sandboxed to your project root. Read-only cmds (
ls,cat,git status…) skip approval. - Plan mode (
/plan on): read-only exploration. Hazzel proposes a numbered plan, changes nothing until you run/plan off. - Prove mode (
/prove on): smoke-checks Python edits in/tmpbefore you trust them. - Goal (
/goal): pin an objective, run it with/goal run; every turn steers toward it until done. - Git-native:
/status,/diffwith file browser,/reviewwith senior-level findings,/commitwith suggested message,/branch,/log,/push,/pull,/sync. No--force, noreset --hardvia shell. - GitHub PRs via
gh:/prlists open PRs,/pr view|diff|checks <n>reads,/pr comment|merge|close <n>and/pr create <title>write (approval first, plan-mode read-only). Needsgh auth login. - Model thinking stays collapsed behind an Enter-to-expand prompt — peek only when curious.
- Read the web:
fetch <url>pulls public docs and references into context (read-only). - Multiline input: Ctrl+J for newlines, full multiline paste.
- Extras:
/docsprints the full usage guide,/initdrafts anAGENTS.mdproject map,/exportsaves the transcript,/copygrabs the last reply,/retryre-runs your last message. - Streams responses with per-turn token usage (
/usage).
Providers
Bring your own key. No subscription.
- Groq (default:
openai/gpt-oss-120b) - OpenAI
- Anthropic
- Mistral
- Gemini
- DeepSeek
- OpenRouter (100+ models through one key)
- Ollama (local, no key)
Switch anytime with /model.
What it is not
Early-stage (v1.3.2). Expect rough edges.
No deploys, no background agents, no session persistence across restarts. It doesn't replace your editor — it stays in the terminal next to it.
Contributing
Issues and pull requests welcome.
License
AGPL-3.0-or-later. See LICENSE.
If it fits your workflow, star the repo. It helps other terminal-first developers find it.
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 hazzel-1.3.7.tar.gz.
File metadata
- Download URL: hazzel-1.3.7.tar.gz
- Upload date:
- Size: 103.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5b34606c595c45395e85062b62f79cb3cde89bdf547b140c8435e16767d68723
|
|
| MD5 |
051fef2766771f97712983bec21c2fe8
|
|
| BLAKE2b-256 |
8e5baaa18961d0a2d06b2878449188e1534d1241bb565ae65f85c252621098d5
|
File details
Details for the file hazzel-1.3.7-py3-none-any.whl.
File metadata
- Download URL: hazzel-1.3.7-py3-none-any.whl
- Upload date:
- Size: 108.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
020ee616b6a3ace61690e4c41b7cbbb6d09a65f9c4bfa097e4d29bcde31a8d86
|
|
| MD5 |
4a43df4b31d00e12d753d476dda103c2
|
|
| BLAKE2b-256 |
bd138e4abc056d86333a82233addffe10e44b00f0ed820b3ca789088d68b86a4
|