Playwright MCP inside a Nono Sandbox
- Add
--open-port 8931to the nono args npx @playwright/mcp@latest --headless --isolated --browser chrome --port 8931claude mcp add --scope user --transport http playwright http://localhost:8931/mcp
--open-port 8931 to the nono argsnpx @playwright/mcp@latest --headless --isolated --browser chrome --port 8931claude mcp add --scope user --transport http playwright http://localhost:8931/mcpBrowsers cannot launch inside nono.sh sandboxes on macOS. The Seatbelt
kernel sandbox blocks Mach IPC (bootstrap_check_in) and xattr syscalls that browsers
require for multi-process communication.
What we tested:
Stack: Angular app with Three.js embedded directly (~1MB in the JS bundle). No GSAP, no Lottie, no external animation libraries.
Three.js + scroll-driven interpolation. The cube is not one mesh breaking apart — it's two sets of PlaneGeometry faces (split state vs. assembled state) with the visible cube interpolating between them:
| <!DOCTYPE html> | |
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>Math Tutor</title> | |
| <style> | |
| * { box-sizing: border-box; margin: 0; padding: 0; } | |
| body { | |
| font-family: 'Segoe UI', system-ui, sans-serif; |
A Quicken for Mac data file (circa 2007-2008, Quicken Mac 2007) was provided as a macOS bundle directory with no working copy of Quicken available to export from. The goal was to extract transaction data (dates, payees, check numbers, memos, and amounts) into a CSV.
Generated with Claude Code + Opus 4.6
The star of the show is the canal's infamous bottom sediment, affectionately known as "black mayonnaise" — a thick, oily sludge that is in some places up to 20 feet deep. It's a lethal cocktail of:
| #!/usr/bin/env bun | |
| // ── Star Field ────────────────────────────────────────────────────── | |
| // Parallax star field that scrolls right-to-left in the terminal. | |
| // 3 depth layers, 256-color, differential rendering (only redraws | |
| // changed cells). Supports ASCII and Unicode glyph modes, adjustable | |
| // star density, scroll speed, and color saturation — all via hotkeys. | |
| // Made with Claude Code. | |
| // | |
| // Usage: bun starfield.ts [--ascii|--unicode] [--stars N] [--speed N] [--sat N] |
The Playwright MCP server (@playwright/mcp) defaults to Chrome (channel: "chrome"), expecting it at /opt/google/chrome/chrome. Chrome has no ARM64 Linux binaries, so it fails immediately. The browser_install MCP tool also fails on ARM64.
Claude Code ignores args and env fields in ~/.claude/mcp.json for the playwright MCP server — it always launches npm exec @playwright/mcp@latest with no arguments and no custom env vars. So --browser firefox, env vars like PLAYWRIGHT_MCP_BROWSER, and custom command wrapper scripts all have no effect.
Your intuition is correct: all three systems fundamentally collect a mass of signals, send them to black-box server-side ML models, and get back a probabilistic score. None of them have a clean deterministic "if X then bot" rule. It's all heuristics and probability. But the depth of what they collect is staggering.