mirocode 0.14.3 → 0.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +113 -120
- package/README.zh.md +113 -120
- package/dist/cli.js +288 -434
- package/package.json +11 -18
package/README.zh.md
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
<h1 align="center">Miro</h1>
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
|
-
|
|
9
|
-
支持交互式 TUI 与一次性打印模式,基于 Bun
|
|
8
|
+
自带工具循环的终端编程智能体。<br>
|
|
9
|
+
支持交互式 TUI 与一次性打印模式,基于 Bun。
|
|
10
10
|
</p>
|
|
11
11
|
|
|
12
12
|
<p align="center">
|
|
@@ -17,12 +17,12 @@
|
|
|
17
17
|
|
|
18
18
|
---
|
|
19
19
|
|
|
20
|
-
**miro-cli**
|
|
20
|
+
**miro-cli** 直接调用 Chat Completions、OpenAI Responses 或 Anthropic Messages,在进程内运行自己的 agent 和工具循环。
|
|
21
21
|
|
|
22
22
|
## 环境要求
|
|
23
23
|
|
|
24
24
|
- [Bun](https://bun.sh/) **>= 1.4.3**;装 npm 包时只需 Node **>= 22.7**
|
|
25
|
-
-
|
|
25
|
+
- 一个兼容的 LLM API 端点
|
|
26
26
|
|
|
27
27
|
## 安装与运行
|
|
28
28
|
|
|
@@ -67,7 +67,6 @@ echo "Summarize this input" | miro -p
|
|
|
67
67
|
miro -p --output-format json "Fix the tests"
|
|
68
68
|
miro --model hy3
|
|
69
69
|
miro --effort high
|
|
70
|
-
miro --acp claude
|
|
71
70
|
miro --continue
|
|
72
71
|
miro --resume <session-id>
|
|
73
72
|
./dist/miro -c <session-id>
|
|
@@ -82,73 +81,91 @@ bun start -- -p "Analyze this project"
|
|
|
82
81
|
|
|
83
82
|
### 选项
|
|
84
83
|
|
|
85
|
-
| 参数
|
|
86
|
-
|
|
87
|
-
| `-p`, `--print`
|
|
88
|
-
| `--output-format <text\|json>` | 打印模式输出格式(需配合 `--print`)
|
|
89
|
-
| `--
|
|
90
|
-
| `--
|
|
91
|
-
| `--
|
|
92
|
-
|
|
|
93
|
-
| `--
|
|
94
|
-
| `--
|
|
95
|
-
| `--
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
84
|
+
| 参数 | 说明 |
|
|
85
|
+
| ------------------------------ | -------------------------------------------------------- |
|
|
86
|
+
| `-p`, `--print` | 非交互执行一次请求后退出 |
|
|
87
|
+
| `--output-format <text\|json>` | 打印模式输出格式(需配合 `--print`) |
|
|
88
|
+
| `--model <model>` | 按值或显示名选择模型(交互与打印模式均可用) |
|
|
89
|
+
| `--effort <level>` | 按值或显示名选择思考强度(交互与打印模式均可用,不保存) |
|
|
90
|
+
| `-c`, `--continue [id]` | 继续会话;省略 `id` 则使用当前项目最近一次会话 |
|
|
91
|
+
| `--resume <id>` | 按指定会话 id 恢复 |
|
|
92
|
+
| `--permission-mode <m>` | miro 权限模式:`auto`(默认)或 `manual` |
|
|
93
|
+
| `--mode <mode>` | 交互模式:`default` 或 `plan` |
|
|
94
|
+
| `-h`, `--help` | 打印帮助 |
|
|
95
|
+
|
|
96
|
+
`--output-format` 仅能与 `-p` / `--print` 同时使用;`--model`、`--effort` 也可在启动交互式 TUI 时使用,且只影响本次运行。不带 `--print` 的裸提示会报错。`-c` 不带 id 继续当前项目最近的会话;`--resume` 必须提供 id。
|
|
97
|
+
|
|
98
|
+
## ACP 客户端
|
|
99
|
+
|
|
100
|
+
Miro 可以通过 stdio 提供 [Agent Client Protocol v1](https://agentclientprotocol.com/protocol/v1/session-setup) 服务。先按独立 CLI 的方式配置 `~/.miro/models.json` 或 `~/.miro/settings.json`,再用 tico 连接:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
tico --agent "miro acp"
|
|
104
|
+
# 从源码连接(tico 在其他目录运行时使用绝对路径):
|
|
105
|
+
tico --agent "bun /absolute/path/to/miro/src/main.ts acp"
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
若要使用 `tico --acp miro`,在 `~/.tico/acp.json` 中添加:
|
|
109
|
+
|
|
110
|
+
```json
|
|
111
|
+
{
|
|
112
|
+
"miro": { "command": "miro", "args": ["acp"] }
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
`miro acp` 支持 `--model`、`--effort`、`--permission-mode auto|manual` 和 `--mode default|plan`。工作目录、提示发送和会话恢复由客户端管理。ACP 支持流式回复与思考、工具进度、手动权限审批、嵌入文件上下文、模型与配置切换、取消,以及已保存会话的列出、加载和恢复。Miro 使用自身的工具和 MCP 配置,也接受客户端传入的 stdio 或 HTTP MCP 服务。协议消息写入 stdout,诊断写入 stderr。
|
|
99
117
|
|
|
100
118
|
## 命令
|
|
101
119
|
|
|
102
120
|
在交互式输入框中使用:
|
|
103
121
|
|
|
104
|
-
| 命令
|
|
105
|
-
|
|
106
|
-
| `/init [extra]`
|
|
107
|
-
| `/model [model]`
|
|
108
|
-
| `/effort [level]`
|
|
109
|
-
| `/config [id] [val]`
|
|
110
|
-
| `/thinking [mode]`
|
|
111
|
-
| `/permissions [mode]`
|
|
112
|
-
| `/plan [on\|off\|status]` | 进入、退出或查看 Plan 模式(仅 miro)
|
|
113
|
-
| `/statusline [reset]`
|
|
114
|
-
| `/review [text]`
|
|
115
|
-
| `/goal [text]`
|
|
116
|
-
| `/simplify [text]`
|
|
117
|
-
| `/commit [text]`
|
|
118
|
-
| `/commit-push-pr`
|
|
119
|
-
| `/resume [id]`
|
|
120
|
-
| `/continue [id]`
|
|
121
|
-
| `/new`
|
|
122
|
-
| `/sessions`
|
|
123
|
-
| `/clear`
|
|
124
|
-
| `/compact [text]`
|
|
125
|
-
| `/export [file]`
|
|
126
|
-
| `/help`
|
|
127
|
-
| `/exit`
|
|
128
|
-
| `!<command>`
|
|
129
|
-
|
|
130
|
-
ACP 声明的提供方专用斜杠命令会原样转发。
|
|
122
|
+
| 命令 | 说明 |
|
|
123
|
+
| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
124
|
+
| `/init [extra]` | 分析代码库并创建或改进 `AGENTS.md` |
|
|
125
|
+
| `/model [model]` | 选择或切换模型 |
|
|
126
|
+
| `/effort [level]` | 设置当前模型的努力程度 |
|
|
127
|
+
| `/config [id] [val]` | 查看或修改模型、运行时与提示词语言配置 |
|
|
128
|
+
| `/thinking [mode]` | 设置思考呈现为 `compact`(默认)、`full` 或 `hidden`;不带参数打开选择器 |
|
|
129
|
+
| `/permissions [mode]` | miro 权限模式:`auto`(默认)或 `manual`;不带参数打开选择器 |
|
|
130
|
+
| `/plan [on\|off\|status]` | 进入、退出或查看 Plan 模式(仅 miro) |
|
|
131
|
+
| `/statusline [reset]` | 配置状态栏项目、顺序与颜色 |
|
|
132
|
+
| `/review [text]` | 审查代码改动;不带参数打开选择器(未提交、分支、commit 或自定义指令) |
|
|
133
|
+
| `/goal [text]` | 朝一个目标持续工作,直到模型报告完成或受阻;回复运行中输入新目标会安全中断当前回合并接管。不带参数查看当前目标,另有 `replace`、`status`、`pause`、`resume` / `cancel` 子命令(仅 miro) |
|
|
134
|
+
| `/simplify [text]` | 在保持行为不变的前提下简化代码;可传路径或自由指令 |
|
|
135
|
+
| `/commit [text]` | 为当前改动创建一个提交;可用文本指导提交信息 |
|
|
136
|
+
| `/commit-push-pr` | 创建一个提交、把分支推送到 `origin`,并用该远端平台的 CLI(`gh`、`glab` 或 `tea`)创建拉取请求 |
|
|
137
|
+
| `/resume [id]` | 恢复已保存会话;不带 id 打开选择器 |
|
|
138
|
+
| `/continue [id]` | `/resume` 的别名 |
|
|
139
|
+
| `/new` | 新建会话,不清除终端 |
|
|
140
|
+
| `/sessions` | 列出当前项目已保存的会话 |
|
|
141
|
+
| `/clear` | 新建会话并清除终端与可见记录 |
|
|
142
|
+
| `/compact [text]` | 摘要较早的上下文并保留最近历史;可选文本用于指定摘要侧重点 |
|
|
143
|
+
| `/export [file]` | 导出对话(剪贴板或 `.txt` 文件) |
|
|
144
|
+
| `/help` | 显示帮助 |
|
|
145
|
+
| `/exit` | 退出(`exit`、`/quit`、`quit`),并打印会话累计用量 |
|
|
146
|
+
| `!<command>` | 在本地执行 shell 命令,输出会附到下一次普通提示 |
|
|
131
147
|
|
|
132
148
|
`/commit-push-pr` 会先读 `origin` 远端再挑对应的 CLI:GitHub 用 `gh`,GitLab 用 `glab`,Gitea / Forgejo 用 `tea`。该 CLI 缺失、未认证,或平台本身没有 CLI(Bitbucket、无法识别的自建实例)时,它仍会提交并推送,然后给出手动创建拉取请求的 URL,而不是编造一个。仓库没有 `origin` 远端时,本地提交完就停下。
|
|
133
149
|
|
|
134
|
-
回合进行中时,Enter 引导内置 Miro agent,Tab 将提示排入下一轮队列。引导会等待当前模型响应和工具执行收尾,再继续同一任务;进入模型历史前会显示为待生效。普通、Plan 和 Goal
|
|
150
|
+
回合进行中时,Enter 引导内置 Miro agent,Tab 将提示排入下一轮队列。引导会等待当前模型响应和工具执行收尾,再继续同一任务;进入模型历史前会显示为待生效。普通、Plan 和 Goal 对话支持引导;`/review`、`/commit` 等隔离工作流和独立压缩回退为 FIFO 排队。中断、故障或恢复会话后的未生效引导会暂停发送:打开 Ctrl+Q 后按 `r` 恢复,也可以编辑或删除消息。斜杠命令沿用原有分派规则。忙碌时拒绝 `!command`。
|
|
135
151
|
|
|
136
152
|
## 快捷键
|
|
137
153
|
|
|
138
|
-
| 按键
|
|
139
|
-
|
|
140
|
-
| Enter
|
|
141
|
-
| Tab
|
|
142
|
-
| Shift+Enter | 插入换行(Miro 会启用 Kitty 与 xterm 扩展键上报;不支持的终端仍无法将它与 Enter 区分)
|
|
143
|
-
| `?`
|
|
144
|
-
| ↑ / ↓
|
|
145
|
-
| Ctrl+M
|
|
146
|
-
| Shift+Tab
|
|
147
|
-
| Ctrl+O
|
|
148
|
-
| Ctrl+Q
|
|
149
|
-
| Ctrl+L
|
|
150
|
-
| Ctrl+
|
|
151
|
-
|
|
|
154
|
+
| 按键 | 作用 |
|
|
155
|
+
| ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
156
|
+
| Enter | 发送提示;当前任务支持时引导正在进行的任务 |
|
|
157
|
+
| Tab | 运行时排队发送;补全优先 |
|
|
158
|
+
| Shift+Enter | 插入换行(Miro 会启用 Kitty 与 xterm 扩展键上报;不支持的终端仍无法将它与 Enter 区分) |
|
|
159
|
+
| `?` | 快捷键速查(输入框为空时) |
|
|
160
|
+
| ↑ / ↓ | 输入历史或补全 |
|
|
161
|
+
| Ctrl+M | 选择或切换模型(需要终端支持 kitty 键盘协议,否则该键与 Enter 相同) |
|
|
162
|
+
| Shift+Tab | 循环交互模式(`Default` / `Plan`) |
|
|
163
|
+
| Ctrl+O | 打开整屏的 Review 窗口:实时与已保留的思考、shell 输出与工具详情 |
|
|
164
|
+
| Ctrl+Q | 查看待生效引导,编辑、重排或删除排队消息;`r` 恢复暂停发送 |
|
|
165
|
+
| Ctrl+L | 清除终端显示(不结束会话) |
|
|
166
|
+
| Ctrl+Z | 把 miro 挂起到后台(macOS/Linux),`fg` 恢复并重画屏幕 |
|
|
167
|
+
| Ctrl+C | 清空输入框;输入框为空时中断当前回合,2 秒内再按一次退出。任何正常退出方式(Ctrl+C、`/exit`、裸 `exit`/`quit`)都会打印同一行会话累计用量,形如 `Stat ↑12.4k ↓2.1k R84.3k W6.2k CH81.9% $0.018`:↑/↓ 是输入与输出的会话累计值,`R`/`W` 是缓存读/写(本会话出现过缓存读数后整段出现,没有读数的一侧补 0),`CH` 是缓存命中率(命中 /(未命中输入 + 命中 + 写入)),末段是会话累计成本(不足 1 时保留三位小数,不足 0.001 时保留四位;miro 累加主循环与压缩摘要请求);没有用量与成本读数时这一行整体不打印 |
|
|
168
|
+
| Esc | 关闭快捷键帮助,或中断当前回合 |
|
|
152
169
|
|
|
153
170
|
`@` 补全文件路径(优先 `git ls-files`,否则回退到文件系统)。多行粘贴会作为一次提交保留:编辑时折叠显示,发送后在会话记录中还原为原文。
|
|
154
171
|
|
|
@@ -156,37 +173,17 @@ ACP 声明的提供方专用斜杠命令会原样转发。
|
|
|
156
173
|
|
|
157
174
|
智能体回复会在终端里按 Markdown 渲染:标题、列表、表格、围栏代码块与行内代码都会着色,行内 `$...$` 与块级 `$$...$$` 数学公式会以 Unicode 字形呈现。流式过程中未闭合的数学分隔符会原样输出,直到回合结束;不支持的 LaTeX 语法保留为纯文本。这仅影响显示,你发送的消息文本不会被改动。
|
|
158
175
|
|
|
159
|
-
|
|
176
|
+
思考内容使用三层披露方式。默认 `compact` 仅在动态活动区显示开头的 `**粗体标题**`(如果存在),定稿后不再向终端历史或导出内容追加 `Thought:` 行。`full` 还会预览实时正文,并在定稿后打印标题、耗时与 Markdown 正文。`hidden` 隐藏标题和正文,只留下通用的实时思考状态。`compact` 与 `hidden` 下的思考不会打断连续轻量工具的分组;无内容的规划占位状态不留下思考历史行。实时思考行显示思考耗时,并根据流式文本估算输出 token,例如 `Thinking… (12s · ↓2.9k)`;尚无文本时,如果提供方上报过用量,则回退显示最近一次读数。
|
|
160
177
|
|
|
161
|
-
|
|
178
|
+
`/thinking` 打开选择器;`/thinking compact|full|hidden` 修改当前和后续思考块,不追溯修改已经以 `full` 定稿的块。已有的 `compact` 摘要在恢复或重绘历史时也不再显示。Ctrl+O 打开整屏的 Review 窗口,浏览实时思考、实时 shell 输出,以及仍保留的思考与工具详情,包括未显示在终端历史中的思考:列表里用 ↑/↓ 选中、Enter 进入详情,详情里用左右键切换条目。思考详情仅在当前进程仍保留正文时可查看。会话落盘只保存思考元数据,不保存原始正文;miro 的模型上下文检查点同样不保存原始 reasoning 与 thinking 块。
|
|
162
179
|
|
|
163
|
-
##
|
|
180
|
+
## 内置 agent
|
|
164
181
|
|
|
165
|
-
Miro
|
|
182
|
+
Miro 直接调用 LLM API,自己跑工具循环(`read_file`、`write_file`、`edit_file`、`terminal`、`grep`、`glob`、`spawn_agent`、`update_tasks`)。它同时支持 OpenAI Chat Completions(默认)、OpenAI Responses 与 Anthropic Messages,无需安装任何二进制。长对话会自动压缩,压缩时 transcript 与模型都会看到一条 `Context compacted` 提示。
|
|
166
183
|
|
|
167
|
-
|
|
168
|
-
{
|
|
169
|
-
"knot": { "command": "knot-cli", "args": ["acp"] },
|
|
170
|
-
"my-cursor": { "command": "cursor-agent", "args": ["acp"], "name": "Cursor (work)" }
|
|
171
|
-
}
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
Miro 会把 ACP 提供方上次 `/model` 与 `/effort` 的选择记在同一条目的 `model` / `effort` 里。`~/.miro/settings.json` 里的 `providers` 字段不再读取。
|
|
175
|
-
|
|
176
|
-
| Id | 名称 | 二进制 |
|
|
177
|
-
|----|------|--------|
|
|
178
|
-
| `pi` | Pi | `pi-acp` |
|
|
179
|
-
| `cursor` | Cursor | `cursor-agent` |
|
|
180
|
-
| `claude` | Claude | `claude-agent-acp` |
|
|
181
|
-
| `codex` | Codex | `codex-acp` |
|
|
184
|
+
以「产出报告」为目的的命令——`/review`、`/simplify`、`/commit`、`/commit-push-pr`、`/init`——跑在**独立上下文**里:命令的提示词(rubric、预读的 git 上下文、你的指令)以及模型为此读过的每个文件,都留在这次运行专用的历史里,只有一行命令记录(随回合开始即入会话)与最终结论并入会话。于是一次读了五十个文件的审查不再挤占对话上下文,而结论照样落在 transcript 上——之后说「把第 2 条修掉」仍有据可依。按 `Esc` 取消时,命令记录与已经流出的内容仍留在会话里,与 transcript 所见一致,恢复会话后看到的历史也相同。
|
|
182
185
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
Miro 自带的 agent 不启动子进程、不走 ACP 协议,而是直接调用 LLM API,自己跑工具循环(`read_file`、`write_file`、`edit_file`、`terminal`、`grep`、`glob`、`spawn_agent`、`update_tasks`),并对外发出与 ACP client 相同的事件。它同时支持 OpenAI Chat Completions(默认)、OpenAI Responses 与 Anthropic Messages,无需安装任何二进制。长对话会自动压缩,压缩时 transcript 与模型都会看到一条 `Context compacted` 提示。
|
|
186
|
-
|
|
187
|
-
以「产出报告」为目的的命令——`/review`、`/simplify`、`/commit`、`/commit-push-pr`、`/init`——跑在**独立上下文**里:命令的提示词(rubric、预读的 git 上下文、你的指令)以及模型为此读过的每个文件,都留在这次运行专用的历史里,只有一行命令记录(随回合开始即入会话)与最终结论并入会话。于是一次读了五十个文件的审查不再挤占对话上下文,而结论照样落在 transcript 上——之后说「把第 2 条修掉」仍有据可依。按 `Esc` 取消时,命令记录与已经流出的内容仍留在会话里,与 transcript 所见一致,恢复会话后看到的历史也相同。这条只在 miro 下成立:ACP 提供方的对话历史在它自己的进程里,miro 既无法隔离也无法修剪,那里这些命令照旧作为普通回合执行、留在对话中。
|
|
188
|
-
|
|
189
|
-
空闲时使用 `/compact`,或用 `/compact 保留数据库迁移相关决策` 指定摘要侧重点。它使用当前模型,不清除可见聊天记录,并保存压缩后的模型上下文供恢复会话使用;关闭自动压缩也不影响手动命令。按 `Esc` 可取消而不替换历史,历史不足时只提示、不发摘要请求。有正在执行的 goal 时需先暂停。Print 模式也支持 `miro -c <session-id> -p "/compact"`,进度写入 stderr。ACP 下仅当提供方声明支持时才转发该命令。
|
|
186
|
+
空闲时使用 `/compact`,或用 `/compact 保留数据库迁移相关决策` 指定摘要侧重点。它使用当前模型,不清除可见聊天记录,并保存压缩后的模型上下文供恢复会话使用;关闭自动压缩也不影响手动命令。按 `Esc` 可取消而不替换历史,历史不足时只提示、不发摘要请求。有正在执行的 goal 时需先暂停。Print 模式也支持 `miro -c <session-id> -p "/compact"`,进度写入 stderr。
|
|
190
187
|
|
|
191
188
|
miro 用到的上游写在 `~/.miro/models.json`。打开 `/model` 会重新读取该文件,改完不必重启:
|
|
192
189
|
|
|
@@ -197,10 +194,7 @@ miro 用到的上游写在 `~/.miro/models.json`。打开 `/model` 会重新读
|
|
|
197
194
|
"baseUrl": "http://localhost:11434/v1",
|
|
198
195
|
"api": "openai-completions",
|
|
199
196
|
"apiKey": "ollama",
|
|
200
|
-
"models": [
|
|
201
|
-
{ "id": "llama3.1:8b" },
|
|
202
|
-
{ "id": "qwen2.5-coder:7b" }
|
|
203
|
-
]
|
|
197
|
+
"models": [{ "id": "llama3.1:8b" }, { "id": "qwen2.5-coder:7b" }]
|
|
204
198
|
}
|
|
205
199
|
}
|
|
206
200
|
}
|
|
@@ -229,21 +223,21 @@ miro 用到的上游写在 `~/.miro/models.json`。打开 `/model` 会重新读
|
|
|
229
223
|
}
|
|
230
224
|
```
|
|
231
225
|
|
|
232
|
-
| 字段
|
|
233
|
-
|
|
234
|
-
| `protocol`
|
|
235
|
-
| `baseUrl`
|
|
236
|
-
| `apiKey`
|
|
237
|
-
| `models`
|
|
238
|
-
| `model` / `effort` / `thinking` | 首个模型 / `medium` / `true`
|
|
239
|
-
| `maxToolRounds`
|
|
240
|
-
| `temperature`
|
|
241
|
-
| `permissionMode`
|
|
242
|
-
| `sandbox.enabled`
|
|
226
|
+
| 字段 | 默认值 | 说明 |
|
|
227
|
+
| ------------------------------- | ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
228
|
+
| `protocol` | `chat-completions` | 仅在未使用 `models.json` 时生效:`chat-completions`、`openai-responses` 或 `anthropic-messages`;也可用 `$MIRO_PROTOCOL`。目录里的模型自带 `api`。 |
|
|
229
|
+
| `baseUrl` | 按协议决定 | Chat Completions / Responses 默认 `https://api.openai.com/v1`;Anthropic Messages 默认 `https://api.anthropic.com`。`$MIRO_BASE_URL` 优先。`models.json` 里的 `baseUrl` 对目录模型优先。 |
|
|
230
|
+
| `apiKey` | `$MIRO_API_KEY`,再按协议回退 | Anthropic Messages 使用 `$ANTHROPIC_API_KEY`,两个 OpenAI 协议使用 `$OPENAI_API_KEY`。在 `models.json` 里还可以写 `$ENV` 或 `!command`。 |
|
|
231
|
+
| `models` | `gpt-4o-mini`、`gpt-4o`、`deepseek-chat` | 仅当 `~/.miro/models.json` 没有可用条目时使用。字符串,或 `{ id, name, contextWindow }` 形式。 |
|
|
232
|
+
| `model` / `effort` / `thinking` | 首个模型 / `medium` / `true` | 回退默认值;顶层 `model` / `effort` 偏好匹配到可用选项时优先。通过 `/model`、`/effort`、`/config` 修改。 |
|
|
233
|
+
| `maxToolRounds` | 不限 | 每个回合工具循环的最大轮数。默认不设上限,因为上下文已由自动压缩兜底;写入数字可为失控的回合兜底。 |
|
|
234
|
+
| `temperature` | 不设置 | 传给 API 的采样温度。 |
|
|
235
|
+
| `permissionMode` | `auto` | `auto` 全程不询问用户;仅 `risk_level: high` 或 `sandbox: false` 的 Terminal 调用由隔离模型自动审查,其余工具直接执行。`manual` 对写入和命令请求确认。未知值及旧 `ask`、`plan`、`yolo` 配置回退为 `auto`。 |
|
|
236
|
+
| `sandbox.enabled` | `false` | 为 `true` 时 `terminal` 工具在 `@anthropic-ai/sandbox-runtime` 的网络沙箱里执行命令:默认断网,只有 `allowedDomains` 能为单次调用放行网络。两种模式下工具同名,沙箱模式只是多出沙箱专属参数。文件系统仍使用宿主权限。需要满足 `@anthropic-ai/sandbox-runtime` 的平台前置条件,失败不会回退为未受限 shell。 |
|
|
243
237
|
|
|
244
238
|
可用 `/config sandbox on` 或 `/config sandbox off` 持久化修改这个开关,并立即切换当前会话命令工具的沙箱状态。
|
|
245
239
|
|
|
246
|
-
`/model` 与 `/effort`
|
|
240
|
+
`/model` 与 `/effort` 的选择保存在 `settings.json` 顶层的 `model` / `effort`,其中 `model` 记为 `provider/id`。`miro` 对象里的 `model` / `effort` 只在顶层偏好缺省或匹配不到时作为回退默认值。miro 的 `Default` / `Plan` 交互模式与 `Auto` / `Manual` 权限模式相互独立;`Shift+Tab` 循环交互模式。
|
|
247
241
|
|
|
248
242
|
### Codemode(实验性)
|
|
249
243
|
|
|
@@ -251,7 +245,7 @@ Codemode 默认关闭,仅适用于内置 Miro agent。用 `/config codemode on
|
|
|
251
245
|
|
|
252
246
|
模型可在独立 QuickJS Worker 内用一段 JavaScript 组合读取、搜索、分页和聚合,只把选定输出交回上下文。脚本能调用 `read_file`、`grep`、`glob` 和已配置的 MCP 桥接;没有宿主 `process`、`fetch`、写文件、Terminal 或 subagent 能力。每次实际 MCP 调用仍遵循普通权限策略,非交互 Manual 会拒绝调用,内部调用保留在 transcript 中。
|
|
253
247
|
|
|
254
|
-
每段脚本的 VM 时限为 60 秒、QuickJS 堆为 64 MiB,最多调用 64 次工具、并发读取 8 条,另有工具数据和输出预算。脚本必须 await 工具调用。取消与超时会等待宿主收尾,但不能撤销远端副作用;失败脚本不会自动重放。精确 API 和限制见[工具参考](./docs/tools/codemode.md)。它与 Terminal
|
|
248
|
+
每段脚本的 VM 时限为 60 秒、QuickJS 堆为 64 MiB,最多调用 64 次工具、并发读取 8 条,另有工具数据和输出预算。脚本必须 await 工具调用。取消与超时会等待宿主收尾,但不能撤销远端副作用;失败脚本不会自动重放。精确 API 和限制见[工具参考](./docs/tools/codemode.md)。它与 Terminal 沙箱相互独立。
|
|
255
249
|
|
|
256
250
|
### MCP
|
|
257
251
|
|
|
@@ -288,8 +282,6 @@ Codemode 默认关闭,仅适用于内置 Miro agent。用 `/config codemode on
|
|
|
288
282
|
|
|
289
283
|
**只配置可信服务。** 即使在 Manual 模式,发现工具也可能启动本地进程。实际 MCP 调用在 Manual 下需审批,授权绑定服务、工具和完整参数;非交互 Manual 会拒绝实际调用。Auto 不询问,也不对 MCP 执行 Terminal 安全审查。MCP 不受 Terminal 沙箱保护。取消或超时不代表远端副作用已撤销,调用不会自动重放。请妥善保管 `settings.json`;工具参数和结果仍属于会话数据。
|
|
290
284
|
|
|
291
|
-
ACP 会话透传已信任的服务配置,但由外部 agent 管理连接、权限与 OAuth。外部 agent 未声明支持 HTTP 时,会提示并跳过 HTTP 条目。miro 的 ACP 流量日志会隐去 MCP 连接配置,但外部 agent 仍会收到真实凭据,并可能有自己的日志。
|
|
292
|
-
|
|
293
285
|
### Skill
|
|
294
286
|
|
|
295
287
|
Miro 支持 `SKILL.md` 约定(Agent Skills)。启动时从 `<cwd>/.miro/skills`、`<cwd>/.agents/skills`、`~/.miro/skills`、`~/.agents/skills` 扫描,优先级依次递减;额外目录写进 `~/.miro/settings.json` 顶层的 `skills` 数组,`"skills": false` 则整体关闭。含 `SKILL.md` 的目录就是一个 skill,不再向下扫描;裸 `*.md` 文件只有在 frontmatter 里带 `description` 时才算。同名时优先级更高的根目录胜出(显式路径高于默认目录),被遮住的文件会记在 client 的诊断里。
|
|
@@ -305,13 +297,11 @@ miro -p "/skill:pdf 提取 invoice.pdf 里的表格"
|
|
|
305
297
|
|
|
306
298
|
`disable-model-invocation: true` 只让 skill 不进模型可见的目录,手动 `/skill:` 仍可用。skill 只增加指令、**不增加能力**:Manual 的审批策略与 Auto 的 Terminal 自动审查策略都不会因 skill 改变。
|
|
307
299
|
|
|
308
|
-
这只对 miro 生效。ACP 提供方自己管 skill,它广播出来的任何命令(例如 `skill:<name>`)都以普通提供方命令的形式进入 miro。
|
|
309
|
-
|
|
310
300
|
## 会话与上下文
|
|
311
301
|
|
|
312
302
|
miro 会在可见聊天记录之外保存模型上下文检查点,包含压缩摘要及完整配对的工具调用与结果。恢复时优先使用最新合法检查点,不会重新回灌压缩前的可见记录;没有检查点的会话仍回退到可见消息。检查点包含对话和工具数据,请妥善保管会话文件。
|
|
313
303
|
|
|
314
|
-
可见对话记录保存在 `~/.miro/sessions/<拍平后的 cwd
|
|
304
|
+
可见对话记录保存在 `~/.miro/sessions/<拍平后的 cwd>/miro/<sessionId>.jsonl`,可通过 `/resume`、`--continue` 或 `--resume` 恢复。项目目录名把 cwd 的每个非字母数字字符替换成 `-`,不掺哈希。持久化错误不会导致程序退出。只读取该目录中的会话;其他旧布局和已移除的外部 agent 会话不再读取,已有文件原样保留。空对话不留下文件:首次录到 user/assistant 正文时才创建会话,零消息会话不会进入列表。
|
|
315
305
|
|
|
316
306
|
启动时会加载 `~/.miro/AGENTS.md` 与 `./AGENTS.md`(跳过空白或不可读文件,相同文本去重),并在**第一次普通提示**时注入。恢复的会话跳过 AGENTS.md 的重复注入。若第一次请求失败,会恢复注入状态以便重试。
|
|
317
307
|
|
|
@@ -319,16 +309,16 @@ miro 会在可见聊天记录之外保存模型上下文检查点,包含压缩
|
|
|
319
309
|
|
|
320
310
|
## 配置
|
|
321
311
|
|
|
322
|
-
模型、努力程度、提示词语言与状态栏偏好保存在 `~/.miro/settings.json
|
|
312
|
+
模型、努力程度、提示词语言与状态栏偏好保存在 `~/.miro/settings.json`。上游服务商与模型目录配置在 `~/.miro/models.json`;目录缺省时回退到 `settings.miro`。`/config` 修改模型、运行时选项与本地提示词语言。
|
|
323
313
|
|
|
324
314
|
### 权限模式
|
|
325
315
|
|
|
326
316
|
miro 提供 `Auto` 与 `Manual` 两档,默认 `Auto`。`/permissions` 可直接指定或打开选择器;它与 Plan 模式相互独立。
|
|
327
317
|
|
|
328
|
-
| 模式
|
|
329
|
-
|
|
330
|
-
| `auto`
|
|
331
|
-
| `manual` | 写入、编辑、删除、移动与命令需确认;读取、搜索和任务更新直接执行
|
|
318
|
+
| 模式 | 行为 |
|
|
319
|
+
| -------- | --------------------------------------------------------------------------------------------------------------------------- |
|
|
320
|
+
| `auto` | 默认。全程不弹人工审批;非 Terminal 工具直接执行,Terminal 仅在 `risk_level: high` 或 `sandbox: false` 时由隔离模型自动审查 |
|
|
321
|
+
| `manual` | 写入、编辑、删除、移动与命令需确认;读取、搜索和任务更新直接执行 |
|
|
332
322
|
|
|
333
323
|
`Auto` 不解析 Terminal 命令文本,因此 `rm`、`curl`、重定向、解释器与 heredoc 都没有特殊规则;`low` 与 `medium` 直接执行。只有 `high` 或 `sandbox: false` 会把用户意图、此前工具调用与本次动作(含模型可选填写、按不可信自述对待的 `risk_reason`)投影给隔离、无工具的分类器,绝不传入工具结果。分类器明确批准才执行;阻断、异常或不确定都直接拒绝并把理由交给下一轮模型,不会回退询问用户。工具行下会写明审查结论,被拦下时直接给出理由。
|
|
334
324
|
|
|
@@ -348,7 +338,7 @@ Plan 模式把调查与设计同实现分开。可通过 `/plan`、`/plan on`
|
|
|
348
338
|
|
|
349
339
|
在任一交互模式中,agent 最多可提出四个结构化问题,支持单选、多选、Markdown 选项预览、自定义文本和备注;在 Plan 模式中随后会提交规范计划文件供审阅。批准会冻结当时的精确文本、返回 Default 模式,并从该冻结快照开启一个全新的实现回合;要求修改会留在 Plan 模式;拒绝则退出且不实现。Plan 状态随会话持久化。目标正在运行时不能进入 Plan 模式。非交互运行与子智能体不会暴露提问界面。
|
|
350
340
|
|
|
351
|
-
`miro -p --mode plan "设计这项改动"` 刻意采用非交互语义:打印计划后退出,不提问、不打开审批界面、也不实现。
|
|
341
|
+
`miro -p --mode plan "设计这项改动"` 刻意采用非交互语义:打印计划后退出,不提问、不打开审批界面、也不实现。
|
|
352
342
|
|
|
353
343
|
### 等待动词
|
|
354
344
|
|
|
@@ -356,7 +346,10 @@ Plan 模式把调查与设计同实现分开。可通过 `/plan`、`/plan on`
|
|
|
356
346
|
|
|
357
347
|
```json
|
|
358
348
|
{
|
|
359
|
-
"spinnerVerbs": {
|
|
349
|
+
"spinnerVerbs": {
|
|
350
|
+
"mode": "append",
|
|
351
|
+
"verbs": ["thinking", "planning", "searching"]
|
|
352
|
+
}
|
|
360
353
|
}
|
|
361
354
|
```
|
|
362
355
|
|
|
@@ -364,17 +357,17 @@ Plan 模式把调查与设计同实现分开。可通过 `/plan`、`/plan on`
|
|
|
364
357
|
|
|
365
358
|
### 提示词语言
|
|
366
359
|
|
|
367
|
-
`/config language English`(或 `en`、`en-us`)、`/config language Chinese`(或 `zh`、`zh-cn`、`中文`)或 `/config language Cantonese`(或 `yue`、`zh-hk`、`zh-yue`、`粤语`、`粵語`)用于设置 miro 内置工作流提示词(`/init`、`/review`、`/simplify`、`/commit` 与 `/commit-push-pr`)的语言,结果写入 `~/.miro/settings.json` 的 `language`
|
|
360
|
+
`/config language English`(或 `en`、`en-us`)、`/config language Chinese`(或 `zh`、`zh-cn`、`中文`)或 `/config language Cantonese`(或 `yue`、`zh-hk`、`zh-yue`、`粤语`、`粵語`)用于设置 miro 内置工作流提示词(`/init`、`/review`、`/simplify`、`/commit` 与 `/commit-push-pr`)的语言,结果写入 `~/.miro/settings.json` 的 `language` 字段。默认英文,未知取值回落为英文。该设置不影响你自己发送的消息。
|
|
368
361
|
|
|
369
362
|
### 状态栏
|
|
370
363
|
|
|
371
|
-
`/statusline`
|
|
364
|
+
`/statusline` 可交互选择项目、顺序与颜色,默认使用灰阶显示,可开启彩色。`/statusline reset` 恢复默认。确认时会一并写入 `statusLine` 与 `statusLineUseColors`。
|
|
372
365
|
|
|
373
366
|
默认项目:`["model-with-reasoning", "current-dir"]`。空数组隐藏状态栏。未知 id 会被忽略(一次性警告);没有数据的项目会被跳过。
|
|
374
367
|
|
|
375
|
-
存在目标时,同一行的右侧会常驻 `◎ /goal active (4s)
|
|
368
|
+
存在目标时,同一行的右侧会常驻 `◎ /goal active (4s)`:目标状态加上它**实际推进**了多久(暂停期间与结束之后都不计入,与预算同一口径)。它不是可配置项,随目标出现与消失。整条状态栏被配置成空数组时,它与状态栏一起隐藏。
|
|
376
369
|
|
|
377
|
-
可用 id 包括 `model`、`model-with-reasoning`、`reasoning`、`mode`、`permission-mode`、`current-dir`、`project-name`、`hostname`、`git-branch`、`run-state`、`
|
|
370
|
+
可用 id 包括 `model`、`model-with-reasoning`、`reasoning`、`mode`、`permission-mode`、`current-dir`、`project-name`、`hostname`、`git-branch`、`run-state`、`session-id`、`session-title`、`miro-version`、`context-used`、`context-remaining`、`context-window-size`、`task-progress`、`goal`、`used-tokens`、`input-tokens`、`output-tokens`、`thought-tokens`、`session-cost`。上下文、token、费用与会话标题类项目需要 agent 或模型上报,否则省略。`used-tokens`、`input-tokens`、`output-tokens`、`thought-tokens`、`session-cost` 都是会话累计值:miro 累加主循环的每一次 LLM 请求与压缩摘要请求(子智能体不计入);因此它们可能大于活动槽思考行里的「最近一次读数」。`permission-mode` 在 miro 下显示 `AUTO` 或 `MANUAL`;无 miro 权限模式时隐藏。`goal` 显示当前目标的状态与进度,没有目标时隐藏。这些 id 也接受简写别名:`model-name`(`model`)、`permissions`(`permission-mode`)、`project` / `project-root`(`project-name`)、`status`(`run-state`)、`thread-id` / `thread-title`(`session-id`)、`version`(`miro-version`)、`context-usage`(`context-used`)、`goal-status`(`goal`)。
|
|
378
371
|
|
|
379
372
|
## 许可证
|
|
380
373
|
|