🚀 YOLO 无尽模式详解

飞书机器人是否需要用户确认工具调用?

问题:子进程是 YOLO 无尽模式吗?

✅ 是的!

飞书机器人启动的每个 Claude 子进程
完全跳过权限确认
可以直接读写文件、执行命令、安装依赖

📝 代码证据

// 文件:server/feishu-ws.js 第 374-379 行 const claudeOptions = { sessionId: session.claude_session_id, cwd: session.project_path, skipPermissions: true, // ← 关键配置:跳过权限检查 projectPath: session.project_path }; // 文件:server/claude-cli.js 第 62-64 行 if (skipPermissions || settings.skipPermissions) { args.push('--dangerously-skip-permissions'); console.log('⚠️ Using --dangerously-skip-permissions flag'); } // 实际执行的命令示例: claude -p --resume=session-abc123 \ --output-format stream-json \ --verbose \ --dangerously-skip-permissions \ ← YOLO 模式开启 "帮我创建一个 React 项目"

🔄 模式对比

🛡️ 普通模式

🔐
  1. Claude:我需要创建文件 app.js
  2. 系统:弹出确认对话框
  3. 用户:点击"允许"
  4. Claude:好的,开始创建文件

  5. 每个工具使用都需要确认
    适合桌面 CLI 交互

⚡ YOLO 模式(飞书机器人)

🚀
  1. Claude:我需要创建文件 app.js
  2. 系统:直接创建,不弹窗
  3. Claude:文件已创建,内容如下...

  4. 完全自动化,无需等待
    适合聊天机器人场景

🏠 生活类比:管家 vs 机器人

普通模式:每次管家要动你的东西,都先敲门问"可以吗?"
YOLO 模式:给了机器人全权授权,它直接按计划执行所有任务

飞书机器人 = 拥有完全授权的家政机器人

💡 为什么飞书机器人要用 YOLO 模式?

  • 用户体验流畅:聊天机器人不能频繁弹窗让用户确认,太打断对话
  • 自动化执行:机器人的核心价值就是"自动完成任务",不是"问完再做"
  • 无法交互确认:飞书消息是异步的,没有实时确认弹窗机制
  • 内部环境可信:机器人在受控的服务器环境,不会误删系统文件
  • 工作目录隔离:每个会话有独立目录(如 /home/event),不会影响其他用户

🛡️ 安全防护措施

📁

目录隔离

每个群聊/用户有独立工作目录,互不影响。禁用 cd 命令防止逃逸。

🔒

工作目录固定

project_path 在会话创建时确定,运行时只读,防止状态不一致。

🚫

命令过滤

禁止危险命令(如 rm -rf /),限制在项目目录范围内操作。

📊

操作日志

所有文件操作记录到 feishu_message_log 表,可追溯审计。

⏱️

进程超时

子进程有执行时间限制,防止无限循环占用资源。

🧹

自动清理

进程退出后自动清理临时文件,24小时清理过期会话。

⚠️ 重要提醒:YOLO 模式的责任

由于机器人拥有完全权限,需要特别注意:

  • 不要在机器人工作目录下存放重要文件(可能被覆盖)
  • 机器人可以执行任意 Shell 命令(需信任 Claude 的安全性)
  • 机器人可以安装依赖包(可能消耗网络和磁盘资源)
  • 代码执行失败可能产生大量临时文件(自动清理机制会处理)
  • 敏感信息(API 密钥等)可能被读取(不要放在工作目录)

📌 核心原则:机器人工作目录应该是专用的沙盒环境,不混放其他重要数据

🌐 不同场景下的权限模式

🤖

飞书机器人

YOLO 模式 ✅
--dangerously-skip-permissions

AI 初老师机器人

👨‍🏫

YOLO 模式 ✅
生成应用需要完全自动化

💻

Web UI(浏览器)

普通模式 🔐
用户可以点击确认

🖥️

终端 CLI

普通模式 🔐
默认需要输入 y 确认

🎯 一句话总结

飞书机器人 = 完全自动化的 YOLO 模式
每个子进程都带 --dangerously-skip-permissions 参数
无需任何用户确认,直接执行所有工具调用