CodeBuddy‑CLI 默认授权(权限模式)命令行参数
区分两件事:账号登录认证 和 工具操作授权(权限模式 permission‑mode)
1. 会话级别指定默认授权模式(CLI 参数)
bash
# 默认模式:default,每次文件/命令都询问确认
codebuddy --permission-mode default
# 自动允许文件编辑,bash仍然弹窗确认
codebuddy --permission-mode acceptEdits
# 完全跳过权限提示(高危,仅沙箱容器使用)
codebuddy --permission-mode bypassPermissions
# 只读规划模式,禁止写文件、禁止bash
codebuddy --permission-mode plan
简写高危参数 -y
bash
# -y / --dangerously‑skip‑permissions,跳过大部分提示,高危操作依旧拦截
codebuddy -y
⚠️
-y≠ bypassPermissions;要真正全放行,需要环境变量:
bash
export CODEBUDDY_IS_SANDBOX=1
codebuddy -y
2. 持久修改全局默认权限模式(写入配置文件)
进入 codebuddy 交互会话内执行斜杠命令:
/config set permissions.defaultMode acceptEdits
查看当前配置:
/config list
配置文件位置:
- Linux/macOS:
~/.config/codebuddy/settings.json - Windows:
%APPDATA%/codebuddy/settings.json
settings.json 片段:
json
{
"permissions": {
"defaultMode": "acceptEdits"
}
}
3. 账号登录认证(不是工具授权)
交互式登录:
bash
codebuddy
# 会话内输入 /login
非交互 CI 使用 API‑Key 环境变量认证(国内版示例)
bash
export CODEBUDDY_API_KEY="sk‑xxx"
export CODEBUDDY_INTERNET_ENVIRONMENT=internal
codebuddy -p "你的prompt"
常用组合示例
bash
# 非交互运行,自动允许编辑,bash仍询问
codebuddy --permission-mode acceptEdits -p "重构src下所有ts文件"
# 沙箱环境完全放行(容器自动化)
export CODEBUDDY_IS_SANDBOX=1
codebuddy --permission-mode bypassPermissions -p "执行构建脚本"
接续上一轮,补充完整实操命令、查看、重置、白名单、CI非交互完整用法
1. 查看当前生效权限配置
进入 codebuddy cli 交互终端
bash
codebuddy
交互内执行:
/config get permissions.defaultMode
/config list
直接读取配置文件(Linux)
bash
cat ~/.config/codebuddy/settings.json
2. 持久设置默认授权(交互斜杠命令)
# 默认每次询问
/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.defaultMode
3. CLI 启动参数(非交互,不进交互式会话)
bash
# 单次生效:自动接受编辑,shell仍确认
codebuddy --permission-mode acceptEdits -p "prompt内容"
# -y 简写,等价 --dangerously-skip-permissions,不会放行高危shell
codebuddy -y -p "prompt"
# 真正全放行,必须环境变量 + 参数一起,本地慎用
export CODEBUDDY_IS_SANDBOX=1
codebuddy --permission-mode bypassPermissions -p "执行脚本"
4. 工具黑白名单配置(settings.json)
json
{
"permissions": {
"defaultMode": "acceptEdits",
"allowTools": ["readFile", "writeFile", "listDir"],
"denyTools": ["shellExec", "runCommand"]
}
}
修改保存后重启 codebuddy cli 立即生效。
5. CI/脚本自动化完整示例(无人工确认)
bash
export CODEBUDDY_API_KEY="sk-xxxx"
export CODEBUDDY_IS_SANDBOX=1
codebuddy \
--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 就是你要的:继续上一轮最近会话
bash
# 继续当前目录最近一次会话,进入交互REPL
codebuddy -c
# 等价完整写法
codebuddy --continue
常用组合(和权限参数一起用)
bash
# 继续会话 + 自动允许编辑(交互)
codebuddy -c --permission-mode acceptEdits
# 继续会话 + 非交互直接给prompt,执行完退出
codebuddy -c -p "继续完成剩下的函数"
# 继续会话 + -y 跳过部分权限弹窗
codebuddy -c -y -p "补全单元测试"
-c vs -r(区别)
bash
# -c / --continue:固定取【当前目录最近那一个会话】,不用填ID
codebuddy -c
# -r / --resume:指定session‑id恢复,不带id弹出会话列表选择
codebuddy -r
codebuddy -r "uuid-session-id"
⚠️
-c是目录绑定 :必须在同一个工作目录执行,才能读到上次会话记录,换目录会找不到历史。
完整实操示例链
bash
# 第一轮
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恢复,不受目录约束,就是上面脚本在用的方式。