deco Studio
开源 · TypeScript 优先 · 随处部署
面向组织的开源私有 AI 工作区。
文档 · Discord · decocms.com/studio
TL;DR: 您的团队需要一个安全的内部 vibecoding 平台。您刚刚找到了它。使用团队上下文配置 agents。一次性连接私有 MCPs —— 共享能力,而非凭证。保持模型层可互换。通过 SSO、RBAC、审计日志和成本控制,在整个组织中推广 —— 全部通过一个 MCP 端点。本地优先。自托管或使用云。
什么是 deco Studio?
Studio 将内部 AI 部署背后的基础设施打包在一起:模型路由、MCP 认证、agent 配置、SSO、RBAC、审计日志以及用量核算。您的团队获得聊天功能。您保留控制权。
在底层,它是您 AI agents 的一个控制平面——为您的所有 agents、工具和模型提供一个 MCP 端点。Agents 将上下文、工具和策略打包成您可以发布到组织中的内容。连接为它们提供对您系统的受治理访问——GitHub、Slack、Postgres、Sentry,任何支持 MCP 的系统——令牌存储在加密保险库中。模型保持可互换:OpenRouter 或直接提供商,按 agent 和按工具选择。
从一个团队开始。标准化已批准的模型、工具和上下文。在整个组织中扩展,而无需复制密钥或重建平台。本地安装并保持私有;同步到云端以实现远程访问、团队角色和共享计费。
┌─────────────────────────────────────────────────────────────────┐
│ Clients │
│ Cursor · Claude · VS Code · Custom Agents │
└───────────────────────────┬─────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ DECO STUDIO │
│ Agents · Connections · Models · Vault · Observability │
└───────────────────────────┬─────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ Tools & MCP Servers │
│ GitHub · Slack · Postgres · OpenRouter · Your APIs │
└─────────────────────────────────────────────────────────────────┘
快速入门
bunx decostudio
或从源代码克隆并运行:
git clone https://github.com/decocms/studio.git
bun install
bun run dev
运行在 http://localhost:4000 (客户端),API 路由代理到 Bun 服务器
你将获得
智能体
将上下文、工具和策略打包成一个智能体。定义指令,添加技能和文件,授予已批准的 MCP 访问权限,选择模型策略,然后将智能体发布到组织。每个智能体都是独立的 MCP 端点——可从 Cursor、Claude Desktop、你自己的代码或另一个智能体调用。智能体可以组合,并且每个操作都会记录成本归属。
连接
一次性安全地连接私有系统。通过 Web UI 在组织级别注册 MCP 服务器,支持一键 OAuth——无需 JSON 配置。令牌存储在加密保险库中,你可以按组织、角色或智能体授予工具级别的访问权限。共享 MCP 能力——而非凭据。
随着工具表面扩展,Studio 暴露 Virtual MCPs——一个端点,针对要暴露哪些工具采用不同的策略:
- 全上下文: 暴露所有内容(简单、确定性,适用于小型工具集)
- 智能选择: 在执行前缩小工具集
- 代码执行: 在沙箱中按需加载工具
模型
保持 AI 层可互换。使用 OpenRouter 或直接连接 Anthropic、OpenAI、Google 或任何兼容提供商——为每个智能体和工具选择最佳模型,背后是一个路由器。对于编码工作,工程师可以链接他们自己的 Claude Code 或 Codex 会话,并使用已在他们机器上认证的订阅。
项目
项目将智能体和连接围绕一个目标聚集在一起。项目的 UI 会根据其内部内容进行调整——添加一个内容智能体和一个 CMS 连接,侧边栏会显示内容管理;添加一个分析智能体和一个数据库,它会显示仪表板和查询。你看到的 UI 就是操作该项目所相关的 UI。
可观测性
记录每一次模型和工具调用。追踪每个线程的用户、智能体、模型、工具、延迟、错误、令牌和成本。按智能体、连接、组织或团队成员细分使用情况——一个仪表板。
从你的桌面到你的组织
| 本地 | bunx decostudio 在你的桌面上。嵌入式 PostgreSQL。私有。 |
| 云端 | 登录 studio.decocms.com。从任何浏览器控制本地项目。 |
| 团队 | 邀请人员。SSO 和基于角色的访问。共享连接。成本归属。 |
| 企业 | 自托管。组织隔离、工具范围 API 密钥、审计日志。你的基础设施,你的规则。 |
核心能力
| 能力 | 功能说明 |
|---|---|
| Agents | 将上下文、工具和策略打包为可发布的 agents,并支持成本归因 |
| Connections | 通过一个受治理的端点路由 MCP 流量,支持认证、代理和加密令牌保险库 |
| Models | 可互换的 AI 层 — OpenRouter 或直连提供商,每个 agent 可配置模型策略 |
| Projects | 围绕目标组织 agents 和 connections,并提供自适应 UI |
| Virtual MCPs | 组合并暴露受治理的工具集作为新的 MCP 端点 |
| Observability | 按用户、agent 和 connection 追踪、成本、错误和延迟 — 统一仪表盘 |
| Access Control | 通过 Better Auth 实现 SSO + RBAC — 每个 workspace/project 支持 OAuth 2.1 和工具级 API 密钥 |
| Multi-tenancy | 针对配置、凭据、策略和审计日志的组织/项目隔离 |
| Event Bus | connections 之间的发布/订阅,支持计划/cron 投递和至少一次投递保证 |
| Bindings | 能力契约,使工具面向接口而非特定实现 |
| Store | 发现并安装 agents、工具和模板 |
定义工具
类型安全、可审计、可观测,可通过 MCP 调用。
import { z } from "zod";
import { defineTool } from "~/core/define-tool";
export const CONNECTION_CREATE = defineTool({
name: "CONNECTION_CREATE",
description: "Create a new MCP connection",
inputSchema: z.object({
name: z.string(),
connection: z.object({
type: z.enum(["HTTP", "SSE", "WebSocket"]),
url: z.string().url(),
token: z.string().optional(),
}),
}),
outputSchema: z.object({
id: z.string(),
scope: z.enum(["workspace", "project"]),
}),
handler: async (input, ctx) => {
await ctx.access.check();
const conn = await ctx.storage.connections.create({
projectId: ctx.project?.id ?? null,
...input,
createdById: ctx.auth.user!.id,
});
return { id: conn.id, scope: conn.projectId ? "project" : "workspace" };
},
});
每次工具调用都会自动获得输入/输出验证、访问控制、审计日志和 OpenTelemetry 追踪。
项目结构
应用程序
| 工作区 | 用途 |
|---|---|
apps/api | Hono API、身份验证、工具、存储、迁移以及 deco CLI |
apps/docs | Astro 文档站点 |
apps/native | Tauri 桌面应用和本地 Rust 运行时 |
apps/web | Vite 和 React 19 管理界面 |
包
| 工作区 | 用途 |
|---|---|
packages/bindings | 运行时验证的 MCP 能力契约 |
packages/create-deco | npm create deco 项目脚手架 CLI |
packages/e2e | 针对 Studio 的黑盒 Playwright 测试套件 |
packages/harness-runner | 沙箱内的编码代理测试框架进程 |
packages/mcp-utils | MCP 代理、网关、聚合以及沙箱原语 |
packages/runtime | 用于 MCP 服务器、OAuth、工具和触发器的运行时辅助工具 |
packages/sandbox | 代理沙箱生命周期、守护进程、分发和代理实现 |
packages/shared | 私有同构契约、SDK 工具和异步原语 |
packages/typegen | 用于 Studio 虚拟 MCP 的类型化客户端生成器 |
packages/ui | 内部 React 设计系统 |
开发
bun install # Install dependencies
bun run dev # Run the web app and API
bun test # Run tests
bun run check # Type check
bun run lint # Lint
bun run fmt # Format
应用特定命令
bun run --cwd=apps/web dev # Vite dev server (port 4000)
bun run --cwd=apps/api dev:server # Hono server with hot reload
bun run --cwd=apps/api migrate # Run database migrations
Worktrees
dev:worktree 通过 Caddy 路由 http://<WORKTREE_SLUG>.localhost — 适用于运行多个工作区且无端口冲突。
# One-time setup
brew install caddy && caddy start
# Start
WORKTREE_SLUG=my-feature bun run dev:worktree
# Conductor adapter (sets WORKTREE_SLUG from CONDUCTOR_WORKSPACE_NAME)
bun run dev:conductor
随处部署
# Docker (embedded PostgreSQL)
docker compose -f deploy/docker-compose/docker-compose.yml up
# Docker (PostgreSQL)
docker compose -f deploy/docker-compose/docker-compose.postgres.yml up
# Bun
bun run build:studio && bun run --cwd=apps/api start
# Kubernetes (Helm)
helm install deco-studio oci://ghcr.io/decocms/chart-deco-studio --version <version> -n deco-studio --create-namespace
无供应商锁定。可运行于 Docker、Kubernetes、AWS、GCP 或本地运行时。
运行所需条件
| 层级 | 资源占用 |
|---|---|
| 笔记本电脑 | 无。单进程,嵌入式 PostgreSQL。 |
| Docker | 已发布的镜像。自带 PostgreSQL 或使用嵌入式版本。 |
| 生产环境 (Helm) | 自带 PostgreSQL,以及可选的 NATS(事件总线唤醒)、ClickHouse + OTel Collector(追踪与分析),还有沙箱操作器(Kubernetes 上的隔离代理环境)。您的身份提供商、您的模型密钥、您的存储。 |
生产拓扑
graph TB
clients["MCP clients — Cursor · Claude · VS Code · your code"]
clients -->|"one MCP endpoint · SSO · RBAC · audit"| api
subgraph k8s ["Kubernetes (Helm)"]
api["Studio API + Admin UI"]
api --> sandbox["Agent sandboxes<br/>(sandbox-operator)"]
api -->|"notify"| nats["NATS"]
api -->|"traces · costs"| otel["OTel Collector"]
nats -->|"wake"| worker["Workers<br/>event bus · schedules"]
otel --> ch[("ClickHouse")]
end
pg[("PostgreSQL")]
api --> pg
worker --> pg
subgraph upstream ["Models & tools"]
models["Anthropic · OpenAI<br/>OpenRouter · Ollama"]
mcps["GitHub · Slack · Postgres<br/>your MCP servers"]
end
api -->|"model routing · vaulted credentials"| upstream
除 Studio 和 PostgreSQL 外,每个组件都是可选的——从小规模开始,随着部署规模的扩大再启用其余组件。
技术栈
| 层级 | 技术 |
|---|---|
| 运行时 | Bun / Node |
| 语言 | TypeScript + Zod |
| 框架 | Hono (API) + Vite + React 19 |
| 数据库 | Kysely → 嵌入式 PostgreSQL / PostgreSQL |
| 认证 | Better Auth (OAuth 2.1 + API keys) |
| 可观测性 | OpenTelemetry |
| UI | React 19 + Tailwind v4 + shadcn |
| 协议 | Model Context Protocol (MCP) |
路线图
- Agent 市场 — 发现、雇佣和组合 Agent
- 声明式规划引擎
- 成本分析和支出上限
- 从任意浏览器远程访问
- 实时追踪调试器
- 带护栏的工作流编排
许可证
MIT — 参见 LICENSE.md.
贡献
bun run fmt # Format
bun run lint # Lint
bun test # Test
请参阅 AGENTS.md 了解编码指南,CONTRIBUTING.md 了解贡献流程,以及 TESTING.md 了解测试规则。
良好的起步方式:打开一个 issue,选择一个标记为 good first issue 的问题,或在 Discord 中提问。
贡献者
Studio 以开放方式构建。感谢每一位提交代码的贡献者。
维护者 — 参见 MAINTAINERS.txt:
@guitavano · @viktormarinho · @mcandeia · @pedrofrxncx · @JonasJesus42 · @aka-sacci-ccr · @vibegui · @tlgimenes · @vibe-dex · @nicacioliveira