@tloncorp/tlon-skill 0.3.4 → 0.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +16 -1
  2. package/SKILL.md +90 -6
  3. package/package.json +5 -5
package/README.md CHANGED
@@ -104,6 +104,13 @@ tlon --url https://bot.tlon.network --cookie "urbauth-~bot=0v..." contacts self
104
104
  # List your groups
105
105
  tlon channels groups
106
106
 
107
+ # Create a group channel
108
+ # (preferred alias; tlon groups add-channel still works)
109
+ tlon channels create ~host/group-slug "Projects" --kind chat
110
+
111
+ # Rename a channel
112
+ tlon channels rename chat/~host/project-updates "Team Updates"
113
+
107
114
  # Get recent mentions
108
115
  tlon activity mentions --limit 10
109
116
 
@@ -115,6 +122,14 @@ tlon contacts update-profile --nickname "My Name"
115
122
 
116
123
  # Create a group
117
124
  tlon groups create "My Group" --description "A cool group"
125
+
126
+ # Join a public or invited group; private groups without an invite request one
127
+ tlon groups join ~host/group-slug
128
+
129
+ # Manage group invite flow explicitly
130
+ tlon groups request-invite ~host/group-slug
131
+ tlon groups accept-invite ~host/group-slug
132
+ tlon groups reject-invite ~host/group-slug
118
133
  ```
119
134
 
120
135
  ## Features
@@ -122,7 +137,7 @@ tlon groups create "My Group" --description "A cool group"
122
137
  - **Activity**: Mentions, replies, unreads (with nicknames)
123
138
  - **Channels**: List DMs, group DMs, subscribed groups (nicknames shown), reader/writer permissions
124
139
  - **Contacts**: List, get, update profiles
125
- - **Groups**: Create, join, invite, roles, privacy (member nicknames shown)
140
+ - **Groups**: Create, join, invite/request flows, roles, privacy (member nicknames shown)
126
141
  - **Hooks**: Manage channel hooks (add, edit, delete, order, config, cron)
127
142
  - **Messages**: History, search (author nicknames shown)
128
143
  - **DMs**: Send, react, accept/decline
package/SKILL.md CHANGED
@@ -11,6 +11,30 @@ Use the `tlon` command for reading data, managing channels/groups/contacts, and
11
11
 
12
12
  When running as an OpenClaw skill, use the built-in `message` tool for sending outbound messages (DMs and channel posts). The `tlon` command is for reading data, administration, and management — not for sending messages. The `message` tool routes through the proper delivery infrastructure (threading, bot profile, rate limiting).
13
13
 
14
+ ### Diary / Notebook Thread Replies
15
+
16
+ Tlon diary/notebook channels are special: a channel-level `send` creates a **new notebook post/note**. Do **not** use `message` with `action: "send"` in a diary channel unless you intentionally want to create a new notebook post.
17
+
18
+ For normal conversation inside an existing diary/notebook post, use the `message` tool with `action: "reply"` and reply to the **parent diary post id**, not the newest reply id.
19
+
20
+ Working pattern:
21
+
22
+ ```json
23
+ {
24
+ "action": "reply",
25
+ "channel": "tlon",
26
+ "target": "diary/~host/slug",
27
+ "messageId": "170.141.184.507.950.303.933.087.606.997.052.817.408",
28
+ "message": "Reply text here"
29
+ }
30
+ ```
31
+
32
+ Important details:
33
+ - Use the dotted `@ud` post id format when available.
34
+ - `messageId` should be the parent notebook post/thread id.
35
+ - After sending, verify with `tlon messages post <diary-nest> <parent-post-id>` when correctness matters.
36
+ - If the tool reports success but the reply is not visible under the parent post, treat it as a delivery/plugin issue and do not claim success until verified.
37
+
14
38
  ## Installation
15
39
 
16
40
  **npm (Node.js):**
@@ -150,6 +174,8 @@ tlon channels dms # List DM contacts (w
150
174
  tlon channels groups # List subscribed groups
151
175
  tlon channels all # List everything
152
176
  tlon channels info chat/~host/slug # Get channel details
177
+ tlon channels create ~host/slug "Projects" --kind chat # Create a group channel
178
+ tlon channels rename chat/~host/slug "New Title" # Rename a channel
153
179
  tlon channels update chat/~host/slug --title "New Title" # Update metadata
154
180
  tlon channels delete chat/~host/slug # Delete a channel
155
181
 
@@ -162,6 +188,14 @@ tlon channels add-readers ~host/group chat/~host/slug admin # Restrict viewin
162
188
  tlon channels del-readers ~host/group chat/~host/slug admin # Open viewing
163
189
  ```
