AI代理消息传递服务器

一个用于多个AI代理之间通信和协调工作的消息传递服务器,类似AI团队的共享收件箱。

  • by ai-janitor
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 ai-janitor/dead-drop-teams

使用说明

空投队

一个消息传递服务器,允许多个AI代理相互通信并协调工作,就像你的AI团队的共享收件箱一样。

它的作用

你把任务交给一组人工智能代理。他们需要沟通:研究人员发现一个bug,告诉程序员修复它,构建者运行测试。 空投队 是实现这一功能的邮箱系统。

  • 代理人以姓名和角色注册(负责人、研究员、编码员、建设者)
  • 他们通过服务器互相发送消息
  • 团队负责人会自动复制所有内容(因此没有可见性就不会发生任何事情)
  • 消息存储在本地SQLite数据库中——没有云,没有外部服务

快速开始

告诉你的AI代理:

从~/projects/deadload团队中设置deadlock团队。安装它,在Claude Code设置中配置MCP服务器,然后重新启动

您的代理人将处理其余的事宜。如果需要具体细节,请参阅以下内容:

安装

~/projects/dead-drop-teams/scripts/install.sh

或者手动(需要Python 3.12+):

cd ~/projects/dead-drop-teams
mkdir -p ~/.dead-drop
uv venv && source .venv/bin/activate && uv pip install -e .

或者使用pip:

cd ~/projects/dead-drop-teams
mkdir -p ~/.dead-drop
python -m venv .venv && source .venv/bin/activate && pip install -e .

配置

添加到MCP配置中(Claude Code使用 ~/.claude/settings.json 在...之下 mcpServers):

{
  "dead-drop": {
    "command": "/path/to/dead-drop-teams/.venv/bin/dead-drop-teams",
    "args": []
  }
}

数据库在以下时间自动创建 ~/.dead-drop/messages.db。要更改位置,请设置 DEAD_DROP_DB_PATH 环境变量。

添加配置后重新启动AI工具。

运作原理

代理人和角色

每个AI会话都注册为具有以下角色的代理:

角色 他们做什么 示例
领导 协调团队,审查工作,做出决定 克劳德·奥普
研究人员 读取代码、发现错误、编写分析 Gemini(大上下文)
程序员 根据特定指令编写代码 Claude Sonnet
建造者 构建、运行测试、执行命令 Claude Haiku

CC规则

领导看到了一切。当任何代理向另一个代理发送消息时,潜在客户会自动获得一个标记的副本 [CC]这意味着:

  • 领导总是知道发生了什么
  • 没有领导看不到的侧面对话
  • 当CC告诉他们需要工作时,潜在客户可以产生短暂的代理(编码器、构建器)

消息流

Researcher finds bug → sends to Lead
Lead sends fix instructions → to Coder
Coder finishes → sends "ready to test" → to Lead (or to Builder, Lead gets CC)
Lead tells Builder → "build and test"
Builder reports → pass/fail → to Lead

收件箱纪律

  • 代理必须先阅读收件箱才能发送(由服务器强制执行)
  • 这可以防止消息堆积,并确保代理在创建更多消息之前处理传入的工作

工具

服务器通过MCP公开5个工具:

工具 它做什么
register 使用您的姓名、角色和描述登录
send 向另一个代理发送消息(或“全部”进行广播)
check_inbox 阅读未读邮件(将其标记为已读)
who 查看所有注册代理人以及他们上次入住的时间
get_history 获取最后N条消息(在上下文重置后有用)

钩子

dead drop团队附带了一个Claude Code钩子,在每次提示提交时都会通知您的代理未读消息。

设置

增添 ~/.claude/settings.json:

{
  "hooks": {
    "UserPromptSubmit": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "bash ~/.dead-drop/hooks/check-inbox.sh"
          }
        ]
      }
    ]
  }
}

钩子检查SQLite中是否有未读消息,并打印一个指向Claude上下文的提示(例如。 "Dead drop: 3 unread message(s)...").它会在30秒后爆炸,以避免垃圾邮件。

安装脚本(scripts/install.sh)将钩子复制到 ~/.dead-drop/hooks/check-inbox.sh。如果您是手动安装的,请自行复制:

mkdir -p ~/.dead-drop/hooks
cp hooks/check-inbox.sh ~/.dead-drop/hooks/

更改设置后重新启动Claude Code。

背景调查员

对于终端端通知(对人类可见,对Claude不可见),请在单独的终端中运行轮询脚本:

~/.dead-drop/poll_inbox.sh <agent-name> [interval_seconds]

默认间隔为120秒。例子:

~/.dead-drop/poll_inbox.sh claude-lead 60

Codex设置(无本地钩子)

Codex会话是基于拉取的,因此轮询器不会自行将消息注入活动聊天中。 使用此模式:

  1. 在侧终端中启动轮询器:
~/.dead-drop/poll_inbox.sh codex 60
  1. 保持Codex任务会话正常打开。
  2. 当轮询器显示未读消息时,运行 check_inbox 从Codex中提取并处理它们。

实用规则:将轮询器输出视为运行的触发器 check_inbox,而不是作为自动上下文注入。

适用于长时间运行的任务

正在进行构建或测试的代理应将进度写入共享日志文件:

.dead-drop/<agent-name>/<task>.log

完成后,发送一条摘要消息。不要向收件箱发送进度更新的垃圾邮件。

协议细节

看 docs/PROTOCOL.md 为了获得完整的规格。

许可证

麻省理工学院——见 许可证.