Repository navigation
Add menu-bar-icon-search extension - #31267
Conversation
|
Congratulations on your new Raycast extension! 🚀 We're currently experiencing a high volume of incoming requests. As a result, the initial review may take up to 15 business days. Once the PR is approved and merged, the extension will be available on our Store. |
|
0xdhrv
left a comment
There was a problem hiding this comment.
Hey @mguellsegarra 👋
Thanks for your contribution 🔥 Really nice standalone Accessibility approach for opening menu bar app icons (including ones hidden via System Settings → Menu Bar), and clear callout vs Raycast’s built-in Search Menu Bar Items.
Here's everything I found in this pass:
Blocking
- CHANGELOG still describes the old reveal/restore behavior, but the helper now only presses via Accessibility (and the README correctly says it does not reveal the icon). Please update the Initial Release bullets so the Store changelog matches the shipping behavior, e.g. drop or rewrite:
- Temporarily reveal hidden icons in the real menu bar, then restore their hidden state and the pointer position.Optional
- You can simplify the failure toast with
showFailureToast(error)from@raycast/utils(add that dependency if you go this route). - A second Window Capture screenshot for the Accessibility-required empty state would help Store users understand setup.
When the blocking items are done, press Ready for review. I've converted the PR to a draft until then 😊
Feel free to reach me here or on Slack if anything is unclear.
|
Hey @0xdhrv 👋 thanks a lot for the review and the kind words! All done:
Marking it as ready for review. Let me know if anything else comes up 🙌 |
0xdhrv
left a comment
There was a problem hiding this comment.
Hey @mguellsegarra 👋
Thanks for your contribution 🔥 Nice work wiring Accessibility via the helper and cleaning up the CHANGELOG / showFailureToast after the last round.
Here's everything I found in this pass:
Blocking
- Retake
metadata/menu-bar-icon-search-2.pngwith a fresh Capture Window of the real Accessibility-denied empty state - Update the PR description — it still describes reveal / restore pointer behavior, but the extension is AXPress-only now (matches README / CHANGELOG)
issue (blocking): metadata/menu-bar-icon-search-2.png does not look like a clean fresh Window Capture.
What I saw on the file history:
- the first upload of
-2.pngcarried Adobe XMP (XMP Core), mismatched EXIF vs PNG size, and flat black corners - the current
-2.pngshares bit-identical background rows withmetadata/menu-bar-icon-search.png, and the same PNGdate:createas shot 1, while onlydate:timestampis newer — that reads as a re-saved / edited derivative of the Sep 18 asset, not a new capture
Please retake it with the Capture Window command (tick Save to Metadata):
- Run the extension with
npm run dev - Put the helper / Raycast in a real AX-denied state (revoke Accessibility for the helper or Raycast, then reopen the command)
- Capture the empty state (
Accessibility Access Required/ grant-access copy) and overwrite-2.png
Docs: https://developers.raycast.com/basics/prepare-an-extension-for-store#screenshots
issue (blocking): The PR body still says the extension temporarily reveals the icon, clicks it, then restores hidden state and pointer position. The current code path is AXPress-only. Please update the description so Store reviewers and future readers match README / CHANGELOG.
When the blocking items are done, press Ready for review. I've converted the PR to a draft until then 😊
Feel free to reach me here or on Slack if anything is unclear.
Replace metadata/menu-bar-icon-search-2.png with a fresh Capture Window of the real Accessibility-denied empty state, as requested in review.
|
@0xdhrv done! thanks again ;) |
0xdhrv
left a comment
There was a problem hiding this comment.
Hey @mguellsegarra 👋
Thanks for your contribution 🔥 Nice work retaking the Accessibility empty-state screenshot and cleaning up CHANGELOG / showFailureToast after the last rounds — the AXPress-only helper approach is clear in README and code.
Here's everything I found in this pass:
Blocking
- Update the PR description — it still describes reveal / restore pointer behavior, but the extension is AXPress-only now (matches README / CHANGELOG)
Should fix
- Prefer shipping the native helper the same way as Color Picker — a Swift Package under
swift/with Raycast's@raycastmacros, imported from TypeScript viaswift:../swift/…— instead ofbuild-helper.sh(swiftc/lipo) + committedassets/menubar-helper+execFile. That keeps the helper typed, rebuilds withray build, and avoids committing architecture-specific binaries.
Reference: color-picker (swift/color-picker/Package.swift, Sources/, and import("swift:…") in src/).
As mentioned in the Swift tools here ↗
When the blocking items are done, press Ready for review. I've converted the PR to a draft until then 😊
Feel free to reach me here or on Slack if anything is unclear.
Replace build-helper.sh, the committed universal binary and execFile with a Swift package under swift/ using @raycast macros, imported from TypeScript via swift:. Accessibility is now granted to Raycast. Retake the empty-state screenshot to match.
|
Hey @0xdhrv 👋 thanks again for the review!
Marking it as ready for review 🙌 |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Want reviews to match your repository better? Bugbot Learning can learn team-specific rules from PR activity. A team admin can enable Learning in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 7b87807. Configure here.
| } finally { | ||
| setIsRefreshing(false); | ||
| } | ||
| }, []); |
There was a problem hiding this comment.
Refresh race overwrites newer scan
Medium Severity
Overlapping refresh calls are not serialized, so an earlier scanMenuBar can finish after a later one and replace newer items. isRefreshing can also flip off while a second scan is still running. Opening the command and pressing the refresh shortcut during the first scan triggers this.
Additional Locations (1)
Reviewed by Cursor Bugbot for commit 7b87807. Configure here.
| @@ -0,0 +1,7 @@ | |||
| # Menu Bar Icon Search Changelog | |||
|
|
|||
| ## [Initial Release] - 2026-10-05 | |||
There was a problem hiding this comment.
The Initial Release entry in CHANGELOG.md replaces {PR_MERGE_DATE} with a fixed date. The repository requires that placeholder so the changelog gets the date when the PR merges. Restore it before merging.
| ## [Initial Release] - 2026-10-05 | |
| ## [Initial Release] - {PR_MERGE_DATE} |
Rule Used: What: In Raycast extension changelogs, {PR_MERGE_DATE} is a template variable that should be left as-is in Initial Release entries. Do not suggest replacing it with actual dates or "Unreleased" sections. Why: This is the standard Raycast conventio... (source)
Prompt To Fix With AI
This is a comment left during a code review.
Path: extensions/menu-bar-icon-search/CHANGELOG.md
Line: 3
Comment:
**Changelog date will be wrong**
The Initial Release entry in `CHANGELOG.md` replaces `{PR_MERGE_DATE}` with a fixed date. The repository requires that placeholder so the changelog gets the date when the PR merges. Restore it before merging.
```suggestion
## [Initial Release] - {PR_MERGE_DATE}
```
**Rule Used:** What: In Raycast extension changelogs, `{PR_MERGE_DATE}` is a template variable that should be left as-is in Initial Release entries. Do not suggest replacing it with actual dates or "Unreleased" sections. Why: This is the standard Raycast conventio... ([source](https://app.greptile.com/raycast/github/raycast/extensions/-/custom-context?memory=799af734-ebd9-4b40-9ffd-97a70fc71c8a))
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.|
Published to the Raycast Store: |
|
🎉 🎉 🎉 We've rewarded your Raycast account with some credits. You will soon be able to exchange them for some swag. |


Description
Adds Menu Bar Icon Search, a Raycast extension for finding and opening macOS menu bar app icons, including icons hidden through macOS 27’s Menu Bar settings.
Search by app or item name, choose a result with the arrow keys, and press Return to open its menu. A native Swift module, built with Raycast's Swift tools, presses the selected item through macOS Accessibility; it does not reveal the icon or change its Menu Bar setting. A hidden item's menu may open at the upper-left corner of the screen because macOS does not expose an on-screen position for its icon. Raycast requires Accessibility access; no separate app needs to be installed.
This searches app icons on the right side of the menu bar. Raycast’s built-in Search Menu Bar Items command searches the active app’s File, Edit, and other menus.
Source and setup details: https://github.com/mguellsegarra/menu-bar-icon-search
Screencast
CleanShot.2026-09-18.at.16.59.00.mp4
Checklist
npm run buildand tested this distribution build in Raycastassetsfolder are used by the extension itselfREADMEare placed outside of themetadatafolderNote
Medium Risk
The extension requires Accessibility trust and programmatically presses menu bar UI on the user’s Mac; behavior depends on per-app AX exposure and could misfire or open menus in unexpected positions for hidden items.
Overview
Adds a new Menu Bar Icon Search Raycast extension under
extensions/menu-bar-icon-searchso users can search and open right-side macOS menu bar app icons (including ones hidden via Menu Bar settings) without revealing them in the bar.The Search Menu Bar Icons command shows a filterable list with cached last-scan results, optional inclusion of system items (preference), refresh, and copy-details for diagnostics. Selecting an item closes Raycast and triggers activation via a native Swift module that scans running apps through Accessibility (
kAXExtrasMenuBarAttribute,AXPress) and deduplicates entries; untrusted AX state surfaces an empty view with a link to Accessibility settings.Packaging includes TypeScript UI (
search-menu-bar.tsx), Swift package with Raycast macros (scan/press), and standard extension metadata (README, changelog, MIT license, eslint/tsconfig).Reviewed by Cursor Bugbot for commit 7b87807. Bugbot is set up for automated code reviews on this repo. Configure here.