Oats debugging
Use when reproducing or diagnosing runtime behavior in the running oats desktop app — driving and inspecting its windows via the oats-desktop MCP server (execute JS, read DOM, invoke backend commands). Pairs with systematic-debugging.From its SKILL.md
npx -y skills add ariso-ai/oats --skill oats-debuggingAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 23 stars23 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
2.5 KB, as published. Nobody here has run it
Debugging the running oats app via MCP
oats ships a Tauri MCP server (tauri-plugin-mcp) that lets you drive the live app —
list windows, screenshot, execute JS in a webview, and call backend commands. Use it to
verify a fix in the real app, not just in unit tests. Pair this with superpowers'
systematic-debugging for the methodology.
Enable the server
It is registered in .mcp.json as oats-desktop. In Claude Code, it may be
disabled by default in .claude/settings.local.json (disabledMcpjsonServers);
remove it from that list or approve the server when prompted. The app must be launched
with the MCP feature:
npm run tauri:dev:debug # = tauri dev --features mcp
Run it in the background with the sandbox disabled (cargo must compile and the GUI / network must spawn). It's a never-exiting dev server — don't wait on it to "finish".
Windows (what you'll see)
Routes live in src/main.ts. See oats-architecture for the full map. Quick version:
settings— the settings window (pre-created hidden).library— titled "Meetings"; the main user-facing window.main— headless/blank BootstrapView; a blank screenshot of it is expected.
execute_js gotchas (these will bite you)
- Hidden WKWebViews are JS-suspended on macOS —
execute_jstimes out until the window is shown and focused. Show the window first. - Backend bridge:
window.__TAURI__is not exposed (the app uses ESM@tauri-apps/api). Call commands viawindow.__TAURI_INTERNALS__.invoke('cmd_name', args). - No top-level
await— make the last expression a promise; the tool resolves it. - A blank window with no JS bridge usually means the Vue bundle failed to load — check the vite dev log for an unresolved import (the router statically imports every view, so one bad import breaks the whole graph).
Typical loop
- Launch
tauri:dev:debugin the background. - List windows;
showthe target window before anyexecute_js. - Inspect via JS / screenshot; reproduce the issue.
- Drive the backend with
__TAURI_INTERNALS__.invoke(...)to isolate frontend vs Rust. - Once root cause is found, fix per
oats-vue/oats-tauriand re-verify here.