Skip to content

feat(native-chat): add Muse live-terminal effort picker - #23089

Draft
clichedmoog wants to merge 3 commits into
stablyai:mainfrom
clichedmoog:feat/native-chat-muse-effort
Draft

clichedmoog wants to merge 3 commits into
stablyai:mainfrom
clichedmoog:feat/native-chat-muse-effort

Conversation

@clichedmoog

@clichedmoog clichedmoog commented Sep 26, 2026 •

Copy link
Copy Markdown

Stacked on #22998 — review only the top commit (feat(native-chat): add Muse live-terminal effort picker) until #22998 merges, then this rebases onto main.

ELI5

Muse chat sessions grow an effort pill: pick Minimal–Ultra in the composer and the live terminal session switches reasoning effort via /effort, the same way Claude's /model switch works.

What Changed

  • MUSE_EFFORT gains midSession: { kind: 'command', build: (value) => '/effort <value>' }, reusing the 7-level vocabulary feat(orchestration): accept Muse model and effort for supervised workers #22383 defined for worker launches. Same shape as the antigravity and claude-codex effort options.
  • New readMuseSessionOptionsFromTerminalScreen: scrapes the TUI status line (<model> · <effort> · <cwd> · <mode>, bottom-up after ANSI strip) and reports { model, effort } so the pill shows what the session actually runs. The model id is reported raw — ids are account-scoped with no listing command, so there is still no model picker by design.
  • use-native-chat-session-options reports those values for muse terminal tabs, mirroring the Claude hookup.

Why

#22998 renders the conversation but leaves the composer pill-less; effort is the one Muse session option with a fixed, switchable vocabulary. Alternatives: worker-launch-only (already exists, does not help live sessions); a model picker (impossible — no listing command); polling session.jsonl for effort (the log has no effort field; the status line does).

Linked Issue

Fixes #23088

Visual Proof

Desktop dev build on macOS, live Muse session whose TUI status line reads muse-spark-1.3-contributor · max · …:

TUI status line (source) Chat composer (reported pills)
Muse TUI status line showing max effort Composer pills showing model and Max effort

Picking from the pill dispatches into the live PTY and the pill tracks the result:

Effort picks dispatched as /effort commands, pill tracking Ultra

This also confirms the /effort <level> slash syntax against Muse 1.4.0.

Testing

  • I manually tested these changes locally (dev build, macOS: pill reports live effort, picks dispatch /effort <level> into the PTY)
  • Automated tests added/updated

Reader (5 tests) and catalog dispatch (3 tests). pnpm tc, oxlint/oxfmt on touched files, and the changed-lines quality gate pass locally.

AI Disclosure

Written with AI assistance (Muse Code, Meta Muse Spark); verified with the repo's own test suites.

Agent skill upstream boundary

  • Not applicable — no skill installer source, tests, fixtures, registry entries, path tables, comments, or documentation touched.

Checklist

  • This PR is small and focused
  • I explained what changed and why (ELI5, the user-facing before/after, the mechanism, and why over the alternatives)
  • Before/after screenshots or videos attached for UI changes, or N/A with reason
  • Self-reviewed for correctness, security, and performance
  • Cross-platform, SSH/remote, and path/shortcut impact considered (pure string parse of the shared status-line format; PTY command delivery identical to existing switches)
  • pnpm lint, pnpm typecheck, pnpm test, and pnpm build pass (or CI will cover; local preferred)

This branch has not been deployed

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature]: Muse effort picker in live-terminal native chat

1 participant