[FEATURE] Open local file links (e.g. PDF) in the macOS default app instead of the in-app viewer

Resolved 💬 1 comment Opened Jun 13, 2026 by odakin Closed Jun 16, 2026

Problem / Motivation

When the assistant outputs a markdown link to a local file, clicking it opens the file inside an in-app viewer rather than handing off to the macOS default application for that file type.

For lightweight text formats this is fine — rendering a .md file inside the app is actually nice. The problem is document types that have a dedicated native handler:

  • A link to a .pdf opens in the in-app viewer instead of Preview (or whatever PDF app the user has set as default).
  • Same concern for types like .tex (TeXShop), etc.

The user's macOS "default app" settings for these file types are silently bypassed, so the rendered links can't be used the way a Finder double-click would be.

Proposed Solution

When a local file link is clicked, branch on file type:

  • PDF and other types with a native desktop handler → hand off to macOS via NSWorkspace (open in the user's default app, e.g. PDF → Preview).
  • Markdown / plain text → keep the current in-app rendering (this is good, please don't remove it).

Optionally a small affordance (a "open in default app" / "reveal in Finder" button on the in-app viewer) would cover the cases the heuristic gets wrong.

Alternatives Considered

  • Always hand off everything to macOS — works, but loses the nice in-app markdown preview, so a type-based branch is preferable.
  • Status quo — the user has to copy the path and open it from a terminal, which makes the rendered PDF links effectively dead.

Additional Context

  • Claude for Mac (desktop app) v1.12603.1, macOS 14.7.4.
  • Originally raised via support email 2026-05-01; the support bot redirected to file here. Re-confirmed still reproducing on the current build (2026-06-13).
  • A related concern from the same email — accidental conversation deletion (Delete adjacent to Archive) — is not filed because a delete-confirmation dialog has since been added, which resolves the data-loss risk.

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