René's URL Explorer Experiment


Title: Surface recently-used commands in the Command Palette (⌘K) by DragonnZhang · Pull Request #57 · modelstudioai/openwork · GitHub

Open Graph Title: Surface recently-used commands in the Command Palette (⌘K) by DragonnZhang · Pull Request #57 · modelstudioai/openwork

X Title: Surface recently-used commands in the Command Palette (⌘K) by DragonnZhang · Pull Request #57 · modelstudioai/openwork

Description: Closes #56 What & why OpenWork's command palette (⌘K / Ctrl+K, shipped in #42) lists every registered action grouped by category but keeps no memory of what you run — you re-search even for the command you ran seconds ago. Every mature palette (VS Code ⌘⇧P, Raycast, Linear ⌘K, Claude Code Desktop's command menu) pins a "Recently used" section to the top so your frequent actions are one keystroke away. This adds it. Changes Persisted recents (apps/electron/src/renderer/components/command-palette-recents.ts): a small module storing the most-recently-run action IDs in the renderer's localStorage (newest first, de-duplicated, capped at 6) via the shared lib/local-storage.ts helper (one new key, command-palette-recents). The ordering (pushRecent: dedupe → prepend → cap) is a pure function. Palette integration (CommandPalette.tsx): record each action run from the palette; render a "Recently used" CommandGroup above the categories only when the query is empty, and hide it while searching so cmdk's relevance filtering takes over. Recents are filtered to actions that still exist, aren't excluded, and can run right now (canExecute) — never a stale or dead row. i18n: one new key commands.recent added to all 7 locales. Tests: command-palette-recents.test.ts (pure pushRecent: dedupe, move-to-front, cap, immutability) + e2e/assertions/command-palette-recents.assert.ts. Frontend-only — no qwen-code backend change, no new IPC, no main-process change. Verification bun run typecheck:all — zero delta vs main (identical error hash/count; the 11 pre-existing apps/electron errors are unrelated to this change; packages/shared and packages/ui are clean). bun test — zero delta vs main (56 pre-existing baseline failures on both main and this branch, 0 new); the new pushRecent unit suite is 6/6 pass. bun run electron:build:renderer — ✅ builds cleanly (the renderer bundle contains the palette change). CDP assertion could not run in this environment (same block as prior loop rounds): the sandbox's egress policy prevents fetching the Electron binary and the libsignal GitHub dependency (WhatsApp worker), so electron:build:main and app launch fail here. The assertion is written and self-contained for CI / reviewer validation. What the CDP assertion checks (command-palette-recents.assert.ts) Drives the real built app over CDP in the draft (no-session) state; the palette reads recents fresh from localStorage on each open: Seed localStorage['craft-command-palette-recents'] = ['app.toggleTheme'], open the palette → a "Recently used" group renders exactly one row (Toggle Theme), above the first category row. Type sidebar → the recents group hides (0 recent rows) while filtering still surfaces a Toggle Sidebar match; clearing the query brings recents back. Run a new, not-yet-recent action (Toggle Sidebar) from the palette, then reopen → the recents group now has two rows with Toggle Sidebar first, Toggle Theme second — proving the palette persists what you run and orders newest-first. Generated by Claude Code

Open Graph Description: Closes #56 What & why OpenWork's command palette (⌘K / Ctrl+K, shipped in #42) lists every registered action grouped by category but keeps no memory of what you run — you re-search even for...

X Description: Closes #56 What & why OpenWork's command palette (⌘K / Ctrl+K, shipped in #42) lists every registered action grouped by category but keeps no memory of what you run — you re-search ...

Opengraph URL: https://github.com/modelstudioai/openwork/pull/57

X: @github

direct link

Domain: github.com

