Skip to content

acpmux: a new chat starts at the default, not the last mode picked in a running chat - #24021

Merged
teamleaderleo merged 10 commits into
feat-cmux-nextfrom
steer-default-2/new-chat-default-mode
Oct 26, 2026
Merged

teamleaderleo merged 10 commits into
feat-cmux-nextfrom
steer-default-2/new-chat-default-mode

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 22, 2026 •

Copy link
Copy Markdown
Collaborator

Ready. Codex (gpt-6.1-sol, xhigh) review: SHIP at b44e728.

Leo-ask: ask-16f0b7197f

Leo, 2026-10-21: "i think starting in full access is ok cuz the default for new chats != whatever u just temp set in an existing running chat" and "u can set default in other ways". (Earlier in the ask: "by default, we just want to be allowing tons of bullshit, right? ... That's the fucking ethos.")

Takes back #21734: its "latest choice wins" rule. A mode picked in a running chat became the start mode of every new chat (Lawrence 2026-10-14: "should always use the latest user selected one"). Leo now says a temporary pick in a running chat is not the default.

What changes

  • A mode picked in a chat applies to that chat only. acpmux no longer saves it as lastPermissionMode, and new chats no longer start from it.
  • New chats start, as before, at the MDM/team-forced value, else config.json defaultPermissionMode, else the agents.defaultPermissionMode setting (default Full Access). With sessions.allowFullAccess off, full access still starts as Standard.
  • The explicit ways to set the default all still work: Settings > Agents > Agent Chat > Permission Mode for New Chats (and cmux config set agents.defaultPermissionMode), MDM/team values pushed by the app, and acpmux config.json defaultPermissionMode. There is no other "set as default" action for the permission mode.
  • A lastPermissionMode left in config.json by an older build is ignored. An old start-mode.json still loads.
  • The pending-chat mode chip (webview) no longer copies a pick from another chat.
  • Settings help text: "What a new chat may do without asking. A mode you pick in a chat applies to that chat only." I wrote the 21 locale strings myself; they need a check.
  • Not touched: the acpmux PermissionPolicy, policy narrowing, presets, folder profiles, Web chats, and the model/effort picks.

Tests

  • tests/start_mode.rs: a_pick_in_a_chat_holds_for_that_chat_and_new_chats_start_in_the_default (replaces the latest-pick test); start-mode answer and watcher tests updated.
  • tests/start_mode_settings.rs: a_last_permission_mode_an_older_build_saved_is_ignored (new); the settings-file test now checks that a pick changes only its chat; spent-pick test removed.
  • webviews/test/agent-pane-start-mode-chip.test.ts: the chip shows the default, not another chat's pick.

Command: cmux-ci run --class light --script scripts/ci/cargo-test-selected.sh --arg=--manifest-path --arg=cmux-tui/Cargo.toml --arg=-p --arg=acpmux --arg=--test --arg=start_mode --arg=--test --arg=start_mode_settings --arg=--test --arg=full_access_setting --ref <sha>. The isolated fleet queue stalled for hours, so PR CI at the head is the evidence: the start_mode, start_mode_settings and full_access_setting tests pass there.

Observed / Not run

  • Observed: rustfmt clean on the changed Rust; pre-push gate passed.
  • Observed: PR CI at the head runs the cargo tests above and they pass.
  • Generated settings-schema.json and docs/mdm are left to the autofix.

