Holt:基于 Rust 和 GPUI 的原生桌面编程智能体
Onion-L/holt
Holt 是一款用 Rust 和 GPUI 构建的原生桌面编程智能体,单一 Rust agent loop 驱动所有对话,模型服务以 provider 形式接入,不封装其他编程智能体 CLI。它完全本地运行,无云端、无账号、无同步、无遥测,数据仅存于 ~/.holt。目前仅支持 macOS,可从 Releases 下载已签名公证的 DMG,项目仍处于实验性开发阶段。
A native desktop coding agent built with Rust and GPUI.
English · 简体中文
Warning
Holt is a work in progress — an experimental project under active development. Expect rough edges and breaking changes.
Why Holt
Why not.
- One agent. Holt is the agent — a single Rust agent loop drives every chat. Model services plug in as providers; Holt doesn't wrap other coding-agent CLIs.
- Local only. No cloud, no accounts, no sync, no telemetry. Chats,
transcripts, and credentials live under
~/.holtand nowhere else. - One process. No daemon, no CLI. A native desktop app that embeds its backend in-process over a typed memory-RPC transport.
Features
- Bring your own model — built-in providers plus custom providers and model records, editable live in Settings without a restart.
- Permission modes — per chat: confirm each change, let a model review pass judge it, or grant full access. Reads are never gated.
- Plan mode — the agent inspects the workspace and writes a plan for approval before touching anything.
- Review every Turn — per-Turn change sets with diffs, plus branches, checkout diffs, history, and fetch on a built-in git2 backend.
- Extensible — skills from the standard skill roots, MCP servers, subagents, and pluggable web search (Zhipu, Bocha, Brave).
- Built-in terminals — chat-owned terminal panes next to the transcript.
Install
Grab the signed and notarized DMG for your Mac (Apple Silicon or Intel) from Releases. macOS only for now.
Then open Settings → Providers and add an API key before starting a run.
Build from source
Requires macOS and stable Rust (pinned in rust-toolchain.toml).
cargo run --release -p holt
Data lives under ~/.holt; override with HOLT_DATA_DIR.
Architecture
gpui UI ── in-memory RPC (ndjson envelopes) ── LocalEngine + core agent loop
The UI links crates/engine only to assemble the local backend at bootstrap;
no feature code calls backend logic. Everything else goes through the typed
contract in crates/rpc; crates/engine adapts crates/core
(pi-core-rs) behind the RpcService
trait, so another backend can slot in without touching the UI.
| Crate | Role |
|---|---|
apps/holt |
The binary. No CLI. |
crates/ui |
The gpui viewport — agent-agnostic, renders MessageParts from holt-doc. |
crates/engine |
The backend adapter: agent loop, providers, credentials, git, skills, terminals. |
crates/core |
The agent core (pi-core-rs): providers, streaming, agent loop, harness. Holt-owned Rust port of pi v0.84.4. |
crates/rpc |
The typed control plane: framing, dispatch, memory transport. |
crates/proto |
Shared protocol and domain types. |
crates/doc |
Transcript and History wire types (MessagePart, TranscriptFrame). Data on disk is plain JSON/JSONL, owned by crates/engine. |
crates/theme, crates/syntax |
Theme library and syntax highlighting. |
See ARCHITECTURE.md for the full RPC contract and the design decisions behind it.
Development
cargo fmt --all --check
cargo check --workspace
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspaceContributing
See CONTRIBUTING.md — and please follow the Code of Conduct. Found a security issue? Report it privately via SECURITY.md.
Credits
The beautiful UI comes from comet ❤️
来源:GitHub · github.com
