mixdog 1.0.6 → 1.0.7

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.
Files changed (50) hide show
  1. package/README.md +158 -105
  2. package/package.json +11 -4
  3. package/src/defaults/skills/setup/references/actions.md +26 -6
  4. package/src/defaults/skills/setup/references/surfaces.md +8 -3
  5. package/src/runtime/agent/orchestrator/runtime-core/builtin-features.mjs +16 -7
  6. package/src/runtime/agent/orchestrator/runtime-core/config-helpers.mjs +6 -2
  7. package/src/runtime/agent/orchestrator/session/manager/session-record.mjs +0 -3
  8. package/src/runtime/agent/orchestrator/session/store-summary-index.mjs +0 -2
  9. package/src/runtime/agent/orchestrator/session/store-summary-reader.mjs +24 -2
  10. package/src/runtime/agent/orchestrator/session/store-transcript-cache.mjs +25 -0
  11. package/src/runtime/agent/orchestrator/session/store-transcript-worker.mjs +14 -1
  12. package/src/runtime/agent/orchestrator/tools/builtin/runtime-capabilities.mjs +3 -45
  13. package/src/runtime/channels/lib/config.mjs +0 -1
  14. package/src/runtime/channels/lib/owned-runtime/config-reload.mjs +1 -1
  15. package/src/runtime/channels/lib/scheduler.mjs +15 -56
  16. package/src/runtime/channels/lib/worker-main.mjs +2 -9
  17. package/src/runtime/shared/config.mjs +66 -1
  18. package/src/runtime/shared/llm/usage-ledger-quota.mjs +13 -2
  19. package/src/runtime/shared/path-executable.mjs +58 -0
  20. package/src/session-runtime/boot/apis.mjs +6 -2
  21. package/src/session-runtime/boot/begin.mjs +0 -2
  22. package/src/session-runtime/boot/providers.mjs +3 -0
  23. package/src/session-runtime/boot/tools.mjs +0 -1
  24. package/src/session-runtime/config-lifecycle.mjs +11 -0
  25. package/src/session-runtime/internal-tool-executor.mjs +0 -2
  26. package/src/session-runtime/runtime-feature-gates.mjs +2 -3
  27. package/src/session-runtime/schedule-session-run.mjs +0 -1
  28. package/src/session-runtime/services/channel-admin.mjs +8 -26
  29. package/src/session-runtime/settings-compaction-api.mjs +5 -1
  30. package/src/session-runtime/settings-system-api.mjs +2 -20
  31. package/src/session-runtime/setup-tool/executor.mjs +61 -3
  32. package/src/session-runtime/setup-tool/extended-actions.mjs +31 -6
  33. package/src/session-runtime/setup-tool/settings-contract.mjs +27 -3
  34. package/src/session-runtime/setup-tool/tool-defs.mjs +35 -5
  35. package/src/session-runtime/webhook-session-run.mjs +0 -2
  36. package/src/session-runtime/workflow-agents-api/agent-editor.mjs +13 -3
  37. package/src/standalone/daemon-stored-session-views.mjs +4 -0
  38. package/src/standalone/session-protocol.mjs +0 -1
  39. package/src/standalone/session-service/session-calls/session-views.mjs +10 -4
  40. package/src/standalone/session-service/stored-reader.mjs +20 -2
  41. package/src/standalone/session-service/viewers.mjs +3 -3
  42. package/src/standalone/session-service.mjs +3 -1
  43. package/src/tui/App.jsx +6 -1
  44. package/src/tui/app/create-app-pickers.mjs +1 -0
  45. package/src/tui/app/doctor.mjs +6 -14
  46. package/src/tui/app/maintenance-pickers/auto-clear-picker.mjs +8 -3
  47. package/src/tui/app/settings-picker/settings-rows.mjs +5 -1
  48. package/src/tui/app/use-ui-open-request.mjs +13 -3
  49. package/src/tui/dist/index.mjs +41 -9
  50. package/src/tui/session/session-api/settings.mjs +0 -6
package/README.md CHANGED
@@ -1,8 +1,12 @@
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/tribgames/mixdog/main/apps/desktop/build/mixdog.png" alt="" width="96">
3
+ </p>
4
+
1
5
  <h1 align="center">Mixdog</h1>
2
6
 
3
7
  <p align="center">
4
- <b>Same model. Same score. 63% fewer tokens.</b><br>
5
- Free, open-source coding agent for Windows — benchmarked against Codex CLI on Terminal-Bench 2.1.
8
+ <b>Same model. Same performance. 63% fewer tokens.</b><br>
9
+ Free, open-source desktop coding agent for Windows.
6
10
  </p>
7
11
 
8
12
  <p align="center">
@@ -12,38 +16,66 @@
12
16
  </p>
13
17
 
14
18
  <p align="center">
