Slack Codex机器人
概述
此存储库提供了一个简单的中继,允许您从Slack提及触发Codex CLI。Slack Socket模式机器人(slack_bot/app-socket.py)倾听 @codex-bot 提及,使用最近的线程上下文构建提示,并启动Codex CLI在本地项目文件夹中工作。然后,Codex通过Slack MCP服务器将进度发布回同一Slack线程,并通过GitHub MCP服务器执行代码更改/PR。
为什么使用这个
- 在您自己的计算机上运行Codex,这样它就可以访问本地文件、Docker和GPU工作负载。
- 在Slack线程中,从任何地方(手机、平板电脑等)触发编码任务。
- 自动化整个循环:接收请求、编辑代码、运行测试和打开PR。
存储库布局
codex_dir/:Codex CLI的实际工作文件夹。这是Codex运行命令和编辑文件的地方。slack_bot/:接收Slack提及并启动Codex CLI的Python Socket Mode应用程序。
⚠️ 免责声明
此项目在中运行Codex CLI --full-auto 该模式赋予它很大的自主权,可以执行命令、修改文件以及与外部服务(Slack、GitHub)交互,而无需手动确认。虽然这可以实现强大的免提工作流程,但请注意以下几点:
- 使用风险自负。 本项目的作者不对可能出现的任何意外更改、数据丢失或其他问题负责。
- 仔细检查权限。 GitHub代币和Slack应用程序具有广泛的访问权限。考虑在可能的情况下限制范围或存储库访问。
- 从低风险任务开始。 我们建议首先使用非关键存储库进行测试,以熟悉机器人的行为方式。
通过使用此项目,您承认您了解这些风险,并对其在您的环境中的运行承担全部责任。自动化快乐! 🚀
用法
1) 先决条件
- 启用套接字模式的Slack应用程序。
- Slack机器人令牌(
SLACK_BOT_TOKEN)和应用程序令牌(SLACK_APP_TOKEN). - Slack团队/工作区ID(
SLACK_TEAM_ID)适用于Slack MCP。 - GitHub个人访问令牌,具有GitHub MCP服务器的repo权限。
- Codex CLI已安装并配置。
- Node.js(用于MCP服务器执行,通过
npx).
2) 创建Slack应用程序(套接字模式)
- 转到Slack API:您的应用程序(https://api.slack.com/apps)然后单击 创建新应用程序 → 从头开始.
- 命名它(例如
codex-bot)然后选择您的工作区。 - 在 插座模式,启用它并生成应用程序级令牌(以开头
xapp-).
- 令牌必须包括 connections:write 范围。 - 将此另存为 SLACK_APP_TOKEN.
- 在 OAuth和权限,添加Bot令牌范围:
- app_mentions:read - chat:write - groups:history
- 点击 安装到工作区 并复制bot令牌(以开头
xoxb-).
- 将此另存为 SLACK_BOT_TOKEN.
- 在 事件订阅,启用事件并订阅 机器人事件:
- app_mention - 保存更改(可能会要求您重新安装应用程序)。
- 获取Slack MCP的工作区(团队)ID:
- 跑 curl -X POST https://slack.com/api/auth.test -H "Authorization: Bearer xoxb-...". - 保存 "team_id" 值为 SLACK_TEAM_ID.
3) 创建GitHub个人访问令牌
- 转到GitHub 设置 → 开发人员设置.
- 选择 个人访问令牌 → 细粒度代币.
- 点击 生成新令牌.
- 配置 存储库访问:
- 选择 所有存储库 (如果你愿意,也可以选择特定的仓库)。
- 配置 权限 (存储库权限):
- 行政:读写 - 目录:读写 - 问题:读写 - 拉取请求:读写
- 点击 生成令牌 并复制令牌(以开头
github_pat_).
- 将此另存为 GITHUB_PERSONAL_ACCESS_TOKEN.
⚠️ 备注:这些权限相对宽泛。小心处理令牌,并在可能的情况下考虑限制存储库访问。
4) 配置Codex MCP服务器
编辑 ~/.codex/config.toml (如果缺少,则创建它):
sandbox_mode = "workspace-write"
[features]
streamable_shell = true
web_search_request = true
skills = true # for skills
# Slack MCP: progress reports
[mcp_servers.slack]
command = "npx"
args = ["-y", "@modelcontextprotocol/server-slack"]
env = { SLACK_BOT_TOKEN = "xoxb-...", SLACK_TEAM_ID = "T0..." }
# GitHub MCP: code operations
[mcp_servers.github]
command = "npx"
args = ["-y", "@modelcontextprotocol/server-github"]
env = { GITHUB_PERSONAL_ACCESS_TOKEN = "github_pat_..." }将占位符替换为您的真实令牌/IDs。
5) 配置Slack机器人环境
创建 slack_bot/.env:
# Slack tokens
SLACK_APP_TOKEN=xapp-...
SLACK_BOT_TOKEN=xoxb-...
# Folder where Codex will run (this repo's codex_dir)
CODEX_ACTION_FOLDER=/absolute/path/to/this/repo/codex_dir
# Optional: how many recent messages to include in the prompt
SLACK_HISTORY_LIMIT=506) 安装Python依赖项并运行bot
cd slack_bot
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install slack-bolt python-dotenv
python app-socket.py当你看到 Start App,机器人正在运行。
7) 使用Slack
在应用程序被邀请的频道中提及机器人:
@codex-bot Fix the login validation and run tests, then open a PR.机器人将:
- 收集最近的线程消息(如果有的话)。
- 使用包含Slack线程上下文的提示启动Codex CLI。
- Codex将进度和结果发布回同一线程。
关于当前Python实现的注释
当前 slack_bot/app-socket.py 与旧示例不同:
- 它在运行
codex exec --full-auto直接(无固定会话ID)。 - 它使用以下命令将最近的Slack历史记录注入到提示符中
SLACK_HISTORY_LIMIT.
如果你更新Python bot,请保持README与其行为同步。
