编程CODE
代码定位、开发执行与协作工具
读代码、改代码、跑命令、开终端。被改的文件按轮次留档,随时回退。
「把登录模块重构一下,测试全绿再叫我。」
开源 · BYOK · AGPL-3.0
开源的 Agent 与 Bot 工作台。编程、科研、办公和日常任务,装好就能用,每一处都能改,模型由你来带。
macOS · Linux · Docker 自托管 · 浏览器与手机连接
01 · Team
主 Agent 先把任务拆开,再派给队友:Worker 写实现,调研 Agent 查资料,验证 Agent 跑测试。每位成员有自己的名字、头像和对话,彼此直接发消息、交接代码,做完向派活的人汇报。你在协作面板里看它们讨论,也可以随时插话。
02 · Four ways to work
代码定位、开发执行与协作工具
读代码、改代码、跑命令、开终端。被改的文件按轮次留档,随时回退。
「把登录模块重构一下,测试全绿再叫我。」
调查问题、比较解释,设计并推进实验
检索 OpenAlex 与 Semantic Scholar,读论文和 PDF,把实验一步步推下去。
「找近两年这个方向的论文,做一张能筛选的对比表。」
文档、数据、浏览器与电脑操作工具
Word、Excel、PPT,浏览器和电脑上的应用,都能直接动手。
「把上个月的订单导出来,整理成带图表的 Excel。」
均衡的基础工具,按需要使用各类能力
查资料、写东西、做一个能交互的小工具。日常的事,都能接。
「比较这三款相机,做个能调参数的对比图。」
03 · Bots
Bot 是长期在岗的 Agent。它有自己的名字、性格、模型和工作目录,能同时推进好几件事,也可以为它分配电脑桌面。它记住了什么,你都看得到,也可以改正,或者让它忘掉。让它睡下,手头的工作就挂起;唤醒后,从原处继续。
04 · Harness
中间是模型,围着它的每一格,都是 Varin 替它备好的:工具、上下文、执行、协作与恢复。同一个模型放进来,能接住的活更长、更复杂。
05 · Ready, and yours
填一个 Key 就能开始,其余都已就位。
不写代码,也能把每一处调成你的样子。
密钥只存在你自己的 Host 上,用量按渠道和模型逐轮记录。没有中间商。
06 · Extensions
Agent、IDE、科研、Bot 四个工作台,以及浏览器、Office、电脑操作、语言服务器,都登记在同一个扩展目录里,用的是你手里的同一套契约。每一个都可以停用,工作台还可以整套换掉。
varin.builtin.agent-workspacevarin.builtin.ide-workbenchvarin.builtin.research-workbenchvarin.builtin.bot-workspacevarin.builtin.browservarin.builtin.officevarin.builtin.computervarin.builtin.language-servers把鼠标放到左边的条目上,右边会标出清单里对应的部分。
varin.extension.json一份契约。发现、激活、权限审查和工具 schema 都读它,不运行代码就能被发现。
package.json普通的 npm 元数据,版本与清单一致,可声明构建入口。
host.jsHost 端:工具、模型协议、上下文算法、Agent 策略。这里以 Brokered 方式运行在独立子进程里。
surface.cjs界面端:面板、编辑器,乃至整套工作台。可以纯声明,也可以托管运行或放进隔离的 iframe、Worker。
panel.css · panel.svg资源文件。图标、样式,或随包分发的可执行文件,都在不可变的包内解析。
{ "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) { // 用清单里声明的同一个服务:发现和激活读的是同一份描述 provideTool(context, manifest.provides.services[0], async (input, call) => { // 在新工具里调用内置工具,原回执完整保留 const memory = await call.tools.invoke({ callId: 'memory', name: 'memory', arguments: input.memory, }); return { memory }; }); }, });
清单节选自 examples/extensions/agent-authored-panel,长 schema 已省略;host.ts 简化自 nested-tools。
界面不持有特权,特权工作留在可信的一侧。
只拿到有类型的回调和挂载点。换外壳、换编辑器,也换不来额外的权限。
工具、语言服务器、调试和测试在这里运行。Brokered 扩展有自己的进程和生命周期,出了问题只收回它自己。
为每次调用固定用到的实现;凭据、模型请求、执行记录和恢复都留在这里。
varin.models@1varin.context.fragments@1varin.context.budget@1varin.context.compaction@1varin.retrieval.plan@1varin.agent.policy@4运行活动观察扩展再多,工作台也要稳、要可控。
发现、激活、审查读的是同一份 varin.extension.json。没运行一行代码,扩展就能被发现、展示和检查。
权限按版本、按运行层逐项审批。同一个扩展升级,不会顺带继承新权限;撤权立即生效。
一次更新里的贡献、服务和状态一起生效。失败就留在上一代,不会只装上一半。
正在执行的调用固定在原来的实现上,直到完成;之后的调用才用新版本。
Brokered 扩展跑在独立子进程里,出错只收回它自己。选中的工作台起不来,还有恢复外壳兜底。
Agent 可以读契约、写扩展、打包安装,但首次安装一律停用,等你审过再启用。
07 · Control
被改的文件按轮次排成时间线,一键回退,回退本身也能撤销;你手动改过的文件不会被覆盖。结果不明的操作,不会偷偷再做一遍。
08 · Anywhere
桌面、浏览器、手机连着同一个 Varin。扫码配对;不在同一个网络时,走端到端加密的中继,中继看不到你的内容。
Open source · AGPL-3.0
代码、数据、模型和扩展,都在你自己手里。