15
- <sub>The installer is unsigned, so Windows SmartScreen may show a warning.</sub>
19
+ <a href="https://github.com/tribgames/mixdog/releases/latest"><img src="https://img.shields.io/github/v/release/tribgames/mixdog?label=release" alt="Latest release"></a>
20
+ <a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-blue" alt="Apache-2.0 license"></a>
21
+ <img src="https://img.shields.io/badge/platform-Windows%20x64-0078D4" alt="Windows x64">
16
22
  </p>
17
23
 
18
24
  <p align="center">
19
- <a href="https://www.npmjs.com/package/mixdog"><img src="https://img.shields.io/npm/v/mixdog" alt="npm"></a>
20
- <img src="https://img.shields.io/badge/license-Apache--2.0-blue" alt="license">
21
- <img src="https://img.shields.io/badge/node-%5E22.19.0%20%7C%7C%20%3E%3D24.0.0-brightgreen" alt="Node.js ^22.19.0 || >=24.0.0">
25
+ <sub>The installer is not code-signed yet. If Windows SmartScreen appears,
26
+ choose <b>More info → Run anyway</b>.</sub>
22
27
  </p>
23
28
 
24
29
  <p align="center">
25
30
  <img src="https://raw.githubusercontent.com/tribgames/mixdog/main/docs/assets/desktop.png" alt="Mixdog Desktop" width="860">
26
31
  </p>
27
32
 
28
- ## Same model. Same results. A fraction of the tokens.
29
-
30
- Terminal-Bench 2.1 — same model, same 89 tasks, same official verifier.
31
- Only the harness changes.
33
+ <a name="benchmarks"></a>
34
+ ## Same performance, 63% fewer tokens
32
35
 
33
- ### GPT-5.6 Sol xhigh — Mixdog vs Codex CLI (`k=5`, 445 trials each)
36
+ Mixdog and Codex CLI ran Terminal-Bench 2.1 on the same model, GPT-5.6 Sol
37
+ xhigh. Both passed the same share of tasks. Mixdog used 63% fewer tokens.
34
38
 
35
39
  | | Mixdog | Codex CLI | |
36
40
  | --- | --- | --- | --- |
37
41
  | **Total tokens** (incl. cached input) | **156.5M** | 421.4M | **63% fewer** |
38
- | Success rate | **86.5%** (385/445) | 86.1% (383/445) | +2 trials |
39
- | Pass@5 | **96.6%** | 95.5% | |
42
+ | Success rate | **86.5%** (385/445) | 86.1% (383/445) | matched |
40
43
  | Priced cost per trial | **$0.476** | $0.782 | 39% lower |
44
+ | Median first request | **4.7k** | 14.4k | 67% smaller |
41
45
  | Median final context | **18.5k** | 34.3k | 46% smaller |
42
46
  | Wall time per trial | **415s** | 437s | matched |
43
47
 
