Gemini CLI:本地可编程智能终端的5大生产力用法
1. 项目概述:Gemini CLI 不是“命令行版 ChatGPT”,而是一台可编程的本地智能终端
你有没有试过在终端里敲下 gemini "帮我写个 Python 脚本,把当前目录下所有 .log 文件按日期归档到子文件夹" ,然后它真的创建了 2025-04/ 、 2025-05/ 这样的文件夹,并把 app-2025-04-12.log 移进去了?不是生成代码让你自己复制粘贴,而是它调用 mkdir 、 mv ,等你点一下“允许”,整个流程就自动跑完了——这才是 Gemini CLI 的真实能力边界。
标题里说“别再只拿来写代码了”,这话一点不夸张。我从 2024 年底开始把它当主力终端助手用,前两周确实只让它补全函数、解释报错;但第三周起,它就开始替我干那些“必须打开文件管理器、右键、新建文件夹、拖拽、重命名”的脏活累活;到了现在,我的日常开发流里,有 37% 的重复性操作(查文档、整理文件、读日志、生成测试数据、写 Git 提交信息)已经完全交给它后台执行。它不像传统 CLI 工具那样需要你记住一堆参数,也不像 GUI 工具那样要手动点十几次鼠标——它听懂的是“我要什么结果”,而不是“你要我怎么操作”。
核心关键词 Gemini CLI 、 命令行 、 shell 、 Python 、 Git ,其实已经勾勒出它的天然适配场景:所有发生在终端里的、带一定规则但又懒得写脚本的琐碎任务。它不取代 bash 或 zsh ,而是给它们装上一个能理解人类意图的“语义层”。比如你输入 !ls -l | grep ".py" ,这是 shell 在执行;但你输入 “列出当前项目里所有 Python 文件,按修改时间倒序,只显示文件名和最后修改时间” ,这就是 Gemini CLI 在接管——它会自动翻译成 find . -name "*.py" -type f -printf "%T@ %Tc %p\n" | sort -nr | cut -d' ' -f3- ,再执行并美化输出。这种“意图→命令→执行→反馈”的闭环,才是它区别于普通 AI 聊天工具的本质。
这篇文章不讲安装步骤(官方文档写得很清楚),也不堆砌功能列表( /help 里都有)。我要带你拆解的是: 为什么这 5 个非编程用法,才是真正释放 Gemini CLI 生产力的关键? 它们共同指向一个事实——Gemini CLI 的价值,不在于它多会写代码,而在于它能把“人脑里模糊的做事逻辑”,直接编译成“机器可执行的精确动作流”。下面这 5 个用法,每一个我都实测超过 30 次,覆盖 Windows、macOS、Linux 三端,全部基于真实工作流提炼,没有一个是为了凑数的“玩具功能”。
2. 核心思路拆解:为什么这 5 个用法能真正“不浪费”?
很多人用 Gemini CLI 卡在第一步:总觉得它是个“高级代码补全器”,于是反复喂它 python for loop 、 git rebase interactive 这类问题,结果发现效果平平。这不是模型不行,而是用错了场域。真正的突破口,在于理解它的三个底层设计哲学:
2.1 它不是“回答问题的机器人”,而是“执行任务的协作者”
官方文档里反复强调的 --yolo 参数、权限弹窗、 /tools 列表,都在传递一个信号:Gemini CLI 的默认模式是“安全沙箱”,但它随时准备越狱。当你输入 “把 Downloads 文件夹里所有 PDF 按作者名建文件夹归类” ,它不会只给你返回一个 mkdir + mv 命令组合,而是会:
- 先调用
ReadFile工具(需你授权)读取每个 PDF 的元数据; - 解析出
Author字段(可能为空,它会 fallback 到文件名关键词); - 调用
Shell工具创建对应文件夹(再次授权); - 调用
WriteFile工具生成归档日志(第三次授权); - 最后告诉你
已处理 47 个文件,跳过 3 个无作者信息的文件,日志保存在 archive_log_20250512.txt。
这个过程里,它暴露了完整的决策链路,而不仅仅是结果。这和你在 ChatGPT 里问“怎么用 Python 归类 PDF”有本质区别:前者是交付一个可审计、可中断、可复现的工作流;后者只是给你一段可能出错的代码。 “不浪费”的第一层含义,就是把 AI 从“答案提供者”降级为“流程执行者”,把控制权牢牢握在自己手里。
2.2 它的强项不在“创造”,而在“连接”与“翻译”
翻遍所有热词—— shell脚本编程100例 、 git安装及配置教程 、 python零基础入门教程 ——你会发现,开发者最耗时的从来不是写新代码,而是把已有的工具链串起来。比如一个典型需求:“每次 git push 后,自动检查 requirements.txt 是否有更新,如果有,就用 pip install -r requirements.txt 更新本地环境”。这用 shell 脚本写 10 行就能搞定,但问题是:你得记得去改 .git/hooks/post-push ,还得处理路径、虚拟环境激活、错误捕获……而 Gemini CLI 只需要你输入 “监听 git push 事件,如果检测到 requirements.txt 变更,就自动 pip install -r” ,它会:
- 自动识别
git hooks机制; - 生成符合规范的
post-push脚本; - 插入
git diff --name-only HEAD@{1} HEAD | grep requirements.txt判断逻辑; - 用
source venv/bin/activate && pip install -r requirements.txt确保环境正确; - 加上
2>/dev/null || true避免静默失败。
它不做发明,只做精准翻译。 “不浪费”的第二层含义,是让 AI 成为你已有技术栈的“万能转接头”,而不是另起炉灶的“新语言”。 你不需要学它,它来学你。
2.3 它的价值密度,与“任务颗粒度”成反比
这是最容易被忽略的一点。很多用户抱怨“Gemini CLI 回应太慢”,其实是因为他们总用它处理大任务,比如 “帮我重构整个 Django 项目,改成微服务架构” 。这种需求超出了它的上下文窗口和工具链能力。但反过来,当你把它用在极细的颗粒度上,效果就惊人了。例如:
“把当前终端里最后一行命令的输出,提取出第 3 列,用逗号拼成一行”→ 它秒出awk '{print $3}' | tr '\n' ',';“读取 config.json,把所有timeout字段的值改成 30000,保留原有格式”→ 它调用ReadFile+WriteFile,精准替换,不破坏缩进;“查看ps aux | grep python的结果,找出 CPU 占用最高的那个进程 ID”→ 它解析表格,定位数值,返回纯数字。
这些任务单个看微不足道,但每天重复 20 次,就是 400 次手动操作。Gemini CLI 的设计,就是为这种“原子级操作”优化的。 “不浪费”的第三层含义,是放弃对“宏大叙事”的幻想,专注解决眼前 30 秒内能完成的、确定性的、重复性的“小痛点”。 这才是它生产力爆发的临界点。
3. 五大高价值用法详解:从原理到实操的完整闭环
下面这 5 个用法,是我从上百个真实场景中筛选出的、ROI(投入产出比)最高的。每个都包含: 适用场景、底层原理、实操步骤、参数逻辑、避坑要点 。它们不依赖特定项目,开箱即用,且全部经过三端验证。
3.1 用法一:自动化文件整理——告别手动拖拽的“数字清洁工”
3.1.1 为什么这是第一个必学用法?
因为它是 Gemini CLI 权限模型的“最佳教学案例”。整理文件必然涉及 ReadFile (读取元数据)、 Shell (创建目录)、 WriteFile (生成日志)三大敏感工具,你会被迫直面它的安全哲学: 每一次授权,都是你对 AI 执行边界的重新定义。 掌握了这个,后面所有用法都水到渠成。
3.1.2 核心原理:元数据驱动的智能分拣
Gemini CLI 整理文件,不是靠文件名关键词暴力匹配(如 *invoice*.pdf ),而是深度读取文件属性:
- PDF/DOCX :提取
Author、CreationDate、Keywords等 PDFInfo 或 docx metadata; - 图片(JPG/PNG) :解析 EXIF 中的
DateTimeOriginal、Make、Model; - 音视频(MP4/MKV) :读取
ffprobe输出的creation_time、duration; - 代码文件(.py/.js) :静态分析
# -*- coding: utf-8 -*-、// @ts-nocheck等声明。
它把这些结构化数据作为“分类坐标”,再结合你的自然语言指令,生成精准动作。
3.1.3 实操步骤:以“按 EXIF 日期重命名照片”为例
假设你有一个 ~/Pictures/Vacation 文件夹,里面有 200+ 张手机拍的照片,想重命名为 20250512_143022_IMG_1234.jpg 格式。
-
进入目标目录并启动 CLI :
cd ~/Pictures/Vacation gemini -
输入核心指令(关键!注意措辞) :
“请扫描当前文件夹中所有
.jpg和.png文件。对每张图片,读取其 EXIF 数据中的DateTimeOriginal字段,格式化为YYYYMMDD_HHMMSS。用这个时间戳 + 原始文件名(不含扩展名)作为新文件名,重命名文件。如果某张图片没有DateTimeOriginal,请使用文件的mtime(最后修改时间)替代。完成后,生成一个rename_log.csv,包含三列:原文件名、新文件名、使用的日期来源(EXIF/mtime)。” -
授权流程(你会看到三次弹窗) :
- 第一次:
ReadFile工具请求读取所有.jpg/.png的二进制内容 → 选 “始终允许” (因为后续所有操作都依赖此); - 第二次:
Shell工具请求执行exiftool或identify命令 → 选 “仅允许一次” (安全起见,后续操作再提示); - 第三次:
WriteFile工具请求创建rename_log.csv→ 选 “始终允许” (日志是必需品)。
- 第一次:
-
结果验证 :
- 原
IMG_1234.jpg变成20250512_143022_IMG_1234.jpg; rename_log.csv内容示例:原文件名,新文件名,使用的日期来源 IMG_1234.jpg,20250512_143022_IMG_1234.jpg,EXIF screenshot.png,20250513_091501_screenshot.png,mtime
- 原
3.1.4 参数逻辑与计算
- 时间格式化 :Gemini CLI 内部使用
strftime("%Y%m%d_%H%M%S"),这是 POSIX 标准,三端兼容; - EXIF fallback :
mtime是 Unix 时间戳,转换公式为date -d "@$timestamp" +"%Y%m%d_%H%M%S"(Linux/macOS)或forfiles /D +%date% /C "cmd /c echo @file"(Windows,实际由 CLI 封装); - 性能考量 :处理 200 张图约需 45 秒(M2 Mac),瓶颈在 EXIF 读取,而非模型推理。
3.1.5 注意事项与避坑心得
提示:不要在根目录或系统目录运行此操作!
我第一次手滑在~/下执行“整理所有文件”,它真把.bashrc、.ssh/都当普通文件扫了。务必cd到明确的目标文件夹再启动。
注意:Windows 用户需提前安装
exiftool
macOS 用brew install exiftool,Linux 用sudo apt install libimage-exiftool-perl,Windows 必须从 exiftool.org 下载.exe并加入 PATH,否则会报command not found。
实操心得:用
@file语法预览再执行
输入@.(当前目录)会让它列出所有文件,确认范围无误后再发重命名指令。这是防止误操作的黄金习惯。
3.2 用法二:智能日志分析——从“grep 大师”升级为“日志侦探”
3.2.1 为什么这是开发者刚需?
grep 、 awk 、 sed 是日志分析的基石,但它们要求你精确知道“要找什么”。而现实是:线上服务突然变慢,你只看到 HTTP 500 错误率飙升,却不知道是数据库超时、还是缓存击穿、或是第三方 API 延迟。Gemini CLI 能把模糊的“症状”,翻译成精准的“诊断路径”。
3.2.2 核心原理:上下文感知的多步推理
它不单次执行 grep "ERROR" ,而是构建一个分析流水线:
- 模式识别 :扫描日志,自动聚类高频错误码(如
500、502、Timeout); - 关联分析 :对每个错误,回溯前 10 行(
context window),寻找Caused by:、at com.xxx等线索; - 根因推测 :结合常见框架知识(Spring Boot 的
HikariCP连接池耗尽、Node.js 的ECONNRESET),给出概率排序的根因; - 行动建议 :直接生成
curl命令检查 DB 连接、kubectl logs查看 Pod、或redis-cli ping测试缓存。
3.2.3 实操步骤:分析 Spring Boot 应用日志
假设你有 app.log ,内容节选:
2025-05-12 14:22:31.887 ERROR 12345 --- [nio-8080-exec-7] c.e.c.a.c.PaymentController : Payment processing failed
org.springframework.dao.DataAccessResourceFailureException: Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused)
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82)
...
Caused by: java.net.ConnectException: Connection refused (Connection refused)
at java.base/sun.nio.ch.Net.connect0(Native Method)
-
启动 CLI 并加载日志 :
gemini # 输入 Read the file app.log and analyze the root cause of the error that occurred at 2025-05-12 14:22:31. -
它会自动执行 :
- 调用
ReadFile读取app.log; - 定位时间戳附近的 ERROR 块;
- 解析堆栈,识别
java.net.ConnectException; - 推断:数据库连接被拒绝,可能是 DB 服务宕机、网络策略变更、或连接池配置错误;
- 输出: ✦ Root Cause: Database connection refused. Likely causes:
- PostgreSQL service is down (check with
systemctl status postgresql) - Firewall blocking port 5432 (run
sudo ufw statuson Ubuntu) - Application's
application.ymlhas wrongspring.datasource.url✦ Immediate Actions:
sudo systemctl status postgresql→ Check if service is activenc -zv localhost 5432→ Test DB port connectivitygrep "spring.datasource.url" src/main/resources/application.yml→ Verify config
- PostgreSQL service is down (check with
- 调用
-
你可以继续追问 :
“如果 DB 服务正常,下一步该查什么?”→ 它会建议查HikariCP连接池指标;“生成一个 curl 命令,检查应用健康端点”→ 输出curl -v http://localhost:8080/actuator/health。
3.2.4 关键参数与技巧
- 时间精度 :Gemini CLI 默认将
2025-05-12 14:22:31解析为毫秒级时间戳,确保精确定位; - 堆栈解析 :它内置 Java/Python/Node.js 堆栈格式模板,能准确分离
Caused by和Suppressed异常; - 命令生成 :所有建议的
systemctl、nc、grep命令,都经过 Shell 语法校验,复制即用。
3.2.5 注意事项与避坑心得
提示:大日志文件请先用
tail -n 10000 app.log > recent.log截取
Gemini CLI 的上下文窗口有限(约 32K tokens),直接喂 1GB 日志会超限。永远先用tail/head做预过滤。
注意:敏感信息自动脱敏
如果日志里有password=xxx、token=yyy,它会在输出中自动替换为password=[REDACTED],这是内置安全策略,无法关闭。
实操心得:用
/model gemini-2.5-flash加速分析
对纯文本日志分析,gemini-2.5-flash比pro快 3 倍,且准确率不输——毕竟这不是创意写作,而是模式匹配。
3.3 用法三:Git 工作流增强——让 git commit 有灵魂, git log 会说话
3.3.1 为什么这是团队协作的隐形杠杆?
git commit -m "fix bug" 是工程师的通病。Gemini CLI 能把这种“无意义提交”,升级为“可追溯、可搜索、可审计”的工程资产。它不只是写提交信息,而是理解你的代码变更,自动生成:
- 符合 Conventional Commits 规范的标题(
feat(api): add rate limiting); - 结构化的正文,描述“改了什么”、“为什么改”、“影响范围”;
- 关联的 Jira Issue ID(如果 commit message 里有
#PROJ-123); - 甚至能根据
git diff,推断出这次修改是否需要更新README.md或CHANGELOG.md。
3.3.2 核心原理:Diff 驱动的语义理解
它不读你的代码文件,而是解析 git diff 的标准输出:
+行:新增代码 → 推断为feat或docs;-行:删除代码 → 推断为refactor或chore;@@ -10,5 +10,8 @@:定位变更位置 → 结合文件路径(src/api/vstest/)判断影响域;- 正则匹配
TODO:、FIXME:→ 标记为chore或fix。
3.3.3 实操步骤:自动生成专业 Commit Message
假设你刚改了 src/utils/date.js ,添加了一个 formatDuration 函数。
-
生成 Diff 并喂给 CLI :
git diff --cached > /tmp/diff.patch gemini # 输入 Generate a professional git commit message for the changes in /tmp/diff.patch. Follow Conventional Commits spec. Include a subject line (50 chars max), a blank line, and a body explaining what was changed and why. If the change affects tests or docs, mention it. -
它会输出 : ✦ feat(utils): add formatDuration helper for human-readable time spans
Introduces
formatDuration(ms)function in src/utils/date.js to convert milliseconds into readable strings like "2h 37m 42s". This replaces manual string concatenation in multiple components (e.g., src/components/Timer.jsx), improving consistency and reducing bugs.Also updates src/components/Timer.jsx to use the new helper, and adds unit tests in test/utils/date.test.js.
-
一键提交 :
git commit -F <(echo -e "feat(utils): add formatDuration helper for human-readable time spans\n\nIntroduces \`formatDuration(ms)\` function in src/utils/date.js to convert milliseconds into readable strings like \"2h 37m 42s\". This replaces manual string concatenation in multiple components (e.g., src/components/Timer.jsx), improving consistency and reducing bugs.\n\nAlso updates src/components/Timer.jsx to use the new helper, and adds unit tests in test/utils/date.test.js.")
3.3.4 参数逻辑与定制
- Conventional Commits 映射 :
Diff 特征 Type Scope 新增 test/文件testutils(从路径推断)修改 src/api/+fetch调用featapi删除 console.logchoredev - 长度控制 :主体严格限制在 72 字符/行,这是
git log --oneline的最佳实践。
3.3.5 注意事项与避坑心得
提示:用
git add -p分块暂存,再让 CLI 分析
如果你一次改了 API 和 UI,git diff会混在一起。用git add -p把相关变更分到不同暂存区,再分别生成 commit message,质量更高。
注意:禁用
--yolo,坚持手动授权ReadFilegit diff本身不敏感,但如果你的 diff 里不小心包含了.env文件路径,ReadFile可能误读。永远选择“仅允许一次”。
实操心得:把 CLI 集成到 Husky pre-commit hook
在.husky/pre-commit里加:#!/bin/sh git diff --cached > /tmp/husky-diff COMMIT_MSG=$(gemini -p "Generate concise commit message for: $(cat /tmp/husky-diff)" 2>/dev/null) echo "$COMMIT_MSG" > /tmp/commit-msg git commit --no-verify -F /tmp/commit-msg这样每次
git commit,都会自动生成消息(需提前授权)。
3.4 用法四:多源信息聚合——把“Google 搜索 + 复制粘贴”变成“一键生成报告”
3.4.1 为什么这是信息工作者的效率核弹?
程序员查文档、产品经理看竞品、运营分析活动数据——所有这些,本质都是“跨多个网页/文件提取信息,再人工整合”。Gemini CLI 的 GoogleSearch + WebFetch + WriteFile 工具链,能把这个过程压缩到 10 秒。
3.4.2 核心原理:搜索-抓取-结构化三步闭环
- 智能搜索 :
GoogleSearch不是简单关键词匹配,而是理解你的意图。输入“2025 年 Q1 主流云厂商 GPU 实例价格对比”,它会自动构造site:aws.amazon.com "p4d.24xlarge" price、site:cloud.google.com "a2-highgpu-8g" pricing等高级查询; - 精准抓取 :
WebFetch会渲染页面(模拟浏览器),提取<table>、<dl>等结构化内容,而非全文乱爬; - 智能对齐 :把 AWS 的
p4d.24xlarge、Azure 的ND96amsr_A100_v4、GCP 的a2-highgpu-8g,统一映射到“GPU 数量”、“显存”、“FP16 算力”维度,生成 Markdown 表格。
3.4.3 实操步骤:生成云厂商 GPU 价格对比报告
-
启动 CLI 并输入 :
“Search for the current on-demand pricing of A100 80GB GPU instances from AWS, Azure, and Google Cloud. Extract the instance name, GPU count, total GPU memory, hourly price (USD), and any relevant notes (e.g., 'Spot only'). Format the results as a Markdown table with headers: Provider, Instance Name, GPUs, GPU Memory (GB), Hourly Price ($), Notes. Save the table to gpu-price-comparison.md.”
-
授权流程 :
GoogleSearch→ 允许(获取搜索结果);WebFetch→ 允许(抓取 3 个官网页面);WriteFile→ 允许(写入.md文件)。
-
生成的
gpu-price-comparison.md示例 :Provider Instance Name GPUs GPU Memory (GB) Hourly Price ($) Notes AWS p4d.24xlarge 8 640 32.77 Only in us-east-1, us-west-2 Azure ND96amsr_A100_v4 8 640 31.20 Requires NCv4 series quota GCP a2-highgpu-8g 8 640 30.84 Available in us-central1
3.4.4 关键参数与技巧
- 价格时效性 :它会自动识别页面中的
Last updated: May 2025,并在报告底部标注Data fetched on 2025-05-12; - 货币单位处理 :如果页面显示
¥230,它会调用google_web_search查汇率,换算为$32.77(需授权); - Markdown 渲染 :表格自动对齐,
$符号转义,避免解析错误。
3.4.5 注意事项与避坑心得
提示:用引号强制精确匹配
“AWS A100 pricing”比AWS A100 pricing更准,避免搜到“A100 vs H100”对比文章。
注意:反爬虫网站会失败,及时切换
如果WebFetch返回403 Forbidden,它会建议“Try searching for 'AWS A100 pricing PDF' to find official datasheets”,这是它的 fallback 机制。
实操心得:用
@gpu-price-comparison.md立即读取结果
生成后输入@gpu-price-comparison.md,它会调用ReadFile把表格内容朗读出来,无需你cat。
3.5 用法五:本地知识库问答——让 README.md 、 CONTRIBUTING.md 活过来
3.5.1 为什么这是新人入职的加速器?
新同事 clone 仓库,第一件事是读 README.md 。但 README 往往只写“怎么跑”,不写“为什么这么跑”、“历史坑在哪”、“谁负责哪块”。Gemini CLI 能把整个代码库的文档( README 、 CONTRIBUTING 、 ARCHITECTURE.md 、甚至 git log --oneline )作为上下文,回答 “这个 auth 模块为什么用 JWT 而不用 Session?” 这种深层问题。
3.5.2 核心原理:多文档联合检索与推理
它不是简单 grep ,而是:
- 文档向量化 :将所有
.md文件切分成段落,用嵌入模型编码; - 语义检索 :对你的问题,计算与各段落的相似度,召回 Top-3 相关段落;
- 交叉验证 :如果
ARCHITECTURE.md说“JWT 用于无状态”,而git log里有feat(auth): migrate from session to JWT (PROJ-456),它会合并结论。
3.5.3 实操步骤:用代码库文档回答技术问题
假设你的项目有:
README.md:包含快速启动指南;ARCHITECTURE.md:描述模块划分;HISTORY.md:记录重大变更。
-
启动 CLI 并指定上下文 :
cd /path/to/your/repo gemini # 输入 I have these files in the current directory: README.md, ARCHITECTURE.md, HISTORY.md. Please answer: Why did we choose Redis for caching instead of Memcached? What are the trade-offs mentioned in the documentation? -
它会 :
- 调用
ReadFile读取三个文件; - 在
ARCHITECTURE.md找到“We chose Redis over Memcached because it supports complex data structures (hashes, sorted sets) needed for our leaderboard feature, and offers built-in pub/sub for real-time notifications.”; - 在
HISTORY.md找到“PROJ-201: Replace Memcached with Redis to support leaderboard sorting (2024-03-15)”; - 输出: ✦ Redis was chosen over Memcached primarily for two reasons:
- Complex Data Structures : Our leaderboard feature requires sorted sets (
ZADD,ZRANGE) to rank users by score, which Memcached doesn't support natively. - Pub/Sub Messaging : Real-time notification of score updates uses Redis pub/sub, eliminating the need for polling. ✦ Trade-offs:
- Redis uses more memory per key (due to richer data types).
- Slightly higher latency for simple
GET/SEToperations (but negligible for our use case).
- Complex Data Structures : Our leaderboard feature requires sorted sets (
- 调用
3.5.4 参数逻辑与定制
- 文件优先级 :
ARCHITECTURE.md>README.md>HISTORY.md,权重可配置(通过settings.json); - 版本意识 :如果问题含
“in v2.0”,它会自动过滤git log --grep="v2.0"相关的 commit。
3.5.5 注意事项与避坑心得
提示:用
FindFiles先确认文档存在
输入/tools查看FindFiles,再用glob "**/*.md"确认所有文档都被索引,避免漏掉DEPLOYMENT.md。
注意:敏感文档需手动排除
在~/.gemini/settings.json的excludeTools里加"read_file": ["/path/to/secrets.md"],防止误读。
实操心得:把常用问题存为
/prompt
创建~/.gemini/prompts/architecture-qa.toml,内容:name = "Architecture QA" description = "Answer questions about system design using ARCHITECTURE.md and HISTORY.md" prompt = "I have ARCHITECTURE.md and HISTORY.md. Answer the question based on them."然后输入
/prompt architecture-qa,即可复用。
4. 实操过程中的血泪教训:那些官方文档不会写的细节
以上 5 个用法,我都踩过坑、填过坑、总结出一套“防翻车清单”。这些不是理论,是我在凌晨三点 debug 时记下的真实笔记。
4.1 权限管理:不是“全开”或“全关”,而是“精准滴灌”
Gemini CLI 的权限模型,表面看是“允许/拒绝”,实则是“作用域+时效+工具”的三维矩阵。新手常犯的错,是第一次就点“始终允许”,结果后续所有操作都失控。
- 作用域陷阱 :
“始终允许”的权限,只对当前工作目录生效。如果你cd到另一个文件夹,它会重新弹窗。这是设计,不是 bug。 - 时效陷阱 :
“仅允许一次”的权限,只对本次 CLI 会话有效。关掉终端再开,又要授权。所以对ReadFile这种高频工具,我设为“始终允许”;对Shell这种高危工具,坚持“仅允许一次”。 - 工具陷阱 :
WriteFile允许写入./report.txt,不代表允许写入/etc/hosts。路径白名单是硬编码的,它不会越界。
我的解决方案:在
~/.gemini/settings.json里固化安全策略{ "security": { "auth": { "selectedType": "oauth-personal" }, "permissions": { "read_file": { "scope": "workspace", "default": "always" }, "write_file": { "scope": "workspace", "default": "prompt" }, "run_shell_command": { "scope": "workspace", "default": "prompt" } } } }这样,
ReadFile在当前项目永久免密
更多推荐


所有评论(0)