haze.
Docs / Getting started

Quickstart.

Install haze, connect an OpenAI-compatible provider, choose a model, and give it real work in under five minutes.

Requirements

  • Node 22 or newer. Check with node -v. haze is an ESM TypeScript CLI and does not ship prebuilt binaries.
  • An OpenAI-compatible provider. Use a hosted provider, a local server, or your own proxy. You bring the API key; haze has no default model and never picks one silently.
  • macOS or Linux are the primary targets; Windows works through WSL.

Install

terminal
npm i -g @denizokcu/haze
haze --version   # 1.3.0

The global install gives you one binary: haze. Run it from any project directory — sessions, skills, and instructions are stored per workspace, with shared state under ~/.haze/.

Configure a provider

On first run, haze opens the provider picker. You can also run /provider any time to add, edit, or remove providers.

Hosted, via OpenRouter (recommended to start)

inside haze
/provider
# add provider → openrouter (preset)
# paste your API key from openrouter.ai/keys

OpenRouter fronts Anthropic, Google, Meta, DeepSeek, and hundreds more behind one key. Provider presets also exist for OpenAI, Mistral, Groq, DeepSeek, xAI, Cerebras, Together, Fireworks, Hugging Face, Moonshot, NVIDIA, and Qwen.

Fully local, via Ollama

inside haze
/provider
# add provider → ollama (preset) — base URL http://localhost:11434/v1, no key needed
/model local:qwen2.5-coder:32b

LM Studio works the same way (http://localhost:1234/v1). Loopback HTTP is allowed without TLS; any remote endpoint must use HTTPS when you send credentials.

Any OpenAI-compatible proxy

inside haze
/provider
# add provider → custom → name: gateway
# base URL: https://llm.internal.example.com/v1
# API key: (optional)
No environment variables. Provider settings and keys live in ~/.haze/settings.json with private POSIX permissions (0600). Malformed settings fail loudly at startup instead of being treated as empty.

Pick a model

inside haze
/model
# picker → add models: fetches the provider's OpenAI-compatible /models list

# or set one directly — also switches the provider:
/model openrouter:anthropic/claude-sonnet-4.6
/model local:llama3.1
/model list   # show all configured models

If model discovery fails, type names manually. Per-run overrides exist for scripts: haze -m provider:model never touches your saved settings.

Your first task

Ask for work the way you would describe it to a teammate. haze explores first, edits precisely, and validates before reporting.

prompts that work well
fix the failing test in tests/parser and explain the root cause
add rate limiting to the /auth endpoints, with tests
@src/legacy/date.ts rewrite this module to use the Intl API, keep the public API
@design/empty-state.png implement this empty state in the orders view

While it works you see compact tool blocks — files read, edits applied, commands run with exit codes and validation summaries. Validation pipelines use pipefail, so a formatter such as tail cannot hide a failing test process. If provider context fills, haze compacts and retries with a smaller budget; exhausted recovery leaves a resumable context_exhausted checkpoint. Esc aborts the current turn; sessions survive restarts via /resume or haze --continue.

Generate project instructions. Run /init once and haze writes a compact AGENTS.md describing your repo — commands, conventions, and layout — so every future session starts informed.
Supervise consequential work. haze does not use command confirmation gates. Fetched pages and external tool output are treated as untrusted data, but prompt injection cannot be eliminated by labeling alone. Review the transcript and keep backups for important repositories.

Next steps

  • Command reference — every slash command and CLI flag, including headless CI mode.
  • Skills — turn your repeated workflows into slash commands with /skills.
  • Tools — what the model can call, including LSP and MCP integration.
  • Workflows — sessions, fleet, images, and context files in practice.