A desktop IDE that hosts a pool of CLI coding agents as tiled terminal panes. You direct. The swarm builds. Voice in. Code out.
→ View the live landing page
Quickstart
git clone https://github.com/<your-fork>/pigide
cd pigide/frontend && pnpm install && cd ../src-tauri
cargo tauri dev
Once the window is open:
- + in the Workspaces sidebar — your first workspace.
- + kiro-cli (or any agent type) inside an empty TilingArea — terminal tile spawns with the agent already running.
- Talk to the orchestrator on the right pane to dispatch tasks across tiles.
Ctrl+,opens Settings ·Ctrl+1..9jumps between workspaces.
For voice: hold the configured PTT hotkey (off by default — bind in Settings → Voice) and speak. Partials stream into the focused input within 300 ms.
Stack
- Rust core (Tauri 2):
portable-pty,rusqlite,reqwest,tokio,cpal,whisper-rs - Frontend (React + TypeScript + Vite):
allotment,@xterm/xterm,zustand
Prerequisites
- Rust 1.80+ (
rustc 1.95tested) - Node 20+ + pnpm 9+ (
node 25,pnpm 10tested) - Linux:
webkit2gtk-4.1and PulseAudio/ALSA dev libs - An OmniRouter instance running locally (defaults to
http://localhost:20128) ~/.local/bin/kiro-cliand/usr/bin/claudefor the agent tiles
Build
# Install frontend deps
cd frontend
pnpm install
cd ..
# Run the dev server (Vite) + Tauri window
cd src-tauri
cargo tauri dev
# (or, if @tauri-apps/cli is installed in frontend/, `pnpm tauri dev` from frontend/)
Один скрипт собирает фронтенд и Tauri-приложение, автоматически выбирает Whisper-бэкенд (GPU/CPU) и складывает всё в ./dist/ в корне репозитория.
./scripts/build.sh
Что попадает в dist/:
dist/
├── bin/ # raw executables (pigide, pigide-cli)
├── bundle/ # установщики (.deb / .rpm / .AppImage / .dmg / .msi)
└── BUILD_INFO.txt # дата, коммит, какой GPU-бэкенд использован
GPU-бэкенд определяется автоматически (CUDA → ROCm → Vulkan → CPU; на macOS — Metal). Принудительно выбрать можно через PIGIDE_GPU:
PIGIDE_GPU=cuda ./scripts/build.sh # NVIDIA, нужен CUDA toolkit
PIGIDE_GPU=hipblas ./scripts/build.sh # AMD ROCm
PIGIDE_GPU=vulkan ./scripts/build.sh # cross-vendor Vulkan
PIGIDE_GPU=metal ./scripts/build.sh # Apple Silicon
PIGIDE_GPU=cpu ./scripts/build.sh # CPU-only
В рантайме можно форсить CPU без пересборки: PIGIDE_WHISPER_CPU=1.
Перед сборкой скрипт показывает preflight: текущая ветка, коммит, ahead/behind относительно origin/main и список незакоммиченных изменений. Если working tree грязный — спросит подтверждение (это страховка от ситуации, когда забыл закоммитить и потом потерял правки при checkout). Чтобы пропускать вопрос в CI: PIGIDE_BUILD_DIRTY=1 ./scripts/build.sh.
- Database:
~/.config/pigide/db.sqlite - Whisper model: downloaded on first PTT use to
~/.cache/pigide/ggml-small.bin - Logs: stderr, set
RUST_LOG=pigide=debug,info
Architect model
The Kiro orchestrator runs against a swappable LLM backend. Default is the Anthropic Messages API with Claude Opus 4.5 as primary and Claude Opus 4 as automatic fallback on 5xx / 529 / timeout. Set ANTHROPIC_API_KEY in the environment, or paste a key into Right pane → Settings → API key.
OmniRouter (OpenAI-compatible) remains available — switch via Right pane → Settings → Provider.
Watcher (опционально)
Watcher слушает stdout каждого спавненного агента, классифицирует чанки через Google AI Studio Generative Language API (по умолчанию gemini-2.5-flash-lite — Gemma 3 4B IT из изначального брифа AI Studio v1beta больше не отдаёт; live-проверка показала, что Gemma 4 31B уходит в reasoning-prose вместо строгого JSON, а Flash-Lite обеспечивает strict-JSON и стоит в ~10× меньше) и эскалирует «вопросы к человеку» Architect'у в почтовый ящик role:coordinator, на тред watcher:<agent_id>. Ответ Architect'а автоматически инжектится обратно в stdin исходного агента — агент не зависает на интерактивном prompt'е, пока вы не подойдёте.
Включить
Опт-ин на этапе сборки:
cd src-tauri
cargo build --features watcher
# или для дебаг-запуска
GEMINI_API_KEY=AIzaSy... cargo tauri dev --features watcher
Без GEMINI_API_KEY Watcher тихо отключится при старте (одна warning-строка в логах) — остальное приложение работает как обычно.
Переменные окружения
MCP-инструмент
Когда Watcher активен, MCP-сервер регистрирует один новый инструмент:
{ "method": "tools/call", "params": { "name": "watcher_status", "arguments": {} } }
Возвращает {enabled, rpm, agents: { <agent_id>: {last_classification, calls_this_minute, blocked_until, dropped} }} — удобно для дашбордов и для проверки, что бакет не залип.
Стоимость
gemini-2.5-flash-lite доступен в free-tier AI Studio с per-project лимитом порядка 30 RPM на ключ (на момент написания). Дефолт PIGIDE_WATCHER_RPM=10 подобран так, чтобы один агент не выедал лимит ключа в одиночку. На paid-тарифах Flash-Lite — самая дешёвая модель Gemini API, ~$0.075 за 1M входных токенов и $0.30 за 1M выходных (текст).
PigVoice — instant voice-to-text
PigVoice is the streaming voice layer baked into PigIDE. Goal: sub-300 ms perceived latency from speech to first visible token, with partial hypotheses dropped straight into the focused input.
How it works
mic (cpal) → resample 16k → Silero-style VAD → rolling-window Whisper
→ LocalAgreement-2 merger → voice://partial events
→ on VAD endpoint: clean final → voice://final
The on-device engine is whisper.cpp (via whisper-rs, no new native deps). Partials are stabilised with LocalAgreement-2: a token only commits to the visible UI once two successive decoding passes agree on it, so the text never wobbles backwards. See PIGVOICE_RESEARCH.md and PIGVOICE_PLAN.md for the full design.
Settings (in ~/.config/pigide/db.sqlite, table settings)
The streaming path defaults to tiny for first-token speed; pick a larger model from the in-app voice settings panel for better accuracy. If the model isn't downloaded yet, the streaming loop quietly no-ops and the existing batch path triggers a download on stop.
GPU acceleration (optional)
By default PigIDE builds Whisper CPU-only. The release build script (./scripts/build.sh) автоматически определяет GPU; чтобы выбрать вручную, экспортни PIGIDE_GPU=cuda|hipblas|vulkan|metal|cpu — см. секцию Build. Whisper-контекст пробует GPU и откатывается на CPU с warn!-логом, если инициализация не удалась (нет toolkit'а, нет устройства, OOM и т.д.). В рантайме форсить CPU — PIGIDE_WHISPER_CPU=1.
Системные зависимости по бэкендам:
gpu-cuda— CUDA toolkit (cublas, cudart, nvcc). Arch:sudo pacman -S cuda. Ubuntu:sudo apt install nvidia-cuda-toolkit.gpu-hipblas— AMD ROCm.gpu-vulkan— Vulkan SDK.gpu-metal— Apple Silicon, ничего ставить не нужно.
Verify the live backend in logs (RUST_LOG=pigide=info):
whisper: GPU backend initialized (model=small)
Events (Tauri)
Tests
cd src-tauri
# unit tests for the merger, VAD, mode controller, cloud config, etc.
cargo test --lib voice::
# end-to-end streaming integration test (no mic / no model needed):
cargo test --test integration_streaming
# latency benchmark — fails if median first-partial > 600 ms:
cargo test --test bench_latency --release
Skills — extensible Architect prompt-modules
The Architect's prompt is no longer fixed. Skills are small named .md modules with a YAML frontmatter that the Architect auto-discovers from ~/.pigide/skills/ and <workspace>/.pigide/skills/ and selects per turn (by tags / triggers / explicit @skill:<id> mention).
---
id: builder-brief-writer
name: Builder Brief Writer
description: Writes a self-contained brief for a Builder agent
priority: 60
tags: [dispatch, builder]
triggers: [builder, "сборщик"]
---
You are composing a Builder brief.
GOAL: {{goal}}
{{#if files_in_scope}}FILES: {{files_in_scope}}{{/if}}
Five built-ins ship by default — including user-skill-prompt-engineer, the meta-skill the Architect invokes whenever it's about to dispatch to a sub-agent. The Skills panel (right pane → Skills) lists everything, toggles enable/disable, shows the last turn's selection trace, and lets you stub a new user skill from the UI.
The Architect prompt itself (src-tauri/src/orchestrator/prompt.rs, v2 — gold-standard meta-prompting; v1 archived alongside as prompt.v1.rs) drives every turn through a deterministic 8-step pipeline: intent → contract (role / goal / exit_criteria) → skill selection → memory grounding → decomposition (Plan-and-Solve / Least-to-Most) → draft (via [[user-skill-prompt-engineer]]) → self-critique (Self-Refine + Chain-of-Verification) → dispatch (parallel where independent) → observe + self-improve (create_memory for new patterns). Research citations are at the top of prompt.rs.
See the built-in skills in src-tauri/resources/skills/ for examples.
# unit tests (parser, router, composer, registry)
cargo test --lib skills::
# integration test (end-to-end compose + hot-reload)
cargo test --test skills_integration
Acknowledgements
PigIDE integrates third-party software whose licenses are reproduced in LICENSES/ and summarised in NOTICE:
- Ruflo (MIT, © 2024-2026 ruvnet) — used as a supervised Node.js sidecar (
pigide-ruflod) that powers the orchestrator-ledger layer. PigIDE talks to it over its MCP server (transport=stdio); seesrc-tauri/src/ruflo/for the bridge.