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.