comitia 0.3.0 → 0.4.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/package.json CHANGED
@@ -1,16 +1,21 @@
1
1
  {
2
2
  "name": "comitia",
3
- "version": "0.3.0",
4
- "description": "Comitia — 슬랙·회의·문서에 흩어진 회사의 말을 내가 쓰는 AI에서 꺼내 쓴다",
3
+ "version": "0.4.1",
4
+ "description": "Ask anything about your company and get the answer with its source — your Slack, meetings and docs as a linked wiki, from the AI you already use",
5
5
  "keywords": [
6
6
  "comitia",
7
+ "company-wiki",
8
+ "knowledge-base",
7
9
  "ontology",
8
10
  "wiki",
9
11
  "slack",
10
12
  "cli",
13
+ "mcp",
11
14
  "llm",
12
15
  "claude",
13
- "mcp"
16
+ "claude-code",
17
+ "agent",
18
+ "context"
14
19
  ],
15
20
  "homepage": "https://z2o.kr",
16
21
  "bugs": {
@@ -2,10 +2,16 @@
2
2
  "$schema": "https://anthropic.com/claude-code/plugin.schema.json",
3
3
  "name": "comitia",
4
4
  "version": "0.1.0",
5
- "description": "Comitia — 회사 위키·슬랙·회의록을 읽고(/comitia:read) 위키에 정리해 넣고(/comitia:ingest), 슬랙에 올리고(/comitia:slack), 지금 당겨온다(/comitia:sync). comitia CLI 를 감싼다.",
5
+ "description": "Comitia — read your company's wiki, Slack and meeting notes (/comitia:read), organize them into the wiki (/comitia:ingest), surface the things you can only learn by changing something (/comitia:problem), post to Slack (/comitia:slack), and pull the latest right now (/comitia:sync). Wraps the comitia CLI.",
6
6
  "author": {
7
7
  "name": "Lindy Operation"
8
8
  },
9
9
  "homepage": "https://z2o.kr",
10
- "keywords": ["comitia", "wiki", "ontology", "slack"]
10
+ "keywords": [
11
+ "comitia",
12
+ "wiki",
13
+ "ontology",
14
+ "slack",
15
+ "experiment"
16
+ ]
11
17
  }
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ingest
3
- description: 자료를 Comitia 위키에 넣고 정리할 때 쓴다 — "이거 위키에 올려", "회의록 comitia 에 정리해", "pending 정리해", "온톨로지 정리해", "슬랙 들어온 거 요약해 둬". 원본을 넣고, 관련 문서를 찾아 읽고, 고쳐 쓴 요약을 남긴다. Comitia 의 AI(organize)에 맡기지 않고 내가 한다.
3
+ description: Use to put material into the Comitia wiki and organize it — "add this to the wiki", "organize these meeting notes in comitia", "clear the pending queue", "tidy up the ontology", "summarize what came in on Slack". Push the original in, find and read the related pages, and leave a rewritten summary. Do it yourself rather than handing it to Comitia's own AI (organize).
4
4
  allowed-tools:
5
5
  - Bash(comitia *)
6
6
  - Bash(z2o *)
@@ -9,93 +9,101 @@ allowed-tools:
9
9
  - Write
10
10
  ---
11
11
 
12
- # /comitia:ingest — 위키에 정리해 넣기
12
+ # /comitia:ingest — organize it into the wiki
13
13
 
14
- **정리는 내가 한다.** `comitia organize`(Comitia 의 AI)는 사람이 그렇게 해 달라고 할 때만 부른다.
14
+ **You do the organizing.** Only call `comitia organize` (Comitia's own AI) when the person
15
+ explicitly asks for that.
15
16
 
16
- 요청: `$ARGUMENTS`
17
+ Request: `$ARGUMENTS`
17
18
 
18
- ## 0. 규칙부터 — 매번
19
+ ## 0. Rules first — every time
19
20
 
20
21
  ```
21
22
  comitia rules
22
23
  ```
23
24
 
24
- 축 구성·문서 형식·건드리지 않을 곳이 거기 있다. **회사마다 다르고 사람이 고쳐 두었을 수 있다.**
25
- 이 스킬은 **순서**를, `comitia rules` 는 **규격**을 맡는다. 둘이 어긋나면 **`comitia rules` 를 따른다.**
25
+ The axes, the page format and the places you must not write are all there. **They differ per
26
+ company and the person may have edited them.** This skill owns the **sequence**;
27
+ `comitia rules` owns the **format**. When they disagree, **`comitia rules` wins.**
26
28
 
27
- ## 1. 넣기 — 넣을 원본이 있을 때만
29
+ ## 1. Push — only if there's an original to push
28
30
 
29
31
  ```
30
- comitia find <제목의 핵심 낱말> 이미 들어와 있나 먼저 본다
31
- comitia push "<제목>" <파일> 없을 때만
32
+ comitia find <key word from the title> check whether it's already in
33
+ comitia push "<title>" <file> only if it isn't
32
34
  ```
33
35
 
34
- - ⚠️ **슬랙·티로·캘린더는 매시 자동 수집된다.** 회의록을 손으로 또 넣으면 **같은 회의가 두 벌**이 된다.
35
- `find` 로 찾아지면 넣지 않는다. 방금 끝난 회의면 **`comitia sync` 로 지금 당겨온 뒤** 다시 `find` 한다
36
- (티로는 요약이 만들어진 뒤에야 들어온다 — 그래도 없으면 그때 `push`).
37
- - 원본은 **한 글자도 고치지 않고** 넣는다. 요약은 넣지 않는다 — 요약은 5단계에서 위키에 쓴다.
38
- - 비밀번호·토큰·계좌번호가 보이면 **넣기 전에 사람에게 묻는다.**
36
+ - ⚠️ **Slack, Tiro and calendar are collected automatically every hour.** Pushing meeting notes
37
+ by hand again gives you **two copies of the same meeting.** If `find` turns it up, don't push.
38
+ For a meeting that just ended, **pull it now with `comitia sync`** and run `find` again
39
+ (Tiro only delivers a meeting once its summary exists — if it's still missing after that, push).
40
+ - Push the original **without changing a character.** Don't push a summary — summaries go into
41
+ the wiki in step 5.
42
+ - If you see a password, token or account number, **ask the person before pushing.**
39
43
 
40
- ## 2. 뼈대 — 한 번
44
+ ## 2. Build the skeleton — once
41
45
 
42
46
  ```
43
47
  comitia build
44
48
  ```
45
49
 
46
- 원문(`docs/`)·장부·표를 **코드가** 만든다(0원). 이게 없으면 요약에 건 링크가 깨진다.
47
- **두 번 부르지 않는다.**
50
+ Code builds the originals (`docs/`), the ledger and the tables (costs nothing). Without this,
51
+ the links in your summary break. **Don't call it twice.**
48
52
 
49
- ## 3. 할 일 보기
53
+ ## 3. See what needs doing
50
54
 
51
55
  ```
52
- comitia pending 요약이 필요한 원본
53
- comitia raw <id> <id> ... 한 번에 여러 개 읽는다
56
+ comitia pending originals that need a summary
57
+ comitia raw <id> <id> ... read several at once
54
58
  ```
55
59
 
56
- 잡담뿐인 원본도 있다. **남길 사실만** 추린다 — 누가·무엇을·언제·숫자.
60
+ Some originals are only chatter. Pull out **only the facts worth keeping** — who, what, when, numbers.
57
61
 
58
- ## 4. 붙일 자리 찾기 — 건너뛰지 않는다
62
+ ## 4. Find where it belongs — don't skip this
59
63
 
60
64
  ```
61
65
  comitia list topics/
62
- comitia search <낱말>
63
- comitia read topics/<후보>.md
66
+ comitia search <word>
67
+ comitia read topics/<candidate>.md
64
68
  ```
65
69
 
66
- **새 문서는 맞는 주제가 정말 없을 때만** 만든다. 새 문서만 늘리면 위키가 누적되지 않고 흩어진다.
67
- 원문 문서의 경로는 `comitia list docs/` 로 확인한다 — **2단계가 만든 경로를 그대로** 쓴다.
70
+ **Create a new page only when no existing topic really fits.** If you only ever add new pages,
71
+ the wiki scatters instead of accumulating. Check the original's path with `comitia list docs/` —
72
+ use **exactly the path step 2 created.**
68
73
 
69
- ## 5. 고쳐 쓰기
74
+ ## 5. Rewrite
70
75
 
71
- 주제 문서는 두 층이다(자세한 모양은 `comitia rules`).
76
+ A topic page has two layers (see `comitia rules` for the exact shape).
72
77
 
73
- - **산문** — 새 자료를 반영해 **다시 쓴다.** 이어 붙이지 말고 한 덩어리로.
74
- - **`## 문서` 줄** — 기존 줄은 **한 글자도 지우거나 고치지 않는다.** 새 원본 줄만 덧붙인다:
75
- `- [[docs/<경로>|<제목>]] — 한 줄 설명`
78
+ - **Prose** — **rewrite it** to take in the new material. One piece, not appended.
79
+ - **The `## Documents` lines** — **never delete or edit an existing line.** Only add a line for
80
+ the new original: `- [[docs/<path>|<title>]] — one-line description`
76
81
 
77
- 파일은 임시로 쓰고 올린다.
82
+ Write to a temp file and upload that.
78
83
 
79
84
  ```
80
- comitia write topics/<주제>.md <임시파일>
85
+ comitia write topics/<topic>.md <tmpfile>
81
86
  ```
82
87
 
83
- - 문서 머리(`type`·`tags`·`updated`)가 없으면 서버가 틀을 보여 주며 거절한다 — 그 틀대로 고친다.
84
- - **쓰면 안 되는 곳**: `ledger/` `entities/` `tables/` `docs/` `calendar/` `meetings/` `index.md` `log.md` `overview.md` — 코드가 만든다. 서버도 거절한다.
88
+ - Without the front matter (`type`, `tags`, `updated`), the server rejects it and shows you the
89
+ template — follow that template.
90
+ - **Where you must not write**: `ledger/` `entities/` `tables/` `docs/` `calendar/` `meetings/`
91
+ `index.md` `log.md` `overview.md` — code builds those. The server rejects writes there too.
85
92
 
86
- ## 6. 확인
93
+ ## 6. Check
87
94
 
88
95
  ```
89
96
  comitia pending
90
97
  ```
91
98
 
92
- 요약이 원문 문서를 링크하면 그 원본은 **pending 에서 빠진다.** 안 빠졌으면 **링크 경로가 틀린 것**이다 —
93
- `comitia list docs/` 와 대조해 고친다.
99
+ Once a summary links an original's document, that original **drops out of pending.** If it didn't
100
+ drop out, **the link path is wrong** — compare against `comitia list docs/` and fix it.
94
101
 
95
- ## 정리한 걸 슬랙에도 올려 달라고 하면
102
+ ## If you're asked to post the result to Slack
96
103
 
97
- `/comitia:slack` 순서를 따른다 — **올리기 전에 반드시 채널과 문구를 보여 주고 허락받는다.**
104
+ Follow `/comitia:slack` — **always show the channel and the text and get approval before posting.**
98
105
 
99
- ## 보고
106
+ ## Report
100
107
 
101
- 사람에게 짧게: 넣은 원본 · 고친/새로 만든 문서 · 남은 pending 수 · **원본끼리 어긋난 것**(날짜·숫자·사람).
108
+ Keep it short: what you pushed · pages you edited or created · how many are still pending ·
109
+ **anything the originals disagree about** (dates, numbers, people).
@@ -0,0 +1,310 @@
1
+ ---
2
+ name: problem
3
+ description: Use to pull the things that "don't add up" out of the company record and put them on the lab board — "find what's wrong", "anything odd this month?", "anything that stands out?", "run the lab", "check whether it cleared up". Sweep the wiki, keep only the real worries, check each candidate cause against a literal quote from the original, and leave a problem document. Choosing and deciding what to try is the person's job.
4
+ allowed-tools:
5
+ - Bash(comitia *)
6
+ - Bash(mktemp *)
7
+ - Read
8
+ - Write
9
+ ---
10
+
11
+ # /comitia:problem — find the things you only learn by changing something
12
+
13
+ **The assistant answers "how much." This finds "why is this like that."**
14
+
15
+ What happens here goes **as far as the problem and the candidate causes.** Which cause to believe
16
+ and what to try is chosen **by the person, on the lab screen.**
17
+
18
+ Request: `$ARGUMENTS`
19
+
20
+ ## 0. Rules first — every time
21
+
22
+ ```
23
+ comitia rules
24
+ ```
25
+
26
+ The axes, the page format and the places you must not write are there. They differ per company.
27
+ **Experiment documents go in `experiments/`** — it isn't on the forbidden list
28
+ (`ledger/` `entities/` `tables/` `docs/` `calendar/` `meetings/` `index.md` `log.md` `overview.md`).
29
+
30
+ ---
31
+
32
+ ## 🔑 What counts as a "problem" — this test is the whole thing
33
+
34
+ > **You don't know why, and you only find out by changing something.**
35
+
36
+ | | Why |
37
+ |---|---|
38
+ | ❌ 30 items are waiting to be organized | **Just run it.** Not an experiment |
39
+ | ❌ The totals in a document don't match | A consistency bug. Just fix it |
40
+ | ❌ Something comes up often but has no page | Just write it |
41
+ | ❌ Revenue fell → cause: that's what the ledger says | **Restating the arithmetic** |
42
+ | ✅ The deadline has slipped three times running | You don't know why, and you only find out by changing how you work |
43
+ | ✅ One person makes 70% of all decisions | **Dangerous even if it's been that way for months.** A problem with zero change |
44
+ | ✅ Things open faster than they close | Each number is fine. **The relationship between them** is the problem |
45
+
46
+ **If there's nothing to worry about, "nothing" is the right answer.** Don't pad the list.
47
+
48
+ ---
49
+
50
+ ## 1. Sweep for signals exhaustively — without judging
51
+
52
+ **Do the not-missing-anything part mechanically, and judge whether it's a worry afterwards.**
53
+ Doing it the other way round failed twice — shortlist first and **that shortlist becomes your
54
+ field of view**; judge from the start and the same material yields 0 findings one run and 2 the next.
55
+
56
+ ```
57
+ comitia list tables/ tables with numbers
58
+ comitia list ledger/ the ledger, if there is one
59
+ comitia list topics/ topics
60
+ comitia read <path> <path> … several at once
61
+ ```
62
+
63
+ ### Five families of signal — the same rules hold for anything
64
+
65
+ Spikes, drops and concentration are not money concepts. **If it's a number, the shape is the same.**
66
+
67
+ | Family | What to look at | In the record |
68
+ |---|---|---|
69
+ | **Spike / drop** | The last period is more than ±15% off the preceding average | How far a deadline slipped · how often a topic comes up |
70
+ | **Uneven** | The gaps aren't regular | The cadence of a recurring meeting |
71
+ | **Concentration** | One axis holds 50% or more of the whole | One person · one topic |
72
+ | **Stopped** | Present in the first half, absent in the second | A recurring meeting that vanished · an attendee who stopped showing |
73
+ | **Relationship** | Each is fine, but the ratio of the two is the problem | **Items opened vs items closed** |
74
+
75
+ ### Counting pitfalls — every one of these burned us for real
76
+
77
+ - **Don't count a totals row as an item.** "50% of the total sits in one place" is arithmetically inevitable
78
+ - **Leave out the month that hasn't finished.** Run this early in a month and the whole list is buried under a fake drop
79
+ - **If the same table appears in two places, count it once.** Same values, same story
80
+ - **An axis that isn't time isn't a time series.** Reading row numbers as time invents changes that aren't there
81
+ - **Cap each family** (about 5). Don't let one family take over the list
82
+
83
+ ## 2. Pick — as a sentence a person reads
84
+
85
+ Pick only **3 to 5** out of the pile of signals. And write them **as a sentence, not a metric name.**
86
+
87
+ - ❌ `meeting frequency (weekly) ↓42%`
88
+ - ✅ **"The weekly only happened twice in September — half the average of four over the three months before."**
89
+
90
+ ⚠️ **Copy numbers verbatim from the document you read. Don't recompute them.** If what you counted
91
+ differs from what the document says, drop that item.
92
+
93
+ ## 3. Find causes — a cause has to be an *event*
94
+
95
+ A breakdown (which line item pulled how much) is **not a cause, it's the arithmetic restated.**
96
+ Write one line about where you looked and move on.
97
+
98
+ **The only thing that belongs in the cause slot is an event written down in a document.**
99
+
100
+ ```
101
+ comitia search <word>
102
+ comitia read meetings/… topics/… entities/…
103
+ ```
104
+
105
+ ```
106
+ [problem] ──dashed──▶ [event = candidate cause] ──solid──▶ [the quote where that event is written]
107
+ weekly halved a client deadline slipped, Sep 29 meeting: "everything got
108
+ schedule piled onto it pushed to this one job"
109
+ ```
110
+
111
+ - **Dashed = a guess.** Attached because the timing lines up
112
+ - **Solid = checked word for word against the original**
113
+
114
+ ### 🔑 A quote has to exist, literally, in the original
115
+
116
+ A path that exists isn't enough. This is where **citing a real document for something it doesn't
117
+ say** gets stopped.
118
+
119
+ - **Find and confirm** the quote in the `comitia read` output. If you can't find it, **drop that candidate**
120
+ - Don't be definitive. A cause is a **candidate.** Write several in the document and don't declare
121
+ which one is right — the person chooses, and can edit or delete them on screen
122
+
123
+ ## 4. 🔑 Write it immediately — but **only the problem and the causes**
124
+
125
+ **Write without asking.** One document per problem you picked. Asking permission before writing
126
+ stops the loop right there.
127
+
128
+ **But don't build the experiment.** Which cause to follow, what to try, and from when are **the
129
+ person's call.** Decide it for them and there's nothing left for them to choose.
130
+
131
+ > 📌 **The screen only shows the most recent run** (2026-10-12). One sweep is one `decided` date.
132
+ > Earlier runs aren't deleted — they stay in `experiments/` — but they **drop off the problem cards.**
133
+ > So **the 3-5 you pick this time are everything that appears on screen** — if something from last
134
+ > time still matters, write it again. Anything the person moved to `watching` is no longer `found`
135
+ > and is unaffected.
136
+
137
+ > 📌 **The lab screen reads this document directly.** The `## What looks off` you write becomes the
138
+ > problem card, and `## Candidate causes` becomes the **cause graph.** Everything after that
139
+ > (choosing a cause → what to try → preview → experiment log) is what the screen already does.
140
+ > **Your job ends at laying out the material.**
141
+
142
+ | You do | The person does |
143
+ |---|---|
144
+ | Find the problem | Choose which cause is right |
145
+ | Offer several candidate causes | Write **what to try** |
146
+ | Attach evidence found in the original | Start the experiment (`watching`) · or dismiss it as "not a problem" |
147
+
148
+ Path: `experiments/YYYY-MM-DD-<short-slug-of-the-problem>.md`
149
+
150
+ ```
151
+ comitia write experiments/2026-10-01-product-dailies-dropped.md <tmpfile>
152
+ ```
153
+
154
+ ### ⚠️ Follow the format exactly — the screen reads these keys
155
+
156
+ **One character off and the card comes up blank.**
157
+
158
+ ```markdown
159
+ ---
160
+ type: experiment
161
+ status: found
162
+ decided: 2026-10-01
163
+ hypothesis: "Work keeps opening but nothing visibly closes"
164
+ action: ""
165
+ metric:
166
+ domain: measure
167
+ key: "open items"
168
+ measure: monthly-sum
169
+ before: "2026-07,2026-08,2026-09"
170
+ action_from: ""
171
+ ---
172
+
173
+ # Work keeps opening but nothing visibly closes
174
+
175
+ ## What looks off
176
+
177
+ In September the task board went up with 14 tracks and 118 items, and three new apps, a site
178
+ redesign, three new channels and a partner dashboard all opened.
179
+
180
+ Nothing visibly closed. One internal project was paused, and a client contract deadline moved
181
+ from September 30 to October 15.
182
+
183
+ ## Candidate causes — the person chooses
184
+
185
+ 1. **The client project ate all the time** — the timing lines up `docs/2026-09-30-daily.md`
186
+ > let's drop the other threads and focus on this one
187
+
188
+ 2. **There's room to open things but no room to close them**
189
+ No evidence found. This is only a guess
190
+
191
+ ## What to try
192
+
193
+ Left blank — the person fills this in.
194
+
195
+ ## Observations
196
+
197
+ None yet.
198
+
199
+ ## Sources
200
+
201
+ - `docs/2026-09-28-task-board.md` — the Sep 28 task board
202
+ - `docs/2026-09-24-direction-and-outsourcing-bottleneck.md` — what opened on Sep 24
203
+ - `docs/2026-09-30-daily.md` — Sep 30, the partner dashboard and the deadline change
204
+ - `meetings/2026-09.md` — all September meetings
205
+ ```
206
+
207
+ **Five rules.**
208
+ - **`status: found`** — not an experiment yet. It becomes `watching` when the person writes what to try
209
+ - **Leave `action` and `action_from` as empty strings.** You don't fill them
210
+ - **Front matter values are one line.** A line break makes the next line parse as a YAML key and the
211
+ value disappears entirely (seen for real)
212
+ - `hypothesis` and the `# title` are **the same sentence**, and they state **the problem** (not the
213
+ cause) — that's what shows on the card
214
+ - `domain: measure` · `key: "<name of the thing being counted>"` — anything that isn't the ledger is `measure`
215
+ - ⚠️ **Don't put a `- ` list in an empty section.** The screen counts `- ` lines under `## Observations`,
216
+ so "- (none yet)" registers as **one observation** (seen for real). Write it as a sentence
217
+ - Put `## Sources` **last** — just paths and a one-line description
218
+
219
+ ### 🔑 "What looks off" is short and plain — keep paths out of the sentences
220
+
221
+ This section is **what the person reads on the card.** Wedging file paths into parentheses breaks
222
+ the sentence. **Collect the paths at the bottom under `## Sources`.**
223
+
224
+ | | |
225
+ |---|---|
226
+ | ❌ | On 9/28 the team task board went up with 14 tracks and 118 items (`docs/2026-09-28-…`). Within that week three apps, a site redesign (second priority) and three channels opened on 9/24 (`docs/2026-09-24-…`), and on 9/30 a partner dashboard was added (`docs/2026-09-30-…`) |
227
+ | ✅ | In September three new apps, a site redesign and a partner dashboard all opened. **Nothing visibly closed.** |
228
+
229
+ - **Two or three sentences** is enough. Longer and nobody reads it on the card
230
+ - **No parenthetical asides.** Drop things like "(second priority)" and "(internal target)"
231
+ - Numbers **only where they're needed.** Don't list dates one by one — fold them into "in September"
232
+ - ⚠️ **What you counted can be wrong** — for real: 105 raw items were counted as 105 meetings when
233
+ there were actually 81 (one meeting arrives as several raws). That's why you list the sources —
234
+ so the person can **check it in half a second**
235
+
236
+ ### 🔑 The shape of a cause is what draws the line on the graph
237
+
238
+ The screen reads the `## Candidate causes` section by these rules. **Get the shape wrong and no
239
+ line is drawn.**
240
+
241
+ | What you write | On screen |
242
+ |---|---|
243
+ | `1. **Cause name** — description \`path.md\`` | A cause node plus an evidence box |
244
+ | below it, ` > a line from the original` | **Solid line** — meaning it's written in your data |
245
+ | no quote | **Dashed line** — meaning it's a guess |
246
+
247
+ **The quote has to exist literally in the original.** If you couldn't find one, **write no quote line**
248
+ and say "No evidence found. This is only a guess" — drawing a solid line to evidence that doesn't
249
+ exist turns the screen itself into a lie.
250
+
251
+ Offer **several** causes. Narrowing to one is the person's job.
252
+
253
+ ### Things dismissed as "not a problem"
254
+
255
+ One line each in `experiments/_dismissed.md`. **It has to be reversible.**
256
+ ⚠️ The server treats this file specially so it stays off the screen's list — don't rename it.
257
+
258
+ ## 5. Review — when asked to "check the experiments"
259
+
260
+ ⚠️ **This only covers experiments the person has already started (`watching`).** `found` isn't an
261
+ experiment yet, so there's nothing to measure.
262
+
263
+ ```
264
+ comitia list experiments/
265
+ comitia read experiments/<file>
266
+ ```
267
+
268
+ Take the ones with `status: watching`. **Once a month has closed**, measure the same metric for that
269
+ month and compare it against the `before` range — there is no target. Just look at how it actually moved.
270
+
271
+ Append observations **to the `## Observations` section**, one line each (don't touch the front matter).
272
+
273
+ ```markdown
274
+ ## Observations
275
+
276
+ - 2026-10 · 4 times — average 4.7 over 2026-07~09 before the change (`meetings/2026-10.md`)
277
+ ```
278
+
279
+ ### 🔑 Never close it automatically — only signal that it could close
280
+
281
+ If it moved the right way, **ask "this looks resolved. Close it?"** **The person closes it.**
282
+
283
+ - Things improve for a month and then go back. Close one wrongly and the person stops trusting the screen
284
+ - If they say to close it, set `status` in the front matter to **`done`** (the screen only knows
285
+ `watching` and `done`)
286
+ - If not yet, leave one observation and leave `status` as `watching`
287
+
288
+ ⚠️ **Don't judge from a single month.** You can't tell whether that month was just unusual. And
289
+ **record every closed month without exception** — picking only the good-looking months is a lie.
290
+
291
+ ---
292
+
293
+ ## Report
294
+
295
+ Keep it short for the person. You report **after everything is already written** — this is not the
296
+ place to ask permission.
297
+
298
+ - **What you wrote** — how many and the paths — and say "they appear under Found problems in the lab"
299
+ - Say **there's something left to choose** — the experiment starts when they pick a cause and write what to try
300
+ - **The problems you found** — as sentences. If there are none, **"nothing to worry about" is the right answer**
301
+ - **Candidate causes** — distinguishing dashed (a guess) from solid (checked against the original)
302
+ - **What you dropped** — if you dropped a candidate because the quote wasn't in the original, say so
303
+ - **Closing signals** — experiments that look resolved. Say that you **did not close them**
304
+ - ⚠️ **If you couldn't look at everything, say so.** "Nothing to worry about" and "I couldn't look at
305
+ everything" are completely different statements — reporting what you ran out of budget to read as
306
+ "no problems" makes the person trust the screen, and that's the worst outcome
307
+
308
+ ## If you're asked to post it to Slack
309
+
310
+ Follow `/comitia:slack` — **show the channel and the text and get approval before posting.**
@@ -1,49 +1,55 @@
1
1
  ---
2
2
  name: read
3
- description: 회사 맥락이 필요할 때 쓴다 — 슬랙·회의록·메일·위키에서 찾아 답한다. "슬랙에서 뭐라고 했지", "지난 회의에서 정한 거", "우리 회사 ~ 어떻게 됐어", "comitia 에서 찾아줘", "최근 얘기 정리해줘" 같은 요청. 사람에게 복사해 달라고 하지 않고 comitia 로 직접 꺼낸다.
3
+ description: Use when you need company context — find it in Slack, meeting notes, email and the wiki, and answer from there. For requests like "what did we say about this on Slack", "what did we decide in the last meeting", "where did our ~ end up", "look it up in comitia", "catch me up on recent discussion". Pull it with comitia instead of asking the person to paste it.
4
4
  allowed-tools:
5
5
  - Bash(comitia *)
6
6
  - Bash(z2o *)
7
7
  ---
8
8
 
9
- # /comitia:read — 회사 맥락 꺼내기
9
+ # /comitia:read — pull up company context
10
10
 
11
- 회사의 슬랙·회의록·메일·정리된 위키는 전부 `comitia` 명령으로 꺼낸다.
12
- **사람에게 "복사해서 붙여 주세요"라고 하지 않는다.** 이 스킬은 읽기만 한다 — 쓰기는 `/comitia:ingest`.
11
+ Your company's Slack, meeting notes, email and organized wiki all come out through the
12
+ `comitia` command. **Never ask the person to "paste it in here."** This skill only reads —
13
+ writing is `/comitia:ingest`.
13
14
 
14
- 요청: `$ARGUMENTS`
15
+ Request: `$ARGUMENTS`
15
16
 
16
- ## 어디서 찾나 — 둘로 나뉜다
17
+ ## Where to look — two places
17
18
 
18
- | | 무엇 | 명령 |
19
+ | | What | Commands |
19
20
  |---|---|---|
20
- | **원본** | 들어온 그대로. 슬랙·메일·티로. **가장 최신** | `comitia recent [개수]` · `comitia find <낱말>` · `comitia raw <id...>` |
21
- | **위키** | 정리된 지식. 주제·개체·장부 | `comitia list [접두어]` · `comitia search <낱말>` · `comitia read <경로...>` · `comitia graph` |
22
-
23
- - **오늘·이번 주·"슬랙에서"** 같은 요청 → 원본부터. `recent` 로 훑고 `raw` 로 읽는다.
24
- - **"~가 뭐였지", "~ 현황"** 같은 요청 → 위키부터.
25
- - 둘 다 본 뒤 **어긋나면 둘 다 말한다.** 원본이 더 최신이다 — 위키는 정리된 시점에 멈춰 있다.
26
- - **`recent`·`find` 맨 위 「수집 상태」를 먼저 본다** — 연결마다 마지막으로 가져온 시각이다.
27
- 찾는 일이 그보다 최근이거나 **방금 것이 안 보이면**, 사람에게 *"지금 당겨올까요?"* 묻고
28
- 좋다면 `/comitia:sync` 순서(`comitia sync`, 하나만이면 `comitia sync tiro`) 뒤 다시 `recent`. 읽기 토큰이면 안 되니 정각을 기다리라고 알린다.
29
-
30
- ## 위키 찾는 법
31
-
32
- 1. `comitia read index.md overview.md` — 목차와 종합. 어디를 볼지 여기서 정한다.
33
- 2. `comitia list topics/` 처럼 **접두어로 목록**을 본다. 위키가 100장 안팎이면
34
- **목록을 보고 관련 문서를 통째로 읽는 편이 검색보다 낫다.**
35
- 3. `comitia search` 는 **낱말을 그대로 포함한 것만** 찾는다(최대 30건, 뜻으로 찾지 않는다).
36
- 동의어·다른 표기로 **여러 번** 찾는다. 예: `타임원`·`TimeOne`·`외주`
37
- 4. `comitia read a.md b.md c.md` — **여러 장을 한 번에**(한 번에 40장·12만 자까지).
38
- 5. 주제 문서의 `## 문서` 줄은 원문(`docs/`)을 가리킨다. 산문이 모호하면 원문을 읽는다.
39
-
40
- ## 답할 때
41
-
42
- - **출처를 붙인다** — 문서 경로(`topics/물류.md`)나 원본 id(`d213b634`).
43
- - 못 찾았으면 **못 찾았다고 한다.** 짐작으로 메우지 않는다.
44
- - 워크스페이스가 여럿이면 `-c <id>` 로 고른다. 모르겠으면 `comitia companies`.
45
-
46
- ## 막히면
47
-
48
- - `토큰이 없어요` → 사람에게 `comitia init` 을 안내한다. **토큰을 대화로 받지 않는다** — 사람이 직접 넣는다.
49
- - `워크스페이스를 정하세요` → `comitia companies` 로 보여 주고 사람이 `comitia use` 로 고르게 한다.
21
+ | **Raw** | As it arrived. Slack, email, Tiro. **The most recent** | `comitia recent [n]` · `comitia find <word>` · `comitia raw <id...>` |
22
+ | **Wiki** | Organized knowledge. Topics, entities, ledger | `comitia list [prefix]` · `comitia search <word>` · `comitia read <path...>` · `comitia graph` |
23
+
24
+ - Requests about **today, this week, or "on Slack"** → start with raw. Skim with `recent`, read with `raw`.
25
+ - Requests like **"what was ~", "where does ~ stand"** → start with the wiki.
26
+ - After reading both, **if they disagree, say both.** Raw is more recent — the wiki stops at
27
+ the moment it was last organized.
28
+ - **Read the collection status line at the top of `recent` / `find` first** — it shows when each
29
+ connection last pulled. If what you need is more recent than that, or **what just happened
30
+ isn't there**, ask the person *"want me to pull it in now?"* and if yes follow `/comitia:sync`
31
+ (`comitia sync`, or `comitia sync tiro` for just one), then run `recent` again. A read-only
32
+ token can't pull, so in that case say so and wait for the top of the hour.
33
+
34
+ ## How to search the wiki
35
+
36
+ 1. `comitia read index.md overview.md` — the table of contents and the overview. Decide where to look from here.
37
+ 2. Browse **by prefix**, like `comitia list topics/`. When the wiki is around 100 pages,
38
+ **reading the relevant pages whole beats searching.**
39
+ 3. `comitia search` only matches **the literal word** (max 30 hits; it does not search by meaning).
40
+ Search **several times** with synonyms and alternate spellings — e.g. `renewal` · `renewals` · `contract work`.
41
+ 4. `comitia read a.md b.md c.md` — **several pages at once** (up to 40 pages / 120,000 characters).
42
+ 5. The `## Documents` lines in a topic page point at the originals in `docs/`. When the prose is
43
+ vague, read the original.
44
+
45
+ ## When you answer
46
+
47
+ - **Cite the source** — a page path (`topics/logistics.md`) or a raw id (`d213b634`).
48
+ - If you couldn't find it, **say you couldn't.** Don't fill the gap with a guess.
49
+ - With several workspaces, pick one with `-c <id>`. If unsure, run `comitia companies`.
50
+
51
+ ## If you get stuck
52
+
53
+ - `no token` → tell the person to run `comitia init`. **Never take a token through the chat** —
54
+ the person enters it themselves.
55
+ - `pick a workspace` → show them `comitia companies` and let them choose with `comitia use`.