You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Named agent profiles (provider + model + effort + permission presets) #190
Named, reusable agent configurations (provider + model + settings) switchable at attempt creation (docs).
Solenta today
Per-thread model/effort/permission overrides exist, but there are no saved named profiles (grep finds only AutomationPreset and SnoozePreset).
Why it matters
"Cheap scout" (haiku + read-only) vs "deep worker" (opus + accept-edits) is a daily toggle; recreating the combination per thread is friction, and profiles make best-of-N fan-out configurations one click.
Fix direction
Named profiles (provider, model, effort, permission mode) in Settings, selectable from the composer's model picker; a best-of-N option to fan out across profiles.
Decomposed into a shared contract plus three parallel grok workers on disjoint files.
Contract (landed on coder/named-agent-profiles-provider-model-effo-8e360e): AgentProfile { id, name, provider, model, reasoningEffort, permissionMode } and AppSettings.agentProfiles. No new IPC channel — settings:get/settings:set already carry the whole patch, and applying a profile is exactly the three per-thread calls the composer already makes (setProvider → setReasoningEffort → setPermissionMode, in that order, because a provider switch resets effort).
A — electron/store.js normalize + strict validation, electron/test/agent-profiles.test.js
B — src/components/SettingsModal.tsx profile CRUD section
C — src/components/Composer.tsx + src/modelPicker.ts apply-from-picker
Best-of-N fan-out across profiles is deliberately deferred: it lives in the same Composer region as worker C and is a separate feature on top of profiles existing.
composer model picker applies a profile in one click, keyboard reachable, disabled when the CLI is missing
Deduped afterwards: both UI workers had written their own profileSummary, one showing a raw model id and one the ModelInfo label. One exported, tested copy now serves both.
Full suite: core 38/38, renderer 759/759, electron 887/888, memory 122/122. The single electron failure is the pre-existing web-integration reconnect backoff, #233.
Best-of-N fan-out across profiles is now in flight as the last piece.
Complete on coder/named-agent-profiles-provider-model-effo-8e360e, ready to merge.
Shipped:
AgentProfile + AppSettings.agentProfiles; no new IPC channel (settings:get/settings:set already carry the patch)
store: lenient heal on load, strict validation on save
Settings: add / edit / delete / reorder, with a live summary per profile
composer model picker: one click applies provider → effort → permission, keyboard reachable, disabled when the CLI is missing
Best of N: fan out across profiles; a profile fork gets provider+model at fork time, then effort and permission before its run. Provider rows behave exactly as before (regression-tested).
Cleanups the fan-out surfaced:
two workers had each written a profileSummary, one showing a raw model id and one the ModelInfo label — collapsed to one exported, tested copy
buildBestOfNEntries never read its currentProviderId argument (the guard it fed sat behind an installed check that already made it always true). Dropped it, which left buildBestOfNPlan a wrapper with no caller in src/; deleted that too and moved its coverage over.
Suites: core 38/38, renderer 776/776, electron 891/892, memory 122/122. The single electron failure is the pre-existing web-integration reconnect backoff, #233.
Claude Code Desktop puts the whole profile in the composer as three adjacent menus, each with a shortcut (docs):
Cmd+Shift+M — permission mode menu
Cmd+Shift+I — model menu
Cmd+Shift+E — effort menu
1–9 selects an item in any open menu
Two design points for this issue:
Reasoning effort is a first-class per-turn control, not a setting inside a profile. Solenta currently has effort only as a global config flip that races concurrent turns on kimi (Kimi reasoning effort races concurrent kimi turns (global config.toml flip window) #181) — an in-composer picker is both the UX and the forcing function for making it per-run.
The mode is remembered per folder and takes precedence over the configured default, "except Plan, which applies to the current session only." That per-project stickiness with a deliberate carve-out for the mode you never want sticky is a nice detail for named profiles: a profile can be pinned to a project without pinning the exploratory modes.
Also relevant to #177 (mode picker is a no-op on some providers): if effort and mode are visible menus per thread, a provider that cannot honour them must say so at the menu rather than silently downgrading.
Activity
currentbits commentedon Aug 17, 2026
Decomposed into a shared contract plus three parallel grok workers on disjoint files.
Contract (landed on
coder/named-agent-profiles-provider-model-effo-8e360e):AgentProfile { id, name, provider, model, reasoningEffort, permissionMode }andAppSettings.agentProfiles. No new IPC channel —settings:get/settings:setalready carry the whole patch, and applying a profile is exactly the three per-thread calls the composer already makes (setProvider→setReasoningEffort→setPermissionMode, in that order, because a provider switch resets effort).electron/store.jsnormalize + strict validation,electron/test/agent-profiles.test.jssrc/components/SettingsModal.tsxprofile CRUD sectionsrc/components/Composer.tsx+src/modelPicker.tsapply-from-pickerBest-of-N fan-out across profiles is deliberately deferred: it lives in the same Composer region as worker C and is a separate feature on top of profiles existing.
currentbits commentedon Aug 17, 2026
Three workers merged and verified on
coder/named-agent-profiles-provider-model-effo-8e360e:settings:set) +electron/test/agent-profiles.test.jsDeduped afterwards: both UI workers had written their own
profileSummary, one showing a raw model id and one theModelInfolabel. One exported, tested copy now serves both.Full suite: core 38/38, renderer 759/759, electron 887/888, memory 122/122. The single electron failure is the pre-existing web-integration reconnect backoff, #233.
Best-of-N fan-out across profiles is now in flight as the last piece.
currentbits commentedon Aug 17, 2026
Complete on
coder/named-agent-profiles-provider-model-effo-8e360e, ready to merge.Shipped:
AgentProfile+AppSettings.agentProfiles; no new IPC channel (settings:get/settings:setalready carry the patch)Cleanups the fan-out surfaced:
profileSummary, one showing a raw model id and one theModelInfolabel — collapsed to one exported, tested copybuildBestOfNEntriesnever read itscurrentProviderIdargument (the guard it fed sat behind aninstalledcheck that already made it always true). Dropped it, which leftbuildBestOfNPlana wrapper with no caller insrc/; deleted that too and moved its coverage over.Suites: core 38/38, renderer 776/776, electron 891/892, memory 122/122. The single electron failure is the pre-existing web-integration reconnect backoff, #233.
currentbits commentedon Aug 19, 2026
Claude Code Desktop puts the whole profile in the composer as three adjacent menus, each with a shortcut (docs):
Cmd+Shift+M— permission mode menuCmd+Shift+I— model menuCmd+Shift+E— effort menu1–9selects an item in any open menuTwo design points for this issue:
Also relevant to #177 (mode picker is a no-op on some providers): if effort and mode are visible menus per thread, a provider that cannot honour them must say so at the menu rather than silently downgrading.