Tlon (플러그인)

Tlon은 Urbit 위에 구축된 분산형 메신저입니다. OpenClaw는 Urbit ship에 연결하여 DM과 그룹 채팅 메시지에 응답할 수 있습니다. 그룹 응답은 기본적으로 @ 멘션이 필요하며, 허용 목록을 통해 추가로 제한할 수 있습니다.

상태: 플러그인을 통해 지원됩니다. DM, 그룹 멘션, 스레드 답장, 리치 텍스트 서식, 이미지 업로드가 지원됩니다. 리액션과 투표는 아직 지원되지 않습니다.

플러그인 필요

Tlon은 플러그인으로 제공되며 기본 코어에 포함되지 않습니다.

CLI로 설치 (npm 레지스트리):

openclaw plugins install @openclaw/tlon

로컬 체크아웃 (git 저장소에서 실행 시):

openclaw plugins install ./extensions/tlon

자세한 내용: Plugins

설정

  1. Tlon 플러그인을 설치합니다.
  2. ship URL과 로그인 코드를 준비합니다.
  3. channels.tlon을 설정합니다.
  4. 게이트웨이를 재시작합니다.
  5. 봇에 DM을 보내거나 그룹 채널에서 멘션합니다.

최소 설정 (단일 계정):

{
  channels: {
    tlon: {
      enabled: true,
      ship: "~sampel-palnet",
      url: "https://your-ship-host",
      code: "lidlut-tabwed-pillex-ridrup",
      ownerShip: "~your-main-ship", // 권장: 본인의 ship, 항상 허용됨
    },
  },
}

프라이빗/LAN ship

기본적으로 OpenClaw는 SSRF 보호를 위해 프라이빗/내부 호스트명 및 IP 범위를 차단합니다. ship이 프라이빗 네트워크(localhost, LAN IP, 내부 호스트명)에서 실행 중이라면 명시적으로 옵트인해야 합니다:

{
  channels: {
    tlon: {
      url: "http://localhost:8080",
      allowPrivateNetwork: true,
    },
  },
}

다음과 같은 URL에 적용됩니다:

  • http://localhost:8080
  • http://192.168.x.x:8080
  • http://my-ship.local:8080

이 설정은 신뢰할 수 있는 로컬 네트워크에서만 활성화하세요. ship URL에 대한 SSRF 보호가 비활성화됩니다.

그룹 채널

자동 검색이 기본적으로 활성화되어 있습니다. 채널을 수동으로 고정할 수도 있습니다:

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

자동 검색 비활성화:

{
  channels: {
    tlon: {
      autoDiscoverChannels: false,
    },
  },
}

접근 제어

DM 허용 목록 (비어 있으면 DM 불허, 승인 흐름에는 ownerShip 사용):

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

그룹 인가 (기본적으로 제한됨):

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

소유자 및 승인 시스템

비인가 사용자가 상호작용을 시도할 때 승인 요청을 받으려면 소유자 ship을 설정하세요:

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

소유자 ship은 모든 곳에서 자동으로 인가됩니다 — DM 초대가 자동 수락되고 채널 메시지가 항상 허용됩니다. 소유자를 dmAllowlistdefaultAuthorizedShips에 추가할 필요가 없습니다.

설정하면 소유자는 다음에 대한 DM 알림을 받습니다:

  • 허용 목록에 없는 ship의 DM 요청
  • 인가 없는 채널에서의 멘션
  • 그룹 초대 요청

자동 수락 설정

DM 초대 자동 수락 (dmAllowlist의 ship에 대해):

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

그룹 초대 자동 수락:

{
  channels: {
    tlon: {
      autoAcceptGroupInvites: true,
    },
  },
}

전달 대상 (CLI/cron)

openclaw message send 또는 cron 전달에서 사용하세요:

  • DM: ~sampel-palnet 또는 dm/~sampel-palnet
  • 그룹: chat/~host-ship/channel 또는 group:~host-ship/channel

번들 스킬

Tlon 플러그인에는 Tlon 작업에 대한 CLI 접근을 제공하는 번들 스킬(@tloncorp/tlon-skill)이 포함되어 있습니다:

  • 연락처: 프로필 조회/업데이트, 연락처 목록
  • 채널: 목록, 생성, 메시지 게시, 히스토리 가져오기
  • 그룹: 목록, 생성, 멤버 관리
  • DM: 메시지 전송, 메시지에 리액션
  • 리액션: 게시물 및 DM에 이모지 리액션 추가/제거
  • 설정: 슬래시 명령을 통한 플러그인 권한 관리

스킬은 플러그인이 설치되면 자동으로 사용 가능합니다.

기능

기능상태
다이렉트 메시지지원됨
그룹/채널지원됨 (기본적으로 멘션 게이팅)
스레드지원됨 (스레드 내 자동 답장)
리치 텍스트마크다운이 Tlon 형식으로 변환됨
이미지Tlon 스토리지에 업로드됨
리액션번들 스킬을 통해 지원
투표미지원
네이티브 명령지원됨 (기본적으로 소유자 전용)

문제 해결

먼저 다음을 실행하세요:

openclaw status
openclaw gateway status
openclaw logs --follow
openclaw doctor

일반적인 실패 원인:

  • DM이 무시됨: 발신자가 dmAllowlist에 없고 승인 흐름을 위한 ownerShip이 설정되지 않음.
  • 그룹 메시지가 무시됨: 채널이 검색되지 않았거나 발신자가 인가되지 않음.
  • 연결 오류: ship URL이 접근 가능한지 확인; 로컬 ship에는 allowPrivateNetwork를 활성화.
  • 인증 오류: 로그인 코드가 최신인지 확인 (코드는 순환됨).

설정 레퍼런스

전체 설정: Configuration

제공자 옵션:

  • 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.allowPrivateNetwork: localhost/LAN URL 허용 (SSRF 우회).
  • channels.tlon.ownerShip: 승인 시스템을 위한 소유자 ship (항상 인가됨).
  • channels.tlon.dmAllowlist: DM이 허용된 ship (비어 있으면 없음).
  • channels.tlon.autoAcceptDmInvites: 허용 목록 ship의 DM 자동 수락.
  • channels.tlon.autoAcceptGroupInvites: 모든 그룹 초대 자동 수락.
  • channels.tlon.autoDiscoverChannels: 그룹 채널 자동 검색 (기본값: true).
  • channels.tlon.groupChannels: 수동으로 고정된 채널 네스트.
  • channels.tlon.defaultAuthorizedShips: 모든 채널에 인가된 ship.
  • channels.tlon.authorization.channelRules: 채널별 인가 규칙.
  • channels.tlon.showModelSignature: 메시지에 모델 이름 추가.

참고

  • 그룹 응답은 멘션(예: ~your-bot-ship)이 있어야 응답합니다.
  • 스레드 답장: 인바운드 메시지가 스레드에 있으면 OpenClaw가 스레드 내에서 답장합니다.
  • 리치 텍스트: 마크다운 서식(굵게, 기울임, 코드, 헤더, 목록)이 Tlon의 네이티브 형식으로 변환됩니다.
  • 이미지: URL이 Tlon 스토리지에 업로드되고 이미지 블록으로 삽입됩니다.