AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
开源共建 · 技术平权 —— 让智能体像人一样学习和工作。 Agents Universe 是一个开源的企业级 AI Agent 平台。它不是又一个"更聪明的聊天框",而是要让智能体真正成为能干活的人:入职读懂文档、接任务先规划、以个人身份与权限执行、留下可审计的轨迹——并把这一切沉淀为每个人都能复用、共同建设的资产。 Codex 式三栏界面:左侧会话与项目导航,中间对话流,右侧计划与知识上下文(点击可查看大图) 本项目已部署在 agents-universe.com,并且正在被它自己管理。 平台上的 Product Owner 与 Tech Lead 智能体,就是这个仓库的日常维护者:需求、代码、PR 都由智能体们在对话中完成。 因此——给这个项目做贡献,不需要会写代码。注册账号、配置你自己的模型 API Key 与 Git Token,然后和 Product Owner 聊需求,聊得差不多 @Tech Lead 告诉它要实现哪个,即可完成协作提交 PR。详见 零代码共建。 今天,一个智能体好不好用,几乎取决于"是谁调教的"。资深工程师的智能体可以独立交付整个功能,而普通人面对同样的框架,得到的往往是一个"会聊天但干不了活"的助手。智能体的能力被锁在个人的 Prompt 与上下文里:人均而异、无法复制、不可传承。 今天的智能体产品站在两个极端。檢視完整 README ↗
开源共建 · 技术平权 —— 让智能体像人一样学习和工作。
Agents Universe 是一个开源(Apache-2.0)的企业级 AI Agent 平台。它不是又一个"更聪明的聊天框",而是要让智能体真正成为能干活的人:入职读懂文档、接任务先规划、以个人身份与权限执行、留下可审计的轨迹,并把这一切沉淀为每个人都能复用、共同建设的资产。
Codex 式三栏界面:左侧会话与项目导航,中间对话流,右侧计划与知识上下文(点击可查看大图)
30 秒了解 Agents Universe
docker compose up --build 自托管。详见零代码共建与快速开始🚀 它正在管理它自己
本项目已部署在 agents-universe.com,并且正在被它自己管理。 平台上的 Product Owner 与 Tech Lead 智能体,就是这个仓库的日常维护者:需求、代码、PR 都由智能体们在对话中完成。
因此——给这个项目做贡献,不需要会写代码。注册账号、配置你自己的模型 API Key 与 Git Token,然后和 Product Owner 聊需求,聊得差不多 @Tech Lead 告诉它要实现哪个,即可完成协作提交 PR。详见 零代码共建。
不想搭环境?直接在 agents-universe.com 上体验,并按 零代码共建 的方式参与共建。
# 1. 复制环境变量与编排文件(docker-compose.yml 未入库,必须从 example 复制)
cp .env.example .env
cp docker-compose.example.yml docker-compose.yml
# 2. 生成 SECRET_KEY 并写入 .env(启动时会拒绝一切 change-me 占位值)
# bash / macOS / Linux:
echo "SECRET_KEY=$(openssl rand -hex 32)" >> .env
# PowerShell:
# Add-Content .env "SECRET_KEY=$(python -c 'import secrets;print(secrets.token_hex(32))')"
# 3. 启动全部服务(首次构建含 Playwright 与渗透测试工具链,视网络约 10-30 分钟)
docker compose up --build
服务地址:
/api、/ws,健康检查 /health)docker compose --profile dev up → http://localhost:5173几点说明:
.env 里不需要 LLM API Key:启动后在 Settings → AI Models 按用户配置(加密存库);SYSTEM_DEFAULT_* 仅作可选兜底。
默认 AUTH_BYPASS_ENABLED=true 免登录,开箱即用,仅供本地体验;生产部署请关闭并配置 OAuth SSO。
数据库迁移与全局知识索引由容器启动脚本自动执行。
首次构建默认使用中国境内镜像源;网络不通时改用官方源构建:
docker compose build \
--build-arg NPM_REGISTRY=https://registry.npmjs.org \
--build-arg PIP_INDEX_URL=https://pypi.org/simple \
--build-arg PIP_TRUSTED_HOST=pypi.org \
--build-arg APT_MIRROR_HOST=deb.debian.org \
--build-arg NODE_BASE_URL=https://nodejs.org/dist \
--build-arg PLAYWRIGHT_DOWNLOAD_HOST=https://cdn.playwright.dev
docker compose up
# 0. 依赖服务(SQL Server + Redis;compose 文件同上,从 example 复制)
docker compose up -d sqlserver redis
# 1. 环境变量:cp .env.example .env,生成 SECRET_KEY(同上),
# 并把 PROJECTS_ROOT 设为已存在的绝对路径(子项目工作区目录)
# 2. API (packages/api/)
cd packages/api
python -m venv .venv
source .venv/bin/activate # Windows PowerShell: .\.venv\Scripts\Activate.ps1
pip install -e ../agent-core -e .
PYTHONPATH=src python -m uvicorn api.main:app --port 8000 --reload
# Windows PowerShell: $env:PYTHONPATH='src'; python -m uvicorn api.main:app --port 8000 --reload
# 3. Frontend (packages/web/)
cd packages/web
npm install
npm run dev # http://localhost:5173,代理到 :8000
# 4. 数据库迁移(API 启动时也会自动执行,手动跑仅为确认)
cd packages/api
alembic upgrade head
# 5. 全局知识索引(本地开发不会自动执行,Docker 部署由 entrypoint 执行;在仓库根目录运行)
python -m agent_core.knowledge.index --global-dir ./knowledge
本地开发直连 uvicorn,API Docs 在 http://localhost:8000/docs;Docker 部署下该路径由 nginx 交给前端 SPA,不提供 Swagger。
为什么需要再做一个智能体平台?先看行业的两极困局,再看 Agents Universe 的答案与愿景。
今天的智能体产品站在两个极端。
举个常见的例子:同一个项目,两个人各自调教智能体——资深工程师的智能体读过全部文档、记住所有口径,能独立交付一整个功能;同事打开同样的框架,得到的却是一个"会聊天但干不了活"的助手。更难受的是,项目背景、业务口径、踩过的坑,散落在各人各自的对话记录里——每个人的智能体都只知道自己那一份,换个人来问,它一无所知。
一端是开发者框架 —— Claude Code、VS Code AI 等,自由度与上限都极高,但:
另一端是低代码平台 —— Dify 等,上手简单,但设计理念从"知识库 + 应用配置"出发:
| 像人一样 | Agents Universe 的做法 |
|---|---|
| 学习:入职读文档,干活中不断更新 | 项目选中即全量加载知识;交给它的文档提取后整理进对应知识条目,工作全程持续迭代;[[slug]] 显式表达业务结构;模糊决策主动向用户澄清 |
| 工作:接任务、拆任务、执行、汇报 | plan_task 拆解任务树;按上下文选择工具;个人身份与权限执行;WebSocket 实时可见 |
| 传承:老带新,经验沉淀 | 技能(Skills)、工作流(Workflows)与知识条目把个人经验变成组织资产;开源共建,人人可用 |
今天,一个智能体好不好用,几乎取决于"是谁调教的"。智能体的能力被锁在个人的 Prompt 与上下文里:人均而异、无法复制、不可传承——团队里每个人都守着自己的一套上下文,却没有人能接上别人的。
我们相信,这不应该是一种常态:
愿景是让智能体像人一样学习和工作——这建立在三条底层设计之上:学习靠读写、工作靠边界、能力靠传承。而人学习从来不靠"换一个更聪明的大脑",靠的是几件具体的事:入职先读文档、干活中学本事、记错会改正、出师带新人。Agents Universe 把这些事做成了闭环机制,让智能体的能力随使用不断成长:
入职读懂项目 → 干活中学本事 → 经验沉淀为资产
↑ │
└────── 新项目继承资产 · 再出发 ──┘
knowledge-ingestion 工作流学习:判断文档归属(业务规则进 domain/、接口进 technical/、操作手册进 skills/)、提取有用信息、总结成带 [[slug]] 交叉引用的结构化知识条目写回项目——API 文档按"索引 + 按服务 detail"两级归档,发现已有相似条目会先问你是更新还是新建,绝不重复knowledge/loader 把学到的知识两级加载:primary 文件全文读入上下文,detail 文件按需再取。学习靠"读",不靠"搜" —— 没有向量检索的碎片召回,全量加载是"读完"而非"搜过",[[slug]] 是目录与参考文献式的显式结构,拿不准就主动澄清;上下文完整,理解才完整,工作才不会跑偏knowledge_rw 把新学到的东西写回知识条目:新接口进 api-map.md、指标口径进 metric-catalog.md、测试经验进 test-patterns.md。学习靠"写",不靠"收藏" —— 只提取信息、归类整理,而不是把原文堆在上下文里knowledge_versions)、WebSocket 实时同步进度;API 文档超过阈值时强制拆成"索引 + 按服务 detail"两级结构,防止知识文件长成无法通读的一团load 进上下文,任务完成自动 unload 释放;超出上下文预算的文件只列目录供按需读取。和人的工作记忆一样——手边只放当前任务需要的东西。[stale],经用户确认后退役;全部变更记入 history.md,残留的索引行由 purge 清理。遗忘不是数据丢失,而是可审计的修正——人会记错,重要的是及时更正。plan_task 先规划再动手;密钥加密、明文不进 LLM 上下文,以个人身份与最小权限执行;思考与执行全程 WebSocket 可见可审计。没有边界的自主是失控,没有自主的边界是脚本。更细的代码入口与内部机制见实现原理指南:从聊天到可审计的企业智能体。
平台内置多种开箱即用的智能体,全部选定即用,不需要写任何 Prompt 或配置——像一支 24 小时在线的小团队。其中 Product Owner / Tech Lead / Quality Assurance 三个敏捷角色组成一条完整的 需求 → 实现 → 验证 交付链路:它们都遵循"知识优先"原则——选中项目即全量加载项目上下文(业务背景、词汇表、页面地图、API 清单、测试模式、历史记录……),通过 [[slug]] 交叉引用互相衔接,任何工作都建立在项目的全部上下文之上,而不是孤立的一次性对话。
| 智能体 | 职责 | 典型用途 |
|---|---|---|
| Product Owner | 需求澄清、故事卡、Jira 跟踪 | "聊聊这个需求" |
| Tech Lead | 读代码、写实现、跑测试、提 PR | "把这张卡做出来" |
| Quality Assurance | 测试设计、Playwright 脚本、回归 | "验证这张卡" |
| 办公助手 | PPT / Excel / Word / 网页演示 / ZIP 打包解压 | "做一份汇报 PPT""整理成 Excel""把这个文件夹打包成 zip" |
| 数据分析专家 | 对齐项目指标口径取数(业务库 + 本地文件),覆盖异动归因、例行报告与图表看板 | "解释这个指标为什么涨" |
| 智能客服 | 严格依据项目知识作答的客服问答、政策咨询、自动转人工 | "查一下退换货政策" |
| 渗透测试专家 | 授权范围内白盒渗透、动态验证、修复建议 | "给整个项目做一次渗透测试" |
| 项目定制专家 | 项目知识、配置与工作区定制 | "帮我建立这个项目的知识" |
| 智能体定制专家 | 智能体定义、职责边界、工具组合定制 | "创建一个财务审核智能体" |
| 外部系统集成专家 | 外部系统接入、认证配置、联调排障 | "接入我们的 CRM 系统" |
tests/generated/,含登录流程与 Jira 标注)scaffold/tests/)中,在「定时任务」页签挂一个每日 cron 就能固定回归(或接入 CI/CD pipeline),运行时不消耗任何 token;结果摘要回到会话,失败时可以直接追问办公助手是平台的"文员":把项目知识与对话内容变成可交付的办公文件——
它只从项目知识(knowledge_rw)和用户提供的内容取材——每个数字都能溯源,推断处标注 [inferred],绝不编造数据。交付物经沙箱生成、结构校验后,以 /api/media/ 链接交付(JWT 鉴权,可直接下载;网页演示还能在平台内直接渲染)。
渗透测试专家是平台的"安全工程师":对已授权的项目做白盒渗透测试,产出 PTES 结构的报告与修复建议。无源码时自动降级为黑盒流程,并在报告中如实披露方法论立场。
user_confirm);生产环境与范围外目标需要单独确认;范围守卫的硬拒绝清单优先级高于一切指令(包括用户的)api_request 逐次确认;禁用 sql_query(平台数据库);全部命令在双层沙箱内执行;标记性 payload、只读枚举、有界延迟,点到为止full-project-pentest 串联范围界定 → 攻击面测绘 → 静态审计 → 动态测试 → 发现验证 → PTES 报告,安全经验回写项目知识智能体之间不是孤岛:输入框键入 @ 会弹出智能体列表,选中某个智能体后当前这一轮就由它来接——对话的默认智能体不变,交代完自动回到原角色。典型接力:
@办公助手:"把刚才这几张故事卡整理成 Excel 交付清单"——得到 .xlsx;@办公助手:"给管理层做一份 5 页汇报 PPT",它从项目知识取数生成 .pptx。同一条链路里还可以 @数据分析专家 取指标、@Quality Assurance 出测试用例,交付前 @渗透测试专家 做一轮安全体检。谁擅长什么就 @ 谁,一个对话里串起整支团队。
给这个项目做贡献不需要写一行代码,传统流程中 fork → clone → 写代码 → PR 的全部工作,在这里变成四步对话:
💡 你负责提需求和评审,代码交给智能体——像带一支真正的团队,而不是敲键盘。
会写代码的人可以贡献得更深:任何能沉淀为资产的成果都欢迎——
agents/skills/**/*.md,四类技能:指引、模板、可执行、复合workflows/*.workflow.md,把完整工作方法沉淀为可复用的步骤knowledge/,系统文档、技术文档、项目知识条目agents/*.agent.md,定义新角色的行为与边界每个人写下一个技能,就是为所有人解除一份门槛。
┌─────────────────────────────────────────────────────────────────┐
│ Browser (Vue 3) │
│ Codex-style 三栏布局 + WebSocket 实时流 │
└────────────────────────────┬────────────────────────────────────┘
│ HTTP / WebSocket
┌────────────────────────────▼────────────────────────────────────┐
│ FastAPI (Python 3.12) │
│ REST API · OAuth · JWT · Alembic Migrations │
├─────────────────────────────────────────────────────────────────┤
│ Agent Core (Python 3.12) │
│ LLM Orchestration · Agentic Loop · Knowledge Loader │
│ Skills Engine · Workflow Runner · Tool System │
└──────┬──────────────────┬──────────────────┬────────────────────┘
│ │ │
┌──────▼──────┐ ┌──────▼──────┐ ┌──────▼──────┐
│ SQL Server │ │ Redis │ │ LLM APIs │
│ (数据持久化) │ │ (会话/缓存) │ │ (多提供商) │
└─────────────┘ └─────────────┘ └─────────────┘
系统以四个数据库为一等公民运行:SQL Server(默认,mssql+aioodbc)、PostgreSQL(postgresql+asyncpg)、MySQL(mysql+aiomysql)、SQLite(sqlite+aiosqlite,仅开发/测试)。切换方式见 .env.example 的 Database 段:
# 最高优先级:完整 URL 覆盖一切(需安装对应驱动,见 packages/api/pyproject.toml extras)
DATABASE_URL=postgresql+asyncpg://postgres:postgres@localhost:5432/agentsuniverse
# 不设 DATABASE_URL 时回退到 DB_* 字段构造的 mssql+aioodbc URL(默认生产形态)
# MSSQL_CONNECTION_STRING 为更早的 legacy 回退,仅两者都未设时才参与
本地起备选库:docker compose --profile postgres up -d postgres 或 docker compose --profile mysql up -d mysql(MySQL 容器已配 utf8mb4_0900_bin 大小写敏感排序规则)。
数据库迁移与多方言适配:
# 从 packages/api/ 执行;迁移链对所有方言自动编译为对应 DDL(含 T-SQL 分支)
alembic upgrade head
alembic revision --autogenerate -m "description"
| 层 | 技术 |
|---|---|
| Frontend | Vue 3.5 + TypeScript + Vite + TailwindCSS + CodeMirror 6 + Pinia |
| API | Python 3.12 + FastAPI + SQLAlchemy 2.x + Alembic |
| Agent Core | Python 3.12 — LLM 编排引擎(纯库,无 HTTP) |
| Database | 多数据库一等公民:SQL Server (mssql+aioodbc) / PostgreSQL (asyncpg) / MySQL (aiomysql) / SQLite (aiosqlite);经 DATABASE_URL 切换 |
| Cache/Session | Redis 7 |
| Browser Automation | Playwright (Chromium) |
| Container | Docker multi-stage build, docker-compose |
agents-universe/
├── packages/
│ ├── agent-core/ # LLM 编排引擎 (纯 Python 库)
│ │ └── src/agent_core/
│ │ ├── agent.py # Agent 主循环
│ │ ├── compressor.py # 上下文压缩
│ │ ├── session.py # 会话管理
│ │ ├── providers/ # LLM 提供商适配器
│ │ ├── knowledge/ # 知识加载与索引
│ │ ├── skills/ # 技能引擎
│ │ ├── tools/ # Agent 工具系统
│ │ ├── sandbox.py # 双层沙箱(命令验证 + 文件守卫)
│ │ ├── sandbox_guard/ # CPython audit hook 文件守卫
│ │ └── workflows/ # 工作流执行器
│ │
│ ├── api/ # FastAPI Web 服务
│ │ └── src/api/
│ │ ├── main.py # 应用入口
│ │ ├── config.py # 配置管理
│ │ ├── database.py # DB 连接(多方言,DATABASE_URL)
│ │ ├── routers/ # REST 路由
│ │ ├── models/ # SQLAlchemy ORM 模型
│ │ ├── services/ # 业务逻辑
│ │ ├── middleware/ # Auth、CORS 等中间件
│ │ ├── websocket/ # WebSocket 实时通信
│ │ └── dependencies/ # FastAPI 依赖注入
│ │
│ └── web/ # Codex-style Browser UI
│ └── src/
│ ├── components/ # Vue 组件
│ ├── stores/ # Pinia 状态管理
│ ├── composables/ # WebSocket、路由等组合式函数
│ ├── router/ # Vue Router 路由定义
│ ├── pages/ # 页面视图
│ ├── layouts/ # 页面布局
│ └── api/ # REST API 客户端
│
├── agents/ # Agent 定义 (*.agent.md) + 技能 (skills/**/*.md)
├── workflows/ # 工作流定义 (*.workflow.md)
├── knowledge/ # 全局知识库
│ ├── system/ # 系统级知识
│ ├── technical/ # 技术知识
│ ├── categories.yaml # 项目分类注册表(各分类的知识条目子集)
│ └── _template/ # 新项目知识条目源文件
├── scaffold/ # 子项目测试脚手架(Playwright 配置,新项目 tests/ 初始化源)
├── docker-compose.example.yml # 容器编排示例(复制为 docker-compose.yml 后使用)
├── docker-entrypoint.sh # 容器入口:DB 迁移 → 全局知识索引 → nginx → uvicorn
├── nginx-combined.conf # nginx 反代配置(Web UI 与 /api 转发)
└── Dockerfile # Multi-stage 构建
通过提供商适配器接入多家 LLM(providers/registry.py 懒加载,未安装的 SDK 不影响启动):
模型配置与选择机制:
user_model_configs 表,API Key 经 AES-256-GCM 加密compressor.py)使用当前会话的同一模型生成历史摘要自动模型路由:Composer 模型选择条可切换到「自动」,按任务复杂度在用户已配置的模型间路由:
complexity_tier);添加时按 model_id 关键词自动推断默认值,可手动修改plan_task 子任务:直接按 estimated_complexity 路由,不额外调用modelName),消息徽章显示「自动 → 实际模型」knowledge_level: detail 文件仅索引元数据与摘要,Agent 通过 knowledge_rw 工具按需加载、任务完成即释放[[slug]] 语法互相引用,索引时解析为 knowledge_idproject_id = :current OR project_id IS NULLknowledge_rw 写入、合并、退役知识条目,每次变更记入 history.md;过时条目标注 [stale]、经用户确认后退役plan_task 工具触发结构化任务规划agent_tasks 数据表guidance(LLM 指令)、template(代码模板)、executable(可执行代码块)、composite(技能链)通过 POST /api/projects 创建的每个子项目拥有隔离的工作区:
{PROJECTS_ROOT}/{slug}/
├── agents/ ← 项目级 Agent 定义({slug}--{name}.agent.md,懒同步,可覆盖全局)
├── skills/ ← 项目级技能(同名覆盖全局技能)
├── workflows/ ← 项目级工作流
├── knowledge/ ← 按项目分类初始化知识条目子集
├── tests/ ← 初始化自带 Playwright 脚手架(scaffold/tests/),QA Agent 生成测试脚本
└── .tmp/
├── media/{conversation_id}/ ← 截图和生成的图片
└── work/ ← 临时工作文件
创建项目时按分类(软件项目 / 旧系统改造项目 / 数据分析 / 智能客服 / 文档知识库 / 其他)从 knowledge/_template/ 初始化对应的知识条目子集——例如「数据分析」项目自动带上数据源清单、指标口径字典、分析场景、SQL 模式等 13 个知识条目;「旧系统改造」项目自动带上旧系统架构、数据模型、接口、业务流程、资源接入,新系统架构、接口、目标流程,以及新旧差异对照与迁移改造计划等 17 个知识条目;「其他」分类则进入项目定制专家访谈,由对话逐步填充知识。PROJECTS_ROOT 是必需的环境变量,指向仓库外部的目录。
session:{session_id},TTL=24hAgent 执行的每条命令、每段代码都运行在双层沙箱中,文件访问被限制在当前项目工作区内(实现见 agent_core/sandbox.py、agent_core/sandbox_guard/、agent_core/tools/shell.py、agent_core/tools/code_executor.py)。
第一层:命令级验证(Shell 工具)
rm -rf、sudo、curl、wget、pip install、find -delete 等&&/; 串联的每个命令段都须独立通过白名单,find \( ... \) 表达式分组不受影响~、.. 段一律拒绝;重定向目标(> / >>)同样校验(系统临时目录除外);git -C、--git-dir、--work-tree 与 git config --global/--system 被拒绝$(...) / 反引号禁止;路径参数中的 $VAR 必须在本条命令内以 VAR=value 赋值过(其值也已校验),防止 p=../proj-b; cat $p/x 把越界路径当作数据带出去git -m)、grep 模式、python -c 代码等纯数据参数不做路径检查,避免误伤第二层:Python 运行时文件守卫(audit hook)
sitecustomize 自动安装 CPython audit hook(sys.addaudithook,用户代码无法移除),拦截所有文件读写:写操作限定在项目工作区 + 系统临时目录 + 用户工具缓存(~/.cache、~/.npm 等);读操作额外放行 Python 安装目录(标准库与 site-packages)[agent-guard] 前缀的 PermissionError,让 LLM 明白这是沙箱的正常拒绝而非程序错误PYTHONPATH 注入并随进程树自动继承;容器镜像还会把守卫装入 site-packages(见 Dockerfile),即使命令自带 PYTHONPATH=... 覆盖也无法解除python -S/-I/-E(会跳过 sitecustomize 从而解除守卫)与 os.system / os.exec 直接拒绝subprocess.Popen(仅放行 matplotlib 字体探测的 fc-list / fc-cache),杜绝 Python 代码再派生任意进程代码执行器(code_executor) — 30 秒超时、无网络;Python 代码经文本级正则封禁 subprocess / os.system / pty / ctypes 等;Bash 代码逐行做路径逃逸校验;工作目录与临时文件全部落在项目内 .tmp/work/,产出图片同样在项目内并经 JWT 鉴权的媒体端点提供
密钥保护 — env_refs 在服务端把保险库中的密钥解析进子进程环境,明文永不进入 LLM 上下文,返回的输出在截断前统一脱敏为 [REDACTED:名称];子进程环境经 safe_env() 剥离 SECRET_KEY、数据库连接串等凭据类变量
已知边界(纵深防御,非绝对隔离)
os.stat / os.access 不产生 audit 事件,纯路径存在性探测不被拦截——文件内容读写仍全部经过被 hook 的 open把任意智能体和它所在项目的资源发布成 API 或 系统内嵌页面,两种形态都运行在发布者绑定的模型配置上。
发布管理(SSO 登录后,/settings/publishes):
key_hint)API 形态 — SSE 流式对话,Authorization: Bearer <key> 鉴权:
curl -N -X POST "$BASE/api/p/{publish_id}/stream" \
-H "Authorization: Bearer $PUBLISH_KEY" \
-H "Content-Type: application/json" \
-d '{"message": "你好", "thread_id": "any-caller-thread-id"}'
流返回标准的 agent 事件帧(stream_delta / tool_call_start / stream_end …),每帧一行 data: {json}。thread_id 把同一调用方的多轮对话钉在专属会话上以保留上下文。
页面形态 — /p/{publish_id} 是系统内的一个链接:访问者必须已 SSO 登录(与主应用同一会话),页面按访问者签发绑定(发布, 访问者)的 HMAC 查看令牌(服务端派生、不落库),后续 POST /api/p/{publish_id}/session/run 用该令牌以发布者身份执行,走与 API 相同的 SSE 流。
安全模型:
hmac.compare_digestpage_enabled=false 的发布对外一律 404,无存在性泄露interactive=False)下 user_confirm 等确认型工具直接返回可读错误,不会静默放行项目布局的第四个顶层页签:让平台按时间自己跑起来,不用人记得喊一句。
三种运行目标:
| 目标 | 说明 | 前置 |
|---|---|---|
| 自动化脚本 | 项目里的 python / bash 脚本 | 先用脚本执行器或让 Tech Lead 写好并跑通 |
| Playwright 测试 | tests/generated/*.spec.ts | QA 生成的 E2E 脚本 |
| 智能体任务 | 一段提示词交给指定智能体无头执行 | 选择投递会话 |
周期:标准 5 字段 cron(分 时 日 月 周),时区可配;日与周同时被限定时按 POSIX 的「或」语义匹配。界面上给出常用预设与接下来三次运行时间预览。
运行历史与日志:每次运行落一条记录(排队中 / 运行中 / 成功 / 失败 / 已跳过),脚本与 Playwright 运行点开即接现有实时日志流;结果摘要按需投递到指定会话,用户可以接着追问。
对话式定制:Tech Lead 与 Quality Assurance 都带 scheduler 工具与 generation/scheduled-task-writer 技能——「每天早上 9 点跑一下 XX 脚本」即可创建,并可随时改周期、启停、立即运行。
行为边界:
# Agent Core — pytest + pytest-asyncio, Mock LLM via VCR cassettes
cd packages/agent-core && pytest
# API — pytest + httpx AsyncClient, SQLite 文件库跑真实 alembic 迁移链;
# TEST_DATABASE_URL 可切换方言(CI 另有 PostgreSQL 实库 job)
cd packages/api && pytest
# Web — Vitest + Vue Test Utils
cd packages/web && npm test