Native Shell
Native Shell은 모든 플랫폼의 앱 안에서 만들어지는 AI UI입니다
Linux용 오픈소스 AI 코딩 워크스페이스, 승인 우선, VOID Portal은 종단‑암호화 Android 원격 환경 제공
Open-source, approval-first AI coding workspace for Linux, plus VOID Portal, an end-to-end encrypted Android remote. By M4S4T0-V01D.
개발 도구TypeScript · KotlinGitHub @M4S4T0-V01D온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.