Skip to content

Desktop 3.17.2 (macOS): composer permission-mode selection silently reverts in background chats (never persisted until a message is sent) #1386

Open

Description

@alex-knyaz

App version: ZCode Desktop 3.17.2 (Electron)
OS: macOS 15.6 (Darwin 24.6.0, Apple Silicon)

Summary

In a background/side chat, selecting a different permission mode in the composer (e.g. "Ask before changes" → "Autonomous mode") silently reverts to the previous mode once the chat loses focus and is re-opened. The selection is never persisted anywhere until a message is sent.

Steps to reproduce

  1. Have two chats in the same project: chat A in the foreground, chat B in the background/side pane.
  2. In chat B, open the composer mode picker and select Autonomous mode. Do not send a message.
  3. Click away to chat A (or another view) and wait ~30 s (the session-data keep-warm window), then re-open chat B.
  4. The mode picker shows Ask before changes again.

Expected

The selected permission mode persists for the chat until changed, ideally persisted immediately like other composer selections.

Actual

Verified with a 0.5 s polling monitor across all persistence locations while reproducing twice:

  • Toggling the mode produces zero writes and zero log lines. None of these change: task-index tasks.mode, session.permission in the CLI db, the persisted composer draft in Local Storage (its mode field keeps the old value and old timestamp), and no renderer/host events are emitted.
  • When the background conversation store is closed after the keep-warm window and re-opened, the composer re-initializes from the persisted draft + task meta — which still hold build — so the picker visibly snaps back.
  • The selection only becomes durable if a message is sent while it is still selected: the mode rides with the turn and is written into the task index at turn completion (observed tasks.mode flip build → guarded exactly at turn.completed).

So any mode change made in a background chat is lost unless the user sends before the store recycles — which also explains "the agent does not respect the mode" follow-ups: the message goes out with the old mode.

Workaround

Pick the mode and immediately send the next message without switching chats. After the first turn completes in the new mode, it sticks (recorded in task meta).

Suggested fix

Persist the composer mode selection immediately (draft-level, like modelSelection appears to be), and/or respect the draft mode when the conversation projection re-initializes after a store recycle instead of falling back to task-meta/build.

Activity

  1. github-actions commented on Nov 3, 2026

    @github-actions

    👋 感谢你的反馈,我们已经收到。

    • 维护者看到后会尽快回复你。
    • 状态保持为 status: 待评估,你可以随时补充信息。
    • 信息不全时我们会打上 needs: 更多信息 标签并 @ 你。

    👋 Thanks — we've received your issue.

    • A maintainer will get back to you as soon as we can.
    • Status stays at status: 待评估 (Triage); feel free to add context.
    • If we need more details, we'll add needs: 更多信息 and ping you.
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

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions