Slack Codex Bot

一个通过Slack触发Codex CLI执行的自动化工具,能够在Slack线程中接收请求并自动执行代码修改、测试和提交PR。

  • by M6saw0
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 M6saw0/slack_codex_bot

使用说明

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应用程序(套接字模式)

  1. 转到Slack API:您的应用程序(https://api.slack.com/apps)然后单击 创建新应用程序 → 从头开始.
  2. 命名它(例如 codex-bot)然后选择您的工作区。
  3. 在 插座模式,启用它并生成应用程序级令牌(以开头 xapp-).
    • 令牌必须包括 connections:write 范围。
    • 将此另存为 SLACK_APP_TOKEN.
  4. 在 OAuth和权限,添加Bot令牌范围:
    • app_mentions:read
    • chat:write
    • groups:history
  5. 点击 安装到工作区 并复制bot令牌(以开头 xoxb-).
    • 将此另存为 SLACK_BOT_TOKEN.
  6. 在 事件订阅,启用事件并订阅 机器人事件:
    • app_mention
    • 保存更改(可能会要求您重新安装应用程序)。
  7. 获取Slack MCP的工作区(团队)ID:
    • 跑 curl -X POST https://slack.com/api/auth.test -H "Authorization: Bearer xoxb-...".
    • 保存 "team_id" 值为 SLACK_TEAM_ID.

3) 创建GitHub个人访问令牌

  1. 转到GitHub 设置 → 开发人员设置.
  2. 选择 个人访问令牌 → 细粒度代币.
  3. 点击 生成新令牌.
  4. 配置 存储库访问:
    • 选择 所有存储库 (如果你愿意,也可以选择特定的仓库)。
  5. 配置 权限 (存储库权限):
    • 行政:读写
    • 目录:读写
    • 问题:读写
    • 拉取请求:读写
  6. 点击 生成令牌 并复制令牌(以开头 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=50

6) 安装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.

机器人将:

  1. 收集最近的线程消息(如果有的话)。
  2. 使用包含Slack线程上下文的提示启动Codex CLI。
  3. Codex将进度和结果发布回同一线程。

关于当前Python实现的注释

当前 slack_bot/app-socket.py 与旧示例不同:

  • 它在运行 codex exec --full-auto 直接(无固定会话ID)。
  • 它使用以下命令将最近的Slack历史记录注入到提示符中 SLACK_HISTORY_LIMIT.

如果你更新Python bot,请保持README与其行为同步。