[FEATURE]: Session pinning in the Desktop app (TUI parity) · Issue #55764 · anomalyco/opencode · GitHub
Skip to content

[FEATURE]: Session pinning in the Desktop app (TUI parity) #55764

Open

Description

@gugabguerra

Feature hasn't been suggested before.

  • I have verified this feature I'm about to request hasn't been suggested before.

Describe the enhancement you want to request

Note on prior requests

Describe the enhancement you want to request

The TUI can pin sessions (session.pin.toggle / ctrl+f, jump with <leader>1..9). Desktop and Web
have no way to pin a session, so long-running or important ones are only findable by scrolling back
through the date-grouped list.

I'd like a Pinned group at the top of the Desktop home session list, plus pin/unpin in a
session's row menu, persisted across restarts.

I'm a user, not a developer, so I can't implement this myself — filing it so it's tracked. #28813
already worked out the two possible approaches (backend pinned_at + API for TUI/Desktop/Web
parity, or a client-side store in packages/app for Desktop/Web only) if that helps whoever picks
it up.

Is Desktop session pinning planned or tracked internally? #36193 shows the TUI side got an internal
issue, so I'm wondering whether a Desktop equivalent exists and I just couldn't find it.

Scope

Activity

  1. opencode-agent commented on Oct 15, 2026

    @opencode-agent
    Contributor

    Thanks for the detailed write-up and for checking earlier requests! You're asking for session pinning in the Desktop app: pin/unpin from a session's row menu, a Pinned group above today/yesterday/older on the home session list, kept across restarts, like the TUI's session.pin.toggle.

    I couldn't find an open Desktop-side issue for this, so this one can track it. Maintainers will consider it.

    Related issues:

    This can't be done as a Desktop extension today, because extensions have no way to add to the session list or a session's row menu.

  2. Dante-dan commented on Oct 15, 2026

    @Dante-dan
    Contributor

    I'd like to take this on. For a bounded first version, I propose keeping pins as a local UI preference using the existing packages/app/src/runtime/persistence/storage.ts persistence layer, scoped to the stable server identity and keyed by session ID. This preserves pins across Desktop restarts without a database/API migration or changing TUI pins. Because this is shared app code, Web would get the same behavior within its own local storage; pins would not sync between clients/devices.

    On current dev (41cb349):

    • Add Pin/Unpin to the existing row menu in home/sessions/view.tsx, and derive a Pinned group before the date groups in home/sessions/controller.tsx. Pinned rows appear once, keep the existing updated-time ordering, and obey the selected project/worktree filter. Unpinning returns a row to its date group without modifying the session's timestamp.
    • Keep pinned sessions outside the current 64-row recent-list trimming. On restart, resolve saved IDs through the existing session.get API, then merge/deduplicate before grouping; otherwise older pins would disappear when absent from the recent index. Hide archived/deleted sessions, remove confirmed missing IDs, and retain pins on transient connection errors.
    • Start the new persisted schema empty; do not import or rewrite TUI's session.json. This chooses the client-local direction discussed in [FEATURE]: Session pinning support for Desktop/Web (shared backend) #28813, rather than its broader shared-backend/TUI migration.

    I would cover pin/unpin grouping, old-pin restoration beyond the recent limit, project/server isolation, missing/archived sessions, persistence reload, and the existing row interactions with focused tests and UI verification.

    Could a maintainer approve this scope and persistence direction before implementation, or indicate whether a shared-backend design is required instead?

  3. Nasrallah1995 commented on Oct 20, 2026

    @Nasrallah1995

    +1 from a long-running Windows desktop user (Desktop 2.1.0, Windows 10.0.26200).

    My sessions are not chats — they are month-long project threads (urban planning indicators, GIS/Excel/PPT pipelines). A few must stay reachable for months; today the only way back is scrolling a date-grouped list that degrades as it grows.

    Scope I actually need:

    • Pinned group above Today/Yesterday/Older, independent of last-activity, so a pinned session never sinks because a newer one ran.
    • Pin/unpin from the row menu AND from the open session header.
    • Persisted across restarts and project switches — a pinned session from project A stays visible from project B with its project name shown. This is the real gap vs TUI quick-slots.
    • Stable order inside Pinned (manual, or pinned_at desc).

    Not asking for: message/text pinning (#55195), tab pinning, cross-device sync.

    The client-side store in packages/app that #28813 outlined is acceptable if backend pinned_at + API is too large for 2.0 — the feature matters more than where the flag lives.

    بالعربية: أحتاج تثبيت المحادثات المهمة للرجوع السريع بدل التمرير في قائمة طويلة.

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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions