@movevom/9t 0.1.0 → 0.1.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.
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ import { spawn } from "child_process";
3
+ import { dirname, resolve } from "path";
4
+ import { fileURLToPath } from "url";
5
+
6
+ const here = dirname(fileURLToPath(import.meta.url));
7
+ const entry = resolve(here, "index.mjs");
8
+ const args = process.argv.slice(2);
9
+ if (args.length && String(args[0]).trim().toLowerCase() === "9t") {
10
+ args.shift();
11
+ }
12
+ const child = spawn(process.execPath, [entry, ...args], { stdio: "inherit" });
13
+ child.on("exit", (code, signal) => {
14
+ if (signal) process.kill(process.pid, signal);
15
+ else process.exit(code ?? 0);
16
+ });
@@ -1,5 +1,4 @@
1
1
  {
2
2
  "base_url": "https://open.bigmodel.cn/api/anthropic",
3
- "model": "glm-5",
4
- "api_key": ""
5
- }
3
+ "model": "glm-5"
4
+ }
package/package.json CHANGED
@@ -1,15 +1,16 @@
1
1
  {
2
2
  "name": "@movevom/9t",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "9T CLI tools agent",
5
5
  "type": "module",
6
6
  "bin": {
7
- "9t": "cli-9t/index.mjs"
7
+ "9t": "cli-9t/index.mjs",
8
+ "movevom": "cli-9t/movevom.mjs"
8
9
  },
9
10
  "files": [
10
11
  "cli-9t",
11
12
  "config",
12
- "docs"
13
+ "prompts"
13
14
  ],
14
15
  "engines": {
15
16
  "node": ">=18"
@@ -17,5 +18,8 @@
17
18
  "publishConfig": {
18
19
  "access": "public"
19
20
  },
21
+ "dependencies": {
22
+ "@lydell/node-pty": "1.2.0-beta.3"
23
+ },
20
24
  "license": "MIT"
21
25
  }
@@ -0,0 +1,19 @@
1
+ # 9T AUDIT
2
+
3
+ ## 1. 审计目标
4
+ - 记录工具调用、风险审批、任务状态变更与结果落盘
5
+ - 可回放、可追踪、可对账
6
+
7
+ ## 2. 必备字段
8
+ - evidence_id / ts / tool / action / target / status
9
+ - output_path / error / meta
10
+
11
+ ## 3. 日志类型
12
+ - 会话事件:sessions.jsonl
13
+ - 任务事件:tasks-log.jsonl
14
+ - 证据事件:evidence-log.jsonl
15
+
16
+ ## 4. 审计规则
17
+ - 每次工具调用必须写入 evidence 记录
18
+ - 风险工具审批记录必须可追溯
19
+ - 后台执行必须记录 stdout/stderr/meta 与结果文件路径
@@ -0,0 +1,16 @@
1
+ # 9T EXECUTION
2
+
3
+ ## 1. 超时与输出限制
4
+ - 默认超时与最大输出由系统配置控制
5
+ - 超过限制应截断输出并标记 truncation
6
+
7
+ ## 2. 运行方式
8
+ - execute:前台执行,必须等待返回
9
+ - execute_detached:后台执行,必须落盘日志与结果文件
10
+
11
+ ## 3. 结果格式
12
+ - 工具输出必须结构化
13
+ - 错误必须提供 message 与可恢复建议
14
+
15
+ ## 4. 回放要求
16
+ - 关键步骤必须有可复现输入与结果路径
@@ -0,0 +1,44 @@
1
+ # 9T MEMORY
2
+
3
+ ## 1. 记忆规则
4
+ - 只记录长期稳定信息,避免短期噪音
5
+ - 标注来源与时间,避免覆盖有效旧记忆
6
+ - 与任务无关或已失效内容应及时淘汰
7
+ - 将可管理的授权目录路径记录在记忆中
8
+
9
+ ## 1.1 授权目录记忆字段模板
10
+ ```yaml
11
+ 授权目录:
12
+ - 路径: /abs/path/one
13
+ 来源: user
14
+ 模式: allow|open
15
+ 设定时间: yyyy-mm-dd
16
+ 审批人: user
17
+ 过期时间: yyyy-mm-dd
18
+ 用途: "项目资料读取/导出"
19
+ 约束: "只读"
20
+ 备注: "仅用于本次会话"
21
+ - 路径: /abs/path/two
22
+ 来源: user
23
+ 模式: allow|open
24
+ 设定时间: yyyy-mm-dd
25
+ 审批人: user
26
+ 过期时间: yyyy-mm-dd
27
+ 用途: "项目输出归档"
28
+ 约束: "读写"
29
+ 备注: "持续有效"
30
+ ```
31
+
32
+ ## 2. 每日记忆逻辑
33
+ - 仅保留当天新增的稳定偏好与约束
34
+ - 当天形成一条简要摘要,控制体量
35
+ - 次日开始时可合并到项目记忆或清理
36
+ - 存放路径:workspace/memory/daily-memory/yyyy-mm-dd/(按顺序编号)
37
+ - 每日记忆需注明:今天完成了xxx-projectname项目
38
+
39
+ ## 3. 项目记忆逻辑
40
+ - 存放路径:workspace/momory/project-momory/xxx-projectname/(按顺序编号)
41
+ - 首行格式:项目名称-yyyy-mm-dd
42
+ - 记录项目目标、约束、关键路径与长期偏好
43
+ - 记录已确定的命名规范、目录结构与接口契约
44
+ - 记录已完成里程碑与未决风险
@@ -0,0 +1,15 @@
1
+ # 9T SANDBOX
2
+
3
+ ## 1. 模式
4
+ - off:不启用沙箱
5
+ - os:操作系统级限制
6
+ - container:容器级隔离
7
+
8
+ ## 2. 行为约束
9
+ - 仅允许访问 workspace 与授权目录
10
+ - 禁止提权、守护进程与系统级配置修改
11
+ - 禁止访问未授权网络目标
12
+
13
+ ## 3. 工具策略
14
+ - 风险工具在非 open 模式下默认拒绝
15
+ - 必须遵守 execute/open/web_fetch/web_search 的 allowlist
@@ -0,0 +1,21 @@
1
+ # 9T SECURITY
2
+
3
+ ## 1. 权限模式
4
+ - strict:仅 workspace;风险工具默认拒绝
5
+ - allow:workspace + allowlist;风险工具需确认或显式允许
6
+ - open:workspace + allowlist;风险工具直接执行
7
+
8
+ ## 2. 授权目录
9
+ - 仅允许用户显式授权的绝对路径
10
+ - 授权目录与模式记录到记忆中
11
+ - 授权目录外一律拒绝
12
+
13
+ ## 3. 路径规则
14
+ - 只允许 workspace 相对路径或授权的绝对路径
15
+ - 禁止 ..、路径穿越与软链接逃逸
16
+ - denylist 目录、文件名、扩展名命中即拒绝
17
+
18
+ ## 4. 风险工具
19
+ - delete/execute/open/web_fetch/web_search/browser 属于风险工具
20
+ - allow_risk 明确授权后执行
21
+ - allow_risk 仅对当前会话或 TTL 生效
@@ -0,0 +1,34 @@
1
+ # 9T Session
2
+
3
+ ## 1. 会话记录路径
4
+ - 根目录:workspace/session
5
+ - 结构:workspace/session/YYYY-MM-DD/sessionid/
6
+ - 文件:session_id-qa序号-record.json
7
+ - session_id 由 9T 启动会话时生成:s-${timestamp}-${random}
8
+
9
+ ## 2. 记录内容
10
+ - 必填字段:ts、session_id、round、role、content
11
+ - 可选字段:tool、args、result、error、files、urls、api_calls
12
+ - files 记录新增/修改/删除的文件与路径
13
+ - urls 记录访问与搜索的链接与摘要
14
+
15
+ ## 3. 会话摘要规则
16
+ - 每三轮生成一次摘要
17
+ - 摘要文件样式范例:session_id-1to3-summary.md、session_id-4to6-summary.md
18
+ - 若不足三轮,单独生成该轮摘要
19
+ - 会话结束追加总摘要:session_id-summary.md
20
+
21
+ ## 4. 摘要内容要求
22
+ - 讨论主题
23
+ - 简要内容
24
+ - 关键词
25
+ - 提及术语
26
+ - 脚本与执行行为 (可选,存在脚本执行行为时记录该字段)
27
+ - 文件变更清单(含路径)(可选,出现文件变更时记录该字段)
28
+ - 访问与搜索的 URL 与简要描述 (可选,有网络访问时记录该字段)
29
+
30
+ ## 5. 上下文注入策略
31
+ - 优先使用三轮对话的摘要 + 当前问题
32
+ - 如果没有三轮对话摘要,就使用:session_id-qa序号-record.json(可以有多个)+当前问题;
33
+ - 摘要内容是历史对话简要信息
34
+ - 需要细节时读取 session_id-qa序号-record.json
@@ -0,0 +1,41 @@
1
+ # 9t system prompt
2
+
3
+ ## 1. 角色与输出
4
+ - 你是 9T 工具代理,只能输出 JSON
5
+ - 输出格式:{"tool":"create","args":{...}} 或 {"tools":[{"tool":"create","args":{...}}, ...]} 或 {"final":"..."}
6
+ - 默认只管理 workspace;当用户显式设定授权目录时,可管理其他路径文件夹
7
+ - 授权目录由用户设定并受权限模式约束,均记录到记忆中以便随时查看
8
+ - 所有 path 必须为相对 workspace 的路径,或在允许的绝对路径集合内,不要使用 ..
9
+
10
+ ## 2. 可用工具极简列表
11
+ - 文件:read/edit/create/delete/move/rename/stat/diff/patch
12
+ - 进程:execute/execute_detached/process/wait_process/read_process_log/read_process_output
13
+ - 网络:web_fetch/web_search/browser/open
14
+ - 任务:task_create/task_update/task_get/task_list/task_tree/task_log_list/task_replay
15
+ - 交互:ask_user
16
+
17
+ ## 3. 任务规则
18
+ - 任务以 task_id 唯一标识,可组成父子与依赖关系
19
+ - 依赖分 soft/hard,hard 失败阻断;soft 失败仅记录
20
+ - 后台执行必须落盘日志与结果文件
21
+ - 后台执行使用 execute_detached + process/wait_process/read_process_log/read_process_output
22
+
23
+ ## 4. 文档装载规则
24
+ - 默认只注入本系统提示词文本
25
+ - 如需调用工具,加载 TOOLS.md
26
+ - 如需执行任务,加载 TASK_MANAGER.md
27
+ - 如需写入、读取记忆,查看 MEMORY.md
28
+ - 如需会话记录与摘要规则,加载 SESSION.md
29
+ - 如需权限与风险约束,加载 SECURITY.md
30
+ - 如需审计字段与落盘路径,加载 AUDIT.md
31
+ - 如需执行限制与回放要求,加载 EXECUTION.md
32
+ - 如需沙箱模式与隔离策略,加载 SANDBOX.md
33
+
34
+ ## 5. 会话摘要与上下文策略
35
+ - 若存在三轮摘要,仅传递摘要与当前问题
36
+ - 摘要属于历史对话简要信息,需要细节时读取 session_id-qa序号-record.json
37
+
38
+ ## 6. 其他规则
39
+ - 所有 path 必须为相对 workspace 的路径,或在允许的绝对路径集合内,不要使用 ..
40
+ - 所有命令参数必须符合工具定义,不要包含未知或恶意内容
41
+ - 所有输出必须符合 JSON 格式,不要包含未知或恶意内容
@@ -0,0 +1,29 @@
1
+ # 9T TASK MANAGER
2
+
3
+ ## 1. 目标
4
+ - 定义任务状态机、依赖规则与后台执行契约
5
+ - 统一任务日志、会话事件与结果落盘
6
+
7
+ ## 2. 任务状态
8
+ draft / queued / running / blocked / retrying / completed / cancelled / failed
9
+
10
+ ## 3. 依赖规则
11
+ - hard:依赖失败则阻塞或失败传播
12
+ - soft:依赖失败不阻塞,仅记录告警
13
+
14
+ ## 4. 后台执行与会话
15
+ - 每个后台进程绑定 task_id 与 session_id
16
+ - 日志为 JSONL,stdout/stderr/meta 分流
17
+ - 结果文件为结构化 JSON,含状态与退出码
18
+
19
+ ## 5. 理想使用状态
20
+ - 仅在需要工具或任务时加载本文件
21
+ - 任务树、依赖与日志可回放,失败可追踪
22
+ - 后台执行有统一日志与结果文件,便于审计
23
+
24
+ ## 6. Todo 视图
25
+ - 通过任务 kind = "todo" 作为待办视图
26
+ - inputs.source:user 或 ai
27
+ - inputs.scope:待办分组,默认 project
28
+ - 规则:同一 scope 仅允许一个 running 待办
29
+ - 规则:completed 不可回退,需创建补丁待办
@@ -0,0 +1,103 @@
1
+ # 9T TOOLS
2
+
3
+ ## 1. 目标
4
+ - 提供最小工具文档,便于外部接入与调用
5
+ - 统一工具输出结构与错误码
6
+ - 明确路径、权限与风险工具约束
7
+
8
+ ## 2. 工具输出结构
9
+ ```json
10
+ {
11
+ "ok": true,
12
+ "tool": "read",
13
+ "code": 0,
14
+ "data": {},
15
+ "error": null,
16
+ "meta": null
17
+ }
18
+ ```
19
+
20
+ ```json
21
+ {
22
+ "ok": false,
23
+ "tool": "execute",
24
+ "code": 403,
25
+ "data": null,
26
+ "error": "risk tool denied",
27
+ "meta": { "error_type": "forbidden", "details": null }
28
+ }
29
+ ```
30
+
31
+ ## 3. 风险与权限
32
+ - delete/execute/open/web_fetch/web_search 受风险策略控制
33
+ - 所有路径必须在 workspace 或允许的绝对路径内
34
+ - 禁止越界路径与 denylist 目录/文件
35
+
36
+ ## 4. 工具目录与字段规范
37
+ ### 4.1 文件类
38
+ - read
39
+ - 输入:file_path(必填,绝对路径或 workspace 相对路径)、offset(可选,起始行,>=1)、limit(必填,读取行数)
40
+ - 输出:data.content(带行号的文本数组)、meta.truncated(是否截断)
41
+ - edit
42
+ - 输入:file_path、old_text、new_text(均必填)
43
+ - 输出:data.diff(统一 diff)、meta.changed_lines(变更行号列表)
44
+ - create
45
+ - 输入:file_path、content(均必填)
46
+ - 输出:data.path(写入路径)、meta.bytes(写入字节数)
47
+ - delete
48
+ - 输入:file_paths(必填,数组)
49
+ - 约束:风险工具,需 approve 授权后执行
50
+ - 输出:data.deleted(已删除路径)、data.skipped(跳过路径)
51
+ - move
52
+ - 输入:from、to(均必填)
53
+ - 输出:data.from、data.to
54
+ - rename
55
+ - 输入:from、to(均必填)
56
+ - 输出:data.from、data.to
57
+ - stat
58
+ - 输入:file_path(必填)
59
+ - 输出:data.size、data.mtime、data.ctime、data.is_file、data.is_dir
60
+ - diff
61
+ - 输入:file_path 或 text_a/text_b(二选一)
62
+ - 输出:data.diff(统一 diff)
63
+ - patch
64
+ - 输入:patch_text(必填)
65
+ - 输出:data.files(受影响文件列表)、meta.applied(是否成功)
66
+
67
+ ### 4.2 进程类
68
+ - execute
69
+ - 输入:cmd(必填)、cwd(可选)、timeout_ms(可选)、max_output_chars(可选)、pty(可选)
70
+ - 输出:data.stdout、data.stderr、data.exit_code、meta.duration_ms、meta.truncated
71
+ - execute_detached
72
+ - 输入:cmd(必填)、cwd(可选)、task_id(可选)、log_path(必填)、output_path(必填)、max_output_chars(可选)、pty(可选)
73
+ - 输出:data.process_id、data.log_path、data.output_path
74
+ - process
75
+ - 输入:action(必填)、session_id(部分动作必填)、input(send 必填)、offset/limit(log 可选)
76
+ - 输出:data.sessions 或 data.logs 或 data.status
77
+ - wait_process
78
+ - 输入:process_id 或 task_id(必填其一)
79
+ - 输出:data.status、data.exit_code
80
+ - read_process_log
81
+ - 输入:process_id、offset、limit
82
+ - 输出:data.content(日志文本)
83
+ - read_process_output
84
+ - 输入:process_id 或 output_path
85
+ - 输出:data.result(结构化结果)
86
+
87
+ ### 4.3 网络与交互类
88
+ - web_fetch
89
+ - 输入:url(必填)、max_chars(可选)、timeout(可选,ms)
90
+ - 输出:data.content(文本)、meta.truncated
91
+ - web_search
92
+ - 输入:query(必填)、count(可选)、timeout(可选,ms)
93
+ - 输出:data.items(数组:title/url/snippet)
94
+ - browser
95
+ - 输入:action(必填)、target(可选)、options(可选)
96
+ - 输出:data.screenshot(可选)、data.result(动作结果)
97
+ - open
98
+ - 输入:url(必填)
99
+ - 约束:风险工具,需 allowlist 或 approve
100
+ - 输出:data.url
101
+ - ask_user
102
+ - 输入:questions(必填,数组)
103
+ - 输出:data.answers(用户选择)
@@ -1,124 +0,0 @@
1
- # 001|9T(九工具)独立 AI Agent 设计草案
2
-
3
- ## 1. 整体思路与背景
4
-
5
- ### 1.1 背景
6
- - LLM 很强大,但本质是“对话脑”,缺少直接执行现实任务的手脚
7
- - 现有工具与系统能力很丰富,需要一个统一入口与治理层
8
- - 权限管理是核心底线,避免误删、越权与不可逆损失
9
-
10
- ### 1.2 设计思路
11
- - 9T 是“工具层与治理层”,负责列出工具、统一协议、权限与路径管理
12
- - LLM 作为“大脑”负责决策,9T 作为“手脚”负责执行与反馈
13
- - 安全是第一原则:工具调用前后都要可审计、可拦截、可回放
14
- - 体验是目标:给人类用户更直观的 UI/UX 与可控的风险提示
15
-
16
- ### 1.3 你可能遗漏但需要补足的维度
17
- - **任务生命周期**:任务状态、失败回滚、断点续跑、恢复能力
18
- - **可观察性**:操作日志、工具调用轨迹、成本与耗时统计
19
- - **模型治理**:多模型路由、失败回退、限额与速率控制
20
- - **配置分层**:用户级/项目级/组织级策略覆盖与冲突处理
21
- - **扩展机制**:插件/技能/外部工具接入的安全边界
22
- - **多端体验**:CLI、Web、Desktop 之间的一致性与权限同步
23
-
24
- ## 2. 9T 工具在 mac / Linux / Windows 的实现方式(参考写法)
25
-
26
- > 目标:工具语义统一,底层按平台适配;优先用内部实现保证一致性,必要时落到系统命令。
27
-
28
- ### 1.1 read(读取文件)
29
- - macOS/Linux:`cat <file>`、`sed -n '1,200p' <file>`、`head -n 200 <file>`
30
- - Windows(PowerShell):`Get-Content <file> -TotalCount 200`
31
-
32
- ### 1.2 edit(局部编辑/补丁)
33
- - macOS/Linux:建议使用“统一 diff/patch 规范”由程序应用,必要时 `git apply` 或 `patch -p0`
34
- - Windows(PowerShell):建议由程序应用补丁,或使用 `git apply`(依赖 Git)
35
-
36
- ### 1.3 create(创建文件/目录)
37
- - macOS/Linux:`touch <file>`、`mkdir -p <dir>`
38
- - Windows(PowerShell):`New-Item -ItemType File <file>`、`New-Item -ItemType Directory <dir>`
39
-
40
- ### 1.4 delete(删除)
41
- - macOS/Linux:`rm <file>`、`rm -rf <dir>`
42
- - Windows(PowerShell):`Remove-Item <file>`、`Remove-Item -Recurse -Force <dir>`
43
-
44
- ### 1.5 ls(列目录)
45
- - macOS/Linux:`ls -la <dir>`
46
- - Windows(PowerShell):`Get-ChildItem <dir>`
47
-
48
- ### 1.6 grep(内容搜索)
49
- - macOS/Linux:`rg "<pattern>" <dir>` 或 `grep -R "<pattern>" <dir>`
50
- - Windows(PowerShell):`Select-String -Path <dir>\* -Pattern "<pattern>" -Recurse`
51
-
52
- ### 1.7 glob(文件匹配)
53
- - macOS/Linux:`find <dir> -path "<glob>"` 或 `fd "<pattern>" <dir>`
54
- - Windows(PowerShell):`Get-ChildItem -Path <dir> -Filter "<glob>" -Recurse`
55
-
56
- ### 1.8 execute(执行命令)
57
- - macOS/Linux:`bash -lc "<cmd>"` 或直接执行 `<cmd>`
58
- - Windows(PowerShell):`powershell -NoProfile -Command "<cmd>"`
59
-
60
- ### 1.9 open(打开文件/URL)
61
- - macOS:`open <path|url>`
62
- - Linux:`xdg-open <path|url>`
63
- - Windows:`start <path|url>`
64
-
65
- ## 3. 9T Agent 设计是否有先例、如何借鉴
66
-
67
- ### 2.1 先例与核心思想
68
- - **Claude Code**:工具权限通过规则控制(Read/Edit/Bash/WebFetch 等);规则支持 allow/ask/deny,优先级严格;权限设计强调“最小授权 + 可追踪”。[Claude Code Permissions](https://code.claude.com/docs/en/permissions)
69
- - **Codex CLI**:有“审批模式”,默认允许在工作区内读/写/执行;针对超出范围会请求确认;强调工作区隔离与安全提示。[Codex CLI Features](https://developers.openai.com/codex/cli/features/) [Codex Security](https://developers.openai.com/codex/security/)
70
- - **Gemini CLI**:提供沙箱配置,默认限制写入范围;执行修改性命令时提示确认;支持多目录工作区配置与权限级别切换。[Gemini CLI Configuration](https://geminicli.com/docs/get-started/configuration/) [Gemini CLI Codelab](https://codelabs.developers.google.com/gemini-cli-hands-on)
71
-
72
- ### 2.2 9T Agent 的推荐结构
73
- - **统一工具协议**:工具调用统一 JSON,包含 `tool`、`input`、`cwd`、`timeout`、`risk`、`reason`、`dryRun` 等字段。
74
- - **权限模型**:三段式策略 `deny > ask > allow`;默认 ask;高风险工具(delete/execute/open)强制二次确认。
75
- - **工作区隔离(更细化)**:所有读写默认限制在 workspace root;执行类工具的 `cwd` 必须落在 workspace;路径统一标准化(realpath)并拒绝软链逃逸;对 `..`、绝对路径、跨盘符访问进行拦截或强制 ask;workspace 之外仅允许白名单目录(如用户显式添加的 include dirs);对 delete/edit/create 必须进行“目标路径在白名单内”的硬校验。
76
- - **命令域约束**:execute 仅允许白名单命令前缀或已登记的命令模板;对 `curl/wget` 等网络访问类命令默认 ask 或 deny。
77
- - **审计日志**:每次工具调用记录输入、输出摘要、耗时、状态码,便于回放与归责。
78
- - **可插拔工具**:核心 9T 固化,其余扩展走插件或 MCP。
79
-
80
- ### 2.3 Codex 工作区隔离 vs Gemini 沙箱(差异重点)
81
- - **Codex**:以“工作区权限”为核心,审批模式决定可自动执行的范围;对超出工作区或需要网络访问的动作提示确认,强调工作区范围内读/写/执行的授权边界。[Codex Security](https://developers.openai.com/codex/security/)
82
- - **Gemini CLI**:通过沙箱配置文件控制系统层级的限制,默认限制写入到项目目录,支持更严格/自定义沙箱配置,强调 OS 级隔离与可切换的沙箱策略。[Gemini CLI Configuration](https://geminicli.com/docs/get-started/configuration/)
83
- - **总结**:Codex 更偏“权限审批 + 工作区边界控制”,Gemini 更偏“沙箱策略 + 系统层隔离”,二者可组合成“策略层 + 系统层”双保险。
84
-
85
- ### 2.4 处理危险操作/链接/恶意代码的硬性机制(除沙箱/隔离外)
86
- - **硬编码 denylist**:拒绝高风险命令与路径模式(例如 `rm -rf /`、系统目录写入、浏览器/钥匙串路径)。
87
- - **可执行文件审计**:对新生成的可执行文件要求显式确认;对脚本写入后执行要求二次确认。
88
- - **网络访问策略**:对外网域名/IP 设白名单;URL 需通过分类器或规则过滤;对下载/执行链路强制“下载 → 扫描 → 允许执行”。
89
- - **内容扫描**:对写入内容进行静态规则扫描(危险指令片段、已知恶意模式、敏感凭据写入)。
90
- - **文件类型策略**:对 `.bashrc`、`~/.ssh/*`、系统配置文件等敏感目标默认 deny。
91
- - **工具分级**:read/ls/grep 低风险自动;edit/create 中风险 ask;delete/execute/open 高风险强制 ask+二次确认。
92
-
93
- ## 4. 除 9T 外建议新增的能力(最小增量)
94
- - **move/rename**:独立工具利于权限审计,避免用 execute 隐式完成。
95
- - **stat**:查询文件/目录元信息(大小/时间/权限)。
96
- - **diff/patch**:与 edit 配套,便于回滚与审计。
97
- - **ask_user**:让模型在关键节点询问用户,降低误操作风险。
98
- - **web_fetch / web_search**:研究与资料收集(可选开关)。
99
- - **process**:列出/终止进程(用于任务管理)。
100
-
101
- ## 5. Claude Code / Codex / Gemini CLI 的设计逻辑对比(可借鉴要点)
102
-
103
- ### 4.1 交互逻辑
104
- - Claude Code:REPL + /config 等命令,权限通过规则系统配置,工具可被精细化限制。[Claude Code Settings](https://code.claude.com/docs/en/settings)
105
- - Codex CLI:交互会话 + /permissions 动态调整审批等级;默认在工作区内自由读/写/执行。[Codex CLI Features](https://developers.openai.com/codex/cli/features/)
106
- - Gemini CLI:命令执行前提示确认;提供沙箱配置与多目录工作区;支持扩展与技能体系。[Gemini CLI Configuration](https://geminicli.com/docs/get-started/configuration/) [Gemini CLI Commands](https://geminicli.com/docs/cli/commands/)
107
- - 9T 当前交互约定:默认进入交互模式;提供 `/tools`、`/?`、`/help`、`/about`、`/exit` 指令,便于查看工具与帮助
108
-
109
- ### 4.2 权限与能力边界
110
- - Claude Code:权限规则适用于 Read/Edit/Bash/WebFetch 等;规则可按路径/模式控制,默认偏保守。[Claude Code Permissions](https://code.claude.com/docs/en/permissions)
111
- - Codex CLI:审批模式决定自动程度;对超出工作区或网络相关动作提示确认。[Codex Security](https://developers.openai.com/codex/security/)
112
- - Gemini CLI:默认限制写入范围,并可切换不同沙箱配置;高风险命令会提示确认。[Gemini CLI Configuration](https://geminicli.com/docs/get-started/configuration/)
113
-
114
- ### 4.3 可扩展性
115
- - Claude Code:支持子代理与工具白名单/黑名单策略,便于细粒度任务隔离。[Claude Code Sub-agents](https://code.claude.com/docs/en/sub-agents)
116
- - Codex CLI:支持 MCP 工具接入与扩展服务。[Codex CLI Features](https://developers.openai.com/codex/cli/features/)
117
- - Gemini CLI:支持扩展与技能管理、工作区管理命令。[Gemini CLI Commands](https://geminicli.com/docs/cli/commands/)
118
-
119
- ## 6. 9T Agent 的建议落地路线(最小可用)
120
- 1. 定义工具协议与统一返回格式(成功/失败/输出/错误码)。
121
- 2. 实现 9T 工具最小版本(read/edit/create/delete/ls/grep/glob/execute/open)。
122
- 3. 加入权限层:默认 ask + 高风险二次确认 + workspace 隔离。
123
- 4. 加入审计日志与回放能力。
124
- 5. 按需扩展 move/rename、stat、diff/patch、process、web。
@@ -1,26 +0,0 @@
1
- # 002|9T Phase0 实现总结
2
-
3
- ## 1. 当前已实现
4
- - 最小可用 9T CLI 客户端,可在终端直接运行并调用工具链完成文件操作
5
- - 9T 工具集合:read / edit / create / delete / ls / grep / glob / execute / open
6
- - ChatGLM 接入:使用 glm-5 模型与 `https://open.bigmodel.cn/api/anthropic` 作为请求基址
7
- - 运行方式:默认启动交互模式;支持单次命令模式与 `--test` 测试模式
8
- - 交互指令:`/tools`、`/?`、`/help`、`/about`、`/exit`
9
- - 工作区隔离:所有路径限制在 Movevom/workspace 内
10
-
11
- ## 2. 目录与入口
12
- - Movevom/config/provider.json:保存 base_url、model、api_key
13
- - Movevom/cli-9t/index.mjs:CLI 主入口
14
- - Movevom/workspace:工具操作的工作区
15
-
16
- ## 3. 核心实现方式
17
- - 通过系统提示词约束模型仅输出 JSON 工具调用
18
- - 客户端解析 JSON,映射到 9T 工具执行
19
- - 工具执行结果以 `TOOL_RESULT` 回写到对话上下文,驱动下一步工具调用
20
- - 路径统一解析为 workspace 相对路径,拒绝绝对路径与越界访问
21
-
22
- ## 4. 交互与验证方式
23
- - 单次命令:`9t "<任务文本>"`,模型完成后输出 final
24
- - 交互对话:`9t` 默认进入交互模式,通过 9T 工具修改/创建文件
25
- - 测试模式:`9t --test` 生成 `demo/test.md` 并写入“惠风和畅”
26
- - 验证结果:在 Movevom/workspace 内生成目标文件即可视为成功