Developer and self-hosted
Tlon
Tlon 是建構於 Urbit 上的去中心化通訊軟體。OpenClaw 會連線至你的 Urbit ship,並 回覆私訊和群組聊天訊息。群組回覆預設需要 @ 提及,並在此基礎上套用 授權規則和擁有者核准流程。
狀態:隨附外掛。支援私訊、群組提及、討論串、富文字、圖片上傳/下載,以及 擁有者核准系統。不支援表情回應和投票。
隨附外掛
目前的 OpenClaw 版本隨附 Tlon;封裝版本不需要另行安裝。
若是未包含此外掛的舊版建置或自訂安裝,請從 npm 安裝:
openclaw plugins install @openclaw/tlon使用不含版本的套件名稱以追蹤目前的發行標籤。只有需要可重現安裝時,才固定版本(@openclaw/tlon@x.y.z)。
從本機簽出的版本安裝:
openclaw plugins install ./path/to/local/tlon-plugin詳細資訊:外掛
設定
openclaw channels add --channel tlon --ship ~sampel-palnet --url https://your-ship-host --code lidlut-tabwed-pillex-ridrup或直接編輯設定:
{ channels: { tlon: { enabled: true, ship: "~sampel-palnet", url: "https://your-ship-host", code: "lidlut-tabwed-pillex-ridrup", ownerShip: "~your-main-ship", // 建議:你的 ship,永遠具有授權 }, },}直接編輯設定後,請重新啟動閘道。接著私訊機器人,或在群組 頻道中 @ 提及它。
傳入訊息的持久性
OpenClaw 會在分派給代理程式前,持久儲存已接受的 Tlon 私訊和群組聊天事件。待處理或可重試的回合可在閘道重新啟動後保留,且每個群組頻道或直接通訊對象的工作仍會依序處理。只要穩定的 Urbit 訊息 ID 所對應的佇列記錄或保留的完成記錄仍存在,也會抑制重新傳送的事件。
從佇列到代理程式的邊界採至少一次傳遞:交接期間發生當機可能會重播某個回合。因此,在可行情況下,會產生外部副作用的代理程式動作應維持等冪性。
私有/區域網路 ship
為防範 SSRF,OpenClaw 預設會封鎖私有/內部主機名稱和 IP 範圍。如果你的 ship 在私有網路上執行(localhost、區域網路 IP、內部主機名稱),請明確選擇啟用:
{ channels: { tlon: { url: "http://localhost:8080", network: { dangerouslyAllowPrivateNetwork: true, }, }, },}適用於 http://localhost:8080、http://192.168.x.x:8080 和
http://my-ship.local:8080 等目標。只有在你信任該 ship URL 時才啟用;這會停用
該帳號 HTTP 要求的 SSRF 防護。
群組頻道
手動固定頻道,或開啟自動探索:
{ channels: { tlon: { groupChannels: ["chat/~host-ship/general", "chat/~host-ship/support"], autoDiscoverChannels: true, }, },}若設定中未指定 autoDiscoverChannels,其預設值為 false;設定精靈會將
提示的預設值設為「是」,並明確寫入 true。啟用後,OpenClaw 會在啟動時探查已加入的群組,
在接受群組邀請時監看新頻道,並每 2 分鐘重新檢查一次。
存取控制
私訊允許清單(空白 = 除非傳送者是 ownerShip,否則不允許私訊):
{ channels: { tlon: { dmAllowlist: ["~zod", "~nec"], }, },}每個頻道的群組授權預設為 restricted。設定 defaultAuthorizedShips 作為
基準,並依各頻道 nest 覆寫:
{ channels: { tlon: { defaultAuthorizedShips: ["~zod"], authorization: { channelRules: { "chat/~host-ship/general": { mode: "restricted", allowedShips: ["~zod", "~nec"], }, "chat/~host-ship/announcements": { mode: "open", }, }, }, }, },}機器人一旦在討論串中回覆,便會持續回覆該討論串後續的訊息, 不需要再次提及。
設定 channels.tlon.implicitMentions.threadParticipation: false,即可要求這些後續訊息必須再次明確提及。
帳號覆寫使用 channels.tlon.accounts.<id>.implicitMentions。Tlon
目前不會產生 replyToBot 或 quotedBot 事實,因此這些旗標在此不會生效。
擁有者和核准系統
{ channels: { tlon: { ownerShip: "~your-main-ship", }, },}擁有者 ship 在所有位置都具有授權:私訊邀請一律自動接受、群組邀請一律
自動接受,且頻道訊息一律通過授權。擁有者不需要列在
dmAllowlist、defaultAuthorizedShips 或 groupInviteAllowlist 中。
設定 ownerShip 後,未授權的要求不會只是遭到捨棄,而是會排入待處理
核准佇列,並私訊擁有者:
- 來自未列於
dmAllowlist中之 ship 的私訊要求 - 傳送者未通過授權的頻道提及
- 來自未列於
groupInviteAllowlist中之 ship 的群組邀請(當自動接受關閉,或已開啟但 邀請者未列於允許清單時)
擁有者可透過私訊回覆來處理要求:
| 擁有者回覆 | 效果 |
|---|---|
approve / deny / block |
處理最近一筆待核准要求 |
approve <id> / deny <id> |
依 ID 處理特定核准要求 |
block |
同時以原生方式封鎖該 ship,使其無法重新連線 |
unblock ~ship |
解除原生封鎖 |
blocked |
列出目前遭封鎖的 ship |
pending |
列出待處理的核准要求 |
若未設定 ownerShip,未授權的私訊和頻道提及只會遭到捨棄並記錄;
不會顯示核准提示。
自動接受設定
自動接受來自已列於 dmAllowlist 中之 ship 的私訊邀請(無論此旗標為何,
擁有者一律會自動接受):
{ channels: { tlon: { autoAcceptDmInvites: true, }, },}自動接受允許清單中 ship 的群組邀請(失敗時採封閉策略:當 autoAcceptGroupInvites: true 且
groupInviteAllowlist 為空白時,不接受任何非擁有者邀請):
{ channels: { tlon: { autoAcceptGroupInvites: true, groupInviteAllowlist: ["~zod"], }, },}透過 Urbit 設定儲存區熱重新載入
上述大多數設定(dmAllowlist、groupInviteAllowlist、groupChannels、
defaultAuthorizedShips、autoDiscoverChannels、autoAcceptDmInvites、
autoAcceptGroupInvites、ownerShip、showModelSignature)會在第一次執行時鏡像到 ship 的
%settings 代理程式(desk moltbot、bucket tlon),之後再從該處即時讀取,
因此透過 Landscape 用戶端或隨附 Skill 的設定命令所做的變更,不必重新啟動
閘道即可套用。channelRules 和待處理的核准要求也會以 JSON 格式持久儲存於該處。對於
從未寫入設定儲存區的值,檔案設定仍是事實來源。
傳遞目標(命令列介面/排程)
搭配 openclaw message send 或排程傳遞使用:
- 私訊:
~sampel-palnet或dm/~sampel-palnet - 群組:
chat/~host-ship/channel或group:~host-ship/channel
隨附 Skill
此外掛隨附 @tloncorp/tlon-skill,這是一個用於
直接執行 Urbit 操作的命令列介面,安裝外掛後即可自動使用:
- 動態:提及、回覆、未讀項目
- 頻道:列出、建立、重新命名
- 聯絡人:列出/取得/更新個人檔案
- 群組:建立、加入、邀請/申請流程、角色
- 鉤子:管理頻道鉤子
- 訊息:歷史記錄、搜尋
- 私訊:傳送、回應、接受/拒絕
- 貼文:回應、刪除
- 筆記本:發佈至日記頻道
- 設定:透過上述設定儲存區熱重新載入外掛設定
功能
| 功能 | 狀態 |
|---|---|
| 私訊 | 支援 |
| 群組/頻道 | 支援(預設須提及) |
| 討論串 | 支援(加入後會持續回覆) |
| 富文字 | Markdown 轉換為 Tlon 的原生格式 |
| 圖片 | 下載傳入圖片,上傳傳出圖片 |
| 表情回應 | 僅能透過隨附 Skill |
| 投票 | 不支援 |
| 原生命令 | 預設僅限擁有者 |
疑難排解
openclaw statusopenclaw gateway statusopenclaw logs --followopenclaw doctor常見失敗:
- 私訊遭忽略:傳送者不在
dmAllowlist中,且未設定用於核准流程的ownerShip。 - 群組訊息遭忽略:頻道未被探索/固定,或傳送者未通過授權,且沒有
ownerShip可將核准要求排入佇列。 - 連線錯誤:檢查 ship URL 是否可連線;若是本機 ship,請設定
network.dangerouslyAllowPrivateNetwork。 - 驗證錯誤:登入碼會輪替,請從你的 ship 複製目前的代碼。
設定參考
完整設定:設定
| 鍵 | 意義 |
|---|---|
channels.tlon.enabled |
啟用/停用頻道啟動。 |
channels.tlon.ship |
機器人的 Urbit ship 名稱(例如 ~sampel-palnet)。 |
channels.tlon.url |
Ship URL(例如 https://sampel-palnet.tlon.network)。 |
channels.tlon.code |
Ship 登入碼。 |
channels.tlon.network.dangerouslyAllowPrivateNetwork |
允許 localhost/區域網路 ship URL(選擇啟用 SSRF)。 |
channels.tlon.ownerShip |
擁有者 ship:永遠具有授權,並接收核准要求。 |
channels.tlon.dmAllowlist |
允許私訊的 ship(空白 = 除擁有者外皆不允許)。 |
channels.tlon.autoAcceptDmInvites |
自動接受來自 dmAllowlist 中 ship 的私訊。 |
channels.tlon.autoAcceptGroupInvites |
自動接受來自 groupInviteAllowlist 的群組邀請。 |
channels.tlon.groupInviteAllowlist |
群組邀請會被自動接受的 ship。 |
channels.tlon.autoDiscoverChannels |
自動探索已加入的群組頻道(預設:false)。 |
channels.tlon.implicitMentions.threadParticipation |
允許已參與討論串的後續訊息略過提及限制。 |
channels.tlon.groupChannels |
手動固定的頻道 nest。 |
channels.tlon.defaultAuthorizedShips |
所有頻道皆授權的 ship(沒有符合規則時使用)。 |
channels.tlon.authorization.channelRules |
各頻道 nest 的驗證模式與允許清單。 |
channels.tlon.showModelSignature |
將 _[Generated by <model>]_ 附加至回覆。 |
channels.tlon.responsePrefix |
加在傳出回覆之前的靜態前置字串。 |
channels.tlon.accounts.<id> |
其他具名帳號(多 ship 設定)。 |
備註
- 群組回覆需要 @ 提及(例如
~your-bot-ship),除非機器人已加入該討論串。 - 討論串回覆會送至討論串內;系統也會將討論串內容的最後 10 則訊息附加在前面, 提供給代理程式。
- 富文字(粗體、斜體、程式碼、標題、清單)會轉換為 Tlon 的原生格式。
- 傳送要求頻道摘要的傳入訊息(例如「摘要此 頻道」),會觸發內建的歷史記錄摘要功能,而非一般回覆流程。