severally-mcp 2.0.0 → 2.3.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.
Files changed (40) hide show
  1. package/CODE_OF_CONDUCT.md +83 -0
  2. package/CONFIG.md +13 -7
  3. package/README.ja.md +157 -77
  4. package/README.md +162 -81
  5. package/bin/severally-mcp.mjs +3 -0
  6. package/config.example.json +26 -0
  7. package/docs/how-it-works.ja.md +11 -3
  8. package/docs/how-it-works.md +12 -4
  9. package/docs/install.ja.md +25 -6
  10. package/docs/install.md +30 -7
  11. package/package.json +5 -3
  12. package/plugins/severally/.claude-plugin/plugin.json +1 -1
  13. package/plugins/severally/.codex-plugin/plugin.json +4 -2
  14. package/plugins/severally/.mcp.json +2 -1
  15. package/plugins/severally/dist/severally-mcp.mjs +29639 -28215
  16. package/plugins/severally/skills/_template/SKILL.md.tmpl +19 -23
  17. package/plugins/severally/skills/_template/reference.md.tmpl +22 -10
  18. package/plugins/severally/skills/antigravity/severally/SKILL.md +19 -23
  19. package/plugins/severally/skills/antigravity/severally/reference.md +22 -10
  20. package/plugins/severally/skills/claude/severally/SKILL.md +19 -23
  21. package/plugins/severally/skills/claude/severally/reference.md +22 -10
  22. package/plugins/severally/skills/codex/severally/SKILL.md +19 -23
  23. package/plugins/severally/skills/codex/severally/reference.md +22 -10
  24. package/plugins/severally/skills/opencode/severally/SKILL.md +19 -23
  25. package/plugins/severally/skills/opencode/severally/reference.md +22 -10
  26. package/scripts/init-config.mjs +1 -1
  27. package/scripts/install.mjs +124 -9
  28. package/src/adapters/antigravity-sandbox.mjs +5 -1
  29. package/src/adapters/codex.mjs +17 -6
  30. package/src/brief.mjs +38 -16
  31. package/src/consultants.mjs +31 -10
  32. package/src/expose-paths.mjs +68 -5
  33. package/src/jobs.mjs +294 -56
  34. package/src/policy.mjs +49 -11
  35. package/src/redact.mjs +20 -1
  36. package/src/run.mjs +38 -5
  37. package/src/schema.mjs +35 -12
  38. package/src/server.mjs +96 -120
  39. package/src/status.mjs +63 -0
  40. package/src/store.mjs +44 -1
package/README.md CHANGED
@@ -6,27 +6,37 @@
6
6
  </h1>
7
7
 
8
8
  <p align="center">
9
- <em>Independent opinions, returned severally. Your agent checks each one.</em>
9
+ <a href="https://github.com/coz-a/severally/actions/workflows/test.yml"><img src="https://github.com/coz-a/severally/actions/workflows/test.yml/badge.svg" alt="Test"></a>
10
10
  </p>
11
11
 
12
12
  <p align="center">English | <a href="README.ja.md">日本語</a></p>
13
13
 
14
- A plugin that gives your AI agent consultants: Codex, Claude Code, Antigravity and OpenCode.
14
+ A plugin that lets your AI agent ask other coding agents for independent opinions, returned separately.
15
15
 
16
- When the agent gets stuck in an investigation, or faces two options that look equally good, it asks the
16
+ The consultants are Codex, Claude Code, Antigravity and OpenCode. When the agent gets stuck in an investigation, or faces two options that look equally good, it asks the
17
17
  consultants for their opinions. It checks the findings that come back itself, and carries on from what it found.
18
- For an important decision, such as a change that is hard to reverse, it now consults before asking you to approve
19
- it, and asks you only about what is yours to decide. You can also ask yourself: "ask Codex".
18
+ For an important decision, such as a change that is hard to reverse, it consults before asking you to approve it,
19
+ and asks you only about what is yours to decide. You can also ask yourself: "ask Codex".
20
20
 
21
21
  The plugin puts the question to several independent consultants, and returns each one's answer on its own
22
22
  instead of merging them into one, because a disagreement means something too. The agent checks why they disagree
23
23
  before deciding how to take the answers.
24
24
 
