Skip to main content

Hazzel

Hazzel

A small terminal coding agent. Bring your own key.

PyPI Python License

Hazzel lives in your terminal. It reads code, edits files, runs commands, and works with git — always with your approval first.

Hazzel demo

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).

❯ 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 @path to 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 /tmp before you trust them.
  • Git-native: /status, /diff with file browser, /commit with suggested message, /branch, /log, /push, /pull, /sync. No --force, no reset --hard via shell.
  • GitHub PRs via gh: /pr lists open PRs, /pr view|diff|checks <n> reads, /pr comment|merge|close <n> and /pr create <title> write (approval first, plan-mode read-only). Needs gh 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).
  • Extras: /docs prints the full usage guide, /init drafts an AGENTS.md project map, /export saves the transcript, /copy grabs the last reply, /retry re-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.1.0). 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

hazzel-1.1.0.tar.gz (83.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hazzel-1.1.0-py3-none-any.whl (90.9 kB view details)

Uploaded Python 3

File details

Details for the file hazzel-1.1.0.tar.gz.

File metadata

  • Download URL: hazzel-1.1.0.tar.gz
  • Upload date:
  • Size: 83.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.9

File hashes

Hashes for hazzel-1.1.0.tar.gz
Algorithm Hash digest
SHA256 b9e1fa33e645a5ba51f8203f011d9b839d6f5714038ddb58137764acf85680ee
MD5 ea5e219648caf49f2cabbb65e2cfb572
BLAKE2b-256 47269e38f31ca2c46578b9551876d19bdf3a65c46a0937102bb8c1ff2193a667

See more details on using hashes here.

File details

Details for the file hazzel-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: hazzel-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 90.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.9

File hashes

Hashes for hazzel-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8936220953eea05756e06f06947da99c848d30605c319abad2c02f2dcf3a6647
MD5 8bb78dc4eeee33e23c27db7e260ae77a
BLAKE2b-256 87c7776ce42ac3888ac72ed741c0133a5a519a7918b74f1f3357988fa3873925

See more details on using hashes here.

Release history Release notifications | RSS feed

1.4.0

2 files

1.3.9

2 files

1.3.8

2 files

1.3.7

2 files

1.3.6

2 files

1.3.5

2 files

1.3.4

2 files

1.3.3

2 files

1.3.2

2 files

1.3.1

2 files

1.3.0

2 files

1.2.0

2 files

This release

1.1.0 This release

2 files

0.4.0

2 files

0.1.9

2 files

0.1.8

2 files

0.1.7

2 files

0.1.6

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page