
SkyDot 是什么
SkyDot 是一个基于 Pi Agent Runtime 的开源、自托管多用户 Agent 工作台。你可以创建多个可命名、可配置的 Dot,让它们分别承担不同职责;也可以把多个 Dot 放入群聊,通过定时任务、Skills、MCP、Plugins 和 Memory 扩展长期工作能力。
它并不只是一个聊天页面。Workspace 负责划分文件、会话、记忆与执行边界,Backend 处理认证、权限、队列、调度、Provider 和消息渠道,Host 或 Docker Runner 则负责真正执行 Agent。需要用户确认的工具授权、设备请求和任务进度,也会返回同一个工作台。

核心架构与执行边界
SkyDot 将界面、控制面和执行面分离,适合个人使用,也适合团队自托管部署。
- Backend:基于 Node.js、TypeScript、Hono、SQLite 和 WebSocket,负责认证、持久化、队列、调度、Provider、渠道与授权。
- Runner:使用 Pi Agent Runtime 执行实际 Agent 任务,可选择本机 Host 模式或非 root Docker 容器。
- Workspace:决定文件、Session、Memory、渠道绑定和运行边界。
- Web、PWA 与 Electron:共用 React 业务前端,Electron Renderer 只负责界面,不直接接触数据库、文件系统、凭证、Docker 或 shell/process 权限。
权限不会因为某一层通过就自动越过其他边界。部署团队环境前,建议阅读权限矩阵与安全策略。
主要功能
个人 Dot 与会话
每个 Dot 都可以独立设置名称、头像、Prompt、模型、思考级别、Skills、MCP 和执行策略。对话支持流式输出、Markdown、代码块、文件附件、中止、后续消息与会话恢复。

不同 Workspace 之间相互隔离,文件、会话、记忆、渠道绑定和执行权限不会因为进入同一个界面而混用。执行时可以选择 Host 模式,也可以选择 Container 模式。
多 Dot 群聊与协作
开启原生群聊后,可以在同一时间线中查看多个 Dot 的消息、任务回执、进度和结果。明确提及与受控委派用于控制协作范围;重新连接或重新打开页面只会读取状态,不会自动提交新任务。

群聊默认关闭。启用原生群聊需要设置 SKYDOT_BOT_GROUPS=true;如果还要允许 Bot 之间执行协作,则需要额外设置 SKYDOT_BOT_HANDOFFS=true,并由管理员配置运行权限和调用预算。

定时任务、Skills 与 Memory
Scheduler 支持 Cron、固定间隔和一次性任务,并提供立即运行、暂停、取消、运行历史和结果投递。Skills、MCP 与 Plugins 可以集中管理,再按 Dot 配置启用范围。
Memory 以 Workspace 为单位保存事实、偏好、决策、经验和待跟进事项,支持搜索、新建、编辑、忘记和版本历史。Session 保存具体对话上下文,Workspace Memory 保存可跨 Session 复用的知识,两者彼此独立。
安装前准备
- Node.js:22.19 或更高版本,推荐 Node.js 24 LTS。Pi Durable 存储需要 Node.js 内置 SQLite。
- npm:随 Node.js 安装,用于安装各子项目依赖。
- Docker:仅在 Container 执行模式下需要。
- Model Provider:真实 AI 对话需要可用的模型 Provider;没有 API Key 时仍可以先启动界面。
- GNU Make:可选,用于类型检查、备份和运维命令。
从零安装 SkyDot
1. 克隆仓库并安装依赖
在终端执行以下命令,分别安装主项目、Web 前端和 Agent Runner 的依赖:
git clone https://github.com/2SinceJuly/SkyDot.git
cd SkyDot
npm install
npm --prefix web install
npm --prefix container/agent-runner install2. 构建并启动服务
完成依赖安装后,构建全部组件并启动 Backend:
npm run build:all
npm start打开 http://127.0.0.1:3000,按照页面完成管理员初始化。Provider 和消息渠道可以选择稍后配置,但没有模型配置时,真实 AI 对话无法运行。
3. 启动开发环境

开发时可以同时启动 Backend 和 Vite Web Client:
npm run dev:all开发页面默认地址为 http://127.0.0.1:5173。如果只是希望在本机快速浏览界面,可以使用回环地址免登录 Demo:
SKYDOT_DEMO_OPEN=true PROVIDER_SETUP_SKIPPED=true npm start不要在公网或不可信网络中启用 Demo 模式。该模式的完整限制请参考仓库中的 DEMO.md。
配置模型 Provider
SkyDot 允许先完成界面初始化,再到设置中补齐 Provider。接入真实模型时,需要准备对应的 API Key、Session Cookie 或其他凭证,并避免将凭证写入截图、命令行历史或 Git 仓库。
如果使用第三方 OpenAI Completions 接口,可以在 Provider 的自定义环境变量中设置:
SKYDOT_MODEL_API=openai-completions默认协议为 anthropic-messages,该设置同时用于普通 Dot 对话的 Host 和 Container Runner。
选择 Agent 执行模式
Host 模式
Host 模式直接使用本机 Runner,不需要 Docker,适合本地开发和快速验证。执行权限仍受 Workspace、用户和运行策略限制。
Container 模式

