refactor(config): retire redundant settings (#113174)

* refactor(config): retire redundant settings

* style: apply current formatter

* chore: update plugin sdk baseline

* fix: keep Codex tool caps context-aware

* chore: remove stale imports

* test: align WhatsApp QA debounce config

* fix(config): clean up retired config checks

* fix(ci): align config cleanup checks
This commit is contained in:
Peter Steinberger
2026-07-23 17:45:02 -07:00
committed by GitHub
parent 1603781bb0
commit bb657eec93
99 changed files with 796 additions and 1445 deletions
+2 -2
View File
@@ -1,5 +1,5 @@
{
"core": 2308,
"channel": 3632,
"core": 2299,
"channel": 3630,
"plugin": 3556
}
+3 -3
View File
@@ -1,4 +1,4 @@
f3efbf17f96d7bc331bf9655625c9e41387707d6e12ac1e000a5c6518581f826 config-baseline.json
686273ffd3d3d8034bf68d0cc9acee9e1ec83191e68b40b0c8f58f72521d4f97 config-baseline.core.json
8f64ad7f21d2d1aa18a956243f1a67c86f6cfa3fe2cddbf3ebfafb263ea02092 config-baseline.channel.json
54416b69e0b764d3505677b143f1698cc2454fce8e9f69dd1d59867e3747598e config-baseline.json
e57bb6bda49f3e895633269dae7ea7e1ae31a051c20eeb8db38f6b5694996ffe config-baseline.core.json
af6ca0e70007113462270d46fa14ef0551e577e2fa157d2b9f6d0a93d36f96f1 config-baseline.channel.json
28460228b14a94a2b93040ab3f43b214bdc6d4fda4139a75b21e70fc5983dd56 config-baseline.plugin.json
+2 -1
View File
@@ -667,7 +667,8 @@ Primary reference: [Configuration reference - WhatsApp](/gateway/config-channels
| Access | `dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`, `groups` |
| Delivery | `textChunkLimit`, `streaming.chunkMode`, `mediaMaxMb`, `sendReadReceipts`, `ackReaction`, `reactionLevel` |
| Multi-account | `accounts.<id>.enabled`, `accounts.<id>.authDir`, and other per-account overrides |
| Operations | `configWrites`, `debounceMs`, `enabled` |
| Operations | `configWrites`, `enabled` |
| Inbound batching | `messages.inbound.debounceMs`, `messages.inbound.byChannel.whatsapp` |
| Session behavior | `session.dmScope`, `historyLimit`, `dmHistoryLimit`, `dms.<id>.historyLimit` |
| Prompts | `groups.<id>.systemPrompt`, `groups["*"].systemPrompt`, `direct.<id>.systemPrompt`, `direct["*"].systemPrompt` |
+1 -2
View File
@@ -50,7 +50,6 @@ Override the policy for one agent:
entries: {
support: {
typingMode: "message",
typingIntervalSeconds: 8,
},
},
},
@@ -63,7 +62,7 @@ Override the policy for one agent:
- `thinking` still reacts to streamed reasoning (`reasoningLevel: "stream"`), and can also start from active execution before reasoning deltas arrive.
- Heartbeat typing is a liveness signal for the resolved delivery target. It starts at heartbeat run start instead of following `message` or `thinking` stream timing. Set `typingMode: "never"` to disable it.
- Heartbeats do not show typing when the heartbeat target is `"none"`, when the target cannot be resolved, when chat delivery is disabled for the heartbeat, or when the channel does not support typing.
- `agents.defaults.typingIntervalSeconds` controls the **refresh cadence**, not the start time. Default: 6 seconds. `agents.entries.*.typingIntervalSeconds` can override it per agent.
- `agents.defaults.typingIntervalSeconds` controls the **refresh cadence** for every agent, not the start time. Default: 6 seconds.
## Related
+5 -12
View File
@@ -227,7 +227,6 @@ Shared defaults for bounded runtime context surfaces.
defaults: {
contextLimits: {
memoryGetMaxChars: 12000,
memoryGetDefaultLines: 120,
postCompactionMaxChars: 1800,
},
},
@@ -237,15 +236,10 @@ Shared defaults for bounded runtime context surfaces.
- `memoryGetMaxChars`: default `memory_get` excerpt cap before truncation
metadata and continuation notice are added.
- `memoryGetDefaultLines`: default `memory_get` line window when `lines` is
omitted.
- `toolResultMaxChars`: advanced live tool-result ceiling used for persisted
results and overflow recovery. Leave unset for the model-context auto cap:
`16000` chars below 100K tokens, `32000` chars at 100K+ tokens, and `64000`
chars at 200K+ tokens. Explicit values up to `1000000` are accepted for
long-context models, but the effective cap is still limited to about 30% of
the model context window. `openclaw doctor --deep` prints the effective cap,
and doctor warns only when an explicit override is stale or has no effect.
- When `memory_get` omits `lines`, OpenClaw uses a built-in 120-line window and
then applies `memoryGetMaxChars`.
- Live tool results use a model-context auto cap: `16000` chars below 100K
tokens, `32000` chars at 100K+ tokens, and `64000` chars at 200K+ tokens.
- `postCompactionMaxChars`: AGENTS.md excerpt cap used during post-compaction
refresh injection.
@@ -265,7 +259,6 @@ from `agents.defaults.contextLimits`.
id: "tiny-local",
contextLimits: {
memoryGetMaxChars: 6000,
toolResultMaxChars: 8000, // advanced ceiling for this agent
},
},
],
@@ -712,7 +705,7 @@ See [Streaming](/concepts/streaming) for behavior + chunking details.
- Defaults: `instant` for direct chats/mentions, `message` for unmentioned group chats.
- `typingIntervalSeconds` default: `6`.
- Per-agent overrides: `agents.entries.*.typingMode` and `agents.entries.*.typingIntervalSeconds`.
- Per-agent override: `agents.entries.*.typingMode`.
See [Typing Indicators](/concepts/typing-indicators).
+3 -4
View File
@@ -510,7 +510,6 @@ See [Plugins](/tools/plugin).
prefs: {
theme: "claw", // claw | knot | dash | custom
themeMode: "system", // light | dark | system
textScale: 100, // 90 | 100 | 110 | 125 | 140
locale: "en",
chatShowThinking: true,
chatShowToolCalls: true,
@@ -525,7 +524,7 @@ See [Plugins](/tools/plugin).
- `seamColor`: accent color for native app UI chrome (Talk Mode bubble tint, etc.).
- `assistant`: Control UI identity override. Falls back to active agent identity.
- `prefs`: operator display preferences. This is the canonical home so agents can
- `prefs`: cross-device operator preferences. This is the canonical home so agents can
change them through the approval gate and every Control UI client stays in
sync; browsers mirror the values into local storage for instant boot and keep
a device-local copy when they cannot write config (viewer scope, offline).
@@ -535,6 +534,8 @@ See [Plugins](/tools/plugin).
delivery remains separate and unchanged.
`showAdvancedSettings` defaults to `false`; Settings search may temporarily
open one matching advanced group without changing this preference.
Presentation-only preferences such as text scale, chat width, and live
sidebar activity stay browser-local and are configured in Settings.
Connected clients apply server-side changes live: the gateway broadcasts a
hash-only `config.changed` event after every persisted config write and
clients refresh their snapshot (skipped while a local settings draft has
@@ -574,7 +575,6 @@ See [Plugins](/tools/plugin).
// toolTitles: false, // opt-in AI purpose titles for tool calls (spends utility-model tokens)
// embedSandbox: "scripts", // strict | scripts | trusted
// allowExternalEmbedUrls: false, // dangerous: allow absolute external http(s) embed URLs
// chatMessageMaxWidth: "min(1280px, 82%)", // optional centered chat transcript max-width
// allowedOrigins: ["https://control.example.com"], // required for non-loopback Control UI
// dangerouslyAllowHostHeaderOriginFallback: false, // dangerous Host-header origin fallback mode
},
@@ -656,7 +656,6 @@ See [Plugins](/tools/plugin).
Default `false`.
- `controlUi.allowedOrigins`: explicit browser-origin allowlist for Gateway WebSocket connects. Required for public non-loopback browser origins. Private same-origin LAN/Tailnet UI loads from loopback, RFC1918/link-local, `.local`, `.ts.net`, or Tailscale CGNAT hosts are accepted without enabling Host-header fallback.
- `controlUi.toolTitles`: opt in to AI-generated purpose titles for tool calls in Control UI chat. Default: `false` (tool rendering stays fully deterministic with no background model calls). When enabled, the `chat.toolTitles` method labels complex calls through standard utility-model routing — the agent's `utilityModel` (an operator decision that may send bounded tool arguments to the chosen provider, like every utility task), or the session provider's declared small-model default (OpenAI → `gpt-5.6-luna`, Anthropic → `claude-haiku-4-5`) — and caches results in the per-agent state database so repeat views never re-bill. `utilityModel: \"\"` disables titles like every other utility task; titles never fall back to the primary model.
- `controlUi.chatMessageMaxWidth`: optional max-width for the centered Control UI chat transcript. Accepts constrained CSS width values such as `960px`, `82%`, `min(1280px, 82%)`, and `calc(100% - 2rem)`.
- `controlUi.dangerouslyAllowHostHeaderOriginFallback`: dangerous mode that enables Host-header origin fallback for deployments that intentionally rely on Host-header origin policy.
- `terminal.enabled`: opt in to the admin-scoped operator terminal. Default: `false`. The terminal starts a host PTY in the selected agent workspace, inherits the Gateway process environment, and is refused for agents with `sandbox.mode: "all"`. Enable it only for trusted operator deployments; changing it restarts the Gateway and updates the Control UI content security policy.
- `terminal.shell`: optional shell executable. When unset, OpenClaw uses `$SHELL` on Unix and `%ComSpec%` on Windows.
+1 -1
View File
@@ -312,7 +312,7 @@ That stages grounded durable candidates into the short-term dreaming store while
| `channels.whatsapp.messagePrefix` and legacy `messages.messagePrefix` | `channels.whatsapp.responsePrefix` |
| `channels.whatsapp.ackReaction` | global `messages.ackReaction` and `ackReactionScope` where translatable |
| `cron.failureDestination` | destination fields on `cron.failureAlert` |
| `gateway.controlUi.chatMessageMaxWidth` | `ui.prefs.chatMessageMaxWidth` |
| `gateway.controlUi.chatMessageMaxWidth`, presentation-only `ui.prefs` keys | removed (text scale, chat width, and live sidebar activity are browser-local) |
| `agents.list` | keyed `agents.entries` |
| top-level `defaultModel` | `agents.defaults.model` |
| `messages.messagePrefix` | `channels.whatsapp.responsePrefix` |
+4 -6
View File
@@ -71,19 +71,17 @@ Runtime-heavy surfaces have their own explicit caps under
| Key | Purpose |
| ------------------------ | ------------------------------------------------------------------------ |
| `memoryGetMaxChars` | Max characters `memory_get` returns before truncation. |
| `memoryGetDefaultLines` | Default `memory_get` line window when a request omits `lines`. |
| `toolResultMaxChars` | Advanced ceiling for a single live tool result (up to `1000000` chars). |
| `postCompactionMaxChars` | Max characters retained from `AGENTS.md` during post-compaction refresh. |
These are bounded runtime excerpts and injected runtime-owned blocks,
separate from bootstrap limits, startup-context limits, and skills prompt
limits.
`toolResultMaxChars` is unset by default, so OpenClaw derives the live
tool-result cap from the effective model context window: `16000` chars below
OpenClaw derives the live tool-result cap from the effective model context
window: `16000` chars below
100K tokens, `32000` chars at 100K+ tokens, `64000` chars at 200K+ tokens.
The runtime context-share guard still caps a single tool result at 30% of the
context window even when a larger explicit ceiling is configured.
The runtime context-share guard also caps a single tool result at 30% of the
context window.
Large provider windows are not enabled automatically when they materially
change cost or latency. For example, direct OpenAI GPT-5.5 and GPT-5.6 models
-5
View File
@@ -20,7 +20,6 @@ Most skills configuration lives under `skills` in
extraDirs: ["~/Projects/agent-scripts/skills"],
allowSymlinkTargets: ["~/Projects/manager/skills"],
watch: true,
watchDebounceMs: 250,
},
install: {
preferBrew: true,
@@ -73,10 +72,6 @@ Most skills configuration lives under `skills` in
change. Covers nested files under grouped skill roots.
</ParamField>
<ParamField path="skills.load.watchDebounceMs" type="number" default="250">
Debounce window for skill watcher events in milliseconds.
</ParamField>
## Install (`skills.install`)
<ParamField path="skills.install.preferBrew" type="boolean" default="true">
+2 -2
View File
@@ -555,13 +555,13 @@ aligned.
extraDirs: ["~/Projects/agent-scripts/skills"],
allowSymlinkTargets: ["~/Projects/manager/skills"],
watch: true, // default
watchDebounceMs: 250, // default
},
},
}
```
Use `allowSymlinkTargets` for intentional symlinked layouts where a skill
Watcher events use a built-in 250 ms debounce. Use `allowSymlinkTargets`
for intentional symlinked layouts where a skill
root symlink points outside the configured root, for example
`<workspace>/skills/manager -> ~/Projects/manager/skills`.
Enable `skills.workshop.allowSymlinkTargetWrites` only when Skill Workshop
+5 -13
View File
@@ -566,19 +566,11 @@ The chat transcript uses a centered readable frame aligned with the composer. As
## Chat message width
Wide-monitor deployments can override the transcript width without patching bundled CSS by setting `ui.prefs.chatMessageMaxWidth`:
```json5
{
gateway: {
controlUi: {
chatMessageMaxWidth: "min(1280px, 82%)",
},
},
}
```
The value is validated before it reaches the browser. Supported forms include plain lengths and percentages such as `960px` or `82%`, plus constrained `min(...)`, `max(...)`, `clamp(...)`, `calc(...)`, and `fit-content(...)` width expressions.
Wide-monitor users can override the transcript width under **Settings → Chat →
Message width**. The preference stays in that browser's local storage. Supported
forms include plain lengths and percentages such as `960px` or `82%`, plus
constrained `min(...)`, `max(...)`, `clamp(...)`, `calc(...)`, and
`fit-content(...)` width expressions.
## Tailnet access (recommended)