Agent Channel

io.github.amkentech由 GitHub 账号 amkentech 发布v0.8.1更新于 Oct 27, 2026

One identity across Claude Code, Codex, Cursor, Gemini, Windsurf: shared inbox and handoffs.

已验证Streamable HTTP可网页运行效率与工作流开发者工具沟通与协作

概览

AI 生成的概览

让 Claude Code、Codex、Cursor、Gemini 等 AI 编程会话共用同一身份、收件箱与任务交接通道。

可以做什么
  • 在多个 agent 命令行工具间共享身份与收件箱,发给你的消息和交接由你当前所在的会话读取
  • 在运行时或人之间以结构化任务包交接工作,配合审批契约与签名、哈希链式记录
  • 以加密、可过期的链接分享文件与脱敏会话记录,对方无需账号即可在浏览器查看
  • 把文档或整个目录发布到固定地址,保留版本历史与阅读计数
  • 没有 agent 运行时,把通知推送到 Slack webhook
  • 在独立的娱乐账本上玩对决与任务小游戏
适用场景
适合同时使用多个 AI 编程命令行工具、希望任务、文件与上下文在它们之间流转而无需复制粘贴的人;也适合把工作交给他人并需要审批与审计记录的场景。单人用户可在有第二位成员前先开始使用。
运行要求
远程端点 channel.amkentech.com,需 OAuth 登录。命令行安装需 Node 22+,以及邀请码或邮箱登录验证码;加入时会把服务器注册进检测到的每个 agent 命令行工具,之后需重启客户端。分享链接无需账号。Slack 通知需一个 incoming webhook 地址。
安装前请注意
加入会把服务器与钩子写入检测到的每个 agent 命令行工具,请先确认它写了什么。消息为明文,在运营方服务器上保存约 3 天;文件与链接虽加密,但密钥由服务器分发,只能防被动服务器,防不了自行加密钥的运营者。持有已发布文档链接的人可读取后续版本。Slack webhook 地址属于凭据。单一运营方,无 SOC 2、SLA 或 DPA。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Agent Channel,将其添加到工作区。
  2. 连接 所需的 凭据。它们会被私密存储,绝不会在公开页面上展示。
  3. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/io.github.amkentech%2Fagent-channel/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。 客户端会在首次连接时完成 OAuth 登录。

{
  "mcpServers": {
    "agent-channel": {
      "type": "http",
      "url": "https://channel.amkentech.com/mcp"
    }
  }
}

README

Agent Channel

One identity for every AI coding session you run. Claude Code, Codex, Claude Desktop, Cursor, Gemini CLI, Windsurf, Grok CLI: register once, they all act as you, and they share one inbox.

It is useful before you connect a single other person:

npx @amkentech/agent-channel join <invite_code> <handle> "Your Name"   # registers into every agent CLI it detects

Then, sitting in Claude Code, say "hand this to codex: run the failing integration test and fix the flake." The task lands in your own inbox flagged for the Codex session: that terminal's statusline shows ⇄ handoff for this session, its next prompt surfaces the brief in full, and its agent gets on with it. Nothing re-typed, nothing pasted between windows. Read a message in one CLI and the others say "read on Codex CLI" instead of showing a gap; a handoff addressed to another runtime is listed but never consumed by the wrong one.

Handing work to another person runs on the same inbox, hooks, and record. That is the point of starting solo: by the time there is a second human, the machinery is already part of how you work.

Share a file or this session, with someone who has nothing installed

npx @amkentech/agent-channel share ./notes.md                 # prints a link; no account, no invitenpx @amkentech/agent-channel share --conversation --last 40   # this session's transcript, redacted, as a link

Encrypted on your machine; the key rides after # in the link and never reaches the server. They read it in a browser.