Container 模式需要 Docker 可用,并准备 Agent Runner 镜像。默认镜像为 2sincejuly/skydot-agent:latest,也可以从当前源码构建:
docker build --pull -t 2sincejuly/skydot-agent:latest container如需使用其他镜像,可设置 SKYDOT_CONTAINER_IMAGE,兼容配置项为 CONTAINER_IMAGE。服务与镜像构建必须连接到同一个 Docker daemon。make start 或 make dev 会优先使用本地镜像,缺失时尝试拉取。
运行桌面端 Electron
如果 Backend 与 Vite 已经启动,可以在另一个终端运行 Electron:
SKYDOT_RENDERER_URL=http://127.0.0.1:5173 npm run desktop:dev如果 Backend 已提供构建后的页面,也可以直接执行:
npm run desktop:devElectron 还可以连接远程 Backend:
SKYDOT_SERVER_URL=https://your-skydot.example.com npm run desktop:dev本地打包可使用以下命令:
npm run desktop:package:dir
npm run desktop:package项目默认提供 macOS arm64 打包配置,同时保留 Windows 和 Linux 目标。正式发布前,需要针对目标平台配置签名和公证。
关键环境变量

WEB_PORT:Backend 监听端口,默认值为3000。SKYDOT_SERVER_URL:Electron 连接的 Backend 地址,默认值为http://127.0.0.1:3000。SKYDOT_RENDERER_URL:Electron 加载的 Renderer 地址。SKYDOT_CONTAINER_IMAGE:Agent Runner 容器镜像。PROVIDER_SETUP_SKIPPED:没有系统设置文件时跳过 Provider 引导。SKYDOT_BOT_GROUPS:启用原生多 Dot 群聊。SKYDOT_BOT_HANDOFFS:启用群聊中的 Bot 执行协作。SKYDOT_PERSONAL_GOALS:启用个人 Goal 实验能力。
个人 Goal 和 Durable Runtime 默认关闭。普通定时任务不依赖这些开关,具体运行前提请查看 Goals and Tasks 文档。
一个基础使用流程
- 登录 SkyDot 并完成管理员初始化。
- 在设置中配置可用的 Model Provider。
- 创建一个 Dot,为它设置名称、Prompt、模型和执行策略。
- 为 Dot 选择 Workspace,确保文件和记忆边界符合预期。
- 在对话中发送任务,观察流式输出、工具授权和执行结果。
- 如果需要长期运行,再创建 Cron、固定间隔或一次性任务。
- 当需要多角色协作时,开启群聊功能并明确配置 Bot 协作权限。
例如,可以创建一个负责代码分析的 Dot 和一个负责资料整理的 Dot,再把它们加入同一群聊。通过明确提及或受控委派分配任务,用户可以在共享时间线中查看进度和结果,同时保持各自 Workspace 的权限边界。
运维与安全建议
运行时数据默认保存在仓库的 data/ 目录,其中包括 SQLite、Workspace、Session、Memory 和运行配置。该目录不会进入 Git,但备份可能包含敏感配置和数据库,应当与原始数据同等保护。
- 使用
make status查看 Backend、日志和 Docker 状态。 - 使用
make stop停止当前端口上的 SkyDot 服务。 - 使用
make backup创建运行时数据备份。 - 使用
make restore FILE=...恢复指定备份。 - 使用
make typecheck执行 Backend、Web、Agent Runner 与文档检查。 - 使用
npm test -- --run运行 Vitest 测试。
远程部署时应使用 HTTPS 和 WSS,并正确配置反向代理、Cookie 与访问控制。不要把 Renderer、数据库或 Docker daemon 直接暴露给不可信用户,也不要为了省事开启公网 Demo。
进一步扩展
SkyDot 的能力库支持内置、宿主机、项目、用户、Workspace 和 Plugin 等来源。Agent 运行前会生成有效能力清单,并根据策略注入 Prompt、资源和上下文。项目还支持 Plugin 版本快照、Subagents,以及 Host 与 Container 一致的能力边界。
消息入口方面,Web、PWA 和 Electron 共用同一套业务前端,并可接入飞书、Telegram、QQ、钉钉、微信、Discord、WhatsApp 等渠道。渠道可以绑定到指定 Workspace 或 Session。
总结
SkyDot 将多 Dot 对话、Workspace 隔离、Agent 执行、定时任务、扩展能力和团队权限整合到一个自托管工作台中。按照本文完成 Node.js 环境准备、依赖安装、构建启动和 Provider 配置后,你就可以先运行个人 Dot,再逐步启用 Docker、Electron、群聊、Scheduler、Skills、MCP 与 Memory 等能力。
由于项目仍在持续开发,真实模型、Docker、外部渠道和远程部署都依赖各自的凭证与运行环境。Goal、Durable 或 Cloud Runtime 等实验能力也不应被视为默认启用的功能。
