@antaif3ng/til-work 0.1.2 → 0.3.0
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 +265 -297
- package/dist/core/config.d.ts +29 -11
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +65 -101
- package/dist/core/config.js.map +1 -1
- package/dist/core/llm.d.ts.map +1 -1
- package/dist/core/llm.js +14 -0
- package/dist/core/llm.js.map +1 -1
- package/dist/core/pricing.d.ts.map +1 -1
- package/dist/core/pricing.js +0 -2
- package/dist/core/pricing.js.map +1 -1
- package/dist/core/session.d.ts +3 -2
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +4 -3
- package/dist/core/session.js.map +1 -1
- package/dist/core/skills.d.ts +2 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +9 -0
- package/dist/core/skills.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +6 -2
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +66 -124
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive.d.ts.map +1 -1
- package/dist/modes/interactive.js +514 -273
- package/dist/modes/interactive.js.map +1 -1
- package/dist/tools/browser.d.ts +10 -0
- package/dist/tools/browser.d.ts.map +1 -0
- package/dist/tools/browser.js +231 -0
- package/dist/tools/browser.js.map +1 -0
- package/dist/tools/computer.d.ts +3 -0
- package/dist/tools/computer.d.ts.map +1 -0
- package/dist/tools/computer.js +251 -0
- package/dist/tools/computer.js.map +1 -0
- package/dist/tools/index.d.ts +5 -2
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +11 -2
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/read.d.ts.map +1 -1
- package/dist/tools/read.js +29 -4
- package/dist/tools/read.js.map +1 -1
- package/dist/tools/screenshot.d.ts +3 -0
- package/dist/tools/screenshot.d.ts.map +1 -0
- package/dist/tools/screenshot.js +113 -0
- package/dist/tools/screenshot.js.map +1 -0
- package/dist/utils/file-processor.d.ts +2 -2
- package/dist/utils/file-processor.d.ts.map +1 -1
- package/dist/utils/file-processor.js +7 -10
- package/dist/utils/file-processor.js.map +1 -1
- package/package.json +3 -2
- package/skills/find-skills/SKILL.md +66 -0
- package/skills/playwright-mcp/SKILL.md +90 -0
- package/skills/self-improving-agent/SKILL.md +88 -0
- package/skills/skill-creator/SKILL.md +93 -0
- package/skills/summarize/SKILL.md +55 -0
package/README.md
CHANGED
|
@@ -2,45 +2,45 @@
|
|
|
2
2
|
|
|
3
3
|
> 运行在终端里的个人电脑 AI 助手,类似 Codex CLI / Claude Code。
|
|
4
4
|
|
|
5
|
-
TIL work 是一个基于大语言模型的命令行 Agent
|
|
5
|
+
TIL work 是一个基于大语言模型的命令行 Agent 工具。它可以直接操作你的文件系统、执行命令、编辑代码、搜索网页、截图、控制浏览器,并通过对话式交互帮你完成各种电脑任务。
|
|
6
6
|
|
|
7
7
|
## 核心能力
|
|
8
8
|
|
|
9
9
|
| 能力 | 说明 |
|
|
10
10
|
|------|------|
|
|
11
11
|
| **命令执行** | 在你的系统上直接运行 bash 命令 |
|
|
12
|
-
| **文件管理** |
|
|
12
|
+
| **文件管理** | 读取、创建、编辑、复制、移动、删除文件(支持读取图片) |
|
|
13
13
|
| **代码编辑** | 精确替换代码片段(类似 sed,但更智能) |
|
|
14
|
-
|
|
|
14
|
+
| **截图** | 截取全屏或窗口截图,返回给 LLM 进行视觉分析 |
|
|
15
|
+
| **Computer Use** | 鼠标点击、键盘输入、滚动拖拽 + 自动截图反馈 |
|
|
16
|
+
| **浏览器控制** | 页面导航、点击、输入、截图、JS 执行(Playwright) |
|
|
15
17
|
| **网页搜索** | 实时搜索互联网获取最新信息 |
|
|
18
|
+
| **MCP 扩展** | 通过 MCP 协议接入外部工具服务(stdio / HTTP) |
|
|
16
19
|
| **记忆系统** | 跨对话记住上下文(MEMORY.md + AGENTS.md) |
|
|
17
|
-
| **技能系统** |
|
|
20
|
+
| **技能系统** | 内置 5 个技能 + 支持自定义 SKILL.md 扩展 |
|
|
18
21
|
| **会话持久化** | 退出后可恢复上次对话(`--resume` / `--continue`) |
|
|
19
22
|
| **Context 压缩** | 长对话自动摘要压缩,防止 token 溢出 |
|
|
20
|
-
| **用量追踪** | 实时显示 Token 消耗和上下文占用 |
|
|
21
23
|
| **安全拦截** | 自动检测并拦截 `rm -rf`、`sudo` 等危险命令 |
|
|
22
|
-
|
|
|
23
|
-
|
|
24
|
+
| **多模型** | 支持 Anthropic、OpenAI、Google Gemini 及任意 OpenAI 兼容接口 |
|
|
25
|
+
|
|
26
|
+
## 交互体验
|
|
27
|
+
|
|
28
|
+
- **多行输入**:行尾输入 `\` 再回车、`Ctrl+J` 或 `Alt+Enter` 均可插入换行,`Esc` 取消多行输入
|
|
29
|
+
- **输入框 UI**:带上下边框的输入区域,底部常驻显示当前工作目录和随机操作提示
|
|
30
|
+
- **Placeholder**:空输入时显示换行快捷键提示,输入后自动消失
|
|
31
|
+
- **文件引用**:输入 `@` 后实时搜索文件,方向键选择,文件内容自动注入 LLM 上下文
|
|
32
|
+
- **命令菜单**:输入 `/` 弹出命令列表,方向键循环选择,`Enter` 直接执行,`Tab` 补全
|
|
24
33
|
|
|
25
34
|
## 前置要求
|
|
26
35
|
|
|
27
36
|
- **Node.js** >= 20.6.0(推荐 22+)
|
|
28
37
|
- **npm** >= 9
|
|
29
|
-
- **至少一个 LLM API Key**(Anthropic / OpenAI / Google / 智谱等 OpenAI 兼容接口)
|
|
30
|
-
|
|
31
|
-
检查 Node.js 版本:
|
|
38
|
+
- **至少一个 LLM API Key**(Anthropic / OpenAI / Google / MiniMax / 智谱等 OpenAI 兼容接口)
|
|
32
39
|
|
|
33
40
|
```bash
|
|
34
41
|
node -v # 需要 v20.6.0 或更高
|
|
35
42
|
```
|
|
36
43
|
|
|
37
|
-
如果未安装,推荐用 [nvm](https://github.com/nvm-sh/nvm) 安装:
|
|
38
|
-
|
|
39
|
-
```bash
|
|
40
|
-
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash
|
|
41
|
-
nvm install 22
|
|
42
|
-
```
|
|
43
|
-
|
|
44
44
|
## 安装
|
|
45
45
|
|
|
46
46
|
### 方式一:npm 全局安装(推荐)
|
|
@@ -49,6 +49,8 @@ nvm install 22
|
|
|
49
49
|
npm install -g @antaif3ng/til-work
|
|
50
50
|
```
|
|
51
51
|
|
|
52
|
+
安装后使用 `til` 命令启动。
|
|
53
|
+
|
|
52
54
|
### 方式二:从源码安装
|
|
53
55
|
|
|
54
56
|
```bash
|
|
@@ -59,6 +61,12 @@ npm run build
|
|
|
59
61
|
npm link # 注册 til 命令到全局
|
|
60
62
|
```
|
|
61
63
|
|
|
64
|
+
### 更新版本
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
npm update -g @antaif3ng/til-work
|
|
68
|
+
```
|
|
69
|
+
|
|
62
70
|
## 快速开始
|
|
63
71
|
|
|
64
72
|
### 1. 首次配置
|
|
@@ -67,7 +75,7 @@ npm link # 注册 til 命令到全局
|
|
|
67
75
|
til --setup
|
|
68
76
|
```
|
|
69
77
|
|
|
70
|
-
|
|
78
|
+
按提示输入模型 ID、API Key 和 Base URL。配置保存在 `~/.til/config.json`。
|
|
71
79
|
|
|
72
80
|
你也可以通过环境变量配置:
|
|
73
81
|
|
|
@@ -81,9 +89,9 @@ export OPENAI_API_KEY=sk-xxxxx
|
|
|
81
89
|
# Google Gemini
|
|
82
90
|
export GOOGLE_API_KEY=AIza-xxxxx
|
|
83
91
|
|
|
84
|
-
# OpenAI
|
|
92
|
+
# OpenAI 兼容接口(如 MiniMax、智谱、DeepSeek、Ollama 等)
|
|
85
93
|
export OPENAI_API_KEY=your-key
|
|
86
|
-
export OPENAI_BASE_URL=https://
|
|
94
|
+
export OPENAI_BASE_URL=https://api.minimaxi.com/v1
|
|
87
95
|
```
|
|
88
96
|
|
|
89
97
|
### 2. 启动交互模式
|
|
@@ -92,28 +100,15 @@ export OPENAI_BASE_URL=https://open.bigmodel.cn/api/paas/v4
|
|
|
92
100
|
til
|
|
93
101
|
```
|
|
94
102
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
```
|
|
98
|
-
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
|
99
|
-
┃ >_ 欢迎使用千岛湖 Agent 工具 TIL v0.1.0 ┃
|
|
100
|
-
┃ model: gpt-4o /model 切换 ┃
|
|
101
|
-
┃ directory: ~/dev/my-project ┃
|
|
102
|
-
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
|
|
103
|
-
```
|
|
103
|
+
输入 `/` 查看所有可用命令(支持方向键循环选择),输入 `@` 引用文件内容(自动注入到上下文)。
|
|
104
104
|
|
|
105
|
-
|
|
105
|
+
支持多行输入:行尾输入 `\` 再回车,或按 `Ctrl+J` / `Alt+Enter` 换行。
|
|
106
106
|
|
|
107
107
|
### 3. 单次执行模式
|
|
108
108
|
|
|
109
109
|
```bash
|
|
110
|
-
# 直接给出提示
|
|
111
110
|
til "列出当前目录的所有 TypeScript 文件"
|
|
112
|
-
|
|
113
|
-
# 通过参数传入
|
|
114
111
|
til -p "解释这个错误日志" < error.log
|
|
115
|
-
|
|
116
|
-
# 管道输入
|
|
117
112
|
cat README.md | til "总结一下这个文件"
|
|
118
113
|
```
|
|
119
114
|
|
|
@@ -126,13 +121,13 @@ til [options] [prompt]
|
|
|
126
121
|
|
|
127
122
|
选项:
|
|
128
123
|
-p, --prompt <text> 单次执行模式
|
|
129
|
-
-m, --model <model>
|
|
124
|
+
-m, --model <model> 指定模型 ID
|
|
130
125
|
--base-url <url> 覆盖 API 地址
|
|
131
126
|
--tools <list> 指定启用的工具(逗号分隔)
|
|
132
127
|
--skill <path> 加载技能文件或目录(可重复)
|
|
133
128
|
--no-skills 禁用自动技能加载
|
|
134
129
|
--continue 恢复当前目录下的最近一次会话
|
|
135
|
-
--resume [sessionId] 恢复指定 ID
|
|
130
|
+
--resume [sessionId] 恢复指定 ID 的会话
|
|
136
131
|
--setup 运行配置向导
|
|
137
132
|
-h, --help 显示帮助
|
|
138
133
|
-v, --version 显示版本
|
|
@@ -140,63 +135,101 @@ til [options] [prompt]
|
|
|
140
135
|
|
|
141
136
|
### 交互模式命令
|
|
142
137
|
|
|
143
|
-
在交互模式中输入 `/`
|
|
138
|
+
在交互模式中输入 `/` 即可看到所有命令(支持方向键选择和自动补全):
|
|
144
139
|
|
|
145
140
|
| 命令 | 说明 |
|
|
146
141
|
|------|------|
|
|
147
142
|
| `/help` | 显示帮助信息 |
|
|
148
|
-
| `/model
|
|
149
|
-
| `/
|
|
150
|
-
| `/
|
|
143
|
+
| `/model` | 查看/切换/管理模型(支持方向键选择) |
|
|
144
|
+
| `/model add <id> [baseUrl] [apiKey]` | 添加模型配置 |
|
|
145
|
+
| `/model default <id>` | 设置默认模型 |
|
|
146
|
+
| `/skills` | 查看已加载的技能(含来源标签) |
|
|
151
147
|
| `/skill:<name>` | 查看某个技能的详细内容 |
|
|
148
|
+
| `/mcp` | 查看已连接的 MCP 服务和工具 |
|
|
152
149
|
| `/memory` | 查看当前记忆内容 |
|
|
153
150
|
| `/usage` | 查看本次会话的 Token 用量 |
|
|
154
151
|
| `/sessions` | 查看会话历史列表 |
|
|
155
152
|
| `/config` | 查看当前配置 |
|
|
153
|
+
| `/config check` | 测试当前 API 连接 |
|
|
156
154
|
| `/clear` | 清空对话历史 |
|
|
157
155
|
| `/exit` | 退出 |
|
|
158
156
|
|
|
159
157
|
## 内置工具
|
|
160
158
|
|
|
161
|
-
| 工具 | 说明 |
|
|
162
|
-
|
|
163
|
-
| `bash` | 执行 bash 命令(ls, grep, git, curl 等) |
|
|
164
|
-
| `read` |
|
|
165
|
-
| `write` | 创建或覆盖文件 |
|
|
166
|
-
| `edit` |
|
|
167
|
-
| `file_manager` |
|
|
168
|
-
| `system_info` |
|
|
169
|
-
| `web_search` | 搜索互联网获取实时信息 |
|
|
159
|
+
| 工具 | 类型 | 默认启用 | 说明 |
|
|
160
|
+
|------|------|----------|------|
|
|
161
|
+
| `bash` | 基础 | 是 | 执行 bash 命令(ls, grep, git, curl 等) |
|
|
162
|
+
| `read` | 基础 | 是 | 读取文件内容(文本 + 图片 base64) |
|
|
163
|
+
| `write` | 基础 | 是 | 创建或覆盖文件 |
|
|
164
|
+
| `edit` | 基础 | 是 | 精确查找替换 |
|
|
165
|
+
| `file_manager` | 文件 | 是 | 复制、移动、删除、列目录、获取信息 |
|
|
166
|
+
| `system_info` | 系统 | 是 | OS、CPU、内存、网络、环境变量 |
|
|
167
|
+
| `web_search` | 网络 | 是 | 搜索互联网获取实时信息 |
|
|
168
|
+
| `web_fetch` | 网络 | 是 | 抓取网页内容转纯文本 |
|
|
169
|
+
| `screenshot` | 视觉 | 是 | 截取全屏或窗口截图 |
|
|
170
|
+
| `computer` | 桌面自动化 | 是 | 鼠标、键盘、滚动 + 自动截图反馈 |
|
|
171
|
+
| `browser` | 浏览器 | 否 | Playwright 页面控制(需安装 Playwright) |
|
|
172
|
+
|
|
173
|
+
### screenshot 工具
|
|
174
|
+
|
|
175
|
+
截取屏幕或窗口截图,返回 base64 图片供 LLM 视觉分析。
|
|
176
|
+
|
|
177
|
+
- macOS 使用 `screencapture`(系统自带)
|
|
178
|
+
- Linux 使用 `gnome-screenshot` / `scrot` / `import`(需安装其中一个)
|
|
179
|
+
|
|
180
|
+
### computer 工具
|
|
181
|
+
|
|
182
|
+
对标 Anthropic Computer Use API,支持以下操作:
|
|
183
|
+
|
|
184
|
+
| Action | 说明 |
|
|
185
|
+
|--------|------|
|
|
186
|
+
| `screenshot` | 截屏 |
|
|
187
|
+
| `mouse_move` | 移动鼠标 |
|
|
188
|
+
| `click` | 点击 |
|
|
189
|
+
| `double_click` | 双击 |
|
|
190
|
+
| `drag` | 拖拽 |
|
|
191
|
+
| `type` | 输入文本 |
|
|
192
|
+
| `key` | 按键组合(如 cmd+c, ctrl+shift+t) |
|
|
193
|
+
| `scroll` | 滚动 |
|
|
194
|
+
|
|
195
|
+
每个操作执行后自动截图,形成"操作 → 视觉反馈 → 下一步"循环。
|
|
196
|
+
|
|
197
|
+
依赖:
|
|
198
|
+
- macOS: `brew install cliclick`
|
|
199
|
+
- Linux: `sudo apt install xdotool`
|
|
200
|
+
|
|
201
|
+
### browser 工具
|
|
202
|
+
|
|
203
|
+
基于 Playwright 的浏览器自动化,需单独安装:
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
npm install playwright
|
|
207
|
+
npx playwright install chromium
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
支持 `navigate`、`screenshot`、`click`、`type`、`evaluate`、`get_text`、`scroll`、`wait`、`back`、`forward`、`close` 等操作。
|
|
170
211
|
|
|
171
212
|
## 配置
|
|
172
213
|
|
|
173
|
-
配置文件位于 `~/.til/config.json
|
|
214
|
+
配置文件位于 `~/.til/config.json`:
|
|
174
215
|
|
|
175
216
|
```json
|
|
176
217
|
{
|
|
177
|
-
"
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
"
|
|
182
|
-
"
|
|
183
|
-
"
|
|
218
|
+
"model": "MiniMax-M2.5",
|
|
219
|
+
"apiKey": "sk-xxxxx",
|
|
220
|
+
"baseUrl": "https://api.minimaxi.com/v1",
|
|
221
|
+
"models": {
|
|
222
|
+
"MiniMax-M2.5": {
|
|
223
|
+
"provider": "openai-compatible",
|
|
224
|
+
"contextWindow": 128000
|
|
184
225
|
},
|
|
185
|
-
"
|
|
186
|
-
"apiKey": "AIza-xxxxx"
|
|
187
|
-
}
|
|
188
|
-
},
|
|
189
|
-
"defaultModel": {
|
|
190
|
-
"provider": "openai",
|
|
191
|
-
"id": "glm-5"
|
|
192
|
-
},
|
|
193
|
-
"customModels": {
|
|
194
|
-
"glm-5": {
|
|
226
|
+
"gpt-4o": {
|
|
195
227
|
"provider": "openai",
|
|
196
|
-
"
|
|
197
|
-
"contextWindow": 128000
|
|
228
|
+
"apiKey": "sk-openai-xxxxx"
|
|
198
229
|
}
|
|
199
230
|
},
|
|
231
|
+
"providers": {},
|
|
232
|
+
"mcpServers": {},
|
|
200
233
|
"compaction": {
|
|
201
234
|
"thresholdRatio": 0.7,
|
|
202
235
|
"keepRecentTokens": 4000,
|
|
@@ -205,302 +238,232 @@ til [options] [prompt]
|
|
|
205
238
|
}
|
|
206
239
|
```
|
|
207
240
|
|
|
208
|
-
###
|
|
209
|
-
|
|
210
|
-
| 提供商 | 说明 | 配置方式 |
|
|
211
|
-
|--------|------|---------|
|
|
212
|
-
| **Anthropic** | Claude 系列 | `ANTHROPIC_API_KEY` |
|
|
213
|
-
| **OpenAI** | GPT 系列 | `OPENAI_API_KEY` |
|
|
214
|
-
| **Google** | Gemini 系列 | `GOOGLE_API_KEY` |
|
|
215
|
-
| **智谱 (GLM)** | GLM 系列 | OpenAI 兼容接口 + 自定义 base_url |
|
|
216
|
-
| **DeepSeek** | DeepSeek 系列 | OpenAI 兼容接口 + 自定义 base_url |
|
|
217
|
-
| **Ollama** | 本地模型 | OpenAI 兼容接口 (`http://localhost:11434/v1`) |
|
|
218
|
-
| **其他** | 任意 OpenAI 兼容接口 | `--base-url` 或配置 |
|
|
219
|
-
|
|
220
|
-
### 内置模型及 Context Window
|
|
221
|
-
|
|
222
|
-
| 模型 | 提供商 | Context Window |
|
|
223
|
-
|------|--------|----------------|
|
|
224
|
-
| `claude-sonnet-4-20250514` | Anthropic | 200k |
|
|
225
|
-
| `claude-3-5-haiku-20241022` | Anthropic | 200k |
|
|
226
|
-
| `gpt-4o` | OpenAI | 128k |
|
|
227
|
-
| `gpt-4o-mini` | OpenAI | 128k |
|
|
228
|
-
| `o3-mini` | OpenAI | 200k |
|
|
229
|
-
| `gemini-2.0-flash` | Google | 1M |
|
|
230
|
-
| `gemini-2.5-pro-preview-06-05` | Google | 1M |
|
|
231
|
-
|
|
232
|
-
## 会话持久化
|
|
233
|
-
|
|
234
|
-
TIL 自动保存每次对话为会话文件(JSONL 格式),可随时恢复。
|
|
235
|
-
|
|
236
|
-
### 自动保存
|
|
241
|
+
### 配置字段
|
|
237
242
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
243
|
+
| 字段 | 说明 |
|
|
244
|
+
|------|------|
|
|
245
|
+
| `model` | 默认模型 ID |
|
|
246
|
+
| `apiKey` | 全局 API Key(所有模型的默认值) |
|
|
247
|
+
| `baseUrl` | 全局 Base URL(所有模型的默认值) |
|
|
248
|
+
| `models` | 各模型的单独配置(provider、apiKey、baseUrl、contextWindow 等) |
|
|
249
|
+
| `providers` | Provider 级别配置(apiKey、baseUrl、headers) |
|
|
250
|
+
| `mcpServers` | MCP 服务器配置 |
|
|
251
|
+
| `defaultTools` | 默认启用的工具列表 |
|
|
244
252
|
|
|
245
|
-
###
|
|
253
|
+
### 模型管理
|
|
246
254
|
|
|
247
255
|
```bash
|
|
248
|
-
#
|
|
249
|
-
til --
|
|
250
|
-
|
|
251
|
-
# 恢复指定的会话
|
|
252
|
-
til --resume abc12345
|
|
256
|
+
# 配置向导
|
|
257
|
+
til --setup
|
|
253
258
|
|
|
254
|
-
#
|
|
255
|
-
/
|
|
259
|
+
# 交互模式中管理
|
|
260
|
+
/model # 查看已配置模型
|
|
261
|
+
/model <id> # 切换模型
|
|
262
|
+
/model add <id> [url] [key] # 添加模型
|
|
263
|
+
/model default <id> # 设置默认
|
|
264
|
+
/model rm <id> # 删除配置
|
|
265
|
+
/config check # 测试 API 连接
|
|
256
266
|
```
|
|
257
267
|
|
|
258
|
-
|
|
268
|
+
### 支持的模型
|
|
259
269
|
|
|
260
|
-
|
|
270
|
+
TIL 支持任何 OpenAI 兼容接口。模型 provider 根据 ID 前缀自动检测:
|
|
261
271
|
|
|
262
|
-
|
|
272
|
+
| ID 前缀 | Provider | 示例 |
|
|
273
|
+
|----------|----------|------|
|
|
274
|
+
| `claude*` | anthropic | claude-sonnet-4-20250514 |
|
|
275
|
+
| `gpt*` / `o3*` / `o1*` | openai | gpt-4o, o3-mini |
|
|
276
|
+
| `gemini*` | google | gemini-2.5-pro-preview-06-05 |
|
|
277
|
+
| 其他 | openai-compatible | MiniMax-M2.5, deepseek-chat, glm-5 |
|
|
263
278
|
|
|
264
|
-
|
|
265
|
-
2. **溢出兜底** — 如果模型返回上下文溢出错误,自动压缩后重试
|
|
266
|
-
3. **智能切分** — 保留最近的对话(默认 4000 token),将历史部分交给 LLM 生成摘要
|
|
267
|
-
4. **增量更新** — 后续压缩会基于前一次的摘要进行增量更新,不丢失关键信息
|
|
279
|
+
## MCP 扩展
|
|
268
280
|
|
|
269
|
-
|
|
281
|
+
TIL 支持通过 MCP (Model Context Protocol) 接入外部工具服务。
|
|
270
282
|
|
|
271
|
-
|
|
272
|
-
in:12.3k out:1.2k ctx:35% # 绿色 < 50%
|
|
273
|
-
in:45.0k out:8.5k ctx:72% # 黄色 50-80%
|
|
274
|
-
in:98.0k out:15.2k ctx:95% # 红色 > 80%
|
|
275
|
-
```
|
|
283
|
+
### 配置 MCP 服务器
|
|
276
284
|
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
在 `~/.til/config.json` 中:
|
|
285
|
+
在 `~/.til/config.json` 中添加:
|
|
280
286
|
|
|
281
287
|
```json
|
|
282
288
|
{
|
|
283
|
-
"
|
|
284
|
-
"
|
|
285
|
-
|
|
286
|
-
|
|
289
|
+
"mcpServers": {
|
|
290
|
+
"playwright": {
|
|
291
|
+
"command": "npx",
|
|
292
|
+
"args": ["@playwright/mcp", "--headless"]
|
|
293
|
+
},
|
|
294
|
+
"web-search": {
|
|
295
|
+
"type": "http",
|
|
296
|
+
"url": "https://open.bigmodel.cn/api/mcp/web_search/mcp",
|
|
297
|
+
"headers": {
|
|
298
|
+
"Authorization": "Bearer your_api_key"
|
|
299
|
+
}
|
|
300
|
+
}
|
|
287
301
|
}
|
|
288
302
|
}
|
|
289
303
|
```
|
|
290
304
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
| `keepRecentTokens` | 4000 | 压缩时保留最近多少 token 不被摘要 |
|
|
295
|
-
| `reserveTokens` | 8000 | 为模型输出预留的 token 空间 |
|
|
305
|
+
支持两种传输方式:
|
|
306
|
+
- **stdio**:本地进程通过 stdin/stdout 通信
|
|
307
|
+
- **streamable_http** / **sse**:远程 HTTP 服务
|
|
296
308
|
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
TIL 实时追踪每次对话的 token 消耗。
|
|
300
|
-
|
|
301
|
-
### 实时显示
|
|
302
|
-
|
|
303
|
-
每轮对话结束后会显示当前轮的用量:
|
|
309
|
+
### 查看 MCP 状态
|
|
304
310
|
|
|
305
311
|
```
|
|
306
|
-
|
|
312
|
+
/mcp # 查看已连接的 MCP 服务器和工具列表
|
|
313
|
+
/extensions # 查看所有扩展信息
|
|
307
314
|
```
|
|
308
315
|
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
- `cache_w` 缓存写入 token
|
|
313
|
-
- `ctx` 上下文占用率(动态计算:已用 token / 模型上下文窗口)
|
|
316
|
+
## 内置技能
|
|
317
|
+
|
|
318
|
+
TIL 内置 5 个实用技能,安装即用:
|
|
314
319
|
|
|
315
|
-
|
|
320
|
+
| 技能 | 说明 |
|
|
321
|
+
|------|------|
|
|
322
|
+
| **summarize** | 使用 summarize CLI 摘要网页、PDF、YouTube 等 |
|
|
323
|
+
| **find-skills** | 从开源社区发现和安装新技能 |
|
|
324
|
+
| **self-improvement** | 自动记录错误、学习和修正,持续改进 |
|
|
325
|
+
| **skill-creator** | 创建新技能的指南和最佳实践 |
|
|
326
|
+
| **playwright-mcp** | Playwright MCP 浏览器自动化配置和用法 |
|
|
316
327
|
|
|
317
|
-
|
|
328
|
+
### 查看和使用技能
|
|
318
329
|
|
|
319
330
|
```
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
输出 tokens: 12.9k
|
|
323
|
-
缓存读取: 38.1k
|
|
324
|
-
上下文占用: 29% (窗口: 200k)
|
|
331
|
+
/skills # 列出所有已加载技能(显示来源:内置/用户/项目)
|
|
332
|
+
/skill:summarize # 查看 summarize 技能详情
|
|
325
333
|
```
|
|
326
334
|
|
|
327
|
-
|
|
335
|
+
### 自定义技能
|
|
328
336
|
|
|
329
|
-
|
|
337
|
+
将 `SKILL.md` 放入以下目录即可自动加载:
|
|
330
338
|
|
|
331
|
-
|
|
|
332
|
-
|
|
333
|
-
|
|
|
334
|
-
|
|
|
335
|
-
|
|
|
336
|
-
| 权限修改 | `chmod 777`, `chown root` |
|
|
337
|
-
| 进程操作 | `kill -9`, `killall` |
|
|
338
|
-
| 网络操作 | `iptables`, `curl \| sh` |
|
|
339
|
-
|
|
340
|
-
拦截时会显示提示并要求确认:
|
|
339
|
+
| 路径 | 作用 |
|
|
340
|
+
|------|------|
|
|
341
|
+
| `~/.til/skills/<name>/SKILL.md` | 全局技能 |
|
|
342
|
+
| `.til/skills/<name>/SKILL.md` | 项目级技能 |
|
|
343
|
+
| `--skill <path>` | CLI 指定 |
|
|
341
344
|
|
|
342
|
-
|
|
343
|
-
⚠️ 检测到危险命令: rm -rf /tmp/important
|
|
344
|
-
原因: 包含递归删除操作
|
|
345
|
-
确认执行? (y/N)
|
|
346
|
-
```
|
|
345
|
+
同名的用户技能会覆盖内置技能。
|
|
347
346
|
|
|
348
|
-
|
|
347
|
+
技能文件格式:
|
|
349
348
|
|
|
350
|
-
|
|
349
|
+
```markdown
|
|
350
|
+
---
|
|
351
|
+
name: my-skill
|
|
352
|
+
description: "简要描述技能的功能和触发条件"
|
|
353
|
+
---
|
|
351
354
|
|
|
352
|
-
|
|
355
|
+
# 技能标题
|
|
353
356
|
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
- **行内代码** — 反引号高亮
|
|
357
|
-
- **列表** — 有序/无序列表缩进
|
|
358
|
-
- **引用块** — 带边框的引用
|
|
359
|
-
- **链接** — 下划线 + URL 显示
|
|
360
|
-
- **粗体/斜体/删除线** — 终端 ANSI 样式
|
|
357
|
+
具体的指令内容...
|
|
358
|
+
```
|
|
361
359
|
|
|
362
360
|
## 记忆系统
|
|
363
361
|
|
|
364
|
-
TIL
|
|
362
|
+
TIL 使用双层记忆系统:
|
|
365
363
|
|
|
366
|
-
###
|
|
364
|
+
### 对话历史(短期记忆)
|
|
367
365
|
|
|
368
|
-
|
|
366
|
+
当前会话内的完整消息历史,存储在 `~/.til/sessions/` 目录(JSONL 格式)。
|
|
367
|
+
|
|
368
|
+
### MEMORY.md(长期记忆)
|
|
369
|
+
|
|
370
|
+
由 AI 自动判断写入,跨会话持久化:
|
|
369
371
|
|
|
370
372
|
| 文件 | 作用 |
|
|
371
373
|
|------|------|
|
|
372
374
|
| `~/.til/MEMORY.md` | 全局记忆(偏好、通用模式) |
|
|
373
375
|
| `.til/MEMORY.md` | 项目记忆(架构决策、进行中的工作) |
|
|
374
376
|
|
|
377
|
+
AI 会在以下情况主动记录:用户偏好、项目架构、问题修复模式、重要决策等。
|
|
378
|
+
|
|
375
379
|
### AGENTS.md(项目上下文)
|
|
376
380
|
|
|
377
|
-
|
|
381
|
+
手动维护的项目指令:
|
|
378
382
|
|
|
379
383
|
| 文件 | 作用 |
|
|
380
384
|
|------|------|
|
|
381
|
-
| `~/.til/AGENTS.md` |
|
|
382
|
-
| `<项目>/AGENTS.md` |
|
|
385
|
+
| `~/.til/AGENTS.md` | 全局指令 |
|
|
386
|
+
| `<项目>/AGENTS.md` | 项目指令 |
|
|
383
387
|
|
|
384
|
-
|
|
388
|
+
也兼容 `CLAUDE.md` 文件名。
|
|
385
389
|
|
|
386
|
-
##
|
|
390
|
+
## 会话持久化
|
|
387
391
|
|
|
388
|
-
|
|
392
|
+
每次对话自动保存,退出时显示恢复命令。
|
|
389
393
|
|
|
390
|
-
|
|
394
|
+
```bash
|
|
395
|
+
til --continue # 恢复最近的会话
|
|
396
|
+
til --resume abc12345 # 恢复指定会话
|
|
397
|
+
/sessions # 交互模式中查看会话列表
|
|
398
|
+
```
|
|
391
399
|
|
|
392
|
-
|
|
393
|
-
|------|------|
|
|
394
|
-
| `~/.til/skills/` | 全局技能 |
|
|
395
|
-
| `.til/skills/` | 项目级技能 |
|
|
396
|
-
| `--skill <path>` | CLI 指定的技能 |
|
|
400
|
+
## Context 压缩
|
|
397
401
|
|
|
398
|
-
|
|
402
|
+
当长对话接近模型上下文窗口上限时自动触发:
|
|
399
403
|
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
description: 帮助部署应用到生产环境
|
|
404
|
-
triggers:
|
|
405
|
-
- deploy
|
|
406
|
-
- 部署
|
|
407
|
-
---
|
|
404
|
+
1. 当已用 token 超过阈值(默认 70%)时压缩
|
|
405
|
+
2. 保留最近对话,将历史部分生成摘要
|
|
406
|
+
3. 溢出时自动压缩后重试
|
|
408
407
|
|
|
409
|
-
|
|
408
|
+
实时显示使用率:
|
|
410
409
|
|
|
411
|
-
|
|
412
|
-
1.
|
|
413
|
-
2. 运行测试
|
|
414
|
-
3. 构建项目
|
|
415
|
-
4. 执行部署命令
|
|
410
|
+
```
|
|
411
|
+
in:12.3k out:1.2k ctx:35%
|
|
416
412
|
```
|
|
417
413
|
|
|
418
|
-
|
|
414
|
+
- `in` 输入 token · `out` 输出 token · `ctx` 上下文占用率
|
|
419
415
|
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
```
|
|
416
|
+
## 安全拦截
|
|
417
|
+
|
|
418
|
+
内置危险命令检测:递归删除、提权操作、磁盘格式化、权限修改等。执行前会要求确认。
|
|
424
419
|
|
|
425
420
|
## 常见问题
|
|
426
421
|
|
|
427
|
-
###
|
|
422
|
+
### 提示"未配置模型"
|
|
428
423
|
|
|
429
424
|
```bash
|
|
430
|
-
|
|
431
|
-
# 或重新 link
|
|
432
|
-
cd til-cli && npm link
|
|
425
|
+
til --setup # 运行配置向导
|
|
433
426
|
```
|
|
434
427
|
|
|
435
428
|
### 提示 No API key found
|
|
436
429
|
|
|
437
430
|
```bash
|
|
438
|
-
#
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
# 方法 2:配置向导
|
|
442
|
-
til --setup
|
|
431
|
+
export OPENAI_API_KEY=your-key # 环境变量
|
|
432
|
+
til --setup # 或配置向导
|
|
443
433
|
```
|
|
444
434
|
|
|
445
|
-
###
|
|
435
|
+
### 如何使用国内 LLM(MiniMax / 智谱 / DeepSeek 等)
|
|
446
436
|
|
|
447
437
|
```bash
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
或在 `~/.til/config.json` 中配置:
|
|
453
|
-
|
|
454
|
-
```json
|
|
455
|
-
{
|
|
456
|
-
"providers": {
|
|
457
|
-
"google": { "apiKey": "AIza-xxxxx" }
|
|
458
|
-
},
|
|
459
|
-
"defaultModel": { "provider": "google", "id": "gemini-2.5-pro-preview-06-05" }
|
|
460
|
-
}
|
|
438
|
+
til --setup
|
|
439
|
+
# 模型: MiniMax-M2.5(或 deepseek-chat, glm-5 等)
|
|
440
|
+
# API Key: 你的 key
|
|
441
|
+
# Base URL: https://api.minimaxi.com/v1(或对应平台的 URL)
|
|
461
442
|
```
|
|
462
443
|
|
|
463
|
-
### 如何使用国内 LLM(智谱/DeepSeek 等)
|
|
464
|
-
|
|
465
|
-
运行 `til --setup`,在 CUSTOM PROVIDER 部分填入:
|
|
466
|
-
|
|
467
|
-
- Base URL:如 `https://open.bigmodel.cn/api/paas/v4`
|
|
468
|
-
- API Key:你的 API Key
|
|
469
|
-
- Model ID:如 `glm-5`
|
|
470
|
-
|
|
471
|
-
或者直接编辑 `~/.til/config.json`。
|
|
472
|
-
|
|
473
444
|
### 如何使用本地模型(Ollama)
|
|
474
445
|
|
|
475
446
|
```bash
|
|
476
|
-
# 启动 Ollama
|
|
477
447
|
ollama serve
|
|
478
|
-
|
|
479
|
-
# 配置 TIL
|
|
480
448
|
til --setup
|
|
481
|
-
# Base URL
|
|
482
|
-
# Model ID
|
|
449
|
+
# Base URL: http://localhost:11434/v1
|
|
450
|
+
# Model ID: llama3.1:8b
|
|
483
451
|
```
|
|
484
452
|
|
|
485
|
-
###
|
|
453
|
+
### API 连接失败怎么排查
|
|
486
454
|
|
|
487
|
-
|
|
455
|
+
```
|
|
456
|
+
/config check # 显示当前配置并测试 API 连接
|
|
457
|
+
```
|
|
488
458
|
|
|
489
|
-
###
|
|
459
|
+
### 如何启用浏览器工具
|
|
490
460
|
|
|
491
461
|
```bash
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
# 恢复指定会话
|
|
496
|
-
til --resume <sessionId>
|
|
462
|
+
npm install playwright
|
|
463
|
+
npx playwright install chromium
|
|
497
464
|
```
|
|
498
465
|
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
### 如何关闭危险命令拦截
|
|
502
|
-
|
|
503
|
-
目前不支持全局关闭。TIL 在执行可能破坏性的命令前会要求确认,这是安全设计。在交互模式下可以选择 `y` 确认执行。
|
|
466
|
+
然后在配置中将 `browser` 加入 `defaultTools`,或使用 Playwright MCP。
|
|
504
467
|
|
|
505
468
|
## 开发
|
|
506
469
|
|
|
@@ -511,52 +474,57 @@ npm install
|
|
|
511
474
|
npm run dev # 监听模式编译
|
|
512
475
|
npm run build # 一次性编译
|
|
513
476
|
npm start # 运行
|
|
477
|
+
npm test # 运行测试
|
|
514
478
|
```
|
|
515
479
|
|
|
516
|
-
### 运行测试
|
|
517
|
-
|
|
518
|
-
```bash
|
|
519
|
-
npm test # 运行全部测试
|
|
520
|
-
npm run test:watch # 监听模式
|
|
521
|
-
```
|
|
522
|
-
|
|
523
|
-
测试使用 [Vitest](https://vitest.dev/),覆盖所有核心模块:
|
|
524
|
-
|
|
525
|
-
- `tests/core/` — Agent、Config、LLM、Session、Compaction、Pricing、Memory、Skills、Markdown、Tool Permissions
|
|
526
|
-
- `tests/tools/` — Bash、Read、Write、Edit 工具
|
|
527
|
-
|
|
528
480
|
### 项目结构
|
|
529
481
|
|
|
530
482
|
```
|
|
531
483
|
til-cli/
|
|
532
484
|
├── src/
|
|
533
|
-
│ ├── main.ts # CLI 入口
|
|
534
|
-
│ ├──
|
|
485
|
+
│ ├── main.ts # CLI 入口 & 配置向导
|
|
486
|
+
│ ├── version.ts # 版本号管理
|
|
535
487
|
│ ├── core/
|
|
536
488
|
│ │ ├── agent.ts # 双层循环 Agent 引擎
|
|
537
489
|
│ │ ├── llm.ts # LLM 提供商抽象(Anthropic/OpenAI/Google)
|
|
538
|
-
│ │ ├── config.ts # 配置管理
|
|
490
|
+
│ │ ├── config.ts # 配置管理 & 模型解析
|
|
539
491
|
│ │ ├── session.ts # 会话包装(工具 + 系统提示)
|
|
540
492
|
│ │ ├── session-manager.ts # 会话持久化(JSONL)
|
|
541
|
-
│ │ ├── types.ts #
|
|
493
|
+
│ │ ├── types.ts # 核心类型(含 ImageContent)
|
|
542
494
|
│ │ ├── compaction.ts # Context 压缩 & 溢出检测
|
|
543
|
-
│ │ ├── pricing.ts # Token
|
|
495
|
+
│ │ ├── pricing.ts # Token 用量格式化
|
|
544
496
|
│ │ ├── tool-permissions.ts # 危险命令拦截
|
|
545
497
|
│ │ ├── markdown.ts # 终端 Markdown 渲染
|
|
546
498
|
│ │ ├── memory.ts # 记忆系统
|
|
547
|
-
│ │ ├── skills.ts #
|
|
499
|
+
│ │ ├── skills.ts # 技能系统(内置 + 用户 + 项目)
|
|
548
500
|
│ │ └── system-prompt.ts # 系统提示词组装
|
|
549
501
|
│ ├── modes/
|
|
550
502
|
│ │ ├── interactive.ts # 交互 REPL 模式
|
|
551
503
|
│ │ └── oneshot.ts # 单次执行模式
|
|
552
|
-
│
|
|
553
|
-
│
|
|
554
|
-
│
|
|
555
|
-
│
|
|
556
|
-
│
|
|
557
|
-
│
|
|
558
|
-
│
|
|
559
|
-
│
|
|
504
|
+
│ ├── tools/ # 内置工具
|
|
505
|
+
│ │ ├── bash.ts # Shell 命令执行
|
|
506
|
+
│ │ ├── read.ts # 文件读取(含图片 base64)
|
|
507
|
+
│ │ ├── write.ts # 文件写入
|
|
508
|
+
│ │ ├── edit.ts # 精确替换
|
|
509
|
+
│ │ ├── file-manager.ts # 文件操作
|
|
510
|
+
│ │ ├── system-info.ts # 系统信息
|
|
511
|
+
│ │ ├── web-search.ts # 网页搜索
|
|
512
|
+
│ │ ├── web-fetch.ts # 网页抓取
|
|
513
|
+
│ │ ├── screenshot.ts # 截图
|
|
514
|
+
│ │ ├── computer.ts # Computer Use(鼠标/键盘/截图)
|
|
515
|
+
│ │ └── browser.ts # 浏览器控制(Playwright)
|
|
516
|
+
│ ├── extensions/ # 扩展系统
|
|
517
|
+
│ │ ├── types.ts # 扩展/MCP 类型定义
|
|
518
|
+
│ │ ├── loader.ts # 扩展加载器
|
|
519
|
+
│ │ ├── runner.ts # 扩展运行器
|
|
520
|
+
│ │ └── builtin/mcp.ts # MCP 客户端(stdio + HTTP)
|
|
521
|
+
│ └── utils/ # 工具函数
|
|
522
|
+
├── skills/ # 内置技能
|
|
523
|
+
│ ├── summarize/
|
|
524
|
+
│ ├── find-skills/
|
|
525
|
+
│ ├── self-improving-agent/
|
|
526
|
+
│ ├── skill-creator/
|
|
527
|
+
│ └── playwright-mcp/
|
|
560
528
|
├── tests/ # 单元测试
|
|
561
529
|
├── package.json
|
|
562
530
|
├── tsconfig.json
|