CodeBuddy‑CLI 默认授权(权限模式)命令行参数
区分两件事:账号登录认证和工具操作授权(权限模式 permission‑mode)
1. 会话级别指定默认授权模式(CLI 参数)
# 默认模式:default,每次文件/命令都询问确认codebuddy --permission-mode default# 自动允许文件编辑,bash仍然弹窗确认codebuddy --permission-mode acceptEdits# 完全跳过权限提示(高危,仅沙箱容器使用)codebuddy --permission-mode bypassPermissions# 只读规划模式,禁止写文件、禁止bashcodebuddy --permission-mode plan简写高危参数-y
# -y / --dangerously‑skip‑permissions,跳过大部分提示,高危操作依旧拦截codebuddy-y⚠️
-y≠ bypassPermissions;要真正全放行,需要环境变量:
exportCODEBUDDY_IS_SANDBOX=1codebuddy-y2. 持久修改全局默认权限模式(写入配置文件)
进入 codebuddy 交互会话内执行斜杠命令:
/config set permissions.defaultMode acceptEdits查看当前配置:
/config list配置文件位置:
- Linux/macOS:
~/.config/codebuddy/settings.json - Windows:
%APPDATA%/codebuddy/settings.json
settings.json 片段:
{"permissions":{"defaultMode":"acceptEdits"}}3. 账号登录认证(不是工具授权)
交互式登录:
codebuddy# 会话内输入 /login非交互 CI 使用 API‑Key 环境变量认证(国内版示例)
exportCODEBUDDY_API_KEY="sk‑xxx"exportCODEBUDDY_INTERNET_ENVIRONMENT=internal codebuddy-p"你的prompt"常用组合示例
# 非交互运行,自动允许编辑,bash仍询问codebuddy --permission-mode acceptEdits-p"重构src下所有ts文件"# 沙箱环境完全放行(容器自动化)exportCODEBUDDY_IS_SANDBOX=1codebuddy --permission-mode bypassPermissions-p"执行构建脚本"接续上一轮,补充完整实操命令、查看、重置、白名单、CI非交互完整用法
1. 查看当前生效权限配置
进入 codebuddy cli 交互终端
codebuddy交互内执行:
/config get permissions.defaultMode /config list直接读取配置文件(Linux)
cat~/.config/codebuddy/settings.json2. 持久设置默认授权(交互斜杠命令)
# 默认每次询问 /config set permissions.defaultMode default # 默认接受文件修改,shell命令依旧弹窗确认 /config set permissions.defaultMode acceptEdits # 完全绕过权限校验(仅沙箱/CI容器,本地机器不要随便用) /config set permissions.defaultMode bypassPermissions # 只读模式,禁止写文件、禁止执行shell /config set permissions.defaultMode plan重置恢复出厂:
/config unset permissions.defaultMode3. CLI 启动参数(非交互,不进交互式会话)
# 单次生效:自动接受编辑,shell仍确认codebuddy --permission-mode acceptEdits-p"prompt内容"# -y 简写,等价 --dangerously-skip-permissions,不会放行高危shellcodebuddy-y-p"prompt"# 真正全放行,必须环境变量 + 参数一起,本地慎用exportCODEBUDDY_IS_SANDBOX=1codebuddy --permission-mode bypassPermissions-p"执行脚本"4. 工具黑白名单配置(settings.json)
{"permissions":{"defaultMode":"acceptEdits","allowTools":["readFile","writeFile","listDir"],"denyTools":["shellExec","runCommand"]}}修改保存后重启 codebuddy cli 立即生效。
5. CI/脚本自动化完整示例(无人工确认)
exportCODEBUDDY_API_KEY="sk-xxxx"exportCODEBUDDY_IS_SANDBOX=1codebuddy\--permission-mode bypassPermissions\--no-interactive\-p"运行单元测试,输出测试报告"6. 环境变量完整对照表
| 环境变量 | 作用 |
|---|---|
CODEBUDDY_IS_SANDBOX=1 | 解锁 bypassPermissions 真正放行高危操作 |
CODEBUDDY_API_KEY | API‑key非交互登录 |
CODEBUDDY_PERMISSION_MODE | 环境变量设置默认权限模式,优先级低于cli参数 |
注意优先级:CLI启动参数 > 环境变量 > settings.json持久配置 > 内置默认(default)
✅-c/--continue就是你要的:继续上一轮最近会话
# 继续当前目录最近一次会话,进入交互REPLcodebuddy-c# 等价完整写法codebuddy--continue常用组合(和权限参数一起用)
# 继续会话 + 自动允许编辑(交互)codebuddy-c--permission-mode acceptEdits# 继续会话 + 非交互直接给prompt,执行完退出codebuddy-c-p"继续完成剩下的函数"# 继续会话 + -y 跳过部分权限弹窗codebuddy-c-y-p"补全单元测试"-cvs-r(区别)
# -c / --continue:固定取【当前目录最近那一个会话】,不用填IDcodebuddy-c# -r / --resume:指定session‑id恢复,不带id弹出会话列表选择codebuddy-rcodebuddy-r"uuid-session-id"⚠️
-c是目录绑定:必须在同一个工作目录执行,才能读到上次会话记录,换目录会找不到历史。
完整实操示例链
# 第一轮codebuddy --permission-mode acceptEdits# 退出后,接续上一轮codebuddy-c--permission-mode acceptEdits# 非交互脚本接续codebuddy-c-y-p"优化错误处理逻辑"交互会话内斜杠命令(REPL里面用,不是shell)
/resume # 会话选择面板 /resume list # 列出全部会话id下面两套脚本:
- 一键写入 CodeBuddy‑CLI settings.json(jq 实现,不破坏原有配置)
- 保存 session_id 到环境变量文件,任意目录都可
-r恢复会话,不受当前目录约束
依赖:需要
jq,绝大多数 Linux 发行版可apt install jq/yum install jq;macOSbrew install jq。
① 一键脚本:写入 settings.json,设置默认权限模式
保存为cb‑set‑perm.sh
#!/bin/bash set -e CB_SETTINGS="$HOME/.config/codebuddy/settings.json" mkdir -p "$(dirname "$CB_SETTINGS")" # 目标权限模式,可选:default / acceptEdits / plan / bypassPermissions PERM_MODE="acceptEdits" # 如果文件不存在,初始化为空对象 [ ! -f "$CB_SETTINGS" ] && echo "{}" > "$CB_SETTINGS" # 使用 jq 更新 permissions.defaultMode,保留原有全部配置 jq --arg mode "$PERM_MODE" '.permissions.defaultMode = $mode' "$CB_SETTINGS" > "${CB_SETTINGS}.tmp" mv "${CB_SETTINGS}.tmp" "$CB_SETTINGS" echo "✅ 已设置 permissions.defaultMode = $PERM_MODE" cat "$CB_SETTINGS"使用:
chmod +x cb-set-perm.sh ./cb-set-perm.sh② 保存 session_id,任意目录恢复会话(不受工作目录限制)
思路:退出 CodeBuddy 前拿到 session‑id,写入~/.cb_last_session.env,后续 source 之后直接codebuddy -r "$CB_LAST_SESSION"。
脚本:cb-save-session.sh
#!/bin/bash CB_ENV="$HOME/.cb_last_session.env" # 列出所有会话,取最新一条的 id SESSION_ID=$(codebuddy --list-sessions 2>/dev/null | jq -r '.[0].id') if [[ -z "$SESSION_ID" || "$SESSION_ID" == "null" ]];then echo "❌ 没有找到历史会话" exit 1 fi cat > "$CB_ENV" <<EOF # CodeBuddy last session id export CB_LAST_SESSION="$SESSION_ID" EOF echo "✅ 已保存会话ID: $SESSION_ID 到 $CB_ENV" echo "使用方式:source $CB_ENV && codebuddy -r \"\$CB_LAST_SESSION\""使用流程
# 1. 正常跑一次 codebuddy,做完工作退出 codebuddy # 2. 执行脚本保存最新会话id chmod +x cb-save-session.sh ./cb-save-session.sh # 3. 切到任意别的目录,加载环境变量,恢复会话 cd /some/other/path source ~/.cb_last_session.env codebuddy -r "$CB_LAST_SESSION"常用组合示例(恢复会话 + 权限参数)
source ~/.cb_last_session.env codebuddy -r "$CB_LAST_SESSION" --permission-mode acceptEdits如果你想一条命令直接拉起,不用手动 source
写别名放进~/.bashrc/~/.zshrc:
alias cb-resume='source ~/.cb_last_session.env && codebuddy -r "$CB_LAST_SESSION" --permission-mode acceptEdits'生效后,任意目录直接:
cb-resume补充:查看会话列表原生 CLI 参数
# 输出全部会话 json,包含 id、创建时间、工作目录 codebuddy --list-sessions对比回顾:
codebuddy -c:当前目录最近会话,换目录失效codebuddy -r <session‑id>:按ID恢复,不受目录约束,就是上面脚本在用的方式。