Rust 原生 · 终端优先 · 可嵌入
Mink 是一个 Rust 实现的 AI agent runtime:面向终端,也面向系统。既适合在终端中直接
工作(REPL / Full TUI / Inline TUI),也适合嵌入到服务端、桌面端或内部工具中 —— Rust
嵌入通过 mink::runtime in-process 运行;Python SDK 通过 wheel 内置的
mink-core --agent-jsonl 子进程复用同一运行时内核与语义。
[TOC]
# 前置:Rust 1.94+,设置 DEEPSEEK_API_KEY 或通过配置指定 OpenAI-compatible 端点
# 编译
cargo build --release # 或 make build
# REPL 交互模式
./target/release/mink -m flash -i
# Full TUI 全屏模式
./target/release/mink -m flash --tui
# Inline TUI 原生 scrollback 模式
./target/release/mink -m flash --tui=inline
# 单次查询 / 恢复最近会话
./target/release/mink -m flash "explain this project"
./target/release/mink -m flash --continue -i
# 使用自定义系统提示词
./target/release/mink --mission ./my-task.mission.md -ipip install mink-agentfrom mink_agent import AgentSession, SandboxConfig
session = AgentSession(SandboxConfig(
api_key="sk-...", # 或设置 DEEPSEEK_API_KEY 环境变量
read_dirs=["src"],
signal_policy="full", # off/evidence/state_ops/restart/full
))
result = session.run("scan this repo and summarize")
print(result["text"])
session.close()[dependencies]
mink = { package = "mink-core", version = "0.6.5", default-features = false, features = ["runtime"] }use mink::prelude::{AgentOptions, AgentRuntime};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let rt = AgentRuntime::start(
AgentOptions::new("/tmp/mink-home", ".")
.with_api_key(std::env::var("DEEPSEEK_API_KEY")?)
.with_model("flash"),
).await?;
let outcome = rt.run_turn("hello").await?;
println!("{}", outcome.text);
rt.shutdown().await?;
Ok(())
}- 可嵌入的运行时内核 —
AgentRuntime::start() → run_turn() / stream_turn() → shutdown()完整生命周期。CLI、REPL、TUI 和 Rust 嵌入共享 in-process 运行时;Python SDK 通过内置mink-core二进制复用同一 Rust 内核,不需要维护多套 agent 内核。 - 长上下文与长任务可控 — 显式压缩参数 + LLM 摘要非破坏式投影 + 持久化 session 共同工作,上下文不无限膨胀,长任务可持续推进;
enabled_tools统一工具边界。 - 编辑与状态管理更可靠 — Hashline / Replace 双模式编辑(
Readsnapshot + 行锚定,或 exact/fuzzy 内容匹配)、artifact 超长输出回读、Plan/Todo revision 原子提交和 session 恢复机制,不把正确性交给运气。
- OpenAI-compatible 默认后端 — 内置 DeepSeek / OpenAI 流式客户端,支持 reasoning、usage、工具调用和扩展参数(
openai_tool_choice、openai_extra_body) - 可注入 LLM backend — 实现
mink::runtime::LlmBackendtrait,接入私有模型、内网网关、厂商 SDK 或非 HTTP transport - 信号驱动的信念系统 — 自动检测工具执行错误,低信念时注入修正提示并约束恢复首步;
MINK_SIGNAL_POLICY=off可完全关闭 - 显式上下文压缩 — 百分比阈值、响应预留、热尾部和摘要输出预算全参数化;可选摘要输入降噪(过滤 thinking、压缩工具结果)
- 三段维修流水线 — Scavenge(回收遗漏调用)→ Truncation(修复残缺消息)→ StormBreaker(抑制重复调用),自动闭环修复
- 三种交互 surface — REPL 行模式(
-i)、Full TUI 全屏模式(--tui)、Inline TUI 原生 scrollback 模式(--tui=inline) - Hashline / Replace 双模式编辑 — Hashline 使用
Read生成的[PATH#TAG]快照和行/文本锚点;Replace 使用唯一old_textexact/fuzzy 匹配;两者都在歧义时 fail closed - 结构化 transcript — 统一的工具卡片渲染、Markdown 子集、自动折叠、实时信念 / token 状态栏
- 图片粘贴 — Full/Inline TUI 中
Ctrl+V读取剪贴板 PNG(macOS),内容寻址暂存到 sessionattachments/并随消息附带绝对路径;模型Read后走既有读图链路 - 机器协议 —
--print输出 ndjson 事件流;--agent-jsonl提供 single-shot Agent JSONL 协议
- 内置工具 — Read / Write / Edit / Bash / Python / Glob / Grep / PlanDraft / PlanConfirm / PlanClear / TodoRead / TodoWrite / TodoAdvance / SubAgent
- 多模态读图 — 视觉会话中
Read捕获图片(本地文件 /image://sha256:<id>引用)、 内容寻址缓存、请求时以 OpenAIimage_urldata-URL 注入一次(单次消费);MIME 双层 校验与数量/字节/尺寸/像素配额 fail closed。CLI 经[provider] image_input/vision_models配置,Rust 经with_image_input()/with_vision_models()/with_image_limits() - 统一工具选择 —
enabled_tools是唯一启用入口,同时决定模型可见 schema、能力工作流和真实执行边界;PythonSandbox仅在显式列出时启用 - 语义能力模型 — 工具按语义能力分类,自动组合工作流提示;不可用工具不会出现在 schema、提示词或组合链路中
- 注册式轻量资源 —
Read通过ResourceRouter统一分发artifact://、skill://、rule://、session://等 scheme - 技能系统 — 按需加载 skill 文件,不污染后续 prompt;
skill_discovery_policy控制发现策略
- 进程级沙箱 — Linux nsjail / bubblewrap(完整文件系统隔离)、macOS sandbox-exec(写入隔离)
- CPython WASI 沙箱 —
PythonSandbox工具在 wasmtime + CPython WASI 中执行,WASI 级进程隔离,无网络、无 C 扩展 - 危险命令过滤 — Bash 危险命令拦截与误用软提示,可选审批策略
- Session 持久化 — Append-only JSONL 完整历史,活跃后缀内存缓存,
--continue无缝恢复 - 非破坏式压缩 — 只更新
context-state.json投影边界,不重写conversation.jsonl;压缩统一使用 LLM 摘要 - Plan & Todo 状态 — Plan 使用 append-only transition 与压缩后 checkpoint;Todo 使用稳定 ID、revision 和原子批量提交
- Artifact 超长输出 — 工具结果超限自动落盘至
artifacts/,序号可恢复且禁止覆盖;Read artifact://<id>读取 - Token 用量 — LLM 请求级
usage.jsonljournal,覆盖主 Agent、自动压缩和子代理
- Rust 库 API —
mink::runtime::{AgentRuntime, AgentOptions, LlmBackend, ReadOnlyFileSystem},完整同步/流式 turn 生命周期 - Python SDK —
pip install mink-agent,内置无 TUI 的mink-core二进制,支持全参数配置 - 嵌入式只读 VFS — 为 Read/Glob/Grep 注入数据库后端,按
resource_session_id隔离多租户知识库 - 子代理(SubAgent) — 隔离或目录级 fork 完整 session 状态,复用父 runtime 的 LLM backend,支持并发执行
- 自定义提示词 —
--mission加载 MISSION.md,允许覆盖白名单 core section,runtime 保留 section fail closed - 模型别名系统 —
flash/pro内置 DeepSeek 别名,model_aliases可覆盖;任意模型名未命中时原样传递 - Server 与 Web —
mink-server单二进制 Web 工作区服务器:REST + SSE 实时流,前端构建产物嵌入二进制,与 TUI 共享会话,浏览器里继续终端里的工作
| 路径 | 职责 |
|---|---|
| crates/mink-core | Rust 发布包 mink-core,库 crate 名 mink,包含可嵌入 runtime、工具核心、session、sandbox 和 SDK 协议 |
| crates/mink-cli | workspace 内部二进制包,生成 mink 终端二进制和 mink-core SDK 精简二进制,持有 REPL/TUI 实现 |
| mink_agent | Python SDK,wheel 内置无 TUI 的 mink-core 二进制 |
| crates/mink-server | Web 工作区服务器:REST + SSE + 嵌入前端,build.rs 自动构建并嵌入 web 产物 |
| 项目 | 说明 |
|---|---|
| oh-my-pi | 开源 CLI agent(Bun/TypeScript),Edit 工具的行号锚定与快照协议参考实现 |
| bash-agent | 终端 Agent(Bash 优先),交互与工具执行参考 |
| 文档 | 说明 |
|---|---|
| 使用手册 | 面向终端用户:CLI 交互、配置、沙箱、session、工具和常见工作流 |
| 嵌入与 SDK | Rust 库 / Python SDK 嵌入、Token 用量 |
| 机器协议 | --print stream-json 与 --agent-jsonl 协议 |
| 工具参考 | 面向工具协议:内置工具参数、结果通道、资源 URL、审批和构建裁剪 |
| 架构说明 | 运行时分层、模块职责、资源/能力系统、核心数据流 |
| 设计文档 | 设计总纲与关键不变式;信号与工具能力细节见对应设计哲学文档 |
| 变更日志 | 版本变更记录 |
| Server 与 Web | mink-server:REST/SSE API、嵌入构建、配置与部署 |
| 工具能力与提示词解耦 | 工具 surface、语义能力、自由组合和前向求值算法 |
| 信号系统设计 | 控制论 + 贝叶斯、冷却机制、信念度展示 |
| Agent 开发指南 | 面向 AI agent:项目结构、模块索引、开发惯例 |