Context
Once OpenSecret exposes authoritative per-model thinking metadata and accepts a normalized thinking level on initial and follow-up requests, Maple should make that control available in both of its chat surfaces. Maple should consume OpenSecret's capability metadata rather than maintaining its own hard-coded list of reasoning models or provider-specific parameters.
Dependency
Scope
- Add a compact thinking control (button, segmented control, or dropdown as appropriate to the existing composer UI) to:
- the standard Maple chat composer;
- the Maple Agent chat composer backed by Goose.
- Populate the available choices and default from OpenSecret model metadata for the selected model.
- Hide or disable the control for models that do not support configurable thinking.
- Support the normalized options advertised by the backend, expected to include combinations such as
off, low, high, and max depending on the model.
- Send the selected value on initial requests and every user-initiated follow-up request.
- Wire Agent Mode through Maple's custom Goose provider so it sends the OpenSecret-supported setting without relying on Goose model-name heuristics or duplicating provider-specific translation in Maple.
- Keep the normal chat and Agent Mode behavior consistent.
Preference persistence
- Persist the user's selection similarly to Maple's current model preferences.
- Key the preference by model so a level selected for one model does not leak into an unsupported or differently configured model.
- Use the model's advertised default when no user preference exists.
- Reconcile stale stored values safely if backend metadata changes and a previously selected level is no longer supported.
- Use the same model-specific preference across both chat surfaces unless there is a concrete product reason to keep them separate.
UX considerations
- Make the current setting visible without overcrowding the composer.
- Clearly distinguish non-thinking/off from active thinking levels.
- Avoid implying that every reasoning-capable model supports every level.
- Preserve the selected setting as the user switches conversations, models, and between standard Chat and Agent Mode, subject to each model's advertised capabilities.
Acceptance criteria
- Both composers render controls from backend metadata rather than hard-coded model IDs.
- Unsupported models do not show an actionable thinking selector.
- Supported selections are included on initial and follow-up requests in standard Chat and Agent Mode.
- Model-specific selections persist across application restarts and do not leak between models.
- A removed or changed backend capability falls back to the advertised default without breaking message submission.
- Tests cover capability loading, model switching, preference persistence, follow-up requests, and both provider paths.
- Existing conversations and models without configurable thinking remain backward compatible.
Context
Once OpenSecret exposes authoritative per-model thinking metadata and accepts a normalized thinking level on initial and follow-up requests, Maple should make that control available in both of its chat surfaces. Maple should consume OpenSecret's capability metadata rather than maintaining its own hard-coded list of reasoning models or provider-specific parameters.
Dependency
Scope
off,low,high, andmaxdepending on the model.Preference persistence
UX considerations
Acceptance criteria