Settings — view or change your per-developer preferences
One place for every per-developer setting. The store is ~/.bewith/config.json; all reads, writes, and the fallback resolution live in the deterministic helper scripts/bewith-config.sh (code-before-model — this skill never hand-edits JSON, it calls the helper).
The same settings are reachable three ways, all backed by the one config: this /settings command (and /lang, /role), the SwiftBar ⚙️ menu, and a local HTML page.
The settings
| Key | Values | Notes |
|---|---|---|
language | en | he | Conversation language. Empty falls back to defaultLanguage. |
defaultLanguage | en | he | The fallback when language is unset. Default en. |
role | dev | product | Capability-discovery filter (see /role). |
docsPath | a path | Where the platform docs/clone live (optional; auto-detected when empty). |
notify.enabled | true | false | Notifications on/off. Stored in ~/.bewith/notify.env. |
notify.banner | auto | always | off | Local banner behaviour. |
notify.sound | true | false | Play a sound with the banner. |
notify.soundName | a macOS sound | e.g. Glass, Ping. |
notify.soundFile | a path | Custom audio file (overrides soundName). |
Hard rule, always: the conversation may be in language, but all written artifacts (code, comments, commits, PRs, docs, memory, tickets) stay in English regardless. Example content inside an artifact may be in the relevant language.
Locating the helper
Run the helper at whichever path resolves first:
CFG="${CLAUDE_PLUGIN_ROOT:-}/scripts/bewith-config.sh"
[ -f "$CFG" ] || CFG="scripts/bewith-config.sh" # platform repo checkout
bash "$CFG" <subcommand> [args]
Argument forms
| Form | Effect |
|---|---|
/settings | Print the table of every setting with its effective value and source, then how to change each. Runs bewith-config.sh list. |
/settings set <key> <value> | Validate and persist. Runs bewith-config.sh set <key> <value>. Rejects invalid values with a one-line error. |
/settings open | Open the local HTML settings page (read-only view + the commands to change each). Runs bewith-config.sh open. |
<key> is one of the rows above (language, defaultLanguage, role, docsPath, or notify.<sub>).
Steps Claude runs
/settings (no args)
- Resolve the helper path (above).
- Run
bash "$CFG" listand show the output verbatim. - Remind the developer of the shortcuts (
/lang,/role) and that/settings openshows the HTML page.
/settings set <key> <value>
- Resolve the helper path.
- Run
bash "$CFG" set <key> <value>. - Relay the result line. If it exited non-zero, relay the validation error and the valid values — do not retry with a guessed value.
- For
language/role, note that the change takes effect for the next session (the SessionStart hooks read the config at session start); use/lang … --sessionor/role … --sessionfor an immediate 4-hour override in this session.
/settings open
- Resolve the helper path; run
bash "$CFG" open. - It writes and opens
file://…/bewith-settings.html(macOS). Relay the path; on a non-macOS host, print the path so the developer can open it.
How the settings are consumed
- Conversation language — the
conversation-language.shSessionStart hook resolveslanguage(via this same helper) and injects the directive to converse in it (artifacts stay English). - Role — the
capability-awareness.shSessionStart hook readsconfig.json.role(session override → config → user_role.md fallback →dev). - Notify —
notify-attention.shsources~/.bewith/notify.env, which the helper writes when youset notify.*.
Resolution is delegated to the helper so there is exactly one implementation of the fallback chain (session override → config → default). Keep this doc and the helper in sync; the helper is the spec for behaviour.
Migration (existing settings keep working)
config.json is the new source of truth. On first creation the helper migrates the legacy role from user_role.md. During the transition the helper keeps the legacy files in sync — set role write-throughs to user_role.md, and notify.* writes to notify.env — so hooks that still read the old files behave correctly.
Cross-references
/lang— the conversation-language shortcut./role— the role shortcut (now delegates to the same config).scripts/bewith-config.sh— the deterministic config core.artifact-language-english— artifacts stay English regardless of conversation language.