Founder ask: tell Codewhale what you want the settings to be, it proposes concrete changes, you approve or reject each.
Design
- A new
settings tool with actions search, read and propose. It never writes. The catalog stays out of the static prompt.
propose blocks on the same wait as request_user_input. The card shows one row per change: current → new value, file/scope, takes effect now / next session / restart, and a "what this does" line from the schema. The model's reason is shown separately as untrusted text.
- Each accepted row applies through
commands::set_config_value (the same path as /config, /set, presets and the settings editor), using the existing lossless writers.
/settings <what you want> starts a model turn. /settings undo restores the values saved before the last apply.
Guardrails
- Each change has a class: ordinary / elevating / secret / handoff. Loosening posture or sandbox, shell, allow rules, telemetry, notes_path and exec-policy off are elevating. Each elevating row needs its own confirmation and is never part of "Apply all".
- Secrets are never proposable.
- base_url, MCP servers, hooks, trust paths and the router are handoff rows: they show a ready-to-run command and don't write.
- Only an interactive parent session with a person present may
propose. Sub-agents, automations and headless runs get search/read only, and this is not inherited by children.
- v1 writes user scope only.
- Keys must exist in
SETTINGS_SCHEMA; unknown keys get the nearest valid key. Values are dry-run through the real parser.
Slice 1
Schema classification, the sub-agent model keys, nearest-key lookup, tools/settings.rs, the proposal event and card, /settings entry and undo, docs and tests: nothing written on propose; "Apply all" excludes elevating rows; children can't propose; secrets are refused.
Decisions pending: D1–D8 (founder).
Founder ask: tell Codewhale what you want the settings to be, it proposes concrete changes, you approve or reject each.
Design
settingstool with actionssearch,readandpropose. It never writes. The catalog stays out of the static prompt.proposeblocks on the same wait asrequest_user_input. The card shows one row per change: current → new value, file/scope, takes effect now / next session / restart, and a "what this does" line from the schema. The model's reason is shown separately as untrusted text.commands::set_config_value(the same path as/config,/set, presets and the settings editor), using the existing lossless writers./settings <what you want>starts a model turn./settings undorestores the values saved before the last apply.Guardrails
propose. Sub-agents, automations and headless runs get search/read only, and this is not inherited by children.SETTINGS_SCHEMA; unknown keys get the nearest valid key. Values are dry-run through the real parser.Slice 1
Schema classification, the sub-agent model keys, nearest-key lookup,
tools/settings.rs, the proposal event and card,/settingsentry and undo, docs and tests: nothing written on propose; "Apply all" excludes elevating rows; children can't propose; secrets are refused.Decisions pending: D1–D8 (founder).