English
·
简体中文
---
**A DeepSeek-native terminal code agent engineered for cache economics.** Prefix-cache architecture keeps the longest common prefix cache-hot across turns; LLM auto-selects pro for deep reasoning and flash for routine tasks — maximizing cache hits and minimizing token cost. Premium TUI with `.claude/skills/` and `.claude.json` MCP configs drop in — zero-friction onboarding. One Go binary.
**DeepSeek 原生终端编码代理,围绕缓存经济学设计。** 前缀缓存架构让最长公共前缀跨轮次持续命中;LLM 自动按任务选模型——pro 做深度推理,flash 处理常规任务——最大化缓存命中,最小化 token 成本。专业级 TUI,`.claude/skills/` 和 `.claude.json` MCP 配置开箱兼容,零摩擦迁移。单一 Go 二进制。
---
## Quick Start
### macOS / Linux
```sh
curl -fsSL https://raw.githubusercontent.com/Menfre01/waveloom/main/install.sh | sh
```
Or via Homebrew:
```sh
brew install menfre01/tap/waveloom
```
> Supports macOS / Linux / Windows, AMD64 & ARM64. Installs to `~/.local/bin`, no sudo needed.
### Windows
Requires [Git for Windows](https://git-scm.com/downloads/win). Open PowerShell and run:
```powershell
powershell -c "irm https://raw.githubusercontent.com/Menfre01/waveloom/main/install.ps1 | iex"
```
> [!TIP]
> **For the best experience on Windows, use [WSL2](https://learn.microsoft.com/en-us/windows/wsl/install).** Install the Linux binary inside WSL2 and enjoy native performance — no Git Bash forwarding layer, smoother terminal rendering, and faster shell commands.
>
> Prefer Git Bash? Waveloom requires `bash.exe` — cmd and PowerShell are not supported. After installation, **open Git Bash** and run the commands below. If `waveloom` is not found, add `%USERPROFILE%\.local\bin` to your Windows PATH (the installer handles this automatically).
### Configure
```sh
waveloom setup
waveloom
```
> [!IMPORTANT]
> API key connects directly to DeepSeek / Kimi / GLM / OpenAI — your code never passes through a third-party server. Every file write and command execution requires your confirmation.
---
## How does it compare?
| | Waveloom | Claude Code | Reasonix |
|---|---|---|---|
| Skill/Plugin | Drop-in: `.claude/skills/` SKILL.md + `.claude/plugins/` installed plugins, 9 frontmatter fields (`$ARGUMENTS`, `paths`, `` !`cmd` `` injection, etc.) | Native SKILL.md + commands + plugin system | 13 frontmatter fields, no variable substitution in skill bodies |
| Cache design | DeepSeek prefix matching: 4-tier watermark (Snip → Prune → Summarize), compaction bytes never change | Anthropic `cache_control`: `cache_edits` API, dynamic system prompt sections | DeepSeek prefix matching: 4-tier (notice → snip → compact → force), `session.Replace()` bumps rewrite version |
| Compaction | Monotonic — `compactionDecisionSet` + triple cursor, each message compacted once | Per-turn independent, no durability guarantee | Prefix bytes preserved across compact, but no per-message decision tracking |
| Plan mode | Guard restricts writes to plan file only; build tools auto-allowed | Write restricted to plan file only; rich exit UI | `planmode.Policy` with trust gates for bash/MCP; Marker string injected; no plan file |
| Sub-agents | Fork (inherits context) / Cold: Evaluate (code review) • Explore (read-only) • Verification (adversarial) | Fork + Cold + In-process + Coordinator | `task` tool with nested agent, background via job manager |
| Runtime | Go binary ~20MB, zero deps | Node.js | Go binary + Desktop app, external plugin host |
| MCP | Full client (config, transport, tool proxy), registered alongside built-in tools | Native MCP support | Native MCP support |
| Permission | 8-step pipeline, 5-layer tool output security (Unicode cleaning → injection scan → boundary markers → risk grading → safe truncation), 4-tier command safety (RiskNone/RiskLow/RiskMedium/RiskHigh) | 8-source rule merge + LLM classifier auto-approval | Policy + Approver, 9-stage execute pipeline, shellsafe readOnly detect |
| Hook | PreToolUse / PostToolUse / Notification / Stop, permission_mode field, fail-open by default (exit code 2 explicitly blocks) | Native hooks: PreToolUse, PostToolUse, etc. | — |
| TUI polish | Streaming reasoning, rich diff, permission dialogs, `@` fuzzy picker, `/` palette, i18n, theme toggle — premium terminal UX | Native TUI (Ink/React), gold standard | Functional TUI, different UX paradigm |
**Choose Waveloom if**: you want premium terminal UX with multi-provider support (DeepSeek / Kimi / GLM / OpenAI), `.claude/skills/` + `.claude/plugins/` drop-in, without the cache miss cost.
**Choose Claude Code if**: you use Anthropic, need coordinator mode, deep in the Claude ecosystem.
**Choose Reasonix if**: you want a desktop GUI, QQ Bot integration, or a larger community ecosystem.
---
## Why TUI
**Waveloom is the only DeepSeek-native agent with premium terminal polish.** Streaming reasoning with syntax highlighting, rich diff, permission dialogs, `@` fuzzy file picker, `/` command palette, light/dark/color-blind theme toggle, `?` shortcut help, zh-CN / en-US i18n. Most DeepSeek agents treat the TUI as an afterthought — raw text streaming, no interaction design. Fire it up and feel the difference.
---
## Highlights
- **Prefix cache optimized** — Fixed System Prompt, append-only message history, four-tier watermark compaction. Maximum common prefix stays cache-hot across turns.
- **Multimodal vision** — Reference images with `@shot.png`; `deepseek-flash` (DeepSeek-V4.1-Flash, natively multimodal) describes screenshots, OCRs text, and analyzes charts.
- **Permission safety** — Three-tier decisions (allow / deny / ask) with pattern-matching rule engine, backed by a 5-layer tool output security pipeline (Unicode cleaning → injection scan → boundary markers → risk grading → safe truncation). Every write operation requires your confirmation.
- **OS-level sandbox** — Optional execution isolation via bubblewrap (Linux) / Seatbelt (macOS): read-only root, workspace-only writes, configurable credential masking (`filesystem.denyRead` / `credentials.files`; recommended list in the settings docs), env var stripping, configurable env injection (redirect build-tool caches like `GOPATH`/`GOMODCACHE`/`npm_config_cache` into the workspace), and network control (`off` / `on`). Auto-activated with `--bypass-permissions`; configure via `"sandbox"` in `settings.json` or `--sandbox-network off|on`.
- **Hook system** — PreToolUse / PostToolUse / Notification / Stop hooks with permission_mode field. Fail-open by default — hook crashes never block tool execution; exit code 2 explicitly blocks. Configured via `settings.json`.
- **Session persistence** — Close the terminal, come back days later with `waveloom --continue`. The agent remembers all prior context.
- **Checkpoint/Rewind** — Rewind to any previous message with full file state restoration. Fork mode preserves original session intact — history never lost.
- **Plan Mode** — Two-stage workflow: explore & design first, implement after approval. `Shift+Tab` to enter/exit, Guard-enforced write protection.
- **Sub_model configuration** — Set `"sub_model": "deepseek-flash"` in `settings.json` to assign a lighter model for explore subagents. Explore uses the sub model for code search and discovery; evaluate/verification subagents use the primary model for full reasoning. LLM auto-selects between the two based on task complexity. Note: as of 2026-09-14, DeepSeek continues to serve `deepseek-v4-pro` with unchanged billing — a distinct backend from flash.
- **14 built-in tools** — `read` / `write` / `edit` / `bash` / `web_fetch` / `web_search` / `ask_user_question` / `enter_plan_mode` / `exit_plan_mode` / `skill` / `agent` / `kill_background_task` / `todo_create` / `todo_update`.
- **i18n multilingual** — Full zh-CN / en-US bilingual UI. `--locale` CLI flag, `/locale` command, auto-detect from LANG.
---
## FAQ
**Q: How do I switch models?**
Type `/model` in interactive mode, or `waveloom --model deepseek-flash`. Select `proplan` to use the `model` in plan mode and the `sub_model` for regular tasks (`/model proplan`). Requires both configured in `settings.json`; it falls back to a plain model error otherwise.
**Q: Does web_search work with deepseek-flash?**
Yes — `web_search` runs on the local backend (DuckDuckGo by default, Brave via `BRAVE_API_KEY`) on every provider. Note: DeepSeek used to offer a server-side built-in `web_search` in the Responses API; it has since been retired (the compatibility table now lists built-in `web_search` as *Ignored*), so Waveloom exposes it as a regular function tool for all models.
**Q: How do I switch LLM providers?**
Type `/provider` to open the interactive provider picker (overlay with ↑↓ select / Enter confirm / Esc cancel), or `/provider kimi` to switch directly. Profiles are configured in `settings.json` under `llm.profiles`.
**Q: Is my API key safe?**
Stored locally at `~/.waveloom/`. Keys connect directly to DeepSeek / Kimi / GLM / OpenAI — no third-party relay.
**Q: How do I switch languages?**
Type `/locale` to toggle between Chinese and English, or `waveloom --locale zh-CN`. The setting persists automatically in `settings.json`.
**Q: How do I configure a lightweight model for explore subagents?**
Add `"sub_model": "deepseek-flash"` to the `llm` section in `settings.json`. The explore subagent uses this model for code search and discovery tasks. For evaluate/verification subagents, the primary model (`model`) is used for full reasoning quality. No runtime switching needed.
**Q: What languages are supported?**
Waveloom works with any text-based project. Post-edit LSP diagnostics automatically verify code correctness for Go, Rust, TypeScript/JavaScript, and C/C++. Other languages use native build tools (`go build`, `npx tsc`, `cargo build`, `make`, etc.).
---
## Docs
| Document | Content |
|----------|---------|
| [`usage`](./docs/usage.en.md) | Interactive mode, shortcuts, Skill system |
| [`settings`](./docs/settings.en.md) | API key, model, timeout, compaction, sub_model |
| [`prefix-cache`](./docs/prefix-cache.en.md) | DeepSeek caching, four-tier compaction |
| [`environment`](./docs/environment.en.md) | Toolchain probing |
| [`mcp`](./docs/mcp.en.md) | MCP client, config sources, CLI management |
| [`mcp-ide-setup`](./docs/mcp-ide-setup-en.md) | Connect IntelliJ IDEA / VS Code MCP Server |
| [`acp`](./docs/acp.en.md) | ACP (Agent Client Protocol) agent mode for Zed, protocol compatibility |
| [`faq`](./docs/faq.en.md) | Frequently asked questions |
| [`lsp`](./docs/lsp.en.md) | LSP diagnostics, language detection, configuration |
---
## Development
Go 1.25+, `make build` / `make test`. See [`CONTRIBUTING.md`](./CONTRIBUTING.md) for project structure and contribution guide.
Built with [Bubble Tea](https://github.com/charmbracelet/bubbletea) (TUI framework),
[Glamour](https://github.com/charmbracelet/glamour) (Markdown rendering),
and [Lip Gloss](https://github.com/charmbracelet/lipgloss) (terminal styling) — part of the [Charm](https://charm.sh) ecosystem.