@martinffx/atelier 3.6.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 +9 -0
- package/README.md +8 -6
- package/agents/keymaker.md +25 -17
- package/dist/atelier.js +135 -23
- 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,15 @@
|
|
|
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
|
+
|
|
7
16
|
## [3.6.0](https://github.com/martinffx/atelier/compare/v3.5.0...v3.6.0) (2026-10-25)
|
|
8
17
|
|
|
9
18
|
|
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. 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)
|
|
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),
|
|
@@ -32598,7 +32621,7 @@ var DEFAULT_MODELS = {
|
|
|
32598
32621
|
sentinel: "haiku",
|
|
32599
32622
|
oracle: "opus",
|
|
32600
32623
|
architect: "opus",
|
|
32601
|
-
keymaker: "
|
|
32624
|
+
keymaker: "sonnet"
|
|
32602
32625
|
};
|
|
32603
32626
|
var CLAUDE_AI_OPT_OUTS = {
|
|
32604
32627
|
disableClaudeAiConnectors: true,
|
|
@@ -32692,6 +32715,7 @@ function mergeHarnessConfig(section, basePath) {
|
|
|
32692
32715
|
model: config.default_model || DEFAULT_MODELS.default_model
|
|
32693
32716
|
};
|
|
32694
32717
|
applyModeThinking(settings, config);
|
|
32718
|
+
applyAutoCompactWindow(settings, config);
|
|
32695
32719
|
applyBuiltins(settings, CONFLICTING_BUILTINS);
|
|
32696
32720
|
for (const name of CLAUDE_OPTIONAL_BUILTINS) {
|
|
32697
32721
|
if (config.disabled_builtins?.includes(name))
|
|
@@ -32757,6 +32781,7 @@ function removeAtelierSettings(claudeDir, config) {
|
|
|
32757
32781
|
delete content[key];
|
|
32758
32782
|
}
|
|
32759
32783
|
applyModeThinking(content, config, true);
|
|
32784
|
+
applyAutoCompactWindow(content, config, true);
|
|
32760
32785
|
removeBuiltins(content, CONFLICTING_BUILTINS);
|
|
32761
32786
|
for (const patch of Object.values(OPTIONAL_BUILTINS))
|
|
32762
32787
|
removeBuiltins(content, patch);
|
|
@@ -32784,6 +32809,27 @@ function applyModeThinking(settings, config, remove = false) {
|
|
|
32784
32809
|
else
|
|
32785
32810
|
delete settings.modelSettings;
|
|
32786
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
|
+
}
|
|
32787
32833
|
function applyBuiltins(settings, patch) {
|
|
32788
32834
|
Object.assign(settings, patch.settings);
|
|
32789
32835
|
if (patch.env)
|
|
@@ -32891,17 +32937,20 @@ var OPENCODE_PROVIDERS2 = [
|
|
|
32891
32937
|
{ name: "OpenCode Zen", value: "opencode-zen" },
|
|
32892
32938
|
{ name: "OpenCode Go", value: "opencode-go" },
|
|
32893
32939
|
{ name: "Amazon Bedrock", value: "amazon-bedrock" },
|
|
32894
|
-
{ name: "OpenAI", value: "openai" }
|
|
32940
|
+
{ name: "OpenAI", value: "openai" },
|
|
32941
|
+
{ name: "OpenRouter", value: "openrouter" },
|
|
32942
|
+
{ name: "Google Gemini", value: "google" }
|
|
32895
32943
|
];
|
|
32896
32944
|
var PROVIDER_MODELS = {
|
|
32897
32945
|
"opencode-zen": [
|
|
32946
|
+
"gpt-6.1-sol",
|
|
32898
32947
|
"gpt-6-astra",
|
|
32899
32948
|
"gpt-6-sol",
|
|
32900
32949
|
"gpt-6-luna",
|
|
32901
32950
|
"claude-opus-5-5",
|
|
32902
32951
|
"claude-fable-5-1",
|
|
32903
32952
|
"claude-sonnet-5-5",
|
|
32904
|
-
"claude-haiku-
|
|
32953
|
+
"claude-haiku-5-5",
|
|
32905
32954
|
"glm-5.3",
|
|
32906
32955
|
"glm-5.3-flash",
|
|
32907
32956
|
"kimi-k3",
|
|
@@ -32912,36 +32961,83 @@ var PROVIDER_MODELS = {
|
|
|
32912
32961
|
"qwen3.8-max",
|
|
32913
32962
|
"qwen3.8-flash",
|
|
32914
32963
|
"mimo-v2.6-flash-free",
|
|
32964
|
+
"gemini-4-argon",
|
|
32915
32965
|
"gemini-3.8-flash",
|
|
32916
|
-
"
|
|
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"
|
|
32917
32973
|
].map((id) => `opencode/${id}`),
|
|
32918
32974
|
"opencode-go": [
|
|
32919
32975
|
"glm-5.3",
|
|
32920
32976
|
"glm-5.3-flash",
|
|
32977
|
+
"kimi-k3.1-pro",
|
|
32921
32978
|
"kimi-k3",
|
|
32922
32979
|
"deepseek-v4.1-flash",
|
|
32923
32980
|
"deepseek-v4-pro",
|
|
32981
|
+
"minimax-m3.1-flash",
|
|
32924
32982
|
"minimax-m3",
|
|
32925
32983
|
"qwen3.8-max",
|
|
32926
32984
|
"qwen3.8-flash",
|
|
32927
32985
|
"mimo-v2.6-pro",
|
|
32928
32986
|
"mimo-v2.6-flash",
|
|
32929
|
-
"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"
|
|
32930
32992
|
].map((id) => `opencode-go/${id}`),
|
|
32931
32993
|
"amazon-bedrock": [
|
|
32932
32994
|
"us.anthropic.claude-opus-5-5",
|
|
32933
32995
|
"us.anthropic.claude-fable-5-1",
|
|
32934
32996
|
"us.anthropic.claude-sonnet-5-5",
|
|
32935
|
-
"us.anthropic.claude-haiku-
|
|
32997
|
+
"us.anthropic.claude-haiku-5-5"
|
|
32936
32998
|
].map((id) => `amazon-bedrock/${id}`),
|
|
32937
|
-
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}`)
|
|
32938
33034
|
};
|
|
32939
33035
|
var DEFAULT_MODELS2 = {
|
|
32940
33036
|
"opencode-zen": {
|
|
32941
33037
|
sentinel: "opencode/glm-5.3-flash",
|
|
32942
33038
|
oracle: "opencode/kimi-k3",
|
|
32943
33039
|
architect: "opencode/glm-5.3",
|
|
32944
|
-
keymaker: "opencode/
|
|
33040
|
+
keymaker: "opencode/deepseek-v4.1-flash",
|
|
32945
33041
|
build: "opencode/deepseek-v4.1-flash",
|
|
32946
33042
|
plan: "opencode/glm-5.3"
|
|
32947
33043
|
},
|
|
@@ -32949,15 +33045,15 @@ var DEFAULT_MODELS2 = {
|
|
|
32949
33045
|
sentinel: "opencode-go/glm-5.3-flash",
|
|
32950
33046
|
oracle: "opencode-go/mimo-v2.6-pro",
|
|
32951
33047
|
architect: "opencode-go/glm-5.3",
|
|
32952
|
-
keymaker: "opencode-go/
|
|
33048
|
+
keymaker: "opencode-go/deepseek-v4.1-flash",
|
|
32953
33049
|
build: "opencode-go/deepseek-v4.1-flash",
|
|
32954
33050
|
plan: "opencode-go/glm-5.3"
|
|
32955
33051
|
},
|
|
32956
33052
|
"amazon-bedrock": {
|
|
32957
|
-
sentinel: "amazon-bedrock/us.anthropic.claude-haiku-
|
|
33053
|
+
sentinel: "amazon-bedrock/us.anthropic.claude-haiku-5-5",
|
|
32958
33054
|
oracle: "amazon-bedrock/us.anthropic.claude-fable-5-1",
|
|
32959
33055
|
architect: "amazon-bedrock/us.anthropic.claude-opus-5-5",
|
|
32960
|
-
keymaker: "amazon-bedrock/us.anthropic.claude-
|
|
33056
|
+
keymaker: "amazon-bedrock/us.anthropic.claude-sonnet-5-5",
|
|
32961
33057
|
build: "amazon-bedrock/us.anthropic.claude-sonnet-5-5",
|
|
32962
33058
|
plan: "amazon-bedrock/us.anthropic.claude-opus-5-5"
|
|
32963
33059
|
},
|
|
@@ -32965,9 +33061,25 @@ var DEFAULT_MODELS2 = {
|
|
|
32965
33061
|
sentinel: "openai/gpt-6-luna",
|
|
32966
33062
|
oracle: "openai/gpt-6-astra",
|
|
32967
33063
|
architect: "openai/gpt-6-astra",
|
|
32968
|
-
keymaker: "openai/gpt-6-
|
|
33064
|
+
keymaker: "openai/gpt-6-sol",
|
|
32969
33065
|
build: "openai/gpt-6-sol",
|
|
32970
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"
|
|
32971
33083
|
}
|
|
32972
33084
|
};
|
|
32973
33085
|
var COMMAND_MARKER = "<!-- Generated by Atelier -->";
|
|
@@ -32996,7 +33108,7 @@ function defaultSection2(provider) {
|
|
|
32996
33108
|
template: name,
|
|
32997
33109
|
name,
|
|
32998
33110
|
model: defaults[name],
|
|
32999
|
-
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"
|
|
33000
33112
|
}))
|
|
33001
33113
|
};
|
|
33002
33114
|
}
|
|
@@ -34425,7 +34537,7 @@ var DEFAULT_MODELS3 = {
|
|
|
34425
34537
|
sentinel: "gpt-6-luna",
|
|
34426
34538
|
oracle: "gpt-6-astra",
|
|
34427
34539
|
architect: "gpt-6-astra",
|
|
34428
|
-
keymaker: "gpt-6-
|
|
34540
|
+
keymaker: "gpt-6-sol"
|
|
34429
34541
|
};
|
|
34430
34542
|
var WRITABLE_AGENTS = ["keymaker"];
|
|
34431
34543
|
var MANAGED_CODEX_KEYS = [
|
|
@@ -34464,7 +34576,7 @@ function defaultSection3() {
|
|
|
34464
34576
|
template: name,
|
|
34465
34577
|
name,
|
|
34466
34578
|
model: DEFAULT_MODELS3[name],
|
|
34467
|
-
thinking: { sentinel: "low", oracle: "high", architect: "xhigh", keymaker: "
|
|
34579
|
+
thinking: { sentinel: "low", oracle: "high", architect: "xhigh", keymaker: "medium" }[name]
|
|
34468
34580
|
}))
|
|
34469
34581
|
};
|
|
34470
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
|
|