VIBEX / Landing
SSE connected
Privacy-first · workspace stays local

Speak. Think. Ship.

Voice-controlled ReAct agent for VS Code. The engine reasons. The extension executes file, grep, and terminal tools on your machine — with Keep / Undo and HITL for shell.

VS Code 1.105+LangGraph ReActGemini · OpenAI · Groq · ClaudeWhisper / whisper.cpp
Agent modes
5
LLM providers
4+
VIBEX — Agent mode · gemini-2.5-flash
# user · voice
“Refactor auth to async/await and add tests”
# agent
✓ read src/auth.ts (84 lines)
✓ grep signIn across workspace
Planning 3 edits · streaming…
View diff Keep Undo Approve shell

Local tools

read, write, edit, grep, listdir, run_command. Paths clamped to workspace root.

Streaming UX

SSE tokens + tool_request events. Chat never waits for the full loop.

Secrets

Engine token and LLM keys in OS keychain via SecretStorage. Never settings.json.

src/auth.ts — VIBEX · session 7f3a · 1.8s
1import { db, session } from './core'
2
3export async function signIn(email: string, password: string) {
4  const user = await db.users.find(email)
5  if (!user) throw new Error('not found')
6  const ok = await user.check(password)
7  if (!ok) throw new Error('invalid')
8  return session.create(user)
9}
// 3 more files in this checkpoint: session.ts, auth.test.ts, errors.ts
VIBEXgemini-2.5-flash
Add error handling to signIn and cover it with tests
Reading src/auth.ts, src/session.ts. I’ll keep the session contract, throw typed errors, and add three tests.
tool read auth.ts
tool grep signIn
tool edit auth.ts, auth.test.ts
HITL npm test — waiting for you
Diff is ready. Keep to apply, Undo to restore the git checkpoint.

Live diff · checkpoint 7f3a

3 files changed · +48 −11 · Keep applies, Undo restores git checkpoint

@@ src/auth.ts @@
- export function signIn(email, password) {
- const user = db.users.find(email)
- return session.create(user)
+ export async function signIn(email: string, password: string) {
+ const user = await db.users.find(email)
+ if (!user) throw new AuthError('not found')
+ if (!await user.check(password)) throw new AuthError('invalid')
+ return session.create(user)
}
@@ src/auth.test.ts @@
+ it('rejects unknown email', async () => {
+ await expect(signIn('x@y.z','no')).rejects.toThrow('not found')
+ })

Voice input

Groq Whisper (cloud) or whisper.cpp (offline) · speech module :3001

Mic ready
MIC

Listening…

“Add a JSON parser with tests and run them”

Transcript history

Add a JSON parser with tests
Groq whisper-large · 0.8s · just now
Show me the diff and keep it
1 min ago
Refactor auth to async/await
4 min ago
Open src/session.ts
7 min ago
STTgroq
Fallbacklocal small.en

Tool log

Every workspace action the agent requested this session

T+ToolTargetResultApproval
0.2sreadsrc/auth.ts84 lines
0.4sgrepsignIn6 hits
0.7sreadsrc/session.ts41 lines
1.1seditsrc/auth.ts+18 −6Keep pending
1.3seditsrc/auth.test.ts+24 −0Keep pending
1.8srun_commandnpm testwaitingHITL

Local or cloud engine

Tools always execute in the extension. Only bounded context leaves the machine.

Local mode (default)

Extension + FastAPI :8000 + speech :3001. Engine reads the workspace directly.

vibeEngineUrlhttp://localhost:8000
voiceServerUrlhttp://localhost:3001
remoteEngineModefalse

Cloud mode (Render)

POST /v1/generate/stream → SSE token + tool_request → local execute → tool_result.

project_context8 KB cap
AuthBearer + rate limit
CORSvscode-webview://*