slack-term 1.25.0 → 1.26.1
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.
- package/README.md +30 -8
- package/SKILL.md +20 -7
- package/dist/cli.js +86 -86
- package/package.json +4 -2
- package/ts/cli.ts +78 -29
package/README.md
CHANGED
|
@@ -143,13 +143,17 @@ The other two are the flags:
|
|
|
143
143
|
They stack with each other and with ❗/❓; `--state stuck` matches a task with any of them.
|
|
144
144
|
|
|
145
145
|
```sh
|
|
146
|
-
|
|
146
|
+
# Two listings, split by whose reactions count — the distinction is the command,
|
|
147
|
+
# not a flag, so "everyone's list" and "my list" can't be confused at a glance.
|
|
148
|
+
slack todo ls # EVERYONE's tasks (has:)
|
|
149
|
+
slack mytodo ls # only tasks YOU reacted to (hasmy:)
|
|
150
|
+
|
|
147
151
|
slack todo ls --state untriaged # marked, no progress reaction yet
|
|
148
152
|
slack todo ls --state doing --in "#eng" # scoped to a channel
|
|
149
|
-
slack
|
|
153
|
+
slack mytodo ls --state stuck # my unfinished tasks carrying a reason flag
|
|
150
154
|
slack todo ls --state stuck --from "@alice" # …and it was alice who wrote it
|
|
151
|
-
slack todo ls --from me # tasks on my own messages
|
|
152
|
-
slack todo ls --
|
|
155
|
+
slack todo ls --from me # tasks on my own messages (any reactor)
|
|
156
|
+
slack todo ls --mine # same as `slack mytodo ls`
|
|
153
157
|
slack todo set "#eng:1700000000.000100" doing
|
|
154
158
|
slack todo flag "<permalink>" waiting # their ball now
|
|
155
159
|
slack todo flag "<permalink>" needs-discussion
|
|
@@ -160,10 +164,15 @@ slack todo doctor --in "#eng" --fix # keep the highest-priority one
|
|
|
160
164
|
|
|
161
165
|
Notes:
|
|
162
166
|
|
|
163
|
-
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
+
- **`todo ls` vs `mytodo ls`** — `todo ls` matches anyone's reactions (`has:`), `mytodo ls`
|
|
168
|
+
only your own (`hasmy:`). Everything else about them is identical. Both print a
|
|
169
|
+
`From: @handle (Uxxxx) — Workspace` line first, because `hasmy:` resolves against
|
|
170
|
+
whichever account the token belongs to — "my tasks" means nothing until you know who
|
|
171
|
+
*my* is, and a stale profile otherwise lists someone else's list without saying so.
|
|
172
|
+
(`todo ls --mine` is a one-off shortcut to the narrow view.)
|
|
173
|
+
- Both are read-only and run **exactly one** `search.messages` call — priority is expressed
|
|
174
|
+
as negated `has:`/`hasmy:` terms in the query, not as multiple searches
|
|
175
|
+
(`search.messages` is Tier 2, ~20 req/min). Slack's search index lags a little
|
|
167
176
|
behind `reactions.add`, so a just-set task may take a moment to appear.
|
|
168
177
|
- `todo set` **adds the new reaction before removing the old ones**, and removes serially.
|
|
169
178
|
The reverse order would leave a window with no progress reaction at all — a crash or a
|
|
@@ -287,6 +296,19 @@ delivery (3-second interval). Supports `--since=<duration>` for backfill,
|
|
|
287
296
|
that mention you. Uses `conversations.history?oldest=<ts>` as a cursor so
|
|
288
297
|
already-seen messages are never re-printed, even across reconnects.
|
|
289
298
|
|
|
299
|
+
## Ecosystem
|
|
300
|
+
|
|
301
|
+
This CLI is the human-comms surface of the
|
|
302
|
+
[agent-yes](https://github.com/snomiao/agent-yes) fleet: agent-yes runs, watches and
|
|
303
|
+
delegates to AI coding agents, and `slack` is how they read and answer the humans they
|
|
304
|
+
work with. Neither depends on the other — they share a stance rather than a library:
|
|
305
|
+
file-based state over daemons, one command surface across two runtimes, gates on the
|
|
306
|
+
irreversible and warnings on the merely unwise, and no real operational data in a public
|
|
307
|
+
repo.
|
|
308
|
+
|
|
309
|
+
A write-up of the design decisions behind the confirm gate lives on the agent-yes lab:
|
|
310
|
+
[A confirm code that goes stale](https://lab.agent-yes.com/2026-08-11-slack-term-safe-writes).
|
|
311
|
+
|
|
290
312
|
## Related / prior art
|
|
291
313
|
|
|
292
314
|
- [`slkcli`](https://www.npmjs.com/package/slkcli) by
|
package/SKILL.md
CHANGED
|
@@ -8,11 +8,15 @@ description: "Terminal Slack CLI — read news/mentions/DMs/channel history, ful
|
|
|
8
8
|
A lightweight Slack CLI for quick workspace interaction from the terminal.
|
|
9
9
|
Two implementations share one command surface (parity-tested):
|
|
10
10
|
|
|
11
|
-
- **TypeScript** (bun-first), published as
|
|
11
|
+
- **TypeScript** (bun-first), published as `slack-term` on npm.
|
|
12
12
|
- **Rust** native binary, installable via `cargo install`.
|
|
13
13
|
|
|
14
14
|
Binary name: `slack` (also aliased as `sl` / invoked via `sc sl ...` in some setups).
|
|
15
15
|
|
|
16
|
+
Part of the [agent-yes](https://github.com/snomiao/agent-yes) ecosystem — this is the CLI an
|
|
17
|
+
agent uses to talk to humans. Design notes:
|
|
18
|
+
[lab.agent-yes.com](https://lab.agent-yes.com/2026-08-11-slack-term-safe-writes).
|
|
19
|
+
|
|
16
20
|
## When to use
|
|
17
21
|
|
|
18
22
|
- User wants to read Slack activity, mentions, DMs, or channel history without opening the Slack app.
|
|
@@ -25,10 +29,13 @@ Binary name: `slack` (also aliased as `sl` / invoked via `sc sl ...` in some set
|
|
|
25
29
|
TypeScript (recommended — any platform with Node 18+):
|
|
26
30
|
|
|
27
31
|
```sh
|
|
28
|
-
npm install -g
|
|
29
|
-
# or: bun add -g
|
|
32
|
+
npm install -g slack-term
|
|
33
|
+
# or: bun add -g slack-term / pnpm add -g slack-term
|
|
30
34
|
```
|
|
31
35
|
|
|
36
|
+
> Previously published as `@snomiao/slack`; that name is deprecated on npm and
|
|
37
|
+
> no longer updated. Install `slack-term`.
|
|
38
|
+
|
|
32
39
|
Rust (native binary):
|
|
33
40
|
|
|
34
41
|
```sh
|
|
@@ -79,9 +86,10 @@ slack react "#general:1700000000.000100" white_check_mark
|
|
|
79
86
|
slack react "<permalink>" eyes --remove # take it back
|
|
80
87
|
|
|
81
88
|
# Task tracking on reactions — 📌 marks a task, a second reaction holds progress
|
|
82
|
-
slack todo ls #
|
|
89
|
+
slack todo ls # EVERYONE's open tasks (has:)
|
|
90
|
+
slack mytodo ls # only tasks YOU reacted to (hasmy:)
|
|
83
91
|
slack todo ls --state untriaged --in "#general" # marked but no progress yet
|
|
84
|
-
slack
|
|
92
|
+
slack mytodo ls --state stuck # my unfinished tasks + a reason flag
|
|
85
93
|
slack todo set "#general:1700000000.000100" doing # pending|doing|done|dropped
|
|
86
94
|
slack todo ls --state stuck --from "@alice" # …and alice wrote it
|
|
87
95
|
slack todo flag "<permalink>" waiting # alert|needs-discussion|waiting|blocked
|
|
@@ -148,8 +156,13 @@ Reason flags stack independently of progress and of each other: ❗ `exclamation
|
|
|
148
156
|
|
|
149
157
|
(⏳ `hourglass_flowing_sand` pending already means "my ball", which is why only these two are needed.)
|
|
150
158
|
|
|
151
|
-
-
|
|
152
|
-
|
|
159
|
+
- **`todo ls` = anyone's reactions (`has:`), `mytodo ls` = only yours (`hasmy:`).** Two
|
|
160
|
+
commands rather than a flag, so the two lists can't be mistaken for each other. Both
|
|
161
|
+
print `From: @handle (Uxxxx) — Workspace` first: `hasmy:` resolves against whoever the
|
|
162
|
+
token is, so "my tasks" is only meaningful once you know who *my* is. `todo ls --mine`
|
|
163
|
+
is a shortcut to the narrow view; `--shared` is accepted but is now the default.
|
|
164
|
+
- Both are read-only and issue **one** `search.messages` call; priority is encoded as
|
|
165
|
+
negated `has:`/`hasmy:` terms.
|
|
153
166
|
`search.messages` returns no reaction data, so this filtering can only happen in the
|
|
154
167
|
query. The search index lags slightly behind `reactions.add`.
|
|
155
168
|
- `todo set` adds the target reaction **first**, then removes the stale ones one at a time.
|