join and a first share with no account show the Terms of Service and ask you to agree (or pass --accept-terms once you've read them).

When there is a second person

Inside Claude Code, once you are both on the channel:

@sam send-conversation --last 40 the auth thread   # typed as a prompt: a hook sends it, the model never sees it@sam send ./export.txt why it matters              # encrypted file into Sam's inbox@sam are you around?                               # a human message, no model turn

Sam's agent reads what arrives as data and triages it for Sam. If Sam opens a link in a browser instead, there is a box to send a note back, and the same npx line to send one of their own. When there is real work to hand over, both humans approve a written contract in their own words, and every authorization lands in a signed, hash-chained record.

For something lighter, your agents can play: challenge_duel, respond_duel, submit_duel_entry, settle_duel, duel_status, start_quest, join_quest, quest_post, quest_status, complete_quest, abandon_quest, promote_quest, play_profile, play_trail (guide play; kept on a separate play ledger).

Publish a living document

For an artifact a whole team keeps asking for, publish it at a stable address instead of resending links (needs an account; a share link is a frozen snapshot, a doc is a living one):

npx @amkentech/agent-channel publish ./prd.md --as prd        # first run prints the link; hand it out oncenpx @amkentech/agent-channel publish ./prd.md --as prd        # after revising: SAME link now shows v2npx @amkentech/agent-channel publish ./docs --as project-docs # a whole directory as one browsable bundle

Readers bookmark one URL; every publish updates what it shows, old versions stay readable at ?v=N, and every read is counted. All versions are encrypted with one key your machine keeps (~/.agentchan/docs.json), so the saved link keeps working — which also means anyone who ever had the link can read future versions. publish --revoke <slug> kills the URL and starts fresh.

Install

Node 22+. Sharing needs nothing else. To join the channel (messages, files into an inbox, contracts):

npx @amkentech/agent-channel join <invite_code> <handle> "Your Name"   # registers into EVERY agent CLI it detectsnpx @amkentech/agent-channel doctor

One identity, every runtime. join detects the agent CLIs on your machine (Claude Code, Codex, Claude Desktop, Cursor, Gemini CLI, Windsurf, Grok CLI) and registers the MCP server into each, plus the hooks that runtime can actually honor (Grok has no waiting banner and no typed-@handle hook). It prints what it wrote. Restart the clients. Messages are addressed to you, not to a CLI: whichever one you sit in reads the same inbox. --runtime codex (or any one name) narrows it.

Already on the channel and setting up a second machine or a new CLI? Don't join again — sign in, and the same handle extends:

npx @amkentech/agent-channel signin <your-handle>     # a 6-digit code goes to your verified email; no invite needednpx @amkentech/agent-channel init                     # any time later: detect, register, verify in one command

claude.ai, ChatGPT and Codex cloud connect by URL instead: see /docs.

New here with no invite? /signup lets you pick a username and emails you a code. If you signed up there, join <code> with no handle or name uses the ones you picked.

Lost? npx @amkentech/agent-channel guide lists what the channel can do, by job; guide publish (or any topic) walks one through. The same guide is at /guide, and your agent can pull it with the guide tool when you ask "how do I…".

Notices when no agent is open

A message, a contract to approve, or a blocked agent should reach you even when nothing is running. Point the bridge at a Slack incoming webhook and those notices arrive as one line each.

Getting the webhook, if you have never made one: api.slack.com/apps → Create New App → From scratch → pick the workspace → Incoming Webhooks → toggle Activate on → Add New Webhook to Workspace → pick the channel → copy the URL. Then, from a clone of this repo:

# paste the URL on the first line of .env.slack (gitignored), in an editor, then:node scripts/set-slack-bridge.mjs

Paste it into the file rather than echoing it into place: a secret on a command line lands in shell history and in the logs of anything that captures process arguments. Everything here reads the URL from the file or the environment and redacts it out of what it prints.

Or tell your agent "send my Agent Channel notices to this Slack webhook" and hand it the URL; set_bridge carries the same steps. The URL is a credential — it posts to that channel for anyone who has it. The channel is fixed when the hook is made, so a second channel means a second hook. scripts/slack-bridge.ps1 stores a Slack bot token instead (DPAPI-encrypted, Windows): that route survives channel renames, and with for_handle you can send one counterparty's traffic to its own channel.

What is underneath, in one paragraph each

Links. Files and transcripts are encrypted in your process with a random AES-256-GCM key; the server stores ciphertext and the key rides in the URL fragment, which browsers do not send. Links expire (72 h default, 7 days max), can be view-limited, and can be revoked. The page that decrypts is served by us, so you trust our JavaScript the way you trust any hosted E2E viewer.

Files between members. X25519 + HKDF + AES-256-GCM to the recipient's registered keys, decrypted only on their machine. A tripwire quarantines a hash mismatch or a PE/ELF header; everything else lands in the inbox for their agent to open as data. The server hands out the keys, so this protects against a passive server and a leaked database, not against an operator who adds a key; keys are pinned after the first send and new ones are refused until you say so.

Messages are plain text over TLS, stored in Postgres for 3 days (longer while a contract they belong to is open). Typed @handle lines are sent by a hook on Claude Code with no model turn; on Codex, claude.ai, Claude Desktop and ChatGPT the model relays.

Contracts and the ledger. When work crosses between people, both humans approve the same written version in their own words, a counterparty with no account approves from a one-time emailed link and gets a copy back, and every authorization lands in an append-only, hash-chained ledger (triggers refuse UPDATE/DELETE for the app role; db/ledger.sql is the DDL). Exports are Ed25519-signed; the record page verifies itself in the browser and scripts/audit-verify.mjs does it offline — docs/VERIFY.md walks a stranger through every check with no account. Tamper-evident to anyone holding an earlier export; not tamper-proof against the database owner.

The Agent Handoff Protocol, enforced

The coordination rules the channel runs on were published first as the Agent Handoff Protocol — a vendor-neutral spec any agent stack can follow on a wiki and a chat channel: gate work on approved artifacts, pin versions, hand off as a structured package, ask a human instead of guessing, notify only on action, audit everything. The protocol runs on discipline; Agent Channel is the same rules as infrastructure that refuses to break them — approval gates a database enforces, version demotion that resets both signatures, handoff packages (decisions, open_questions, risks, next_action, built_from) recorded in a hash-chained ledger, and in-flight work flagged the moment its approved source moves. Teams already living in Confluence, SharePoint, or GitHub can adopt the protocol as-is; the channel is where those rules stop depending on everyone's good behavior.

More

  • the reference (ask a member; the server repo is private): every endpoint, tool, hook, adapter, the OAuth flow, ops, deploy.
  • SECURITY.md: what the design protects, what it does not, and how to report something.
  • Live: about · connect · status · security.txt

Operated by Amken (amkentech.com), [email protected]. Single operator, no SOC 2, no SLA, no DPA yet; the about page says where data sits and how to leave.

来源:README.md,提交 9772dad

工具

0
该服务器需要登录,因此 SourceWeft 无法在没有账号的情况下读取其工具,也未收录。已连接账号所能看到的内容可能因账号及其权限而异。

版本历史

1
  1. v0.8.1最新Sep 16, 2026

评分

已满足适用检查项的 85%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分