Manage Settings
Explain saved settings and defaults from the workspace's configuration, keep
them distinct from live/effective state, and make small settings edits only when
the user explicitly asks for that edit.
Scope
- Manage Settings is exclusively for Muse Code-owned settings.
- Never read, name, explain, or modify another agent's config, rules, skills,
home directories, or compatibility environment.
- Use this skill for questions about product settings, config paths, reminder
toggles, TUI settings, provider/model settings, and tool or policy settings.
- "Product settings" here means Muse Code itself. Repository settings,
application settings screens, library configuration, and eval-task config
work stay in the ordinary task workflow and MUST NOT load this skill.
- Prefer the current workspace and current process environment over general
defaults.
- Do not create issues, branches, commits, PRs, plugins, or skills.
- Do not install, enable, disable, trust, activate, or run plugins or skills
unless the user explicitly asks for that action.
- Do not print secrets. If a setting might contain a token, key, credential, or
opaque auth value, describe whether it is present without revealing the value.
Decide Before Any Tool Call
- Manage Settings owns persistent saved settings, not current runtime state.
- An explicit request to change a setting is a saved-settings edit request; the
user does not need to say "saved default" or name
settings.json.
- For questions about controls, supported tiers, or timing, answer from the
stable contract below. Read config when the user asks for a saved value or a
persistent setting change.
- The first settings-file CONTENT access MUST be
read_file on the resolved
active path. When the absolute path is not already known, one read-only Bash
call may resolve it from the environment, but that call may print only the
resulting path and MUST NOT touch the filesystem. Use this shape without
adding ls, test, stat, cat, or another command:
python3 -c 'import os; print(os.path.join(os.environ.get("XDG_CONFIG_HOME") or os.path.join(os.environ["HOME"], ".config"), "muse", "settings.json"))'.
YOLO mode alone never authorizes direct Bash file access.
- Use
edit_file or write_file for the smallest safe JSON change. If those
tools reject the same app-private config path, only when the startup security
context explicitly says YOLO mode is already active (approval bypassed,
shell sandbox off, and workspace trusted), a structured shell JSON edit may
be used after the file tools reject that exact path in this turn. Use a JSON
parser plus atomic replace and reread; never use text substitution.
- A shell file-access fallback must operate on that one resolved path. It MUST NOT test a
second root, branch on file existence, use
$HOME after resolving an
XDG_CONFIG_HOME path, list the directory, or cat the whole settings file.
Emit only the requested safe key values and the minimal preservation evidence.
- Never ask the user to change security mode just to edit settings.
- Never recommend disabling sandbox, approvals, or another security control to
inspect or change settings.
- Renderer settings such as reasoning summaries and verbose output cannot be
simulated in the assistant response. Explain the owning control instead of
promising equivalent behavior.
Read Before Answering
First classify the request. Questions about product controls, supported tiers,
or timing use the stable contract below and do not require a settings-file read.
Read the file for a saved-value question or an explicit setting change. A
request to change a setting means a persistent file edit; it does not authorize
a claim about current runtime state.
Before explaining or editing a saved value:
- Identify the settings file. Prefer
$XDG_CONFIG_HOME/muse/settings.json
when XDG_CONFIG_HOME is set; otherwise use $HOME/.config/muse/settings.json.
- Read that file when it exists. After the optional path-only resolver, the
first content access MUST use
read_file. If it rejects the app-private path
and startup evidence already says YOLO mode is active, the structured shell
JSON fallback above may read the same path.
- A missing file is the normal first-write state. For a read-only question,
say which path was checked, explain the relevant default, report that no file
changed, and stop. For an explicit unambiguous change, create the smallest
valid JSON document with
schema_version: 1 and only the requested setting;
the old value is absent plus its documented default. Do not create a file for
an ambiguous request.
- If the allowed read path is unavailable or the read fails for any reason
other than not found (permission denied, sandbox block, malformed JSON, I/O
error), say which path was checked and which failure happened, explain the
relevant default behavior instead of inventing a saved value, and stop — do
not hunt for substitute configuration files, probe writability, or try a
different config root.
- Tie the answer to the concrete key path, such as
runtime_capabilities["plugin:tbh-reminders:reminder:skill-reminder"].enabled.
Where Muse Code Keeps Its Settings
This skill answers from the settings surface only:
- Config root:
$XDG_CONFIG_HOME/muse, else $HOME/.config/muse — holds
settings.json (saved settings and defaults), auth.json, and trust.json; report
auth/trust presence only, never contents.
That config root is the whole answer surface for this skill. A configuration
file outside it is not Muse Code configuration — do not hunt for substitute
configuration files, and never present an unrelated file as this session's
active or effective configuration, even when the Muse settings file is
unreadable.
Resolve exactly one root. When XDG_CONFIG_HOME is set, $HOME/.config/muse is
outside the active root: never read, list, test-write, or report it as a fallback
or schema source.
Session state, logs, crashes, and what-happened questions are not settings
questions: hand those to the doctor skill instead of reading data-dir
files from here.
Saved Versus Live State
A settings.json read-back proves saved configuration only; it never proves
current TUI, in-flight run, active tool surface, or provider-request state. A
verified config write changes the permanent saved setting only. It is guaranteed
to be loaded on the next Muse Code launch; do not claim that the current process
reloaded it. Relaunch Muse Code, not the terminal application, when the user
wants the saved value to become the new runtime default.
Ordinary conversation does not invoke a TUI settings control. In the interactive
TUI, /models, /effort, and /settings are user-side controls; never claim
that you executed one. Telling the assistant /effort or describing a desired
setting in chat does not run that control.
Current-runtime controls are outside this skill's mutation scope. /models,
/effort, and /settings are user-side controls; mention the relevant control
when the user also wants an immediate current-session change, but never claim
that you executed it. For Meta, the persistent effort tiers are minimal,
low, medium, high, xhigh, and ultra. high is the default Meta
baseline; xhigh is the opt-in premium precision tier. ultra remains the
saved client selection, clamps to xhigh on the Meta wire, and currently
enables proactive workflow/delegation guidance when that tool surface is
available. It may proactively run multi-agent workflows and increase token
usage quickly. Do not claim the proposed 64-slot unconfigured-root default is
current; that capacity change is still a target.
You may honor a behavioral preference for the current task without claiming a
product setting changed only when it actually governs your response or tool
choices. For example, answer more briefly or avoid subagents when asked, while
leaving the corresponding product setting untouched. Do not pretend to emulate
renderer behavior such as reasoning summaries or verbose-output repainting, or
provider, permission, or other external-setting behavior. Do not invent
reasoning-effort tiers, budgets, ratios, mappings, or effects; use only the
stable facts above. Do not infer token budget, quality, speed, or generic
workflow effects from tier names. In particular, do not say a higher provider
tier performs more, deeper, longer, or better reasoning. The only current
workflow delta named by this contract is ultra's proactive guidance; it does
not prove that provider reasoning itself is deeper or better.
Persistent Writes On Explicit Change
Do not claim that a saved-file edit changed the current interactive TUI. An
explicit request such as "use xhigh", "turn summaries off", or "set verbose
output to less" authorizes the corresponding persistent setting edit when the
request is unambiguous. If the requested value is ambiguous, ask which saved
value to use and STOP without a mutation. A clarification timeout,
auto-cancellation, dismissal, empty reply, or missing reply is not authorization:
leave the setting unchanged. Never pick a value because it seems more common,
likely, stronger, or closer to a default.
Use these stable key contracts:
reasoning_effort is the top-level persistent effort tier. Meta accepts
minimal, low, medium, high, xhigh, or ultra.
tui.reasoning_summaries is a persistent boolean; absent defaults to true.
tui.verbose_output is one of less, edits, or more; absent defaults to
edits (shown as edits & writes).
When a write is requested:
- Read the current settings first.
- Make the smallest JSON change that satisfies the request. If the read proves
the file is missing, create a minimal object containing
schema_version: 1
and only the requested setting. A denied or malformed file is not a missing
file and MUST NOT be replaced.
- Preserve unrelated keys, formatting-sensitive values, and unknown fields.
- Re-read the file to prove the saved value changed. Do not treat the reread as
live/effective-state evidence.
- Report the old saved value (or absent plus its effective default), the new
saved value, that it is permanent, that the current session is unchanged,
and that it takes effect on the next Muse Code launch. Relaunch Muse Code; do
not tell the user to restart the terminal application.
For a YOLO shell fallback, an earlier successful shell read does not replace the
required edit_file or write_file attempt. Try the file mutation tool on the
same path first; use the atomic structured shell mutation only after that tool's
explicit denial in this turn.
If the allowed access path above still cannot read or write the active config,
report that no saved setting changed and stop. Do not probe another config root
or bypass a security control.
Completion Report
For read-only answers, include:
- the settings path checked;
- the key path or default that answers the question;
- whether any file was changed.
For a verified write, use this user-facing summary shape:
Saved changes
- <key>: <old saved value or absent + default> -> <new saved value>
Permanent: yes
Current session: unchanged
Effective: next Muse Code launch
Reload: required - relaunch Muse Code; no terminal-application restart
Verified: `settings.json` reread at <path>
For a setting such as reasoning_effort with higher-precedence startup input,
append unless a launch flag overrides the saved value to the
Effective line. Name any setting intentionally left unchanged.
If the read, write, or verification fails, use:
Changed: no
Reason: <exact path and failure>
Reload: not applicable
1---2name: manage-settings3description: Explain and safely update persistent Muse Code product settings, including model/reasoning effort and /settings options. Use only for explicit Muse Code setting questions or changes; do not use for repository, application, eval-task, or generic configuration work.4---56# Manage Settings78Explain saved settings and defaults from the workspace's configuration, keep9them distinct from live/effective state, and make small settings edits only when10the user explicitly asks for that edit.1112## Scope1314- Manage Settings is exclusively for Muse Code-owned settings.15- Never read, name, explain, or modify another agent's config, rules, skills,16 home directories, or compatibility environment.17- Use this skill for questions about product settings, config paths, reminder18 toggles, TUI settings, provider/model settings, and tool or policy settings.19- "Product settings" here means Muse Code itself. Repository settings,20 application settings screens, library configuration, and eval-task config21 work stay in the ordinary task workflow and MUST NOT load this skill.22- Prefer the current workspace and current process environment over general23 defaults.24- Do not create issues, branches, commits, PRs, plugins, or skills.25- Do not install, enable, disable, trust, activate, or run plugins or skills26 unless the user explicitly asks for that action.27- Do not print secrets. If a setting might contain a token, key, credential, or28 opaque auth value, describe whether it is present without revealing the value.2930## Decide Before Any Tool Call3132- Manage Settings owns persistent saved settings, not current runtime state.33- An explicit request to change a setting is a saved-settings edit request; the34 user does not need to say "saved default" or name `settings.json`.35- For questions about controls, supported tiers, or timing, answer from the36 stable contract below. Read config when the user asks for a saved value or a37 persistent setting change.38- The first settings-file CONTENT access MUST be `read_file` on the resolved39 active path. When the absolute path is not already known, one read-only Bash40 call may resolve it from the environment, but that call may print only the41 resulting path and MUST NOT touch the filesystem. Use this shape without42 adding `ls`, `test`, `stat`, `cat`, or another command:43 `python3 -c 'import os; print(os.path.join(os.environ.get("XDG_CONFIG_HOME") or os.path.join(os.environ["HOME"], ".config"), "muse", "settings.json"))'`.44 YOLO mode alone never authorizes direct Bash file access.45- Use `edit_file` or `write_file` for the smallest safe JSON change. If those46 tools reject the same app-private config path, only when the startup security47 context explicitly says YOLO mode is already active (approval bypassed,48 shell sandbox off, and workspace trusted), a structured shell JSON edit may49 be used after the file tools reject that exact path in this turn. Use a JSON50 parser plus atomic replace and reread; never use text substitution.51- A shell file-access fallback must operate on that one resolved path. It MUST NOT test a52 second root, branch on file existence, use `$HOME` after resolving an53 `XDG_CONFIG_HOME` path, list the directory, or `cat` the whole settings file.54 Emit only the requested safe key values and the minimal preservation evidence.55- Never ask the user to change security mode just to edit settings.56- Never recommend disabling sandbox, approvals, or another security control to57 inspect or change settings.58- Renderer settings such as reasoning summaries and verbose output cannot be59 simulated in the assistant response. Explain the owning control instead of60 promising equivalent behavior.6162## Read Before Answering6364First classify the request. Questions about product controls, supported tiers,65or timing use the stable contract below and do not require a settings-file read.66Read the file for a saved-value question or an explicit setting change. A67request to change a setting means a persistent file edit; it does not authorize68a claim about current runtime state.6970Before explaining or editing a saved value:71721. Identify the settings file. Prefer `$XDG_CONFIG_HOME/muse/settings.json`73 when `XDG_CONFIG_HOME` is set; otherwise use `$HOME/.config/muse/settings.json`.742. Read that file when it exists. After the optional path-only resolver, the75 first content access MUST use `read_file`. If it rejects the app-private path76 and startup evidence already says YOLO mode is active, the structured shell77 JSON fallback above may read the same path.783. A missing file is the normal first-write state. For a read-only question,79 say which path was checked, explain the relevant default, report that no file80 changed, and stop. For an explicit unambiguous change, create the smallest81 valid JSON document with `schema_version: 1` and only the requested setting;82 the old value is absent plus its documented default. Do not create a file for83 an ambiguous request.844. If the allowed read path is unavailable or the read fails for any reason85 other than not found (permission denied, sandbox block, malformed JSON, I/O86 error), say which path was checked and which failure happened, explain the87 relevant default behavior instead of inventing a saved value, and stop — do88 not hunt for substitute configuration files, probe writability, or try a89 different config root.905. Tie the answer to the concrete key path, such as91 `runtime_capabilities["plugin:tbh-reminders:reminder:skill-reminder"].enabled`.9293## Where Muse Code Keeps Its Settings9495This skill answers from the settings surface only:9697- Config root: `$XDG_CONFIG_HOME/muse`, else `$HOME/.config/muse` — holds98 `settings.json` (saved settings and defaults), `auth.json`, and `trust.json`; report99 auth/trust presence only, never contents.100101That config root is the whole answer surface for this skill. A configuration102file outside it is not Muse Code configuration — do not hunt for substitute103configuration files, and never present an unrelated file as this session's104active or effective configuration, even when the Muse settings file is105unreadable.106107Resolve exactly one root. When `XDG_CONFIG_HOME` is set, `$HOME/.config/muse` is108outside the active root: never read, list, test-write, or report it as a fallback109or schema source.110111Session state, logs, crashes, and what-happened questions are not settings112questions: hand those to the `doctor` skill instead of reading data-dir113files from here.114115## Saved Versus Live State116117A `settings.json` read-back proves saved configuration only; it never proves118current TUI, in-flight run, active tool surface, or provider-request state. A119verified config write changes the permanent saved setting only. It is guaranteed120to be loaded on the next Muse Code launch; do not claim that the current process121reloaded it. Relaunch Muse Code, not the terminal application, when the user122wants the saved value to become the new runtime default.123124Ordinary conversation does not invoke a TUI settings control. In the interactive125TUI, `/models`, `/effort`, and `/settings` are user-side controls; never claim126that you executed one. Telling the assistant `/effort` or describing a desired127setting in chat does not run that control.128129Current-runtime controls are outside this skill's mutation scope. `/models`,130`/effort`, and `/settings` are user-side controls; mention the relevant control131when the user also wants an immediate current-session change, but never claim132that you executed it. For Meta, the persistent effort tiers are `minimal`,133`low`, `medium`, `high`, `xhigh`, and `ultra`. `high` is the default Meta134baseline; `xhigh` is the opt-in premium precision tier. `ultra` remains the135saved client selection, clamps to `xhigh` on the Meta wire, and currently136enables proactive workflow/delegation guidance when that tool surface is137available. It may proactively run multi-agent workflows and increase token138usage quickly. Do not claim the proposed 64-slot unconfigured-root default is139current; that capacity change is still a target.140141You may honor a behavioral preference for the current task without claiming a142product setting changed only when it actually governs your response or tool143choices. For example, answer more briefly or avoid subagents when asked, while144leaving the corresponding product setting untouched. Do not pretend to emulate145renderer behavior such as reasoning summaries or verbose-output repainting, or146provider, permission, or other external-setting behavior. Do not invent147reasoning-effort tiers, budgets, ratios, mappings, or effects; use only the148stable facts above. Do not infer token budget, quality, speed, or generic149workflow effects from tier names. In particular, do not say a higher provider150tier performs more, deeper, longer, or better reasoning. The only current151workflow delta named by this contract is `ultra`'s proactive guidance; it does152not prove that provider reasoning itself is deeper or better.153154## Persistent Writes On Explicit Change155156Do not claim that a saved-file edit changed the current interactive TUI. An157explicit request such as "use xhigh", "turn summaries off", or "set verbose158output to less" authorizes the corresponding persistent setting edit when the159request is unambiguous. If the requested value is ambiguous, ask which saved160value to use and STOP without a mutation. A clarification timeout,161auto-cancellation, dismissal, empty reply, or missing reply is not authorization:162leave the setting unchanged. Never pick a value because it seems more common,163likely, stronger, or closer to a default.164165Use these stable key contracts:166167- `reasoning_effort` is the top-level persistent effort tier. Meta accepts168 `minimal`, `low`, `medium`, `high`, `xhigh`, or `ultra`.169- `tui.reasoning_summaries` is a persistent boolean; absent defaults to `true`.170- `tui.verbose_output` is one of `less`, `edits`, or `more`; absent defaults to171 `edits` (shown as `edits & writes`).172173When a write is requested:1741751. Read the current settings first.1762. Make the smallest JSON change that satisfies the request. If the read proves177 the file is missing, create a minimal object containing `schema_version: 1`178 and only the requested setting. A denied or malformed file is not a missing179 file and MUST NOT be replaced.1803. Preserve unrelated keys, formatting-sensitive values, and unknown fields.1814. Re-read the file to prove the saved value changed. Do not treat the reread as182 live/effective-state evidence.1835. Report the old saved value (or absent plus its effective default), the new184 saved value, that it is permanent, that the current session is unchanged,185 and that it takes effect on the next Muse Code launch. Relaunch Muse Code; do186 not tell the user to restart the terminal application.187188For a YOLO shell fallback, an earlier successful shell read does not replace the189required `edit_file` or `write_file` attempt. Try the file mutation tool on the190same path first; use the atomic structured shell mutation only after that tool's191explicit denial in this turn.192193If the allowed access path above still cannot read or write the active config,194report that no saved setting changed and stop. Do not probe another config root195or bypass a security control.196197## Completion Report198199For read-only answers, include:200201- the settings path checked;202- the key path or default that answers the question;203- whether any file was changed.204205For a verified write, use this user-facing summary shape:206207```text208Saved changes209- <key>: <old saved value or absent + default> -> <new saved value>210211Permanent: yes212Current session: unchanged213Effective: next Muse Code launch214Reload: required - relaunch Muse Code; no terminal-application restart215Verified: `settings.json` reread at <path>216```217218For a setting such as `reasoning_effort` with higher-precedence startup input,219append `unless a launch flag overrides the saved value` to the220Effective line. Name any setting intentionally left unchanged.221222If the read, write, or verification fails, use:223224```text225Changed: no226Reason: <exact path and failure>227Reload: not applicable228```