Skip to content

Named agent profiles (provider + model + effort + permission presets) #190

Closed

Description

@currentbits

What Vibe Kanban does

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.

Activity

  1. added
    enhancementNew feature or request
    and removed on Aug 16, 2026
  2. currentbits commented on Aug 17, 2026

    @currentbits
    OwnerAuthor

    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.

  3. currentbits commented on Aug 17, 2026

    @currentbits
    OwnerAuthor

    Three workers merged and verified on coder/named-agent-profiles-provider-model-effo-8e360e:

    • store persistence (lenient heal on load, strict validation on settings:set) + electron/test/agent-profiles.test.js
    • Settings "Agent profiles" section — add/edit/delete/reorder
    • 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.

  4. added and removed on Aug 17, 2026
  5. currentbits commented on Aug 17, 2026

    @currentbits
    OwnerAuthor

    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.

  6. currentbits commented on Aug 19, 2026

    @currentbits
    OwnerAuthor

    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:

    1. 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.
    2. 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions