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
|
@@ -5,9 +5,9 @@ description: Use when a decision deserves a second, independent mind - an archit
|
|
|
5
5
|
|
|
6
6
|
# Consulting a peer agent
|
|
7
7
|
|
|
8
|
-
You have three peers, each reached through the `severally` MCP server as a fresh child session
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
You have three peers, each reached through the `severally` MCP server as a fresh child session that can read files
|
|
9
|
+
and search the web, but not edit them, load MCP tools, see your session or consult anyone else. Each knows only
|
|
10
|
+
what you put in the brief and the files you expose to it.{{EXECUTION_CAVEAT}}
|
|
11
11
|
|
|
12
12
|
## A normal consultation is three calls
|
|
13
13
|
|
|
@@ -27,9 +27,9 @@ see your session, or consult anyone else. In practice they know only what you pu
|
|
|
27
27
|
`status` is `running`. To work on something independent meanwhile, ask for a shorter wait (`reference.md`).
|
|
28
28
|
3. **Check one point, report, and record it once** (see **Before you hand the decision back**).
|
|
29
29
|
|
|
30
|
-
That is the whole routine. The rest
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
That is the whole routine. The rest — follow-ups, a prediction and reflection, the export, reading a fan-out
|
|
31
|
+
in detail — is in `reference.md`, in the same directory as this file. Read it for a decision you will have to
|
|
32
|
+
justify later, or when you follow up.
|
|
33
33
|
|
|
34
34
|
## Pick the consultant
|
|
35
35
|
|
|
@@ -43,12 +43,10 @@ costs one consultation's quota per consultant. Narrow to `target` (singular) onl
|
|
|
43
43
|
specific peer, or when the decision clearly does not warrant that much. This is the one rule for how many to
|
|
44
44
|
ask.
|
|
45
45
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
comes back as `target_ambiguous` with the candidates: ask the user which one they meant. One that is not
|
|
51
|
-
installed comes back as `target_unavailable` with the available list: take that as final and tell the user.
|
|
46
|
+
The operator decides which consultants exist; `consult_start`'s description lists the ones this machine can
|
|
47
|
+
actually reach. When the user names one, pass **the word the user used** as `target`
|
|
48
|
+
(「Claude Opusと相談して」 is `target: "claude opus"`). `target_ambiguous`: ask the user which one they meant.
|
|
49
|
+
`target_unavailable`: take the available list as final and tell the user.
|
|
52
50
|
|
|
53
51
|
**Do not pick a model yourself.** When the user named no one, ask everyone; overriding the operator's
|
|
54
52
|
consultants on your own judgement — including after a `usage_limit` failure — substitutes a different mind
|
|
@@ -62,9 +60,8 @@ answer can say which model answered.
|
|
|
62
60
|
|
|
63
61
|
## When this is worth it
|
|
64
62
|
|
|
65
|
-
When a wrong answer is expensive or hard to undo
|
|
66
|
-
|
|
67
|
-
failed attempts; or the user asked. Not for routine edits, a rename, a test that just needs writing, or
|
|
63
|
+
When a wrong answer is expensive or hard to undo (an interface, a migration, a security or concurrency design),
|
|
64
|
+
two options still look close, an investigation has stalled after two attempts, or the user asked. Not for
|
|
68
65
|
anything you would be comfortable defending on your own.
|
|
69
66
|
|
|
70
67
|
**Before you ask the user to approve a change that is hard to reverse** and nobody else has reviewed it,
|
|
@@ -81,16 +78,13 @@ Pass `initiator: "user"` when the user asked for the consultation; leave it out
|
|
|
81
78
|
- **Ask one decidable question.** What runs out the clock is scope, not brief length: when the budget runs out
|
|
82
79
|
the session is killed and you get nothing. Split "research everything about X" or three questions at once,
|
|
83
80
|
and ask the one whose answer changes what you do next.
|
|
84
|
-
- **Hand over the code.** The consultant
|
|
85
|
-
|
|
86
|
-
entries, 500 files, 5 MB; never your home directory or one holding keys). A repository root works: only the
|
|
87
|
-
files git lists are copied, nothing `.gitignore` excludes. Or pass
|
|
81
|
+
- **Hand over the code.** The consultant is not told where your repository is. Name the files by absolute path
|
|
82
|
+
in `context.expose_paths` (a repository root works; never your home directory or one holding keys), or pass
|
|
88
83
|
`context.expose_diff: { repo: "<absolute path>" }` for a change you are making. When `consult_start` answers
|
|
89
84
|
`files_exposed: 0` and the question is about code, `consult_cancel` and start again with `expose_paths`.
|
|
90
85
|
- **Put the load-bearing facts in `context.facts`**, and test output or a log in `context.artifacts`.
|
|
91
|
-
- **
|
|
92
|
-
proposal
|
|
93
|
-
own, leave `context.proposal` empty; a reviewed plan is answered around the plan.
|
|
86
|
+
- **Leave `mode` out**; it follows from the context. To gather opinions without showing your own, leave
|
|
87
|
+
`context.proposal` empty: a reviewed plan is answered around the plan.
|
|
94
88
|
- A constraint is read as fixed and will not be challenged; if it is your own call, put it under `facts` with
|
|
95
89
|
its reason. For material that must not leave the machine through a URL, pass `network: "off"`.
|
|
96
90
|
|
|
@@ -17,9 +17,8 @@ checked as given: the server rejects a first-round `explore` that carries a prop
|
|
|
17
17
|
anchoring-sensitive — if you want your plan critiqued, that is `review`.
|
|
18
18
|
|
|
19
19
|
**For a decision heavy enough to be worth two consultations**, ask `explore` first on the facts alone, then
|
|
20
|
-
`review` with the proposal, and read what the first raised that the second never did.
|
|
21
|
-
|
|
22
|
-
did, and the withheld run was the only one to question what the decision was even about.
|
|
20
|
+
`review` with the proposal, and read what the first raised that the second never did. A consultant that sees
|
|
21
|
+
your proposal tends to answer around it; one that does not is more likely to question the framing itself.
|
|
23
22
|
|
|
24
23
|
## A brief for a decision you will live with
|
|
25
24
|
|
|
@@ -129,14 +128,21 @@ By default a chain has five rounds: one initial round plus up to four follow-ups
|
|
|
129
128
|
(`followup_to: "<previous job_id>"`); the operator can configure 1–20 (`server.max_rounds`), and
|
|
130
129
|
`rounds_remaining` says what is left. `followup_to: "<group_id>"`, with no `target` or `targets`, sends the same new
|
|
131
130
|
question to every member of a fan-out, each continuing from its own latest round with its own history; a member
|
|
132
|
-
that is still running, never answered or has used its rounds is listed under `skipped` and not asked.
|
|
131
|
+
that is still running, never answered or has used its rounds is listed under `skipped` and not asked.
|
|
132
|
+
|
|
133
|
+
A follow-up needs only `followup_to` and the new `question`:
|
|
134
|
+
`consult_start({ request: { followup_to: "<job_id>", question: "..." } })`. The consultant, the mode, `network` and what
|
|
135
|
+
the earlier round was given (objective, constraints, success criteria, facts, proposal, counterpoints,
|
|
136
|
+
artifacts) carry over, and the brief restates them; a field you pass replaces the earlier one, an empty list
|
|
137
|
+
included. A follow-up starts in a fresh working directory with no files: pass
|
|
133
138
|
`context.expose_from_parent: true` to copy again, as they are now, the paths the earlier round exposed (a changed
|
|
134
139
|
or vanished entry is marked), and leave it off when the follow-up does not need them.
|
|
135
140
|
|
|
136
141
|
Spend follow-ups only where you and the consultant actually diverge: quote the specific point, give the evidence
|
|
137
142
|
that answers it, and ask what would change their view. Write your verdicts with `consult_record` first: the
|
|
138
143
|
consultant is shown each earlier point with your verdict, so it answers what your checking found instead of
|
|
139
|
-
restating it. A follow-up works across a server restart
|
|
144
|
+
restating it. A follow-up works across a server restart; `consult_list` shows an earlier session's
|
|
145
|
+
consultations with their `job_id` and `group_id`.
|
|
140
146
|
|
|
141
147
|
After each follow-up, state in one sentence the cause you still differ on. If it is the same as last round and
|
|
142
148
|
the round brought no new evidence and no new condition that would change the judgement, stop and hand the user
|
|
@@ -5,9 +5,9 @@ description: Use when a decision deserves a second, independent mind - an archit
|
|
|
5
5
|
|
|
6
6
|
# Consulting a peer agent
|
|
7
7
|
|
|
8
|
-
You have three peers, each reached through the `severally` MCP server as a fresh child session
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
You have three peers, each reached through the `severally` MCP server as a fresh child session that can read files
|
|
9
|
+
and search the web, but not edit them, load MCP tools, see your session or consult anyone else. Each knows only
|
|
10
|
+
what you put in the brief and the files you expose to it.
|
|
11
11
|
|
|
12
12
|
One caveat on that list: a consultant can read local files. Its writes are blocked,
|
|
13
13
|
its network reaches only web search and browsing (none with `network: "off"`), credential and history
|
|
@@ -34,9 +34,9 @@ copied read-only into its working directory. The Codex consultant additionally h
|
|
|
34
34
|
`status` is `running`. To work on something independent meanwhile, ask for a shorter wait (`reference.md`).
|
|
35
35
|
3. **Check one point, report, and record it once** (see **Before you hand the decision back**).
|
|
36
36
|
|
|
37
|
-
That is the whole routine. The rest
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
That is the whole routine. The rest — follow-ups, a prediction and reflection, the export, reading a fan-out
|
|
38
|
+
in detail — is in `reference.md`, in the same directory as this file. Read it for a decision you will have to
|
|
39
|
+
justify later, or when you follow up.
|
|
40
40
|
|
|
41
41
|
## Pick the consultant
|
|
42
42
|
|
|
@@ -54,12 +54,10 @@ costs one consultation's quota per consultant. Narrow to `target` (singular) onl
|
|
|
54
54
|
specific peer, or when the decision clearly does not warrant that much. This is the one rule for how many to
|
|
55
55
|
ask.
|
|
56
56
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
comes back as `target_ambiguous` with the candidates: ask the user which one they meant. One that is not
|
|
62
|
-
installed comes back as `target_unavailable` with the available list: take that as final and tell the user.
|
|
57
|
+
The operator decides which consultants exist; `consult_start`'s description lists the ones this machine can
|
|
58
|
+
actually reach. When the user names one, pass **the word the user used** as `target`
|
|
59
|
+
(「Claude Opusと相談して」 is `target: "claude opus"`). `target_ambiguous`: ask the user which one they meant.
|
|
60
|
+
`target_unavailable`: take the available list as final and tell the user.
|
|
63
61
|
|
|
64
62
|
**Do not pick a model yourself.** When the user named no one, ask everyone; overriding the operator's
|
|
65
63
|
consultants on your own judgement — including after a `usage_limit` failure — substitutes a different mind
|
|
@@ -73,9 +71,8 @@ answer can say which model answered.
|
|
|
73
71
|
|
|
74
72
|
## When this is worth it
|
|
75
73
|
|
|
76
|
-
When a wrong answer is expensive or hard to undo
|
|
77
|
-
|
|
78
|
-
failed attempts; or the user asked. Not for routine edits, a rename, a test that just needs writing, or
|
|
74
|
+
When a wrong answer is expensive or hard to undo (an interface, a migration, a security or concurrency design),
|
|
75
|
+
two options still look close, an investigation has stalled after two attempts, or the user asked. Not for
|
|
79
76
|
anything you would be comfortable defending on your own.
|
|
80
77
|
|
|
81
78
|
**Before you ask the user to approve a change that is hard to reverse** and nobody else has reviewed it,
|
|
@@ -92,16 +89,13 @@ Pass `initiator: "user"` when the user asked for the consultation; leave it out
|
|
|
92
89
|
- **Ask one decidable question.** What runs out the clock is scope, not brief length: when the budget runs out
|
|
93
90
|
the session is killed and you get nothing. Split "research everything about X" or three questions at once,
|
|
94
91
|
and ask the one whose answer changes what you do next.
|
|
95
|
-
- **Hand over the code.** The consultant
|
|
96
|
-
|
|
97
|
-
entries, 500 files, 5 MB; never your home directory or one holding keys). A repository root works: only the
|
|
98
|
-
files git lists are copied, nothing `.gitignore` excludes. Or pass
|
|
92
|
+
- **Hand over the code.** The consultant is not told where your repository is. Name the files by absolute path
|
|
93
|
+
in `context.expose_paths` (a repository root works; never your home directory or one holding keys), or pass
|
|
99
94
|
`context.expose_diff: { repo: "<absolute path>" }` for a change you are making. When `consult_start` answers
|
|
100
95
|
`files_exposed: 0` and the question is about code, `consult_cancel` and start again with `expose_paths`.
|
|
101
96
|
- **Put the load-bearing facts in `context.facts`**, and test output or a log in `context.artifacts`.
|
|
102
|
-
- **
|
|
103
|
-
proposal
|
|
104
|
-
own, leave `context.proposal` empty; a reviewed plan is answered around the plan.
|
|
97
|
+
- **Leave `mode` out**; it follows from the context. To gather opinions without showing your own, leave
|
|
98
|
+
`context.proposal` empty: a reviewed plan is answered around the plan.
|
|
105
99
|
- A constraint is read as fixed and will not be challenged; if it is your own call, put it under `facts` with
|
|
106
100
|
its reason. For material that must not leave the machine through a URL, pass `network: "off"`.
|
|
107
101
|
|
|
@@ -17,9 +17,8 @@ checked as given: the server rejects a first-round `explore` that carries a prop
|
|
|
17
17
|
anchoring-sensitive — if you want your plan critiqued, that is `review`.
|
|
18
18
|
|
|
19
19
|
**For a decision heavy enough to be worth two consultations**, ask `explore` first on the facts alone, then
|
|
20
|
-
`review` with the proposal, and read what the first raised that the second never did.
|
|
21
|
-
|
|
22
|
-
did, and the withheld run was the only one to question what the decision was even about.
|
|
20
|
+
`review` with the proposal, and read what the first raised that the second never did. A consultant that sees
|
|
21
|
+
your proposal tends to answer around it; one that does not is more likely to question the framing itself.
|
|
23
22
|
|
|
24
23
|
## A brief for a decision you will live with
|
|
25
24
|
|
|
@@ -129,14 +128,21 @@ By default a chain has five rounds: one initial round plus up to four follow-ups
|
|
|
129
128
|
(`followup_to: "<previous job_id>"`); the operator can configure 1–20 (`server.max_rounds`), and
|
|
130
129
|
`rounds_remaining` says what is left. `followup_to: "<group_id>"`, with no `target` or `targets`, sends the same new
|
|
131
130
|
question to every member of a fan-out, each continuing from its own latest round with its own history; a member
|
|
132
|
-
that is still running, never answered or has used its rounds is listed under `skipped` and not asked.
|
|
131
|
+
that is still running, never answered or has used its rounds is listed under `skipped` and not asked.
|
|
132
|
+
|
|
133
|
+
A follow-up needs only `followup_to` and the new `question`:
|
|
134
|
+
`consult_start({ request: { followup_to: "<job_id>", question: "..." } })`. The consultant, the mode, `network` and what
|
|
135
|
+
the earlier round was given (objective, constraints, success criteria, facts, proposal, counterpoints,
|
|
136
|
+
artifacts) carry over, and the brief restates them; a field you pass replaces the earlier one, an empty list
|
|
137
|
+
included. A follow-up starts in a fresh working directory with no files: pass
|
|
133
138
|
`context.expose_from_parent: true` to copy again, as they are now, the paths the earlier round exposed (a changed
|
|
134
139
|
or vanished entry is marked), and leave it off when the follow-up does not need them.
|
|
135
140
|
|
|
136
141
|
Spend follow-ups only where you and the consultant actually diverge: quote the specific point, give the evidence
|
|
137
142
|
that answers it, and ask what would change their view. Write your verdicts with `consult_record` first: the
|
|
138
143
|
consultant is shown each earlier point with your verdict, so it answers what your checking found instead of
|
|
139
|
-
restating it. A follow-up works across a server restart
|
|
144
|
+
restating it. A follow-up works across a server restart; `consult_list` shows an earlier session's
|
|
145
|
+
consultations with their `job_id` and `group_id`.
|
|
140
146
|
|
|
141
147
|
After each follow-up, state in one sentence the cause you still differ on. If it is the same as last round and
|
|
142
148
|
the round brought no new evidence and no new condition that would change the judgement, stop and hand the user
|
|
@@ -6,9 +6,9 @@ allowed-tools: mcp__plugin_severally_severally__consult_get mcp__severally__cons
|
|
|
6
6
|
|
|
7
7
|
# Consulting a peer agent
|
|
8
8
|
|
|
9
|
-
You have three peers, each reached through the `severally` MCP server as a fresh child session
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
You have three peers, each reached through the `severally` MCP server as a fresh child session that can read files
|
|
10
|
+
and search the web, but not edit them, load MCP tools, see your session or consult anyone else. Each knows only
|
|
11
|
+
what you put in the brief and the files you expose to it.
|
|
12
12
|
|
|
13
13
|
One caveat on that list: a consultant can read local files. Its writes are blocked,
|
|
14
14
|
its network reaches only web search and browsing (none with `network: "off"`), credential and history
|
|
@@ -35,9 +35,9 @@ copied read-only into its working directory. The Codex consultant additionally h
|
|
|
35
35
|
`status` is `running`. To work on something independent meanwhile, ask for a shorter wait (`reference.md`).
|
|
36
36
|
3. **Check one point, report, and record it once** (see **Before you hand the decision back**).
|
|
37
37
|
|
|
38
|
-
That is the whole routine. The rest
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
That is the whole routine. The rest — follow-ups, a prediction and reflection, the export, reading a fan-out
|
|
39
|
+
in detail — is in `reference.md`, in the same directory as this file. Read it for a decision you will have to
|
|
40
|
+
justify later, or when you follow up.
|
|
41
41
|
|
|
42
42
|
## Pick the consultant
|
|
43
43
|
|
|
@@ -55,12 +55,10 @@ costs one consultation's quota per consultant. Narrow to `target` (singular) onl
|
|
|
55
55
|
specific peer, or when the decision clearly does not warrant that much. This is the one rule for how many to
|
|
56
56
|
ask.
|
|
57
57
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
comes back as `target_ambiguous` with the candidates: ask the user which one they meant. One that is not
|
|
63
|
-
installed comes back as `target_unavailable` with the available list: take that as final and tell the user.
|
|
58
|
+
The operator decides which consultants exist; `consult_start`'s description lists the ones this machine can
|
|
59
|
+
actually reach. When the user names one, pass **the word the user used** as `target`
|
|
60
|
+
(「Claude Opusと相談して」 is `target: "claude opus"`). `target_ambiguous`: ask the user which one they meant.
|
|
61
|
+
`target_unavailable`: take the available list as final and tell the user.
|
|
64
62
|
|
|
65
63
|
**Do not pick a model yourself.** When the user named no one, ask everyone; overriding the operator's
|
|
66
64
|
consultants on your own judgement — including after a `usage_limit` failure — substitutes a different mind
|
|
@@ -74,9 +72,8 @@ answer can say which model answered.
|
|
|
74
72
|
|
|
75
73
|
## When this is worth it
|
|
76
74
|
|
|
77
|
-
When a wrong answer is expensive or hard to undo
|
|
78
|
-
|
|
79
|
-
failed attempts; or the user asked. Not for routine edits, a rename, a test that just needs writing, or
|
|
75
|
+
When a wrong answer is expensive or hard to undo (an interface, a migration, a security or concurrency design),
|
|
76
|
+
two options still look close, an investigation has stalled after two attempts, or the user asked. Not for
|
|
80
77
|
anything you would be comfortable defending on your own.
|
|
81
78
|
|
|
82
79
|
**Before you ask the user to approve a change that is hard to reverse** and nobody else has reviewed it,
|
|
@@ -93,16 +90,13 @@ Pass `initiator: "user"` when the user asked for the consultation; leave it out
|
|
|
93
90
|
- **Ask one decidable question.** What runs out the clock is scope, not brief length: when the budget runs out
|
|
94
91
|
the session is killed and you get nothing. Split "research everything about X" or three questions at once,
|
|
95
92
|
and ask the one whose answer changes what you do next.
|
|
96
|
-
- **Hand over the code.** The consultant
|
|
97
|
-
|
|
98
|
-
entries, 500 files, 5 MB; never your home directory or one holding keys). A repository root works: only the
|
|
99
|
-
files git lists are copied, nothing `.gitignore` excludes. Or pass
|
|
93
|
+
- **Hand over the code.** The consultant is not told where your repository is. Name the files by absolute path
|
|
94
|
+
in `context.expose_paths` (a repository root works; never your home directory or one holding keys), or pass
|
|
100
95
|
`context.expose_diff: { repo: "<absolute path>" }` for a change you are making. When `consult_start` answers
|
|
101
96
|
`files_exposed: 0` and the question is about code, `consult_cancel` and start again with `expose_paths`.
|
|
102
97
|
- **Put the load-bearing facts in `context.facts`**, and test output or a log in `context.artifacts`.
|
|
103
|
-
- **
|
|
104
|
-
proposal
|
|
105
|
-
own, leave `context.proposal` empty; a reviewed plan is answered around the plan.
|
|
98
|
+
- **Leave `mode` out**; it follows from the context. To gather opinions without showing your own, leave
|
|
99
|
+
`context.proposal` empty: a reviewed plan is answered around the plan.
|
|
106
100
|
- A constraint is read as fixed and will not be challenged; if it is your own call, put it under `facts` with
|
|
107
101
|
its reason. For material that must not leave the machine through a URL, pass `network: "off"`.
|
|
108
102
|
|
|
@@ -17,9 +17,8 @@ checked as given: the server rejects a first-round `explore` that carries a prop
|
|
|
17
17
|
anchoring-sensitive — if you want your plan critiqued, that is `review`.
|
|
18
18
|
|
|
19
19
|
**For a decision heavy enough to be worth two consultations**, ask `explore` first on the facts alone, then
|
|
20
|
-
`review` with the proposal, and read what the first raised that the second never did.
|
|
21
|
-
|
|
22
|
-
did, and the withheld run was the only one to question what the decision was even about.
|
|
20
|
+
`review` with the proposal, and read what the first raised that the second never did. A consultant that sees
|
|
21
|
+
your proposal tends to answer around it; one that does not is more likely to question the framing itself.
|
|
23
22
|
|
|
24
23
|
## A brief for a decision you will live with
|
|
25
24
|
|
|
@@ -129,14 +128,21 @@ By default a chain has five rounds: one initial round plus up to four follow-ups
|
|
|
129
128
|
(`followup_to: "<previous job_id>"`); the operator can configure 1–20 (`server.max_rounds`), and
|
|
130
129
|
`rounds_remaining` says what is left. `followup_to: "<group_id>"`, with no `target` or `targets`, sends the same new
|
|
131
130
|
question to every member of a fan-out, each continuing from its own latest round with its own history; a member
|
|
132
|
-
that is still running, never answered or has used its rounds is listed under `skipped` and not asked.
|
|
131
|
+
that is still running, never answered or has used its rounds is listed under `skipped` and not asked.
|
|
132
|
+
|
|
133
|
+
A follow-up needs only `followup_to` and the new `question`:
|
|
134
|
+
`consult_start({ request: { followup_to: "<job_id>", question: "..." } })`. The consultant, the mode, `network` and what
|
|
135
|
+
the earlier round was given (objective, constraints, success criteria, facts, proposal, counterpoints,
|
|
136
|
+
artifacts) carry over, and the brief restates them; a field you pass replaces the earlier one, an empty list
|
|
137
|
+
included. A follow-up starts in a fresh working directory with no files: pass
|
|
133
138
|
`context.expose_from_parent: true` to copy again, as they are now, the paths the earlier round exposed (a changed
|
|
134
139
|
or vanished entry is marked), and leave it off when the follow-up does not need them.
|
|
135
140
|
|
|
136
141
|
Spend follow-ups only where you and the consultant actually diverge: quote the specific point, give the evidence
|
|
137
142
|
that answers it, and ask what would change their view. Write your verdicts with `consult_record` first: the
|
|
138
143
|
consultant is shown each earlier point with your verdict, so it answers what your checking found instead of
|
|
139
|
-
restating it. A follow-up works across a server restart
|
|
144
|
+
restating it. A follow-up works across a server restart; `consult_list` shows an earlier session's
|
|
145
|
+
consultations with their `job_id` and `group_id`.
|
|
140
146
|
|
|
141
147
|
After each follow-up, state in one sentence the cause you still differ on. If it is the same as last round and
|
|
142
148
|
the round brought no new evidence and no new condition that would change the judgement, stop and hand the user
|
|
@@ -5,9 +5,9 @@ description: Use when a decision deserves a second, independent mind - an archit
|
|
|
5
5
|
|
|
6
6
|
# Consulting a peer agent
|
|
7
7
|
|
|
8
|
-
You have three peers, each reached through the `severally` MCP server as a fresh child session
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
You have three peers, each reached through the `severally` MCP server as a fresh child session that can read files
|
|
9
|
+
and search the web, but not edit them, load MCP tools, see your session or consult anyone else. Each knows only
|
|
10
|
+
what you put in the brief and the files you expose to it.
|
|
11
11
|
|
|
12
12
|
One caveat on that list: a consultant can read local files. Its writes are blocked,
|
|
13
13
|
its network reaches only web search and browsing (none with `network: "off"`), credential and history
|
|
@@ -34,9 +34,9 @@ copied read-only into its working directory.
|
|
|
34
34
|
`status` is `running`. To work on something independent meanwhile, ask for a shorter wait (`reference.md`).
|
|
35
35
|
3. **Check one point, report, and record it once** (see **Before you hand the decision back**).
|
|
36
36
|
|
|
37
|
-
That is the whole routine. The rest
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
That is the whole routine. The rest — follow-ups, a prediction and reflection, the export, reading a fan-out
|
|
38
|
+
in detail — is in `reference.md`, in the same directory as this file. Read it for a decision you will have to
|
|
39
|
+
justify later, or when you follow up.
|
|
40
40
|
|
|
41
41
|
## Pick the consultant
|
|
42
42
|
|
|
@@ -54,12 +54,10 @@ costs one consultation's quota per consultant. Narrow to `target` (singular) onl
|
|
|
54
54
|
specific peer, or when the decision clearly does not warrant that much. This is the one rule for how many to
|
|
55
55
|
ask.
|
|
56
56
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
comes back as `target_ambiguous` with the candidates: ask the user which one they meant. One that is not
|
|
62
|
-
installed comes back as `target_unavailable` with the available list: take that as final and tell the user.
|
|
57
|
+
The operator decides which consultants exist; `consult_start`'s description lists the ones this machine can
|
|
58
|
+
actually reach. When the user names one, pass **the word the user used** as `target`
|
|
59
|
+
(「Claude Opusと相談して」 is `target: "claude opus"`). `target_ambiguous`: ask the user which one they meant.
|
|
60
|
+
`target_unavailable`: take the available list as final and tell the user.
|
|
63
61
|
|
|
64
62
|
**Do not pick a model yourself.** When the user named no one, ask everyone; overriding the operator's
|
|
65
63
|
consultants on your own judgement — including after a `usage_limit` failure — substitutes a different mind
|
|
@@ -73,9 +71,8 @@ answer can say which model answered.
|
|
|
73
71
|
|
|
74
72
|
## When this is worth it
|
|
75
73
|
|
|
76
|
-
When a wrong answer is expensive or hard to undo
|
|
77
|
-
|
|
78
|
-
failed attempts; or the user asked. Not for routine edits, a rename, a test that just needs writing, or
|
|
74
|
+
When a wrong answer is expensive or hard to undo (an interface, a migration, a security or concurrency design),
|
|
75
|
+
two options still look close, an investigation has stalled after two attempts, or the user asked. Not for
|
|
79
76
|
anything you would be comfortable defending on your own.
|
|
80
77
|
|
|
81
78
|
**Before you ask the user to approve a change that is hard to reverse** and nobody else has reviewed it,
|
|
@@ -92,16 +89,13 @@ Pass `initiator: "user"` when the user asked for the consultation; leave it out
|
|
|
92
89
|
- **Ask one decidable question.** What runs out the clock is scope, not brief length: when the budget runs out
|
|
93
90
|
the session is killed and you get nothing. Split "research everything about X" or three questions at once,
|
|
94
91
|
and ask the one whose answer changes what you do next.
|
|
95
|
-
- **Hand over the code.** The consultant
|
|
96
|
-
|
|
97
|
-
entries, 500 files, 5 MB; never your home directory or one holding keys). A repository root works: only the
|
|
98
|
-
files git lists are copied, nothing `.gitignore` excludes. Or pass
|
|
92
|
+
- **Hand over the code.** The consultant is not told where your repository is. Name the files by absolute path
|
|
93
|
+
in `context.expose_paths` (a repository root works; never your home directory or one holding keys), or pass
|
|
99
94
|
`context.expose_diff: { repo: "<absolute path>" }` for a change you are making. When `consult_start` answers
|
|
100
95
|
`files_exposed: 0` and the question is about code, `consult_cancel` and start again with `expose_paths`.
|
|
101
96
|
- **Put the load-bearing facts in `context.facts`**, and test output or a log in `context.artifacts`.
|
|
102
|
-
- **
|
|
103
|
-
proposal
|
|
104
|
-
own, leave `context.proposal` empty; a reviewed plan is answered around the plan.
|
|
97
|
+
- **Leave `mode` out**; it follows from the context. To gather opinions without showing your own, leave
|
|
98
|
+
`context.proposal` empty: a reviewed plan is answered around the plan.
|
|
105
99
|
- A constraint is read as fixed and will not be challenged; if it is your own call, put it under `facts` with
|
|
106
100
|
its reason. For material that must not leave the machine through a URL, pass `network: "off"`.
|
|
107
101
|
|
|
@@ -17,9 +17,8 @@ checked as given: the server rejects a first-round `explore` that carries a prop
|
|
|
17
17
|
anchoring-sensitive — if you want your plan critiqued, that is `review`.
|
|
18
18
|
|
|
19
19
|
**For a decision heavy enough to be worth two consultations**, ask `explore` first on the facts alone, then
|
|
20
|
-
`review` with the proposal, and read what the first raised that the second never did.
|
|
21
|
-
|
|
22
|
-
did, and the withheld run was the only one to question what the decision was even about.
|
|
20
|
+
`review` with the proposal, and read what the first raised that the second never did. A consultant that sees
|
|
21
|
+
your proposal tends to answer around it; one that does not is more likely to question the framing itself.
|
|
23
22
|
|
|
24
23
|
## A brief for a decision you will live with
|
|
25
24
|
|
|
@@ -129,14 +128,21 @@ By default a chain has five rounds: one initial round plus up to four follow-ups
|
|
|
129
128
|
(`followup_to: "<previous job_id>"`); the operator can configure 1–20 (`server.max_rounds`), and
|
|
130
129
|
`rounds_remaining` says what is left. `followup_to: "<group_id>"`, with no `target` or `targets`, sends the same new
|
|
131
130
|
question to every member of a fan-out, each continuing from its own latest round with its own history; a member
|
|
132
|
-
that is still running, never answered or has used its rounds is listed under `skipped` and not asked.
|
|
131
|
+
that is still running, never answered or has used its rounds is listed under `skipped` and not asked.
|
|
132
|
+
|
|
133
|
+
A follow-up needs only `followup_to` and the new `question`:
|
|
134
|
+
`consult_start({ request: { followup_to: "<job_id>", question: "..." } })`. The consultant, the mode, `network` and what
|
|
135
|
+
the earlier round was given (objective, constraints, success criteria, facts, proposal, counterpoints,
|
|
136
|
+
artifacts) carry over, and the brief restates them; a field you pass replaces the earlier one, an empty list
|
|
137
|
+
included. A follow-up starts in a fresh working directory with no files: pass
|
|
133
138
|
`context.expose_from_parent: true` to copy again, as they are now, the paths the earlier round exposed (a changed
|
|
134
139
|
or vanished entry is marked), and leave it off when the follow-up does not need them.
|
|
135
140
|
|
|
136
141
|
Spend follow-ups only where you and the consultant actually diverge: quote the specific point, give the evidence
|
|
137
142
|
that answers it, and ask what would change their view. Write your verdicts with `consult_record` first: the
|
|
138
143
|
consultant is shown each earlier point with your verdict, so it answers what your checking found instead of
|
|
139
|
-
restating it. A follow-up works across a server restart
|
|
144
|
+
restating it. A follow-up works across a server restart; `consult_list` shows an earlier session's
|
|
145
|
+
consultations with their `job_id` and `group_id`.
|
|
140
146
|
|
|
141
147
|
After each follow-up, state in one sentence the cause you still differ on. If it is the same as last round and
|
|
142
148
|
the round brought no new evidence and no new condition that would change the judgement, stop and hand the user
|
|
@@ -5,9 +5,9 @@ description: Use when a decision deserves a second, independent mind - an archit
|
|
|
5
5
|
|
|
6
6
|
# Consulting a peer agent
|
|
7
7
|
|
|
8
|
-
You have three peers, each reached through the `severally` MCP server as a fresh child session
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
You have three peers, each reached through the `severally` MCP server as a fresh child session that can read files
|
|
9
|
+
and search the web, but not edit them, load MCP tools, see your session or consult anyone else. Each knows only
|
|
10
|
+
what you put in the brief and the files you expose to it.
|
|
11
11
|
|
|
12
12
|
One caveat on that list: a consultant can read local files. Its writes are blocked,
|
|
13
13
|
its network reaches only web search and browsing (none with `network: "off"`), credential and history
|
|
@@ -34,9 +34,9 @@ copied read-only into its working directory. The Codex consultant additionally h
|
|
|
34
34
|
`status` is `running`. To work on something independent meanwhile, ask for a shorter wait (`reference.md`).
|
|
35
35
|
3. **Check one point, report, and record it once** (see **Before you hand the decision back**).
|
|
36
36
|
|
|
37
|
-
That is the whole routine. The rest
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
That is the whole routine. The rest — follow-ups, a prediction and reflection, the export, reading a fan-out
|
|
38
|
+
in detail — is in `reference.md`, in the same directory as this file. Read it for a decision you will have to
|
|
39
|
+
justify later, or when you follow up.
|
|
40
40
|
|
|
41
41
|
## Pick the consultant
|
|
42
42
|
|
|
@@ -54,12 +54,10 @@ costs one consultation's quota per consultant. Narrow to `target` (singular) onl
|
|
|
54
54
|
specific peer, or when the decision clearly does not warrant that much. This is the one rule for how many to
|
|
55
55
|
ask.
|
|
56
56
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
comes back as `target_ambiguous` with the candidates: ask the user which one they meant. One that is not
|
|
62
|
-
installed comes back as `target_unavailable` with the available list: take that as final and tell the user.
|
|
57
|
+
The operator decides which consultants exist; `consult_start`'s description lists the ones this machine can
|
|
58
|
+
actually reach. When the user names one, pass **the word the user used** as `target`
|
|
59
|
+
(「Claude Opusと相談して」 is `target: "claude opus"`). `target_ambiguous`: ask the user which one they meant.
|
|
60
|
+
`target_unavailable`: take the available list as final and tell the user.
|
|
63
61
|
|
|
64
62
|
**Do not pick a model yourself.** When the user named no one, ask everyone; overriding the operator's
|
|
65
63
|
consultants on your own judgement — including after a `usage_limit` failure — substitutes a different mind
|
|
@@ -73,9 +71,8 @@ answer can say which model answered.
|
|
|
73
71
|
|
|
74
72
|
## When this is worth it
|
|
75
73
|
|
|
76
|
-
When a wrong answer is expensive or hard to undo
|
|
77
|
-
|
|
78
|
-
failed attempts; or the user asked. Not for routine edits, a rename, a test that just needs writing, or
|
|
74
|
+
When a wrong answer is expensive or hard to undo (an interface, a migration, a security or concurrency design),
|
|
75
|
+
two options still look close, an investigation has stalled after two attempts, or the user asked. Not for
|
|
79
76
|
anything you would be comfortable defending on your own.
|
|
80
77
|
|
|
81
78
|
**Before you ask the user to approve a change that is hard to reverse** and nobody else has reviewed it,
|
|
@@ -92,16 +89,13 @@ Pass `initiator: "user"` when the user asked for the consultation; leave it out
|
|
|
92
89
|
- **Ask one decidable question.** What runs out the clock is scope, not brief length: when the budget runs out
|
|
93
90
|
the session is killed and you get nothing. Split "research everything about X" or three questions at once,
|
|
94
91
|
and ask the one whose answer changes what you do next.
|
|
95
|
-
- **Hand over the code.** The consultant
|
|
96
|
-
|
|
97
|
-
entries, 500 files, 5 MB; never your home directory or one holding keys). A repository root works: only the
|
|
98
|
-
files git lists are copied, nothing `.gitignore` excludes. Or pass
|
|
92
|
+
- **Hand over the code.** The consultant is not told where your repository is. Name the files by absolute path
|
|
93
|
+
in `context.expose_paths` (a repository root works; never your home directory or one holding keys), or pass
|
|
99
94
|
`context.expose_diff: { repo: "<absolute path>" }` for a change you are making. When `consult_start` answers
|
|
100
95
|
`files_exposed: 0` and the question is about code, `consult_cancel` and start again with `expose_paths`.
|
|
101
96
|
- **Put the load-bearing facts in `context.facts`**, and test output or a log in `context.artifacts`.
|
|
102
|
-
- **
|
|
103
|
-
proposal
|
|
104
|
-
own, leave `context.proposal` empty; a reviewed plan is answered around the plan.
|
|
97
|
+
- **Leave `mode` out**; it follows from the context. To gather opinions without showing your own, leave
|
|
98
|
+
`context.proposal` empty: a reviewed plan is answered around the plan.
|
|
105
99
|
- A constraint is read as fixed and will not be challenged; if it is your own call, put it under `facts` with
|
|
106
100
|
its reason. For material that must not leave the machine through a URL, pass `network: "off"`.
|
|
107
101
|
|
|
@@ -17,9 +17,8 @@ checked as given: the server rejects a first-round `explore` that carries a prop
|
|
|
17
17
|
anchoring-sensitive — if you want your plan critiqued, that is `review`.
|
|
18
18
|
|
|
19
19
|
**For a decision heavy enough to be worth two consultations**, ask `explore` first on the facts alone, then
|
|
20
|
-
`review` with the proposal, and read what the first raised that the second never did.
|
|
21
|
-
|
|
22
|
-
did, and the withheld run was the only one to question what the decision was even about.
|
|
20
|
+
`review` with the proposal, and read what the first raised that the second never did. A consultant that sees
|
|
21
|
+
your proposal tends to answer around it; one that does not is more likely to question the framing itself.
|
|
23
22
|
|
|
24
23
|
## A brief for a decision you will live with
|
|
25
24
|
|
|
@@ -129,14 +128,21 @@ By default a chain has five rounds: one initial round plus up to four follow-ups
|
|
|
129
128
|
(`followup_to: "<previous job_id>"`); the operator can configure 1–20 (`server.max_rounds`), and
|
|
130
129
|
`rounds_remaining` says what is left. `followup_to: "<group_id>"`, with no `target` or `targets`, sends the same new
|
|
131
130
|
question to every member of a fan-out, each continuing from its own latest round with its own history; a member
|
|
132
|
-
that is still running, never answered or has used its rounds is listed under `skipped` and not asked.
|
|
131
|
+
that is still running, never answered or has used its rounds is listed under `skipped` and not asked.
|
|
132
|
+
|
|
133
|
+
A follow-up needs only `followup_to` and the new `question`:
|
|
134
|
+
`consult_start({ request: { followup_to: "<job_id>", question: "..." } })`. The consultant, the mode, `network` and what
|
|
135
|
+
the earlier round was given (objective, constraints, success criteria, facts, proposal, counterpoints,
|
|
136
|
+
artifacts) carry over, and the brief restates them; a field you pass replaces the earlier one, an empty list
|
|
137
|
+
included. A follow-up starts in a fresh working directory with no files: pass
|
|
133
138
|
`context.expose_from_parent: true` to copy again, as they are now, the paths the earlier round exposed (a changed
|
|
134
139
|
or vanished entry is marked), and leave it off when the follow-up does not need them.
|
|
135
140
|
|
|
136
141
|
Spend follow-ups only where you and the consultant actually diverge: quote the specific point, give the evidence
|
|
137
142
|
that answers it, and ask what would change their view. Write your verdicts with `consult_record` first: the
|
|
138
143
|
consultant is shown each earlier point with your verdict, so it answers what your checking found instead of
|
|
139
|
-
restating it. A follow-up works across a server restart
|
|
144
|
+
restating it. A follow-up works across a server restart; `consult_list` shows an earlier session's
|
|
145
|
+
consultations with their `job_id` and `group_id`.
|
|
140
146
|
|
|
141
147
|
After each follow-up, state in one sentence the cause you still differ on. If it is the same as last round and
|
|
142
148
|
the round brought no new evidence and no new condition that would change the judgement, stop and hand the user
|