route-pattern/:user_id/:repository/pull/:id/files(.:format)
route-controllerpull_requests
route-actionfiles
fetch-noncev2:38c79e51-38fb-7945-a1e2-cc8b8d100b3f
current-catalog-service-hashae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b
request-idD9C0:14F0B0:2D687B6:3DD263D:6A53D4D8
html-safe-nonce6c9ac62aed746ba45d90203a7f4a4402f0341c81f40a95bf7881a85e7733307a
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJEOUMwOjE0RjBCMDoyRDY4N0I2OjNERDI2M0Q6NkE1M0Q0RDgiLCJ2aXNpdG9yX2lkIjoiMTgwNTY2NjM5NjkwNDA4NDY5NiIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9
visitor-hmac9adc876b406518295c9980e388c74258e4ce593051299d316a9c0a4d65517dfc
hovercard-subject-tagpull_request:3992330836
github-keyboard-shortcutsrepository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///pull_requests/show/files
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/modelstudioai/openwork/pull/57/files
twitter:imagehttps://avatars.githubusercontent.com/u/52599892?s=400&v=4
twitter:cardsummary_large_image
og:imagehttps://avatars.githubusercontent.com/u/52599892?s=400&v=4
og:image:altCloses #56 What & why OpenWork's command palette (⌘K / Ctrl+K, shipped in #42) lists every registered action grouped by category but keeps no memory of what you run — you re-search even for...
og:site_nameGitHub
og:typeobject
hostnamegithub.com
expected-hostnamegithub.com
Noneb9a586c06a05a7a86fc7e3f4dbd03e42f6869085879aa184aa6369456dbd50fb
turbo-cache-controlno-preview
diff-viewunified
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 full-width
disable-turbotrue
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
release07a982c1d40157c619b364352b704c3ce66bb332
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/modelstudioai/openwork/pull/57/files#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fmodelstudioai%2Fopenwork%2Fpull%2F57%2Ffiles
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%2Fpull%2F57%2Ffiles
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%2Fpull_requests%2Fshow%2Ffiles&source=header-repo&source_repo=modelstudioai%2Fopenwork
Reloadhttps://github.com/modelstudioai/openwork/pull/57/files
Reloadhttps://github.com/modelstudioai/openwork/pull/57/files
Reloadhttps://github.com/modelstudioai/openwork/pull/57/files
Please reload this pagehttps://github.com/modelstudioai/openwork/pull/57/files
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
Sign up for GitHub https://github.com/signup?return_to=%2Fmodelstudioai%2Fopenwork%2Fissues%2Fnew%2Fchoose
terms of servicehttps://docs.github.com/terms
privacy statementhttps://docs.github.com/privacy
Sign inhttps://github.com/login?return_to=%2Fmodelstudioai%2Fopenwork%2Fissues%2Fnew%2Fchoose
DragonnZhanghttps://github.com/DragonnZhang
mainhttps://github.com/modelstudioai/openwork/tree/main
loop/command-palette-recentshttps://github.com/modelstudioai/openwork/tree/loop/command-palette-recents
Conversation 0 https://github.com/modelstudioai/openwork/pull/57
Commits 3 https://github.com/modelstudioai/openwork/pull/57/commits
Checks 0 https://github.com/modelstudioai/openwork/pull/57/checks
Files changed https://github.com/modelstudioai/openwork/pull/57/files
Please reload this pagehttps://github.com/modelstudioai/openwork/pull/57/files
Surface recently-used commands in the Command Palette (⌘K) https://github.com/modelstudioai/openwork/pull/57/files#top
Show all changes 3 commits https://github.com/modelstudioai/openwork/pull/57/files
b980e44 Surface recently-used commands in the command palette claude Jul 5, 2026 https://github.com/modelstudioai/openwork/pull/57/commits/b980e4403109b780bd92a7f325c84fa304245827
8f9e01c docs(loop): mark command-palette-recents pr-open (#57) claude Jul 5, 2026 https://github.com/modelstudioai/openwork/pull/57/commits/8f9e01c677de7208ae27ea11b1dbd08c726775a2
b7862bc chore: merge main into loop/command-palette-recents claude Jul 6, 2026 https://github.com/modelstudioai/openwork/pull/57/commits/b7862bcdf14728e3edc008ac243c613c647fa24b
Clear filters https://github.com/modelstudioai/openwork/pull/57/files
Please reload this pagehttps://github.com/modelstudioai/openwork/pull/57/files
Please reload this pagehttps://github.com/modelstudioai/openwork/pull/57/files
CommandPalette.tsx https://github.com/modelstudioai/openwork/pull/57/files#diff-5d460a7f27563f787ea12b256589e1a3674b46cc8e8e57923a99da5742f0c4f7
command-palette-recents.test.ts https://github.com/modelstudioai/openwork/pull/57/files#diff-64259410860085651ae4e78ee1c798a8aa4d204c503a97d55e3d1aefb86ad390
command-palette-recents.ts https://github.com/modelstudioai/openwork/pull/57/files#diff-9b21917aa7cdc4c1d1b788426a7d101fa51a106bb680f3597e539e00fe6ea445
local-storage.ts https://github.com/modelstudioai/openwork/pull/57/files#diff-a2cea16cfa3d50835d57cdaf23004f4d45eb927cfeb38092cefbf20f53640832
feature-ledger.md https://github.com/modelstudioai/openwork/pull/57/files#diff-2ae33a5d5ac052f40e2dfa56a7c3a17353f66baa0e674a59cc228e165b47c1af
command-palette-recents.assert.ts https://github.com/modelstudioai/openwork/pull/57/files#diff-96e35cecf4481c0c18d196c77fb8ce682e7176e646e8f6f1aa9df02ff4731cfa
de.json https://github.com/modelstudioai/openwork/pull/57/files#diff-a07701a4bc4176fccd6c7f3e46bf998f5837c2b31a637c3368b7e2bd4945196f
en.json https://github.com/modelstudioai/openwork/pull/57/files#diff-650c08c76762dcf05df7a125fe3b6ddae49ec33728cbe9faa1cdb21d7a685fbd
es.json https://github.com/modelstudioai/openwork/pull/57/files#diff-17b9af294bafe3747f72d5e451d5bfca9e55f81e78c2cc4eaf8990c9144cf70b
hu.json https://github.com/modelstudioai/openwork/pull/57/files#diff-6214170c87d0d435f797d6f51294f090b12c8e0da8444c00e4cfed01fd0010ef
ja.json https://github.com/modelstudioai/openwork/pull/57/files#diff-249ff4abe047742db0ebfebd9afa8f6caa0fb2f3c2f471323f7f399b845b8933
pl.json https://github.com/modelstudioai/openwork/pull/57/files#diff-c1520578547c50e85365472656e70246092c4844b0010e599a5b4c2b315818ad
zh-Hans.json https://github.com/modelstudioai/openwork/pull/57/files#diff-f6d1257160b49bb15b0c0d38bd31c98febbbbe1eb1475f4c0be0e9d99d24c954
apps/electron/src/renderer/components/CommandPalette.tsxhttps://github.com/modelstudioai/openwork/pull/57/files#diff-5d460a7f27563f787ea12b256589e1a3674b46cc8e8e57923a99da5742f0c4f7
View file https://github.com/modelstudioai/openwork/blob/b7862bcdf14728e3edc008ac243c613c647fa24b/apps/electron/src/renderer/components/CommandPalette.tsx
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/modelstudioai/openwork/pull/57/{{ revealButtonHref }}
https://github.com/modelstudioai/openwork/pull/57/files#diff-5d460a7f27563f787ea12b256589e1a3674b46cc8e8e57923a99da5742f0c4f7
https://github.com/modelstudioai/openwork/pull/57/files#diff-5d460a7f27563f787ea12b256589e1a3674b46cc8e8e57923a99da5742f0c4f7
https://github.com/modelstudioai/openwork/pull/57/files#diff-5d460a7f27563f787ea12b256589e1a3674b46cc8e8e57923a99da5742f0c4f7
https://github.com/modelstudioai/openwork/pull/57/files#diff-5d460a7f27563f787ea12b256589e1a3674b46cc8e8e57923a99da5742f0c4f7
https://github.com/modelstudioai/openwork/pull/57/files#diff-5d460a7f27563f787ea12b256589e1a3674b46cc8e8e57923a99da5742f0c4f7
https://github.com/modelstudioai/openwork/pull/57/files#diff-5d460a7f27563f787ea12b256589e1a3674b46cc8e8e57923a99da5742f0c4f7
apps/electron/src/renderer/components/__tests__/command-palette-recents.test.tshttps://github.com/modelstudioai/openwork/pull/57/files#diff-64259410860085651ae4e78ee1c798a8aa4d204c503a97d55e3d1aefb86ad390
View file https://github.com/modelstudioai/openwork/blob/b7862bcdf14728e3edc008ac243c613c647fa24b/apps/electron/src/renderer/components/__tests__/command-palette-recents.test.ts
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/modelstudioai/openwork/pull/57/{{ revealButtonHref }}
apps/electron/src/renderer/components/command-palette-recents.tshttps://github.com/modelstudioai/openwork/pull/57/files#diff-9b21917aa7cdc4c1d1b788426a7d101fa51a106bb680f3597e539e00fe6ea445
View file https://github.com/modelstudioai/openwork/blob/b7862bcdf14728e3edc008ac243c613c647fa24b/apps/electron/src/renderer/components/command-palette-recents.ts
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/modelstudioai/openwork/pull/57/{{ revealButtonHref }}
apps/electron/src/renderer/lib/local-storage.tshttps://github.com/modelstudioai/openwork/pull/57/files#diff-a2cea16cfa3d50835d57cdaf23004f4d45eb927cfeb38092cefbf20f53640832
View file https://github.com/modelstudioai/openwork/blob/b7862bcdf14728e3edc008ac243c613c647fa24b/apps/electron/src/renderer/lib/local-storage.ts
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/modelstudioai/openwork/pull/57/{{ revealButtonHref }}
https://github.com/modelstudioai/openwork/pull/57/files#diff-a2cea16cfa3d50835d57cdaf23004f4d45eb927cfeb38092cefbf20f53640832
https://github.com/modelstudioai/openwork/pull/57/files#diff-a2cea16cfa3d50835d57cdaf23004f4d45eb927cfeb38092cefbf20f53640832
docs/loop/feature-ledger.mdhttps://github.com/modelstudioai/openwork/pull/57/files#diff-2ae33a5d5ac052f40e2dfa56a7c3a17353f66baa0e674a59cc228e165b47c1af
View file https://github.com/modelstudioai/openwork/blob/b7862bcdf14728e3edc008ac243c613c647fa24b/docs/loop/feature-ledger.md
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/modelstudioai/openwork/pull/57/{{ revealButtonHref }}
https://github.com/modelstudioai/openwork/pull/57/files#diff-2ae33a5d5ac052f40e2dfa56a7c3a17353f66baa0e674a59cc228e165b47c1af
Please reload this pagehttps://github.com/modelstudioai/openwork/pull/57/files
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.