Inline chat images outside $HOME fail with asset protocol not configured
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 78/100
- Issue type
- Bug
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- typescript
Research direction
Start with src/features/chat/ui/MarkdownImage.tsx and src-tauri/tauri.conf.json, then reproduce with a markdown image in an attached project outside $HOME. Check that the asset protocol scope covers the session cwd without weakening unrelated restrictions. Done means the image renders inline and the asset-protocol denial no longer appears for an allowed project path.
Written by the indexing model from the issue text.
Description
Before filing
- I searched open and closed issues for duplicates.
- I reproduced this on the latest release.
- This is one bug, not several bundled together.
Closest existing issue
#166 is the nearest report. That one is the click-to-open / opener allowlist failure (Not allowed to open path). This issue is the separate inline-preview failure: the same local image is refused by the Tauri asset protocol before it can render in chat.
What's broken
Local images inside an attached project folder do not render inline in chat when that folder is outside $HOME. Berd logs asset protocol not configured to allow the path and the image stays broken, even though the file exists, is readable, and is inside the session cwd.
Steps to reproduce
- Launch Berd 0.6.2 on macOS.
- Open a project whose working directory is outside
$HOME. The failing path here was an attached project under/Users/Shared/.... - Confirm the folder is the session cwd.
- In that chat, have the agent emit a normal markdown image pointing at a real PNG/JPEG inside the attached folder, for example
or a relative path that resolves to the same file. - Look at the rendered message.
Model/provider does not appear to matter. Reproduced with existing project images that the agent and the shell can both read.
What you expected to happen
Because the image is a local file inside the attached project / session cwd, Berd should render it inline the same way it does for images under $HOME.
MarkdownImage already resolves local markdown images against the session cwd and then calls convertFileSrc(..., "asset"). That path should be allowed for attached project folders, not only $HOME and Berd's own media caches.
What actually happened
The image does not render inline. berd.log records:
[tauri::protocol::asset][ERROR] asset protocol not configured to allow the path: /Users/Shared/.../file.png
This is not a missing file, a bad markdown path, or a macOS permission problem:
- The same files exist and are readable.
/usr/bin/openopens them.- The project folder is attached as cwd.
- The failure is Tauri refusing the
asset:protocol for a path outside the compiled scope.
src-tauri/tauri.conf.json on v0.6.2 enables assetProtocol with this scope only:
$APPDATA/avatars/media/**/*$APPDATA/artifacts/media/**/*$APPDATA/project-artifacts/media/**/*$APPDATA/home-widget-media/**/*$HOME/**/*$TEMP/**/*
An attached project under /Users/Shared is outside every one of those globs, so inline preview is denied by configuration.
How often does it happen?
Every time — reliably reproducible
Berd version
0.6.2
Operating system
macOS (Apple Silicon)
Model and provider
n/a for the render itself. Observed in a Goose chat when the transcript included local markdown images from the attached project.
Relevant log output
[2026-08-21][01:48:12][tauri::protocol::asset][ERROR] asset protocol not configured to allow the path: /Users/Shared/PROJECTS_shared/LALA/content-lab/LANGUAGE/indonesian/production-pipeline/2.keyframes/production-readiness/family-world-packets/ID-WORLD-ID-RESTAURANT-PARMESAN-01/environment-layout/v1/review/preview/clean-plan.png
[2026-08-21][23:26:03][tauri::protocol::asset][ERROR] asset protocol not configured to allow the path: /Users/Shared/PROJECTS_shared/LALA/content-lab/LANGUAGE/indonesian/production-pipeline/2.keyframes/revision-evidence/2026-08-21-family-occupied-hero-first/heroes/03-banyak/ID-FN-030--ms01/candidate-b.png
The same class of path failed repeatedly in this log (41 asset protocol not configured lines). /usr/bin/open on the same machine opens those files successfully.
Screenshots, recordings, or other context
src/features/chat/ui/MarkdownImage.tsx routes local markdown images through convertFileSrc(resolvedPath, "asset") after checking that the resolved path is within the session cwd. The chat UI is doing the intended thing; the asset-protocol allowlist then rejects the file because attached project roots outside $HOME are not in scope.
Related but separate: clicking the same path shows Not allowed to open path (#166). That is the opener plugin allowlist. This issue is only the inline preview / asset-protocol deny.
Workaround that works today: copy or symlink the image into $HOME (for example ~/Downloads) and link that copy instead.
- Dominant language
- TypeScript
- Stars
- 928
- Forks
- 121
- Avg merge
- 1d 8h
- Merged PRs (30d)
- 100
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from block/berd
-
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
-
Saving a custom provider does not set Goose's default provider/model, leaving Goose unavailable Openbug
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
-
bug
Difficulty 1/5 Under an hour Newbie friendliness 91/100
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
Eynzof/Hermes-CN-Desktop#610 ·
-
bug clawsweeper:linked-pr-open clawsweeper:needs-live-repro clawsweeper:no-new-fix-pr impact:message-loss issue-rating: 🐚 platinum hermit P2 regression
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
-
calcite-components needs triage refactor
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
Esri/calcite-design-system#15203 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 90/100
danielmiessler/LifeOS#2218 ·