44
48
  ![Terminal-Bench 2.1: Mixdog with GPT-5.6 Sol xhigh versus Codex CLI](https://raw.githubusercontent.com/tribgames/mixdog/main/benchmarks/terminal-bench-2.1/tb21-sol-vs-codex.svg)
45
49
 
46
- ### Claude Opus 5 — Mixdog vs Claude Code (`k=1`, 89 trials each)
50
+ - **The official leaderboard protocol.** All 89 tasks, five trials each — 445
51
+ trials per side — with unmodified task timeouts and resources, scored by the
52
+ official Harbor verifier.
53
+ - **Same conditions on both sides.** Same model and reasoning level, the same
54
+ kind of subscription sign-in, fast mode off, no retries of task failures or
55
+ agent timeouts.
56
+ - **Everything is published.** Verdicts, verifier output, and usage snapshots
57
+ for both sides, plus the scripts that recompute every number, are in
58
+ [`benchmarks/terminal-bench-2.1/`](benchmarks/terminal-bench-2.1/).
59
+
60
+ ### Across the 89 tasks
61
+
62
+ Mixdog used fewer tokens on 87 of the 89 tasks. The median task used 68% fewer.
63
+
64
+ | Token change | Tasks |
65
+ | --- | --- |
66
+ | 75% fewer or better | 24 |
67
+ | 50–75% fewer | 42 |
68
+ | 25–50% fewer | 19 |
69
+ | 0–25% fewer | 2 |
70
+ | More tokens | 2 |
71
+
72
+ Pass counts were equal on 60 tasks; Mixdog passed more trials on 14 and Codex
73
+ CLI on 15. Mixdog used more tokens on `mteb-leaderboard` (6.8×) and
74
+ `crack-7z-hash` (1.4×). Every task is listed in
75
+ [`results.md`](benchmarks/terminal-bench-2.1/results.md).
76
+
77
+ <details>
78
+ <summary><b>Claude Opus 5 — Mixdog vs Claude Code</b> (single pass, 89 trials each)</summary>
47
79
 
48
80
  | | Mixdog | Claude Code | |
49
81
  | --- | --- | --- | --- |
@@ -54,48 +86,114 @@ Only the harness changes.
54
86
 
55
87
  ![Terminal-Bench 2.1: Mixdog with Claude Opus 5 versus Claude Code](https://raw.githubusercontent.com/tribgames/mixdog/main/benchmarks/terminal-bench-2.1/tb21-opus-vs-claude-code.svg)
56
88
 
57
- <sub>Official Harbor verifier, fast mode off, no retries of task failures or
58
- agent timeouts. Mixdog runs are single-model, single-session — no sub-agents
59
- or helper models. Cost values both sides at the same API list rates, not
60
- subscription charges. Results measure the pinned source revision. Raw
61
- verdicts, verifier output, usage snapshots, and the scripts that recompute
62
- every number are in [`benchmarks/terminal-bench-2.1/`](benchmarks/terminal-bench-2.1/).</sub>
63
-
64
- ## Why Mixdog
65
-
66
- - **All your models in one app.** Use supported subscription accounts, API
67
- keys, or the built-in Local Provider side by side.
68
- - **Agents by role.** Assign a different model to each agent role and combine
69
- them through orchestration — from **Solo** (the lead does the work) up to
70
- **Swarm** (maximum delegation). Run separate sessions in parallel, too.
71
- - **Easy to set up.** Onboarding walks you through connecting providers,
72
- choosing models, and setting up workflows. Workflows and agents are
73
- Markdown packs (`WORKFLOW.md`, `AGENT.md`) with visual editors in the app.
74
- - **Lean context.** Scoped tools, provider-aware caching, and structured
75
- compaction keep prompts small. Search past work and keep project memory
76
- without loading the whole archive. See
77
- [Context efficiency](docs/context-efficiency.md).
78
- - **See where tokens go.** Usage stats by provider and model — input, output,
79
- cache hits, and cost — plus supported providers' quota windows and resets.
89
+ One trial per task, so per-task differences sit within run-to-run variance.
90
+
91
+ </details>
92
+
93
+ <sub>Codex CLI 0.151.0. Mixdog ran single-model, single-session — no
94
+ sub-agents or helper models. Cost values both sides at the same API list
95
+ rates, not subscription charges. Results measure the pinned source revision.
96
+ The leaderboard is not accepting community submissions, so the runs are
97
+ published here instead.</sub>
98
+
99
+ ## How it uses fewer tokens
100
+
101
+ - **A light start.** System instructions and tool descriptions are kept to
102
+ what the model needs.
103
+ *67% smaller first request — 4.7k tokens against 14.4k.*
104
+ - **Fewer round trips.** The agent picks the right tool first and runs
105
+ independent actions in one batch.
106
+ *33% fewer model requests — a median of 10 per trial against 16.*
107
+ - **Smaller requests.** Tools return only the part that was asked for, and
108
+ 95% of terminal output is filtered before it reaches the model.
109
+ *46% less input per request — 24.3k tokens against 44.9k.*
110
+ - **Shorter output.** Less filler and repetition in replies.
111
+ *8% fewer output tokens.*
112
+
113
+ The benchmark ran one model in one session. In everyday use, more applies on
114
+ top of that:
115
+
116
+ - **Auto-clear.** After a long break, the conversation is compacted before
117
+ work resumes.
118
+ - **Light compaction.** Long sessions continue from a structured handoff
119
+ instead of the full history.
120
+ - **Database memory.** Past work is stored and searched, so the prompt does
121
+ not grow with the archive.
122
+ - **Code graph.** Query a project's structure instead of reading whole files.
123
+ - **Orchestration.** Hand routine work to cheaper models and keep the
124
+ expensive one for the steps that need it.
125
+
126
+ See [Context efficiency](docs/context-efficiency.md) for how each layer works.
127
+
128
+ ## A model for each job
129
+
130
+ Not every step needs your most expensive model.
131
+
132
+ - **Mix models by role.** Let a strong model lead and plan while cheaper ones
133
+ search, edit, and review.
134
+ - **Dial delegation from Solo to Swarm.** The lead can do the work itself or
135
+ coordinate a team of agents working in parallel.
136
+ - **Workflows you can read.** Workflows and agents are plain Markdown
137
+ (`WORKFLOW.md`, `AGENT.md`) with visual editors in the app.
138
+ - **Every account in one place.** Claude, ChatGPT, and Grok subscriptions, API
139
+ keys, and local models side by side.
140
+ - **Run models on your own GPU.** The built-in Local Provider downloads and
141
+ runs models inside the app.
142
+ - **Know what it costs.** Usage by provider and model — input, output, cache
143
+ hits, and cost — plus quota windows and resets.
144
+
145
+ ## Everything in one window
146
+
147
+ - **A full workspace.** Tabs and split panes, Monaco editor, terminals, file
148
+ explorer, and language servers that start when you open a file.
149
+ - **Git and GitHub built in.** Review changes, commit, and handle pull
150
+ requests, issues, Actions, and releases without leaving the app.
151
+ - **Code that stays clean.** The code graph maps a project's structure, and
152
+ Code Tidy formats, lints, and applies structural fixes.
153
+ - **Memory that lasts.** Mixdog remembers what matters across sessions and
154
+ searches past work on demand.
155
+ - **Extend it.** Add skills, MCP servers, and plugins from one Extensions view.
156
+
157
+ ## It keeps working when you step away
158
+
159
+ - **Goals.** Set a Goal and the session keeps working toward it — pause and
160
+ resume whenever you like.
161
+ - **Schedules and webhooks.** Run a task on a timer or whenever a URL is
162
+ called.
163
+ - **Your phone is the remote.** Scan a QR code to continue the same live
164
+ session from your phone, end-to-end encrypted, with a notification when the
165
+ task finishes.
80
166
 
81
167
  ## Beyond code
82
168
 
83
- - **Workspace** — tabs and split panes, Monaco editor, Git and GitHub,
84
- terminals, file explorer, code graph, and Code Tidy in one window.
85
- - **Browser Use** — operate signed-in Chromium pages, with Chrome profile
86
- import on Windows.
87
- - **Computer Use (Windows)** — operate native apps with guarded input and an
169
+ - **Browser Use.** Operate real, signed-in web pages, with Chrome profile
170
+ import.
171
+ - **Computer Use.** Operate native Windows apps with guarded input and an
88
172
  on-screen Stop control.
89
- - **Documents** — Word, Excel, PowerPoint, and PDF with rendered previews.
90
- - **Image and video Studio** — generate and edit with a local gallery.
91
- - **Continue anywhere** — pick up the same live session from Desktop, the
92
- terminal, or a paired browser on your computer or phone over end-to-end
93
- encryption.
173
+ - **Documents.** Create and edit Word, Excel, PowerPoint, and PDF with
174
+ rendered previews.
175
+ - **Image and video Studio.** Generate and edit with a local gallery.
94
176
 
95
177
  Browser Use and Computer Use are opt-in and ask for approval before their
96
- first live call in each interactive session.
178
+ first live call in each session.
179
+
180
+ ## Get started
181
+
182
+ [Download the installer](https://github.com/tribgames/mixdog/releases/latest/download/mixdog-desktop-win-x64.exe)
183
+ and sign in. No config files, no YAML, no terminal.
184
+
185
+ - **One sign-in and you are working.** Use the ChatGPT, Claude, or Grok
186
+ subscription you already pay for, or paste an API key. Mixdog picks the
187
+ model for you.
188
+ - **Advanced setups, one switch each.** A team of agents, a model per role,
189
+ long-term memory, phone access — each is a toggle, not a config file.
190
+ - **You won't get lost.** A short tutorial gets you set up in five quick
191
+ steps.
192
+ - **Batteries included.** Git, Memory, Browser, and Office tools ship with the
193
+ app. Turn on what you need.
97
194
 
98
- ## Providers
195
+ <details>
196
+ <summary><b>Supported providers</b></summary>
99
197
 
100
198
  - Anthropic API keys and Claude account OAuth
101
199
  - OpenAI API keys and ChatGPT/Codex account OAuth
@@ -108,40 +206,23 @@ first live call in each interactive session.
108
206
  Cursor and Antigravity (Gemini) OAuth are off by default under
109
207
  **Settings → Developer**; using them through OAuth risks account restrictions.
110
208
 
111
- ## Get started
112
-
113
- ### Desktop (Windows)
114
-
115
- [Download the installer](https://github.com/tribgames/mixdog/releases/latest/download/mixdog-desktop-win-x64.exe)
116
- and follow onboarding.
209
+ </details>
117
210
 
118
- ### CLI
211
+ <details>
212
+ <summary><b>Command line</b></summary>
119
213
 
120
- Requires Node.js 22.19+ (22.x) or 24+.
214
+ Mixdog also runs in the terminal. Requires Node.js 22.19+ (22.x) or 24+.
121
215
 
122
216
  ```bash
123
217
  npm install -g mixdog
124
218
  mixdog
125
219
  ```
126
220
 
127
- <details>
128
- <summary><b>CLI options and headless exec</b></summary>
129
-
130
- ```bash
131
- mixdog # start in the current project
132
- mixdog --provider anthropic-oauth --model claude-haiku-4-5-20251001
133
- mixdog --workflow default
134
- mixdog --readonly # read-only tools
135
- mixdog --remote # enable remote mode
136
- mixdog --onboarding # run onboarding again
137
- ```
138
-
139
221
  `mixdog exec` runs one non-interactive, single-model session without personal
140
222
  memory, prior sessions, skills, MCP servers, or plugins:
141
223
 
142
224
  ```bash
143
225
  mixdog exec --provider openai-oauth --model gpt-5.6-sol --effort xhigh "fix the failing test"
144
- mixdog exec --provider openai-oauth --model gpt-5.6-sol --json "review the current diff"
145
226
  ```
146
227
 
147
228
  Web search is off by default (`--web-search` enables it). This does not block
@@ -151,50 +232,22 @@ Run `mixdog --help` for the full reference.
151
232
 
152
233
  </details>
153
234
 
154
- <details>
155
- <summary><b>TUI commands</b></summary>
156
-
157
- ```text
158
- /clear start a fresh chat
159
- /project switch the current project
160
- /resume resume a saved chat
161
- /inherit carry this conversation into a new session on the current model
162
- /compact compact older conversation context
163
- /goal start, inspect, pause, or resume a durable session Goal
164
- /autoclear manage idle-time context compaction
165
- /context inspect the current context surface
166
- /usage show provider quota and balance
167
- /providers configure provider authentication
168
- /model choose the main provider and model
169
- /websearch choose the web search route
170
- /workflow choose the active workflow
171
- /agents inspect agents and model overrides
172
- /effort set reasoning effort
173
- /fast toggle supported model fast mode
174
- /OutputStyle choose the Lead response style
175
- /theme change the TUI color theme
176
- /memory inspect and edit core memory
177
- /mcp manage MCP servers and tools
178
- /skills choose a skill for the next request
179
- /plugins manage local plugin integrations
180
- /setting open runtime settings
181
- /profile set your title, development experience, and response language
182
- /update check for updates
183
- /doctor diagnose installation health
184
- /quit quit the TUI
185
- ```
186
-
187
- </details>
188
-
189
235
  ## Docs
190
236
 
191
237
  - [Context efficiency](docs/context-efficiency.md)
238
+ - [Benchmarks](benchmarks/terminal-bench-2.1/)
192
239
  - [Code Tidy](docs/code-tidy.md)
193
240
  - [Git & GitHub](docs/git-github-integration.md)
194
241
  - [Language servers](docs/language-servers.md)
195
242
  - [Office runtime](src/runtime/office/README.md)
196
243
  - [Development, configuration, and testing](docs/development.md)
197
244
 
245
+ ## Feedback
246
+
247
+ Found a bug or missing a feature?
248
+ [Open an issue](https://github.com/tribgames/mixdog/issues). If Mixdog saves
249
+ you tokens, a star helps others find it.
250
+
198
251
  ## License
199
252
 
200
253
  Mixdog is licensed under [Apache-2.0](LICENSE).
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "mixdog",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
4
4
  "private": false,
5
5
  "type": "module",
6
- "description": "Standalone mixdog coding-agent CLI/TUI workspace.",
6
+ "description": "Open-source coding agent that matches Codex on Terminal-Bench 2.1 with 63% fewer tokens.",
7
7
  "license": "Apache-2.0",
8
8
  "repository": {
9
9
  "type": "git",
@@ -14,10 +14,17 @@
14
14
  },
15
15
  "homepage": "https://github.com/tribgames/mixdog#readme",
16
16
  "keywords": [
17
+ "ai",
17
18
  "agent",
18
- "cli",
19
- "tui",
20
19
  "coding-agent",
20
+ "llm",
21
+ "claude",
22
+ "codex",
23
+ "openai",
24
+ "token-efficiency",
25
+ "terminal-bench",
26
+ "desktop",
27
+ "cli",
21
28
  "mcp"
22
29
  ],
23
30
  "bin": {
@@ -6,8 +6,8 @@ Read this when choosing a `setup` mutation.
6
6
 
7
7
  - `status` reads one domain: summary, model, agents, workflow, websearch,
8
8
  output-style, profile, autoclear, compaction, memory, features, local-provider, shell,
9
- providers, mcp, skills, plugins, update, onboarding, capabilities, desktop,
10
- appearance, projects, connection, schedules, or webhooks.
9
+ providers, mcp, skills, plugins, update, onboarding, capabilities, developer,
10
+ desktop, appearance, projects, connection, schedules, or webhooks.
11
11
  - `open` navigates to a supported UI surface. Read `surfaces.md` for targets and
12
12
  UI-only settings.
13
13
 
@@ -41,7 +41,9 @@ Read this when choosing a `setup` mutation.
41
41
  | Permanently delete confirmed, unchanged, unused model files | `delete_local_model` |
42
42
  | TUI system shell | `set_system_shell` |
43
43
  | Automatic updates | `set_auto_update` |
44
- | Remove stored provider authentication | `forget_provider_auth` |
44
+ | Remove stored provider authentication (one OAuth account at a time) | `forget_provider_auth` |
45
+ | Select, rename, reorder, or auto-switch OAuth accounts | `set_provider_account` |
46
+ | Developer options such as risk-gated OAuth providers | `set_developer_option` |
45
47
  | Add an MCP server | `add_mcp_server` |
46
48
  | Edit or rename an MCP server | `save_mcp_server` |
47
49
  | Remove an MCP server | `remove_mcp_server` |
@@ -53,6 +55,7 @@ Read this when choosing a `setup` mutation.
53
55
  | Refresh a plugin checkout | `update_plugin` |
54
56
  | Enable or disable a plugin | `set_plugin_enabled` |
55
57
  | Remove a plugin | `remove_plugin` |
58
+ | Install or reconfigure the MCP server a plugin ships | `enable_plugin_mcp` |
56
59
  | Available hosted models and their options; optionally native-search capable only | `list_models` |
57
60
  | Agent orchestration, independent of workflow instructions | `set_orchestration_mode` |
58
61
  | Safe MCP edit metadata, excluding raw connection/credential values | `get_mcp_server` |
@@ -65,7 +68,8 @@ Read this when choosing a `setup` mutation.
65
68
  | Enable/disable a schedule/webhook | `set_automation_enabled` |
66
69
  | Webhook listener enabled state, port, or domain | `set_webhook_config` |
67
70
  | Desktop keep-awake, run in background after window close, usage pin, or Computer observe-only state | `set_desktop_settings` |
68
- | Desktop theme, display language, side panels, or zoom | `set_appearance` |
71
+ | Desktop theme, display language, or side panels | `set_appearance` |
72
+ | Which activity rail items are pinned, in order (current list in `status desktop`) | `set_activity_rail_pins` |
69
73
  | Register a Project and optionally set its display alias | `save_project` |
70
74
  | Unregister a Project without deleting its files | `remove_project` |
71
75
  | Revoke one linked device by its client id from `status connection`; re-pairing restores access | `revoke_linked_device` |
@@ -85,6 +89,8 @@ workflow` before changing the corresponding domain.
85
89
  then supply only changed fields. Workflow/agent ids cannot be renamed through
86
90
  a save; change their display name instead. User skills may be renamed with
87
91
  `originalName` and `name`. Skill deletion is not exposed; disable it instead.
92
+ Built-in and plugin skills accept only `toolDependencies` edits (`null`
93
+ restores their declared dependencies).
88
94
  - Changing orchestration does not rewrite workflow instructions or agents.
89
95
 
90
96
  ## Providers and authentication
@@ -100,14 +106,26 @@ values through chat.
100
106
  and recovery. Its narrow status domain exposes installed models and progress;
101
107
  the detail dialog lists installed models rather than the download catalog.
102
108
  - Forgetting authentication is destructive and requires explicit approval.
109
+ It removes one OAuth account; a provider with several accounts requires
110
+ `accountId` from the account list in `status providers`.
111
+ - `set_provider_account` changes the selected account, automatic switching,
112
+ account order (every account id exactly once), or an account label. Sign-in
113
+ for a new account still happens in the Providers UI.
114
+ - `status developer` lists developer options. An option with a `warning` is
115
+ enabled only after the user explicitly accepts that warning, passed as
116
+ `riskAccepted:true`; never assume acceptance.
103
117
  - Usage sign-in is completed on the Usage or Providers surface.
104
118
 
105
119
  ## Profile, session, and Memory
106
120
 
107
121
  - Output style changes do not rewrite the current answer already in progress.
122
+ - Profile `language` and `experienceLevel` take ids listed by `status profile`;
123
+ unknown ids are rejected, and an empty `experienceLevel` clears it.
108
124
  - Auto-clear supports global/provider idle durations, `minContextPercent`,
109
- `reset`, and `resetProvider`. A reset and a duration are mutually exclusive;
110
- provider reset requires a provider.
125
+ `reset`, and `resetProvider`. A provider window overrides the global
126
+ duration; `provider: "default"` sets the fallback for providers without a
127
+ built-in window. A reset and a duration are mutually exclusive; provider
128
+ reset requires a provider.
111
129
  - Compaction supports `enabled` and either `mainBufferTokens` or
112
130
  `mainBufferPercent`. Changing representation replaces the previous budget.
113
131
  - If no supported action exposes a requested Memory interval, report it as
@@ -154,6 +172,8 @@ the Browser Use / Computer Use installed and enabled markers are read with
154
172
  - Environment/header maps are partial patches. Omitted keys are preserved;
155
173
  `null` explicitly removes one key, including a stored credential.
156
174
  - Plugin enablement moves its contributed skills and MCP integrations together.
175
+ - `enable_plugin_mcp` writes the MCP server a plugin ships and reconnects; it
176
+ fails for a plugin without an MCP script.
157
177
 
158
178
  ## Desktop, Projects, and automation
159
179
 
@@ -25,6 +25,9 @@ or requests a setting with no mutation action.
25
25
  | `usage` | Provider usage sign-in |
26
26
  | `doctor` | Runtime diagnostics |
27
27
  | `context` | Context and compaction |
28
+ | `developer` | Developer options (TUI: Developer picker) |
29
+ | `voice` | Voice built-in (TUI: Settings hub) |
30
+ | `connection` | Web-app pairing; Desktop only, the TUI shows guidance |
28
31
 
29
32
  An attached Desktop or TUI may navigate and return `opened:true`.
30
33
 
@@ -39,6 +42,7 @@ An attached Desktop or TUI may navigate and return `opened:true`.
39
42
  - Settings → Connection: web-app pairing and linked devices.
40
43
  - Settings → System: update, keep-awake, run in background after the window
41
44
  closes, and Doctor.
45
+ - Settings → Developer options: risk-gated OAuth providers.
42
46
  - Projects: Project registration, name, Project Memories, and Common Memory.
43
47
  - Workflows: workflow packs, Main and Web Search defaults, and agent editing.
44
48
  - Extensions → Plugin: Built-in cards and plugins.
@@ -50,13 +54,14 @@ the user to Desktop.
50
54
  ## Desktop-backed settings
51
55
 
52
56
  Setup can read and change Desktop appearance, keep-awake, run in background,
53
- usage pin, Computer observe-only, Browser/Computer/voice installation and
57
+ usage pin, activity rail pins, Computer observe-only, Browser/Computer/voice installation and
54
58
  toggles, Projects, and linked-device revocation through the attached
55
59
  Desktop. A receipt identifies `scope:desktop-host`; appearance is not applied
56
60
  to the paired browser. No Desktop claimant means no confirmed change.
57
61
 
58
- Computer observe-only has no Desktop settings control; setup is its only
59
- supported route. Usage pin is the pin toggle on the activity rail usage card.
62
+ Computer observe-only, background Memory cycles (`set_recap_enabled`), and
63
+ Browser/Computer first-use approval have no settings control in either app;
64
+ setup is their only supported route. Usage pin is the pin toggle on the activity rail usage card.
60
65
 
61
66
  Schedules/webhooks and workflow/agent/skill definitions use their runtime
62
67
  actions directly. These do not require clicking their Desktop rails.
@@ -20,6 +20,7 @@ import { featureEnvOverride, memoryToolsEnabled, moduleEnabled } from './config-
20
20
  import { readBridgeDiscovery } from '../../../bridge-discovery.mjs';
21
21
  import { HEADLESS_MODEL_TOOL_NAMES, HEADLESS_TOOL_PROFILE, normalizeToolProfile } from './tool-profile.mjs';
22
22
  import { DEFERRED_DEFAULT_LEAD_TOOLS } from './tool-catalog-data.mjs';
23
+ import { gitExecutablePresent } from '../../../shared/path-executable.mjs';
23
24
 
24
25
  // Browser Use / Computer Use have no install marker: the desktop app publishes
25
26
  // a loopback bridge discovery file while the feature is on. The same file
@@ -51,8 +52,13 @@ export function builtinFeatureActive(configLike, id) {
51
52
  (builtinInstalled(configLike, 'memory') && memoryToolsEnabled(configLike, true))
52
53
  );
53
54
  }
55
+ // The Git extension (GitHub tools, git-requiring skills) is install-gated;
56
+ // the local `git` command tool is not — see localGitToolsActive.
54
57
  if (id === 'git') {
55
- return localGitToolsActive(configLike);
58
+ return (
59
+ featureEnvOverride('MIXDOG_FEATURE_GIT') ??
60
+ (builtinInstalled(configLike, 'git') && moduleEnabled(configLike, 'git', true))
61
+ );
56
62
  }
57
63
  if (id === 'office') {
58
64
  return (
@@ -99,14 +105,14 @@ export function builtinFeatureActive(configLike, id) {
99
105
  * overrides), which the caller passes in. */
100
106
  export function featureDisallowedToolsFor(
101
107
  configLike,
102
- { browserAvailable = false, computerAvailable = false, toolProfile = 'interactive' } = {}
108
+ { browserAvailable = false, computerAvailable = false, toolProfile = 'interactive', gitAvailable } = {}
103
109
  ) {
104
110
  const browser = featureEnvOverride('MIXDOG_FEATURE_BROWSER') ?? browserAvailable === true;
105
111
  const computer = featureEnvOverride('MIXDOG_FEATURE_COMPUTER') ?? computerAvailable === true;
106
112
  const denied = [
107
113
  ...(builtinFeatureActive(configLike, 'webSearch') ? [] : ['web_search', 'web_fetch']),
108
114
  ...(builtinFeatureActive(configLike, 'memory') ? [] : ['memory', 'recall']),
109
- ...(localGitToolsActive(configLike, toolProfile) ? [] : ['git']),
115
+ ...(localGitToolsActive(configLike, { gitAvailable }) ? [] : ['git']),
110
116
  ...(builtinFeatureActive(configLike, 'git') ? [] : ['github']),
111
117
  ...(browser ? [] : ['browser', 'browser_devtools']),
112
118
  ...(computer ? [] : ['computer']),
@@ -130,12 +136,15 @@ export function builtinInstalled(configLike, id) {
130
136
  return configLike?.builtins?.[id]?.installed === true;
131
137
  }
132
138
 
133
- // The Git command tool needs no desktop extension installation in headless
134
- // runs. Existing feature overrides and explicit OFF preferences still apply.
135
- export function localGitToolsActive(configLike, toolProfile = 'interactive') {
139
+ // The Git command tool ships with the runtime and activates by itself wherever
140
+ // a git executable is on PATH — no extension install, on any tool profile, so
141
+ // interactive and headless sessions share one surface. Without the executable
142
+ // the schema would only cost tokens. Feature overrides and explicit OFF
143
+ // preferences still apply.
144
+ export function localGitToolsActive(configLike, { gitAvailable } = {}) {
136
145
  return (
137
146
  featureEnvOverride('MIXDOG_FEATURE_GIT') ??
138
- (moduleEnabled(configLike, 'git', true) && (toolProfile === 'headless' || builtinInstalled(configLike, 'git')))
147
+ (moduleEnabled(configLike, 'git', true) && (gitAvailable ?? gitExecutablePresent()))
139
148
  );
140
149
  }
141
150
 
@@ -227,10 +227,14 @@ export function resolveAgentTerminalReapMs(config, provider) {
227
227
  }
228
228
 
229
229
  // Resolve the effective auto-clear idle window for a config + provider:
230
- // an explicit user-set idleMs (config.autoClear.idleMs) always wins; else
231
- // fall back to the provider's default; else the global 1h default.
230
+ // a provider-specific override (autoClear.providerIdleMs[provider]) wins;
231
+ // else the global user-set idleMs (autoClear.idleMs); else the provider's
232
+ // built-in window, then providerIdleMs.default / the built-in 1h default.
232
233
  export function resolveAutoClearIdleMs(config, provider) {
233
234
  const raw = config?.autoClear && typeof config.autoClear === 'object' ? config.autoClear : {};
235
+ const key = clean(provider).toLowerCase();
236
+ const providerOverride = key && key !== 'default' ? normalizeAutoClearProviderIdleMs(raw.providerIdleMs)[key] : null;
237
+ if (providerOverride) return providerOverride;
234
238
  const idleMs = Number(raw.idleMs);
235
239
  if (Number.isFinite(idleMs) && idleMs > 0) return Math.max(60_000, Math.round(idleMs));
236
240
  return autoClearIdleMsForProvider(provider, raw.providerIdleMs);
@@ -70,9 +70,6 @@ export function sessionOriginFields(opts, { profile, presetObj, providerCacheOpt
70
70
  // scheduler/daily-standup, webhook/github-push, lead/worker.
71
71
  sourceType: opts.sourceType || null,
72
72
  sourceName: opts.sourceName || null,
73
- // Automation delivery mode ('app' | 'channel' | 'both'): the desktop
74
- // sidebar hides channel-only runner sessions from Automations.
75
- sourceDelivery: opts.sourceDelivery || null,
76
73
  // Provider-scoped unified cache key — one shard per provider,
77
74
  // shared across all roles / sources (agent/maintenance/mcp/
78
75
  // scheduler/webhook). Role or source-specific context must be
@@ -175,7 +175,6 @@ export function _sessionSummary(session) {
175
175
  agent: session.agent || null,
176
176
  sourceType: session.sourceType || null,
177
177
  sourceName: session.sourceName || null,
178
- sourceDelivery: session.sourceDelivery || null,
179
178
  scopeKey: session.scopeKey || null,
180
179
  parentSessionId: session.parentSessionId || null,
181
180
  ownerSessionId: session.ownerSessionId || session.parentSessionId || null,
@@ -225,7 +224,6 @@ function _normalizeSummaryRow(row) {
225
224
  agent: row.agent || null,
226
225
  sourceType: row.sourceType || null,
227
226
  sourceName: row.sourceName || null,
228
- sourceDelivery: row.sourceDelivery || null,
229
227
  scopeKey: row.scopeKey || null,
230
228
  parentSessionId: row.parentSessionId || null,
231
229
  ownerSessionId: row.ownerSessionId || row.parentSessionId || null,