Developer and self-hosted

Tlon

Tlon est une messagerie décentralisée construite sur Urbit. OpenClaw se connecte à votre vaisseau Urbit et répond aux messages privés et aux messages des discussions de groupe. Par défaut, les réponses de groupe nécessitent une mention @, avec des règles d’autorisation et un processus d’approbation par le propriétaire qui s’y ajoutent.

État : plugin intégré. Les messages privés, les mentions de groupe, les fils de discussion, le texte enrichi, l’envoi et le téléchargement d’images, ainsi qu’un système d’approbation par le propriétaire sont pris en charge. Les réactions et les sondages ne le sont pas.

Plugin intégré

Tlon est intégré aux versions actuelles d’OpenClaw ; les distributions empaquetées ne nécessitent aucune installation distincte.

Sur une ancienne version ou une installation personnalisée qui l’exclut, installez-le depuis npm :

bash
openclaw plugins install @openclaw/tlon

Utilisez le nom de paquet seul pour suivre l’étiquette de la version actuelle. Épinglez une version (@openclaw/tlon@x.y.z) uniquement pour les installations reproductibles.

Depuis une extraction locale :

bash
openclaw plugins install ./path/to/local/tlon-plugin

Détails : Plugins

Configuration

bash
openclaw channels add --channel tlon --ship ~sampel-palnet --url https://your-ship-host --code lidlut-tabwed-pillex-ridrup

Ou modifiez directement la configuration :

