Native Shell
Native Shell:AI 生成的 UI,在你的应用中原生呈现,覆盖每个平台。iOS、Android、macOS、Windows 与 Linux 上的应用、GPUI 应用与网页在运行时加载已签名、沙箱隔离的 TSX 模块并绘制 th
AI 翻译
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证VOID Workshop: a local, approval-first AI coding workspace for Linux, with VOID Portal, an Android remote over your own Cloudflare relay
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗You pick a project folder, describe a task in plain English, review the agent's plan, and approve every file change and shell command. VOID Workshop shows a diff for each edit, keeps the original of every file it touches so you can reject changes one by one, and stops itself at the spending limits you set.
Everything runs on your machine with your own account: no telemetry, no shared server, nothing from the author's setup built in. You bring the Claude plan or API key (or free local models through Ollama), and if you want the phone app, you deploy your own relay in a few minutes on a free Cloudflare account.
~/.gradle cache and repositories, and let gh, git push and release scripts run after you approve each one (from the PC or VOID Portal).VOID Workshop is developed and tested on Arch Linux; other distributions work with the equivalent packages (WebKitGTK 4.1, GTK 3, libsoup 3, libsecret, bubblewrap).
# Arch Linux
sudo pacman -S --needed base-devel nodejs npm rust git webkit2gtk-4.1 gtk3 libsoup3 librsvg \
libayatana-appindicator openssl libsecret bubblewrap socat ripgrep
# Debian / Ubuntu (24.04+)
sudo apt install build-essential curl git libwebkit2gtk-4.1-dev libgtk-3-dev libsoup-3.0-dev librsvg2-dev \
libayatana-appindicator3-dev libssl-dev libsecret-1-dev bubblewrap socat ripgrep
node:sqlite), Rust ≥ 1.80.ksecretd) or GNOME Keyring. Headless setups can use an owner-only key file instead.bubblewrap and socat enable the command sandbox (recommended).git clone https://github.com/M4S4T0-V01D/void-workshop.git
cd void-workshop
./scripts/build.sh # locked install, type checks, sidecar + frontend + release binary
./scripts/install.sh # installs to ~/.local (no root): binary, sidecar, launcher, desktop entry
Then start VOID Workshop from your application menu, or run void-workshop.
On first launch, open Settings → Sign-in & API key and either click Sign in with Claude (uses your plan) or paste a Console API key → Save key (verified with the free Models API). Then Settings → Model → choose a model. Details: guides/claude-plan.md, guides/api-key.md.
To use free local models instead, pick Ollama under Settings → Provider & model. See guides/ollama.md.
48k / 200k) shows how much is re-sent each step; click it while the agent is idle to compact the conversation.The bottom terminal runs single commands you type or pick from the suggestions (detected from package.json, Cargo.toml, etc.). Each runs only after you confirm it, without a shell, with a timeout and output limit.
VOID Portal is the Android companion app. Start and queue tasks, approve changes and commands (straight from the notification if you like), switch model, mode and account, and hear when a task finishes or needs you. The phone and the PC both connect out to a relay, and every frame is end-to-end encrypted (AES-256-GCM) with a secret that only the pairing QR code carries, so the relay never sees your code, prompts or keys.
There is no shared relay: you deploy your own, on a free Cloudflare account (the free tier is plenty for one person):
cd remote/relay
npm install
npx wrangler login # authorise wrangler in the browser, once
npx wrangler deploy # prints https://void-relay.<your-subdomain>.workers.dev
node test/smoke.mjs wss://void-relay.<your-subdomain>.workers.dev # checks the deployed relay
Then in VOID Workshop open Settings → VOID Portal (phone), enter wss://void-relay.<your-subdomain>.workers.dev as the relay, and click Pair a phone. Install the app and scan the code:
cd remote/android && ./gradlew :app:assembleRelease.Either way, the APK contains no relay, account or key: it learns your relay from the pairing code. The full guide, including the optional R2 bucket for app updates and what to do if a pairing code leaks, is in remote/README.md.
~/.local/share/void-workshop; uninstall with --purge deletes it..env files, SSH keys or other secrets without asking. See guides/security.md.| Start | App menu → VOID Workshop, or void-workshop |
| Development mode | ./scripts/dev.sh (hot-reloading UI) |
| Stop | Close the window. Running tasks are interrupted cleanly and their history is kept. |
| Update | git pull && ./scripts/build.sh && ./scripts/install.sh (VOID Portal: install the newer APK from Releases over the old one, or rebuild it) |
| Uninstall | ./scripts/uninstall.sh (keeps data and key) or ./scripts/uninstall.sh --purge (also deletes history, settings and the stored key) |
Local data lives in ~/.local/share/void-workshop (SQLite history, logs, file originals, agent session transcripts) and ~/.config/void-workshop (key file, only if you chose the file backend).
npm test # every suite, one file at a time, niced and memory-capped
npm run lint && npm run typecheck && npm run format:check
VOID_LIVE_SDK=1 npm test # also run zero-cost checks against the real Agent SDK runtime
┌──────────── Tauri window (React + TypeScript) ─────────────┐
│ no network, no filesystem, no key: invoke() only │
└───────────────┬────────────────────────────────────────────┘
│ allow-listed method + size-checked params
┌───────────────▼──────────── Rust shell ────────────────────┐
│ refuses root · spawns sidecar with a scrubbed environment │
└───────────────┬────────────────────────────────────────────┘
│ JSON lines over stdio
┌───────────────▼──────────── Node sidecar ──────────────────┐
│ zod-validated RPC · path & command policy · approvals │
│ budgets · SQLite (node:sqlite) · git (argv, hardened) │
│ Claude Agent SDK ── key helper or Claude plan login ► API │
└────────────────────────────────────────────────────────────┘
See guides/security.md for the full security model and known limitations.
Both apps use the English text as the translation key, so a missing translation shows English instead of breaking.
src/i18n/locales/<code>.json. Plurals are objects keyed by plural category (one, few, many, other…). npm run i18n lists missing and stale entries, and the web tests fail on placeholders that differ from English.remote/android/app/src/main/assets/i18n/<code>.json, keyed by the strings the Kotlin code passes to tr() and trn(). I18nTest (./gradlew :app:testDebugUnitTest) checks that each language is complete, has no stale keys, keeps every {placeholder} and has the plural forms its language needs.To add a language, add it to LANGUAGES in src/i18n/index.ts and in I18n.kt, add both catalogs and a site/i18n/<code>.json for the website, then run the checks above.
The project site is served by GitHub Pages from docs/ in 13 languages. Pages are generated: edit site/template.html or a translation in site/i18n/<lang>.json (en.json is the source of truth), then run node site/build.mjs. The build refuses a translation with a missing key or markup that differs from English; node site/build.mjs --check fails if docs/ is out of date.
Made by M4S4T0-V01D. MIT licensed, see LICENSE. VOID Workshop is an independent project, not affiliated with or endorsed by Anthropic. Use of the Claude API is subject to Anthropic's terms.