Vestra Code

It writes the code. You decide what lands.

Our coding agent for Windows. Open a project, say what you want, and watch it read, edit and test the code, asking before anything is written.

Product

Vestra Code is a coding agent that runs on your Windows PC. Open a project folder, describe the change you want, and it gets to work: it reads the code, searches for what it needs, writes the change and runs your tests to check it.

It’s our own take on the coding agents developers now use every day, built around one rule. Nothing is written to your disk until you’ve seen it and said yes, unless you’ve told it not to ask.

Vestra Code on a dark background: a finished task with its steps grouped under "Edited 1 file, ran 1 command, read 1 file, searched 2 times", the reply below, and the activity panel on the right showing the edited file

Try it

Below is a small copy of the app, running in this page. Pick a task, approve the changes when it asks, and type in the box while it works. Then drag the effort slider and run it again.

Vestra CodeAdd a dark mode toggleacme-web

Add a dark mode toggle to the settings page, and remember the choice.

Thought for 3sPlanning the run
  • Settings lives in src/settings. I need to know how the app sets its colours today.
  • Look for anything already called theme before adding a new module.

Plan complete4 of 4

  1. Find how the app handles themes (done)
  2. Add a theme module (done)
  3. Add the switch to Settings (done)
  4. Run the tests (done)
Listed the project folder
src/  tests/  index.html  package.json  tsconfig.json  vite.config.ts
Searched for 'theme'
src/app.ts:4  // TODO: theme
src/settings/Settings.tsx:20  {/* TODO: dark mode toggle */}
src/styles.css:1  :root { color-scheme: light dark; }
Read src/app.ts
Read src/settings/Settings.tsx
Thought for 2sPlanning the changes
  • A small theme module, then the switch in Settings.
  • Set data-theme on the root element so the CSS can follow it.
Wrote src/theme.ts +19
  1. // Light and dark themes. The choice is kept per device, in localStorage.
  2. export type Theme = "light" | "dark";
  3. const KEY = "theme";
  4. /** The saved choice, or the system setting if there isn't one. */
  5. export function getTheme(): Theme {
  6. const saved = localStorage.getItem(KEY);
  7. if (saved === "light" || saved === "dark") return saved;
  8. return matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
  9. }
  10. /** Apply a theme to the page and remember it on this device. */
  11. export function applyTheme(theme: Theme): void {
  12. document.documentElement.dataset.theme = theme;
  13. document.documentElement.style.colorScheme = theme;
  14. localStorage.setItem(KEY, theme);
  15. }