json5
{  channels: {    tlon: {      enabled: true,      ship: "~sampel-palnet",      url: "https://your-ship-host",      code: "lidlut-tabwed-pillex-ridrup",      ownerShip: "~your-main-ship", // recommandé : votre vaisseau, toujours autorisé    },  },}

Redémarrez le Gateway après avoir modifié directement la configuration. Envoyez ensuite un message privé au bot ou mentionnez-le avec @ dans un canal de groupe.

Vaisseaux privés/sur réseau local

Par défaut, OpenClaw bloque les noms d’hôte privés/internes et les plages d’adresses IP afin de protéger contre les SSRF. Si votre vaisseau s’exécute sur un réseau privé (localhost, adresse IP du réseau local, nom d’hôte interne), activez explicitement cette possibilité :

json5
{  channels: {    tlon: {      url: "http://localhost:8080",      network: {        dangerouslyAllowPrivateNetwork: true,      },    },  },}

Cela s’applique aux cibles telles que http://localhost:8080, http://192.168.x.x:8080 et http://my-ship.local:8080. N’activez cette option que pour l’URL d’un vaisseau auquel vous faites confiance ; elle désactive la protection contre les SSRF pour les requêtes HTTP de ce compte.

Canaux de groupe

Épinglez les canaux manuellement ou activez la découverte automatique :

json5
{  channels: {    tlon: {      groupChannels: ["chat/~host-ship/general", "chat/~host-ship/support"],      autoDiscoverChannels: true,    },  },}

Lorsque autoDiscoverChannels n’est pas défini dans la configuration, sa valeur par défaut est false ; l’assistant de configuration propose oui par défaut et écrit explicitement true. Lorsque cette option est activée, OpenClaw interroge les groupes rejoints au démarrage, surveille les nouveaux canaux à mesure que les invitations à des groupes sont acceptées et effectue une nouvelle vérification toutes les 2 minutes.

Contrôle d’accès

Liste d’autorisation des messages privés (vide = aucun message privé autorisé, sauf si l’expéditeur est ownerShip) :

json5
{  channels: {    tlon: {      dmAllowlist: ["~zod", "~nec"],    },  },}

Par défaut, l’autorisation de groupe est définie sur restricted pour chaque canal. Définissez defaultAuthorizedShips comme référence, puis remplacez-la pour chaque arborescence de canal :

json5
{  channels: {    tlon: {      defaultAuthorizedShips: ["~zod"],      authorization: {        channelRules: {          "chat/~host-ship/general": {            mode: "restricted",            allowedShips: ["~zod", "~nec"],          },          "chat/~host-ship/announcements": {            mode: "open",          },        },      },    },  },}

Une fois que le bot a répondu dans un fil de discussion, il continue de répondre aux messages ultérieurs de ce fil sans nécessiter une nouvelle mention.

Propriétaire et système d’approbation

json5
{  channels: {    tlon: {      ownerShip: "~your-main-ship",    },  },}

Le vaisseau propriétaire est autorisé partout : les invitations aux messages privés sont toujours acceptées automatiquement, les invitations aux groupes sont toujours acceptées automatiquement et les messages des canaux passent toujours l’autorisation. Le propriétaire n’a pas besoin de figurer dans dmAllowlist, defaultAuthorizedShips ou groupInviteAllowlist.

Lorsque ownerShip est défini, les requêtes non autorisées ne sont pas simplement ignorées : elles sont mises en attente d’approbation et un message privé est envoyé au propriétaire :

  • Requêtes de message privé provenant de vaisseaux absents de dmAllowlist
  • Mentions dans des canaux où l’expéditeur ne satisfait pas aux règles d’autorisation
  • Invitations à des groupes provenant de vaisseaux absents de groupInviteAllowlist (lorsque l’acceptation automatique est désactivée, ou activée mais que l’auteur de l’invitation ne figure pas dans la liste d’autorisation)

Le propriétaire répond par message privé pour traiter une requête :

Réponse du propriétaire Effet
approve / deny / block Agit sur la demande d’approbation en attente la plus récente
approve <id> / deny <id> Agit sur une demande d’approbation précise par identifiant
block Bloque également le vaisseau nativement afin qu’il ne puisse pas se reconnecter
unblock ~ship Annule un blocage natif
blocked Répertorie les vaisseaux actuellement bloqués
pending Répertorie les demandes d’approbation en attente

Si ownerShip n’est pas configuré, les messages privés et les mentions de canal non autorisés sont simplement ignorés et journalisés ; aucune demande d’approbation n’est envoyée.

Paramètres d’acceptation automatique

Acceptez automatiquement les invitations aux messages privés provenant des vaisseaux déjà présents dans dmAllowlist (le propriétaire est toujours accepté automatiquement, quelle que soit la valeur de cette option) :

json5
{  channels: {    tlon: {      autoAcceptDmInvites: true,    },  },}

Acceptez automatiquement les invitations à des groupes provenant d’une liste d’autorisation (comportement fermé par défaut : avec autoAcceptGroupInvites: true et une groupInviteAllowlist vide, aucune invitation provenant d’un non-propriétaire n’est acceptée) :

json5
{  channels: {    tlon: {      autoAcceptGroupInvites: true,      groupInviteAllowlist: ["~zod"],    },  },}

Rechargement à chaud via le magasin de paramètres Urbit

La plupart des paramètres ci-dessus (dmAllowlist, groupInviteAllowlist, groupChannels, defaultAuthorizedShips, autoDiscoverChannels, autoAcceptDmInvites, autoAcceptGroupInvites, ownerShip, showModelSignature) sont répliqués dans l’agent %settings du vaisseau (bureau moltbot, compartiment tlon) lors de la première exécution, puis lus en direct depuis celui-ci ; les modifications effectuées à l’aide d’un client Landscape ou des commandes de paramètres du Skill intégré s’appliquent donc sans redémarrer le Gateway. channelRules et les approbations en attente y sont également conservés au format JSON. La configuration de fichier reste la source de vérité pour les valeurs qui ne sont jamais écrites dans le magasin de paramètres.

Cibles de livraison (CLI/cron)

À utiliser avec openclaw message send ou une livraison cron :

  • Message privé : ~sampel-palnet ou dm/~sampel-palnet
  • Groupe : chat/~host-ship/channel ou group:~host-ship/channel

Skill intégré

Le plugin intègre @tloncorp/tlon-skill, une CLI permettant d’effectuer directement des opérations Urbit, disponible automatiquement une fois le plugin installé :

  • Activité : mentions, réponses, éléments non lus
  • Canaux : répertorier, créer, renommer
  • Contacts : répertorier/obtenir/mettre à jour les profils
  • Groupes : créer, rejoindre, inviter/demander à rejoindre, gérer les rôles
  • Hooks : gérer les hooks de canal
  • Messages : historique, recherche
  • Messages privés : envoyer, réagir, accepter/refuser
  • Publications : réagir, supprimer
  • Carnet : publier dans les canaux de journal
  • Paramètres : recharger à chaud la configuration du plugin via le magasin de paramètres ci-dessus

Fonctionnalités

Fonctionnalité État
Messages privés Pris en charge
Groupes/canaux Pris en charge (mention requise par défaut)
Fils de discussion Pris en charge (continue de répondre après les avoir rejoints)
Texte enrichi Markdown converti au format natif de Tlon
Images Téléchargées en entrée, envoyées en sortie
Réactions Uniquement via le Skill intégré
Sondages Non pris en charge
Commandes natives Réservées au propriétaire par défaut

Dépannage

bash
openclaw statusopenclaw gateway statusopenclaw logs --followopenclaw doctor

Défaillances courantes :

  • Messages privés ignorés : l’expéditeur ne figure pas dans dmAllowlist et aucun ownerShip n’est configuré pour le processus d’approbation.
  • Messages de groupe ignorés : le canal n’a pas été découvert/épinglé, ou l’expéditeur ne satisfait pas aux règles d’autorisation et aucun ownerShip ne permet de mettre une approbation en attente.
  • Erreurs de connexion : vérifiez que l’URL du vaisseau est accessible ; définissez network.dangerouslyAllowPrivateNetwork pour les vaisseaux locaux.
  • Erreurs d’authentification : les codes de connexion changent régulièrement ; copiez le code actuel depuis votre vaisseau.

Référence de configuration

Configuration complète : Configuration

Clé Signification
channels.tlon.enabled Active ou désactive le démarrage du canal.
channels.tlon.ship Nom du vaisseau Urbit du bot (par ex. ~sampel-palnet).
channels.tlon.url URL du vaisseau (par ex. https://sampel-palnet.tlon.network).
channels.tlon.code Code de connexion du vaisseau.
channels.tlon.network.dangerouslyAllowPrivateNetwork Autorise les URL de vaisseaux sur localhost/réseau local (activation explicite des SSRF).
channels.tlon.ownerShip Vaisseau propriétaire : toujours autorisé, reçoit les demandes d’approbation.
channels.tlon.dmAllowlist Vaisseaux autorisés à envoyer des messages privés (vide = aucun, sauf le propriétaire).
channels.tlon.autoAcceptDmInvites Accepte automatiquement les messages privés des vaisseaux figurant dans dmAllowlist.
channels.tlon.autoAcceptGroupInvites Accepte automatiquement les invitations à des groupes provenant de groupInviteAllowlist.
channels.tlon.groupInviteAllowlist Vaisseaux dont les invitations à des groupes sont acceptées automatiquement.
channels.tlon.autoDiscoverChannels Découvre automatiquement les canaux de groupe rejoints (valeur par défaut : false).
channels.tlon.groupChannels Arborescences de canaux épinglées manuellement.
channels.tlon.defaultAuthorizedShips Vaisseaux autorisés pour tous les canaux (utilisé lorsqu’aucune règle ne correspond).
channels.tlon.authorization.channelRules Mode d’authentification et liste d’autorisation par arborescence de canal.
channels.tlon.showModelSignature Ajoute _[Généré par <model>]_ aux réponses.
channels.tlon.responsePrefix Préfixe statique ajouté au début des réponses sortantes.
channels.tlon.accounts.<id> Comptes nommés supplémentaires (configurations à plusieurs vaisseaux).

Remarques

  • Les réponses de groupe nécessitent une mention @ (par ex. ~your-bot-ship), sauf si le bot a déjà rejoint ce fil de discussion.
  • Les réponses aux fils de discussion sont publiées dans le fil ; les 10 derniers messages du contexte du fil sont également ajoutés au début pour l’agent.
  • Le texte enrichi (gras, italique, code, en-têtes, listes) est converti au format natif de Tlon.
  • L’envoi d’un message entrant demandant un résumé du canal (par exemple « résume ce canal ») déclenche un résumé intégré de l’historique au lieu du processus de réponse normal.

Pages connexes

  • Présentation des canaux — tous les canaux pris en charge
  • Appairage — authentification des messages privés et processus d’appairage
  • Groupes — comportement des discussions de groupe et obligation de mention
  • Routage des canaux — routage des sessions pour les messages
  • Sécurité — modèle d’accès et renforcement de la sécurité
Was this useful?
On this page

On this page