mcp server
VortoCode
Self-hosted AI coding agent: one agent runtime behind Desktop, TUI, Web and headless CLI. Delegated dev tasks run in isolated git worktrees with verification and PR handoff; humans approve plans and m
Set up
Runs on your computer. Pick your agent and operating system.
Before you start
- uv (`curl -LsSf https://astral.sh/uv/install.sh | sh`)
{
"mcpServers": {
"vortocode": {
"command": "uvx",
"args": [
"vortocode"
]
}
}
}same format Cursor, GitHub Copilot CLI, Junie, JetBrains AI Assistant, Augment (Auggie CLI), Factory Droid, Kiro, Devin CLI +12
Values in angle brackets are placeholders. Restart Claude Desktop after editing its config.Claude Desktop docs
README
synced Oct 29, 2026VortoCode
VortoCode 是面向开发者的本地优先 AI 工作助手:持续跟进目标与项目,协调 Agent 执行,核对交付依据,并把需要人决定的事带回来。Desktop 是默认入口,隔离开发、验证与审查是其中的执行能力,CLI 服务自动化。
Public preview / dogfooding project:项目仍在快速迭代,接口、命令和工作流可能调整。欢迎试用、反馈问题和提交小步 PR;生产环境暴露、可信凭证和自托管 runner 请按 SECURITY.md 的安全约定处理。
定位
当前优先收敛 常驻助理与 Desktop 工作台的交付闭环:助理收集、提议任务、跟进和汇报,项目工作台负责隔离开发、验证与审查。交互任务卡提供确认下发、状态核对与交付定位,关键操作仍由人决定。 日常入口围绕 今天有哪些事、推进到哪里、哪些已核实完成、什么需要我决定 收敛。助理「今日」页将个人目标、任务单与 Codex 精简报告投影到同一概览;执行结束与目标验收分开展示。来源、统计及验收边界见 今日工作。多核心是底层演进方向,当前主会话仍使用自有 Agent,Codex 已有会话控制已独立适配,尚未提供整会话自由切换。 使用步骤、固定交付命令与未验收项统一见 Desktop 日常使用基线。 整体分层、已接入核心、待收敛边界与下一阶段顺序统一见 当前架构与产品方向。 优先验证已有定时指令、只读连接器和项目任务的日常流程,再扩展协议与自动化范围;本地签名包不等于正式稳定发布。当前任务卡合同见 助理任务交付。
产品形态方向
当前优先维护 Desktop 与自动化入口,复用会话、权限和工作领域合同:
- Desktop 版(当前默认产品,P0):面向低门槛的本地常驻工作台,启动即进入 General 无目录会话,按需显式升级到隔离 Scratch 或用户选择的 Git Project;跨项目 Inbox、Goal、源码、diff、权限确认、artifact、项目记忆和后台任务共用同一本机 Gateway 内核。
- CLI 版(高级/自动化入口):保留
vc agent/vc server,服务终端重度用户、脚本、CI、远程主机和 runtime 调试,不再作为新用户默认入口。 - Web 服务能力与后续团队方向:当前保留 Desktop 使用的 API、审批与制品查看;完整团队产品按真实需求另行评估,当前投入优先服务个人工作闭环。
核心理念
- 主会话与按需任务 —— 复用原 Agent、TaskLedger 和执行池,不增加第二套任务状态或固定角色流水线
- 自我迭代,人在合并口 —— 框架可对自身提议修改(经审查 PR 由人合并),但绝不自主热更新/自动合并;任务级"开发→测试→审查→修复"闭环已落地(见下「自我迭代 / dogfooding」)
- 关键操作明确确认 —— 权限、开发隔离、验收、交接和合并各自守住边界,不以任务 done 推断 Goal 达成
- 统一模型路由 —— 本地 oMLX/OpenAI 兼容服务和云端供应商共用原配置与角色路由,不要求本地模型经过云端中转
核心特性
交互式主 Agent(agent loop · 仿 Claude Code / opencode)
Desktop 与无头 CLI vc agent 共用同一个主 agent loop:一个会聊天的 LLM,在"输入 → 模型 →(工具 → 回灌)* → 流式回复"的循环里自己决定该聊天、读代码,还是把开发任务交给流水线 —— 寒暄不会触发构建,要动手才动手。
- 工具集:
read_file/list_files/grep(只读)·edit_file/write_file(写/重型,需确认)·task/research_parallel(子 agent 委派)·use_skill/save_skill(技能)·save_memory/recall_memory(长期记忆)·publish_artifact/list_artifacts(制品,见下)· 以及/mcp接入的任意外部 MCP 工具 - plan / build = 工具权限门:plan 只放只读工具;写/重型/外部工具仅 build,且写盘前弹确认 —— 落实"人在关口"
- 子 agent 委派:把独立调研任务派给隔离上下文的只读子 agent,支持并行 fan-out
- 自定义角色子 agent(
.vortocode/agents/*.md,公司架构式分工):frontmatter 定角色(产品经理/前端/后端/QA…),正文即 system prompt;task/research_parallel用agent=<名>按名委派——read 型只读,tools: dev型可经隔离流水线真写代码(落vorto/*分支、委派需人工确认,绝不碰主区)。模板见examples/agents/ - SKILL.md 技能:渐进式按需加载(复用
src/skills解析器),还能让 agent 现场起草新技能 - 插件接入范围:MCP 手动连接、项目 Skill/Hook/规则,以及私人助理范围的限制见 扩展接入。
- 跨会话记忆:
/resume重建对话上下文;save_memory/recall_memory沉淀跨会话知识 - @上下文注入:
@文件→内容、@目录→清单、@符号→AST 定义位置 - 双协议:默认走原生 function-calling(native)——对支持的模型更可靠(真机对照 dogfood:同一开发任务 native 3/3 正确落地、提示式仅 1/3,提示式下模型易把工具结果误当用户消息、凭空编造交付);模型不支持则自动回退提示式协议(模型无关兜底)。
VORTOCODE_NATIVE_TOOLS=0可强制走提示式。各端(Desktop/Web/CLI)统一 - 可观测/可审计:token 用量统计(
/usage);Web 与 Desktop 共用脱敏工具/权限审计台账,Desktop 将人工确认、阻塞 Goal、失败任务和 PR/CI 汇成待决策队列 - 不中断思路:Desktop 在 Agent 运行时仍可继续输入;后续提示由 Gateway 持久化排队,可删除或提升为“现在执行”,同时维持单会话单前台回合
- 命令:
/skills /tools /mcp /usage /audit /sessions /resume /new /mode /tasks /review /verify /clear /help
早期版本把"任何自然语言 = 开发目标(等同
/run)",会出现"打个招呼也跑完整 dev→test→review"的尴尬;现已收敛为上面的主 agent loop,开发只是它的一个工具。
制品(Artifacts · 仿 Claude Code)
让主 agent 把会话产出发布成一个可分享、随会话实时更新的网页——带注释的 PR 走查、数据看板、方案对比、交互控件、迁移/排查进度清单等。
- 一句话发布:build 模式里说"把这个做成一个可分享的页面",agent 调
publish_artifact(自包含 HTML 或 markdown,markdown 渲染成 GitHub 风整页)→ 返回链接/(…)/artifact/<id> - 实时更新:带相同
id重新发布即version+1,已打开的查看页自动刷新(轮询版本号) - 版本历史 / pin:每次发布留快照,查看页可下拉回看任意历史版本(
?v=N)、一键设为默认给查看者看哪一版——对齐 CC「choose which version viewers see」 - 删除:
delete_artifact工具(写·build·确认)/DELETE /api/artifacts/<id> @artifact:<id>注入:对话里@artifact:<id>把某制品当前内容带给主 agent 迭代("改一下 @artifact:xxx")- 静态隔离 + 大小上限:查看页
iframe sandbox+ 限制性 CSP(default-src 'none',禁外联/SSRF);单页 ≤ 16 MiB(VORTOCODE_ARTIFACT_MAX_BYTES可调)——对齐 CC - 可分享 / 认证可见:链接即可分享;设了
VORTOCODE_API_TOKEN时需要先登录或用 Authorization/X-API-Token 访问(token 不进 URL)。Desktop 里可以列出全部制品 - 人在关口:发布/删除是写操作——经内核确认门,Web 端另有 build 模式门控
- 落盘:
.vortocode/artifacts/<id>/(gitignored,运行时产物);由 Web 服务器渲染,VORTOCODE_WEB_BASE可改链接前缀
Dogfooding(用 VortoCode 开发它自己)
把改进任务派给正常的隔离 dev 流水线,在独立 worktree 中实现、验证并提交 PR,经过审核后合并。
隔离 dev 流水线(差异化护城河)
取代了早期的「5 角色批处理编排引擎」(能力匹配/失败恢复等已随「路线 A」退役删除)。
- 一句话 → PR:
dev_auto自动分解 → 并行隔离实现 → 逐件+集成验证 → 自修复重试 → 落vorto/*分支 → 开 PR - 隔离安全: 每个子任务在一次性 git worktree 里实现+自测,全程不碰 main/主工作区
- 任务分解: 复用
task_analyzer拆无依赖并行批 + 有依赖拓扑接力 - 执行过程是一张可看的图:计划持久化为 DAG(节点=计划块、边=依赖),Desktop 任务卡里按拓扑分层
渲染——绿勾=已落地、高亮=执行中、红色虚线入边=失败,点开看失败输出。一眼看出哪块卡住了、卡在谁后面,
这是进度条给不了的。数据面
GET /api/dev-plans/{id}/graph是纯投影(权威仍是可dev_resume的计划文件) - 阶段级 token 计量:分解 / 执行各自记账(含并行子任务),落 INFO 日志——「规划用旗舰、执行用中档」 这类模型分层,得先有真实占比数据
- Goal 目标合同: 目标、约束、非目标和验收标准持久化并关联后台任务/
DevPlan/分支;任务done只代表一次执行结束,只有逐项验收都有通过证据才进入achieved - Project Journal:Desktop 从审计事件、Goal 证据、任务交接和运行结果确定性生成每日摘要与 7 天周报;本地快照可跨重启恢复,“继续昨天”会先与当前待决策队列重新对账,手工记录会脱敏凭据样式内容
- 系统通知(显式开启):Desktop 只在用户授权后提醒新增的高优先级待决策项;首次开启只建立现状基线,锁屏通知不包含命令、日志或决策正文
- 可选外部执行者:隔离实现/审查已支持 Codex CLI 与 Claude Code CLI 的实验接入,默认关闭,不随应用内置;OpenCode 尚无核心适配。见 外部执行者。
MCP 工具集成
- 只接安全的服务: 只连接显式标了
credentialed: false的免凭据 HTTP 服务(外加常驻助理里授权过的只读连接器);stdio 服务会在本机执行命令,被安全策略禁用 - 按需接入: 外部 MCP 只在 external 会话里接入,每次调用工具都过确认门;摄入的内容按外部内容(污点)处理
- Desktop 插件页: 看清每个服务会不会启动、为什么;添加/启停/删除、测试连接(列出工具),改动逐行写进
config/mcp.yaml,不动注释 - 精选目录: 审核过的免凭据公开 MCP 服务(DeepWiki、Context7、Microsoft Learn 等,实测可连)和通用技能,一键安装;装 MCP 前说明问题会发给谁
记忆系统
- 短期记忆: 当前会话的工作记忆
- 长期记忆: 跨会话的知识积累
- 专家记忆: 领域专业知识库
- 向量记忆: 基于语义的长期记忆检索
技能系统
- 模块化设计: 可重用的工作流模块
- 动态加载: 按需加载技能
- 技能组合: 支持技能链和并行执行
- 版本管理: 技能版本控制
- 自动发现: 智能技能发现和匹配
Hooks 系统
- 生命周期事件: 在关键点执行自定义逻辑
- 事件驱动: 基于事件触发
- 可扩展: 支持自定义 Hook 类型
- 审计日志: 完整的操作记录
- 项目信任: 仓库 Hook 默认禁用,Desktop 显式审查授权,信任记录不写回仓库
验证闭环(隔离 dev 流水线内)
早期独立的
verification_loop/loop_controller模块已随「路线 A」退役删除;验证能力现内建在隔离 dev 流水线里。
- 子 agent 自测: 隔离 worktree 里 implement→run_tests→fix 自纠直到通过
- 逐件 + 集成验证: 单件绿才落分支,多件合并后再跑一遍全量(防"单独绿、合起来红")
- 自修复重试: 某件红了换全新 worktree 带失败反馈重试
- 基线对比: 测试红了,把失败的那几个拿到改动前的代码上再跑;改动前就红的不算这次改动的错,报告里单独列出
- 本地配置(
.worktreeinclude): worktree 只有被跟踪的文件。测试要用.env这类被 gitignore 的本地配置时,在仓库根目录写.worktreeinclude(gitignore 语法,一行一个),只复制同时被 gitignore 的文件,不碰.vortocode/与.git/,不会进提交。⚠ 复制进去的内容子 Agent(模型)能读到,含密钥的文件要想清楚再加;报告会点名疑似密钥的文件 - 上下文管理: 长对话锚点裁剪 + 滚动纪要压缩
性能监控
- 实时指标: CPU、内存、磁盘、网络使用率
- 应用指标: HTTP请求、Agent任务、技能执行、LLM调用
- Agent 面板: Desktop 中按会话展示上下文用量、任务与运行状态(只读投影)
- 预算提醒: LLM 成本超预算记录、上下文用量压力提示
- 性能分析: 函数级性能分析和内存分析
文档
核心设计文档
技术参考
目录结构
vortocode/
├── main.py CLI 入口(agent / server / analyze / workers / doctor / test / demo)
├── src/
│ ├── agents/ 底层 agent_loop/安全策略 + 工具工厂(按需装配 workflow/scheduling 的公开能力)
│ ├── llm/ LLM 客户端(One API 网关,异步 AsyncOpenAI)
│ ├── web/ FastAPI 服务:server.py 装配 + routers/ 各域路由 + state/schemas/deps/auth
│ ├── memory/ 记忆系统(SQLite 会话 + JSON 长期记忆 + 向量数据库)
│ ├── skills/ 技能系统(技能发现 / 版本管理 / 自动加载)
│ ├── hooks/ 生命周期 Hook
│ ├── tools/ MCP 工具集成(动态发现 / 权限管理)
│ ├── core/ 核心设施(monitoring 指标 / cache / tracing;self_healing、task_queue 已退役删除)
│ ├── sandbox/ OS 策略 / Docker 沙箱与显式宿主机回落
│ └── browser/ gateway/ im/ …(终端 TUI 已于 2026-10-17 退役;2026-10 删除无前端调用的旧 Web 接口及其模块:
│ context/ security/ projects/ github/ templates/ testing/ documentation/ 自定义 agent 管理器)
├── web/ 控制台前端(原生 HTML/CSS/JS,无构建步骤)
├── desktop/ Tauri 2 + React 本机工作台(复用 gateway 协议与 Python runtime)
├── examples/ 使用示例(iterative_dev / llm_analysis / pet_state 桌宠钩子 …)
├── tests/ 单元 + 集成测试(含路由契约安全网)
├── docs/ 设计与分析文档
└── config/ 默认配置(default.yaml / mcp.yaml)
注:早期版本曾计划把代码放在顶层独立包, 现已统一收敛到
src/下;那几个顶层目录已废弃。
技术栈
- 后端: FastAPI + Python 3.10+(异步)
- 前端: Web 为原生 HTML/CSS/JavaScript(无构建步骤);Desktop 为 Tauri 2 + React + TypeScript
- 存储: SQLite(会话)+ JSON 文件(长期记忆 / 项目)+ 向量数据库(语义检索)
- 容器化: Docker(代码沙箱,可选)
- LLM 网关: 自建 One API(OpenAI 兼容接口)
- 监控: 自定义指标收集 + Desktop Agent 面板
- 可选 / 规划中: 向量数据库 Qdrant(
pip install '.[memory]'启用语义检索);Redis / PostgreSQL 暂未接入
快速开始
只想用 Desktop App? 看 docs/GETTING_STARTED_DESKTOP.md:从源码构建 App、连上模型、单机能做什么、什么时候才需要常驻电脑。下面是命令行与服务的开发者路径。
1. 安装依赖
# 依赖以 pyproject.toml 为唯一来源
pip install -e .
# 想要与 CI 完全一致的版本:加上锁文件约束
pip install -c constraints.txt -e '.[llm,dev]'
# 可选:安装向量数据库支持(用于语义记忆)
pip install '.[memory]'
# 可选:安装LLM支持
pip install '.[llm]'
# 可选:安装MCP支持
pip install '.[mcp]'
# 可选:安装所有依赖
pip install '.[all]'
2. 配置环境
cp .env.example .env
# 编辑 .env 文件,配置 LLM API 密钥等
LLM 配置(任何 OpenAI 兼容接口):
# 地址、Key、模型名三项都要填。以 OpenAI 官方为例:
OPENAI_API_BASE=https://api.openai.com/v1
OPENAI_API_KEY=your-api-key
DEFAULT_MODEL=gpt-4o-mini
# 其他服务只换地址和模型名,例如 DeepSeek:
# OPENAI_API_BASE=https://api.deepseek.com/v1
# DEFAULT_MODEL=deepseek-chat
# 本机 Ollama(不需要 Key):
# OPENAI_API_BASE=http://127.0.0.1:11434/v1
.env已被.gitignore忽略,切勿提交真实密钥。仓库不内置 key;实际调用和费用按你配置的 relay/API 账号计算。
安全相关(默认安全):
# 设置后,所有 /api/* 与 /ws 强制鉴权(请求需带 Authorization: Bearer <token> 或 X-API-Token)
# 不设置则仅本地放行;对外暴露务必设置
VORTOCODE_API_TOKEN=
# sandbox 的宿主机降级执行默认禁用,仅在可信环境置 1 开启
# (/api/terminal/execute 已随路线 A 退役删除;agent 的 run_command 走确认门,不受此开关)
VORTOCODE_ENABLE_SHELL=
# Agent shell / generated-code sandbox policy: auto (default) | required | off.
# auto uses macOS Seatbelt or Linux bubblewrap. Interactive fallback is reported;
# autonomous dev/test/runtime execution fails closed if no backend is available.
# Use off only as an explicit trusted-environment host-execution escape hatch.
VORTOCODE_SANDBOX=auto
3. 安装命令行(推荐)
pip install -e . # 注册 vortocode / vc 控制台命令
vc --help # 查看所有子命令
不安装也能用
python main.py <命令>(薄壳等效)。
4. 使用
# 引擎服务(默认 127.0.0.1:8080;Desktop 与 vc agent --attach 连它;对外暴露务必设 VORTOCODE_API_TOKEN)
vc server
# Desktop 本机工作台(需 Node.js、Rust 与 Tauri 2 系统依赖)
cd desktop && npm install && npm run tauri dev
# Desktop release 自检与 macOS 开发者预览包
cd desktop && npm run check && npm run bundle:preview
cd desktop && npm run release:verify -- --mode release # 正式发布闸门
# 开发任务:主 agent 用隔离 dev 流水线实现(需配 API key)
vc agent -b "用 Python 写一个计算阶乘的函数及其单元测试" # 取代已退役的 5 角色批处理 vc run
vc analyze -t "创建一个 REST API"
Desktop 预览包已内置只暴露本机 Gateway 的 Python sidecar,不要求用户预装 vc;仍可连接已有本机 runtime。构建使用固定并校验的 standalone CPython、锁定的独立环境,并从实际冻结组件和 CPython runtime 生成第三方 notices 与发布证据;公开 macOS 分发还需要许可证人工复核、Developer ID 签名、公证和 Apple Silicon 原生 arm64 成品验收。详见 Desktop README。
默认仅监听本地回环(127.0.0.1)。对外暴露前务必设置
VORTOCODE_API_TOKEN,见下方「安全」。
快速上手(常驻 + attach 日用)
装好命令行后(见上文「快速开始」),把 VortoCode 跑成一位「常驻开发同事」的推荐路径是三步—— 先验管道、再常驻、日常 attach。下面只给最短路径;每步的展开、开关矩阵和排障都在 常驻运维手册 docs/OPS.md,细节以那份手册为准(这里只放链接、不复制内容,避免两处不同步)。
-
验管道 ——
vc doctorvc doctor # git / API key / 中转站 / serve / 沙箱 / 权限 / gh / IM 一屏自检;有硬伤退出码 1排障清单(serve 未起、中转站不可达、
permissions.yaml写坏会静默降级等)见 OPS.md《四、出问题先查什么》。 -
常驻 ——
vc servervc server # 唯一状态所有者,缺省 127.0.0.1:8080;Desktop 与 attach 客户端连它macOS 用 launchd 开机常驻、内嵌 IM、代理环境注意事项见 OPS.md《一、常驻(macOS launchd)》; CRON / HEARTBEAT / IM 等开关默认全关(零自主消耗),矩阵见 OPS.md《二、开关矩阵》。 对外暴露前务必先设
VORTOCODE_API_TOKEN(设了则所有/api/*与/ws强制鉴权)。 -
日用 —— Desktop,或
vc agent --attachvc agent --attach "…" # 回合交给常驻 serve 跑;serve 不在时自动回退进程内、不挡活attach 优先的日常用法(后台任务、通知三路、
vc agent --attach脚本化问答)见 OPS.md《三、日常用法(attach 优先)》。
开发路线图
下面是最初规划的阶段划分(历史规划,非当前现状)。当前主线是「交互式主 Agent(见上文)
- 隔离 dev 流水线」;DEVELOPMENT_SUMMARY 为历史演进记录、部分内容已随「路线 A」退役而过时。
- Phase 0: 基础架构升级 — 已落地
- Phase 1:
自我编排引擎— 已退役(5 角色批处理/能力匹配/失败恢复删除);仅保留任务分析/分解,并入隔离 dev 流水线 - Phase 2: 工具集成层 — MCP 工具自动发现+注册可用
- Phase 3: 记忆与学习系统 — 会话/长期/向量记忆可用;知识图谱已移除(未集成的孤儿模块)
- Phase 4: 技能与子代理系统 — 技能/Hooks 与按需角色子代理已接入主运行链路
- Phase 5: 高级特性与优化 — 监控/安全/沙箱可用;实时补全、内联编辑、多模型协商等仍为规划项
当前方向与后续阶段以 开发路线图 和本 README 上文「核心特性」为准;DEVELOPMENT_SUMMARY 仅保留历史演进记录,部分内容可能已经过时。
贡献指南
欢迎贡献!请阅读 贡献指南 了解如何参与项目开发,并遵守 行为准则。
许可证
MIT License
致谢
- Claude Code - 提供了 Agent 系统设计灵感
- Model Context Protocol - 工具集成标准
- AaaS - 自我编排框架参考
- Manus Killswitch - 多 Agent 协作参考
私人助手评测:python -m evals --suite assistant --list 查看 14 道固定场景,--live 显式运行模型。用临时资料测试记忆、定时跟进、确认拒绝和结果证据;详见私人助手能力与题库。