Build or update the BlueBubbles external channel plugin for Moltbot (extension package, REST...
npx skills add tloncorp/tlon-skill
Or install specific skill: npx add-skill https://github.com/tloncorp/tlon-skill
# Description
Interact with Tlon/Urbit beyond the channel plugin. Use for contacts (get/update profiles, nicknames, avatars), listing channels/groups, fetching message history, posting to channels, sending DMs, and ship lookups. Complements the Tlon channel - use this skill for read operations, profile management, and direct API access.
# SKILL.md
name: tlon
description: Interact with Tlon/Urbit beyond the channel plugin. Use for contacts (get/update profiles, nicknames, avatars), listing channels/groups, fetching message history, posting to channels, sending DMs, and ship lookups. Complements the Tlon channel - use this skill for read operations, profile management, and direct API access.
Tlon Skill
Provides direct Urbit API access beyond what the Tlon channel plugin offers.
Setup
Scripts require these environment variables (from gateway config):
- URBIT_URL - Ship URL (e.g., https://myship.tlon.network)
- URBIT_SHIP - Ship name (e.g., ~sampel-palnet)
- URBIT_CODE - Ship access code
The skill reads these from your Tlon channel config automatically.
Available Scripts
Posting to Channels
Send a message to a channel:
npx ts-node scripts/posts.ts send chat/~host/channel-name "Hello everyone!"
Reply to a post:
npx ts-node scripts/posts.ts reply chat/~host/channel-name <post-id> "Great point!"
React to a post:
npx ts-node scripts/posts.ts react chat/~host/channel-name <post-id> ๐
Remove a reaction:
npx ts-node scripts/posts.ts unreact chat/~host/channel-name <post-id>
Delete a post:
npx ts-node scripts/posts.ts delete chat/~host/channel-name <post-id>
Direct Messages
Send a DM:
npx ts-node scripts/dms.ts send ~sampel-palnet "Hey, how's it going?"
Reply in a DM thread:
npx ts-node scripts/dms.ts reply ~sampel-palnet <post-id> "Thanks for the reply!"
React to a DM:
npx ts-node scripts/dms.ts react ~sampel-palnet <post-id> โค๏ธ
Remove reaction from a DM:
npx ts-node scripts/dms.ts unreact ~sampel-palnet <post-id>
Delete a DM:
npx ts-node scripts/dms.ts delete ~sampel-palnet <post-id>
Accept a DM invite:
npx ts-node scripts/dms.ts accept ~sampel-palnet
Decline a DM invite:
npx ts-node scripts/dms.ts decline ~sampel-palnet
Send to a group DM (club):
npx ts-node scripts/dms.ts send 0v4.club-id "Message to the group"
Contacts
Get all contacts:
npx ts-node scripts/contacts.ts list
Get a specific contact's profile:
npx ts-node scripts/contacts.ts get ~sampel-palnet
Add a contact:
npx ts-node scripts/contacts.ts add ~sampel-palnet
Remove a contact:
npx ts-node scripts/contacts.ts remove ~sampel-palnet
Sync (fetch) profiles from ships:
npx ts-node scripts/contacts.ts sync ~sampel-palnet ~zod
Update your profile:
npx ts-node scripts/contacts.ts update-profile --nickname "My Name" --bio "About me" --status "Available"
Update your avatar:
npx ts-node scripts/contacts.ts update-profile --avatar "https://example.com/avatar.png"
Channels
List DMs:
npx ts-node scripts/channels.ts dms
List group DMs:
npx ts-node scripts/channels.ts group-dms
List subscribed groups:
npx ts-node scripts/channels.ts groups
Groups
List your groups:
npx ts-node scripts/groups.ts list
Create a new group:
npx ts-node scripts/groups.ts create "Group Name" [--description "..."]
Get group info:
npx ts-node scripts/groups.ts info ~ship/group-slug
Invite members:
npx ts-node scripts/groups.ts invite ~ship/group-slug ~invitee1 ~invitee2
Leave a group:
npx ts-node scripts/groups.ts leave ~ship/group-slug
Join a group:
npx ts-node scripts/groups.ts join ~ship/group-slug
Add a channel to a group:
npx ts-node scripts/groups.ts add-channel ~ship/group-slug "Channel Name" [--kind chat|diary|heap] [--description "..."]
Group Administration (Host Only)
Delete a group:
npx ts-node scripts/groups.ts delete ~ship/group-slug
Update group metadata:
npx ts-node scripts/groups.ts update ~ship/group-slug --title "New Title" [--description "..."] [--image "https://..."]
Kick members:
npx ts-node scripts/groups.ts kick ~ship/group-slug ~member1 ~member2
Ban members:
npx ts-node scripts/groups.ts ban ~ship/group-slug ~member1 ~member2
Unban members:
npx ts-node scripts/groups.ts unban ~ship/group-slug ~member1 ~member2
Set group privacy:
npx ts-node scripts/groups.ts set-privacy ~ship/group-slug public|private|secret
Accept join requests (for private groups):
npx ts-node scripts/groups.ts accept-join ~ship/group-slug ~requester1 ~requester2
Reject join requests:
npx ts-node scripts/groups.ts reject-join ~ship/group-slug ~requester1 ~requester2
Role Management
Add a role:
npx ts-node scripts/groups.ts add-role ~ship/group-slug role-id --title "Role Name" [--description "..."]
Delete a role:
npx ts-node scripts/groups.ts delete-role ~ship/group-slug role-id
Assign role to members:
npx ts-node scripts/groups.ts assign-role ~ship/group-slug role-id ~member1 ~member2
Remove role from members:
npx ts-node scripts/groups.ts remove-role ~ship/group-slug role-id ~member1 ~member2
Activity / Notifications
Get recent mentions:
npx ts-node scripts/activity.ts mentions [--limit N]
Get recent replies:
npx ts-node scripts/activity.ts replies [--limit N]
Get all recent activity:
npx ts-node scripts/activity.ts all [--limit N]
Get unread counts:
npx ts-node scripts/activity.ts unreads
Messages
Get recent messages from a DM:
npx ts-node scripts/messages.ts dm ~sampel-palnet --limit 20
Get recent messages from a channel:
npx ts-node scripts/messages.ts channel chat/~host/channel-slug --limit 20
Fetch full message history (same as channel):
npx ts-node scripts/messages.ts history "chat/~host/channel-slug" --limit 50
Search messages in a channel:
npx ts-node scripts/messages.ts search "query" --channel chat/~host/channel-name
Channel format:
- DMs: chat/~ship/dm (auto-converted from dm ~ship)
- Group channels: chat/~host/channel-slug
- Examples: chat/~nocsyx-lassul/bongtable, chat/~host/general
Notebooks (Diary Channels)
Post to a notebook:
npx ts-node scripts/notebook-post.ts diary/~host/channel-name "Post Title"
Post with a cover image:
npx ts-node scripts/notebook-post.ts diary/~host/channel-name "Post Title" --image https://example.com/cover.png
Post with rich content from a JSON file:
npx ts-node scripts/notebook-post.ts diary/~host/channel-name "Post Title" --content article.json
Post with content from stdin:
echo '[{"inline":["Hello, world!"]}]' | npx ts-node scripts/notebook-post.ts diary/~host/channel-name "Post Title" --stdin
Content format is Tlon's Story structure - an array of verses:
[
{ "inline": ["Plain text or ", { "bold": ["bold"] }, " text"] },
{ "block": { "header": { "tag": "h2", "content": ["Section Title"] } } },
{ "block": { "code": { "code": "const x = 1;", "lang": "javascript" } } },
{ "inline": [{ "blockquote": ["A wise quote"] }] }
]
API Reference
See references/urbit-api.md for Urbit HTTP API details.
Notes
- All ship names should include the
~prefix (scripts will normalize if missing) - Profile updates sync to peers automatically via the contacts agent
- Post IDs are Unix timestamps in milliseconds
- For sending messages via the Moltbot message tool, use
channel=tlon - Channel nests follow format:
<kind>/~<host>/<name>where kind is chat, diary, or heap
# README.md
Tlon Skill
A Moltbot skill for interacting with Tlon/Urbit beyond the channel plugin.
Features
- Groups: Create groups, invite members, manage membership
- Activity: View mentions, replies, and unread notifications
- Contacts: List, get, and update contact profiles
- Channels: List channels and groups you have access to
Installation
# Clone to your skills directory
git clone https://github.com/tloncorp/tlon-skill.git ~/clawd/skills/tlon
# Install dependencies
cd ~/clawd/skills/tlon
npm install
Configuration
Set environment variables or configure in your Moltbot setup:
export URBIT_URL="https://your-ship.tlon.network"
export URBIT_SHIP="~your-ship"
export URBIT_CODE="sampel-ticlyt-migfun-falmel" # Your +code
Usage
Groups
# List all your groups
npx ts-node scripts/groups.ts list
# Create a new group
npx ts-node scripts/groups.ts create "My Group" --description "A cool group"
# Get group info (members, channels, pending invites)
npx ts-node scripts/groups.ts info ~your-ship/group-slug
# Invite members to a group
npx ts-node scripts/groups.ts invite ~your-ship/group-slug ~friend1 ~friend2
# Leave a group
npx ts-node scripts/groups.ts leave ~host-ship/group-slug
Activity / Notifications
# Get recent mentions (where you were @mentioned)
npx ts-node scripts/activity.ts mentions --limit 10
# Get recent replies to your posts
npx ts-node scripts/activity.ts replies --limit 10
# Get all recent activity
npx ts-node scripts/activity.ts all --limit 10
# Get unread counts by channel/group
npx ts-node scripts/activity.ts unreads
Contacts
# List all contacts
npx ts-node scripts/contacts.ts list
# Get a specific contact's profile
npx ts-node scripts/contacts.ts get ~sampel-palnet
# Update your profile
npx ts-node scripts/contacts.ts update-profile --nickname "My Name" --bio "About me"
# Update your avatar
npx ts-node scripts/contacts.ts update-profile --avatar "https://example.com/avatar.png"
Channels
# List DMs
npx ts-node scripts/channels.ts dms
# List group DMs
npx ts-node scripts/channels.ts group-dms
# List subscribed groups
npx ts-node scripts/channels.ts groups
Complements the Tlon Plugin
This skill handles read operations, notifications, and group management. For messaging, use the Tlon channel plugin.
API Reference
See references/urbit-api.md for Urbit HTTP API details.
License
MIT
# Supported AI Coding Agents
This skill is compatible with the SKILL.md standard and works with all major AI coding agents:
Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.