Skip to content

YidaHu/code-agent

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Codex Feishu Menu Bar App

一个原生 macOS 菜单栏应用,用飞书机器人作为入口,把收到的文本消息转发到本机 Codex CLI 执行,再将执行结果回传飞书。

当前版本是 MVP,重点解决三件事:

  • 用飞书长连接稳定接收消息事件
  • 把 Codex 执行范围限制在白名单项目目录内
  • 用本地菜单栏 UI 完成初始化、状态查看和日常配置

功能概览

  • 原生 SwiftUI + AppKit 菜单栏应用,无额外服务端依赖
  • 使用飞书长连接模式接收 im.message.receive_v1
  • App Secret 只写入 macOS Keychain,不落盘到配置文件
  • 支持默认项目和多个白名单项目目录
  • 所有 Codex 请求都固定在当前选中的项目目录执行
  • 任务串行执行,支持取消当前任务并清空排队任务
  • 内置常用管理指令,方便直接在飞书里操作
  • 提供首次启动向导、设置页、状态页、日志页

系统要求

  • macOS 13+
  • Swift 5.7+(或 Xcode 14+)
  • 本机已安装并登录 Codex CLI
  • 一个已开启机器人能力的飞书企业自建应用

快速开始

  1. 克隆仓库。
  2. 在本机确认 codex 可执行,并完成登录:
codex --version
codex login
  1. 编译并启动应用:
swift build
swift run CodexFeishuMenuBarApp
  1. 首次启动后,在向导里填写:
    • 飞书 App ID
    • 飞书 App Secret
    • 默认项目目录
    • 其他允许执行的白名单项目目录
  2. 在飞书中向机器人发送消息,应用会在当前项目目录调用 Codex。

飞书侧配置

在飞书开放平台创建企业自建应用后,至少完成以下配置:

  1. 开启机器人能力。
  2. 在“事件与回调”中启用长连接模式。
  3. 订阅消息事件 im.message.receive_v1
  4. 安装并启用应用,让目标用户或群可以与机器人交互。

消息处理方式

应用当前只处理文本消息。

支持的内置指令:

  • 帮助
  • 状态
  • 当前项目
  • 项目列表
  • 切到 <项目名>
  • 取消任务

未命中内置指令时,默认会在当前项目目录执行:

codex exec "<用户消息>"

安全边界

  • App Secret 仅存储在 macOS Keychain。
  • 项目目录必须先加入白名单,才能作为执行上下文。
  • 所有 Codex 执行都绑定到当前项目目录,不会直接在任意路径运行。
  • 配置和日志写入用户目录,不写进仓库。

本地数据位置:

  • 配置文件:~/Library/Application Support/CodexFeishuMenuBarApp/config.json
  • 日志文件:~/Library/Application Support/CodexFeishuMenuBarApp/logs.jsonl
  • 飞书 App Secret:macOS Keychain

项目结构

  • Package.swift: Swift Package 定义
  • Sources/Storage: 配置持久化、Keychain、日志、运行状态模型
  • Sources/Projects: 白名单项目目录校验与切换
  • Sources/Codex: 环境检测、进程执行、任务队列
  • Sources/Commands: 内置指令解析与帮助文本
  • Sources/Feishu: 鉴权、回消息、长连接 WebSocket、协议编解码
  • Sources/UI: 菜单栏、窗口、向导、设置、状态、日志

开发命令

swift build
swift run CodexFeishuMenuBarApp

如果你习惯 Xcode,也可以直接打开 Package.swift 进行调试。

当前限制

  • 目前只处理文本消息
  • 飞书回传当前使用文本消息,超长输出会被截断
  • 还没有做消息去重和会话级上下文记忆
  • 还没有做更细粒度的用户、群或租户授权
  • 项目编辑能力还比较基础,主要支持新增、切换和删除
  • 目前还没有自动化测试

后续优化

  • 增加飞书事件去重,避免网络抖动导致重复执行
  • 支持按用户、群、租户做更细粒度授权
  • 给队列增加任务 ID、排队详情和历史记录
  • 支持增量回传或卡片消息回传 Codex 输出
  • 增加项目编辑、排序、搜索和更友好的目录导入
  • 增加启动项、崩溃恢复和更完整的连接自愈
  • 补齐指令解析、项目白名单、Feishu 协议编解码和任务取消流程的测试覆盖

About

Chat-driven local AI coding agent runner. Control Codex (and future engines like Claude Code) from Feishu.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages