Summary
Add an "Open in…" dropdown to the content browser for the selected item, offering quick handoff to external tools:
- Finder — reveal the synced file/folder
- Terminal — open at the item's local directory
- VS Code — open the file/folder
- Cursor — open the file/folder
- Claude Desktop
- ChatGPT
- Codex
- Copy path — copy the path to the clipboard
Why
Once an item is selected (and synced locally), the natural next step is often to open it somewhere else — edit it in an editor, poke at it in a terminal, or hand it to an AI tool. Today there's no path out of the app; you have to find the synced folder manually.
Suggested placement
Alongside the existing actions in the file-tree panel header (renderPanelHeader in src/renderer/file-tree.js, next to Sync selected… / Review changes…), driven by state.tree.selectedPaths. A single split/dropdown button keeps the header uncluttered.
Implementation notes / open questions
- Local-path dependency: Finder, Terminal, VS Code, Cursor, and Codex all need a local filesystem path, which only exists after the item has been synced. We'll need to map the selected DA path → local path (via the sync-folder store) and either disable those targets or trigger a sync first when no local copy exists. Copy path could offer either the DA path or the local path.
- App detection: only show targets for apps that are actually installed (e.g. probe known bundle IDs / app paths on macOS) rather than listing everything.
- Launch mechanism: Finder/Terminal via
shell.openPath / open; editors via their CLI (code, cursor) or bundle ID; AI tools via their URL scheme or app handoff (needs investigation per app).
- macOS-first is fine given the app is Apple-Silicon-only today.
Acceptance criteria
Summary
Add an "Open in…" dropdown to the content browser for the selected item, offering quick handoff to external tools:
Why
Once an item is selected (and synced locally), the natural next step is often to open it somewhere else — edit it in an editor, poke at it in a terminal, or hand it to an AI tool. Today there's no path out of the app; you have to find the synced folder manually.
Suggested placement
Alongside the existing actions in the file-tree panel header (
renderPanelHeaderinsrc/renderer/file-tree.js, next to Sync selected… / Review changes…), driven bystate.tree.selectedPaths. A single split/dropdown button keeps the header uncluttered.Implementation notes / open questions
shell.openPath/open; editors via their CLI (code,cursor) or bundle ID; AI tools via their URL scheme or app handoff (needs investigation per app).Acceptance criteria