@kontextmind/kxm 0.7.200 → 0.7.201

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.
@@ -11,7 +11,7 @@
11
11
  "name": "kxm",
12
12
  "source": "./plugins/kxm",
13
13
  "description": "Durable workflows, peer agents, and kxm tui",
14
- "version": "0.7.200",
14
+ "version": "0.7.201",
15
15
  "category": "development",
16
16
  "tags": ["kxm", "multi-agent", "workflows", "mcp"]
17
17
  }
package/CHANGELOG.md CHANGED
@@ -225,6 +225,14 @@ All notable user-facing changes are documented here. The project follows [Semant
225
225
 
226
226
  ### Changed
227
227
 
228
+ - **`kxm init` starts the writer on Grok 4.7.** The starter model file is
229
+ `.kxm/models/grok-grok-4-7.yaml` (`grok` / `grok-4.7`, selector
230
+ `xai/grok-4.7`, alias `grok-default`). The writer roster, the built-in
231
+ coder and browser modes, the general subagent default, the Pi producer
232
+ default, and the `kxm routing benchmark` arm list use the same model.
233
+ Guide candidates and selector examples may still show `grok-4.6`.
234
+ `.kxm/prices.yaml` keeps both price rows.
235
+
228
236
  - **The planner fallback is Claude Sonnet 5.5.** `claude-fable` stays the
229
237
  planner primary. `claude-claude-sonnet-5-5` (`claude` / `claude-sonnet-5.5`,
230
238
  selector `anthropic/claude-sonnet-5.5`, read-only, effort `medium`) is the
@@ -72,7 +72,7 @@ Changing the default needs a vision accuracy witness on the admitted id. This pa
72
72
 
73
73
  ### 3. The starter writer model
74
74
 
75
- `kxm init` still admits `xai/grok-4.6`, writes `.kxm/models/grok-grok-4-6.yaml`, and puts that route on the writer roster. This repository admits `xai/grok-4.7`. `modes.ts`, `subagent-control.ts`, and the Pi producer default still name grok-4.6. Glossary and catalog examples that show grok-4.6 are selector shapes. Replacing the starter is an admission decision, with the tests and docs that pin 4.6 updated in the same change.
75
+ Approved 2026-10-21 in [pull request #418](https://github.com/kontextmind/kxm/pull/418). `kxm init` admits `xai/grok-4.7`, writes `.kxm/models/grok-grok-4-7.yaml`, and puts that route on the writer roster. `modes.ts`, `subagent-control.ts`, and the Pi producer default name grok-4.7. Glossary and catalog examples that show grok-4.6 stay selector shapes.
76
76
 
77
77
  ### 4. Confirm or reverse the defaults already in Tracking
78
78
 
@@ -201,7 +201,7 @@ kxm init --dry-run --json
201
201
  ```
202
202
 
203
203
  ```text
204
- {"schema":"kxm.cli-result.v1","ok":true,"command":"init","action":"planned","mode":"create","inspectedFrom":"/work/proj","projectRoot":"/work/proj","changesRequired":true,"legacyInputs":[],"issues":[],"files":[".kxm/agents/planner.yaml",".kxm/agents/writer.yaml",".kxm/gates.yaml",".kxm/models/claude-fable.yaml",".kxm/models/grok-grok-4-6.yaml",".kxm/project.yaml",".kxm/repo/repo.yaml",".kxm/roles/planner.yaml",".kxm/roles/writer.yaml",".kxm/routes.yaml",".kxm/template-provenance.yaml",".kxm/workflows/default.yaml"],"plannedOnly":true}
204
+ {"schema":"kxm.cli-result.v1","ok":true,"command":"init","action":"planned","mode":"create","inspectedFrom":"/work/proj","projectRoot":"/work/proj","changesRequired":true,"legacyInputs":[],"issues":[],"files":[".kxm/agents/planner.yaml",".kxm/agents/writer.yaml",".kxm/gates.yaml",".kxm/models/claude-fable.yaml",".kxm/models/grok-grok-4-7.yaml",".kxm/project.yaml",".kxm/repo/repo.yaml",".kxm/roles/planner.yaml",".kxm/roles/writer.yaml",".kxm/routes.yaml",".kxm/template-provenance.yaml",".kxm/workflows/default.yaml"],"plannedOnly":true}
205
205
  ```
206
206
 
207
207
  Create the project:
@@ -3036,7 +3036,7 @@ KXM PRE-FLIGHT CONTEXT EXPLAIN
3036
3036
  ════════════════════════════════════════════════════════════
3037
3037
  Major Mode: coder
3038
3038
  Enabled Domains: (none)
3039
- Target Model: grok/grok-4.6
3039
+ Target Model: grok/grok-4.7
3040
3040
  Catalog status: price catalog missing
3041
3041
 
3042
3042
  CONTEXT BREAKDOWN:
@@ -3661,7 +3661,7 @@ Dedicated offline benchmark for side-by-side model comparison (Decision Q12). To
3661
3661
  | Option | Argument | Default | Description |
3662
3662
  |---|---|---|---|
3663
3663
  | `--task` | `<fixture>` | `Deterministic benchmark task` | Task prompt or fixture path for benchmark comparison |
3664
- | `--arms` | `<models>` | `grok/grok-4.6,claude/fable,pi/qwen3.7-plus` | Comma-separated model routes to benchmark (e.g. grok/grok-4.6,claude/fable) |
3664
+ | `--arms` | `<models>` | `grok/grok-4.7,claude/fable,pi/qwen3.7-plus` | Comma-separated model routes to benchmark (e.g. grok/grok-4.6,claude/fable) |
3665
3665
  | `--runs` | `<count>` | `1` | Benchmark runs per arm |
3666
3666
 
3667
3667
  - Reads nothing. JSON keys: `task`, `runs`, `timestamp`, `arms` (`harness`, `model`, `latencyMs`, `tokensIn`, `tokensOut`, `costUsd`, `outcome`).
@@ -3673,7 +3673,7 @@ kxm routing benchmark
3673
3673
  ```text
3674
3674
  Routing Benchmark Results (task: Deterministic benchmark task, runs: 1)
3675
3675
  Harness Model Latency(ms) TokensIn TokensOut Cost($) Outcome
3676
- grok grok-4.6 420 1200 450 $0.17 passed
3676
+ grok grok-4.7 420 1200 450 $0.17 passed
3677
3677
  claude fable 680 1200 450 $0.45 passed
3678
3678
  pi qwen3.7-plus 560 1200 450 $0.12 passed
3679
3679
  ```
@@ -398,8 +398,8 @@ resultSchema: kxm.assignment-result.v1
398
398
 
399
399
  `kxm init` creates `planner` (`role: planner`, alias `coordinator`) and `writer`
400
400
  (`role: writer`, alias `implementer`) without `harness` or `model`, and admits
401
- `anthropic/fable` and `xai/grok-4.6` in `.kxm/routes.yaml`. The model files are
402
- `claude-fable` and `grok-grok-4-6`. An interactive `kxm init` can add
401
+ `anthropic/fable` and `xai/grok-4.7` in `.kxm/routes.yaml`. The model files are
402
+ `claude-fable` and `grok-grok-4-7`. An interactive `kxm init` can add
403
403
  workflow-guide agents for reviewed pairs whose harness is authenticated, and
404
404
  admits their selectors too, but skips Google guide candidates because the
405
405
  Runtime cannot reach the `antigravity` Pi provider yet. `kxm run` and the
@@ -258,7 +258,7 @@ The file is a `kxm.workflow.v1` definition. `coordinator` names the agent that o
258
258
 
259
259
  ### Why start with `first` and not `default`
260
260
 
261
- `kxm init` also writes a `default` workflow. Its coordinator plans on `claude` / `anthropic/fable`, its implementer writes the checkout on `grok` / `xai/grok-4.6`, and a `test` gate runs `npm test`; `kxm init` admits exactly those two models in `.kxm/routes.yaml`. You can drive it, but even a simulated drive runs `npm test` in your checkout, and a live drive spends both subscriptions and passes the implement step only when Grok changes the checkout. `first` calls no model and runs no command, so it is the safer first run. [Steps the Runtime does not execute yet](../reference/config-reference.md#steps-the-runtime-does-not-execute-yet) lists every setting that makes a drive hand the run off.
261
+ `kxm init` also writes a `default` workflow. Its coordinator plans on `claude` / `anthropic/fable`, its implementer writes the checkout on `grok` / `xai/grok-4.7`, and a `test` gate runs `npm test`; `kxm init` admits exactly those two models in `.kxm/routes.yaml`. You can drive it, but even a simulated drive runs `npm test` in your checkout, and a live drive spends both subscriptions and passes the implement step only when Grok changes the checkout. `first` calls no model and runs no command, so it is the safer first run. [Steps the Runtime does not execute yet](../reference/config-reference.md#steps-the-runtime-does-not-execute-yet) lists every setting that makes a drive hand the run off.
262
262
 
263
263
  ### Two kinds of runs
264
264
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kontextmind/kxm",
3
- "version": "0.7.200",
3
+ "version": "0.7.201",
4
4
  "description": "KXM local-first multi-agent orchestration and operator dashboard",
5
5
  "type": "module",
6
6
  "author": "KontextMind",
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
3
3
  "name": "kxm",
4
4
  "displayName": "KXM",
5
- "version": "0.7.200",
5
+ "version": "0.7.201",
6
6
  "description": "Headless multi-agent orchestration, durable workflows, and a live operator dashboard for Pi and Claude Code",
7
7
  "author": {
8
8
  "name": "KontextMind",
@@ -18623,7 +18623,7 @@ var init_workforce_names = __esm({
18623
18623
  ["fable-claude", "claude-fable"],
18624
18624
  // sol-codex stays the GPT-5.6 route. codex-gpt-6-1-sol is a separate route.
18625
18625
  ["sol-codex", "codex-gpt-5-6-sol"],
18626
- ["grok-default", "grok-grok-4-6"],
18626
+ ["grok-default", "grok-grok-4-7"],
18627
18627
  ["fable-default", "claude-fable"]
18628
18628
  ]);
18629
18629
  AGENT_RENAMES = Object.freeze([
@@ -18824,16 +18824,16 @@ function coreTemplate(projectId, projectName, variant) {
18824
18824
  }
18825
18825
  files.set(".kxm/routes.yaml", {
18826
18826
  schema: "kxm.routes.v2",
18827
- updatedAt: "2026-09-27T00:00:00.000Z",
18828
- admitted: ["anthropic/fable", "xai/grok-4.6"],
18827
+ updatedAt: "2026-10-21T00:00:00.000Z",
18828
+ admitted: ["anthropic/fable", "xai/grok-4.7"],
18829
18829
  disabled: []
18830
18830
  });
18831
- files.set(".kxm/models/grok-grok-4-6.yaml", {
18831
+ files.set(".kxm/models/grok-grok-4-7.yaml", {
18832
18832
  schema: "kxm.model.v2",
18833
- id: "grok-grok-4-6",
18833
+ id: "grok-grok-4-7",
18834
18834
  aliases: ["grok-default"],
18835
18835
  harness: "grok",
18836
- model: "grok-4.6",
18836
+ model: "grok-4.7",
18837
18837
  vendor: "xai",
18838
18838
  status: "admitted",
18839
18839
  permissions: ["edit"]
@@ -18854,7 +18854,7 @@ function coreTemplate(projectId, projectName, variant) {
18854
18854
  purpose: "writer",
18855
18855
  permission: "edit",
18856
18856
  description: "Primary implementation agent.",
18857
- roster: [{ route: "grok-grok-4-6", effort: "medium" }]
18857
+ roster: [{ route: "grok-grok-4-7", effort: "medium" }]
18858
18858
  });
18859
18859
  files.set(".kxm/roles/planner.yaml", {
18860
18860
  schema: "kxm.role.v2",
@@ -55403,7 +55403,7 @@ var DEFAULT_MODES_CONFIG = Object.freeze({
55403
55403
  baseTools: ["read", "edit", "write", "bash"],
55404
55404
  contextFiles: ["AGENTS.md"],
55405
55405
  thinkingLevel: "medium",
55406
- model: "grok/grok-4.6"
55406
+ model: "grok/grok-4.7"
55407
55407
  },
55408
55408
  planner: {
55409
55409
  description: "High-level architectural planning, scoping, and decomposition",
@@ -55424,7 +55424,7 @@ var DEFAULT_MODES_CONFIG = Object.freeze({
55424
55424
  baseTools: ["read", "bash"],
55425
55425
  contextFiles: ["docs/guides/browser-automation.md"],
55426
55426
  thinkingLevel: "medium",
55427
- model: "grok/grok-4.6"
55427
+ model: "grok/grok-4.7"
55428
55428
  }
55429
55429
  },
55430
55430
  domains: {
@@ -55501,7 +55501,7 @@ function resolveActiveMode(config, majorModeName = "coder", domainNames = []) {
55501
55501
  contextFiles: Array.from(contextFiles),
55502
55502
  promptSnippets,
55503
55503
  thinkingLevel: major.thinkingLevel,
55504
- model: major.model || "grok/grok-4.6"
55504
+ model: major.model || "grok/grok-4.7"
55505
55505
  };
55506
55506
  }
55507
55507
  var CATALOG_DATE_RE = /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/;
@@ -55592,7 +55592,7 @@ function calculatePromptFootprint(resolved, projectRoot = process.cwd(), catalog
55592
55592
  catalogDateForStatus(loaded2, catalog, projectRoot)
55593
55593
  );
55594
55594
  const cat = loaded2.catalog;
55595
- const rawModel = resolved.model || "grok/grok-4.6";
55595
+ const rawModel = resolved.model || "grok/grok-4.7";
55596
55596
  const [prov, mod] = rawModel.includes("/") ? rawModel.split("/", 2) : [void 0, rawModel];
55597
55597
  const inputCost = cat ? calculateModelCost(cat, {
55598
55598
  model: mod || rawModel,
@@ -55621,7 +55621,7 @@ function calculatePromptFootprint(resolved, projectRoot = process.cwd(), catalog
55621
55621
  return {
55622
55622
  majorMode: resolved.majorMode,
55623
55623
  enabledDomains: resolved.enabledDomains,
55624
- model: resolved.model || "grok/grok-4.6",
55624
+ model: resolved.model || "grok/grok-4.7",
55625
55625
  breakdown,
55626
55626
  totalChars,
55627
55627
  totalTokens,
@@ -58146,7 +58146,7 @@ async function cmdRoutingReport(runtime, options) {
58146
58146
  }
58147
58147
  async function cmdRoutingBenchmark(runtime, options) {
58148
58148
  const task = options.task || "Deterministic benchmark task";
58149
- const armsStr = options.arms || "grok/grok-4.6,claude/fable,pi/qwen3.7-plus";
58149
+ const armsStr = options.arms || "grok/grok-4.7,claude/fable,pi/qwen3.7-plus";
58150
58150
  const armsList = armsStr.split(",").map((s) => s.trim()).filter(Boolean);
58151
58151
  const runsCount = Math.max(1, parseInt(options.runs || "1", 10) || 1);
58152
58152
  const arms = armsList.map((arm) => {
@@ -25462,7 +25462,7 @@ function sessionTokenFixHint(policy) {
25462
25462
  }
25463
25463
 
25464
25464
  // plugins/kxm/src/mcp-server.ts
25465
- var VERSION = "0.7.200";
25465
+ var VERSION = "0.7.201";
25466
25466
  var CONFIGURE_PLUGIN = "/plugin configure kxm@kxm";
25467
25467
  var inbox = /* @__PURE__ */ new Map();
25468
25468
  var notifiedInbox = /* @__PURE__ */ new Set();
@@ -15547,7 +15547,7 @@ var ROUTE_RENAMES = Object.freeze([
15547
15547
  ["fable-claude", "claude-fable"],
15548
15548
  // sol-codex stays the GPT-5.6 route. codex-gpt-6-1-sol is a separate route.
15549
15549
  ["sol-codex", "codex-gpt-5-6-sol"],
15550
- ["grok-default", "grok-grok-4-6"],
15550
+ ["grok-default", "grok-grok-4-7"],
15551
15551
  ["fable-default", "claude-fable"]
15552
15552
  ]);
15553
15553
  var AGENT_RENAMES = Object.freeze([
@@ -15972,16 +15972,16 @@ function coreTemplate(projectId, projectName, variant) {
15972
15972
  }
15973
15973
  files.set(".kxm/routes.yaml", {
15974
15974
  schema: "kxm.routes.v2",
15975
- updatedAt: "2026-09-27T00:00:00.000Z",
15976
- admitted: ["anthropic/fable", "xai/grok-4.6"],
15975
+ updatedAt: "2026-10-21T00:00:00.000Z",
15976
+ admitted: ["anthropic/fable", "xai/grok-4.7"],
15977
15977
  disabled: []
15978
15978
  });
15979
- files.set(".kxm/models/grok-grok-4-6.yaml", {
15979
+ files.set(".kxm/models/grok-grok-4-7.yaml", {
15980
15980
  schema: "kxm.model.v2",
15981
- id: "grok-grok-4-6",
15981
+ id: "grok-grok-4-7",
15982
15982
  aliases: ["grok-default"],
15983
15983
  harness: "grok",
15984
- model: "grok-4.6",
15984
+ model: "grok-4.7",
15985
15985
  vendor: "xai",
15986
15986
  status: "admitted",
15987
15987
  permissions: ["edit"]
@@ -16002,7 +16002,7 @@ function coreTemplate(projectId, projectName, variant) {
16002
16002
  purpose: "writer",
16003
16003
  permission: "edit",
16004
16004
  description: "Primary implementation agent.",
16005
- roster: [{ route: "grok-grok-4-6", effort: "medium" }]
16005
+ roster: [{ route: "grok-grok-4-7", effort: "medium" }]
16006
16006
  });
16007
16007
  files.set(".kxm/roles/planner.yaml", {
16008
16008
  schema: "kxm.role.v2",
@@ -15520,7 +15520,7 @@ var ROUTE_RENAMES = Object.freeze([
15520
15520
  ["fable-claude", "claude-fable"],
15521
15521
  // sol-codex stays the GPT-5.6 route. codex-gpt-6-1-sol is a separate route.
15522
15522
  ["sol-codex", "codex-gpt-5-6-sol"],
15523
- ["grok-default", "grok-grok-4-6"],
15523
+ ["grok-default", "grok-grok-4-7"],
15524
15524
  ["fable-default", "claude-fable"]
15525
15525
  ]);
15526
15526
  var AGENT_RENAMES = Object.freeze([
@@ -15945,16 +15945,16 @@ function coreTemplate(projectId, projectName, variant) {
15945
15945
  }
15946
15946
  files.set(".kxm/routes.yaml", {
15947
15947
  schema: "kxm.routes.v2",
15948
- updatedAt: "2026-09-27T00:00:00.000Z",
15949
- admitted: ["anthropic/fable", "xai/grok-4.6"],
15948
+ updatedAt: "2026-10-21T00:00:00.000Z",
15949
+ admitted: ["anthropic/fable", "xai/grok-4.7"],
15950
15950
  disabled: []
15951
15951
  });
15952
- files.set(".kxm/models/grok-grok-4-6.yaml", {
15952
+ files.set(".kxm/models/grok-grok-4-7.yaml", {
15953
15953
  schema: "kxm.model.v2",
15954
- id: "grok-grok-4-6",
15954
+ id: "grok-grok-4-7",
15955
15955
  aliases: ["grok-default"],
15956
15956
  harness: "grok",
15957
- model: "grok-4.6",
15957
+ model: "grok-4.7",
15958
15958
  vendor: "xai",
15959
15959
  status: "admitted",
15960
15960
  permissions: ["edit"]
@@ -15975,7 +15975,7 @@ function coreTemplate(projectId, projectName, variant) {
15975
15975
  purpose: "writer",
15976
15976
  permission: "edit",
15977
15977
  description: "Primary implementation agent.",
15978
- roster: [{ route: "grok-grok-4-6", effort: "medium" }]
15978
+ roster: [{ route: "grok-grok-4-7", effort: "medium" }]
15979
15979
  });
15980
15980
  files.set(".kxm/roles/planner.yaml", {
15981
15981
  schema: "kxm.role.v2",
@@ -34555,7 +34555,7 @@ var PiSession = class {
34555
34555
  };
34556
34556
  function createKxmPiProducer(options = {}) {
34557
34557
  const sessions = /* @__PURE__ */ new Map();
34558
- const defaultModel = options.defaultModel ?? "xai/grok-4.6";
34558
+ const defaultModel = options.defaultModel ?? "xai/grok-4.7";
34559
34559
  const defaultProvider = options.defaultProvider ?? "xai";
34560
34560
  function parseModelString(spec) {
34561
34561
  const trimmed = spec.trim();
@@ -35776,7 +35776,7 @@ var DEFAULT_MODES_CONFIG = Object.freeze({
35776
35776
  baseTools: ["read", "edit", "write", "bash"],
35777
35777
  contextFiles: ["AGENTS.md"],
35778
35778
  thinkingLevel: "medium",
35779
- model: "grok/grok-4.6"
35779
+ model: "grok/grok-4.7"
35780
35780
  },
35781
35781
  planner: {
35782
35782
  description: "High-level architectural planning, scoping, and decomposition",
@@ -35797,7 +35797,7 @@ var DEFAULT_MODES_CONFIG = Object.freeze({
35797
35797
  baseTools: ["read", "bash"],
35798
35798
  contextFiles: ["docs/guides/browser-automation.md"],
35799
35799
  thinkingLevel: "medium",
35800
- model: "grok/grok-4.6"
35800
+ model: "grok/grok-4.7"
35801
35801
  }
35802
35802
  },
35803
35803
  domains: {
@@ -35874,7 +35874,7 @@ function resolveActiveMode(config, majorModeName = "coder", domainNames = []) {
35874
35874
  contextFiles: Array.from(contextFiles),
35875
35875
  promptSnippets,
35876
35876
  thinkingLevel: major.thinkingLevel,
35877
- model: major.model || "grok/grok-4.6"
35877
+ model: major.model || "grok/grok-4.7"
35878
35878
  };
35879
35879
  }
35880
35880
  var CATALOG_DATE_RE = /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/;
@@ -35965,7 +35965,7 @@ function calculatePromptFootprint(resolved, projectRoot = process.cwd(), catalog
35965
35965
  catalogDateForStatus(loaded, catalog, projectRoot)
35966
35966
  );
35967
35967
  const cat = loaded.catalog;
35968
- const rawModel = resolved.model || "grok/grok-4.6";
35968
+ const rawModel = resolved.model || "grok/grok-4.7";
35969
35969
  const [prov, mod] = rawModel.includes("/") ? rawModel.split("/", 2) : [void 0, rawModel];
35970
35970
  const inputCost = cat ? calculateModelCost(cat, {
35971
35971
  model: mod || rawModel,
@@ -35994,7 +35994,7 @@ function calculatePromptFootprint(resolved, projectRoot = process.cwd(), catalog
35994
35994
  return {
35995
35995
  majorMode: resolved.majorMode,
35996
35996
  enabledDomains: resolved.enabledDomains,
35997
- model: resolved.model || "grok/grok-4.6",
35997
+ model: resolved.model || "grok/grok-4.7",
35998
35998
  breakdown,
35999
35999
  totalChars,
36000
36000
  totalTokens,
@@ -36451,7 +36451,7 @@ var SUBAGENT_TYPES = Object.freeze([
36451
36451
  "Auditor"
36452
36452
  ]);
36453
36453
  var DEFAULT_SUBAGENT_MODELS = Object.freeze({
36454
- general: "grok/grok-4.6",
36454
+ general: "grok/grok-4.7",
36455
36455
  Explore: "openrouter/qwen/qwen3.7-plus",
36456
36456
  Plan: "claude/fable",
36457
36457
  Reviewer: "openai/gpt-5.6-sol",
@@ -36491,7 +36491,7 @@ var SubagentManager = class {
36491
36491
  throw new Error('Subagent "description" is required.');
36492
36492
  }
36493
36493
  const type = params.type ?? "general";
36494
- const model = params.model ?? DEFAULT_SUBAGENT_MODELS[type] ?? "grok/grok-4.6";
36494
+ const model = params.model ?? DEFAULT_SUBAGENT_MODELS[type] ?? "grok/grok-4.7";
36495
36495
  const thinking = params.thinking ?? "low";
36496
36496
  const allowedTools = narrowSubagentTools(params.allowed_tools, params.parent_tools);
36497
36497
  const id = `ag_${randomUUID5().replaceAll("-", "").slice(0, 10)}`;
@@ -15012,7 +15012,7 @@ var ROUTE_RENAMES = Object.freeze([
15012
15012
  ["fable-claude", "claude-fable"],
15013
15013
  // sol-codex stays the GPT-5.6 route. codex-gpt-6-1-sol is a separate route.
15014
15014
  ["sol-codex", "codex-gpt-5-6-sol"],
15015
- ["grok-default", "grok-grok-4-6"],
15015
+ ["grok-default", "grok-grok-4-7"],
15016
15016
  ["fable-default", "claude-fable"]
15017
15017
  ]);
15018
15018
  var AGENT_RENAMES = Object.freeze([
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-plugin",
3
- "version": "0.7.200",
3
+ "version": "0.7.201",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "engines": {
@@ -1071,7 +1071,7 @@ export async function cmdRoutingBenchmark(
1071
1071
  options: { task?: string | undefined; arms?: string | undefined; runs?: string | undefined },
1072
1072
  ): Promise<number> {
1073
1073
  const task = options.task || "Deterministic benchmark task";
1074
- const armsStr = options.arms || "grok/grok-4.6,claude/fable,pi/qwen3.7-plus";
1074
+ const armsStr = options.arms || "grok/grok-4.7,claude/fable,pi/qwen3.7-plus";
1075
1075
  const armsList = armsStr.split(",").map((s) => s.trim()).filter(Boolean);
1076
1076
  const runsCount = Math.max(1, parseInt(options.runs || "1", 10) || 1);
1077
1077
 
@@ -11,7 +11,7 @@ import { deliverInboxNotification } from "./inbox.ts";
11
11
  import type { HubEvent, MessageRecord } from "./protocol.ts";
12
12
  import { sessionTokenFixHint } from "./session-token-hint.ts";
13
13
 
14
- const VERSION = "0.7.200";
14
+ const VERSION = "0.7.201";
15
15
  const CONFIGURE_PLUGIN = "/plugin configure kxm@kxm";
16
16
  const inbox = new Map<string, MessageRecord>();
17
17
  const notifiedInbox = new Set<string>();
@@ -80,7 +80,7 @@ export const DEFAULT_MODES_CONFIG: ModesConfig = Object.freeze({
80
80
  baseTools: ["read", "edit", "write", "bash"],
81
81
  contextFiles: ["AGENTS.md"],
82
82
  thinkingLevel: "medium" as const,
83
- model: "grok/grok-4.6",
83
+ model: "grok/grok-4.7",
84
84
  },
85
85
  planner: {
86
86
  description: "High-level architectural planning, scoping, and decomposition",
@@ -101,7 +101,7 @@ export const DEFAULT_MODES_CONFIG: ModesConfig = Object.freeze({
101
101
  baseTools: ["read", "bash"],
102
102
  contextFiles: ["docs/guides/browser-automation.md"],
103
103
  thinkingLevel: "medium" as const,
104
- model: "grok/grok-4.6",
104
+ model: "grok/grok-4.7",
105
105
  },
106
106
  },
107
107
  domains: {
@@ -201,7 +201,7 @@ export function resolveActiveMode(
201
201
  contextFiles: Array.from(contextFiles),
202
202
  promptSnippets,
203
203
  thinkingLevel: major.thinkingLevel,
204
- model: major.model || "grok/grok-4.6",
204
+ model: major.model || "grok/grok-4.7",
205
205
  };
206
206
  }
207
207
 
@@ -330,7 +330,7 @@ export function calculatePromptFootprint(
330
330
  catalogDateForStatus(loaded, catalog, projectRoot),
331
331
  );
332
332
  const cat = loaded.catalog;
333
- const rawModel = resolved.model || "grok/grok-4.6";
333
+ const rawModel = resolved.model || "grok/grok-4.7";
334
334
  const [prov, mod] = rawModel.includes("/") ? rawModel.split("/", 2) : [undefined, rawModel];
335
335
 
336
336
  const inputCost = cat
@@ -369,7 +369,7 @@ export function calculatePromptFootprint(
369
369
  return {
370
370
  majorMode: resolved.majorMode,
371
371
  enabledDomains: resolved.enabledDomains,
372
- model: resolved.model || "grok/grok-4.6",
372
+ model: resolved.model || "grok/grok-4.7",
373
373
  breakdown,
374
374
  totalChars,
375
375
  totalTokens,
@@ -448,7 +448,7 @@ export interface KxmPiProducer extends KxmProducer {
448
448
 
449
449
  export function createKxmPiProducer(options: KxmPiProducerOptions = {}): KxmPiProducer {
450
450
  const sessions = new Map<string, PiSession>();
451
- const defaultModel = options.defaultModel ?? "xai/grok-4.6";
451
+ const defaultModel = options.defaultModel ?? "xai/grok-4.7";
452
452
  const defaultProvider = options.defaultProvider ?? "xai";
453
453
 
454
454
  function parseModelString(spec: string): { provider: string; model: string } {
@@ -76,7 +76,7 @@ export const SUBAGENT_TYPES: readonly SubagentType[] = Object.freeze([
76
76
  ]);
77
77
 
78
78
  export const DEFAULT_SUBAGENT_MODELS: Readonly<Record<SubagentType, string>> = Object.freeze({
79
- general: "grok/grok-4.6",
79
+ general: "grok/grok-4.7",
80
80
  Explore: "openrouter/qwen/qwen3.7-plus",
81
81
  Plan: "claude/fable",
82
82
  Reviewer: "openai/gpt-5.6-sol",
@@ -135,7 +135,7 @@ export class SubagentManager {
135
135
  }
136
136
 
137
137
  const type = params.type ?? "general";
138
- const model = params.model ?? DEFAULT_SUBAGENT_MODELS[type] ?? "grok/grok-4.6";
138
+ const model = params.model ?? DEFAULT_SUBAGENT_MODELS[type] ?? "grok/grok-4.7";
139
139
  const thinking = params.thinking ?? "low";
140
140
  const allowedTools = narrowSubagentTools(params.allowed_tools, params.parent_tools);
141
141
  const id = `ag_${randomUUID().replaceAll("-", "").slice(0, 10)}`;
@@ -215,16 +215,16 @@ function coreTemplate(projectId: string, projectName: string, variant: KxmTempla
215
215
  // remain aliases so an existing --route flag still resolves.
216
216
  files.set(".kxm/routes.yaml", {
217
217
  schema: "kxm.routes.v2",
218
- updatedAt: "2026-09-27T00:00:00.000Z",
219
- admitted: ["anthropic/fable", "xai/grok-4.6"],
218
+ updatedAt: "2026-10-21T00:00:00.000Z",
219
+ admitted: ["anthropic/fable", "xai/grok-4.7"],
220
220
  disabled: [],
221
221
  });
222
- files.set(".kxm/models/grok-grok-4-6.yaml", {
222
+ files.set(".kxm/models/grok-grok-4-7.yaml", {
223
223
  schema: "kxm.model.v2",
224
- id: "grok-grok-4-6",
224
+ id: "grok-grok-4-7",
225
225
  aliases: ["grok-default"],
226
226
  harness: "grok",
227
- model: "grok-4.6",
227
+ model: "grok-4.7",
228
228
  vendor: "xai",
229
229
  status: "admitted",
230
230
  permissions: ["edit"],
@@ -245,7 +245,7 @@ function coreTemplate(projectId: string, projectName: string, variant: KxmTempla
245
245
  purpose: "writer",
246
246
  permission: "edit",
247
247
  description: "Primary implementation agent.",
248
- roster: [{ route: "grok-grok-4-6", effort: "medium" }],
248
+ roster: [{ route: "grok-grok-4-7", effort: "medium" }],
249
249
  });
250
250
  files.set(".kxm/roles/planner.yaml", {
251
251
  schema: "kxm.role.v2",
@@ -38,7 +38,7 @@ export const ROUTE_RENAMES = Object.freeze([
38
38
  ["fable-claude", "claude-fable"],
39
39
  // sol-codex stays the GPT-5.6 route. codex-gpt-6-1-sol is a separate route.
40
40
  ["sol-codex", "codex-gpt-5-6-sol"],
41
- ["grok-default", "grok-grok-4-6"],
41
+ ["grok-default", "grok-grok-4-7"],
42
42
  ["fable-default", "claude-fable"],
43
43
  ]);
44
44