25
+ Asked whether to cache a slow product page for five minutes, three consultants answered on their own
26
+ (see [Example](#example) for the whole run):
27
+
28
+ ```
29
+ codex do_not_proceed the price depends on the member's tier, so the first visitor's price is served to everyone
30
+ claude-code do_not_proceed whoever fills the cache first sets the price everyone else sees for 5 minutes
31
+ antigravity alternative member discounts leak to other users; fix the query and a cache may not be needed
32
+ ```
33
+
25
34
  ## Contents
26
35
 
27
- - [Example](#example)
28
- - [How it works](#how-it-works)
36
+ - [Background](#background)
29
37
  - [Install](#install)
38
+ - [Requirements](#requirements)
39
+ - [Command line](#command-line)
30
40
  - [Updating](#updating)
31
41
  - [Uninstall](#uninstall)
32
42
  - [Usage](#usage)
@@ -34,66 +44,15 @@ before deciding how to take the answers.
34
44
  - [When the answers come back](#when-the-answers-come-back)
35
45
  - [Modes](#modes)
36
46
  - [History and records](#history-and-records)
47
+ - [Example](#example)
48
+ - [Recommended setup](#recommended-setup)
37
49
  - [Configuration](#configuration)
38
50
  - [What a consultant can see and do](#what-a-consultant-can-see-and-do)
39
51
  - [API](#api)
40
52
  - [Contributing](#contributing)
41
53
  - [License](#license)
42
54
 
43
- ## Example
44
-
45
- Here is how severally changes the way the agent works, shown in one situation: the agent comes up with a change,
46
- and before asking you to approve it, it asks the consultants for their opinions.
47
-
48
- The example is a small online shop's API. `GET /products/:id`, which serves the product page, is slow: about
49
- 800 ms. The API loads each product joined with its inventory and its reviews. Prices depend on the member's tier,
50
- and gold members get a 10% discount.
51
-
52
- The agent, running in Claude Code, comes up with a common fix: "keep each response in an in-memory Map for 5
53
- minutes". Before asking you "can I go ahead?", it shows the plan to three consultants: Codex, Antigravity, and a
54
- fresh Claude Code session (a new session of the agent's own CLI, with none of its conversation). Along with the
55
- plan, it hands them read-only copies of the code involved. The answers come back one per consultant, side by side
56
- (excerpt from a real run against a sample API):
57
-
58
- ```
59
- codex do_not_proceed the price depends on the member's tier, so keyed by product id alone, the first
60
- visitor's price is served to everyone; the join inflates stock; 4 workers keep
61
- separate copies, so an order that changes stock does not clear the old value
62
- claude-code do_not_proceed whoever fills the cache first sets the price everyone else sees for 5 minutes;
63
- 4 workers each keep their own copy, so stock stays stale after orders; fix the
64
- join bug first too
65
- antigravity alternative member discounts leak to other users; the 800 ms comes from joining inventory
66
- and reviews, which also skews stock; rewrite the query and it is likely fast
67
- enough without a cache
68
- ```
69
-
70
- Each answer opens with a bottom line: `proceed`, `do_not_proceed`, `alternative` (do something else instead) or
71
- `undetermined`. The three found the same problems, each on its own: the price leak, the inflated stock and the
72
- per-worker caches. Where they differ is what comes next. Codex and Claude Code recommend fixing the query and
73
- then caching only the part that does not depend on the user. Antigravity says that with the query fixed, a cache
74
- may not be needed at all. Merge the answers into one and that difference gets buried.
75
-
76
- The agent that asked (the *lead*) reads the findings and then checks them in its own repository. Of the two
77
- findings, one reproduced exactly; the other turned out not to be happening yet, and that changed the response.
78
-
79
- ```
80
- finding the query joins inventory and reviews together, so stock is multiplied by the number of reviews
81
- checked ran the query on a test database: 5 units in stock, 4 reviews -> stock comes out as 20
82
- so fix the query before any cache
83
-
84
- finding a gold member's 10% discount would be served to guests
85
- checked login is not wired in yet, so today everyone gets the base price.
86
- the leak starts the day login is added
87
- so cache only the product data that does not depend on the user, and compute the price on each request
88
- ```
89
-
90
- What comes back to you is not a vote of "2 against, 1 alternative". It is what was checked, what the lead
91
- recommends, and what has not been checked yet. Here that is whether the fixed query is fast enough without a
92
- cache (it needs production-like data), and how stale the stock shown after an order may be (that one is yours to
93
- decide). You make the call. The checked results stay next to the findings and can be exported as Markdown into
94
- your repository (see [History and records](#history-and-records)).
95
-
96
- ## How it works
55
+ ## Background
97
56
 
98
57
  ```mermaid
99
58
  flowchart TB
@@ -121,13 +80,21 @@ What a consultant can read and do is under [What a consultant can see and do](#w
121
80
 
122
81
  ## Install
123
82
 
124
- You need Node.js 20.10 or newer and at least one of the four CLIs, installed and logged in. One is enough: with
125
- only Claude Code, you can still ask a fresh Claude Code session.
83
+ ### Requirements
84
+
85
+ - Node.js 22 or newer
86
+ - At least one of the four CLIs, installed and logged in. One is enough: with only Claude Code, you can still ask a
87
+ fresh Claude Code session.
88
+ - On macOS and Linux, npm's global executable directory on `PATH`: the default install puts a `severally-mcp`
89
+ command there for Codex to launch. `--manual` does without it.
90
+
91
+ The installer and the server are tested on Linux, macOS and Windows; the Claude Code and Codex marketplace
92
+ routes and the real CLIs have been tried on Linux only.
126
93
 
127
94
  One line, on macOS, Linux and Windows (PowerShell or Command Prompt):
128
95
 
129
96
  ```bash
130
- npx -y severally-mcp@2.0.0 install
97
+ npx -y severally-mcp@2.3.1 install
131
98
  ```
132
99
 
133
100
  The installer registers severally with each CLI it finds on `PATH`. Add `--dry-run` at the end to print what it
@@ -137,6 +104,24 @@ registration.
137
104
  Installing from the Claude Code plugin marketplace or from a clone, checking the registration, and what the
138
105
  installer changes are in [docs/install.md](docs/install.md).
139
106
 
107
+ ### Command line
108
+
109
+ ```bash
110
+ npx -y severally-mcp@latest install [--dry-run] [--manual] [--force] [--skip-global]
111
+ ```
112
+
113
+ | Option | What it does |
114
+ |---|---|
115
+ | `--dry-run` | prints what it would change, and changes nothing |
116
+ | `--manual` | registers the MCP server and copies the Skill instead of installing the plugin (the default on Windows) |
117
+ | `--force` | registers again where severally is already registered, instead of leaving it as it is |
118
+ | `--skip-global` | skips the global npm install in plugin mode, when `severally-mcp` on `PATH` is already this install |
119
+
120
+ What each mode changes is in [docs/install.md](docs/install.md#two-install-modes).
121
+
122
+ `npx -y severally-mcp@latest status` shows what is set up without starting a consultation: the config file, the
123
+ consultants this machine can reach, the installed copies' versions and which clients have severally registered.
124
+
140
125
  ### Updating
141
126
 
142
127
  This line replaces your install with the latest version, with no version number to look up:
@@ -146,7 +131,9 @@ npx -y severally-mcp@latest install
146
131
  ```
147
132
 
148
133
  With `@latest`, npx asks npm for the newest version every time, so an older copy it already has is not used.
149
- Then restart the clients.
134
+ Then restart the clients. Installed from the Claude Code plugin marketplace: see
135
+ [docs/install.md](docs/install.md#updating). What changed in each version is in the
136
+ [releases](https://github.com/coz-a/severally/releases).
150
137
 
151
138
  ### Uninstall
152
139
 
@@ -174,17 +161,21 @@ Ask in your own words, in the chat with your agent:
174
161
  - The agent also consults without being asked: when an investigation stalls, when two options look equally
175
162
  good, and before asking you to approve a hard-to-reverse change.
176
163
 
164
+ What comes back to you is the lead's report, not the consultants' answers as they arrived: what it checked and
165
+ what that showed, what it recommends, and what is still unverified. The [example](#example) shows one.
166
+
177
167
  It is worth it for important design decisions, hard-to-reverse choices, and two or more failed attempts at the
178
- same bug. One consultation costs a few minutes and real quota, so it is not for small fixes.
168
+ same bug. One consultation takes minutes and real quota, so it is not for small fixes.
179
169
 
180
170
  ### When the answers come back
181
171
 
182
172
  Starting a consultation does not make the agent wait: it can work on something that does not depend on the
183
- answers, which usually arrive within a few minutes.
173
+ answers, which usually arrive within one to ten minutes (Antigravity is the slowest).
184
174
 
185
- Every answer has the same shape: a bottom line, findings with their grounds, what the consultant could not
186
- determine, conditions that would change its judgement, and how to check. A consultant that fails comes back as a
187
- failure with the reason (`usage_limit`, `timeout` …), never as "no problems found".
175
+ Every answer is asked for in the same shape: a bottom line, findings with their grounds, what the consultant could
176
+ not determine, conditions that would change its judgement, and how to check. When an answer leaves part of that
177
+ out, such as the bottom line or the grounds for a finding, it says so in a caveat. A consultant that fails comes
178
+ back as a failure with the reason (`usage_limit`, `timeout` …), never as "no problems found".
188
179
 
189
180
  The agent checks the findings that would change the decision itself, then tells you what it checked, what it did
190
181
  not adopt, and what is still unverified.
@@ -195,11 +186,11 @@ There are three modes, chosen from what the agent hands over. You can also ask f
195
186
  Codex").
196
187
 
197
188
  - `explore`: asks without showing the plan, so the consultant answers with its own approach first
198
- - `review`: shows the plan and asks what is wrong with it (the example above)
189
+ - `review`: shows the plan and asks what is wrong with it (the [example](#example))
199
190
  - `debate`: shows the plan with the opposing claims, and asks the consultant to weigh them
200
191
 
201
192
  After the first answer, the agent can send follow-ups to the same consultant: up to four by default, five rounds
202
- in total.
193
+ in total. A follow-up to a fan-out asks every consultant in it again, each continuing its own exchange.
203
194
 
204
195
  ### History and records
205
196
 
@@ -211,14 +202,100 @@ repository.
211
202
  How to name consultants, how a consultation runs, and the records in detail are in
212
203
  [docs/how-it-works.md](docs/how-it-works.md).
213
204
 
205
+ ## Example
206
+
207
+ Here is how severally changes the way the agent works, shown in one situation: the agent comes up with a change,
208
+ and before asking you to approve it, it asks the consultants for their opinions.
209
+
210
+ The example is a small online shop's API. `GET /products/:id`, which serves the product page, is slow: about
211
+ 800 ms. The API loads each product joined with its inventory and its reviews. Prices depend on the member's tier,
212
+ and gold members get a 10% discount.
213
+
214
+ The agent, running in Claude Code, comes up with a common fix: "keep each response in an in-memory Map for 5
215
+ minutes". Before asking you "can I go ahead?", it shows the plan to three consultants: Codex, Antigravity, and a
216
+ fresh Claude Code session (a new session of the agent's own CLI, with none of its conversation). Along with the
217
+ plan, it hands them read-only copies of the code involved. The answers come back one per consultant, side by side
218
+ (excerpt from a real run against a sample API):
219
+
220
+ ```
221
+ codex do_not_proceed the price depends on the member's tier, so keyed by product id alone, the first
222
+ visitor's price is served to everyone; the join inflates stock; 4 workers keep
223
+ separate copies, so an order that changes stock does not clear the old value
224
+ claude-code do_not_proceed whoever fills the cache first sets the price everyone else sees for 5 minutes;
225
+ 4 workers each keep their own copy, so stock stays stale after orders; fix the
226
+ join bug first too
227
+ antigravity alternative member discounts leak to other users; the 800 ms comes from joining inventory
228
+ and reviews, which also skews stock; rewrite the query and it is likely fast
229
+ enough without a cache
230
+ ```
231
+
232
+ Each answer opens with a bottom line: `proceed`, `do_not_proceed`, `alternative` (do something else instead) or
233
+ `undetermined`. The three found the same problems, each on its own: the price leak, the inflated stock and the
234
+ per-worker caches. Where they differ is what comes next. Codex and Claude Code recommend fixing the query and
235
+ then caching only the part that does not depend on the user. Antigravity says that with the query fixed, a cache
236
+ may not be needed at all. Merge the answers into one and that difference gets buried.
237
+
238
+ The agent that asked (the *lead*) reads the findings and then checks them in its own repository. Of the two
239
+ findings, one reproduced exactly; the other turned out not to be happening yet, and that changed the response.
240
+
241
+ ```
242
+ finding the query joins inventory and reviews together, so stock is multiplied by the number of reviews
243
+ checked ran the query on a test database: 5 units in stock, 4 reviews -> stock comes out as 20
244
+ so fix the query before any cache
245
+
246
+ finding a gold member's 10% discount would be served to guests
247
+ checked login is not wired in yet, so today everyone gets the base price.
248
+ the leak starts the day login is added
249
+ so cache only the product data that does not depend on the user, and compute the price on each request
250
+ ```
251
+
252
+ What comes back to you is not a vote of "2 against, 1 alternative". It is what was checked, what the lead
253
+ recommends, and what has not been checked yet. Here that is whether the fixed query is fast enough without a
254
+ cache (it needs production-like data), and how stale the stock shown after an order may be (that one is yours to
255
+ decide). You make the call. The checked results stay next to the findings and can be exported as Markdown into
256
+ your repository (see [History and records](#history-and-records)).
257
+
258
+ ## Recommended setup
259
+
260
+ Register the strongest model of each vendor as a consultant, and do the everyday work on a cheaper model, such as
261
+ Sonnet in Claude Code. Most of the work, such as editing code, running tests and searching, goes fine on the
262
+ cheaper model. For the decisions where a wrong call costs the most, such as a design choice or a change that is
263
+ hard to reverse, the lead asks the strongest models, each on its own. They spend quota only in those
264
+ consultations, so most of the usage stays on the cheaper model, and the decisions that matter still get the
265
+ strongest models' opinions.
266
+
267
+ A `~/.severally/config.json` for this:
268
+
269
+ ```json
270
+ {
271
+ "consultants": {
272
+ "opus": { "cli": "claude-code", "model": "claude-opus-5-5" },
273
+ "gpt": { "cli": "codex", "model": "gpt-6.1-sol" },
274
+ "gemini": { "cli": "antigravity", "model": "gemini-4-argon-high" }
275
+ }
276
+ }
277
+ ```
278
+
279
+ Model ids change as new models come out; replace them with the ones your CLIs offer. Consultants run at effort
280
+ `high` unless you set `effort`, except on Antigravity, where the model name sets it (`gemini-4-argon-high`) and an
281
+ `effort` key is a config mistake.
282
+
283
+ Then start the lead on the cheaper model (`claude --model sonnet`, or `/model sonnet` in a running session). The
284
+ lead consults on its own at the moments listed under [Asking](#asking), and you can ask it to ("ask everyone before
285
+ we merge this"). Each consultant runs on its own CLI's login and quota.
286
+
214
287
  ## Configuration
215
288
 
216
289
  **No configuration needed by default.** At startup the server looks for the CLIs on `PATH`, and each one it finds
217
290
  becomes a consultant on its default model. To turn a CLI off or add consultants on other models, put a
218
291
  `~/.severally/config.json` in place. From a clone, `npm run init-config` writes a template. Every key is in
219
- [CONFIG.md](CONFIG.md), and [config.example.json](config.example.json) is a working example to copy from. Restart
292
+ [CONFIG.md](CONFIG.md), and [config.example.json](config.example.json) is an example to adapt: its paths, models and notes are made up. Restart
220
293
  the client after changing it.
221
294
 
295
+ To consult a model you reach with an API key (OpenRouter, or another OpenAI-compatible API) or a local model,
296
+ install OpenCode and add the model as a consultant: see
297
+ [CONFIG.md](CONFIG.md#api-keys-and-other-model-families-through-opencode).
298
+
222
299
  ## What a consultant can see and do
223
300
 
224
301
  A consultation sends the brief to that CLI's model, the same way using the CLI yourself does. Your conversation
@@ -236,13 +313,15 @@ history is never sent. No consultant can:
236
313
  | Antigravity | yes (`view_file`) | blocked (tool hook) | none | no | yes, unless `network: "off"` |
237
314
  | OpenCode | yes (`read` / `glob` / `grep`) | blocked (permission rules) | none (its Code Mode `execute` is refused) | no | yes, unless `network: "off"` |
238
315
 
239
- Every consultant starts in an empty working directory, and the server does not tell it where your repository
240
- is. It can still read any file your user account can read, except the credential paths the table marks blocked.
316
+ Every consultant starts in a working directory of its own that holds only copies of the files you handed it, and
317
+ the server does not tell it where your repository is. It can still read any file your user account can read, except the credential paths the table marks blocked.
241
318
  Codex does not block by file name, so a `.env` in your repository is readable to it.
242
319
 
243
320
  **A consultant that can both read your disk and browse could carry what it read out in a URL**, for example if a
244
321
  page it opens tells it to. To prevent that, the agent passes `network: "off"`: every consultant in that round then
245
- has no web search or browsing. The brief, and whatever a consultant reads, still goes to that CLI's model.
322
+ has no web search or browsing. To make that the rule for every consultation, set `"server": { "network": "off" }`
323
+ in the [config file](CONFIG.md#server-wide-keys); a request cannot turn it back on. The brief, and whatever a
324
+ consultant reads, still goes to that CLI's model.
246
325
 
247
326
  How each CLI is held to this is in [docs/how-it-works.md](docs/how-it-works.md#how-a-consultant-is-kept-to-reading).
248
327
 
@@ -255,22 +334,24 @@ it exposes, go to each consultant's model. Every argument is described in the to
255
334
  |---|---|
256
335
  | `consult_start` | Starts a consultation with one consultant (`target`) or several (`targets`), and returns a `job_id` or `group_id` at once |
257
336
  | `consult_get` | Waits for a consultation and returns its state or answer; with `ids`, just those points of the answer |
258
- | `consult_cancel` | Stops a consultation or a whole fan-out, and its consultant processes |
337
+ | `consult_cancel` | Stops a consultation or a whole fan-out, and its consultant processes, also one another session started |
259
338
  | `consult_record` | Writes the lead's verdicts on an answer's points, and what the answer added |
260
- | `consult_list` | Lists recent consultations, with the usage each consultant reported |
339
+ | `consult_list` | Lists recent consultations, earlier sessions' included, with the usage each consultant reported in this session |
261
340
  | `consult_export` | Returns a consultation, follow-ups and verdicts included, as Markdown |
262
341
 
263
342
  The arguments of `consult_start` that matter most:
264
343
 
265
- - `context.expose_paths`: files and directories, by absolute path, copied read-only for the consultant
344
+ - `context.expose_paths`: files and directories, by absolute path, copied read-only for the consultant; a
345
+ directory in a git repository copies only the files git lists (nothing `.gitignore` excludes)
266
346
  - `context.expose_diff`: `{ repo, base? }`, a change in progress: the diff goes in the brief and the files it touches are copied
267
347
  - `network`: `"off"` takes web search and browsing away from every consultant in the round
268
- - `followup_to`: the `job_id` of the answer a follow-up continues
348
+ - `followup_to`: the `job_id` of the answer a follow-up continues, or a fan-out's `group_id` to ask every consultant in it again. A follow-up needs only this and `question`; the consultant, the mode and the earlier round's context carry over unless you pass them again
269
349
 
270
350
  ## Contributing
271
351
 
272
352
  Questions and bug reports go to [Issues](https://github.com/coz-a/severally/issues). Pull requests are welcome; for
273
- a large change, open an issue first so we can talk it over.
353
+ a large change, open an issue first so we can talk it over. Everyone taking part is expected to follow the
354
+ [Code of Conduct](CODE_OF_CONDUCT.md).
274
355
 
275
356
  - `npm install`, then `npm test`. The tests run offline against stand-in CLIs and make no real API calls.
276
357
  - After changing the source or the Skill template, run `npm run build`. The built server in
@@ -15,6 +15,9 @@ if (process.argv[2] === 'install') {
15
15
  }
16
16
  process.argv.splice(2, 1);
17
17
  await import(installer.href);
18
+ } else if (process.argv[2] === 'status') {
19
+ const { status } = await import('../src/status.mjs');
20
+ process.exitCode = status();
18
21
  } else {
19
22
  main().catch((err) => {
20
23
  process.stderr.write(`severally: fatal: ${err?.stack ?? err}\n`);
@@ -0,0 +1,26 @@
1
+ // Full key reference, and what each one does: CONFIG.md
2
+ // This file exercises every clis and consultants key and some server keys; you do not need to
3
+ // set them all -- most operators need only one or two. The paths, models and notes are made up:
4
+ // replace them with your own.
5
+ {
6
+ "server": { "max_rounds": 10, "timeout_ms": 900000 },
7
+ "clis": {
8
+ "codex": { "enabled": false, "note": "rate-limited until 15:00" },
9
+ "claude-code": {
10
+ "bin": "/opt/claude/bin/claude",
11
+ "args": ["--disallowedTools", "WebFetch"],
12
+ "env": { "HTTPS_PROXY": "http://proxy.internal:3128" }
13
+ },
14
+ "antigravity": { "bin": "/opt/agy/bin/agy" }
15
+ },
16
+ "consultants": {
17
+ "opus": { "cli": "claude-code", "model": "claude-opus-5-5", "effort": "max", "max_budget_usd": 5, "timeout_ms": 900000 },
18
+ "fable": { "cli": "claude-code", "model": "claude-fable-5-1" },
19
+ "sol": { "cli": "codex", "model": "gpt-6.1-sol" },
20
+ "gemini": { "cli": "antigravity", "model": "gemini-4-argon-high" },
21
+ "glm": { "cli": "opencode", "model": "zai-coding-plan/glm-5.3" },
22
+ "deepseek": { "cli": "opencode", "model": "opencode/deepseek-v4.1-flash-free", "enabled": false, "note": "trial ended" },
23
+ "nemotron": { "cli": "opencode", "model": "opencode/nemotron-3-ultra-free#", "vendor": "nvidia" }
24
+ },
25
+ "ranking": ["opus", "glm"]
26
+ }
@@ -42,8 +42,8 @@ OpenCode ──(skill)──> severally server ──> codex exec | claude -p
42
42
  - 相談の結果は、サーバを再起動したあとも、同じマシンで動くほかの severally のプロセスからも読めます。ほかのプロセスで
43
43
  実行中のものは実行中と返ります。終わる前にサーバがクラッシュや強制終了で止まったものは `interrupted` として返ります。
44
44
  サーバがふつうに終了したときは、実行中の相談を取り消しとして記録します。
45
- - 相談を取り消せるのは、それを実行しているプロセスだけです。ほかのプロセスから `consult_cancel` を呼ぶと、何も
46
- 止めなかったと返ります。
45
+ - ほかの severally のプロセスから `consult_cancel` を呼ぶと、相談を実行しているプロセスへの取り消しの依頼を
46
+ 残します。実行しているプロセスは 1 秒ごとにそれを確かめ、相談を止めます。
47
47
  - 主担当が自分では実行できない確認(ほかの人の答えが要るものなど)は、理由をつけてあなたに返します。
48
48
  - **あとで判断の理由を説明する必要がある決定**(インターフェース、移行、セキュリティ、並行処理)では、主担当は
49
49
  自分から、またはあなたに頼まれて、手順を足します。質問と成功の条件をはっきりさせ、課された制約と自分の仮定を
@@ -52,6 +52,8 @@ OpenCode ──(skill)──> severally server ──> codex exec | claude -p
52
52
  ふつうの変更なので、ほかの変更と同じようにレビューします。
53
53
  - モードは、計画のない依頼が `explore`、計画のある依頼が `review`、計画と反対の主張がある依頼が `debate` になります。
54
54
  計画を含んだ最初の `explore` の依頼は、サーバが受け付けません。追加の質問は、元の相談のモードを引き継ぎます。
55
+ 主担当が渡し直さない限り、ほかに渡したもの(相談相手、`network`、目的、制約、成功条件、事実、計画、反対の主張、
56
+ 資料)も引き継ぎ、新しいブリーフに書き直して載せます。
55
57
  追加の質問の上限は、設定ファイルの `server.max_rounds` で変えられます。
56
58
 
57
59
  ## 記録
@@ -134,7 +136,9 @@ Antigravity にはツールを制限するフラグが無いので、Antigravity
134
136
  質問がリポジトリのコードについてなら、主担当は最初の依頼で、関係するファイルを絶対パスで指定して渡します
135
137
  (`expose_paths`)。テストの出力やログのようにファイルでないものはブリーフに入れます。ブリーフに貼った抜粋は、
136
138
  ファイルの代わりではなく、ファイルに添えるものです。指定したファイルとディレクトリは、読み取り専用で相談相手の作業
137
- ディレクトリ(`./workspace` の下)に写します。上限は、合わせて 20 項目、500 ファイル、5 MB です。シンボリックリンクは
139
+ ディレクトリ(`./workspace` の下)に写します。上限は、合わせて 20 項目、500 ファイル、5 MB です。git の作業ツリーの中のディレクトリは、
140
+ git が管理するファイル(追跡しているものと、`.gitignore` で外していない未追跡のもの)だけを写すので、リポジトリのルートも
141
+ 上限に収まります。git の外では `.git` と `node_modules` を飛ばします。シンボリックリンクは
138
142
  たどらずに飛ばし、テキストファイルはブリーフと同じように認証情報を伏せ字にして、バイナリファイルはそのまま写します。
139
143
 
140
144
  変更中のコードを見せるときは、代わりにリポジトリのパスを `expose_diff` で渡せます。差分(`HEAD`、または `base` に
@@ -151,3 +155,7 @@ Antigravity にはツールを制限するフラグが無いので、Antigravity
151
155
  今の内容で写し直します。前の回から変わったかどうかを項目ごとに SHA-256 で示し、無くなったパスは飛ばして名前を挙げます。前の回の
152
156
  `expose_diff` は、差分を取り直さず、差分が触ったファイルだけを写し直します。主担当がその呼び出しで指定しない限り、
153
157
  何も写し直しません。
158
+
159
+ 全員に聞いた相談への追加の質問(`followup_to` に `group_id` を渡す)は、全員に同じ新しい質問を送ります。それぞれの
160
+ 相談相手は、自分のやりとりの最新の答えから続けるので、ブリーフにはその相談相手自身の前の回が入ります。まだ動いている
161
+ 相談相手、答えの無い相談相手、回数を使い切った相談相手には送らず、`consult_start` の応答の `skipped` に理由とともに挙げます。
@@ -43,8 +43,8 @@ OpenCode ──(skill)──> severally server ──> codex exec | claude -p
43
43
  - A consultation stays readable after the server restarts, and from any other severally process on the machine.
44
44
  One still running elsewhere reads as running; one whose server stopped abruptly (a crash or a kill) before it
45
45
  finished comes back as `interrupted`; an ordinary shutdown records its running consultations as cancelled.
46
- - Only the process running a consultation can cancel it; `consult_cancel` from another one says that nothing
47
- was signalled.
46
+ - `consult_cancel` from another severally process leaves a request for the process running the consultation,
47
+ which checks once a second and stops it.
48
48
  - A check the lead cannot run itself, such as one that needs another person's answer, comes back to you with the
49
49
  reason.
50
50
  - **For decisions you will have to justify later** (interfaces, migrations, security, concurrency), the lead
@@ -55,7 +55,9 @@ OpenCode ──(skill)──> severally server ──> codex exec | claude -p
55
55
  other.
56
56
  - A request with no plan is `explore`, one with a plan is `review`, and one with a plan and the opposing claims
57
57
  is `debate`. The server refuses a first `explore` request that contains the plan. A follow-up keeps the mode of
58
- the consultation it continues. The follow-up limit is `server.max_rounds` in the config file.
58
+ the consultation it continues, and everything else it was given unless the lead passes it again: the
59
+ consultant, `network`, the objective, constraints, success criteria, facts, plan, opposing claims and supplied
60
+ material. The new brief restates them. The follow-up limit is `server.max_rounds` in the config file.
59
61
 
60
62
  ## Records
61
63
 
@@ -136,7 +138,9 @@ When the question is about code in your repository, the lead hands the files ove
136
138
  absolute paths (`expose_paths`); what is not a file there, such as a test's output or a log, goes in the brief,
137
139
  and an excerpt in the brief goes alongside the files rather than instead of them. Those files and directories are
138
140
  copied read-only into the consultant's working directory (under `./workspace`): at most 20 entries, 500 files
139
- and 5 MB in total; symlinks are skipped rather than followed; text files are credential-masked exactly as the
141
+ and 5 MB in total. A directory inside a git work tree copies only the files git lists, tracked or untracked but
142
+ not ignored, so a repository root fits; outside git, `.git` and `node_modules` are skipped. Symlinks are skipped
143
+ rather than followed; text files are credential-masked exactly as the
140
144
  brief is, binary files are copied unchanged. For a change under review the lead can pass `expose_diff` with the
141
145
  repository's path instead: the diff (against `HEAD`, or a `base` revision) goes in the brief, cut to fit the
142
146
  brief's budget (20,000 characters at most), and every file it touches, untracked ones included, is copied under
@@ -150,3 +154,7 @@ directory with no files. When it needs the earlier round's files, the lead passe
150
154
  what that round exposed is copied again as it is now: each entry is marked changed or unchanged by its SHA-256, a
151
155
  path that no longer exists is left out and named, and an earlier `expose_diff` brings back the files it touched
152
156
  rather than a new diff. Nothing is copied again unless the lead asks for it in that call.
157
+
158
+ A follow-up to a fan-out (`followup_to` its `group_id`) asks every member the same new question, each continuing
159
+ its own chain from its latest answered round, so each brief carries that consultant's own earlier rounds. A member
160
+ that is still running, never answered or has used its rounds is not asked, and the `consult_start` response lists it under `skipped` with the reason.
@@ -10,7 +10,7 @@ npx はパッケージを自分のキャッシュに取ってきて、そこか
10
10
 
11
11
  ## 必要なもの
12
12
 
13
- README に書いた Node.js 20.10 以降とログイン済みの CLI のほかに、次の条件があります。
13
+ README に書いた Node.js 22 以降とログイン済みの CLI のほかに、次の条件があります。
14
14
 
15
15
  - macOS / Linux では、npm のグローバルな実行ファイルのディレクトリが `PATH` に入っていること。既定のプラグイン方式
16
16
  (下記)は、Codex が起動する `severally-mcp` コマンドをそこに入れます。`--manual` を付ければ不要です。
@@ -42,7 +42,11 @@ node scripts/install.mjs
42
42
 
43
43
  ## 登録の確かめ方
44
44
 
45
- クライアントを再起動したあと、それぞれが severally を認識しているかを確かめます。持っていない CLI の行は飛ばしてください。
45
+ `npx -y severally-mcp@latest status` を実行すると、相談を始めずに、まとめて確かめられます。設定ファイルが正しいか、
46
+ この機械から使える相談相手(使えないものはその理由)、入っている写しの版がそろっているか、どのクライアントに
47
+ severally が登録されているかを表示します。CLI にログインしているかは確かめません。それは最初の相談で分かります。
48
+
49
+ クライアントごとに自分で確かめるときは、再起動したあとに次を実行します。持っていない CLI の行は飛ばしてください。
46
50
 
47
51
  ```bash
48
52
  # macOS / Linux(プラグイン方式)
@@ -66,7 +70,7 @@ Claude Code だけで使うなら、クローンもインストーラも要り
66
70
  ```
67
71
 
68
72
  Claude Code を再起動し、`claude plugin details severally` で確かめます。プラグインはサーバを `node` で起動するので、
69
- Node.js 20.10 以降が `PATH` に入っている必要があります。ツールは `mcp__plugin_severally_severally__*` の名前で
73
+ Node.js 22 以降が `PATH` に入っている必要があります。ツールは `mcp__plugin_severally_severally__*` の名前で
70
74
  現れます。この方法を実機で確かめたのは Linux だけです。
71
75
 
72
76
  Codex、Antigravity、OpenCode からも使うなら、クローンしてインストーラも実行します([クローンから入れる](#クローンから入れる)を参照)。
@@ -94,8 +98,11 @@ Codex、Antigravity、OpenCode からも使うなら、クローンしてイン
94
98
  - プラグイン方式では、npm のグローバルなインストールも行います。これで、Codex が起動する `severally-mcp` コマンドが
95
99
  入ります。`--skip-global` を付けるとこの手順を飛ばしますが、`PATH` 上の `severally-mcp` がすでに写した runtime を
96
100
  指している場合しか受け付けません。手動方式ではグローバルなインストールは要りません。
97
- - クライアントの設定は、各 CLI のコマンド(`plugin add` / `mcp add`)だけで変えます。何かをする前に、各クライアントの
98
- 設定ファイル(`~/.claude.json`、`~/.codex/config.toml`、`~/.gemini/config/mcp_config.json` と
101
+ - クライアントの設定は、各 CLI のコマンド(`plugin add` / `mcp add`)だけで変えます。例外は手動で登録する Codex で、
102
+ `config.toml` の `[mcp_servers.severally]` の表に `tool_timeout_sec = 660` の 1 行も書きます(Codex のプラグインと
103
+ 同じ長い待ちにするためで、`codex mcp add` では設定できません)。表にすでに `tool_timeout_sec` があれば、その値を
104
+ 残し、待ち時間もそれに合わせます。1 行を書けなければ、長い待ちなしで Codex を登録し、そう表示します。
105
+ - 何かをする前に、各クライアントの設定ファイル(`~/.claude.json`、`~/.codex/config.toml`、`~/.gemini/config/mcp_config.json` と
99
106
  `~/.gemini/antigravity-cli/settings.json`、`~/.config/opencode/opencode.json(c)`)と既存の Skill のディレクトリを、
100
107
  `~/.severally/backups/<timestamp>/` にバックアップします。バックアップの名前は元のパスから付けます。
101
108
  - 方式を切り替えると、もう一方の方式で残った重複の登録を、バックアップしてから取り除きます。
@@ -106,7 +113,7 @@ Codex、Antigravity、OpenCode からも使うなら、クローンしてイン
106
113
 
107
114
  ## 外に何も送らないツールの許可の確認を省く
108
115
 
109
- `consult_start` 以外の 5 つのツールは手元で完結します。`consult_get`(1 回の相談で何度も呼ぶ)、`consult_list`、
116
+ `consult_start` 以外の 5 つのツールは手元で完結します。`consult_get`(相談が動いている間、繰り返し呼ぶ)、`consult_list`、
110
117
  `consult_cancel`、`consult_record`、`consult_export` です。どのクライアントにも許可リストに
111
118
  ツールを足すコマンドが無いので、インストーラは触りません。手で足してください。`consult_start` は確認を残します。
112
119
  ほかのベンダーに材料を送るのはこの呼び出しだからです。
@@ -132,6 +139,18 @@ Codex、Antigravity、OpenCode からも使うなら、クローンしてイン
132
139
  - **OpenCode** は、自分の `permission` の設定で変えていなければ、MCP ツールを確認なしで使います。
133
140
  - **Antigravity**: MCP ツールを 1 つずつ許可する規則の書き方を確かめていないので、ここでは扱いません。
134
141
 
142
+ ### 相談の開始の確認も省く
143
+
144
+ エージェントは自分から相談します(相談するかどうかを訊かないよう Skill が指示しています)。そのため `consult_start` の
145
+ 確認を残すと、エージェントが始める相談のたびに 1 回あなたの確認を待ちます。この確認は、材料が手元を離れる前の
146
+ 唯一の歯止めなので、既定では残します。省くときは、上のツールと同じ書き方で `consult_start` も足します。
147
+ Claude Code なら許可リストに `mcp__plugin_severally_severally__consult_start` を、Codex なら `config.toml` に
148
+ `[mcp_servers.severally.tools.consult_start]` の表を書きます(`--manual` で登録した場合。プラグイン方式では確かめていません)。
149
+
150
+ そうすると、どの相談でも次のものが、あなたに訊かずに各相談相手のモデルへ送られます。ブリーフ、渡したファイル、
151
+ 相談相手が実行中に読んだものです([相談相手が読めるものとできること](../README.ja.md#相談相手が読めるものとできること))。
152
+ エージェントが触れるものがすべてそのベンダーに渡ってよい環境でだけ、省いてください。
153
+
135
154
  ## 更新
136
155
 
137
156
  `npx -y severally-mcp@latest install` を実行します。