164
190
 
191
+ Help works for both the command and subcommands:
192
+
193
+ ```bash
194
+ tlon channels --help
195
+ tlon channels create --help
196
+ tlon channels rename --help
197
+ ```
198
+
165
199
  Notes on permissions:
166
200
 
167
201
  - Empty writers list = anyone in the group can post (default for chat)
@@ -194,18 +228,24 @@ Full group management.
194
228
  tlon groups list # List your groups
195
229
  tlon groups info ~host/slug # Get group details
196
230
  tlon groups create "Name" [--description "..."] # Create a group
197
- tlon groups join ~host/slug # Join a group
231
+ tlon groups join ~host/slug # Join public/invited group, or request invite if private
232
+ tlon groups request-invite ~host/slug # Request invite to a private group
233
+ tlon groups accept-invite ~host/slug # Accept an existing group invite
234
+ tlon groups reject-invite ~host/slug # Reject an existing group invite
235
+ tlon groups cancel-join ~host/slug # Cancel a pending join
236
+ tlon groups rescind-request ~host/slug # Cancel an invite request
198
237
  tlon groups leave ~host/slug # Leave a group
199
238
  tlon groups delete ~host/slug # Delete (host only)
200
239
  tlon groups update ~host/slug --title "..." [--description "..."]
201
240
 
202
241
  # Members (shown with nicknames when available)
203
242
  tlon groups invite ~host/slug ~ship1 ~ship2 # Invite members
243
+ tlon groups revoke-invite ~host/slug ~ship1 # Revoke pending member invite
204
244
  tlon groups kick ~host/slug ~ship1 # Kick members
205
245
  tlon groups ban ~host/slug ~ship1 # Ban members
206
246
  tlon groups unban ~host/slug ~ship1 # Unban members
207
- tlon groups accept-join ~host/slug ~ship1 # Accept join request
208
- tlon groups reject-join ~host/slug ~ship1 # Reject join request
247
+ tlon groups accept-join ~host/slug ~ship1 # Approve a member join request
248
+ tlon groups reject-join ~host/slug ~ship1 # Deny a member join request
209
249
  tlon groups set-privacy ~host/slug public|private|secret # Set privacy
210
250
 
211
251
  # Roles
@@ -232,8 +272,27 @@ Roles vs Admin:
232
272
  tlon groups add-channel ~host/slug "Name" [--kind chat|diary|heap]
233
273
  ```
234
274
 
275
+ `tlon groups add-channel` remains supported, but for agent/tool use prefer the more discoverable channel-centric form:
276
+
277
+ ```bash
278
+ tlon channels create ~host/slug "Projects" --kind chat
279
+ ```
280
+
281
+ Help works here too:
282
+
283
+ ```bash
284
+ tlon groups --help
285
+ tlon groups add-channel --help
286
+ ```
287
+
235
288
  Group format: `~host-ship/group-slug`
236
289
 
290
+ Join behavior:
291
+ - `join` first checks whether you are already a member, then checks foreign/unjoined group state for a valid invite.
292
+ - Invited groups and public groups use the backend join action.
293
+ - Private groups without an invite use the invite-request action.
294
+ - Secret groups require an invite.
295
+
237
296
  ### Hooks
238
297
 
239
298
  Manage channel hooks — functions that run on triggers (posts, replies, reactions, crons).
@@ -343,7 +402,7 @@ Manage channel posts (reactions, edits, deletes).
343
402
  tlon posts react chat/~host/slug 170.141... "👍" # React to a post
344
403
  tlon posts unreact chat/~host/slug 170.141... # Remove reaction
345
404
  tlon posts edit chat/~host/slug 170.141... "New text" # Edit with plain text
346
- tlon posts edit diary/~host/slug 170.141... --title "T" --image <url> --content rich.json # Edit notebook
405
+ tlon posts edit diary/~host/slug 170.141... --title "T" --image <url> --content story.json # Edit notebook
347
406
  tlon posts delete chat/~host/slug 170.141... # Delete a post
348
407
  ```
