Conversation
- Add temp-check/ to gitignore - Fix Prettier formatting - Add README with feature docs and sensor explanation - Add Temp Check Raycast extension - Initial commit
|
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 10-15 business days. Once the PR is approved and merged, the extension will be available on our Store. |
Greptile SummaryNew extension that monitors Mac CPU temperature via IOKit thermal sensors, with a menu bar display and a detailed list view. The extension compiles a lightweight Objective-C binary from source during build to read thermal data without elevated permissions.
Confidence Score: 2/5
Important Files Changed
Last reviewed commit: b43537d |
| @@ -0,0 +1,4 @@ | |||
| { | |||
| "printWidth": 100, | |||
There was a problem hiding this comment.
Non-standard printWidth value
All extensions in this repository must use printWidth: 120 per the standard Raycast Prettier configuration. This is set to 100.
| "printWidth": 100, | |
| "printWidth": 120, |
Context Used: Rule from dashboard - What: All extensions must use the standard Raycast Prettier configuration with printWidth: 120 and... (source)
| @@ -0,0 +1,10 @@ | |||
| # Temp Check Changelog | |||
|
|
|||
| ## [Initial Version] - 2026-02-17 | |||
There was a problem hiding this comment.
Use {PR_MERGE_DATE} placeholder
Changelog entries for new PRs must use the {PR_MERGE_DATE} placeholder instead of a hardcoded date. The actual merge date is set automatically during release.
| ## [Initial Version] - 2026-02-17 | |
| ## [Initial Version] - {PR_MERGE_DATE} |
Context Used: Rule from dashboard - What: Changelog entries must use {PR_MERGE_DATE} placeholder in titles, be placed at the top of th... (source)
| export interface Preferences { | ||
| temperatureUnit: "celsius" | "fahrenheit"; | ||
| refreshInterval: string; | ||
| warningThreshold: string; | ||
| criticalThreshold: string; | ||
| } |
There was a problem hiding this comment.
Remove manual Preferences interface
Preference types are auto-generated in raycast-env.d.ts when the extension builds. Manually defining a Preferences interface is redundant and can drift out of sync with package.json. Remove this interface and use Preferences from the auto-generated types directly (it's globally available).
All call sites (temperature-monitor.tsx, menubar-temperature.tsx, useTemperatureUnit.ts) should update their imports to stop importing Preferences from this file.
Context Used: Rule from dashboard - What: Don't manually define Preferences for getPreferenceValues() or commends Argument interfa... (source)
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
| extern IOHIDEventSystemClientRef IOHIDEventSystemClientCreate(CFAllocatorRef allocator); | ||
| extern int IOHIDEventSystemClientSetMatching(IOHIDEventSystemClientRef client, CFDictionaryRef match); | ||
| extern IOHIDEventRef IOHIDServiceClientCopyEvent(IOHIDServiceClientRef, int64_t, int32_t, int64_t); | ||
| extern CFStringRef IOHIDServiceClientCopyProperty(IOHIDServiceClientRef service, CFStringRef property); | ||
| extern double IOHIDEventGetFloatValue(IOHIDEventRef event, int32_t field); |
There was a problem hiding this comment.
Missing extern declaration for IOHIDEventSystemClientCopyServices
All other private IOKit functions (IOHIDEventSystemClientCreate, IOHIDServiceClientCopyEvent, etc.) have explicit extern declarations, but IOHIDEventSystemClientCopyServices (used on line 23) does not. This relies on implicit function declaration, which assumes the function returns int. On 64-bit systems, this truncates the returned pointer value and can cause a crash. Modern Clang versions (Apple Clang 15+) treat implicit function declarations as errors by default.
Add the missing declaration alongside the others:
| extern IOHIDEventSystemClientRef IOHIDEventSystemClientCreate(CFAllocatorRef allocator); | |
| extern int IOHIDEventSystemClientSetMatching(IOHIDEventSystemClientRef client, CFDictionaryRef match); | |
| extern IOHIDEventRef IOHIDServiceClientCopyEvent(IOHIDServiceClientRef, int64_t, int32_t, int64_t); | |
| extern CFStringRef IOHIDServiceClientCopyProperty(IOHIDServiceClientRef service, CFStringRef property); | |
| extern double IOHIDEventGetFloatValue(IOHIDEventRef event, int32_t field); | |
| extern IOHIDEventSystemClientRef IOHIDEventSystemClientCreate(CFAllocatorRef allocator); | |
| extern int IOHIDEventSystemClientSetMatching(IOHIDEventSystemClientRef client, CFDictionaryRef match); | |
| extern CFArrayRef IOHIDEventSystemClientCopyServices(IOHIDEventSystemClientRef client); | |
| extern IOHIDEventRef IOHIDServiceClientCopyEvent(IOHIDServiceClientRef, int64_t, int32_t, int64_t); | |
| extern CFStringRef IOHIDServiceClientCopyProperty(IOHIDServiceClientRef service, CFStringRef property); |
|
Thanks for your contribution 🔥 We already have an extension in the Store that deals with system monitoring. Could we consider enhancing the existing extension below instead of creating another one? I think you can enhance the existing extension to add the temp-check feature If there are unique features or workflows you’re aiming to add, we’d love to hear them and see if they can be integrated into this to avoid duplication and improve discoverability.
|
|
Thanks for the feedback @0xdhrv — that makes sense. Happy to contribute CPU temperature monitoring to the existing System Monitor extension instead. The core value-add here is reading thermal sensor data via IOKit HID APIs through a lightweight Objective-C binary compiled from source (no sudo, no kernel extensions, no native node addons). This gives:
System Monitor currently only has battery temperature. I'll open a PR on the System Monitor extension adding a Temperature section to both the list view and menu bar command. I'll close this PR once that's up. |
Description
Temp Check gives you instant access to your Mac's CPU temperature — right from the menu bar or a detailed Raycast command.
Why this extension?
There's no built-in way to check CPU temperature on macOS without third-party apps. Existing solutions are either paid, bloated, or require granting elevated permissions. Temp Check seamlessly reads thermal sensors directly via macOS IOKit APIs. This means no sudo, no background daemons, no kernel extensions, and no pop-ups!
Features
Cmd+Uin the list view, or from the menu bar dropdown. Preference persists across sessions via LocalStorage.How it works
The extension compiles a lightweight Objective-C binary from source (
tools/temp-reader.m) during the build step — no opaque binaries are bundled. The binary uses IOKit HID thermal APIs to read all available temperature sensors. It's compiled as a universal binary (arm64 + x86_64) so it runs natively on both Apple Silicon and Intel Macs.A note on "Die Sensors" vs CPU cores
macOS exposes thermal die sensors (e.g.
PMU tdie1), not per-core temperature readings. The number of die sensors does not match the number of CPU cores — for example, an M4 Max has 14 cores but 10 die sensors. The extension clearly labels these as "Die Sensor 1", "Die Sensor 2", etc. and shows the actual core count separately so users understand what they're seeing.Screencast
Checklist
npm run buildand tested this distribution build in Raycastassetsfolder are used by the extension itselfREADMEare placed outside of themetadatafolder