Edited src/settings/Settings.tsx +22 −6
  1. @@ -1,7 +1,16 @@
  2. import { useState } from "react";
  3. import { useEffect, useState } from "react";
  4. import { Section } from "./Section";
  5. import { Switch } from "../ui/Switch";
  6. import { applyTheme, getTheme, type Theme } from "../theme";
  7. export function Settings() {
  8. const [compact, setCompact] = useState(false);
  9. const [theme, setTheme] = useState<Theme>(getTheme);
  10. useEffect(() => {
  11. applyTheme(theme);
  12. }, [theme]);
  13. const toggleTheme = () => setTheme((t) => (t === "dark" ? "light" : "dark"));
  14. return (
  15. @@ -8,2 +17,2 @@
  16. <div className="settings">
  17. <div className="settings" data-theme={theme}>
  18. <Section title="Layout">
  19. @@ -15,8 +24,15 @@
  20. <Section title="Appearance">
  21. <p className="muted">
  22. The app follows your system theme.
  23. </p>
  24. <label className="row">
  25. <span>
  26. <strong>Dark mode</strong>
  27. <small>Saved on this device.</small>
  28. </span>
  29. <Switch
  30. checked={theme === "dark"}
  31. onChange={toggleTheme}
  32. aria-label="Dark mode"
  33. />
  34. </label>
  35. </Section>
  36. {/* TODO: dark mode toggle */}
  37. </div>
  38. );
Ran npm test
✓ src/settings/Settings.test.tsx (6)
✓ src/theme.test.ts (8)

Tests  14 passed (14)
Thought for 1sWrapping up
  • Both files are in, tests pass. Summarise.

Done. Settings has a Dark mode switch under Appearance. It starts from your system setting, and your choice is saved on this device.

I added src/theme.ts for reading and applying the theme, and the tests pass.

2 files changed +41 −6

Ask Vestra Code to work on this project

Ask every timeMediumRobot 1.1 Coding
A scripted illustration. No model runs here and nothing leaves your browser.

Watch it work

Every step shows up as it happens. “Read src/app.ts”, “Searched for ‘theme’”, “Ran npm test”: each is a row you can open to see what it found. Steps of the same kind are grouped, so a long run stays easy to follow.

Files are written in front of you. You see “Writing README.md… 19 lines” and the content streaming in underneath, before anything is saved. Its reasoning folds away into “Thought for 3s”, one click from being read.

A README being written live: the row reads "Writing README.md", with a line count and the file's content streaming into a box marked "not saved until approved"

Every change arrives as a diff. Approve it, edit it before it’s written, or reject it with a note. When the turn is done, you get one line, such as “2 files changed +41 −6”, and one Undo for all of it. Undo only restores files that still hold what the agent wrote, so it never throws away your own edits.

Steering

You don’t have to wait for it to finish to change your mind. Type while it works, and your message waits in a queue above the box. It lands at the next step, once the current one is done, so nothing is cut off halfway. If it can’t wait, press Send now.

An edit to README.md waiting for approval, shown as a diff with Approve and Edit buttons, and under it a queued message: "Also mention that it needs Node 20 or newer", with a Send now button

New in 1.12

Version 1.12 is about seeing what the agent is doing without reading every line.

  • Thinking you can follow. Its reasoning rolls past with a live, one-line summary of the current step, such as “Reading the failing test”. When it’s done, it folds to “Thought for 8s · Fixing sum”.
  • A plan you can see. It writes its plan as a checklist and ticks each item off as it goes.
  • An activity map. Files in the project light up as they’re read or edited, and when a command runs.
  • Test results on the step itself. A green ripple when the tests go from failing to passing, and a red marker when a command fails.
Reasoning rolling past in a small box, with the current step underneath in bold: "Reading the failing test"
A four-step plan: "Run the tests" ticked off, "Find the bug" in progress, then "Fix sum" and "Re-run the tests"

When the agent starts a local dev server, the page opens in a preview pane next to the chat and reloads as it edits.

A chat on the left and, on the right, a live preview of the local dev server showing "Hello from Vestra Code", with the activity map under it

For runs you leave alone, progress shows in the Windows taskbar, a badge tells you when something needs your approval, and notifications let you approve or deny from wherever you are. The tray icon has Pause all. After a long run, or one in the background, a “While you were away” report sums up what changed, which commands ran and how the tests went.

A finished run with a failed test run marked in red and a passing one in green, followed by a "While you were away" card: 1 file changed, 2 commands with 1 failed, tests fixed from failing to passing, and 4 of 4 plan steps done

The home screen learns when you usually work. At your usual time it asks “Ready to work?”; otherwise it might be “Bit early, but we can still work…” or “Late one tonight?”. It learns this on your PC only. Each Vestra model now has its own colour (Robot blue, Cyber violet, Cyber Mini teal), and there are sounds if you want them.

Thinking effort

A slider sets how hard it thinks: Low, Medium, High, Extra High or Ultra. Medium is the default. Higher levels think for longer before they act, which is worth it for a stubborn bug or a change that touches many files. Ultra thinks for as long as it needs.

Models

Sign in with your Vestra account in your browser, or paste a Vestra Platform API key.

  • Robot 1.1 Coding, our model for code, on paid plans.
  • Cyber and Cyber Mini, our security models, for people approved through Vestra Enclave. Approval unlocks them in the model picker automatically. You don’t need a separate key.
  • Your own keys for OpenAI, Anthropic, OpenRouter and Google Gemini.
  • Local models through Ollama, LM Studio or any OpenAI-compatible endpoint.

Vestra’s own models run on UK Private Cloud Compute, managed by Magon: our own servers, not someone else’s cloud.

The model picker, grouped by how you signed in: Vestra, Robot 1.1 Coding, Cyber and Cyber Mini under the Vestra account, then models from your own API keys
The thinking effort card set to Ultra, its slider filled with a blue to violet glow

Leave it running

There are three access modes. Ask every time is the default. Auto-approve edits writes files without asking but still asks before running a command. Full access does both.

Autonomous runs until the task is done, which makes it the mode for something you leave overnight. Nobody has to press Continue:

  • it carries on past output limits by itself, and tidies its own context when the conversation gets long;
  • it notices when it’s stuck, nudges itself once, then stops with a summary of what’s done and what isn’t;
  • you can give a run a time limit or a step limit;
  • it keeps your PC awake while it works, and tells you when a run finishes or needs your approval.
The access menu open in the composer, with three choices: Ask every time, Auto-approve edits, and Autonomous (Full access, runs until done)

Talk to it

Click the microphone and say what you want. It stops listening when you pause, and the words go into the box. There’s a hands-free mode, and push-to-talk on Ctrl+Shift+Space. The speech-to-text is our own, based on Whisper and running on our servers.

Everything else is a keystroke away too: Ctrl+K opens a command palette for your chats, projects, models and settings.

Security

  • The agent works inside the project folder you open. It can’t read or write anything outside it.
  • Files that usually hold secrets, such as .env files and keys, always need your permission to read, in every mode.
  • Anything risky waits for your approval, and nothing is approved on a timer.
  • Your sign-in tokens and API keys are encrypted with Windows’ own data protection.
  • The app only talks to the providers you connect.

Get it

Vestra Code is for Windows. It installs for your own user account, so it doesn’t need administrator rights. The download is for paid VestraAI plans: sign in at ai.vestra.systems and open Vestra Code from your account menu.

Questions? Write to [email protected] or ask us on Discord.