CodeCODE
Tools for working with code
Read and change code, run commands, open terminals. Every edited file is checkpointed by turn, so you can roll back any time.
“Refactor the login module and ping me when the tests are green.”
Open source · BYOK · AGPL-3.0
The open-source agent and bot workspace for code, research, office work and everything in between. Ready out of the box, customizable all the way down. Bring your own model.
macOS · Linux · Self-host with Docker · Connect from a browser or phone
01 · Team
The lead agent breaks the task down and hands it to teammates: a Worker writes the implementation, a research agent digs up context, a verifier runs the tests. Each member has its own name, avatar and conversation. They message each other, hand over code, and report back to whoever assigned the work. Watch them talk it through in the collaboration panel, and step in whenever you like.
02 · Four ways to work
Tools for working with code
Read and change code, run commands, open terminals. Every edited file is checkpointed by turn, so you can roll back any time.
“Refactor the login module and ping me when the tests are green.”
Investigate, compare explanations, develop experiments
Search OpenAlex and Semantic Scholar, read papers and PDFs, and push an experiment forward step by step.
“Find the last two years of papers on this and build a filterable comparison table.”
Documents, data, browser and computer tools
Word, Excel and PowerPoint, plus the browser and the apps on your computer. It works with them directly.
“Export last month’s orders into an Excel sheet with charts.”
Balanced tools for everyday work
Look things up, write, or build a small interactive tool. Whatever the day brings.
“Compare these three cameras and make a chart I can tweak.”
03 · Bots
A bot is an agent that stays on the job. It has its own name, personality, model and working directory, keeps several pieces of work moving, and can be given a computer desktop. You can see everything it remembers, correct it, or have it forget. Put it to sleep and its work is suspended; wake it and it picks up exactly where it left off.
04 · Harness
The model sits in the middle. Every cell around it is something Varin prepares for it: tools, context, execution, collaboration and recovery. Put the same model in, and it can carry longer, more complex work.
05 · Ready, and yours
Add one key and start. Everything else is already in place.
No code needed to make every part your own.
Keys stay on your own Host. Usage is recorded per channel and model, turn by turn. No middleman.
06 · Extensions
The Agent, IDE, Research and Bot workbenches, along with the browser, Office, computer control and language servers, are all registered in one extension catalog through the same contracts you use. Any of them can be turned off, and a workbench can be replaced entirely.
varin.builtin.agent-workspacevarin.builtin.ide-workbenchvarin.builtin.research-workbenchvarin.builtin.bot-workspacevarin.builtin.browservarin.builtin.officevarin.builtin.computervarin.builtin.language-serversHover a file on the left to see the matching part of the manifest.
varin.extension.jsonThe contract. Discovery, activation, permission review and tool schemas all read it, so an extension is discoverable without running any code.
package.jsonPlain npm metadata. Its version matches the manifest and it can declare build entry points.
host.jsHost side: tools, model protocols, context algorithms and agent policies. Here it runs brokered, in its own child process.
surface.cjsInterface side: panels, editors, even a whole workbench. Declarative, managed, or isolated in an iframe or worker.
panel.css · panel.svgAssets. Icons, styles or bundled executables, all resolved inside the immutable package.
{ "schemaVersion": 1, "id": "example.agent-authored-panel", "version": "1.0.0", "engines": { "varin": "*" }, "entrypoints": { "host": { "file": "host.js", "mode": "brokered", "activation": ["service-request"] }, "surfaces": [{ "id": "panel", "file": "surface.cjs", "mode": "managed", "supports": ["web", "desktop"], "activation": ["application-startup"] }] }, "provides": { "services": [{ "id": "example.agent-authored-panel.count", "version": 1, "tool": { "name": "authored_text_count", "completion": "result", "operation": "read", "inputSchema": { … } } }] }, "contributions": [{ "id": "example.agent-authored-panel.summary", "kind": "panel", "entrypoint": "panel", "supports": ["web", "desktop"], "placement": { "slot": "workbench.secondary.after", "order": 20 } }] }
import { defineHostExtension, provideTool } from '@varin/extension-sdk'; import manifest from './varin.extension.json' with { type: 'json' }; export default defineHostExtension({ activate(context) { // The same service the manifest declares: discovery and activation read one description provideTool(context, manifest.provides.services[0], async (input, call) => { // Call a built-in tool from the new one; the original receipt is kept intact const memory = await call.tools.invoke({ callId: 'memory', name: 'memory', arguments: input.memory, }); return { memory }; }); }, });
Manifest excerpted from examples/extensions/agent-authored-panel with long schemas elided; host.ts simplified from nested-tools.
The interface holds no privileges. Privileged work stays on the trusted side.
Gets typed callbacks and mount points, nothing more. Swapping a shell or an editor never buys extra permissions.
Tools, language servers, debuggers and test runners live here. A brokered extension has its own process and lifecycle; if it fails, only it is reclaimed.
Pins the exact implementation for every call. Credentials, model requests, execution records and recovery stay here.
varin.models@1varin.context.fragments@1varin.context.budget@1varin.context.compaction@1varin.retrieval.plan@1varin.agent.policy@4Run activity observersHowever many extensions you add, the workbench stays stable and under your control.
Discovery, activation and review all read the same varin.extension.json. An extension can be found, shown and checked before a line of its code runs.
Permissions are approved per version and per layer. An upgrade never inherits new permissions, and revoking takes effect at once.
Everything in an update takes effect at the same moment. If it fails, the previous generation stays; nothing is half installed.
Calls already running stay on the implementation they started with. Only new calls use the new version.
Brokered extensions run in their own child process, so a failure only reclaims that extension. If the chosen workbench cannot start, a recovery shell takes over.
An agent can read contracts, write an extension and install it, but a first install is always disabled until you review it.
07 · Control
Edited files line up on a timeline by turn. Roll back in one step, and undo the rollback too. Files you changed by hand are never overwritten, and an action with an unclear outcome is never quietly repeated.
08 · Anywhere
Desktop, browser and phone all connect to the same Varin. Pair with a QR code; away from your network, an end-to-end encrypted relay carries the connection without seeing your content.
Open source · AGPL-3.0
Your code, your data, your models, your extensions.