Appearance
save_memory 工具把你告知 AI 的重要事实追加到 ~/.gemini/GEMINI.md 文件,下次启动时自动加载,实现跨会话记忆。write_todos 工具让 AI 维护一份任务列表,显示在 CLI 界面上方,你可以随时用 Ctrl+T 展开或折叠详细视图,了解 AI 当前的工作进度。
记忆与任务工具参考
save_memory(持久化记忆)
将特定事实、用户偏好或项目信息持久化,使其在未来所有会话中都可用。
参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
fact | string | 是 | 用自然语言写的清晰、自包含的事实陈述 |
存储机制
记忆内容被追加到 ~/.gemini/GEMINI.md 全局上下文文件的 ## Gemini Added Memories 区块,以无序列表形式存储:
markdown
## Gemini Added Memories
- 用户偏好函数式编程风格,避免类继承
- 项目数据库使用 PostgreSQL 15,不用 MongoDB
- 代码注释统一用英文,用户消息用中文回复每次启动 Gemini CLI 时,这个文件会被自动加载进上下文,AI 无需用户重复说明就能记住这些偏好。
何时使用
当你希望 AI 在所有未来会话中都记住某个信息时,可以直接告诉 AI 记住它:
记住:我们的 API 始终用 REST,不用 GraphQL
请记住:部署时只推到 staging,不直接推 production
帮我记一下:这个项目的默认端口是 8080与 GEMINI.md 的关系
save_memory 写入的是用户级全局文件(~/.gemini/GEMINI.md)。你也可以在项目目录的 .gemini/GEMINI.md 中手动维护项目专属上下文。两者都会被自动加载,项目级配置优先级更高。
详见 GEMINI.md 上下文文件 文档。
write_todos(任务追踪)
让 AI 代理维护一份内部任务列表,实时展示在 CLI 界面的输入框上方,帮助你了解 AI 当前的执行计划。
参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
todos | array | 是 | 完整的任务列表(每次调用替换整个列表) |
每个任务对象包含:
| 字段 | 类型 | 说明 |
|---|---|---|
description | string | 任务的技术性描述 |
status | enum | pending、in_progress、completed、cancelled、blocked 之一 |
行为规则
- 唯一进行中任务:同时只能有一个任务标记为
in_progress - 进度指示器:界面上方显示简洁的当前进度摘要
- Ctrl+T 切换:按
Ctrl+T可展开/折叠完整任务列表视图 - 会话内有效:任务状态仅在当前会话中保持,会话结束后清除
示例展示
在执行复杂任务时,CLI 界面上方会显示类似:
⟳ [2/5] 创建数据库迁移文件...按 Ctrl+T 展开后看到完整列表:
✓ 分析现有数据库结构
⟳ 创建数据库迁移文件
○ 更新 ORM 模型
○ 编写测试用例
○ 运行测试并验证适用场景
- 多文件重构:跨多个文件的修改任务,让你知道 AI 处理到哪一步
- 复杂功能开发:需要多个步骤的功能实现,实时了解进度
- 长时间运行的任务:避免等待时不清楚 AI 是否在工作还是卡住了
常见问题
Q: save_memory 保存的内容可以手动编辑吗?
A: 可以。直接编辑 ~/.gemini/GEMINI.md 文件即可,增删改都支持。注意保持 Markdown 格式,确保 ## Gemini Added Memories 区块存在。
Q: 记忆内容太多会影响性能吗?
A: 记忆内容每次都会加载到上下文中,过多会消耗 Token 并可能影响响应速度。建议定期清理不再需要的记忆条目,或将项目专属信息迁移到项目级 .gemini/GEMINI.md。
Q: write_todos 的任务列表对 AI 有约束力吗?
A: 任务列表是 AI 自己维护的计划工具,不是硬性约束。你可以随时改变指令,AI 会据此更新任务列表。如果 AI 偏离计划,直接在 Prompt 中说明即可。
tracker_*(任务图追踪,实验性)
注意:此功能为实验性功能,正在积极开发中。
tracker_* 系列工具让代理维护一个持久化的任务依赖图,相比 write_todos 的简单列表,提供更细粒度的任务管理能力(支持 epic/task/bug 层级和依赖关系)。
可用工具
| 工具名 | 说明 |
|---|---|
tracker_create_task | 创建新任务(类型:epic/task/bug) |
tracker_update_task | 更新任务状态或描述 |
tracker_get_task | 通过 6 位十六进制 ID 获取任务详情 |
tracker_list_tasks | 列出任务(可按状态、类型、父任务过滤) |
tracker_add_dependency | 添加任务依赖关系(确保拓扑执行顺序) |
tracker_visualize | 渲染当前任务图的 ASCII 树形视图 |
任务状态
open → in_progress → blocked(等待依赖) / closed
存储位置
任务状态保存在 .gemini/tmp/tracker/<session-id> 目录,仅在当前会话内有效。
与 write_todos 的对比
| 能力 | write_todos | tracker_* |
|---|---|---|
| 任务层级 | 扁平列表 | epic / task / bug 层级 |
| 依赖管理 | 无 | 支持 DAG 依赖图 |
| 可视化 | 简单状态显示 | ASCII 树形结构 |
| 状态 | 稳定功能 | 实验性 |
适合:协调多文件重构项目、追踪代码库内的 bug 和功能请求、需要细粒度进度可见性的长时任务。
activate_skill(激活 Skill)
activate_skill 工具让代理按需加载专项能力(Skill),而不是把所有 Skill 的指令一直占用上下文窗口。
参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
name | enum | 是 | 要激活的 Skill 名称(如 code-reviewer、pr-creator、docs-writer) |
行为:
- 只在代理判断任务与某 Skill 匹配时才激活
- 激活后,代理的行为由该 Skill 的专项指令引导,直到任务完成
- 激活特定 Skill 后可能获得该 Skill 专属的额外工具
注意:activate_skill 是代理专用的内部工具,你不能手动调用它,但可以通过描述任务类型隐式触发(如"审查一下这段代码"会触发 code-reviewer Skill)。
如何创建自定义 Skill:创建自定义 Skills