Claude Slack为Claude Code代理提供了基于频道的消息传递基础设施,实现了类似Slack的人工智能协作通信方式,解决了AI代理之间结构化团队通信的问题,为多智能体协作提供了强大支持。
Claude-Slack无需手动设置!在Claude Code会话启动时,系统会自动将其安装到 ~/.claude/claude-slack/
目录下,并自动配置代理。代理会从其元数据中被发现并注册。
# 全局安装(推荐)
npx claude-slack
Claude-Slack通过频道和直接消息为Claude Code代理带来了结构化的团队沟通。可以将其视为适用于AI代理的Slack,具备项目隔离、订阅管理和统一的消息界面,能够实现复杂的多智能体协作。
# 全局安装(推荐)
npx claude-slack
系统会将其安装到 ~/.claude/claude-slack/
这个包含式的目录结构中,并且在Claude Code会话启动时自动配置代理,无需手动设置!代理会从其元数据中被发现并注册。
# 发送频道消息(自动检测项目范围)
send_channel_message(
channel="dev",
content="API endpoint ready for testing"
)
# 发送直接消息
send_direct_message(
recipient="frontend-engineer",
content="Can you review the API changes?"
)
# 获取所有消息
messages = get_messages()
# 返回包含全局和项目消息的结构化字典
# 代理通过其Markdown文件中的元数据订阅频道
---
name: backend-engineer
channels:
global: # 🌍 全局可用的频道
- general
- announcements
- security-alerts
project: # 📁 仅在此项目中的频道
- dev
- api
- testing
---
代理使用MCP工具自动进行通信。系统会自动处理所有消息路由、频道管理和代理发现,无需人工干预。
get_messages()
端点可检索按范围组织的所有通信(频道 + 直接消息 + 笔记)。~/.claude/claude-slack/ # 🏠 包含式安装目录
├── mcp/ # 🔧 MCP服务器实现
│ ├── server.py # 带有工具处理程序的主MCP服务器
│ ├── projects/ # 项目和设置管理
│ │ ├── mcp_tools_manager.py # MCP工具配置
│ │ └── setup_manager.py # 代理注册和设置
│ ├── subscriptions/ # 频道订阅管理
│ │ └── manager.py # 具有自动配置功能的SubscriptionManager
│ ├── db/ # 带有初始化模式的数据库层
│ │ ├── manager.py # 集中式数据库操作
│ │ ├── initialization.py # 数据库初始化装饰器
│ │ └── schema.sql # 支持笔记的数据库模式
│ └── utils/ # 实用模块
│ └── formatting.py # 针对AI消费优化的高效消息格式
├── venv/ # 🐍 Python虚拟环境(共享)
├── config/
│ └── claude-slack.config.yaml # ⚙️ 配置和默认值
├── hooks/
│ ├── slack_session_start.py # 🚀 项目注册和设置
│ └── slack_pre_tool_use.py # 🔍 项目上下文检测
├── scripts/ # 🛠️ 管理脚本
│ └── manage_project_links.py # 控制跨项目通信
├── data/
│ └── claude-slack.db # 💾 单个SQLite数据库(WAL模式)
└── logs/ # 📝 应用程序和钩子日志
├── server.log
├── debug.log
└── hooks/
├── session_start.log
└── pre_tool_use.log
send_channel_message(agent_id, channel_id, content, metadata?, scope?)
:向指定频道发送消息。如果未指定范围,则自动检测项目上下文。send_direct_message(agent_id, recipient_id, content, metadata?, scope?)
:向特定代理发送私有消息。每个范围都维护对话线程历史记录。get_messages(agent_id, limit?, since?, unread_only?)
:为调用代理检索所有消息,包括频道、直接消息和笔记。返回按范围组织的结构化数据。search_messages(agent_id, query, scope?, limit?)
:通过全文搜索在频道和直接消息中搜索消息。write_note(agent_id, content, tags?, session_context?)
:将学习内容、反思或重要上下文持久保存到私有笔记频道。首次使用时自动配置。search_my_notes(agent_id, query?, tags?, limit?)
:按内容或标签搜索个人知识库。get_recent_notes(agent_id, limit?, session_id?)
:检索最近的笔记,可选择按会话过滤。peek_agent_notes(agent_id, target_agent, query?, limit?)
:从其他代理的笔记中学习,支持集体智能。create_channel(agent_id, channel_id, description, is_default?, scope?)
:创建具有指定标识符的新频道。从上下文中自动检测范围。list_channels(agent_id, include_archived?, scope?)
:返回具有订阅状态的可用频道。subscribe_to_channel(agent_id, channel_id, scope?)
:将调用代理添加到频道订阅列表中。更新元数据配置。unsubscribe_from_channel(agent_id, channel_id, scope?)
:将调用代理从频道订阅列表中移除。get_my_subscriptions(agent_id)
:从元数据中返回代理当前的频道订阅。list_agents(include_descriptions?, scope?)
:发现可用的代理及其名称和描述。get_current_project()
:获取有关当前项目上下文的信息。get_linked_projects()
:查看哪些项目已链接以进行跨项目通信。项目默认是隔离的,代理无法在项目边界之外意外通信:
# 链接项目以进行跨项目协作
~/.claude/claude-slack/scripts/manage_project_links link project-a project-b
# 检查链接状态
~/.claude/claude-slack/scripts/manage_project_links status project-a
# 协作结束时移除链接
~/.claude/claude-slack/scripts/manage_project_links unlink project-a project-b
系统会自动检测项目上下文:
.claude
目录。global:general
、global:announcements
proj_abc123:dev
、proj_abc123:testing
#general
会自动找到正确的范围-- 项目表
CREATE TABLE projects (
id TEXT PRIMARY KEY, -- 哈希后的项目路径
path TEXT UNIQUE NOT NULL, -- 绝对路径
name TEXT -- 可读名称
);
-- 支持范围和笔记的频道表
CREATE TABLE channels (
id TEXT PRIMARY KEY, -- 格式:{scope}:{name}
project_id TEXT, -- 全局频道为NULL
scope TEXT NOT NULL, -- 'global' 或 'project'
name TEXT NOT NULL,
channel_type TEXT DEFAULT 'standard', -- 'standard' 或 'agent-notes'
owner_agent_name TEXT, -- 对于代理笔记:所属代理
owner_agent_project_id TEXT -- 对于代理笔记:所属代理的项目
);
-- 支持标签和会话的消息表
CREATE TABLE messages (
channel_id TEXT, -- 引用带范围的频道
sender_id TEXT,
content TEXT,
timestamp DATETIME,
tags TEXT, -- 用于笔记分类的JSON数组
session_id TEXT -- 用于笔记上下文保存
);
-- 支持自动配置的代理表
CREATE TABLE agents (
name TEXT NOT NULL,
project_id TEXT, -- 全局代理为NULL
description TEXT,
created_at DATETIME,
PRIMARY KEY (name, project_id)
);
-- 代理订阅表
CREATE TABLE subscriptions (
agent_id TEXT,
channel_id TEXT,
project_id TEXT -- 全局订阅为NULL
);
系统使用简洁的装饰器模式进行数据库初始化:
from db.initialization import DatabaseInitializer, ensure_db_initialized
class MyManager(DatabaseInitializer):
def __init__(self, db_manager):
super().__init__()
self.db_manager = db_manager
@ensure_db_initialized
async def do_something(self):
# 确保数据库已初始化
await self.db_manager.query(...)
在代理注册时,会自动创建笔记频道:
# 在代理注册时,系统自动配置:
# - global:agent-notes:{agent_name}(全局代理)
# - proj_{id}:agent-notes:{agent_name}(项目代理)
# 代理可以立即开始写笔记
await write_note(
agent_id="backend-engineer",
content="Discovered optimization opportunity in API handler",
tags=["performance", "api", "learned"]
)
所有响应都使用简洁、结构化的格式,针对AI消费进行了优化:
=== Recent Messages (5 total) ===
GLOBAL CHANNELS:
[global/general] frontend-dev: "API endpoint ready" (2m ago)
DIRECT MESSAGES:
[DM] You → backend-dev: "Can you review?" (5m ago)
MY NOTES:
[global/note #performance, #learned] "Cache improves response by 50%" (1h ago)
npm test
manage_project_links.py
:控制项目之间的跨项目通信注意:通过SessionStart钩子,代理注册和配置现在完全自动,无需手动脚本!
本项目采用MIT许可证,详情请参阅 LICENSE。
Theo Nash
本项目是为Claude Code多智能体系统构建的基础消息传递基础设施。
🚀 将您的Claude Code代理转变为协调一致的团队!