关于 SaC — Software as Content
SaC 是面向需要以交互式应用呈现结果的 Agent 的 SDK。应用在同一 URL 上随对话持续演进,用户的点击和聊天消息都会传回 Agent。
主要功能
- 01生成交互式应用
- 02在对话中演进应用
- 03处理应用点击和聊天
- 04可插拔的 LLM、搜索与存储
适用场景
- 01制定交互式旅行计划
- 02通过仪表盘探索数据
- 03比较选项并辅助决策
MCP 相关
SaC 提供 MCP stdio 服务,可连接 Claude Code 等 Agent。Agent 可通过它生成和演进交互式应用。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx sac-sdkSAC_API_KEY密钥API key for the LLM provider (OpenRouter, Anthropic, OpenAI, etc.)SAC_API_BASECustom API endpoint for OpenAI-compatible providersSAC_MODELOverride the default generation modelSAC_SEARCH_API_KEY密钥Tavily API key for web search in generated apps本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
AI Agent 能够推理、编写代码并调用 API,但需要向你反馈时,它们能做的只有输出文本。SaC(Software as Content,软件即内容)正是缺失的交互层:你的 Agent 会以实时、持久、可交互的应用作出响应,并随着对话继续不断演进。它不是截图,也不是一大段 Markdown,而是真正的 UI,你可以点击、探索,并与 Agent 一起塑造。
快速开始
1. 安装
pip install sac-sdk
2. 运行
sac serve
第一次使用?它会询问你的 API 密钥并保存。然后打开 **http://localhost:18420**,输入 "3-day Tokyo trip planner with budget",看着实时 React 应用逐步生成。点击按钮,再让它继续完善。这就是 SaC 运行内置 Agent 循环的效果,无需外部 Agent。
连接到你的 Agent
SaC 可通过 MCP、Skill 或代码接入你正在使用的 Agent。
Claude Code(MCP)
pip install sac-sdk
sac setup claude-code # registers SaC as an MCP server
重启 Claude Code,然后试试:
"Help me understand this codebase using a visualized and interactive app using SaC MCP."
Codex(Skill)
pip install sac-sdk
sac setup codex # installs the SaC skill
sac serve # keep running in a terminal
OpenClaw(Skill)
pip install sac-sdk
sac setup openclaw # installs the SaC skill
sac serve # keep running in a terminal
Python(构建自己的 Agent)
from sac import SaC
sac = SaC()
conv = sac.conversation()
app = await conv.generate("3-day Tokyo itinerary")
print(app.url) # user opens this
# app.code contains the generated TSX
工作原理
Your agent ──▶ SaC ──▶ User sees a live app at a URL
◀── User clicks a button / types a message
Your agent ──▶ SaC ──▶ Same URL, app evolves in place
◀── ...
一个 URL,一段对话。Agent 不会每轮都生成新页面,而是持续完善现有应用。用户保留自己的上下文,Agent 保留自己的状态。
**两个通道,一个循环:**每次响应要么是 UI 更新(应用不断演进),要么是聊天回复(文本气泡)。用户可以点击应用中的按钮,也可以在聊天中输入,两种操作都会通过同一个回调返回给 Agent。
何时使用 SaC
SaC 适用于探索和交互比最终答案更重要的任务。
**适用场景:**旅行规划、数据分析仪表板、比价购物、项目规划、研究、财务审查、决策辅助、内部工具
**不适用场景:**简单问答、一次性自动化(“设置闹钟”)、纯文本对话
自定义
每一层都可插拔:
from sac import SaC, FileStore
sac = SaC(
llm=YourLLMProvider(...), # any class implementing LLMProvider
search=YourSearchProvider(...), # any class implementing SearchProvider
store=FileStore(".sac"),
)
提示词位于 src/sac/runtime/prompts/,
默认设计系统位于 src/sac/renderer/design-systems/default/。
架构
src/sac/
├── sac.py / conversation.py Entry + Conversation primitive
├── runtime/ Generate + Evolve pipeline, prompts, providers
├── server/
│ ├── http/ FastAPI + SSE streaming + viewer
│ └── mcp/ MCP stdio server (Claude Code integration)
└── renderer/ iframe sandbox + design system
项目状态
v0.1.2 — alpha 版。核心协议(生成 → 演进 → 回调循环)已稳定,并已在 sac.dynsoft.ai 投入生产使用。SDK 接口正持续打磨,目标是推出 v1.0。
参与贡献
欢迎提交问题和 PR。目前最有价值的贡献方向:
src/sac/runtime/prompts/中的提示词改进src/sac/renderer/design-systems/中的设计系统贡献
本地开发:pip install -e .
许可证
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。