Auth model
Installed plugin + Urbit / Tlon identity and room configuration
An Urbit-adjacent lane for communities that want protocol-shaped operations instead of mainstream chat defaults.
Tlon/Urbit support for OpenClaw covers plugin-backed setup, identity assumptions, group access, and verification tailored to that ecosystem.
Auth model
Installed plugin + Urbit / Tlon identity and room configuration
Safety stance
Document the identity and room model explicitly because it differs from mainstream bot platforms.
Verification ritual
Validate identity resolution, message delivery, and one group interaction on the exact environment meant for production.
Rollout mode
35–50 min setup
Optional plugin · Urbit messenger
Tlon runs as an Urbit-native lane for DMs and group chats, with discovery, owner approval, and mention-gated groups shaping how traffic reaches the bot.
Reply watch
Assumptions imported from Slack or Discord can mislead operators about what access and identity actually mean here.
Tlon is the right OpenClaw lane when your real operating surface is already Urbit-native. The setup is not hard, but it is different from mainstream bot platforms: trust is expressed through ship identity, channel discovery, and an explicit owner ship that can approve activity.
Tlon is not a generic “chat connector.” It is a plugin-backed channel for operators who already live inside the Urbit/Tlon model and want the assistant to behave like a participant in that environment.
The upstream channel documentation supports a clear value proposition:
ownerShip, dmAllowlist, and per-channel rulesIf your community is already organized around ships and nests, Tlon can feel more native than forcing users into a separate fallback messenger.
Use this dossier when you need to decide:
Most Tlon issues come from mixing together three separate concerns.
The plugin needs four practical facts to line up:
shipurlcodeownerShipIf the ship URL is wrong, unreachable, or private without an explicit opt-in, nothing else matters.
For groups, the bot can only work in places it knows about.
The upstream docs describe two patterns:
groupChannels when you want deterministic scopeIf a group message is ignored, discovery is one of the first things to check.
Even when the ship is reachable and the channel is known, the bot may stay silent by policy.
The main controls are:
dmAllowlistdefaultAuthorizedShipsauthorization.channelRulesownerShipThis matters because Tlon can look connected while still behaving correctly by refusing unauthorized DMs or group activity.
For most operators, the best first posture is:
ownerShip,groupChannels if you want tighter control.{
channels: {
tlon: {
enabled: true,
ship: '~sampel-palnet',
url: 'https://your-ship-host',
code: 'lidlut-tabwed-pillex-ridrup',
ownerShip: '~your-main-ship',
},
},
}
Why this is a strong first shape:
ownerShip is automatically authorized everywhere,Tlon is not bundled into core OpenClaw.
Install the plugin first:
openclaw plugins install @openclaw/tlon
Or, from a local checkout:
openclaw plugins install ./extensions/tlon
Then confirm you have the three facts the connector actually needs:
If you already know who should approve requests, set ownerShip immediately instead of treating it as optional cleanup.
The official docs are explicit here: OpenClaw blocks private and internal destinations by default for SSRF protection.
If your ship runs on localhost, a LAN IP, or an internal hostname, you must opt in explicitly:
{
channels: {
tlon: {
url: 'http://localhost:8080',
allowPrivateNetwork: true,
},
},
}
Use this only when you trust the network path. The point is not convenience; it is a conscious exception to the default protection model.
Tlon DMs are not open by default.
That is usually the right behavior.
If you set ownerShip, unauthorized DM attempts can turn into approval requests sent to the owner ship.
That is a good operational baseline because:
dmAllowlistIf the lane is meant for a known set of ships, keep the policy explicit:
{
channels: {
tlon: {
dmAllowlist: ['~zod', '~nec'],
autoAcceptDmInvites: true,
},
},
}
The docs are clear that an empty dmAllowlist means no DMs are allowed unless you rely on the ownerShip approval flow.
Tlon group support is powerful, but it is easiest to operate safely when you separate channel discovery from authorization.
If you want low friction, keep auto-discovery enabled.
If you want a narrower surface, pin the exact nests:
{
channels: {
tlon: {
groupChannels: ['chat/~host-ship/general', 'chat/~host-ship/support'],
autoDiscoverChannels: false,
},
},
}
Group authorization is restricted by default. A good first pattern is:
{
channels: {
tlon: {
defaultAuthorizedShips: ['~zod'],
authorization: {
channelRules: {
'chat/~host-ship/general': {
mode: 'restricted',
allowedShips: ['~zod', '~nec'],
},
'chat/~host-ship/announcements': {
mode: 'open',
},
},
},
},
},
}
Two practical reminders from the official docs:
@ mention by default,That combination is a good fit for communities that want the assistant present without making every group message actionable.
Do not stop at “the plugin started.” Run a small operational drill.
Start with the upstream troubleshooting ladder:
openclaw status
openclaw gateway status
openclaw logs --follow
openclaw doctor
Test one DM from the owner ship or an allowlisted ship.
What you are checking is not just “reply received,” but whether the bot follows the trust model you intended.
Mention the bot in a known group channel.
If you operate in threads, verify one in-thread reply as well. Tlon explicitly supports thread replies, so this is worth checking early.
The docs say image URLs are uploaded to Tlon storage and embedded as image blocks. If image delivery matters for your channel, test it now rather than assuming Markdown-only validation is enough.
Because ship reachability, login code validity, and discovery state are all easy to over-assume, do one deliberate restart and repeat the DM and group check.
A few Tlon-specific behaviors are worth documenting from day one:
If you operate Tlon heavily, the bundled Tlon skill can inspect contacts, channels, groups, DMs, reactions, and settings from the same installation.
The official docs point to the most common reason first: the sender is not in dmAllowlist, and no ownerShip is configured for approval flow.
Usually either the channel was not discovered, or the sender is not authorized under the current group rules.
That often means the URL is on localhost, LAN, or another internal hostname and allowPrivateNetwork was never enabled.
The docs explicitly call out rotating login codes. If authentication breaks, verify the code is still current before chasing more exotic causes.
For most real Tlon deployments, a disciplined starting shape looks like this:
ownerShip from the beginning,That posture matches the upstream model better than trying to force Tlon into a mainstream “drop in a bot token and let it roam” workflow.
If you need the raw configuration surface, continue with:
If you plan to use approval-driven DM onboarding or similar trust flows, also review:
Verification & references
References