You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[FEATURE]: Session pinning in the Desktop app (TUI parity) #55764
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
In: pin/unpin a session, Pinned group above today/yesterday/older, persists across restarts.
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.
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.
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?
+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.
بالعربية: أحتاج تثبيت المحادثات المهمة للرجوع السريع بدل التمرير في قائمة طويلة.
Activity
opencode-agent commentedon Oct 15, 2026
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.
Dante-dan commentedon Oct 15, 2026
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.tspersistence 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):home/sessions/view.tsx, and derive a Pinned group before the date groups inhome/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.session.getAPI, 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.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?
Nasrallah1995 commentedon Oct 20, 2026
+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_atdesc).Not asking for: message/text pinning (#55195), tab pinning, cross-device sync.
The client-side store in
packages/appthat #28813 outlined is acceptable if backendpinned_at+ API is too large for 2.0 — the feature matters more than where the flag lives.بالعربية: أحتاج تثبيت المحادثات المهمة للرجوع السريع بدل التمرير في قائمة طويلة.