Switch new Tlon installs to @tloncorp/openclaw, add an on-load config migration for existing plugins.installs.tlon npm records, and document the rollout contract for the package rename. Preserve the tlon plugin/channel id and clear stale npm resolution metadata when rewriting old install specs so future plugin updates resolve cleanly. Regeneration-Prompt: | Migrate the Tlon OpenClaw plugin package from @openclaw/tlon to @tloncorp/openclaw without breaking existing installs. Keep the plugin id and channel id as tlon, switch onboarding and docs for new installs to the new npm package, and add an automatic config migration for existing plugins.installs.tlon npm records that still reference the old package. When rewriting stored install specs, clear old npm resolution metadata such as integrity and resolvedSpec so the next plugin update does not compare the new package against the old package artifact. Also capture the migration contract in repo docs so the companion tloncorp package can preserve version continuity and manifest invariants.
280 lines
7.1 KiB
Markdown
280 lines
7.1 KiB
Markdown
---
|
|
summary: "Tlon/Urbit support status, capabilities, and configuration"
|
|
read_when:
|
|
- Working on Tlon/Urbit channel features
|
|
title: "Tlon"
|
|
---
|
|
|
|
# Tlon (plugin)
|
|
|
|
Tlon is a decentralized messenger built on Urbit. OpenClaw connects to your Urbit ship and can
|
|
respond to DMs and group chat messages. Group replies require an @ mention by default and can
|
|
be further restricted via allowlists.
|
|
|
|
Status: supported via plugin. DMs, group mentions, thread replies, rich text formatting, and
|
|
image uploads are supported. Reactions and polls are not yet supported.
|
|
|
|
## Plugin required
|
|
|
|
Tlon ships as a plugin and is not bundled with the core install.
|
|
|
|
Install via CLI (npm registry):
|
|
|
|
```bash
|
|
openclaw plugins install @tloncorp/openclaw
|
|
```
|
|
|
|
Local checkout (when running from a git repo):
|
|
|
|
```bash
|
|
openclaw plugins install ./extensions/tlon
|
|
```
|
|
|
|
Details: [Plugins](/tools/plugin)
|
|
|
|
Existing installs from `@openclaw/tlon` are migrated to the new package name on config load so
|
|
future `openclaw plugins update` runs resolve from `@tloncorp/openclaw`.
|
|
|
|
## Setup
|
|
|
|
1. Install the Tlon plugin.
|
|
2. Gather your ship URL and login code.
|
|
3. Configure `channels.tlon`.
|
|
4. Restart the gateway.
|
|
5. DM the bot or mention it in a group channel.
|
|
|
|
Minimal config (single account):
|
|
|
|
```json5
|
|
{
|
|
channels: {
|
|
tlon: {
|
|
enabled: true,
|
|
ship: "~sampel-palnet",
|
|
url: "https://your-ship-host",
|
|
code: "lidlut-tabwed-pillex-ridrup",
|
|
ownerShip: "~your-main-ship", // recommended: your ship, always allowed
|
|
},
|
|
},
|
|
}
|
|
```
|
|
|
|
## Private/LAN ships
|
|
|
|
By default, OpenClaw blocks private/internal hostnames and IP ranges for SSRF protection.
|
|
If your ship is running on a private network (localhost, LAN IP, or internal hostname),
|
|
you must explicitly opt in:
|
|
|
|
```json5
|
|
{
|
|
channels: {
|
|
tlon: {
|
|
url: "http://localhost:8080",
|
|
allowPrivateNetwork: true,
|
|
},
|
|
},
|
|
}
|
|
```
|
|
|
|
This applies to URLs like:
|
|
|
|
- `http://localhost:8080`
|
|
- `http://192.168.x.x:8080`
|
|
- `http://my-ship.local:8080`
|
|
|
|
⚠️ Only enable this if you trust your local network. This setting disables SSRF protections
|
|
for requests to your ship URL.
|
|
|
|
## Group channels
|
|
|
|
Auto-discovery is enabled by default. You can also pin channels manually:
|
|
|
|
```json5
|
|
{
|
|
channels: {
|
|
tlon: {
|
|
groupChannels: ["chat/~host-ship/general", "chat/~host-ship/support"],
|
|
},
|
|
},
|
|
}
|
|
```
|
|
|
|
Disable auto-discovery:
|
|
|
|
```json5
|
|
{
|
|
channels: {
|
|
tlon: {
|
|
autoDiscoverChannels: false,
|
|
},
|
|
},
|
|
}
|
|
```
|
|
|
|
## Access control
|
|
|
|
DM allowlist (empty = no DMs allowed, use `ownerShip` for approval flow):
|
|
|
|
```json5
|
|
{
|
|
channels: {
|
|
tlon: {
|
|
dmAllowlist: ["~zod", "~nec"],
|
|
},
|
|
},
|
|
}
|
|
```
|
|
|
|
Group authorization (restricted by default):
|
|
|
|
```json5
|
|
{
|
|
channels: {
|
|
tlon: {
|
|
defaultAuthorizedShips: ["~zod"],
|
|
authorization: {
|
|
channelRules: {
|
|
"chat/~host-ship/general": {
|
|
mode: "restricted",
|
|
allowedShips: ["~zod", "~nec"],
|
|
},
|
|
"chat/~host-ship/announcements": {
|
|
mode: "open",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
```
|
|
|
|
## Owner and approval system
|
|
|
|
Set an owner ship to receive approval requests when unauthorized users try to interact:
|
|
|
|
```json5
|
|
{
|
|
channels: {
|
|
tlon: {
|
|
ownerShip: "~your-main-ship",
|
|
},
|
|
},
|
|
}
|
|
```
|
|
|
|
The owner ship is **automatically authorized everywhere** — DM invites are auto-accepted and
|
|
channel messages are always allowed. You don't need to add the owner to `dmAllowlist` or
|
|
`defaultAuthorizedShips`.
|
|
|
|
When set, the owner receives DM notifications for:
|
|
|
|
- DM requests from ships not in the allowlist
|
|
- Mentions in channels without authorization
|
|
- Group invite requests
|
|
|
|
## Auto-accept settings
|
|
|
|
Auto-accept DM invites (for ships in dmAllowlist):
|
|
|
|
```json5
|
|
{
|
|
channels: {
|
|
tlon: {
|
|
autoAcceptDmInvites: true,
|
|
},
|
|
},
|
|
}
|
|
```
|
|
|
|
Auto-accept group invites:
|
|
|
|
```json5
|
|
{
|
|
channels: {
|
|
tlon: {
|
|
autoAcceptGroupInvites: true,
|
|
},
|
|
},
|
|
}
|
|
```
|
|
|
|
## Delivery targets (CLI/cron)
|
|
|
|
Use these with `openclaw message send` or cron delivery:
|
|
|
|
- DM: `~sampel-palnet` or `dm/~sampel-palnet`
|
|
- Group: `chat/~host-ship/channel` or `group:~host-ship/channel`
|
|
|
|
## Bundled skill
|
|
|
|
The Tlon plugin includes a bundled skill ([`@tloncorp/tlon-skill`](https://github.com/tloncorp/tlon-skill))
|
|
that provides CLI access to Tlon operations:
|
|
|
|
- **Contacts**: get/update profiles, list contacts
|
|
- **Channels**: list, create, post messages, fetch history
|
|
- **Groups**: list, create, manage members
|
|
- **DMs**: send messages, react to messages
|
|
- **Reactions**: add/remove emoji reactions to posts and DMs
|
|
- **Settings**: manage plugin permissions via slash commands
|
|
|
|
The skill is automatically available when the plugin is installed.
|
|
|
|
## Capabilities
|
|
|
|
| Feature | Status |
|
|
| --------------- | --------------------------------------- |
|
|
| Direct messages | ✅ Supported |
|
|
| Groups/channels | ✅ Supported (mention-gated by default) |
|
|
| Threads | ✅ Supported (auto-replies in thread) |
|
|
| Rich text | ✅ Markdown converted to Tlon format |
|
|
| Images | ✅ Uploaded to Tlon storage |
|
|
| Reactions | ✅ Via [bundled skill](#bundled-skill) |
|
|
| Polls | ❌ Not yet supported |
|
|
| Native commands | ✅ Supported (owner-only by default) |
|
|
|
|
## Troubleshooting
|
|
|
|
Run this ladder first:
|
|
|
|
```bash
|
|
openclaw status
|
|
openclaw gateway status
|
|
openclaw logs --follow
|
|
openclaw doctor
|
|
```
|
|
|
|
Common failures:
|
|
|
|
- **DMs ignored**: sender not in `dmAllowlist` and no `ownerShip` configured for approval flow.
|
|
- **Group messages ignored**: channel not discovered or sender not authorized.
|
|
- **Connection errors**: check ship URL is reachable; enable `allowPrivateNetwork` for local ships.
|
|
- **Auth errors**: verify login code is current (codes rotate).
|
|
|
|
## Configuration reference
|
|
|
|
Full configuration: [Configuration](/gateway/configuration)
|
|
|
|
Provider options:
|
|
|
|
- `channels.tlon.enabled`: enable/disable channel startup.
|
|
- `channels.tlon.ship`: bot's Urbit ship name (e.g. `~sampel-palnet`).
|
|
- `channels.tlon.url`: ship URL (e.g. `https://sampel-palnet.tlon.network`).
|
|
- `channels.tlon.code`: ship login code.
|
|
- `channels.tlon.allowPrivateNetwork`: allow localhost/LAN URLs (SSRF bypass).
|
|
- `channels.tlon.ownerShip`: owner ship for approval system (always authorized).
|
|
- `channels.tlon.dmAllowlist`: ships allowed to DM (empty = none).
|
|
- `channels.tlon.autoAcceptDmInvites`: auto-accept DMs from allowlisted ships.
|
|
- `channels.tlon.autoAcceptGroupInvites`: auto-accept all group invites.
|
|
- `channels.tlon.autoDiscoverChannels`: auto-discover group channels (default: true).
|
|
- `channels.tlon.groupChannels`: manually pinned channel nests.
|
|
- `channels.tlon.defaultAuthorizedShips`: ships authorized for all channels.
|
|
- `channels.tlon.authorization.channelRules`: per-channel auth rules.
|
|
- `channels.tlon.showModelSignature`: append model name to messages.
|
|
|
|
## Notes
|
|
|
|
- Group replies require a mention (e.g. `~your-bot-ship`) to respond.
|
|
- Thread replies: if the inbound message is in a thread, OpenClaw replies in-thread.
|
|
- Rich text: Markdown formatting (bold, italic, code, headers, lists) is converted to Tlon's native format.
|
|
- Images: URLs are uploaded to Tlon storage and embedded as image blocks.
|