Repository navigation
feat(raycast): add Raycast extension for Cap screen recording (#28) - #3910
jeffrey-graham wants to merge 15 commits into
Conversation
Added a new Raycast extension for Cap Screen Recorder with commands to start and stop recordings and open the dashboard.
|
@jeffrey-graham is attempting to deploy a commit to the Cap Software Inc Team on Vercel. A member of the Team first needs to authorize it. |
| "commands": [ | ||
| { | ||
| "name": "start-recording", | ||
| "title": "Start Recording", | ||
| "description": "Start a new Cap screen recording with your default capture settings", | ||
| "mode": "no-view" |
There was a problem hiding this comment.
extensions/raycast/ contains only package.json, with no matching command files under src/. Setting mode to no-view does not implement a command, so none of the three advertised actions can run. Add command files that open the Cap recording links or dashboard URL and read the declared preferences.
Prompt To Fix With AI
This is a comment left during a code review.
Path: extensions/raycast/package.json
Line: 10-15
Comment:
**Commands cannot run**
`extensions/raycast/` contains only `package.json`, with no matching command files under `src/`. Setting `mode` to `no-view` does not implement a command, so none of the three advertised actions can run. Add command files that open the Cap recording links or dashboard URL and read the declared preferences.
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.| "name": "cap-screen-recorder", | ||
| "title": "Cap Screen Recorder", | ||
| "description": "Start and stop Cap.so recordings and open your Cap dashboard directly from Raycast.", | ||
| "icon": "cap-icon.png", |
There was a problem hiding this comment.
The declared cap-icon.png is absent. The extension directory contains only package.json, so Raycast cannot resolve the icon when checking or packaging the extension. Include the image at extensions/raycast/assets/cap-icon.png.
Prompt To Fix With AI
This is a comment left during a code review.
Path: extensions/raycast/package.json
Line: 6
Comment:
**Required icon is missing**
The declared `cap-icon.png` is absent. The extension directory contains only `package.json`, so Raycast cannot resolve the icon when checking or packaging the extension. Include the image at `extensions/raycast/assets/cap-icon.png`.
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.| "$schema": "https://www.raycast.com/schemas/extension.json", | ||
| "name": "cap-screen-recorder", |
There was a problem hiding this comment.
The new file uses spaces throughout, but AGENTS.md requires tab indentation for JSON and forbids per-file overrides. Format this file with tabs before merging to meet the repository requirement.
Context Used: AGENTS.md (source)
Prompt To Fix With AI
This is a comment left during a code review.
Path: extensions/raycast/package.json
Line: 2-3
Comment:
**JSON uses spaces**
The new file uses spaces throughout, but `AGENTS.md` requires tab indentation for JSON and forbids per-file overrides. Format this file with tabs before merging to meet the repository requirement.
**Context Used:** AGENTS.md ([source](https://github.com/capsoftware/cap/blob/main/AGENTS.md))
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.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!
Updated the icon file from 'cap-icon.png' to 'cap-icon.svg' in the package.json for the Raycast extension.
|
@greptileai All three review points are now resolved on
|
| export default async function Command() { | ||
| const { captureMode = "fullscreen" } = getPreferenceValues<Preferences>(); | ||
| await closeMainWindow(); | ||
| await open(`cap://start-recording?mode=${encodeURIComponent(captureMode)}`); |
There was a problem hiding this comment.
Both recording commands send URLs that Cap rejects. DeepLinkAction::try_from requires the host action and a value query parameter containing JSON. This command uses start-recording as the host, and stop-recording.ts uses stop-recording. Neither reaches a recording action, so users cannot start a recording or stop an active one.
Use the registered cap-desktop://action?value=... format for both commands. Starting also needs a valid StartRecording payload with a concrete capture target; passing fullscreen, window, or area as mode does not meet that contract.
Prompt To Fix With AI
This is a comment left during a code review.
Path: extensions/raycast/src/start-recording.ts
Line: 10
Comment:
**Recording commands do nothing**
Both recording commands send URLs that Cap rejects. `DeepLinkAction::try_from` requires the host `action` and a `value` query parameter containing JSON. This command uses `start-recording` as the host, and `stop-recording.ts` uses `stop-recording`. Neither reaches a recording action, so users cannot start a recording or stop an active one.
Use the registered `cap-desktop://action?value=...` format for both commands. Starting also needs a valid `StartRecording` payload with a concrete capture target; passing `fullscreen`, `window`, or `area` as `mode` does not meet that contract.
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.|
@greptileai Updated |
| captureSystemAudio = true, | ||
| } = getPreferenceValues<Preferences>(); | ||
|
|
||
| const resolvedTarget = targetName.trim() || "Built-in Retina Display"; |
There was a problem hiding this comment.
If the Mac has no display named Built-in Retina Display, the default settings send a target that Cap cannot find. Cap requires an exact name match, so it starts nothing, while Raycast still says recording started. This affects setups such as a Mac mini with an external monitor.
Require users to choose a valid target before running, or resolve an available display instead of using this fixed fallback.
Prompt To Fix With AI
This is a comment left during a code review.
Path: extensions/raycast/src/start-recording.ts
Line: 18
Comment:
**Default screen may not exist**
If the Mac has no display named `Built-in Retina Display`, the default settings send a target that Cap cannot find. Cap requires an exact name match, so it starts nothing, while Raycast still says recording started. This affects setups such as a Mac mini with an external monitor.
Require users to choose a valid target before running, or resolve an available display instead of using this fixed fallback.
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.…d display fallback
|
@greptileai Removed the hardcoded |
|
Closing this incomplete manifest stub to avoid review noise alongside #3683. |
Fixes #28
/claim #28
Summary
extensions/raycast/package.json) supportingstart-recording,stop-recording, andopen-dashboardcommands viacap://deep-links.

Confidence Score: 5/5
The PR appears safe to merge; all previous findings are addressed and no new actionable issues were established.Summary
Adds Raycast commands to start and stop Cap recordings and open the dashboard.
All five previous findings are addressed. No new actionable issues were established.
Reviews (4) · Last reviewed commit: "fix(raycast): validate non-empty targetN..." · Reviewed by Greptile