René's URL Explorer Experiment


Title: Surface recently-used commands in the Command Palette (⌘K) · Issue #56 · modelstudioai/openwork · GitHub

Open Graph Title: Surface recently-used commands in the Command Palette (⌘K) · Issue #56 · modelstudioai/openwork

X Title: Surface recently-used commands in the Command Palette (⌘K) · Issue #56 · modelstudioai/openwork

Description: Problem or Motivation OpenWork's global command palette (⌘K / Ctrl+K, shipped in #42) lists every registered action grouped by category, but it has no memory of what you actually run. Every time you open it you start at the same static l...

Open Graph Description: Problem or Motivation OpenWork's global command palette (⌘K / Ctrl+K, shipped in #42) lists every registered action grouped by category, but it has no memory of what you actually run. Every time yo...

X Description: Problem or Motivation OpenWork's global command palette (⌘K / Ctrl+K, shipped in #42) lists every registered action grouped by category, but it has no memory of what you actually run. Every tim...

Opengraph URL: https://github.com/modelstudioai/openwork/issues/56

X: @github

direct link

Domain: github.com


Hey, it has json ld scripts:
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Surface recently-used commands in the Command Palette (⌘K)","articleBody":"## Problem or Motivation\n\nOpenWork's global command palette (⌘K / Ctrl+K, shipped in #42) lists every\nregistered action grouped by category, but it has **no memory** of what you\nactually run. Every time you open it you start at the same static list and must\nre-search — even for the command you ran ten seconds ago.\n\nEvery mature command-palette surface fixes this with a **\"Recently used\"**\nsection pinned to the top: VS Code's ⌘⇧P, Raycast, Linear's ⌘K, and Claude Code\nDesktop's command menu all float your most-recent commands first so the actions\nyou use are one keystroke away. OpenWork's palette is the conspicuous exception.\n\n## Proposed Solution\n\nAdd a **\"Recently used\"** group at the top of the command palette:\n\n- Each action **run from the palette** is appended to a recents list (most-recent\n  first), persisted in the renderer's `localStorage` (global, like a shell\n  history), de-duplicated (an action never appears twice), and capped at 6\n  entries.\n- When the palette opens with an **empty** query, the recents render in a\n  dedicated **\"Recently used\"** group **above** the category groups.\n- The recents list is filtered to actions that still exist, aren't excluded from\n  the palette, and can actually run right now (`canExecute`) — so it never\n  surfaces a stale or dead command.\n- As soon as you **type a query**, the recents group is **hidden** — a search\n  should rank by relevance, not recency — and normal cmdk filtering takes over.\n  Clearing the query brings the recents back.\n\n## Feasibility\n\n**Classification: pure frontend — candidate.** No qwen-code backend involvement.\n\n- The palette already lists the centralized action registry and dispatches via\n  `execute()`; recording a recent is a one-line call in the palette's existing\n  `runAction`. No new IPC, no main-process change.\n- Persistence reuses the existing `lib/local-storage.ts` `KEYS`/`get`/`set`\n  helper (one new key, `command-palette-recents`), exactly as other renderer UI\n  prefs do.\n- The ordering logic (`pushRecent`: dedupe → prepend → cap) is a small pure\n  module, fully unit-testable without a DOM.\n- The recents group reuses the same cmdk primitives (`CommandGroup`/`CommandItem`\n  /`CommandShortcut`) the palette already renders. One new i18n key\n  (`commands.recent`) added to all 7 locales for the group heading.\n\n## Alternatives Considered\n\n- **Frecency (frequency + recency) ranking:** richer, but heavier and harder to\n  reason about; a simple most-recent-first list matches shell/VS-Code behaviour\n  and can be layered up later.\n- **Showing recents even while searching:** conflicts with cmdk's relevance\n  filtering and produces duplicate rows; hiding the group for non-empty queries\n  is the standard, cleaner behaviour.\n- **Per-workspace recents:** a global history matches the palette's global,\n  cross-workspace action set and is simpler; can be scoped later if wanted.\n\n## Additional Context\n\nConfirmed genuinely missing: `CommandPalette.tsx` builds its groups purely from\n`actionsByCategory` with no persistence and no recents concept.\n\n### Acceptance criteria (CDP e2e assertion)\n\nA new `e2e/assertions/command-palette-recents.assert.ts` drives the real built\napp over CDP entirely in the draft (no-session) state — no seeded conversation\nand no backend. The palette reads recents fresh from `localStorage` on each open,\nso the assertion seeds them and walks the full lifecycle:\n\n1. Seed `localStorage['craft-command-palette-recents'] = ['app.toggleTheme']`,\n   open the palette → a **\"Recently used\"** group renders exactly one row\n   (`Toggle Theme`), **above** the first category row.\n2. Type `sidebar` → the recents group **hides** (zero recent rows) while normal\n   filtering still surfaces a `Toggle Sidebar` match; clearing the query brings\n   the recents group **back**.\n3. Run a *new*, not-yet-recent action (`Toggle Sidebar`) from the palette, then\n   **reopen** it → the recents group now has **two** rows with `Toggle Sidebar`\n   **first** and `Toggle Theme` second.\n\nThe reopen step is load-bearing: reading the palette after running an action\nproves it actually **persists** what you run and orders recents newest-first —\nnot merely that a seeded list can render. In addition, the pure `pushRecent`\nmodule ships with unit tests covering dedupe, move-to-front, cap, and immutability.\n\nPart of the autonomous desktop-feature loop (`loop-bot`).","author":{"url":"https://github.com/DragonnZhang","@type":"Person","name":"DragonnZhang"},"datePublished":"2026-07-05T01:36:36.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/56/openwork/issues/56"}

