haze.
HAZE — CODING AGENT — REV 0.6.0

A CLI agent for Experts Close to
the model
No guard rails

Agentic workflows for people who know what they're doing. Bring your own model. File, shell, fetch, optional LSP, task, subagent, and skill tools. Do something twice, make it a skill.

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

Three commands.

haze starts intentionally small. Install it, point it at 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 whole core. There is no Pro plan. Anything more specific is grown with the model through /skills → add skill — the wizard below.

§02 Native skill creation

Skills, grown
inside haze.

Run /skills and choose add skill. Two prompts — name and description. The model writes the Markdown. The skill becomes a slash command on equal footing with the built-ins. This is the superpower. No plugin runtime, no schema file, no second binary.

skill wizard — live in the chat
/skills → add skill starts the wizard from any haze session
step 1/2 · name code-review
step 2/2 · 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 · invoke with /code-review

You define skills in plain Markdown, right from the chat.
No plugin. No second binary. No YAML to memorize.

The model invokes a skill naturally during conversation in plain language — no command to type, no menu to open.
Your workflow gets guided and stays expectable.

Heavy lifting moves into the skill.
The conversation itself stays simple and minimal. KISS.

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.

Prefer to be explicit? Skills are also first-class slash commands — type /code-review in the chat and the model loads it on the spot.

§03 Field behavior

Watch it work.

Tool calls are grouped into per-turn activity blocks with compact live summaries.
haze has no permission gates, intentionally.

Assistant Markdown renders as real terminal UI — headings, tables, code, quotes, links.
The transcript stays readable during actual work.

Skills are handed over to the model.
The LLM decides when to use a skill.

Skills are tools written by you.
Create a skill if you have to do it multiple times.

Failures and repeated identical tool calls get recovery hints.
Reuse what already happened, change inputs, or stop cleanly.

Project instructions follow the files being touched.
Global CLAUDE.md and AGENTS.md are loaded up front; nested files are discovered only inside their subtree.

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

The components.

No hidden tools. What you see is what the model gets. No telemetry; network access is an explicit bounded fetch tool for public URLs.

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

Recursive project discovery with cursor pagination.

readFile HAZE-R-002

Bounded, numbered UTF-8 reads with nextOffset paging.

grep HAZE-R-003

Bundled ripgrep search with a true global result cap.

readToolOutput HAZE-R-004

Retrieve paged output omitted from oversized bash, grep, and fetch results.

lsp* HAZE-R-005

Optional semantic symbols, definitions, and references via installed user-configured language servers.

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 · 1
bash HAZE-S-001

Run commands with classification, cwd, duration, and parsed validation.

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

Read public http(s) URLs as Markdown, pretty JSON, or text with scheme, DNS, redirect, and private-address SSRF guards.

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

Replace the workspace task list at meaningful phase changes; IDs are generated server-side and completed lists auto-clear on the next user turn.

skill HAZE-A-002

Load one installed Markdown workflow, then fetch referenced files only on demand.

subagent HAZE-A-003

Delegate genuinely independent investigations or actions with a capped focused tool loop.

OPTIONAL · LSP

Configure read-only Language Server Protocol navigation with /lsp. Presets cover TypeScript, Rust, Python, Go, and PHP. Haze does not install language servers, and hides LSP tools from the model unless an enabled server command exists on PATH; without LSP it falls back to grep, listFiles, and readFile.

§05 Compatibility

Bring your
own model.

Any OpenAI-compatible endpoint. Configure providers, models, base URLs, and keys via /provider and /model inside Haze — not environment variables. Your key, your bill.

Provider Type Status
OpenAIHostedSupported
Anthropicvia OpenRouterSupported
Googlevia OpenRouterSupported
Mistral AIHostedSupported
Metavia OpenRouterSupported
OllamaLocalSupported
LM StudioLocalSupported
OpenRouterAggregatorSupported
GroqHostedSupported
Any OpenAI-compatible proxyCustomSupported
§06 · INSTALL

Install haze.

MIT-licensed. Open source. No contact-sales button. Detailed LLM logs are off by default and only written with haze --debug. Provider settings live in ~/.haze/settings.json, not environment variables.

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

Every command,
all at once.

Core slash commands plus aliases, model/log subforms, and installed-skill invocations. Tasks are managed by the model via the writeTasks tool — no command for them.

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 Resume the latest saved session.
/session Show the current durable session file.
/compact [instructions] Summarize older model context; keep recent messages.
/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.
Configuration
/provider Choose a provider; add/remove models, set API key, or remove it.
/model Choose a model from all configured providers.
/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 status, LSP servers, 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 Manage Markdown skills in one interactive picker: generate a custom skill from a description, show info, enable/disable, validate, or remove.
Dynamic
/<skill-name> Invoke any installed skill directly — e.g. /code-review. The model can also invoke skills on its own.

NOTE / Skills trigger naturally during chat in plain language, or explicitly as /<skill-name>. The model picks when they fit — you don't have to memorize anything.