/claim #1540 Fixes #1540

I am still trying to record a demo, currently unable to do that due to the error below when i run this command: pnpm tauri:build --debug; is there a specific node version that the repo recommends, only this commands fails, commands like pnpm dev:desktop works fine.

Error:

@cap/web-domain:build: import { styleText } from "node:util";
@cap/web-domain:build: ^^^^^^^^^
@cap/web-domain:build: SyntaxError: The requested module 'node:util' does not provide an export named 'styleText'
@cap/web-domain:build: at ModuleJob._instantiate (node:internal/modules/esm/module_job:122:21)
@cap/web-domain:build: at async ModuleJob.run (node:internal/modules/esm/module_job:188:5)
@cap/web-domain:build:
@cap/web-domain:build: Node.js v20.2.0
@cap/env:build:  ELIFECYCLE  Command failed with exit code 1.
@cap/web-domain:build:  ELIFECYCLE  Command failed with exit code 1.
@cap/env:build: ERROR: command finished with error: command (/Users/onyedikachi/Documents/codes/Cap/packages/env) /Users/onyedikachi/.nvm/versions/node/v20.2.0/bin/pnpm run build exited (1)
@cap/web-domain:build: ERROR: command finished with error: command (/Users/onyedikachi/Documents/codes/Cap/packages/web-domain) /Users/onyedikachi/.nvm/versions/node/v20.2.0/bin/pnpm run build exited (1)
@cap/env#build: command (/Users/onyedikachi/Documents/codes/Cap/packages/env) /Users/onyedikachi/.nvm/versions/node/v20.2.0/bin/pnpm run build exited (1)
@cap/web-domain#build: command (/Users/onyedikachi/Documents/codes/Cap/packages/web-domain) /Users/onyedikachi/.nvm/versions/node/v20.2.0/bin/pnpm run build exited (1)
Tasks: 0 successful, 2 total
Cached: 0 cached, 2 total
Time: 1.834s
Failed: @cap/env#build, @cap/web-domain#build
ERROR run failed: command exited (1)
beforeBuildCommand `pnpm turbo build --filter @cap/desktop` failed with exit code 1
Error [tauri_cli_node] beforeBuildCommand `pnpm turbo build --filter @cap/desktop` failed with exit code 1
 ELIFECYCLE  Command failed with exit code 1.
 ELIFECYCLE  Command failed with exit code 1.

Greptile Summary

Extends Cap’s deeplink API with 8 new actions for recording control and adds a functional Raycast extension for controlling Cap from Raycast.

Major Changes:

  • Added deeplink actions: pause_recording, resume_recording, toggle_pause_recording, restart_recording, take_screenshot, set_microphone, set_camera, list_devices, get_status
  • Refactored duplicate capture target resolution logic into resolve_capture_target() helper
  • Created complete Raycast extension in extensions/raycast/ with 8 commands
  • Added extensions/* to pnpm workspace configuration

Issues Found:

  • GetStatus and ListDevices actions print JSON responses to stdout via CAP_DEEPLINK_RESPONSE: prefix, but the Raycast extension has no mechanism to capture this output since deeplinks are fire-and-forget URL scheme calls
  • recording-status command triggers the action but cannot display the actual status data
  • Form descriptions reference non-existent “List Devices” command in Raycast (not defined in package.json)
  • The stdout-based response mechanism needs a different approach (IPC commands, polling, or events) for bidirectional communication

Confidence Score: 3/5

  • Mostly functional but has unimplemented features (status/list devices responses not captured)
  • Core recording control actions work correctly and integrate with existing functions, but GetStatus and ListDevices actions are incomplete as their responses cannot be received by the Raycast extension through the current deeplink architecture
  • Pay close attention to apps/desktop/src-tauri/src/deeplink_actions.rs (stdout response mechanism) and extensions/raycast/src/recording-status.tsx (incomplete implementation)

Important Files Changed

Filename Overview
apps/desktop/src-tauri/src/deeplink_actions.rs Adds 8 new deeplink actions (pause, resume, toggle pause, restart, screenshot, set microphone/camera, list devices, get status) with proper error handling and refactored capture target resolution
extensions/raycast/src/utils.ts Utility functions for creating deeplink actions and checking Cap installation status
extensions/raycast/src/start-recording.tsx Form-based command for starting recordings with screen/window selection and instant/studio mode
extensions/raycast/src/recording-status.tsx Command that triggers GetStatus action but doesn’t receive or display the response data

Sequence Diagram

sequenceDiagram
participant R as Raycast Extension
participant OS as macOS URL Handler
participant C as Cap Desktop App
participant DR as Deeplink Router
participant RA as Recording Actions
Note over R,RA: Start Recording Flow
R->>R: User fills form (screen/window, mode)
R->>R: Create JSON action payload
R->>OS: Open cap-desktop://action?value=<encoded-json>
OS->>C: Route deeplink URL
C->>DR: handle(url)
DR->>DR: Parse URL & deserialize action
DR->>RA: execute(StartRecording)
RA->>RA: set_camera_input()
RA->>RA: set_mic_input()
RA->>RA: resolve_capture_target()
RA->>RA: start_recording()
R->>R: Show HUD "Starting recording..."
Note over R,RA: Control Recording Flow
R->>OS: Open cap-desktop://action?value={"pause_recording":{}}
OS->>C: Route deeplink
C->>DR: handle(url)
DR->>RA: execute(PauseRecording)
RA->>RA: pause_recording()
R->>R: Show HUD "Pausing recording..."
Note over R,RA: Query Status Flow (Current Issue)
R->>OS: Open cap-desktop://action?value={"get_status":{}}
OS->>C: Route deeplink
C->>DR: handle(url)
DR->>RA: execute(GetStatus)
RA->>RA: Read app state
RA->>RA: println!("CAP_DEEPLINK_RESPONSE:{json}")
Note over R,RA: Response printed to stdout but not captured by Raycast
R->>R: Show HUD (no actual status data)
Note over R,RA: Screenshot Flow
R->>R: User selects screen/window
R->>OS: Open cap-desktop://action?value={"take_screenshot":{...}}
OS->>C: Route deeplink
C->>DR: handle(url)
DR->>RA: execute(TakeScreenshot)
RA->>RA: resolve_capture_target()
RA->>RA: take_screenshot()
R->>R: Show HUD "Taking screenshot..."

Claim

Total prize pool $200
Total paid $0
Status Pending
Submitted January 22, 2026
Last updated January 22, 2026

Contributors

DA

David Anyatonwu

@onyedikachi-david

100%

Sponsors

CA

Cap

@CapSoftware

$200