route-pattern/_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format)
route-controllervoltron_issues_fragments
route-actionissue_layout
fetch-noncev2:7923e2b4-1d42-32f8-d92e-f8596de14894
current-catalog-service-hash81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114
request-idB76A:10FEF0:1199BF2:1798A6C:6A529A9B
html-safe-nonce8b599593716783b8cecc43edd7f3430839b7d1929cd2cfd830aeeb1ed8789f8d
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCNzZBOjEwRkVGMDoxMTk5QkYyOjE3OThBNkM6NkE1MjlBOUIiLCJ2aXNpdG9yX2lkIjoiMTA1MzMzNzQ3OTgzNzU1NTM1NSIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9
visitor-hmac996d31a532d63cde545026c7d2225c4a808f7b455f72354801464545cc71e6ee
hovercard-subject-tagissue:4811202804
github-keyboard-shortcutsrepository,issues,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///voltron/issues_fragments/issue_layout
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/modelstudioai/openwork/56/issue_layout
twitter:imagehttps://opengraph.githubassets.com/fde356aeb72618fce2f1ad419d209f4ffcd538daa22b1a10fea8619e294b4cbf/modelstudioai/openwork/issues/56
twitter:cardsummary_large_image
og:imagehttps://opengraph.githubassets.com/fde356aeb72618fce2f1ad419d209f4ffcd538daa22b1a10fea8619e294b4cbf/modelstudioai/openwork/issues/56
og:image:altProblem or Motivation OpenWork's global command palette (⌘K / Ctrl+K, shipped in #42) lists every registered action grouped by category, but it has no memory of what you actually run. Every time yo...
og:image:width1200
og:image:height600
og:site_nameGitHub
og:typeobject
og:author:usernameDragonnZhang
hostnamegithub.com
expected-hostnamegithub.com
Noneb9a586c06a05a7a86fc7e3f4dbd03e42f6869085879aa184aa6369456dbd50fb
turbo-cache-controlno-preview
go-importgithub.com/modelstudioai/openwork git https://github.com/modelstudioai/openwork.git
octolytics-dimension-user_id283556804
octolytics-dimension-user_loginmodelstudioai
octolytics-dimension-repository_id1256697754
octolytics-dimension-repository_nwomodelstudioai/openwork
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id1256697754
octolytics-dimension-repository_network_root_nwomodelstudioai/openwork
turbo-body-classeslogged-out env-production page-responsive
disable-turbofalse
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
release07a982c1d40157c619b364352b704c3ce66bb332
ui-targetcanary-1
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/modelstudioai/openwork/issues/56#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fmodelstudioai%2Fopenwork%2Fissues%2F56
GitHub CopilotWrite better code with AIhttps://github.com/features/copilot
GitHub Copilot appDirect agents from issue to mergehttps://github.com/features/ai/github-app
MCP RegistryNewIntegrate external toolshttps://github.com/mcp
ActionsAutomate any workflowhttps://github.com/features/actions
CodespacesInstant dev environmentshttps://github.com/features/codespaces
IssuesPlan and track workhttps://github.com/features/issues
Code ReviewManage code changeshttps://github.com/features/code-review
GitHub Advanced SecurityFind and fix vulnerabilitieshttps://github.com/security/advanced-security
Code securitySecure your code as you buildhttps://github.com/security/advanced-security/code-security
Secret protectionStop leaks before they starthttps://github.com/security/advanced-security/secret-protection
Why GitHubhttps://github.com/why-github
Documentationhttps://docs.github.com
Bloghttps://github.blog
Changeloghttps://github.blog/changelog
Marketplacehttps://github.com/marketplace
View all featureshttps://github.com/features
Enterpriseshttps://github.com/enterprise
Small and medium teamshttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
App Modernizationhttps://github.com/solutions/use-case/app-modernization
DevSecOpshttps://github.com/solutions/use-case/devsecops
DevOpshttps://github.com/solutions/use-case/devops
CI/CDhttps://github.com/solutions/use-case/ci-cd
View all use caseshttps://github.com/solutions/use-case
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
View all industrieshttps://github.com/solutions/industry
View all solutionshttps://github.com/solutions
AIhttps://github.com/resources/articles?topic=ai
Software Developmenthttps://github.com/resources/articles?topic=software-development
DevOpshttps://github.com/resources/articles?topic=devops
Securityhttps://github.com/resources/articles?topic=security
View all topicshttps://github.com/resources/articles
Customer storieshttps://github.com/customer-stories
Events & webinarshttps://github.com/resources/events
Ebooks & reportshttps://github.com/resources/whitepapers
Business insightshttps://github.com/solutions/executive-insights
GitHub Skillshttps://skills.github.com
Documentationhttps://docs.github.com
Customer supporthttps://support.github.com
Community forumhttps://github.com/orgs/community/discussions
Trust centerhttps://github.com/trust-center
Partnershttps://github.com/partners
View all resourceshttps://github.com/resources
GitHub SponsorsFund open source developershttps://github.com/open-source/sponsors
Security Labhttps://securitylab.github.com
Maintainer Communityhttps://maintainers.github.com
Acceleratorhttps://github.com/open-source/accelerator
GitHub Starshttps://stars.github.com
Archive Programhttps://archiveprogram.github.com
Topicshttps://github.com/topics
Trendinghttps://github.com/trending
Collectionshttps://github.com/collections
Enterprise platformAI-powered developer platformhttps://github.com/enterprise
GitHub Advanced SecurityEnterprise-grade security featureshttps://github.com/security/advanced-security
Copilot for BusinessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/enterprise/premium-support
Pricinghttps://github.com/pricing
Search syntax tipshttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
documentationhttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fmodelstudioai%2Fopenwork%2Fissues%2F56
Sign up https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fvoltron%2Fissues_fragments%2Fissue_layout&source=header-repo&source_repo=modelstudioai%2Fopenwork
Reloadhttps://github.com/modelstudioai/openwork/issues/56
Reloadhttps://github.com/modelstudioai/openwork/issues/56
Reloadhttps://github.com/modelstudioai/openwork/issues/56
Please reload this pagehttps://github.com/modelstudioai/openwork/issues/56
modelstudioai https://github.com/modelstudioai
openworkhttps://github.com/modelstudioai/openwork
Notifications https://github.com/login?return_to=%2Fmodelstudioai%2Fopenwork
Fork 3 https://github.com/login?return_to=%2Fmodelstudioai%2Fopenwork
Star 11 https://github.com/login?return_to=%2Fmodelstudioai%2Fopenwork
Code https://github.com/modelstudioai/openwork
Issues 14 https://github.com/modelstudioai/openwork/issues
Pull requests 12 https://github.com/modelstudioai/openwork/pulls
Actions https://github.com/modelstudioai/openwork/actions
Projects https://github.com/modelstudioai/openwork/projects
Security and quality 0 https://github.com/modelstudioai/openwork/security
Insights https://github.com/modelstudioai/openwork/pulse
Code https://github.com/modelstudioai/openwork
Issues https://github.com/modelstudioai/openwork/issues
Pull requests https://github.com/modelstudioai/openwork/pulls
Actions https://github.com/modelstudioai/openwork/actions
Projects https://github.com/modelstudioai/openwork/projects
Security and quality https://github.com/modelstudioai/openwork/security
Insights https://github.com/modelstudioai/openwork/pulse
#57https://github.com/modelstudioai/openwork/pull/57
Surface recently-used commands in the Command Palette (⌘K)https://github.com/modelstudioai/openwork/issues/56#top
#57https://github.com/modelstudioai/openwork/pull/57
enhancementNew feature or requesthttps://github.com/modelstudioai/openwork/issues?q=state%3Aopen%20label%3A%22enhancement%22
loop-bothttps://github.com/modelstudioai/openwork/issues?q=state%3Aopen%20label%3A%22loop-bot%22
https://github.com/DragonnZhang
DragonnZhanghttps://github.com/DragonnZhang
on Jul 5, 2026https://github.com/modelstudioai/openwork/issues/56#issue-4811202804
#42https://github.com/modelstudioai/openwork/pull/42
enhancementNew feature or requesthttps://github.com/modelstudioai/openwork/issues?q=state%3Aopen%20label%3A%22enhancement%22
loop-bothttps://github.com/modelstudioai/openwork/issues?q=state%3Aopen%20label%3A%22loop-bot%22
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.