tinyhumansai/openhuman · warning · Error
Cannot reveal "${path}" on this device — it is a path on the
Error message
Cannot reveal "${path}" on this device — it is a path on the openhuman-core host's filesystem (a different OS). Open it on the machine running the core. What it means
revealPath refuses to open a path that belongs to another OS's filesystem: isForeignFsPath matched the path shape against the client OS (e.g. C:\... on macOS/Linux, or /Users/... on Windows). The path came from a remote openhuman-core running on a different machine/OS (issue #4278), so a local file opener could never find it — this error replaces a cryptic opener failure.
Source
Thrown at app/src/utils/openUrl.ts:117
* deep link (e.g. `obsidian://`) may silently no-op because the
* target app isn't installed.
*
* Outside Tauri this is a no-op — there's no OS shell to drive.
*
* Rejects with a clear error when `path` belongs to a different OS than this
* device (issue #4278) — e.g. a shared `openhuman-core` running on another OS
* served its own absolute path — instead of letting the opener fail cryptically.
*/
export const revealPath = async (path: string): Promise<void> => {
if (!isTauri()) return;
let clientOs: string | undefined;
try {
clientOs = await platform();
} catch {
clientOs = undefined;
}
if (isForeignFsPath(path, clientOs)) {
throw new Error(
`Cannot reveal "${path}" on this device — it is a path on the openhuman-core host's filesystem (a different OS). Open it on the machine running the core.`
);
}
await revealItemInDir(path);
};
View on GitHub (pinned to a221052e0d)
Solutions
- Open the path on the machine actually running the core (sit down at it / remote desktop)
- If the core is local and this still fires, the path itself is malformed — check how the caller produced it
- In the UI, pre-check the path shape and show an 'on host machine' notice instead of a reveal button
Example fix
// before
await revealPath(path);
// after — gate the affordance instead of failing on click
const looksWindows = /^[A-Za-z]:[\\/]/.test(path);
if (looksWindows !== (clientOs === 'windows')) {
showNotice(t('paths.onHostMachine'));
} else {
await revealPath(path);
} Defensive patterns
Strategy: validation
Validate before calling
function looksForeign(path: string, clientOs: string | undefined): boolean {
const isWinPath = /^[A-Za-z]:[\\/]/.test(path);
const isPosixPath = path.startsWith('/') || path.startsWith('\\\\');
if (clientOs === 'windows') return isPosixPath && !isWinPath;
return isWinPath;
} Prevention
- Tag paths that originate from a remote core when they enter the UI and render an 'on host machine' notice instead of a reveal button
- Test reveal flows against a remote-core profile on each OS
- Never pass raw server paths straight to shell openers without an OS-shape check
When it happens
Trigger: Clicking reveal-in-folder on an artifact/file path returned by a remote core — a shared openhuman-core on another OS (iOS client, LAN-shared core) serving Windows paths to a macOS client or vice versa.
Common situations: Remote-core setups; cross-OS development against a Windows core from a macOS client; paths surfaced in chat that refer to the host machine.
Related errors
- RPC envelope contains undefined data
- Model testing is only available in the desktop app.
- Restart Core is only available in the desktop app.
- Core RPC token unavailable in Tauri; local RPC auth cannot b
- Core RPC returned an error
AI-assisted analysis of tinyhumansai/openhuman@a221052e0d (2026-08-16).
Data as JSON: /api/errors/f76fab82e14411e8.
Report an issue: GitHub.