comitia 0.3.0 → 0.4.0
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 +87 -63
- package/index.js +154 -144
- package/package.json +8 -3
- package/plugin/.claude-plugin/plugin.json +8 -2
- package/plugin/skills/ingest/SKILL.md +51 -43
- package/plugin/skills/problem/SKILL.md +311 -0
- package/plugin/skills/read/SKILL.md +43 -37
- package/plugin/skills/slack/SKILL.md +65 -54
- package/plugin/skills/sync/SKILL.md +24 -18
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: slack
|
|
3
|
-
description:
|
|
3
|
+
description: Use to post to Slack, or to edit or delete a message the bot posted — "send it to Slack", "post this to Slack", "share it in #channel", "let the team know", "delete what you just posted", "fix that message". Goes through the bot connected to Comitia. Always show the channel and the exact text and get approval before posting, editing or deleting.
|
|
4
4
|
allowed-tools:
|
|
5
5
|
- Bash(comitia *)
|
|
6
6
|
- Bash(z2o *)
|
|
@@ -9,81 +9,92 @@ allowed-tools:
|
|
|
9
9
|
- Write
|
|
10
10
|
---
|
|
11
11
|
|
|
12
|
-
# /comitia:slack —
|
|
12
|
+
# /comitia:slack — post to Slack
|
|
13
13
|
|
|
14
|
-
Comitia
|
|
15
|
-
|
|
14
|
+
The **bot** connected to Comitia posts on your behalf. It does not post under a person's name.
|
|
15
|
+
**The whole team sees this — never post a single word without approval.**
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
Request: `$ARGUMENTS`
|
|
18
18
|
|
|
19
|
-
## 1.
|
|
19
|
+
## 1. What to post
|
|
20
20
|
|
|
21
|
-
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
-
|
|
21
|
+
- If the message needs company context (a summary, a write-up of a discussion, a status),
|
|
22
|
+
**pull it with `comitia` and read it first** — same sequence as `/comitia:read`.
|
|
23
|
+
Don't fill gaps with guesses. Leave out what you couldn't find.
|
|
24
|
+
- If no channel was named, **ask.** Don't pick one by guessing.
|
|
25
|
+
- It can only post to channels the bot has been invited to.
|
|
25
26
|
|
|
26
|
-
## 2.
|
|
27
|
+
## 2. Draft — in Slack's markup
|
|
27
28
|
|
|
28
|
-
-
|
|
29
|
-
- **`#`
|
|
30
|
-
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
29
|
+
- Bold `*text*` · italic `_text_` · code `` `text` `` · lists `•` or `1.`
|
|
30
|
+
- **`#` headings, tables and `**bold**` do not work in Slack** — the characters show up literally.
|
|
31
|
+
- Keep it short. People skim Slack — lead with the point, and push long detail to a link or
|
|
32
|
+
"details in the Comitia wiki under ○○".
|
|
33
|
+
- End with one line saying **who posted it**: `_— <name> · posted via the Comitia bot_`
|
|
34
|
+
If you don't know the name, ask.
|
|
35
|
+
- If it contains a password, token, account number, salary or anything like that,
|
|
36
|
+
**take it out and say you did.**
|
|
34
37
|
|
|
35
|
-
## 3. 🔴
|
|
38
|
+
## 3. 🔴 Approval — never skip this
|
|
36
39
|
|
|
37
|
-
|
|
40
|
+
Show the person **the channel and the full text**, exactly as it will go out, and ask
|
|
41
|
+
*"post this to #○○ as written?"*
|
|
38
42
|
|
|
39
|
-
-
|
|
40
|
-
-
|
|
41
|
-
-
|
|
43
|
+
- Post only on a **clear yes** ("post it", "yep"). If the answer is ambiguous, ask again.
|
|
44
|
+
- If they ask for changes, show the **whole** revised text and ask again.
|
|
45
|
+
- **One approval covers one message.** Ask again for the next one.
|
|
42
46
|
|
|
43
|
-
## 4.
|
|
47
|
+
## 4. Posting
|
|
44
48
|
|
|
45
|
-
|
|
49
|
+
Write to a temp file and post that, so quotes and line breaks don't get mangled by the shell.
|
|
46
50
|
|
|
47
51
|
```
|
|
48
|
-
comitia slack
|
|
49
|
-
comitia slack
|
|
50
|
-
comitia slack
|
|
51
|
-
comitia slack
|
|
52
|
-
comitia slack
|
|
53
|
-
comitia slack
|
|
54
|
-
comitia slack
|
|
52
|
+
comitia slack <channel> <tmpfile> as a new message
|
|
53
|
+
comitia slack <channel> <tmpfile> --thread-of "<query>" as a reply in that message's thread
|
|
54
|
+
comitia slack <channel> <tmpfile> --thread <ts> when you know the parent ts
|
|
55
|
+
comitia slack <channel> <tmpfile> --edit-of "<query>" replace a bot message wholesale (updating a checklist, etc.)
|
|
56
|
+
comitia slack <channel> <tmpfile> --edit <ts> when you know the ts to edit
|
|
57
|
+
comitia slack <channel> --delete-of "<query>" delete that bot message (no file · cannot be undone)
|
|
58
|
+
comitia slack <channel> --delete <ts> when you know the ts to delete
|
|
55
59
|
```
|
|
56
60
|
|
|
57
|
-
|
|
58
|
-
|
|
61
|
+
Give the channel by name, like `project_0to1` (the `#` is optional). Every post is recorded in
|
|
62
|
+
the Comitia timeline. Once posted, briefly say **which channel** (and, for a thread, under which
|
|
63
|
+
message) it went to.
|
|
59
64
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
65
|
+
**Threads**: when the person says "in the ○○ thread", pass **part of that message's text** to
|
|
66
|
+
`--thread-of` (e.g. `"0913 weekly"` for a weekly announcement). It takes the most recent match
|
|
67
|
+
among the channel's last 100 messages as the parent — the parent can be a human's message.
|
|
68
|
+
If it can't find one it says so; change the query or ask the person for the ts. When you ask for
|
|
69
|
+
approval, show **which message it will hang under** as well.
|
|
63
70
|
|
|
64
|
-
## 5. 🗑️
|
|
71
|
+
## 5. 🗑️ Deleting — cannot be undone
|
|
65
72
|
|
|
66
|
-
|
|
73
|
+
For pulling back something posted by mistake. **Only messages the bot posted.**
|
|
67
74
|
|
|
68
|
-
-
|
|
69
|
-
|
|
70
|
-
-
|
|
71
|
-
|
|
75
|
+
- Before deleting, show **which channel and which message** (at least the first line) and ask
|
|
76
|
+
*"delete this? It can't be undone."*
|
|
77
|
+
- `--delete-of` searches the bot's last 100 messages — if it finds nothing it says so;
|
|
78
|
+
change the query or get the ts.
|
|
79
|
+
- ⚠️ **Deleting a thread parent takes the replies with it.** If the message has replies, say so first.
|
|
80
|
+
- Deletions are recorded in the timeline (channel, ts, first line).
|
|
72
81
|
|
|
73
|
-
##
|
|
82
|
+
## If you get stuck
|
|
74
83
|
|
|
75
|
-
|
|
|
84
|
+
| What it says | What to do |
|
|
76
85
|
|---|---|
|
|
77
|
-
| `chat:write`
|
|
78
|
-
|
|
|
79
|
-
|
|
|
80
|
-
|
|
|
81
|
-
|
|
|
86
|
+
| missing `chat:write` scope | Pass the message along as-is — whoever created the Slack app has to add the scope and reinstall |
|
|
87
|
+
| bot is not in the channel | Ask the person to run `/invite @bot-name` in that channel |
|
|
88
|
+
| no write permission | It needs a token that covers sources and organizing. The person reconnects it themselves — **never take a token through the chat** |
|
|
89
|
+
| message too long | Ask the person whether to split it |
|
|
90
|
+
| can only delete the bot's own messages | It's a human's message — tell them to delete it in Slack themselves |
|
|
82
91
|
|
|
83
|
-
##
|
|
92
|
+
## What it can't do
|
|
84
93
|
|
|
85
|
-
|
|
86
|
-
|
|
94
|
+
New messages, thread replies, and **editing or deleting the bot's own messages** all work.
|
|
95
|
+
**DMs, and editing or deleting a human's messages, do not** — if asked, say so and point them
|
|
96
|
+
to doing it in Slack.
|
|
87
97
|
|
|
88
|
-
|
|
89
|
-
|
|
98
|
+
**Editing replaces the body wholesale.** Even for a small change, write the full new body to the
|
|
99
|
+
file, and when you ask for approval point out what changed (e.g. "0-1 · 1-4 … 17 items marked ✅").
|
|
100
|
+
It only matches the bot's own messages, so a human's message will never match.
|
|
@@ -1,35 +1,41 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sync
|
|
3
|
-
description:
|
|
3
|
+
description: Use when connected sources like Slack or meeting notes need to be pulled in right now — "sync Slack", "grab the meeting that just ended", "pull the latest", "run sync", "the Slack message I just posted isn't showing". Runs comitia sync instead of waiting for the hourly collection.
|
|
4
4
|
allowed-tools:
|
|
5
5
|
- Bash(comitia *)
|
|
6
6
|
- Bash(z2o *)
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
# /comitia:sync —
|
|
9
|
+
# /comitia:sync — pull it in now
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
Automatic collection runs **on the hour**. Anything posted to Slack or any meeting that
|
|
12
|
+
ended since then is not in Comitia yet. This skill pulls it in without waiting.
|
|
13
|
+
**It only pulls** — the wiki doesn't change; the items land in the organize queue.
|
|
13
14
|
|
|
14
|
-
|
|
15
|
+
Request: `$ARGUMENTS`
|
|
15
16
|
|
|
16
|
-
## 1.
|
|
17
|
+
## 1. How stale is it?
|
|
17
18
|
|
|
18
|
-
`comitia recent`
|
|
19
|
-
|
|
19
|
+
`comitia recent` and `comitia find` print a **collection status** line at the top —
|
|
20
|
+
"Slack 12 minutes ago · Tiro 3 hours ago …". If what you're looking for is more recent
|
|
21
|
+
than that, it's time to pull.
|
|
20
22
|
|
|
21
|
-
## 2.
|
|
23
|
+
## 2. Pull
|
|
22
24
|
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
+
- Nothing specified — pull everything connected: `comitia sync`
|
|
26
|
+
- One source: `comitia sync slack` · `comitia sync tiro` · `comitia sync notion`
|
|
25
27
|
|
|
26
|
-
## 3.
|
|
28
|
+
## 3. Report briefly
|
|
27
29
|
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
-
|
|
30
|
+
- Each connection reports how many new items arrived. Pass it along **in a line or two**,
|
|
31
|
+
as-is — "3 new Slack items, 0 from Tiro."
|
|
32
|
+
- Tiro only brings in meetings **whose summary already exists.** If some are still waiting
|
|
33
|
+
on a summary, say so and suggest pulling again shortly.
|
|
34
|
+
- If it says you lack permission — pulling needs a write token (sources and organizing).
|
|
35
|
+
With a read-only token, say so and wait for the top of the hour.
|
|
31
36
|
|
|
32
|
-
## 4.
|
|
37
|
+
## 4. Next
|
|
33
38
|
|
|
34
|
-
-
|
|
35
|
-
|
|
39
|
+
- If you were looking for something recent, search again with `comitia recent` / `comitia find` —
|
|
40
|
+
the sequence for that is `/comitia:read`.
|
|
41
|
+
- If organizing is also wanted, follow `/comitia:ingest` (`build` → `pending` → summarize).
|