Base reds (warnings, not this PR)

  • remote_guard_codex_bridge (2 tests): the test config sets "permissionPolicy": "ask" and a new chat starts in full access, so refuse_wider_mode (acpmux: a narrower policy holds on presets, resume, asides, handoffs and a deny-all default #23639, in base) refuses it. This PR does not touch the test, policy_mode.rs or the policy check.
  • instructions_in_both_modes (MCP instructions length cap), prompt_redraw_fish_two_line (fish timed out waiting for a terminal reply) and server_stop_uses_identify_fence: all in crates this PR does not touch.

No capture: behaviour of the start mode plus one Settings help string; covered by the tests above.

Changelog

Changed: a mode you pick in a running chat no longer becomes the start mode of new chats; set the default in Settings.

Agent session: Air-Blue

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.


Summary by cubic

Takes back the "latest choice wins" rule: a mode picked in a running chat now applies to that chat only, and new chats start at the default instead of inheriting it.

  • New chats start at the MDM/team-forced value, config.json defaultPermissionMode, or the agents.defaultPermissionMode setting (Full Access by default), as before.
  • A leftover lastPermissionMode saved by an older build is ignored; an old start-mode.json still loads.
  • The pending-chat mode chip no longer adopts a pick made in another chat.
  • The Settings help text (all locales), settings-schema.json, and MDM exports now describe the per-chat rule; the generated defaults stamp passes.

Migration

  • No action needed; any lastPermissionMode in config.json is simply ignored and dropped at the next save.

Written for commit a2bb1e0. Summary will update on new commits.

View guided diff Turn on auto-fix

teamleaderleo and others added 2 commits October 21, 2026 18:41
Leo 2026-10-21: "i think starting in full access is ok cuz the default for new chats != whatever u just temp set in an existing running chat"; "u can set default in other ways".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15d18-a2fb-7ac0-84d5-432ffea53b8b&host=Air-Blue
… chat

A pick applies to its own chat. Settings, MDM/team values and config.json
defaultPermissionMode still set the default. A leftover lastPermissionMode
from an older build is ignored.

Leo-ask: ask-16f0b7197f

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15d18-a2fb-7ac0-84d5-432ffea53b8b&host=Air-Blue
@teamleaderleo teamleaderleo added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 22, 2026
@teamleaderleo
teamleaderleo temporarily deployed to cmux-tui-merge-tree October 22, 2026 01:43 — with GitHub Actions Inactive
@teamleaderleo

teamleaderleo commented Oct 22, 2026 •

Copy link
Copy Markdown
Collaborator Author

Owned by steer-default-3 on huge-blue · session

@github-actions

github-actions Bot commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

cmux status (one comment, edited in place; each line is updated by the job that owns it)

Review 5353d57: HQ feed card · gallery before/after runs · checks

App of this head (app.zip, kept 1 day)

gh workflow run reload-build.yml -R manaflow-ai/cmux --ref feat-cmux-next -f tag=pr24021 -f ref=steer-default-2/new-chat-default-mode -f platform=macos -f backend_mode=local

Gallery before/after for 5353d57: 16 states rendered, 2 images differ, 1922 more touched states not rendered. Images are in the run's artifact, not on this public PR.

gh run download 40259152921 -R manaflow-ai/cmux -n gallery-advisory-24021-5353d57aeeb4973045acc000eeae29b1ade5fc1c (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.chat-width/standard Apple System Colors Light unchanged 0% own App.tsx
agent-pane.chat-width/standard Apple System Colors unchanged 0% own App.tsx
agent-pane.chat-width/wide Apple System Colors changed 23.4% own App.tsx
agent-pane.chat-width/wide Apple System Colors Light unchanged 0% own App.tsx
agent-pane.chat-width/wide-blocks Apple System Colors changed 23.4% own App.tsx
agent-pane.chat-width/wide-blocks Apple System Colors Light unchanged 0% own App.tsx
agent-pane.composer-floats/scrolled-to-end Apple System Colors Light unchanged 0% own App.tsx
agent-pane.composer-floats/scrolled-to-end Apple System Colors unchanged 0% own App.tsx
agent-pane.composer-floats/composer-grown Apple System Colors Light unchanged 0% own App.tsx
agent-pane.composer-floats/composer-grown Apple System Colors unchanged 0% own App.tsx
agent-pane.docked-chat/new-chat Apple System Colors Light unchanged 0% own App.tsx
agent-pane.docked-chat/new-chat Apple System Colors unchanged 0% own App.tsx
agent-pane.docked-chat/after-turn Apple System Colors Light unchanged 0% own App.tsx
agent-pane.docked-chat/after-turn Apple System Colors unchanged 0% own App.tsx
agent-pane.docked-chat/working Apple System Colors Light unchanged 0% own App.tsx
agent-pane.docked-chat/working Apple System Colors unchanged 0% own App.tsx
agent-pane.docked-chat/typing-in-dock Apple System Colors Light unchanged 0% own App.tsx
agent-pane.docked-chat/typing-in-dock Apple System Colors unchanged 0% own App.tsx
agent-pane.docked-chat/long-title Apple System Colors Light unchanged 0% own App.tsx
agent-pane.docked-chat/long-title Apple System Colors unchanged 0% own App.tsx
agent-pane.gutter-select/from-left-margin Apple System Colors Light unchanged 0% own App.tsx
agent-pane.gutter-select/from-left-margin Apple System Colors unchanged 0% own App.tsx
agent-pane.gutter-select/from-right-margin Apple System Colors Light unchanged 0% own App.tsx
agent-pane.gutter-select/from-right-margin Apple System Colors unchanged 0% own App.tsx
agent-pane.orchestration-lab/local-queue Apple System Colors Light unchanged 0% own App.tsx
agent-pane.orchestration-lab/local-queue Apple System Colors unchanged 0% own App.tsx
agent-pane.orchestration-lab/build-box Apple System Colors Light unchanged 0% own App.tsx
agent-pane.orchestration-lab/build-box Apple System Colors unchanged 0% own App.tsx
agent-pane.orchestration-lab/cloud-fair-share Apple System Colors Light unchanged 0% own App.tsx
agent-pane.orchestration-lab/cloud-fair-share Apple System Colors unchanged 0% own App.tsx
agent-pane.streaming-follow-motion/stream Apple System Colors Light unchanged 0% own App.tsx
agent-pane.streaming-follow-motion/stream Apple System Colors unchanged 0% own App.tsx

Pick other states with a Gallery: entry.id, entry.id/variant line in the PR body.

Pending: CI is running on 5353d57aee (run); the result below was for a2bb1e0e92 and no longer applies.

Last result: Passes: CI passes on a2bb1e0e92.

Written by scripts/ci/classify_failures.py (ci-failure-attribution.yml); it is rewritten when this head's CI completes.

red: cmux-next checks (god files, concurrency, crash safety, l10n); no finished base run on be82570 to compare; do not merge until green; see lane-rules

@blacksmith-sh

blacksmith-sh Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

Found 9 test failures on Blacksmith runners:

Failures

Test View Logs
/tmp/tmpfcx9qefo/summary-missing.json (live):/summary-missing.json (live): View Logs
/tmp/tmpphfy391g/summary-fail.json (live):/summary-fail.json (live): View Logs
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows/
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows
View Logs
[new_workspaces] the window draws no frames/[new_workspaces] the window draws no frames View Logs
[tabs] debug.tab_switch timed 0 of 40 switches/
[tabs] debug.tab_switch timed 0 of 40 switches
View Logs
[tabs] the window draws no frames/[tabs] the window draws no frames View Logs
bench OTHER_SWIFT_FLAGS is 'OTHER_SWIFT_FLAGS=$(inherited) -DCMUX_BENCH_HOOKS -DCMUX_BL
OCKING_CHECKS'/
bench OTHER_SWIFT_FLAGS is 'OTHER_SWIFT_FLAGS=$(inherited) -DCMUX_BENCH_HOOKS -DCMUX_BL
OCKING_CHECKS'
View Logs
bench OTHER_SWIFT_FLAGS is 'OTHER_SWIFT_FLAGS=$(inherited) -DCMUX_BENCH_HOOKS -DCMUX_BL
OCKING_CHECKS'/
bench OTHER_SWIFT_FLAGS is 'OTHER_SWIFT_FLAGS=$(inherited) -DCMUX_BENCH_HOOKS -DCMUX_BL
OCKING_CHECKS'
View Logs
test_the_repository_highlights_validate (main.DigestTests.test_the_repository_highl
ights_validate)/
test_the_repository_highlights_validate (main.DigestTests.test_the_repository_highl
ights_validate)
View Logs

Fix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Bead cx-lnl62 created for this PR by the cmux coordinator.

…lt-2/new-chat-default-mode

# Conflicts:
#	webviews/test/agent-pane-start-mode-chip.test.ts
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

cmux-next guards / nightly-guards / workflow-guard-tests / release-notary is red on 15 of 15 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (Codex gpt-6.1-sol xhigh via acpmux, correctness first): SHIP at b44e728. One nit (no save-roundtrip assertion in the legacy-key test), not blocking.

@cursor

cursor Bot commented Oct 22, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot uses usage-based billing for this team and requires on-demand usage to be enabled.

A team admin can enable on-demand usage in the Cursor dashboard.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (Codex gpt-6.1-sol xhigh via acpmux, correctness first): SHIP at 76ce942 (b44e728 reviewed SHIP, plus a clean feat-cmux-next merge; the PR's changed lines are identical, and base's newer code was checked against the change).

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

cmux-next guards / tooling-tests is red on 12 of 12 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Orphaned: no activity for 13 h, and no lane holds a lease on it. The orphan sweep could not merge feat-cmux-next in: conflicts in schemas/settings-export/settings-schema.sources.sha256. Listed for a lane to resolve.

The merge dropped its only declaration with the saved-pick code; #25155's
inherit path still skips a toggle mode such as plan.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a175da-93d2-7310-8727-b20e1d89afe5&host=huge-blue
@cursor

cursor Bot commented Oct 26, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot uses usage-based billing for this team and requires on-demand usage to be enabled.

A team admin can enable on-demand usage in the Cursor dashboard.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

cmux-next fast gates / post cmux-next/fast-gates is red on 20 of 22 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

The stamp comes from the PR autofix patch (run 40256227863), applied with
pr-autofix-apply.sh; the docs reference from export-next-docs.ts --settings,
which also picks up base's agentPane.display.environment.placement row.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a175da-93d2-7310-8727-b20e1d89afe5&host=huge-blue
The settings stamp conflict is resolved with defaults_guard.py source-stamp
on the merged tree; the docs settings reference is regenerated with
export-next-docs.ts --settings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a175da-93d2-7310-8727-b20e1d89afe5&host=huge-blue
@teamleaderleo
teamleaderleo temporarily deployed to cmux-tui-merge-tree October 26, 2026 02:27 — with GitHub Actions Inactive
@cursor

cursor Bot commented Oct 26, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot uses usage-based billing for this team and requires on-demand usage to be enabled.

A team admin can enable on-demand usage in the Cursor dashboard.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6-astra xhigh): SHIP at 5353d57

No correctness findings. Earlier fixes are complete: TOGGLE_MODES is restored, and the settings stamp and generated reference match HEAD. No dangling removed-symbol references remain. Conflict resolutions preserve stalled-turn fields, full-access-device routing, and inheritance behavior. Webview behavior matches the new default semantics.

Passed: diff checks, settings stamp validation, generated-reference comparison, and changed TypeScript parsing.

Compilation, typechecking, and browser tests were not run on this head. The reported Cargo pass covers 07a50664. No files modified.

@teamleaderleo
teamleaderleo merged commit aa86a01 into feat-cmux-next Oct 26, 2026
175 of 190 checks passed
@teamleaderleo
teamleaderleo deleted the steer-default-2/new-chat-default-mode branch October 26, 2026 04:03
@github-actions

github-actions Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

This branch was previously deployed

4 inactive (2 outdated) deployments
ci-routing-agent — 5353d57a Deployed Oct 26, 2026 by teamleaderleo via namespace autofix #2908
cmux-tui-merge-tree — 5353d57a Deployed Oct 26, 2026 by teamleaderleo via publish the merge tree #5938
sentry-dsyms — 07a50664 Deployed Oct 26, 2026 by teamleaderleo via upload cmux-tui dSYMs to Sentry #53638
artifacts — 07a50664 Deployed Oct 26, 2026 by teamleaderleo via publish to R2 #53638
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk:normal Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant