@martinffx/atelier 3.4.0 → 3.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/README.md +8 -4
- package/dist/atelier.js +102 -2
- package/package.json +1 -1
- package/skills/atelier-orchestrator/SKILL.md +13 -6
- package/skills/code-review/SKILL.md +55 -30
- package/skills/code-review/references/output.md +128 -46
- package/skills/code-review/references/personas.md +345 -0
- package/skills/code-review/references/roles/author.md +97 -0
- package/skills/code-review/references/roles/critic.md +179 -0
- package/skills/code-review/references/roles/judge.md +96 -0
- package/skills/code-review/references/roles/triage.md +54 -0
- package/skills/code-review/references/rq.md +173 -459
- package/skills/code-review/references/rs.md +28 -7
- package/skills/code-subagents/SKILL.md +5 -4
- package/skills/code-subagents/references/batch-reviewer-prompt.md +2 -2
- package/skills/code-subagents/references/implementor-prompt.md +3 -3
- package/skills/spec-finish/SKILL.md +4 -3
- package/skills/spec-implement/SKILL.md +2 -1
- package/skills/spec-loop/SKILL.md +91 -0
- package/skills/spec-plan/SKILL.md +1 -2
- package/skills/code-review/references/reviewers.md +0 -925
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,31 @@
|
|
|
4
4
|
|
|
5
5
|
- **breaking:** rename the `recon` agent to `sentinel`. Existing Atelier configuration is migrated automatically and legacy generated files are removed during the next command.
|
|
6
6
|
|
|
7
|
+
## [3.6.0](https://github.com/martinffx/atelier/compare/v3.5.0...v3.6.0) (2026-10-25)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Features
|
|
11
|
+
|
|
12
|
+
* **claude:** disable conflicting Claude Code built-ins ([40e074d](https://github.com/martinffx/atelier/commit/40e074df4e55a300ea4521fb05fad9232525715d))
|
|
13
|
+
|
|
14
|
+
## [3.5.0](https://github.com/martinffx/atelier/compare/v3.4.0...v3.5.0) (2026-10-18)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Features
|
|
18
|
+
|
|
19
|
+
* **code-review:** run rq as a critique, defense and ruling debate ([45ccfce](https://github.com/martinffx/atelier/commit/45ccfce6673f4eae8fc60dea5c5e0c61a28de510))
|
|
20
|
+
* **code-review:** run simplicity on every review and consolidate reviewer prompts ([35b5927](https://github.com/martinffx/atelier/commit/35b59278eb6b690baa9cd95d68095e92e11d39e9))
|
|
21
|
+
* **skills:** add spec-loop to run a Spec-backed Plan to a PR ([368afab](https://github.com/martinffx/atelier/commit/368afabe5e591e41bd7e0e05e118f35b775002c8))
|
|
22
|
+
* **skills:** require explicit agent selection for subagents ([81dd276](https://github.com/martinffx/atelier/commit/81dd2764006b3af292cb7fb0893e091da81bba4e))
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
### Bug Fixes
|
|
26
|
+
|
|
27
|
+
* **code-review:** close debate protocol gaps from review ([a370713](https://github.com/martinffx/atelier/commit/a370713903f48b93ebb65f51d35001c9fecad5e5))
|
|
28
|
+
* **code-review:** narrow when a finding counts as mechanical ([80551b7](https://github.com/martinffx/atelier/commit/80551b7002f6f1911f029e3710e6beb602abfa1a))
|
|
29
|
+
* **spec-loop:** align Finish with the debate review ([ed671a9](https://github.com/martinffx/atelier/commit/ed671a9feb6cef7f7d2ae95bf15ff9a60622dfd8))
|
|
30
|
+
* **spec-loop:** stop on blocking findings to match spec-finish ([7301061](https://github.com/martinffx/atelier/commit/7301061902d68c4a8db173fba2410986bafba414))
|
|
31
|
+
|
|
7
32
|
## [3.4.0](https://github.com/martinffx/atelier/compare/v3.3.0...v3.4.0) (2026-10-09)
|
|
8
33
|
|
|
9
34
|
|
package/README.md
CHANGED
|
@@ -63,6 +63,9 @@ flowchart TD
|
|
|
63
63
|
SI --> CR[code-review]
|
|
64
64
|
CR --> F[spec-finish]
|
|
65
65
|
F --> PR[code-pull-request]
|
|
66
|
+
PS -->|Unattended run| SL[spec-loop]
|
|
67
|
+
SL -->|Per-batch review| SL
|
|
68
|
+
SL --> F
|
|
66
69
|
SI -.->|Revise plan| P
|
|
67
70
|
SI -.->|Revisit design| B
|
|
68
71
|
F -.->|Issues found| SI
|
|
@@ -70,7 +73,7 @@ flowchart TD
|
|
|
70
73
|
|
|
71
74
|
The workflow is deliberately harder to rush than an unstructured agent session. `spec-brainstorm` writes only `design.md`, and `spec-plan` writes only its selected plan output. Each skill then stops. The developer starts planning and implementation with separate requests. This records decisions when they need to survive the conversation, keeps implementation tied to an approved plan, and requires evidence before calling the work complete.
|
|
72
75
|
|
|
73
|
-
Before a plan is presented, `spec-plan` runs a design review and a critical challenge as parallel subagents and notes what changed. During implementation, `spec-implement` hands tasks whose design is already settled to a subagent, keeping design-sensitive work in the main thread.
|
|
76
|
+
Before a plan is presented, `spec-plan` runs a design review and a critical challenge as parallel subagents and notes what changed. During implementation, `spec-implement` hands tasks whose design is already settled to a subagent, keeping design-sensitive work in the main thread. The main agent explicitly selects the agent for each step by the kind of work, per `atelier-orchestrator`.
|
|
74
77
|
|
|
75
78
|
## Grill the idea
|
|
76
79
|
|
|
@@ -84,7 +87,7 @@ Grill me on this migration plan
|
|
|
84
87
|
|
|
85
88
|
## Review the code
|
|
86
89
|
|
|
87
|
-
[`code-review`](skills/code-review/SKILL.md) runs a
|
|
90
|
+
[`code-review`](skills/code-review/SKILL.md) runs a review as a debate rather than asking one agent for a general opinion. A read-only scout triages the diff, specialist Critics (always including a simplicity check) raise findings in parallel, an Author defends the change against each one, and Critics concede or maintain with evidence. A Judge rules only on what is still contested. Findings are labelled issue, suggestion, question, nitpick or praise, and as blocking or not; quotes are checked mechanically and the main agent audits what each turn did. See [the research notes](docs/research/multi-agent-debate.md).
|
|
88
91
|
|
|
89
92
|
```text
|
|
90
93
|
rq # Review the diff to main
|
|
@@ -113,7 +116,7 @@ The CLI also configures four specialist agents for Claude Code, OpenCode, Codex,
|
|
|
113
116
|
| **Architect** | Domain modelling, system design, and architecture review |
|
|
114
117
|
| **Keymaker** | Fast scaffolding of files and boilerplate from templates and existing patterns |
|
|
115
118
|
|
|
116
|
-
|
|
119
|
+
Each subagent launch explicitly selects one of these four by matching the task to its description; the harness default is never used. Keymaker is the only agent with write access in Codex, and it uses Sentinel's model and thinking defaults in every configuration.
|
|
117
120
|
|
|
118
121
|
Run `npx @martinffx/atelier@latest --help` for CLI commands and options. Each skill contains its own operating instructions and loads when its context applies.
|
|
119
122
|
|
|
@@ -138,7 +141,7 @@ Run `atelier update --harness <claude|codex|opencode>` to choose models and thin
|
|
|
138
141
|
|
|
139
142
|
Thinking is stored as `agents[].thinking`, `build_thinking`, and `plan_thinking` in `~/.atelier/config.json`. Values are model-specific: `default`, `off`, `on`, `low`, `medium`, `high`, `xhigh`, or `max`. The picker offers only verified capabilities. Custom models and catalog models whose controls have not been verified offer `default` only. Missing fields preserve legacy behavior; **Keep existing behavior** preserves that omission when editing. In particular, old Codex configurations retain medium agent/Build effort and high Plan effort. An explicit `default` omits Atelier's native effort override; other harness settings can still apply.
|
|
140
143
|
|
|
141
|
-
- **Claude Code:** `opusplan` switches Opus/Sonnet by mode. Other session models share one thinking setting across modes. Atelier writes canonical `modelSettings.<model>.effortLevel` entries and subagent `effort`. Session `max` cannot be persisted, though supported subagents can use it. Use Claude Code **2.1.280 or later** for Opus 5.5 and the current aliases. Atelier also sets `disableClaudeAiConnectors: true`, `syncClaudeAiSkills: false` and `syncClaudeAiPlugins: false` in `~/.claude/settings.json`, so nothing from claude.ai is synced into Claude Code; `atelier remove` clears them unless you changed them. [Claude configuration](https://code.claude.com/docs/en/model-config)
|
|
144
|
+
- **Claude Code:** `opusplan` switches Opus/Sonnet by mode. Other session models share one thinking setting across modes. Atelier writes canonical `modelSettings.<model>.effortLevel` entries and subagent `effort`. Session `max` cannot be persisted, though supported subagents can use it. Use Claude Code **2.1.280 or later** for Opus 5.5 and the current aliases. Atelier also sets `disableClaudeAiConnectors: true`, `syncClaudeAiSkills: false` and `syncClaudeAiPlugins: false` in `~/.claude/settings.json`, so nothing from claude.ai is synced into Claude Code; `atelier remove` clears them unless you changed them. It also disables the Claude Code built-ins that clash with Atelier skills (`disableBundledSkills`, `enableArtifact: false`, `disableWorkflows`, deny rules for `Artifact`, `ArtifactComments`, `ArtifactData`, `Workflow` and `DesignSync`, and `skillOverrides` turning off the `/security-review` and `/ultrareview` commands). Interactive `init` also offers a checklist of optional built-ins to disable, none selected by default: `cron` (`/loop` and the Cron tools), `chrome` (the claude-in-chrome MCP server) and `remote-trigger` (`RemoteTrigger`). `atelier remove` and unticking an option undo these the same way. [Claude configuration](https://code.claude.com/docs/en/model-config)
|
|
142
145
|
- **Codex:** Plan and Build share the selected session model, with separate reasoning settings. Oracle and Architect use independent Astra configurations. `off` maps to native `none`, available on Sol/Luna but not Astra. [Codex configuration](https://developers.openai.com/codex/config-reference/)
|
|
143
146
|
- **OpenCode:** all five assignments are independent. Use **1.18.30 or later** for GPT-6 integration. Atelier sends explicit provider options rather than relying on automatically discovered reasoning variants: `reasoningEffort` for OpenAI-compatible routes, `effort` for Anthropic, and `reasoningConfig` for Bedrock. GLM 5.3 supports low/high/max; it does not support medium. Bedrock defaults use US inference profiles with `us-east-1`. [OpenCode agents](https://opencode.ai/docs/agents/)
|
|
144
147
|
- **MiMo:** `on`/`off` maps to `thinking.type: enabled`/`disabled`. There are no graded effort tiers. OpenCode agent files omit the old fixed temperature override so provider defaults apply. [MiMo API](https://mimo.mi.com/docs/en-US/api/chat/openai-api)
|
|
@@ -174,6 +177,7 @@ Some Atelier skills have more direct lineage:
|
|
|
174
177
|
| [`spec-brainstorm`](skills/spec-brainstorm/SKILL.md) | Superpowers [`brainstorming`](https://github.com/obra/superpowers/tree/main/skills/brainstorming) | Adapted from its conversational discovery and section-by-section design approval. |
|
|
175
178
|
| [`spec-plan`](skills/spec-plan/SKILL.md) | Superpowers [`writing-plans`](https://github.com/obra/superpowers/tree/main/skills/writing-plans) | Inspired by its explicit, verifiable implementation plans. |
|
|
176
179
|
| [`spec-implement`](skills/spec-implement/SKILL.md) | Superpowers [`executing-plans`](https://github.com/obra/superpowers/tree/main/skills/executing-plans) and [`test-driven-development`](https://github.com/obra/superpowers/tree/main/skills/test-driven-development) | Inspired by plan-driven execution and test-first feedback loops. |
|
|
180
|
+
| [`spec-loop`](skills/spec-loop/SKILL.md) | Superpowers [`subagent-driven-development`](https://github.com/obra/superpowers/tree/main/skills/subagent-driven-development) | Inspired by its fresh implementer per task, review after each unit, and final whole-branch review. Atelier reviews per batch. |
|
|
177
181
|
| [`spec-finish`](skills/spec-finish/SKILL.md) | Superpowers [`finishing-a-development-branch`](https://github.com/obra/superpowers/tree/main/skills/finishing-a-development-branch) and [`verification-before-completion`](https://github.com/obra/superpowers/tree/main/skills/verification-before-completion) | Inspired by its validation and completion workflow. |
|
|
178
182
|
| [`code-subagents`](skills/code-subagents/SKILL.md) | Superpowers [`subagent-driven-development`](https://github.com/obra/superpowers/tree/main/skills/subagent-driven-development) and [`dispatching-parallel-agents`](https://github.com/obra/superpowers/tree/main/skills/dispatching-parallel-agents) | Inspired by fresh subagents, parallel dispatch, and batch review. |
|
|
179
183
|
| [`code-handoff`](skills/code-handoff/SKILL.md) | Matt Pocock's [`handoff`](https://github.com/mattpocock/skills/tree/main/skills/productivity/handoff) | Adapted from its context-preserving handoff format. |
|
package/dist/atelier.js
CHANGED
|
@@ -32570,7 +32570,10 @@ var OpenCodeConfigSchema = objectType({
|
|
|
32570
32570
|
plan_thinking: ThinkingSchema.optional(),
|
|
32571
32571
|
agents: arrayType(ThinkingAgentSchema).min(1)
|
|
32572
32572
|
}).superRefine((config, ctx) => checkThinking("opencode", config, ctx));
|
|
32573
|
-
var
|
|
32573
|
+
var CLAUDE_OPTIONAL_BUILTINS = ["cron", "chrome", "remote-trigger"];
|
|
32574
|
+
var ClaudeConfigSchema = SimpleConfigSchema.extend({
|
|
32575
|
+
disabled_builtins: arrayType(enumType(CLAUDE_OPTIONAL_BUILTINS)).optional()
|
|
32576
|
+
}).superRefine((config, ctx) => {
|
|
32574
32577
|
checkThinking("claude", config, ctx);
|
|
32575
32578
|
if (config.default_model !== "opusplan" && config.plan_thinking !== undefined && config.plan_thinking !== config.build_thinking) {
|
|
32576
32579
|
ctx.addIssue({ code: "custom", path: ["plan_thinking"], message: "Separate Claude Plan/Build thinking requires opusplan" });
|
|
@@ -32602,6 +32605,16 @@ var CLAUDE_AI_OPT_OUTS = {
|
|
|
32602
32605
|
syncClaudeAiSkills: false,
|
|
32603
32606
|
syncClaudeAiPlugins: false
|
|
32604
32607
|
};
|
|
32608
|
+
var CONFLICTING_BUILTINS = {
|
|
32609
|
+
settings: { disableBundledSkills: true, enableArtifact: false, disableWorkflows: true },
|
|
32610
|
+
deny: ["Artifact", "ArtifactComments", "ArtifactData", "Workflow", "DesignSync"],
|
|
32611
|
+
skillOverrides: ["security-review", "ultrareview"]
|
|
32612
|
+
};
|
|
32613
|
+
var OPTIONAL_BUILTINS = {
|
|
32614
|
+
cron: { env: { CLAUDE_CODE_DISABLE_CRON: "1" } },
|
|
32615
|
+
chrome: { deniedMcpServers: ["claude-in-chrome"] },
|
|
32616
|
+
"remote-trigger": { deny: ["RemoteTrigger"] }
|
|
32617
|
+
};
|
|
32605
32618
|
var claudeAdapter = {
|
|
32606
32619
|
name: "claude",
|
|
32607
32620
|
configSchema: ClaudeConfigSchema,
|
|
@@ -32631,7 +32644,15 @@ function modelsForProvider(_provider) {
|
|
|
32631
32644
|
return [...ANTHROPIC_MODELS];
|
|
32632
32645
|
}
|
|
32633
32646
|
async function promptSection(prompt, section) {
|
|
32634
|
-
|
|
32647
|
+
const claude = section;
|
|
32648
|
+
const result = await promptForSimpleModels(prompt, claude, modelsForProvider());
|
|
32649
|
+
const { disabled } = await prompt.prompt([{
|
|
32650
|
+
type: "checkbox",
|
|
32651
|
+
name: "disabled",
|
|
32652
|
+
message: "Disable optional Claude Code built-ins",
|
|
32653
|
+
choices: CLAUDE_OPTIONAL_BUILTINS.map((value) => ({ name: value, value, checked: claude.disabled_builtins?.includes(value) ?? false }))
|
|
32654
|
+
}]);
|
|
32655
|
+
return { ...result, disabled_builtins: disabled };
|
|
32635
32656
|
}
|
|
32636
32657
|
function installAgents(section, basePath) {
|
|
32637
32658
|
const config = ClaudeConfigSchema.parse(section);
|
|
@@ -32671,6 +32692,13 @@ function mergeHarnessConfig(section, basePath) {
|
|
|
32671
32692
|
model: config.default_model || DEFAULT_MODELS.default_model
|
|
32672
32693
|
};
|
|
32673
32694
|
applyModeThinking(settings, config);
|
|
32695
|
+
applyBuiltins(settings, CONFLICTING_BUILTINS);
|
|
32696
|
+
for (const name of CLAUDE_OPTIONAL_BUILTINS) {
|
|
32697
|
+
if (config.disabled_builtins?.includes(name))
|
|
32698
|
+
applyBuiltins(settings, OPTIONAL_BUILTINS[name]);
|
|
32699
|
+
else
|
|
32700
|
+
removeBuiltins(settings, OPTIONAL_BUILTINS[name]);
|
|
32701
|
+
}
|
|
32674
32702
|
try {
|
|
32675
32703
|
mkdirSync2(claudeDir, { recursive: true });
|
|
32676
32704
|
writeFileSync3(settingsPath, JSON.stringify(settings, null, 2) + `
|
|
@@ -32729,6 +32757,9 @@ function removeAtelierSettings(claudeDir, config) {
|
|
|
32729
32757
|
delete content[key];
|
|
32730
32758
|
}
|
|
32731
32759
|
applyModeThinking(content, config, true);
|
|
32760
|
+
removeBuiltins(content, CONFLICTING_BUILTINS);
|
|
32761
|
+
for (const patch of Object.values(OPTIONAL_BUILTINS))
|
|
32762
|
+
removeBuiltins(content, patch);
|
|
32732
32763
|
writeOrDeleteSettings(settingsPath, content);
|
|
32733
32764
|
}
|
|
32734
32765
|
function applyModeThinking(settings, config, remove = false) {
|
|
@@ -32753,6 +32784,75 @@ function applyModeThinking(settings, config, remove = false) {
|
|
|
32753
32784
|
else
|
|
32754
32785
|
delete settings.modelSettings;
|
|
32755
32786
|
}
|
|
32787
|
+
function applyBuiltins(settings, patch) {
|
|
32788
|
+
Object.assign(settings, patch.settings);
|
|
32789
|
+
if (patch.env)
|
|
32790
|
+
settings.env = { ...settings.env, ...patch.env };
|
|
32791
|
+
if (patch.deny) {
|
|
32792
|
+
const permissions = { ...settings.permissions };
|
|
32793
|
+
const deny = permissions.deny ?? [];
|
|
32794
|
+
permissions.deny = [...deny, ...patch.deny.filter((rule) => !deny.includes(rule))];
|
|
32795
|
+
settings.permissions = permissions;
|
|
32796
|
+
}
|
|
32797
|
+
if (patch.skillOverrides) {
|
|
32798
|
+
const overrides = { ...settings.skillOverrides };
|
|
32799
|
+
for (const name of patch.skillOverrides)
|
|
32800
|
+
overrides[name] = "off";
|
|
32801
|
+
settings.skillOverrides = overrides;
|
|
32802
|
+
}
|
|
32803
|
+
if (patch.deniedMcpServers) {
|
|
32804
|
+
const denied = settings.deniedMcpServers ?? [];
|
|
32805
|
+
const missing = patch.deniedMcpServers.filter((name) => !denied.some((entry) => entry.serverName === name));
|
|
32806
|
+
settings.deniedMcpServers = [...denied, ...missing.map((serverName) => ({ serverName }))];
|
|
32807
|
+
}
|
|
32808
|
+
}
|
|
32809
|
+
function removeBuiltins(settings, patch) {
|
|
32810
|
+
for (const [key, value] of Object.entries(patch.settings ?? {})) {
|
|
32811
|
+
if (settings[key] === value)
|
|
32812
|
+
delete settings[key];
|
|
32813
|
+
}
|
|
32814
|
+
if (patch.env) {
|
|
32815
|
+
const env = { ...settings.env };
|
|
32816
|
+
for (const [key, value] of Object.entries(patch.env)) {
|
|
32817
|
+
if (env[key] === value)
|
|
32818
|
+
delete env[key];
|
|
32819
|
+
}
|
|
32820
|
+
if (Object.keys(env).length)
|
|
32821
|
+
settings.env = env;
|
|
32822
|
+
else
|
|
32823
|
+
delete settings.env;
|
|
32824
|
+
}
|
|
32825
|
+
if (patch.deny && settings.permissions) {
|
|
32826
|
+
const permissions = { ...settings.permissions };
|
|
32827
|
+
const deny = (permissions.deny ?? []).filter((rule) => !patch.deny.includes(rule));
|
|
32828
|
+
if (deny.length)
|
|
32829
|
+
permissions.deny = deny;
|
|
32830
|
+
else
|
|
32831
|
+
delete permissions.deny;
|
|
32832
|
+
if (Object.keys(permissions).length)
|
|
32833
|
+
settings.permissions = permissions;
|
|
32834
|
+
else
|
|
32835
|
+
delete settings.permissions;
|
|
32836
|
+
}
|
|
32837
|
+
if (patch.skillOverrides && settings.skillOverrides) {
|
|
32838
|
+
const overrides = { ...settings.skillOverrides };
|
|
32839
|
+
for (const name of patch.skillOverrides) {
|
|
32840
|
+
if (overrides[name] === "off")
|
|
32841
|
+
delete overrides[name];
|
|
32842
|
+
}
|
|
32843
|
+
if (Object.keys(overrides).length)
|
|
32844
|
+
settings.skillOverrides = overrides;
|
|
32845
|
+
else
|
|
32846
|
+
delete settings.skillOverrides;
|
|
32847
|
+
}
|
|
32848
|
+
if (patch.deniedMcpServers && settings.deniedMcpServers) {
|
|
32849
|
+
const denied = settings.deniedMcpServers.filter((entry) => !patch.deniedMcpServers.includes(entry.serverName ?? ""));
|
|
32850
|
+
if (denied.length)
|
|
32851
|
+
settings.deniedMcpServers = denied;
|
|
32852
|
+
else
|
|
32853
|
+
delete settings.deniedMcpServers;
|
|
32854
|
+
}
|
|
32855
|
+
}
|
|
32756
32856
|
function parseSettingsJson(settingsPath) {
|
|
32757
32857
|
try {
|
|
32758
32858
|
return JSON.parse(readFileSync4(settingsPath, "utf-8"));
|
package/package.json
CHANGED
|
@@ -97,6 +97,7 @@ spec-brainstorm → Spec-backed discovery + design → only design.md → stop
|
|
|
97
97
|
spec-plan → Inline conversation or only plan.json → stop
|
|
98
98
|
spec-implement → Execute approved Spec-backed Plans; track tasks
|
|
99
99
|
spec-finish → Post-implementation validation for Spec-backed Plans
|
|
100
|
+
spec-loop → Run an approved Spec-backed Plan unattended to a draft PR
|
|
100
101
|
code-subagents → Parallel dispatch for Spec-backed Plan tasks
|
|
101
102
|
```
|
|
102
103
|
|
|
@@ -124,10 +125,15 @@ choice to review. If any choice exists, use an Inline Plan.
|
|
|
124
125
|
|
|
125
126
|
Delegate bounded, read-only work to a subagent when it would otherwise flood the main context:
|
|
126
127
|
wide codebase research, finding comparable code, or independent review. Ask for a concise,
|
|
127
|
-
file:line-cited summary, and read the key cited files yourself before deciding.
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
128
|
+
file:line-cited summary, and read the key cited files yourself before deciding. Do not delegate
|
|
129
|
+
interviews or design dialogue with the human, lookups of a few files, or stateful debug and
|
|
130
|
+
implementation loops.
|
|
131
|
+
|
|
132
|
+
Every subagent launch must explicitly select an agent. Match the work to the descriptions of
|
|
133
|
+
Atelier's agents (Sentinel, Oracle, Architect, Keymaker) and choose one. Never launch without a
|
|
134
|
+
selection or rely on the harness default. Exception: design-sensitive implementation may use the
|
|
135
|
+
harness's general agent. If Atelier's agents are not installed, explicitly choose the closest
|
|
136
|
+
available agent by description and state the choice in the output.
|
|
131
137
|
|
|
132
138
|
## Hard Transitions
|
|
133
139
|
|
|
@@ -135,8 +141,9 @@ loops.
|
|
|
135
141
|
|---------------------|-----------|
|
|
136
142
|
| spec-brainstorm | Stop; wait for a separate spec-plan request |
|
|
137
143
|
| approved Inline Plan | Stop; wait for a separate implementation request |
|
|
138
|
-
| approved Spec-backed Plan | Stop; wait for a separate spec-implement request |
|
|
144
|
+
| approved Spec-backed Plan | Stop; wait for a separate spec-implement or spec-loop request |
|
|
139
145
|
| spec-implement | spec-finish |
|
|
146
|
+
| spec-loop | spec-finish (run inside spec-loop under its unattended policy) |
|
|
140
147
|
|
|
141
148
|
Do not begin implementation without an approved written plan. Spec-backed work must not
|
|
142
149
|
jump from research to implementation.
|
|
@@ -195,7 +202,7 @@ If you loop 2+ times on the same issue, stop and ask the human:
|
|
|
195
202
|
|
|
196
203
|
## Skill Types
|
|
197
204
|
|
|
198
|
-
**Process skills** (spec-brainstorm, spec-plan, spec-implement, spec-finish): Follow exactly.
|
|
205
|
+
**Process skills** (spec-brainstorm, spec-plan, spec-implement, spec-loop, spec-finish): Follow exactly.
|
|
199
206
|
Don't adapt away discipline.
|
|
200
207
|
|
|
201
208
|
**Knowledge skills** (oracle-grill-me, oracle-domain-modelling, oracle-codebase-design): Adapt principles to
|
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: code-review
|
|
3
|
-
description: Multi-agent code review
|
|
3
|
+
description: Multi-agent code review run as a debate. Critics raise findings in parallel, an Author defends the change, Critics concede or maintain, and a Judge rules on what stays contested. Findings are classified by kind and blocking, and handled durably when previously decided. Use `rq` to request a review of diffs (defaults to main branch), `rs` to respond to findings and record intentional non-fix decisions beside the relevant code. Triggers on "review this", "review my code", "code review", "check for bugs", "audit this", when examining PRs, pull requests, branches, or diffs. Always asks user before applying fixes or adding decision comments.
|
|
4
4
|
argument-hint: "rq [branch] | rs"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Code Review Skill
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
A debate, not an opinion: Triage → Critique → Debate.
|
|
11
|
+
|
|
12
|
+
- **Critique**: focused Critics raise findings in parallel, with a simplicity check on every review.
|
|
13
|
+
- **Debate**: an Author defends the change; Critics concede, maintain, or accept a revision (one
|
|
14
|
+
round); a Judge rules only on what is still contested.
|
|
15
|
+
- **Evidence** decides outcomes. Quotes are checked mechanically, executed checks outrank
|
|
16
|
+
argument, and the main agent audits what each turn did.
|
|
17
|
+
|
|
18
|
+
Rationale and prior work: [docs/research/multi-agent-debate.md](../../docs/research/multi-agent-debate.md).
|
|
11
19
|
|
|
12
20
|
Uses explicit subagent dispatch patterns from [code-subagents](../code-subagents/SKILL.md).
|
|
13
21
|
|
|
@@ -30,21 +38,21 @@ Uses explicit subagent dispatch patterns from [code-subagents](../code-subagents
|
|
|
30
38
|
|
|
31
39
|
## Agent Selection
|
|
32
40
|
|
|
33
|
-
Dispatch each step as a subagent
|
|
34
|
-
available agent whose description best fits the step's task. Steps and the kind of work they
|
|
35
|
-
need:
|
|
41
|
+
Dispatch each step as a subagent and select the agent explicitly (see Delegation in `atelier-orchestrator`). Match the step's kind of work:
|
|
36
42
|
|
|
37
43
|
| Step | Kind of work |
|
|
38
44
|
|------|--------------|
|
|
39
|
-
| Triage | Read-only recon: changed-file analysis, context retrieval,
|
|
40
|
-
|
|
|
41
|
-
|
|
|
42
|
-
|
|
|
45
|
+
| Triage | Read-only recon: changed-file analysis, context retrieval, persona and check selection |
|
|
46
|
+
| Critique and Rebuttal | Critical analysis: evidence-based critique and failure-mode analysis |
|
|
47
|
+
| Defense | Architecture and design review: test each finding against the code and argue for the change |
|
|
48
|
+
| Ruling | Critical analysis: impartial, evidence-ranked adjudication |
|
|
43
49
|
|
|
44
|
-
|
|
50
|
+
Critic, Author and Judge are prompt personas, not agent types. Persona names such as
|
|
51
|
+
`Security`, `Correctness`, `Architecture` and `PerformanceOperator` are likewise prompt personas.
|
|
45
52
|
|
|
46
|
-
`Simplicity` is a mandatory
|
|
47
|
-
|
|
53
|
+
`Simplicity` is a mandatory persona on every review. It runs once, in parallel with the other
|
|
54
|
+
Critics, and is never listed in triage's `personas`. Triage picks the rest; `Architecture` is one
|
|
55
|
+
of its options.
|
|
48
56
|
|
|
49
57
|
## Review Priority
|
|
50
58
|
|
|
@@ -60,16 +68,25 @@ Treat the SDD as evidence, not as authority for whether code is necessary. A fin
|
|
|
60
68
|
would expand behavior or infrastructure requires user approval. Never apply it as an ordinary
|
|
61
69
|
review fix.
|
|
62
70
|
|
|
63
|
-
|
|
71
|
+
## Finding Classification
|
|
72
|
+
|
|
73
|
+
Every finding has a **kind** and a **blocking** value.
|
|
74
|
+
|
|
75
|
+
| Kind | Debate path |
|
|
76
|
+
|------|-------------|
|
|
77
|
+
| issue | Defense → Rebuttal → Ruling if still contested |
|
|
78
|
+
| suggestion | Author adopts or declines; the Critic may escalate it to an issue with evidence |
|
|
79
|
+
| question | Author answers; the Critic resolves it or escalates it |
|
|
80
|
+
| nitpick | Author takes or leaves it; no rebuttal; never blocking |
|
|
81
|
+
| praise | Goes straight to Positive Findings |
|
|
64
82
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
| 6. SDD + Challenge | No | Check SDD compliance last, then validate findings |
|
|
83
|
+
Severity applies to issues only. Details in [output.md](./references/output.md).
|
|
84
|
+
|
|
85
|
+
### rq (Request Review) Steps
|
|
86
|
+
|
|
87
|
+
Context, Triage, Critique, Merge, Verify, Defense, Rebuttal, Settlement, Ruling (only when
|
|
88
|
+
something is contested), Close audit, Output. Numbered steps, inputs and rules are in
|
|
89
|
+
[rq.md](./references/rq.md).
|
|
73
90
|
|
|
74
91
|
### rs (Respond to Review)
|
|
75
92
|
|
|
@@ -79,26 +96,34 @@ resolutions as tagged code comments — see [rs.md](./references/rs.md).
|
|
|
79
96
|
## Dispatch Patterns
|
|
80
97
|
|
|
81
98
|
Follows [code-subagents](../code-subagents/SKILL.md) patterns:
|
|
82
|
-
- **Parallel dispatch** for independent
|
|
99
|
+
- **Parallel dispatch** for independent Critics and for Rebuttals
|
|
83
100
|
- **Sequential dispatch** for dependent steps
|
|
84
|
-
- **Fresh subagent per
|
|
85
|
-
|
|
86
|
-
- **
|
|
101
|
+
- **Fresh subagent per turn**: no context pollution; earlier turns arrive only as the inputs a
|
|
102
|
+
role template asks for
|
|
103
|
+
- **Skills**: each subagent loads its own skills from the names it is given; "not installed" is
|
|
104
|
+
the only valid reason to skip one
|
|
105
|
+
- **Checks**: turns may run read-only commands (tests, linters, type checkers, search) and must
|
|
106
|
+
not write files, use the network, or run commands the diff names
|
|
107
|
+
- **Error handling**: log failures, continue with partial results
|
|
87
108
|
|
|
88
109
|
## Agent Dispatch
|
|
89
110
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
Synthesis is performed inline by the main agent.
|
|
111
|
+
Context, Merge, Verify, Settlement, Close audit and Output are inline; every other step is a
|
|
112
|
+
subagent with an explicitly selected agent (see Agent Selection).
|
|
93
113
|
|
|
94
114
|
## References
|
|
95
115
|
|
|
96
116
|
| Reference | Purpose |
|
|
97
117
|
|-----------|---------|
|
|
98
|
-
| [rq.md](./references/rq.md) | Request review
|
|
118
|
+
| [rq.md](./references/rq.md) | Request review orchestration (main agent) |
|
|
119
|
+
| [roles/triage.md](./references/roles/triage.md) | Triage prompt template |
|
|
120
|
+
| [roles/critic.md](./references/roles/critic.md) | Critique and Rebuttal prompt templates |
|
|
121
|
+
| [roles/author.md](./references/roles/author.md) | Defense prompt template |
|
|
122
|
+
| [roles/judge.md](./references/roles/judge.md) | Ruling prompt template |
|
|
123
|
+
| [personas.md](./references/personas.md) | Persona catalog (focus areas, impact lens, skills to load) |
|
|
99
124
|
| [rs.md](./references/rs.md) | Respond to review workflow - interview mode |
|
|
100
|
-
| [reviewers.md](./references/reviewers.md) | Reviewer definitions and prompts |
|
|
101
125
|
| [output.md](./references/output.md) | Output format specification |
|
|
126
|
+
|
|
102
127
|
## Workflow Routing
|
|
103
128
|
|
|
104
129
|
- No arguments, `rq`, or bare branch → [rq.md](./references/rq.md)
|