haze.
HAZE · CODING AGENT · REV 0.10.0

A CLI agent close to
the model
No guardrails

Bring your own model. haze can read and edit files, attach images, run commands and dev servers, fetch URLs, manage tasks, delegate work, and follow Markdown skills. LSP navigation is optional.

$npm i -g @denizokcu/haze
§01 Operation

Three commands.

Install haze, add an OpenAI-compatible endpoint, and pick a model.

  1. 01 $npm i -g @denizokcu/haze Install globally from npm.
  2. 02 haze Open haze from a project directory.
  3. 03 /provider then /model Add any OpenAI-compatible endpoint and pick a model. OpenRouter, OpenAI, LM Studio, Ollama, or a proxy.

That's the core. There is no Pro plan. To save a workflow, open /skills, choose add skill, and use the wizard below.

§02 Native skill creation

Create skills
inside haze.

Open /skills, choose add skill, and describe the job. You decide whether the Markdown file belongs to this project or in your global haze directory. Once it exists, call it like any other slash command.

skill wizard · live in the chat
/skills → add skill starts the wizard from any haze session
step 1/3 · name code-review
step 2/3 · scope this project
step 3/3 · description Review the diff between the current branch and main, focusing on bugs, tests, DRY and KISS.
created at .haze/skills/code-review/SKILL.md · project · invoke with /code-review

Skills are ordinary Markdown files. Put a team workflow in .haze/skills or keep a personal one in ~/.haze/skills.

haze labels project skills as repository content. A project skill takes priority over a global skill with the same name unless you disable it.

The model can load a matching skill on its own, or you can call the skill by name.

Try these: run /skills, choose add skill, and type them in · /skills
/code-review
roleYou are a focused code reviewer.
descriptionReview the diff between the current branch and main, focusing on bugs, tests, DRY and KISS.
/deploy-check
roleYou are a release-readiness verifier.
descriptionRun lint, typecheck, tests, and build in one call. Report each step pass/fail with the exact failing output; do not stop at the first failure.
/release-prep
roleYou are a commit-crafting assistant.
descriptionInspect uncommitted changes, group them into clean conventional commits, and write the commit messages. Do not commit; show me the proposed commands.
/security-review
roleYou are an application security auditor.
descriptionAudit auth flows, secret handling, and injection surface (SQL, command, XSS, SSRF) in the current branch diff. Cite file:line for every finding with severity.

You can also load a skill directly. Type /code-review in the chat to run it as a slash command.

§03 Field behavior

Watch it work.

Tool calls appear in compact activity blocks while they run. haze shows the work but does not pause for approval.

Type @ to browse files in the workspace. If you type a file or directory path yourself, haze can read it for that turn even when it sits outside the workspace. Edits still stay inside the project. Images only go to providers you have marked as image-capable.

haze can keep up to five dev servers or watchers running in the background. Each process has a capped output log. Aborting a turn leaves it running; starting a new session or leaving haze stops it.

If a job splits into separate pieces, /fleet can hand them to disposable workers. Each worker starts with fresh project instructions and fixed limits. The main conversation only receives the short result.

Failed and repeated tool calls include a recovery hint. File pages use a sparse line index, and a timed-out command cannot hang haze just because one of its children kept an output pipe open.

haze reads global guidance and the project's root instructions at startup. It picks up nested instructions when it reaches that part of the tree and reads them again if they change.

Session files skip streaming chatter and bulky raw output. Use /resume to browse old workspace sessions, continue one, or fork a copy.

Calibration printout · one turn
+editFilesrc/config.ts+3 −1 in 0.08s
+ if (!process.env.DATABASE_URL) throw new Error('required'); − // TODO: validate environment
+bashnpm run typecheckvalidation, exited 0 in 1.8s
validation: 0 diagnostics, 12 files checked
+bashnpm testvalidation, exited 0 in 2.4s
validation: 38 passed, 0 failed
§04 Components

What the model can use.

haze ships with the tools below and collects no telemetry. The fetch tool handles network reads and only accepts public URLs.

Read HAZE-R · 5
listFiles HAZE-R-001

Browse project files with cursor pagination. A directory path typed by the user can also open that directory for reading during the turn.

readFile HAZE-R-002

Read numbered UTF-8 lines in bounded pages. A small, signature-checked index speeds up later pages. User-typed paths can open files outside the workspace for reading during that turn.

grep HAZE-R-003

Search with the bundled ripgrep binary. Results have one global cap, and ignored paths require an explicit override.

readToolOutput HAZE-R-004

Page through raw output that was too large for the original result. The retained data has fixed memory limits.

lsp* HAZE-R-005

Look up symbols, definitions, and references through a language server you configure. haze kills the server process tree if normal shutdown fails.

Write HAZE-W · 3
editFile HAZE-W-001

Unique text replacements with line-prefix tolerance and recovery hints.

replaceLines HAZE-W-002

Line-range edits with EOF clamping for slightly-oversized ranges.

writeFile HAZE-W-003

Create files and parent directories.

Shell HAZE-S · 2
bash HAZE-S-001

Run commands with capped output and report the cwd, duration, classification, and validation result. Set background=true to register a dev server or watcher. If a foreground command times out or is aborted, haze kills its process tree and does not wait forever on an open pipe.

process HAZE-S-002

List background work, read its output, or stop it. haze allows five registered processes, each with a 256 KB rolling output window. The status bar shows how many are running. A session reset or haze exit stops them all.

Network HAZE-N · 1
fetch HAZE-N-001

Read public http(s) URLs as Markdown, formatted JSON, or text. haze rejects unsafe schemes, private addresses, and malformed IPv6-like hosts. It checks redirects and pins each connection to the public IP it validated.

Agent state HAZE-A · 3
writeTasks HAZE-A-001

