severally-mcp 2.1.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.
- package/CODE_OF_CONDUCT.md +83 -0
- package/CONFIG.md +10 -6
- package/README.ja.md +132 -65
- package/README.md +136 -69
- package/bin/severally-mcp.mjs +3 -0
- package/config.example.json +26 -0
- package/docs/how-it-works.ja.md +4 -2
- package/docs/how-it-works.md +5 -3
- package/docs/install.ja.md +12 -5
- package/docs/install.md +14 -5
- package/package.json +4 -2
- package/plugins/severally/.claude-plugin/plugin.json +1 -1
- package/plugins/severally/.codex-plugin/plugin.json +1 -1
- package/plugins/severally/dist/severally-mcp.mjs +29493 -28302
- package/plugins/severally/skills/_template/SKILL.md.tmpl +16 -22
- package/plugins/severally/skills/_template/reference.md.tmpl +11 -5
- package/plugins/severally/skills/antigravity/severally/SKILL.md +16 -22
- package/plugins/severally/skills/antigravity/severally/reference.md +11 -5
- package/plugins/severally/skills/claude/severally/SKILL.md +16 -22
- package/plugins/severally/skills/claude/severally/reference.md +11 -5
- package/plugins/severally/skills/codex/severally/SKILL.md +16 -22
- package/plugins/severally/skills/codex/severally/reference.md +11 -5
- package/plugins/severally/skills/opencode/severally/SKILL.md +16 -22
- package/plugins/severally/skills/opencode/severally/reference.md +11 -5
- package/scripts/install.mjs +90 -5
- package/src/consultants.mjs +31 -10
- package/src/jobs.mjs +123 -11
- package/src/policy.mjs +44 -7
- package/src/run.mjs +38 -5
- package/src/schema.mjs +30 -8
- package/src/server.mjs +70 -122
- package/src/status.mjs +63 -0
- package/src/store.mjs +44 -1
package/README.md
CHANGED
|
@@ -22,12 +22,21 @@ The plugin puts the question to several independent consultants, and returns eac
|
|
|
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
|
-
- [
|
|
28
|
-
- [How it works](#how-it-works)
|
|
36
|
+
- [Background](#background)
|
|
29
37
|
- [Install](#install)
|
|
30
38
|
- [Requirements](#requirements)
|
|
39
|
+
- [Command line](#command-line)
|
|
31
40
|
- [Updating](#updating)
|
|
32
41
|
- [Uninstall](#uninstall)
|
|
33
42
|
- [Usage](#usage)
|
|
@@ -35,66 +44,15 @@ before deciding how to take the answers.
|
|
|
35
44
|
- [When the answers come back](#when-the-answers-come-back)
|
|
36
45
|
- [Modes](#modes)
|
|
37
46
|
- [History and records](#history-and-records)
|
|
47
|
+
- [Example](#example)
|
|
48
|
+
- [Recommended setup](#recommended-setup)
|
|
38
49
|
- [Configuration](#configuration)
|
|
39
50
|
- [What a consultant can see and do](#what-a-consultant-can-see-and-do)
|
|
40
51
|
- [API](#api)
|
|
41
52
|
- [Contributing](#contributing)
|
|
42
53
|
- [License](#license)
|
|
43
54
|
|
|
44
|
-
##
|
|
45
|
-
|
|
46
|
-
Here is how severally changes the way the agent works, shown in one situation: the agent comes up with a change,
|
|
47
|
-
and before asking you to approve it, it asks the consultants for their opinions.
|
|
48
|
-
|
|
49
|
-
The example is a small online shop's API. `GET /products/:id`, which serves the product page, is slow: about
|
|
50
|
-
800 ms. The API loads each product joined with its inventory and its reviews. Prices depend on the member's tier,
|
|
51
|
-
and gold members get a 10% discount.
|
|
52
|
-
|
|
53
|
-
The agent, running in Claude Code, comes up with a common fix: "keep each response in an in-memory Map for 5
|
|
54
|
-
minutes". Before asking you "can I go ahead?", it shows the plan to three consultants: Codex, Antigravity, and a
|
|
55
|
-
fresh Claude Code session (a new session of the agent's own CLI, with none of its conversation). Along with the
|
|
56
|
-
plan, it hands them read-only copies of the code involved. The answers come back one per consultant, side by side
|
|
57
|
-
(excerpt from a real run against a sample API):
|
|
58
|
-
|
|
59
|
-
```
|
|
60
|
-
codex do_not_proceed the price depends on the member's tier, so keyed by product id alone, the first
|
|
61
|
-
visitor's price is served to everyone; the join inflates stock; 4 workers keep
|
|
62
|
-
separate copies, so an order that changes stock does not clear the old value
|
|
63
|
-
claude-code do_not_proceed whoever fills the cache first sets the price everyone else sees for 5 minutes;
|
|
64
|
-
4 workers each keep their own copy, so stock stays stale after orders; fix the
|
|
65
|
-
join bug first too
|
|
66
|
-
antigravity alternative member discounts leak to other users; the 800 ms comes from joining inventory
|
|
67
|
-
and reviews, which also skews stock; rewrite the query and it is likely fast
|
|
68
|
-
enough without a cache
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
Each answer opens with a bottom line: `proceed`, `do_not_proceed`, `alternative` (do something else instead) or
|
|
72
|
-
`undetermined`. The three found the same problems, each on its own: the price leak, the inflated stock and the
|
|
73
|
-
per-worker caches. Where they differ is what comes next. Codex and Claude Code recommend fixing the query and
|
|
74
|
-
then caching only the part that does not depend on the user. Antigravity says that with the query fixed, a cache
|
|
75
|
-
may not be needed at all. Merge the answers into one and that difference gets buried.
|
|
76
|
-
|
|
77
|
-
The agent that asked (the *lead*) reads the findings and then checks them in its own repository. Of the two
|
|
78
|
-
findings, one reproduced exactly; the other turned out not to be happening yet, and that changed the response.
|
|
79
|
-
|
|
80
|
-
```
|
|
81
|
-
finding the query joins inventory and reviews together, so stock is multiplied by the number of reviews
|
|
82
|
-
checked ran the query on a test database: 5 units in stock, 4 reviews -> stock comes out as 20
|
|
83
|
-
so fix the query before any cache
|
|
84
|
-
|
|
85
|
-
finding a gold member's 10% discount would be served to guests
|
|
86
|
-
checked login is not wired in yet, so today everyone gets the base price.
|
|
87
|
-
the leak starts the day login is added
|
|
88
|
-
so cache only the product data that does not depend on the user, and compute the price on each request
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
What comes back to you is not a vote of "2 against, 1 alternative". It is what was checked, what the lead
|
|
92
|
-
recommends, and what has not been checked yet. Here that is whether the fixed query is fast enough without a
|
|
93
|
-
cache (it needs production-like data), and how stale the stock shown after an order may be (that one is yours to
|
|
94
|
-
decide). You make the call. The checked results stay next to the findings and can be exported as Markdown into
|
|
95
|
-
your repository (see [History and records](#history-and-records)).
|
|
96
|
-
|
|
97
|
-
## How it works
|
|
55
|
+
## Background
|
|
98
56
|
|
|
99
57
|
```mermaid
|
|
100
58
|
flowchart TB
|
|
@@ -124,16 +82,19 @@ What a consultant can read and do is under [What a consultant can see and do](#w
|
|
|
124
82
|
|
|
125
83
|
### Requirements
|
|
126
84
|
|
|
127
|
-
- Node.js
|
|
85
|
+
- Node.js 22 or newer
|
|
128
86
|
- At least one of the four CLIs, installed and logged in. One is enough: with only Claude Code, you can still ask a
|
|
129
87
|
fresh Claude Code session.
|
|
130
88
|
- On macOS and Linux, npm's global executable directory on `PATH`: the default install puts a `severally-mcp`
|
|
131
89
|
command there for Codex to launch. `--manual` does without it.
|
|
132
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.
|
|
93
|
+
|
|
133
94
|
One line, on macOS, Linux and Windows (PowerShell or Command Prompt):
|
|
134
95
|
|
|
135
96
|
```bash
|
|
136
|
-
npx -y severally-mcp@2.1
|
|
97
|
+
npx -y severally-mcp@2.3.1 install
|
|
137
98
|
```
|
|
138
99
|
|
|
139
100
|
The installer registers severally with each CLI it finds on `PATH`. Add `--dry-run` at the end to print what it
|
|
@@ -143,6 +104,24 @@ registration.
|
|
|
143
104
|
Installing from the Claude Code plugin marketplace or from a clone, checking the registration, and what the
|
|
144
105
|
installer changes are in [docs/install.md](docs/install.md).
|
|
145
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
|
+
|
|
146
125
|
### Updating
|
|
147
126
|
|
|
148
127
|
This line replaces your install with the latest version, with no version number to look up:
|
|
@@ -182,6 +161,9 @@ Ask in your own words, in the chat with your agent:
|
|
|
182
161
|
- The agent also consults without being asked: when an investigation stalls, when two options look equally
|
|
183
162
|
good, and before asking you to approve a hard-to-reverse change.
|
|
184
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
|
+
|
|
185
167
|
It is worth it for important design decisions, hard-to-reverse choices, and two or more failed attempts at the
|
|
186
168
|
same bug. One consultation takes minutes and real quota, so it is not for small fixes.
|
|
187
169
|
|
|
@@ -190,9 +172,10 @@ same bug. One consultation takes minutes and real quota, so it is not for small
|
|
|
190
172
|
Starting a consultation does not make the agent wait: it can work on something that does not depend on the
|
|
191
173
|
answers, which usually arrive within one to ten minutes (Antigravity is the slowest).
|
|
192
174
|
|
|
193
|
-
Every answer
|
|
194
|
-
determine, conditions that would change its judgement, and how to check.
|
|
195
|
-
|
|
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".
|
|
196
179
|
|
|
197
180
|
The agent checks the findings that would change the decision itself, then tells you what it checked, what it did
|
|
198
181
|
not adopt, and what is still unverified.
|
|
@@ -203,7 +186,7 @@ There are three modes, chosen from what the agent hands over. You can also ask f
|
|
|
203
186
|
Codex").
|
|
204
187
|
|
|
205
188
|
- `explore`: asks without showing the plan, so the consultant answers with its own approach first
|
|
206
|
-
- `review`: shows the plan and asks what is wrong with it (the example
|
|
189
|
+
- `review`: shows the plan and asks what is wrong with it (the [example](#example))
|
|
207
190
|
- `debate`: shows the plan with the opposing claims, and asks the consultant to weigh them
|
|
208
191
|
|
|
209
192
|
After the first answer, the agent can send follow-ups to the same consultant: up to four by default, five rounds
|
|
@@ -219,12 +202,94 @@ repository.
|
|
|
219
202
|
How to name consultants, how a consultation runs, and the records in detail are in
|
|
220
203
|
[docs/how-it-works.md](docs/how-it-works.md).
|
|
221
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
|
+
|
|
222
287
|
## Configuration
|
|
223
288
|
|
|
224
289
|
**No configuration needed by default.** At startup the server looks for the CLIs on `PATH`, and each one it finds
|
|
225
290
|
becomes a consultant on its default model. To turn a CLI off or add consultants on other models, put a
|
|
226
291
|
`~/.severally/config.json` in place. From a clone, `npm run init-config` writes a template. Every key is in
|
|
227
|
-
[CONFIG.md](CONFIG.md), and [config.example.json](config.example.json) is
|
|
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
|
|
228
293
|
the client after changing it.
|
|
229
294
|
|
|
230
295
|
To consult a model you reach with an API key (OpenRouter, or another OpenAI-compatible API) or a local model,
|
|
@@ -248,13 +313,15 @@ history is never sent. No consultant can:
|
|
|
248
313
|
| Antigravity | yes (`view_file`) | blocked (tool hook) | none | no | yes, unless `network: "off"` |
|
|
249
314
|
| OpenCode | yes (`read` / `glob` / `grep`) | blocked (permission rules) | none (its Code Mode `execute` is refused) | no | yes, unless `network: "off"` |
|
|
250
315
|
|
|
251
|
-
Every consultant starts in
|
|
252
|
-
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.
|
|
253
318
|
Codex does not block by file name, so a `.env` in your repository is readable to it.
|
|
254
319
|
|
|
255
320
|
**A consultant that can both read your disk and browse could carry what it read out in a URL**, for example if a
|
|
256
321
|
page it opens tells it to. To prevent that, the agent passes `network: "off"`: every consultant in that round then
|
|
257
|
-
has no web search or browsing.
|
|
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.
|
|
258
325
|
|
|
259
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).
|
|
260
327
|
|
|
@@ -267,9 +334,9 @@ it exposes, go to each consultant's model. Every argument is described in the to
|
|
|
267
334
|
|---|---|
|
|
268
335
|
| `consult_start` | Starts a consultation with one consultant (`target`) or several (`targets`), and returns a `job_id` or `group_id` at once |
|
|
269
336
|
| `consult_get` | Waits for a consultation and returns its state or answer; with `ids`, just those points of the answer |
|
|
270
|
-
| `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 |
|
|
271
338
|
| `consult_record` | Writes the lead's verdicts on an answer's points, and what the answer added |
|
|
272
|
-
| `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 |
|
|
273
340
|
| `consult_export` | Returns a consultation, follow-ups and verdicts included, as Markdown |
|
|
274
341
|
|
|
275
342
|
The arguments of `consult_start` that matter most:
|
|
@@ -278,7 +345,7 @@ The arguments of `consult_start` that matter most:
|
|
|
278
345
|
directory in a git repository copies only the files git lists (nothing `.gitignore` excludes)
|
|
279
346
|
- `context.expose_diff`: `{ repo, base? }`, a change in progress: the diff goes in the brief and the files it touches are copied
|
|
280
347
|
- `network`: `"off"` takes web search and browsing away from every consultant in the round
|
|
281
|
-
- `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
|
|
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
|
|
282
349
|
|
|
283
350
|
## Contributing
|
|
284
351
|
|
package/bin/severally-mcp.mjs
CHANGED
|
@@ -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
|
+
}
|
package/docs/how-it-works.ja.md
CHANGED
|
@@ -42,8 +42,8 @@ OpenCode ──(skill)──> severally server ──> codex exec | claude -p
|
|
|
42
42
|
- 相談の結果は、サーバを再起動したあとも、同じマシンで動くほかの severally のプロセスからも読めます。ほかのプロセスで
|
|
43
43
|
実行中のものは実行中と返ります。終わる前にサーバがクラッシュや強制終了で止まったものは `interrupted` として返ります。
|
|
44
44
|
サーバがふつうに終了したときは、実行中の相談を取り消しとして記録します。
|
|
45
|
-
-
|
|
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
|
## 記録
|
package/docs/how-it-works.md
CHANGED
|
@@ -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
|
-
-
|
|
47
|
-
|
|
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
|
|
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
|
|
package/docs/install.ja.md
CHANGED
|
@@ -10,7 +10,7 @@ npx はパッケージを自分のキャッシュに取ってきて、そこか
|
|
|
10
10
|
|
|
11
11
|
## 必要なもの
|
|
12
12
|
|
|
13
|
-
README に書いた Node.js
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
- 方式を切り替えると、もう一方の方式で残った重複の登録を、バックアップしてから取り除きます。
|
package/docs/install.md
CHANGED
|
@@ -10,7 +10,7 @@ into that cache, so it can be cleared afterwards.
|
|
|
10
10
|
|
|
11
11
|
## Requirements
|
|
12
12
|
|
|
13
|
-
Beyond Node.js
|
|
13
|
+
Beyond Node.js 22 or newer and a logged-in CLI, as in the README:
|
|
14
14
|
|
|
15
15
|
- macOS/Linux: npm's global executable directory on `PATH`. The default (plugin mode, below) installs a
|
|
16
16
|
`severally-mcp` command there for Codex to launch. `--manual` does without it.
|
|
@@ -42,7 +42,12 @@ run `npm run init-config` (see [Configuration](../README.md#configuration) in th
|
|
|
42
42
|
|
|
43
43
|
## Checking the registration
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
`npx -y severally-mcp@latest status` shows it all at once, without starting a consultation: whether the config
|
|
46
|
+
file is valid, which consultants this machine can reach (and why the others cannot), whether every installed copy
|
|
47
|
+
is the same version, and which clients have severally registered. It does not check that a CLI is logged in; the
|
|
48
|
+
first consultation shows that.
|
|
49
|
+
|
|
50
|
+
To check one client yourself, after restarting it. Skip the lines for CLIs you don't have:
|
|
46
51
|
|
|
47
52
|
```bash
|
|
48
53
|
# macOS / Linux (plugin mode)
|
|
@@ -65,7 +70,7 @@ For Claude Code alone, no clone and no installer are needed. In Claude Code:
|
|
|
65
70
|
/plugin install severally@severally
|
|
66
71
|
```
|
|
67
72
|
|
|
68
|
-
Restart Claude Code and check with `claude plugin details severally`. Node.js
|
|
73
|
+
Restart Claude Code and check with `claude plugin details severally`. Node.js 22 or newer must be on `PATH`,
|
|
69
74
|
since the plugin starts its server with `node`. The tools appear as `mcp__plugin_severally_severally__*`. This
|
|
70
75
|
route has been tried on Linux only.
|
|
71
76
|
|
|
@@ -94,8 +99,12 @@ Windows. Pass `--manual` to use manual mode on macOS/Linux too.
|
|
|
94
99
|
- In plugin mode it also runs a global npm install, which provides the `severally-mcp` command that Codex
|
|
95
100
|
launches. `--skip-global` skips that step and is accepted only when `severally-mcp` on `PATH` already points
|
|
96
101
|
at the copied runtime. Manual mode needs no global install.
|
|
97
|
-
- It changes client settings only through each CLI's own commands (`plugin add` / `mcp add`)
|
|
98
|
-
|
|
102
|
+
- It changes client settings only through each CLI's own commands (`plugin add` / `mcp add`), with one
|
|
103
|
+
exception: for a manually registered Codex it also writes one line, `tool_timeout_sec = 660`, into
|
|
104
|
+
`config.toml` under `[mcp_servers.severally]` (the same long wait the Codex plugin has; `codex mcp add` cannot
|
|
105
|
+
set it). An existing `tool_timeout_sec` there is kept, and the wait follows it. If the line cannot be written,
|
|
106
|
+
Codex is registered without the long wait and the installer says so.
|
|
107
|
+
- Before it does anything, it backs up each client's settings file (`~/.claude.json`, `~/.codex/config.toml`,
|
|
99
108
|
`~/.gemini/config/mcp_config.json` and `~/.gemini/antigravity-cli/settings.json`,
|
|
100
109
|
`~/.config/opencode/opencode.json(c)`) and any existing Skill directory to `~/.severally/backups/<timestamp>/`,
|
|
101
110
|
naming each backup after its original path.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "severally-mcp",
|
|
3
|
-
"version": "2.1
|
|
3
|
+
"version": "2.3.1",
|
|
4
4
|
"description": "A plugin that lets your AI agent ask other coding agents for independent opinions, returned separately.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -27,10 +27,12 @@
|
|
|
27
27
|
"README.md",
|
|
28
28
|
"README.ja.md",
|
|
29
29
|
"CONFIG.md",
|
|
30
|
+
"config.example.json",
|
|
31
|
+
"CODE_OF_CONDUCT.md",
|
|
30
32
|
"docs"
|
|
31
33
|
],
|
|
32
34
|
"engines": {
|
|
33
|
-
"node": ">=
|
|
35
|
+
"node": ">=22"
|
|
34
36
|
},
|
|
35
37
|
"scripts": {
|
|
36
38
|
"test": "node scripts/test.mjs",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://anthropic.com/claude-code/plugin.schema.json",
|
|
3
3
|
"name": "severally",
|
|
4
|
-
"version": "2.1
|
|
4
|
+
"version": "2.3.1",
|
|
5
5
|
"description": "Ask Codex, Claude Code, Antigravity or OpenCode for an independent opinion, review or structured debate, in a sandboxed child session that can read files and search the web but cannot edit files, change the system, or start other agents.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "coz.a",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "severally",
|
|
3
|
-
"version": "2.1
|
|
3
|
+
"version": "2.3.1",
|
|
4
4
|
"description": "Ask Codex, Claude Code, Antigravity or OpenCode for an independent opinion, review or structured debate, in a sandboxed child session that can read files and search the web but cannot edit files, change the system, or start other agents.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "coz.a",
|