349
408
 
@@ -355,11 +414,36 @@ Post to diary/notebook channels.
355
414
 
356
415
  ```bash
357
416
  tlon notebook diary/~host/slug "Title" # Post with no body
358
- tlon notebook diary/~host/slug "Title" --content rich.json # Post with Story JSON
417
+ tlon notebook diary/~host/slug "Title" --content story.json # Post with Story JSON
418
+ tlon notebook diary/~host/slug "Title" --markdown post.md # Post with Markdown
419
+ cat post.md | tlon notebook diary/~host/slug "Title" --markdown-stdin
359
420
  tlon notebook diary/~host/slug "Title" --image <url> # Post with cover image
360
421
  ```
361
422
 
362
- The `--content` file should be Story JSON format (array of verses with headers, code blocks, formatting). See the [Story types in tlon-apps](https://github.com/tloncorp/tlon-apps/blob/develop/packages/shared/src/urbit/content.ts).
423
+ The `--content` file should be **Urbit Story JSON**: an array of verses accepted by the ship's `story-json` decoder. Use `--markdown` for Markdown files instead of passing Markdown or editor-export JSON through `--content`.
424
+
425
+ Working examples:
426
+
427
+ ```json
428
+ [{"inline": ["Hello world"]}]
429
+ ```
430
+
431
+ ```json
432
+ [{"block": {"header": {"tag": "h1", "content": ["Title"]}}}]
433
+ ```
434
+
435
+ ```json
436
+ [{"inline": ["Use ", {"inline-code": "ha-q"}, " for entity queries."]}]
437
+ ```
438
+
439
+ Important gotcha:
440
+ - Do **not** assume newer block-editor JSON shapes or arbitrary markdown-export JSON will work.
441
+ - If posting fails with a `channel-action-2` cast error mentioning `content -> add -> post -> action -> channel`, the first thing to check is whether the content file matches the ship's Story JSON shape.
442
+ - When debugging, post a minimal one-verse story first so you do not create duplicate full notebook posts.
443
+
444
+ See the ship-side decoder and types here:
445
+ - `tlon-apps/desk/lib/story-json.hoon`
446
+ - [Story types in tlon-apps](https://github.com/tloncorp/tlon-apps/blob/develop/packages/shared/src/urbit/content.ts)
363
447
 
364
448
  ### Upload
365
449
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tloncorp/tlon-skill",
3
- "version": "0.3.4",
3
+ "version": "0.3.6",
4
4
  "description": "Tlon/Urbit skill for OpenClaw agents",
5
5
  "type": "module",
6
6
  "bin": {
@@ -21,10 +21,10 @@
21
21
  "postinstall": "node scripts/postinstall.js"
22
22
  },
23
23
  "optionalDependencies": {
24
- "@tloncorp/tlon-skill-darwin-arm64": "0.3.4",
25
- "@tloncorp/tlon-skill-darwin-x64": "0.3.4",
26
- "@tloncorp/tlon-skill-linux-x64": "0.3.4",
27
- "@tloncorp/tlon-skill-linux-arm64": "0.3.4"
24
+ "@tloncorp/tlon-skill-darwin-arm64": "0.3.6",
25
+ "@tloncorp/tlon-skill-darwin-x64": "0.3.6",
26
+ "@tloncorp/tlon-skill-linux-x64": "0.3.6",
27
+ "@tloncorp/tlon-skill-linux-arm64": "0.3.6"
28
28
  },
29
29
  "devDependencies": {
30
30
  "@tloncorp/api": "^0.0.4",