Replace the workspace task list when the work enters a new phase. haze assigns the IDs and clears a completed list on the next user turn.

skill HAZE-A-002

Load a global or project Markdown workflow, then read its references as needed. Results show where the skill came from, and haze marks project skills as untrusted repository content.

subagent HAZE-A-003

Send separate tasks to disposable workers. A worker starts with the project instructions for its scope and only the tools allowed by its mode. Its private context stays private; the parent gets a short result. If a worker ignores an abort, haze keeps its concurrency or mutation slot occupied until it actually stops.

OPTIONAL · LSP

Use /lsp to configure read-only language-server navigation. Presets are included for TypeScript, Rust, Python, Go, and PHP, but haze does not install the servers. LSP tools only appear when an enabled server command is on PATH. Otherwise the model uses grep, listFiles, and readFile. When haze closes a server or receives bad protocol data, it terminates the server's process tree and forces it to exit if needed.

§05 Compatibility

Bring your
own model.

Use any OpenAI-compatible endpoint. Add its URL and key with /provider. Then let /model fetch the available models, or type them yourself if discovery fails. haze never picks one for you. A remote endpoint needs HTTPS when you send credentials, but loopback HTTP still works. To send png, jpeg, gif, or webp files, mark the provider as image-capable. A path you type may point outside the workspace, though haze will only read it.

Provider Type Status
OpenAIHostedSupported
Anthropicvia OpenRouterSupported
Googlevia OpenRouterSupported
Mistral AIHostedSupported
Metavia OpenRouterSupported
OllamaLocalSupported
LM StudioLocalSupported
OpenRouterAggregatorSupported
GroqHostedPreset
DeepSeek, xAI, CerebrasHostedPresets
Together, Fireworks, Hugging FaceHostedPresets
Moonshot, NVIDIA, QwenHostedPresets
Any OpenAI-compatible proxyCustomSupported
§06 · INSTALL

Install haze.

haze is MIT licensed. It writes detailed LLM logs only when you start it with haze --debug. Provider settings live in ~/.haze/settings.json with private POSIX permissions; haze does not read them from environment variables.

$npm i -g @denizokcu/haze
§07 Commands index

Command
reference.

The core commands, aliases, model options, log options, and installed skills are listed here. The model uses writeTasks directly, so haze has no task command.

Agent & Session
/help Show all slash commands.
/exit, /quit Exit haze.
/clear Clear conversation history and the task list.
/new Start a fresh durable session for this workspace.
/resume [id] Browse this workspace's sessions and either continue one or fork a copy. Pass an exact id to resume it directly.
/session Show the current durable session file.
/compact [instructions] Keep recent messages and condense older context into a size-limited excerpt, starting with the newest entries. The result says what it omitted.
/init Create or update compact, budget-aware AGENTS.md project instructions.
/context Show a token breakdown of the current request: system prompt, project context, tools (incl. MCP), and chat messages.
/tips Toggle rotating keyboard and workflow tips beneath the busy label.
/fleet [--review] [--profile name] [--workers provider:model] [--concurrency n] <prompt> Split independent work across disposable workers. The profile controls concurrency and deadlines, and each run has a tool limit. haze serializes file changes across retries. If a worker ignores an abort, its slot stays occupied until it stops. These options apply to one run, and haze declines work that cannot run in parallel.
Configuration
/provider Choose or add a provider. From there you can manage its models, set the API key, toggle image input, or remove the provider.
/model Choose a configured model or fetch a provider's model list from its OpenAI-compatible /models endpoint.
/model <name-or-provider:name> Set a model directly. Also sets its provider.
/model list List all configured models.
/settings Show provider, model, API key and image-capability status, LSP/MCP servers, skills, and loaded context files.
/settings open Open ~/.haze/settings.json with the OS default app.
/logs [id] List recent LLM logs, or summarize one by id. New detailed logs are written only when haze starts with --debug.
/lsp Configure language-server navigation tools. Interactive picker: add a preset (typescript, rust, python, go, php) or a custom command, then enable/disable/remove. LSP tools appear only when an enabled server command is on PATH.
/mcp Configure Model Context Protocol servers like Context7. Interactive picker: add a preset or custom http/sse/stdio server, then enable/disable/remove it or set a masked API key. MCP tools never shadow built-ins.
Skills
/skills Create and manage global or project Markdown skills. The picker shows each skill's source and lets you enable, disable, validate, or remove it.
Dynamic
/<skill-name> Invoke any installed skill directly, such as /code-review. The model can also invoke skills when they match a request.
Terminal flags (run haze --help)
haze -p, --prompt <text> Run one non-interactive turn with the full toolset, print the final reply, and exit. Complete turns exit with 0; aborted or failed turns exit non-zero. Pass the prompt with -p or pipe it through stdin, for example echo "..." | haze. Print mode does not save sessions and ignores --continue. You can use --resume <id> to load context without changing the original session.
haze --output <text|json|stream-json> Choose the print-mode output. json writes one { type, status, result, usage } envelope for scripts and CI. stream-json writes live NDJSON events, followed by the same result envelope. The final status determines the exit code.
haze -m, --model <selector> Override the model for this run without changing settings. Use the name or provider:name of a model already added through /provider. An unknown or ambiguous selector exits non-zero with a precise error.
haze -c, --continue Resume the latest saved session for this workspace (interactive only).
haze --resume <id> Resume an exact workspace session. Combine with -p to load its context for one non-durable turn. Unknown ids exit non-zero.
haze --no-session Run without saving or resuming a durable session.
haze --debug Show model/tool debug logs and write a detailed JSONL log to ~/.haze/logs/ (works in both interactive and print mode).

NOTE / The model can load a skill when your request matches it. You can also load one directly with /<skill-name>.