Raycast integration research and home-bar UI prototype

NO
8d ago
+1271-20

Summary

This PR has three parts:

  • Research. docs/raycast-integration.md answers six questions about integrating with Raycast:
    • Triggering Raycast from outside.
    • Getting data back.
    • Discovering installed extensions on disk.
    • A companion Raycast extension.
    • Display mapping.
    • Prior art.
  • Recommendation and agreed design.
    • A local unix-socket API in the app, with a notchctl CLI.
    • A small companion Raycast extension.
    • A launcher panel that reads installed manifests and launches commands by raycast:// deeplink.
    • VISION.md items 2 and 6 are updated to match.
  • UI-only prototype with placeholder data (nothing talks to Raycast):
    • A home bar under now playing: built-in panel buttons, pinned Raycast commands, and "⋯".
    • A Raycast panel, an argument form, and placeholder calendar, mirror and shelf panels.
    • A Settings → Raycast page.
    • It reuses HoverButton, the output picker's row style, and the existing settings Form style.

Deeplink behavior (tested manually on Raycast 2.8.0)

  • Raycast asks for confirmation the first time each command is launched by deeplink, including with launchType=background.
  • After "Always Open Command", later launches are silent, with no Raycast window. The approval survives a Raycast restart.
  • Prefilling arguments works.

Prototype-only changes to existing code

  • The window height went from 190 to 300 (compactExpandedMaxHeight) so the bar and panels fit.
  • compactMode now defaults to true.
  • AudioOutputRowButtonStyle is no longer private, so the Raycast rows can reuse it.
  • New strings are not in Localizable.xcstrings yet.

Test plan

  • scripts/dev.sh build succeeds, with origin/main merged in.
  • Run scripts/dev.sh, open the notch, and check the bar under the player. Clicking pins should show a tick, open the form, or close the notch.
  • Check that "⋯" and the calendar, mirror and shelf buttons morph into panels of different sizes.
  • Check that Settings → Raycast updates the bar immediately.
  • Check that clicks just below the notch still pass through, now that the window is taller.
  • Check on a display without a notch.

🤖 Generated with Claude Code


Summary by cubic

Documents Raycast integration options and prototypes the agreed UI with placeholder data only — nothing talks to Raycast yet.

docs/raycast-integration.md answers six questions (deeplink launching, getting data back, discovering installed extensions, a companion extension, display mapping, and prior art) and recommends a local unix-socket API with a notchctl CLI plus a small companion Raycast extension. Manually tested on Raycast 2.8.0: the first deeplink launch of each command shows a confirmation prompt, "Always Open Command" makes later launches silent, and that choice survives a Raycast restart.

Prototype

  • Adds a home bar under now playing with built-in panel buttons, pinned Raycast commands, and "⋯"; panels morph the notch to per-feature sizes.
  • Adds a Settings → Raycast page to pin, reorder, and preview commands; pins update the bar live but aren't persisted.
  • Prototype-only changes: window height raised from 190 to 300, compactMode now defaults to true, AudioOutputRowButtonStyle is public, and new strings aren't in Localizable.xcstrings yet.