mcpField
C
creating-letta-code-channels

creating-letta-code-channels

github.com/letta-ai开发152107 次安装4 周前更新
代码仓库

关于 creating-letta-code-channels

面向在 Letta Code 中添加或调试频道的开发者技能,说明何时选择用户插件或内置频道,并指导实现、路由和测试消息回复。

主要功能

  1. 01选择用户插件或内置频道
  2. 02生成用户频道插件框架
  3. 03实现工具和中继回复模式
  4. 04测试发现、路由与消息送达
  5. 05处理配对及公共频道安全

适用场景

  1. 01制作无界面频道插件原型
  2. 02添加带自定义桌面 UI 的频道
  3. 03调试入站路由和配对
  4. 04验证出站回复行为

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/letta-ai/skills --skill creating-letta-code-channels

安装后在 Claude Code 中输入/creating-letta-code-channels确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
first-party-channels.md
testing.md
user-plugins.md
scripts/
scaffold-user-channel-plugin.ts

详细介绍

创建 Letta Code 渠道

添加或调试 Letta Code 渠道支持时,请参考此文档。

首选方案

  • 用户插件(~/.letta/channels/<id>/)适用于无头实验、社区插件和快速工作流测试。
  • 一方渠道(src/channels/<id>/)适用于需要专用桌面 UI、自定义账户快照、类似 Slack/Discord 的自动路由、丰富协议字段或迁移/兼容垫片的场景。

用户插件不能覆盖一方渠道的 ID:telegram、slack 和 discord 在 ~/.letta/channels/ 下会被忽略。请使用 telegram-test、whatsapp-community 或 custom-chat 之类的 ID。

核心工作流

  1. 在 ~/letta/letta-code 或 worktree 中操作。
  2. 对于支持动态插件的分支,请阅读 src/channels/README.md。
  3. 对于用户插件,请创建:
    • ~/.letta/channels/<id>/channel.json
    • ~/.letta/channels/<id>/plugin.mjs
    • ~/.letta/channels/<id>/accounts.json
  4. 为两种回复模式都实现 messageActions:显式工具回复和自动中继文本都使用通用的出站适配器路径。
  5. 测试时从 dmPolicy: "pairing" 开始;对于已知的无头部署,可使用 allowlist/open。
  6. 测试完整的四个环节:
    • 插件发现/导入
    • 入站 adapter.onMessage(msg) 路由/配对
    • 路由后的渠道通知到达 Agent
    • 出站行为符合账户记录的回复模式:工具模式下通过 MessageChannel 显式投递,或中继模式下自动投递最终文本
  7. 先运行有针对性的测试,然后运行 bun run typecheck、bun run lint、bun run build。

参考资料

只阅读所需内容:

  • references/user-plugins.md — 动态插件清单/账户/运行时/无头流程及注意事项。
  • references/first-party-channels.md — 一方渠道文件级联和安全检查。
  • references/testing.md — 冒烟测试清单和命令。

脚手架辅助工具

使用随附的脚手架创建最小化用户插件骨架。将 <path-to-this-skill> 替换为此技能目录的路径:

npx tsx <path-to-this-skill>/scripts/scaffold-user-channel-plugin.ts \
  my-channel "My Channel" \
  --runtime-package [email protected] \
  --runtime-module some-sdk

它会创建 channel.json、plugin.mjs 和 accounts.example.json。将 TODO 入站/出站实现替换为实际的 SDK 调用。

重要经验

  • 如果未设置 reply_mode 或其值无效,账户默认使用工具模式。请在现有已保存账户中添加 "reply_mode": "relay",同时保留其实际 ID、根字段和凭据。
  • 中继模式需要包含 PR 4043 的构建版本;v0.34.1 早于该版本。设备端网关负责实现投递;远程主机必须提供传输和记录的逐输入策略。这是主机差异,而非 Agent 状态限制。模式更改仅影响新输入,不影响活动中或排队中的输入。
  • 单一目标的中继输入会发送最终文本,不使用 MessageChannel;未完成的错误/取消文本、推理内容和子 Agent 输出均会排除。多目标输入需要显式回复,绝不广播。排队中的输入彼此独立。反应、文件和主动发送请使用工具模式。
  • 对于公开渠道,除非存在经过验证的操作员路由,否则请抑制工具审批/控制提示。在公开渠道发布审批提示会泄露工具输入,并招致伪造的 approve 回复。
  • 用户插件运行时解析不得将父级/开发环境的 node_modules 计入范围。运行时模块应仅从显式指定的运行时目录解析。
  • 无头配对优先使用 CLI:letta channels pair --channel <id> --code <code> --agent <agent-id> --conversation <conversation-id>。
  • 运行中的监听器会在下一次入站未命中时重新加载 pairing.yaml 和 routing.yaml;只有适配器/账户配置本身发生变化时才需重启。

评论

支持 Markdown