@martinffx/atelier 3.5.0 → 3.7.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 +16 -0
- package/README.md +8 -6
- package/agents/keymaker.md +25 -17
- package/dist/atelier.js +237 -25
- package/package.json +1 -1
- package/skills/atelier-orchestrator/SKILL.md +20 -2
- package/skills/code-subagents/SKILL.md +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,22 @@
|
|
|
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.7.0](https://github.com/martinffx/atelier/compare/v3.6.0...v3.7.0) (2026-11-07)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Features
|
|
11
|
+
|
|
12
|
+
* **agents:** make keymaker the implementer of settled designs ([6c7fb33](https://github.com/martinffx/atelier/commit/6c7fb33463006d64f68f6bb2d7056347b3eb7bbf))
|
|
13
|
+
* **claude:** set a 190k auto-compact window under opusplan ([a9f1ed1](https://github.com/martinffx/atelier/commit/a9f1ed156f10fbde547dcffe9b31b33409a204f3))
|
|
14
|
+
* **opencode:** refresh model catalogs and add openrouter and google providers ([#90](https://github.com/martinffx/atelier/issues/90)) ([85ed86b](https://github.com/martinffx/atelier/commit/85ed86b5a070f08624c8f4dab2445ebeb8b73db3))
|
|
15
|
+
|
|
16
|
+
## [3.6.0](https://github.com/martinffx/atelier/compare/v3.5.0...v3.6.0) (2026-10-25)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### Features
|
|
20
|
+
|
|
21
|
+
* **claude:** disable conflicting Claude Code built-ins ([40e074d](https://github.com/martinffx/atelier/commit/40e074df4e55a300ea4521fb05fad9232525715d))
|
|
22
|
+
|
|
7
23
|
## [3.5.0](https://github.com/martinffx/atelier/compare/v3.4.0...v3.5.0) (2026-10-18)
|
|
8
24
|
|
|
9
25
|
|
package/README.md
CHANGED
|
@@ -114,24 +114,26 @@ The CLI also configures four specialist agents for Claude Code, OpenCode, Codex,
|
|
|
114
114
|
| **Sentinel** | Read-only codebase reconnaissance and review triage |
|
|
115
115
|
| **Oracle** | Requirements, trade-offs, and critical analysis of changes |
|
|
116
116
|
| **Architect** | Domain modelling, system design, and architecture review |
|
|
117
|
-
| **Keymaker** |
|
|
117
|
+
| **Keymaker** | Implements settled designs: code, business logic and tests, so the main conversation stays small |
|
|
118
118
|
|
|
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
|
|
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. It runs on each harness's build-tier model (Sonnet on Claude Code), not the cheap Sentinel model.
|
|
120
120
|
|
|
121
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.
|
|
122
122
|
|
|
123
123
|
## Models and thinking
|
|
124
124
|
|
|
125
|
-
New configurations use the following defaults (
|
|
125
|
+
New configurations use the following defaults (November 2026). Each entry is **model / thinking**.
|
|
126
126
|
|
|
127
127
|
| Configuration | Sentinel | Oracle | Architect | Plan | Build |
|
|
128
128
|
|---|---|---|---|---|---|
|
|
129
129
|
| Claude Code | Haiku 5.5 / default | Opus 5.5 / xhigh | Opus 5.5 / high | Opus 5.5 / high | Sonnet 5 / high |
|
|
130
130
|
| Codex | Luna 6 / low | Astra 6 / high | Astra 6 / xhigh | Sol 6 / xhigh | Sol 6 / high |
|
|
131
131
|
| OpenCode / OpenAI | Luna 6 / low | Astra 6 / high | Astra 6 / xhigh | Astra 6 / xhigh | Sol 6 / high |
|
|
132
|
-
| OpenCode / Bedrock | Haiku
|
|
132
|
+
| OpenCode / Bedrock | Haiku 5.5 / low | Fable 5.1 / high | Opus 5.5 / high | Opus 5.5 / high | Sonnet 5 / high |
|
|
133
133
|
| OpenCode / Zen | GLM 5.3 Flash / low | Kimi K3 / high | GLM 5.3 / high | GLM 5.3 / high | DeepSeek V4.1 Flash / high |
|
|
134
134
|
| OpenCode / Go | GLM 5.3 Flash / low | MiMo V2.6 Pro / on | GLM 5.3 / high | GLM 5.3 / high | DeepSeek V4.1 Flash / high |
|
|
135
|
+
| OpenCode / OpenRouter | GLM 5.3 Flash / low | Kimi K3.1 Pro / high | GLM 5.3 / high | GLM 5.3 / high | DeepSeek V4.1 Flash (1017) / high |
|
|
136
|
+
| OpenCode / Google | Gemini 3.5 Flash Lite / low | Gemini 4 Argon / high | Gemini 4 Argon / high | Gemini 4 Argon / high | Gemini 3.8 Flash / high |
|
|
135
137
|
|
|
136
138
|
Sentinel favors inexpensive reconnaissance. Oracle needs requirements synthesis and judgment; Architect and Plan need technical depth and completeness. Build balances capability and execution cost. These are starting configurations, informed by [Artificial Analysis](https://artificialanalysis.ai/models), rather than measured winners for Atelier's specific roles. Benchmark effort levels and provider speeds may differ from these defaults.
|
|
137
139
|
|
|
@@ -141,9 +143,9 @@ Run `atelier update --harness <claude|codex|opencode>` to choose models and thin
|
|
|
141
143
|
|
|
142
144
|
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.
|
|
143
145
|
|
|
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. [Claude configuration](https://code.claude.com/docs/en/model-config)
|
|
146
|
+
- **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. Under `opusplan`, Atelier also writes `modelSettings.<model>.autoCompactWindow: 190000` for both models: Claude Code silently plans on Sonnet once a turn passes 200k tokens, but only auto-compacts near 967k ([anthropics/claude-code#95206](https://github.com/anthropics/claude-code/issues/95206)). A window you set yourself is kept, and `atelier remove` clears only the 190000 value. 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)
|
|
145
147
|
- **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/)
|
|
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/)
|
|
148
|
+
- **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, `reasoning.effort` for OpenRouter and `thinkingConfig.thinkingLevel` for Google. GLM 5.3 supports low/high/max; it does not support medium. Bedrock defaults use US inference profiles with `us-east-1`. Go's Muse Spark 1.3 Contributor only works if the workspace allows paid endpoints that train on request data. [OpenCode agents](https://opencode.ai/docs/agents/)
|
|
147
149
|
- **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)
|
|
148
150
|
|
|
149
151
|
Atelier does not upgrade installed harness CLIs. Request-option serialization was checked against OpenCode's provider SDK versions with intercepted requests; this verifies parameter encoding, not upstream availability, quota, or role quality.
|
package/agents/keymaker.md
CHANGED
|
@@ -1,36 +1,44 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: keymaker
|
|
3
|
-
description:
|
|
3
|
+
description: Implementer. MUST BE USED for every code change once the design or plan is settled, including new files, features, business logic, refactors, test writing, bug fixes with a known cause, and multi-file edits. Delegate implementation to Keymaker instead of editing in the main conversation, so the main conversation's context stays small. Give it the design excerpt, owned files and validation command. It writes tests first, implements, runs validation and reports files changed and test results. It makes no design decisions; it stops and asks.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
You are the **Keymaker**,
|
|
6
|
+
You are the **Keymaker**, the implementer. The design is settled and someone has handed you one task to build. You write the code and tests, run the validation, and report back, so the main conversation never has to carry the implementation.
|
|
7
|
+
|
|
8
|
+
Delegating to you is the default path for writing code. The main conversation edits directly only for trivial one-line changes and stateful debugging.
|
|
7
9
|
|
|
8
10
|
## Role
|
|
9
11
|
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
12
|
+
- Implement one task from the design excerpt you are given: files, business logic, wiring, and tests
|
|
13
|
+
- Follow existing project patterns and conventions rather than inventing new ones
|
|
14
|
+
- Write the test first when behaviour changes (stub → test → fix), then make it pass
|
|
15
|
+
- Run the task's validation command and fix what fails, within the files you own
|
|
16
|
+
- Report exactly what changed, and what the validation showed
|
|
14
17
|
|
|
15
18
|
## Skills
|
|
16
19
|
|
|
17
|
-
Before beginning work, scan your environment for relevant skills and load any that apply to the task at hand. Use them to follow the project's conventions for structure and
|
|
20
|
+
Before beginning work, scan your environment for relevant skills and load any that apply to the task at hand. Use them to follow the project's conventions for structure, naming and testing.
|
|
21
|
+
|
|
22
|
+
## Inputs
|
|
23
|
+
|
|
24
|
+
You should be given: the task and its requirements, the design excerpt it implements, the files you own, and the validation command. If any of these is missing or ambiguous, stop and ask. Do not guess your way around a gap in the design.
|
|
18
25
|
|
|
19
26
|
## Checklist
|
|
20
27
|
|
|
21
28
|
Before finishing, confirm you have:
|
|
22
29
|
|
|
23
|
-
- [ ]
|
|
24
|
-
- [ ]
|
|
25
|
-
- [ ]
|
|
26
|
-
- [ ]
|
|
27
|
-
- [ ] Reported every file created or modified
|
|
30
|
+
- [ ] Stayed inside the files you were told you own
|
|
31
|
+
- [ ] Matched the pattern you were pointed at (naming, structure, imports, test style)
|
|
32
|
+
- [ ] Written or updated tests for any changed behaviour
|
|
33
|
+
- [ ] Run the validation command and read its output
|
|
34
|
+
- [ ] Reported every file created or modified, plus the validation result (pass or the failing output)
|
|
28
35
|
|
|
29
36
|
## Boundaries
|
|
30
37
|
|
|
31
|
-
- DO
|
|
32
|
-
- DO
|
|
38
|
+
- DO implement the task, including business logic, within your owned files
|
|
39
|
+
- DO write and update tests
|
|
40
|
+
- DO stop and ask when the design is unclear, contradicts the code, or a change would reach outside your owned files
|
|
33
41
|
- DON'T make design or architectural decisions (that's `architect`)
|
|
34
|
-
- DON'T
|
|
35
|
-
- DON'T
|
|
36
|
-
- NEVER overwrite
|
|
42
|
+
- DON'T conduct requirements discovery or challenge scope (that's `oracle`)
|
|
43
|
+
- DON'T review code beyond checking your own work
|
|
44
|
+
- NEVER overwrite files outside your owned list, and never silently work around a failing test by weakening it
|
package/dist/atelier.js
CHANGED
|
@@ -32104,17 +32104,33 @@ function resolveBasePath(harness) {
|
|
|
32104
32104
|
var THINKING_LEVELS = ["default", "off", "on", "low", "medium", "high", "xhigh", "max"];
|
|
32105
32105
|
function thinkingChoices(harness, model, session = false) {
|
|
32106
32106
|
const id = model.split("/").at(-1).toLowerCase();
|
|
32107
|
-
if (/gpt-6
|
|
32108
|
-
return ["default",
|
|
32107
|
+
if (/gpt-6(\.1)?-(astra|sol|luna|terra)$/.test(id)) {
|
|
32108
|
+
return ["default", .../astra$|6\.1-sol$/.test(id) ? [] : ["off"], "low", "medium", "high", "xhigh", "max"];
|
|
32109
32109
|
}
|
|
32110
|
-
if (/^(opus|opusplan|sonnet|haiku|fable|best)$/.test(id) || /claude-(opus-5
|
|
32110
|
+
if (/^(opus|opusplan|sonnet|haiku|fable|best)$/.test(id) || /claude-(opus-5[-.]5|fable-5[-.]1|sonnet-5[-.]5|haiku-5[-.]5)$/.test(id)) {
|
|
32111
32111
|
return ["default", "low", "medium", "high", "xhigh", ...harness === "claude" && session ? [] : ["max"]];
|
|
32112
32112
|
}
|
|
32113
32113
|
if (harness === "opencode") {
|
|
32114
|
-
if (/^(glm-5\.3(-flash)?|kimi-k3
|
|
32114
|
+
if (/^(glm-5\.3(-flash)?|kimi-k3(\.1-pro)?|deepseek-v4(\.1-flash(-1017)?|-pro))$/.test(id))
|
|
32115
32115
|
return ["default", "low", "high", "max"];
|
|
32116
32116
|
if (/^(mimo-v2\.6-(pro|flash)(-free)?|minimax-m3(-free)?)$/.test(id))
|
|
32117
32117
|
return ["default", "off", "on"];
|
|
32118
|
+
if (id === "minimax-m3.1-flash")
|
|
32119
|
+
return ["default", "low", "medium", "high", "xhigh", "max"];
|
|
32120
|
+
if (/^(gemini-4-argon(-contributor)?|gemini-3\.[5-8]-flash(-lite)?)$/.test(id))
|
|
32121
|
+
return ["default", "low", "medium", "high"];
|
|
32122
|
+
if (id === "grok-4.7")
|
|
32123
|
+
return ["default", "low", "medium", "high", "xhigh"];
|
|
32124
|
+
if (/^mistral-large-4(-0)?$/.test(id))
|
|
32125
|
+
return ["default", "off", "high"];
|
|
32126
|
+
if (/^inkling(-2)?(-small)?(-free)?$/.test(id))
|
|
32127
|
+
return ["default", "off", "low", "medium", "high", "max"];
|
|
32128
|
+
if (/^muse-(spark-1\.3(-contributor)?|wonder(-1\.0)?)$/.test(id))
|
|
32129
|
+
return ["default", "low", "medium", "high", "xhigh", "max"];
|
|
32130
|
+
if (id === "muse-spark-open")
|
|
32131
|
+
return ["default", "low", "medium", "high", "xhigh"];
|
|
32132
|
+
if (/^nemotron-3\.5-super-vl(-free)?$/.test(id))
|
|
32133
|
+
return ["default", "off", "low", "medium", "high", "xhigh"];
|
|
32118
32134
|
}
|
|
32119
32135
|
return ["default"];
|
|
32120
32136
|
}
|
|
@@ -32136,7 +32152,7 @@ function claudeModel(model) {
|
|
|
32136
32152
|
function claudeModeModels(model) {
|
|
32137
32153
|
return model === "opusplan" ? { build: claudeModel("sonnet"), plan: claudeModel("opus") } : { build: claudeModel(model), plan: claudeModel(model) };
|
|
32138
32154
|
}
|
|
32139
|
-
var OPENCODE_THINKING_KEYS = ["reasoningEffort", "thinking", "effort", "reasoningConfig"];
|
|
32155
|
+
var OPENCODE_THINKING_KEYS = ["reasoningEffort", "thinking", "effort", "reasoningConfig", "reasoning", "thinkingConfig"];
|
|
32140
32156
|
function openCodeThinkingOptions(model, thinking) {
|
|
32141
32157
|
assertThinking("opencode", model, thinking);
|
|
32142
32158
|
if (!thinking || thinking === "default")
|
|
@@ -32144,10 +32160,17 @@ function openCodeThinkingOptions(model, thinking) {
|
|
|
32144
32160
|
if (model.startsWith("amazon-bedrock/")) {
|
|
32145
32161
|
return { reasoningConfig: { type: "adaptive", maxReasoningEffort: thinking, display: "summarized" } };
|
|
32146
32162
|
}
|
|
32163
|
+
if (model.startsWith("openrouter/")) {
|
|
32164
|
+
if (thinking === "on" || thinking === "off")
|
|
32165
|
+
return { reasoning: { enabled: thinking === "on" } };
|
|
32166
|
+
return { reasoning: { effort: thinking } };
|
|
32167
|
+
}
|
|
32168
|
+
if (model.startsWith("google/"))
|
|
32169
|
+
return { thinkingConfig: { thinkingLevel: thinking } };
|
|
32147
32170
|
if (model.includes("claude-"))
|
|
32148
32171
|
return { effort: thinking };
|
|
32149
32172
|
if (thinking === "on" || thinking === "off") {
|
|
32150
|
-
if (
|
|
32173
|
+
if (/gpt-6|mistral-large|inkling|nemotron/.test(model))
|
|
32151
32174
|
return { reasoningEffort: "none" };
|
|
32152
32175
|
return { thinking: { type: thinking === "off" ? "disabled" : model.includes("minimax") ? "adaptive" : "enabled" } };
|
|
32153
32176
|
}
|
|
@@ -32293,7 +32316,7 @@ function formatFileList(files) {
|
|
|
32293
32316
|
`);
|
|
32294
32317
|
}
|
|
32295
32318
|
function guardProvider(provider) {
|
|
32296
|
-
if (!provider || !["opencode-zen", "opencode-go", "amazon-bedrock", "openai"].includes(provider)) {
|
|
32319
|
+
if (!provider || !["opencode-zen", "opencode-go", "amazon-bedrock", "openai", "openrouter", "google"].includes(provider)) {
|
|
32297
32320
|
throw new InvalidConfigError("A valid provider must be selected for OpenCode");
|
|
32298
32321
|
}
|
|
32299
32322
|
return provider;
|
|
@@ -32561,7 +32584,7 @@ var SimpleConfigSchema = objectType({
|
|
|
32561
32584
|
var CursorConfigSchema = objectType({
|
|
32562
32585
|
agents: arrayType(AgentSchema).min(1)
|
|
32563
32586
|
}).strict();
|
|
32564
|
-
var OPENCODE_PROVIDERS = ["opencode-zen", "opencode-go", "amazon-bedrock", "openai"];
|
|
32587
|
+
var OPENCODE_PROVIDERS = ["opencode-zen", "opencode-go", "amazon-bedrock", "openai", "openrouter", "google"];
|
|
32565
32588
|
var OpenCodeConfigSchema = objectType({
|
|
32566
32589
|
provider: enumType(OPENCODE_PROVIDERS),
|
|
32567
32590
|
build_model: stringType().min(1),
|
|
@@ -32570,7 +32593,10 @@ var OpenCodeConfigSchema = objectType({
|
|
|
32570
32593
|
plan_thinking: ThinkingSchema.optional(),
|
|
32571
32594
|
agents: arrayType(ThinkingAgentSchema).min(1)
|
|
32572
32595
|
}).superRefine((config, ctx) => checkThinking("opencode", config, ctx));
|
|
32573
|
-
var
|
|
32596
|
+
var CLAUDE_OPTIONAL_BUILTINS = ["cron", "chrome", "remote-trigger"];
|
|
32597
|
+
var ClaudeConfigSchema = SimpleConfigSchema.extend({
|
|
32598
|
+
disabled_builtins: arrayType(enumType(CLAUDE_OPTIONAL_BUILTINS)).optional()
|
|
32599
|
+
}).superRefine((config, ctx) => {
|
|
32574
32600
|
checkThinking("claude", config, ctx);
|
|
32575
32601
|
if (config.default_model !== "opusplan" && config.plan_thinking !== undefined && config.plan_thinking !== config.build_thinking) {
|
|
32576
32602
|
ctx.addIssue({ code: "custom", path: ["plan_thinking"], message: "Separate Claude Plan/Build thinking requires opusplan" });
|
|
@@ -32595,13 +32621,23 @@ var DEFAULT_MODELS = {
|
|
|
32595
32621
|
sentinel: "haiku",
|
|
32596
32622
|
oracle: "opus",
|
|
32597
32623
|
architect: "opus",
|
|
32598
|
-
keymaker: "
|
|
32624
|
+
keymaker: "sonnet"
|
|
32599
32625
|
};
|
|
32600
32626
|
var CLAUDE_AI_OPT_OUTS = {
|
|
32601
32627
|
disableClaudeAiConnectors: true,
|
|
32602
32628
|
syncClaudeAiSkills: false,
|
|
32603
32629
|
syncClaudeAiPlugins: false
|
|
32604
32630
|
};
|
|
32631
|
+
var CONFLICTING_BUILTINS = {
|
|
32632
|
+
settings: { disableBundledSkills: true, enableArtifact: false, disableWorkflows: true },
|
|
32633
|
+
deny: ["Artifact", "ArtifactComments", "ArtifactData", "Workflow", "DesignSync"],
|
|
32634
|
+
skillOverrides: ["security-review", "ultrareview"]
|
|
32635
|
+
};
|
|
32636
|
+
var OPTIONAL_BUILTINS = {
|
|
32637
|
+
cron: { env: { CLAUDE_CODE_DISABLE_CRON: "1" } },
|
|
32638
|
+
chrome: { deniedMcpServers: ["claude-in-chrome"] },
|
|
32639
|
+
"remote-trigger": { deny: ["RemoteTrigger"] }
|
|
32640
|
+
};
|
|
32605
32641
|
var claudeAdapter = {
|
|
32606
32642
|
name: "claude",
|
|
32607
32643
|
configSchema: ClaudeConfigSchema,
|
|
@@ -32631,7 +32667,15 @@ function modelsForProvider(_provider) {
|
|
|
32631
32667
|
return [...ANTHROPIC_MODELS];
|
|
32632
32668
|
}
|
|
32633
32669
|
async function promptSection(prompt, section) {
|
|
32634
|
-
|
|
32670
|
+
const claude = section;
|
|
32671
|
+
const result = await promptForSimpleModels(prompt, claude, modelsForProvider());
|
|
32672
|
+
const { disabled } = await prompt.prompt([{
|
|
32673
|
+
type: "checkbox",
|
|
32674
|
+
name: "disabled",
|
|
32675
|
+
message: "Disable optional Claude Code built-ins",
|
|
32676
|
+
choices: CLAUDE_OPTIONAL_BUILTINS.map((value) => ({ name: value, value, checked: claude.disabled_builtins?.includes(value) ?? false }))
|
|
32677
|
+
}]);
|
|
32678
|
+
return { ...result, disabled_builtins: disabled };
|
|
32635
32679
|
}
|
|
32636
32680
|
function installAgents(section, basePath) {
|
|
32637
32681
|
const config = ClaudeConfigSchema.parse(section);
|
|
@@ -32671,6 +32715,14 @@ function mergeHarnessConfig(section, basePath) {
|
|
|
32671
32715
|
model: config.default_model || DEFAULT_MODELS.default_model
|
|
32672
32716
|
};
|
|
32673
32717
|
applyModeThinking(settings, config);
|
|
32718
|
+
applyAutoCompactWindow(settings, config);
|
|
32719
|
+
applyBuiltins(settings, CONFLICTING_BUILTINS);
|
|
32720
|
+
for (const name of CLAUDE_OPTIONAL_BUILTINS) {
|
|
32721
|
+
if (config.disabled_builtins?.includes(name))
|
|
32722
|
+
applyBuiltins(settings, OPTIONAL_BUILTINS[name]);
|
|
32723
|
+
else
|
|
32724
|
+
removeBuiltins(settings, OPTIONAL_BUILTINS[name]);
|
|
32725
|
+
}
|
|
32674
32726
|
try {
|
|
32675
32727
|
mkdirSync2(claudeDir, { recursive: true });
|
|
32676
32728
|
writeFileSync3(settingsPath, JSON.stringify(settings, null, 2) + `
|
|
@@ -32729,6 +32781,10 @@ function removeAtelierSettings(claudeDir, config) {
|
|
|
32729
32781
|
delete content[key];
|
|
32730
32782
|
}
|
|
32731
32783
|
applyModeThinking(content, config, true);
|
|
32784
|
+
applyAutoCompactWindow(content, config, true);
|
|
32785
|
+
removeBuiltins(content, CONFLICTING_BUILTINS);
|
|
32786
|
+
for (const patch of Object.values(OPTIONAL_BUILTINS))
|
|
32787
|
+
removeBuiltins(content, patch);
|
|
32732
32788
|
writeOrDeleteSettings(settingsPath, content);
|
|
32733
32789
|
}
|
|
32734
32790
|
function applyModeThinking(settings, config, remove = false) {
|
|
@@ -32753,6 +32809,96 @@ function applyModeThinking(settings, config, remove = false) {
|
|
|
32753
32809
|
else
|
|
32754
32810
|
delete settings.modelSettings;
|
|
32755
32811
|
}
|
|
32812
|
+
var OPUSPLAN_AUTO_COMPACT_WINDOW = 190000;
|
|
32813
|
+
function applyAutoCompactWindow(settings, config, remove = false) {
|
|
32814
|
+
const models = claudeModeModels("opusplan");
|
|
32815
|
+
const enabled = !remove && config.default_model === "opusplan";
|
|
32816
|
+
const modelSettings = { ...settings.modelSettings };
|
|
32817
|
+
for (const model of new Set([models.build, models.plan])) {
|
|
32818
|
+
const entry = { ...modelSettings[model] };
|
|
32819
|
+
if (enabled)
|
|
32820
|
+
entry.autoCompactWindow ??= OPUSPLAN_AUTO_COMPACT_WINDOW;
|
|
32821
|
+
else if (entry.autoCompactWindow === OPUSPLAN_AUTO_COMPACT_WINDOW)
|
|
32822
|
+
delete entry.autoCompactWindow;
|
|
32823
|
+
if (Object.keys(entry).length)
|
|
32824
|
+
modelSettings[model] = entry;
|
|
32825
|
+
else
|
|
32826
|
+
delete modelSettings[model];
|
|
32827
|
+
}
|
|
32828
|
+
if (Object.keys(modelSettings).length)
|
|
32829
|
+
settings.modelSettings = modelSettings;
|
|
32830
|
+
else
|
|
32831
|
+
delete settings.modelSettings;
|
|
32832
|
+
}
|
|
32833
|
+
function applyBuiltins(settings, patch) {
|
|
32834
|
+
Object.assign(settings, patch.settings);
|
|
32835
|
+
if (patch.env)
|
|
32836
|
+
settings.env = { ...settings.env, ...patch.env };
|
|
32837
|
+
if (patch.deny) {
|
|
32838
|
+
const permissions = { ...settings.permissions };
|
|
32839
|
+
const deny = permissions.deny ?? [];
|
|
32840
|
+
permissions.deny = [...deny, ...patch.deny.filter((rule) => !deny.includes(rule))];
|
|
32841
|
+
settings.permissions = permissions;
|
|
32842
|
+
}
|
|
32843
|
+
if (patch.skillOverrides) {
|
|
32844
|
+
const overrides = { ...settings.skillOverrides };
|
|
32845
|
+
for (const name of patch.skillOverrides)
|
|
32846
|
+
overrides[name] = "off";
|
|
32847
|
+
settings.skillOverrides = overrides;
|
|
32848
|
+
}
|
|
32849
|
+
if (patch.deniedMcpServers) {
|
|
32850
|
+
const denied = settings.deniedMcpServers ?? [];
|
|
32851
|
+
const missing = patch.deniedMcpServers.filter((name) => !denied.some((entry) => entry.serverName === name));
|
|
32852
|
+
settings.deniedMcpServers = [...denied, ...missing.map((serverName) => ({ serverName }))];
|
|
32853
|
+
}
|
|
32854
|
+
}
|
|
32855
|
+
function removeBuiltins(settings, patch) {
|
|
32856
|
+
for (const [key, value] of Object.entries(patch.settings ?? {})) {
|
|
32857
|
+
if (settings[key] === value)
|
|
32858
|
+
delete settings[key];
|
|
32859
|
+
}
|
|
32860
|
+
if (patch.env) {
|
|
32861
|
+
const env = { ...settings.env };
|
|
32862
|
+
for (const [key, value] of Object.entries(patch.env)) {
|
|
32863
|
+
if (env[key] === value)
|
|
32864
|
+
delete env[key];
|
|
32865
|
+
}
|
|
32866
|
+
if (Object.keys(env).length)
|
|
32867
|
+
settings.env = env;
|
|
32868
|
+
else
|
|
32869
|
+
delete settings.env;
|
|
32870
|
+
}
|
|
32871
|
+
if (patch.deny && settings.permissions) {
|
|
32872
|
+
const permissions = { ...settings.permissions };
|
|
32873
|
+
const deny = (permissions.deny ?? []).filter((rule) => !patch.deny.includes(rule));
|
|
32874
|
+
if (deny.length)
|
|
32875
|
+
permissions.deny = deny;
|
|
32876
|
+
else
|
|
32877
|
+
delete permissions.deny;
|
|
32878
|
+
if (Object.keys(permissions).length)
|
|
32879
|
+
settings.permissions = permissions;
|
|
32880
|
+
else
|
|
32881
|
+
delete settings.permissions;
|
|
32882
|
+
}
|
|
32883
|
+
if (patch.skillOverrides && settings.skillOverrides) {
|
|
32884
|
+
const overrides = { ...settings.skillOverrides };
|
|
32885
|
+
for (const name of patch.skillOverrides) {
|
|
32886
|
+
if (overrides[name] === "off")
|
|
32887
|
+
delete overrides[name];
|
|
32888
|
+
}
|
|
32889
|
+
if (Object.keys(overrides).length)
|
|
32890
|
+
settings.skillOverrides = overrides;
|
|
32891
|
+
else
|
|
32892
|
+
delete settings.skillOverrides;
|
|
32893
|
+
}
|
|
32894
|
+
if (patch.deniedMcpServers && settings.deniedMcpServers) {
|
|
32895
|
+
const denied = settings.deniedMcpServers.filter((entry) => !patch.deniedMcpServers.includes(entry.serverName ?? ""));
|
|
32896
|
+
if (denied.length)
|
|
32897
|
+
settings.deniedMcpServers = denied;
|
|
32898
|
+
else
|
|
32899
|
+
delete settings.deniedMcpServers;
|
|
32900
|
+
}
|
|
32901
|
+
}
|
|
32756
32902
|
function parseSettingsJson(settingsPath) {
|
|
32757
32903
|
try {
|
|
32758
32904
|
return JSON.parse(readFileSync4(settingsPath, "utf-8"));
|
|
@@ -32791,17 +32937,20 @@ var OPENCODE_PROVIDERS2 = [
|
|
|
32791
32937
|
{ name: "OpenCode Zen", value: "opencode-zen" },
|
|
32792
32938
|
{ name: "OpenCode Go", value: "opencode-go" },
|
|
32793
32939
|
{ name: "Amazon Bedrock", value: "amazon-bedrock" },
|
|
32794
|
-
{ name: "OpenAI", value: "openai" }
|
|
32940
|
+
{ name: "OpenAI", value: "openai" },
|
|
32941
|
+
{ name: "OpenRouter", value: "openrouter" },
|
|
32942
|
+
{ name: "Google Gemini", value: "google" }
|
|
32795
32943
|
];
|
|
32796
32944
|
var PROVIDER_MODELS = {
|
|
32797
32945
|
"opencode-zen": [
|
|
32946
|
+
"gpt-6.1-sol",
|
|
32798
32947
|
"gpt-6-astra",
|
|
32799
32948
|
"gpt-6-sol",
|
|
32800
32949
|
"gpt-6-luna",
|
|
32801
32950
|
"claude-opus-5-5",
|
|
32802
32951
|
"claude-fable-5-1",
|
|
32803
32952
|
"claude-sonnet-5-5",
|
|
32804
|
-
"claude-haiku-
|
|
32953
|
+
"claude-haiku-5-5",
|
|
32805
32954
|
"glm-5.3",
|
|
32806
32955
|
"glm-5.3-flash",
|
|
32807
32956
|
"kimi-k3",
|
|
@@ -32812,36 +32961,83 @@ var PROVIDER_MODELS = {
|
|
|
32812
32961
|
"qwen3.8-max",
|
|
32813
32962
|
"qwen3.8-flash",
|
|
32814
32963
|
"mimo-v2.6-flash-free",
|
|
32964
|
+
"gemini-4-argon",
|
|
32815
32965
|
"gemini-3.8-flash",
|
|
32816
|
-
"
|
|
32966
|
+
"grok-4.7",
|
|
32967
|
+
"mistral-large-4",
|
|
32968
|
+
"muse-spark-1.3",
|
|
32969
|
+
"muse-wonder-1.0",
|
|
32970
|
+
"inkling-2-small-free",
|
|
32971
|
+
"nemotron-3.5-super-vl-free",
|
|
32972
|
+
"nemotron-3.5-lightning-free"
|
|
32817
32973
|
].map((id) => `opencode/${id}`),
|
|
32818
32974
|
"opencode-go": [
|
|
32819
32975
|
"glm-5.3",
|
|
32820
32976
|
"glm-5.3-flash",
|
|
32977
|
+
"kimi-k3.1-pro",
|
|
32821
32978
|
"kimi-k3",
|
|
32822
32979
|
"deepseek-v4.1-flash",
|
|
32823
32980
|
"deepseek-v4-pro",
|
|
32981
|
+
"minimax-m3.1-flash",
|
|
32824
32982
|
"minimax-m3",
|
|
32825
32983
|
"qwen3.8-max",
|
|
32826
32984
|
"qwen3.8-flash",
|
|
32827
32985
|
"mimo-v2.6-pro",
|
|
32828
32986
|
"mimo-v2.6-flash",
|
|
32829
|
-
"gpt-6-luna"
|
|
32987
|
+
"gpt-6-luna",
|
|
32988
|
+
"claude-haiku-5-5",
|
|
32989
|
+
"gemini-4-argon",
|
|
32990
|
+
"grok-4.7",
|
|
32991
|
+
"muse-spark-1.3-contributor"
|
|
32830
32992
|
].map((id) => `opencode-go/${id}`),
|
|
32831
32993
|
"amazon-bedrock": [
|
|
32832
32994
|
"us.anthropic.claude-opus-5-5",
|
|
32833
32995
|
"us.anthropic.claude-fable-5-1",
|
|
32834
32996
|
"us.anthropic.claude-sonnet-5-5",
|
|
32835
|
-
"us.anthropic.claude-haiku-
|
|
32997
|
+
"us.anthropic.claude-haiku-5-5"
|
|
32836
32998
|
].map((id) => `amazon-bedrock/${id}`),
|
|
32837
|
-
openai: ["gpt-6-astra", "gpt-6-sol", "gpt-6-luna", "gpt-5.6-sol", "gpt-5.6-terra", "gpt-5.6-luna", "gpt-5.3-codex-spark"].map((id) => `openai/${id}`)
|
|
32999
|
+
openai: ["gpt-6.1-sol", "gpt-6.1-terra", "gpt-6-astra", "gpt-6-sol", "gpt-6-luna", "gpt-5.6-sol", "gpt-5.6-terra", "gpt-5.6-luna", "gpt-5.3-codex-spark"].map((id) => `openai/${id}`),
|
|
33000
|
+
openrouter: [
|
|
33001
|
+
"anthropic/claude-opus-5.5",
|
|
33002
|
+
"anthropic/claude-fable-5.1",
|
|
33003
|
+
"anthropic/claude-sonnet-5.5",
|
|
33004
|
+
"anthropic/claude-haiku-5.5",
|
|
33005
|
+
"openai/gpt-6.1-sol",
|
|
33006
|
+
"openai/gpt-6.1-terra",
|
|
33007
|
+
"openai/gpt-6-astra",
|
|
33008
|
+
"openai/gpt-6-sol",
|
|
33009
|
+
"openai/gpt-6-luna",
|
|
33010
|
+
"google/gemini-4-argon",
|
|
33011
|
+
"google/gemini-3.8-flash",
|
|
33012
|
+
"z-ai/glm-5.3",
|
|
33013
|
+
"z-ai/glm-5.3-flash",
|
|
33014
|
+
"moonshotai/kimi-k3.1-pro",
|
|
33015
|
+
"moonshotai/kimi-k3",
|
|
33016
|
+
"deepseek/deepseek-v4.1-flash-1017",
|
|
33017
|
+
"deepseek/deepseek-v4.1-flash",
|
|
33018
|
+
"deepseek/deepseek-v4-pro",
|
|
33019
|
+
"x-ai/grok-4.7",
|
|
33020
|
+
"minimax/minimax-m3.1-flash",
|
|
33021
|
+
"minimax/minimax-m3",
|
|
33022
|
+
"qwen/qwen3.8-flash",
|
|
33023
|
+
"xiaomi/mimo-v2.6-pro",
|
|
33024
|
+
"mistralai/mistral-large-4-0",
|
|
33025
|
+
"thinkingmachines/inkling",
|
|
33026
|
+
"thinkingmachines/inkling-small",
|
|
33027
|
+
"nvidia/nemotron-3.5-super-vl",
|
|
33028
|
+
"nvidia/nemotron-3.5-lightning",
|
|
33029
|
+
"meta/muse-spark-1.3",
|
|
33030
|
+
"meta/muse-spark-open",
|
|
33031
|
+
"meta/muse-wonder"
|
|
33032
|
+
].map((id) => `openrouter/${id}`),
|
|
33033
|
+
google: ["gemini-4-argon", "gemini-3.8-flash", "gemini-3.7-flash", "gemini-3.5-flash-lite"].map((id) => `google/${id}`)
|
|
32838
33034
|
};
|
|
32839
33035
|
var DEFAULT_MODELS2 = {
|
|
32840
33036
|
"opencode-zen": {
|
|
32841
33037
|
sentinel: "opencode/glm-5.3-flash",
|
|
32842
33038
|
oracle: "opencode/kimi-k3",
|
|
32843
33039
|
architect: "opencode/glm-5.3",
|
|
32844
|
-
keymaker: "opencode/
|
|
33040
|
+
keymaker: "opencode/deepseek-v4.1-flash",
|
|
32845
33041
|
build: "opencode/deepseek-v4.1-flash",
|
|
32846
33042
|
plan: "opencode/glm-5.3"
|
|
32847
33043
|
},
|
|
@@ -32849,15 +33045,15 @@ var DEFAULT_MODELS2 = {
|
|
|
32849
33045
|
sentinel: "opencode-go/glm-5.3-flash",
|
|
32850
33046
|
oracle: "opencode-go/mimo-v2.6-pro",
|
|
32851
33047
|
architect: "opencode-go/glm-5.3",
|
|
32852
|
-
keymaker: "opencode-go/
|
|
33048
|
+
keymaker: "opencode-go/deepseek-v4.1-flash",
|
|
32853
33049
|
build: "opencode-go/deepseek-v4.1-flash",
|
|
32854
33050
|
plan: "opencode-go/glm-5.3"
|
|
32855
33051
|
},
|
|
32856
33052
|
"amazon-bedrock": {
|
|
32857
|
-
sentinel: "amazon-bedrock/us.anthropic.claude-haiku-
|
|
33053
|
+
sentinel: "amazon-bedrock/us.anthropic.claude-haiku-5-5",
|
|
32858
33054
|
oracle: "amazon-bedrock/us.anthropic.claude-fable-5-1",
|
|
32859
33055
|
architect: "amazon-bedrock/us.anthropic.claude-opus-5-5",
|
|
32860
|
-
keymaker: "amazon-bedrock/us.anthropic.claude-
|
|
33056
|
+
keymaker: "amazon-bedrock/us.anthropic.claude-sonnet-5-5",
|
|
32861
33057
|
build: "amazon-bedrock/us.anthropic.claude-sonnet-5-5",
|
|
32862
33058
|
plan: "amazon-bedrock/us.anthropic.claude-opus-5-5"
|
|
32863
33059
|
},
|
|
@@ -32865,9 +33061,25 @@ var DEFAULT_MODELS2 = {
|
|
|
32865
33061
|
sentinel: "openai/gpt-6-luna",
|
|
32866
33062
|
oracle: "openai/gpt-6-astra",
|
|
32867
33063
|
architect: "openai/gpt-6-astra",
|
|
32868
|
-
keymaker: "openai/gpt-6-
|
|
33064
|
+
keymaker: "openai/gpt-6-sol",
|
|
32869
33065
|
build: "openai/gpt-6-sol",
|
|
32870
33066
|
plan: "openai/gpt-6-astra"
|
|
33067
|
+
},
|
|
33068
|
+
openrouter: {
|
|
33069
|
+
sentinel: "openrouter/z-ai/glm-5.3-flash",
|
|
33070
|
+
oracle: "openrouter/moonshotai/kimi-k3.1-pro",
|
|
33071
|
+
architect: "openrouter/z-ai/glm-5.3",
|
|
33072
|
+
keymaker: "openrouter/deepseek/deepseek-v4.1-flash-1017",
|
|
33073
|
+
build: "openrouter/deepseek/deepseek-v4.1-flash-1017",
|
|
33074
|
+
plan: "openrouter/z-ai/glm-5.3"
|
|
33075
|
+
},
|
|
33076
|
+
google: {
|
|
33077
|
+
sentinel: "google/gemini-3.5-flash-lite",
|
|
33078
|
+
oracle: "google/gemini-4-argon",
|
|
33079
|
+
architect: "google/gemini-4-argon",
|
|
33080
|
+
keymaker: "google/gemini-3.8-flash",
|
|
33081
|
+
build: "google/gemini-3.8-flash",
|
|
33082
|
+
plan: "google/gemini-4-argon"
|
|
32871
33083
|
}
|
|
32872
33084
|
};
|
|
32873
33085
|
var COMMAND_MARKER = "<!-- Generated by Atelier -->";
|
|
@@ -32896,7 +33108,7 @@ function defaultSection2(provider) {
|
|
|
32896
33108
|
template: name,
|
|
32897
33109
|
name,
|
|
32898
33110
|
model: defaults[name],
|
|
32899
|
-
thinking: name === "
|
|
33111
|
+
thinking: name === "keymaker" ? selectedProvider === "amazon-bedrock" ? "default" : "high" : name === "sentinel" ? "low" : name === "oracle" && selectedProvider === "opencode-go" ? "on" : name === "architect" && selectedProvider === "openai" ? "xhigh" : "high"
|
|
32900
33112
|
}))
|
|
32901
33113
|
};
|
|
32902
33114
|
}
|
|
@@ -34325,7 +34537,7 @@ var DEFAULT_MODELS3 = {
|
|
|
34325
34537
|
sentinel: "gpt-6-luna",
|
|
34326
34538
|
oracle: "gpt-6-astra",
|
|
34327
34539
|
architect: "gpt-6-astra",
|
|
34328
|
-
keymaker: "gpt-6-
|
|
34540
|
+
keymaker: "gpt-6-sol"
|
|
34329
34541
|
};
|
|
34330
34542
|
var WRITABLE_AGENTS = ["keymaker"];
|
|
34331
34543
|
var MANAGED_CODEX_KEYS = [
|
|
@@ -34364,7 +34576,7 @@ function defaultSection3() {
|
|
|
34364
34576
|
template: name,
|
|
34365
34577
|
name,
|
|
34366
34578
|
model: DEFAULT_MODELS3[name],
|
|
34367
|
-
thinking: { sentinel: "low", oracle: "high", architect: "xhigh", keymaker: "
|
|
34579
|
+
thinking: { sentinel: "low", oracle: "high", architect: "xhigh", keymaker: "medium" }[name]
|
|
34368
34580
|
}))
|
|
34369
34581
|
};
|
|
34370
34582
|
}
|
package/package.json
CHANGED
|
@@ -126,8 +126,11 @@ choice to review. If any choice exists, use an Inline Plan.
|
|
|
126
126
|
Delegate bounded, read-only work to a subagent when it would otherwise flood the main context:
|
|
127
127
|
wide codebase research, finding comparable code, or independent review. Ask for a concise,
|
|
128
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
|
|
130
|
-
|
|
129
|
+
interviews or design dialogue with the human, lookups of a few files, or stateful debug loops.
|
|
130
|
+
|
|
131
|
+
Delegate implementation too. Once the design is settled, implementation batches go to
|
|
132
|
+
**Keymaker** subagents through **code-subagents**; the main conversation edits code directly
|
|
133
|
+
only for trivial or mechanical changes and debugging loops.
|
|
131
134
|
|
|
132
135
|
Every subagent launch must explicitly select an agent. Match the work to the descriptions of
|
|
133
136
|
Atelier's agents (Sentinel, Oracle, Architect, Keymaker) and choose one. Never launch without a
|
|
@@ -135,6 +138,21 @@ selection or rely on the harness default. Exception: design-sensitive implementa
|
|
|
135
138
|
harness's general agent. If Atelier's agents are not installed, explicitly choose the closest
|
|
136
139
|
available agent by description and state the choice in the output.
|
|
137
140
|
|
|
141
|
+
### Parent context
|
|
142
|
+
|
|
143
|
+
The main conversation holds the human's decisions and is the scarcest context. Quality degrades
|
|
144
|
+
as it grows, compaction loses detail, and under `opusplan` planning silently drops to Sonnet once
|
|
145
|
+
a turn passes 200k tokens. Keep it lean:
|
|
146
|
+
|
|
147
|
+
- Send work that produces bulky output to subagents and keep only their summaries. That covers
|
|
148
|
+
broad search, test and build runs, log reading, and implementation batches through
|
|
149
|
+
code-subagents.
|
|
150
|
+
- Read only the ranges you need, don't re-read files, and don't paste large outputs back.
|
|
151
|
+
- Persist decisions and progress to the plan or spec artifacts, so compaction or a fresh session
|
|
152
|
+
loses nothing.
|
|
153
|
+
- Compact deliberately at phase boundaries (plan approved, batch done, before re-planning) with
|
|
154
|
+
`/compact <focus>`, or start a fresh session. Don't wait for the automatic trigger mid-task.
|
|
155
|
+
|
|
138
156
|
## Hard Transitions
|
|
139
157
|
|
|
140
158
|
| After completing... | Next step |
|
|
@@ -70,10 +70,10 @@ For shared-tree parallel work:
|
|
|
70
70
|
## Agent Selection
|
|
71
71
|
|
|
72
72
|
Select the agent explicitly for every dispatch (see Delegation in `atelier-orchestrator`). Give
|
|
73
|
-
implementers the design excerpt so they make no design decisions
|
|
74
|
-
|
|
75
|
-
permitted exception to selecting from Atelier's agents. The batch reviewer
|
|
76
|
-
critical review.
|
|
73
|
+
implementers the design excerpt so they make no design decisions. Implementers of settled
|
|
74
|
+
designs, mechanical or not, are Keymaker; design-sensitive implementation may use the harness's
|
|
75
|
+
general agent, the one permitted exception to selecting from Atelier's agents. The batch reviewer
|
|
76
|
+
is a read-only critical review.
|
|
77
77
|
|
|
78
78
|
---
|
|
79
79
|
|