Troubleshooting
Where to look
The log. Both hosts write the same lines.
| Host | Where |
|---|---|
| VS Code | View › Output › Orbit. On disk: macOS ~/Library/Application Support/Code/logs/<session>/window<N>/exthost/imshaikot.orbit-code/Orbit.log; Linux ~/.config/Code/logs/…; Windows %APPDATA%\Code\logs\… |
| Desktop app | File › Show Log, or <userData>/logs/orbit.log (rotated to .1 past 5 MB); also stderr when started from a terminal |
| The smoke test | .harness/vscode-user/logs/ |
Lines to know: agent: <version> or agent unavailable: <reason> (the Claude Code probe), scene ready for graph <hash>, [webview] layout of … (a layout worker run), graph updated <hash>: +A −R ~C files, E edges in N ms (a live update), [webview] graph update applied, turn done in …. Webview errors arrive prefixed [webview].
The storage. orbit-v1/ holds graph.json and up to four layout-<hash>.bin files.
| Host | Where |
|---|---|
| VS Code (macOS) | ~/Library/Application Support/Code/User/workspaceStorage/<id>/imshaikot.orbit-code/orbit-v1/ |
| Desktop app | ~/Library/Application Support/Orbit Code/workspaces/<hash of the path>/orbit-v1/ on macOS; %APPDATA%\Orbit Code\… on Windows; ~/.config/Orbit Code/… on Linux. A run from source uses Orbit Code Dev |
Reindex (in the legend, or Orbit Code: Reindex Workspace) rebuilds both; deleting the folder is the manual reset.
The page. Developer: Open Webview Developer Tools in VS Code, View › Toggle Developer Tools in the desktop app. window.__orbit has debug, world(), camera() and the rest (The webview).
Claude
- "agent unavailable" in the log, or the drawer says Claude isn't available.
claude --versionmust work; Orbit looks on the configured path, thenPATHplus~/.local/bin,~/.claude/local,/opt/homebrew/binand/usr/local/bin. An editor started from the GUI often lacks the shell'sPATH: setorbit.claude.path(orclaude.pathin the desktop settings), or start the editor from a terminal. The desktop app also asks the login shell for itsPATHat start. - Sessions stay unavailable in a folder. The workspace isn't trusted: VS Code's trust prompt, or File › Trust Folder in the desktop app. The graph works either way.
- A gated tool is denied without asking. Something removed
--permission-prompt-tool stdio; checkclaude.extraArgsfor arguments that change the output or input format. - The process dies mid-turn. It is logged as a warning with the last stderr line, the turn fails, and the next prompt resumes the conversation. A Claude Code upgrade can change the stream-json shapes; the parser was last checked against 2.1.267.
- An MCP change doesn't show in a running conversation. Enabling, disabling or signing in reaches each conversation at its next prompt, not during a turn. A claude.ai connector authorised on claude.ai needs Reconnect.
- History is empty. History reads Claude Code's transcripts under
<config>/projects/<the workspace path with non-alphanumerics as dashes>; a workspace whose transcripts Claude Code keeps under another name (very long paths) shows none. ELECTRON_RUN_AS_NODE=1is inherited by shells that VS Code starts, including Claude Code running inside VS Code. Orbit strips it for Claude and the desktop scripts delete it, but starting VS Code or Electron any other way with it set gives plain Node. Delete it first.
The graph
- An import is missing or stale. Live updates are incremental and some importers aren't re-read; The graph pipeline lists the cases. Reindex.
- A file isn't in the graph. It is ignored by git, beyond
maxFiles, in an always-excluded directory (node_modules,vendor, …), a lock file, or of an extension the language table doesn't know. A file that newly enters the listing without being created (a.gitignorechange) needs some file event to be noticed. - The desktop app indexes a folder as empty (
listed 0 files via git). The folder is inside a repository whose.gitignorecovers it, sogit ls-fileslists nothing. Make it a repository of its own, or move it. - The layout looks old after a layout change. A load with an unchanged hash reuses the cached layout. Reindex, or bump
LAYOUT_VERSIONinpackages/core/src/store.tsto redo it everywhere. - An extractor change doesn't show. Live updates reuse the edges of unchanged files. Reindex.
- Live updates stop in the desktop app on Linux. The recursive
fs.watchsets a watch per directory and a very large folder can exhaust inotify's limit; the log warns. Raisefs.inotify.max_user_watches, or use Reindex. - A directory that gained many files looks crowded. New files are placed, not laid out, and sibling bubbles are packed close. Reindex gives a fresh layout.
The page
- The scene is frozen. Something moves without waking the frame loop; check the console for
[webview]errors. While hidden, the page renders nothing on purpose. - Low frame rate. The stage steps the pixel ratio down (2, 1.5, 1) when frames keep missing 30 fps; the readout at the bottom right shows it. A graph with many thousands of imports draws each Flat arc with fewer segments.
- The webview build fails on a URL in a comment. The constraint check is a plain regex over
packages/webview/src/; nohttp://orhttps://anywhere, comments included. - Styles don't apply from code. The CSP blocks
styleattribute strings; set styles throughelement.style.
Builds and checks
- A stale
dist/after switching branches. Nx restores a cached build whose inputs haven't changed; the environment isn't an input.yarn nx resetafter upgrading Node or changing a build script's environment. @orbit-code/<name>doesn't resolve right after adding a package:yarn installlinks it. A target that "doesn't exist":yarn nx reset.- A dependency-cruiser or TypeScript upgrade. Three of dependency-cruiser's modules are swapped for shims by path regex in
packages/indexer/build.mjs; if a regex stops matching, files fall back to the regex scanner. Compareyarn index . --out before.jsonandafter.json: moredepcruiseFallbacksor far fewer edges means a shim stopped matching. - The harness can't find Chrome. It expects
/Applications/Google Chrome.app/…; pass--chrome <path>. On Ubuntu a snap Chromium can't see the paths written for it; prefer a deb Chrome. - A red harness check. The harness never fails on a bad result. Rerun, and compare with a run on
main: a few checks depend on the graph under test. - The smoke test was killed mid-run. Delete
packages/graph/src/__orbitSmoke.ts,__orbitSmokeMenu.tsand__orbitSmokeMoved.tsyourself. yarn installdownloads a 100 MB Electron.ELECTRON_SKIP_BINARY_DOWNLOAD=1skips it where the desktop app won't run; both workflows set it except in the desktop jobs.- A copy of the workspace builds the wrong sources. Its
node_modules/@orbit-code/*symlinks point into the original; runyarn installin the copy.
Installing
- Gatekeeper or SmartScreen warns about the desktop app. The builds are unsigned (macOS ad hoc); allow it once. Signing is a follow-up in
apps/desktop/README.md. - Notifications don't show from the desktop app on macOS. An unsigned build's notifications may be suppressed; buttons on notifications are macOS only in any case.
- The installed extension doesn't update after
yarn install-local. Reload the open VS Code windows. The dev host (yarn self) never loads the installed copy.