Summary

🎯 Bounty Submission for Issue https://github.com/CapSoftware/Cap/issues/1540 /claim https://github.com/CapSoftware/Cap/issues/1540

This pull request adds a new Raycast extension for controlling the Cap screen recorder directly from Raycast, and extends the Cap desktop app’s deeplink API to support additional recording and device actions. The main changes include new deeplink actions in the desktop app, new Raycast extension commands, and supporting documentation and configuration.

Raycast Extension Integration:

  • Added a new Raycast extension in the raycast-extensions directory, with commands for starting, stopping, pausing, resuming, toggling pause, and taking screenshots in Cap. Each command sends the appropriate deeplink to the Cap desktop app.
  • Included a detailed README.md explaining installation, usage, and the deeplink protocol for the Raycast extension.

Cap Desktop Deeplink API Enhancements:

  • Extended the DeepLinkAction enum and handler in deeplink_actions.rs to support new actions: pause, resume, toggle pause recording, take screenshot, set camera, and set microphone. These are now callable via deeplinks. [1] [2]

Dependency and Configuration Updates:

  • Added the @raycast/api dependency to the main package.json to support Raycast extension development.
  • Created a dedicated package.json for the Raycast extension, specifying commands, dependencies, devDependencies, and scripts for building and publishing the extension.

These changes enable users to control Cap’s core recording features from Raycast, improving workflow efficiency and automation.

Greptile Overview

Greptile Summary

This PR adds Raycast extension support to Cap by creating a new extension in raycast-extensions/ and extending the desktop app’s deeplink API with 6 new actions (pause, resume, toggle-pause, take-screenshot, set-camera, set-microphone).

Key Changes:

  • Extended DeepLinkAction enum in deeplink_actions.rs with 6 new recording control actions
  • Created Raycast extension with 6 commands that communicate via cap-desktop:// deeplinks
  • Added proper documentation and metadata for Raycast extension publishing

Critical Issues Found:

  • Rust code violates NO COMMENTS policy - lines 35, 168, 172, 176, 180, 184, 190 contain inline comments that must be removed per CLAUDE.md
  • Variable shadowing bug in SetMicrophone handler - label is extracted but mic_label is passed to function (line 192-194)
  • Start recording command broken - opens settings page instead of actually starting recording
  • Monorepo pollution - @raycast/api added to root package.json instead of staying isolated in raycast-extensions/
  • Format inconsistency - pause/resume commands use {} while stop/toggle use null for empty actions

Confidence Score: 2/5

  • Not safe to merge - contains critical logic bug, coding standard violations, and broken start recording functionality
  • Score of 2 reflects multiple critical issues: (1) variable shadowing bug in SetMicrophone that will cause runtime failure, (2) start-recording command doesn’t actually start recording, (3) code comment violations that will fail CI linting checks per workspace rules, (4) monorepo dependency pollution
  • apps/desktop/src-tauri/src/deeplink_actions.rs requires immediate fixes for comments and variable bug; raycast-extensions/src/start-recording.tsx needs complete reimplementation

Important Files Changed

Filename Overview
apps/desktop/src-tauri/src/deeplink_actions.rs Added 6 new deeplink actions (pause, resume, toggle-pause, screenshot, set-camera, set-mic) with code comment violations and variable shadowing bug
raycast-extensions/src/start-recording.tsx Start recording command opens settings page instead of starting recording - doesn’t match intended functionality
raycast-extensions/src/pause-recording.tsx Sends pause_recording deeplink with inconsistent format ({} vs null)
raycast-extensions/src/resume-recording.tsx Sends resume_recording deeplink with inconsistent format ({} vs null)
package.json Added @raycast/api to root package.json dependencies, should be isolated to raycast-extensions directory

Sequence Diagram

sequenceDiagram
participant User
participant Raycast
participant RaycastExtension
participant Desktop as Cap Desktop App
participant DeeplinkHandler as Deeplink Handler
participant RecordingModule as Recording Module
User->>Raycast: Execute command (e.g. "Pause Recording")
Raycast->>RaycastExtension: Trigger command handler
RaycastExtension->>RaycastExtension: Build deeplink action JSON
Note over RaycastExtension: Format: {"pause_recording": {}}
RaycastExtension->>RaycastExtension: Encode to cap-desktop:// URL
RaycastExtension->>Desktop: Open deeplink URL
Desktop->>DeeplinkHandler: Parse URL & extract action
DeeplinkHandler->>DeeplinkHandler: Deserialize JSON to DeepLinkAction enum
DeeplinkHandler->>RecordingModule: Execute action (e.g. pause_recording)
RecordingModule->>Desktop: Update recording state
Desktop-->>User: Recording paused
RaycastExtension->>User: Show toast notification

(2/5) Greptile learns from your feedback when you react with thumbs up/down!

Context used:

  • Context from dashboard - CLAUDE.md (source)

Claim

Total prize pool $200.10
Total paid $0
Status Pending
Submitted February 03, 2026
Last updated February 03, 2026

Contributors

DA

David Pratama

@daviddprtma

100%

Sponsors

CA

Cap

@CapSoftware

$200
AB

Abhishek Verma

@w3Abhishek

$0.10