SaC — Software as Content
UnexploredGive your AI agent the ability to respond with live, interactive apps that evolve.
Install
Terminal
$uvx sac-sdkmcp_config.json
{
"mcpServers": {
"ai-dynsoft-sac": {
"env": {
"SAC_MODEL": "${SAC_MODEL}",
"SAC_API_KEY": "${SAC_API_KEY}",
"SAC_API_BASE": "${SAC_API_BASE}",
"SAC_SEARCH_API_KEY": "${SAC_SEARCH_API_KEY}"
},
"args": [
"sac-sdk"
],
"command": "uvx"
}
}
}Documentation
SaC SDK
Interaction layer between you and your agents.
AI agents can reason, code, and call APIs — but when they need to communicate back to you, all they have is text. SaC (Software as Content) is the missing interaction layer: your agent responds with a live, persistent, interactive app that evolves as the conversation continues. Not a screenshot, not a markdown wall — a real UI you click, explore, and shape together with your agent.
Quickstart
1. Install
pip install sac-sdk
2. Run
sac serve
First time? It'll ask for your API key and save it. Then open http://localhost:18420, type "3-day Tokyo trip planner with budget", and watch a live React app stream in. Click buttons. Ask it to evolve. This is SaC running a built-in agent loop — no external agent needed.
Connect to your agent
SaC plugs into the agent you already use — through MCP, Skill, or code.
Claude Code (MCP)
pip install sac-sdk
sac setup claude-code # registers SaC as an MCP server
Restart Claude Code. Then try:
"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 (build your own 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
How it works
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
◀── ...
One URL, one conversation. The agent doesn't generate a new page every turn — it evolves the existing app. Users keep their context; the agent keeps its state.
Two channels, one loop: every response is either a UI update (the app evolves) or a chat reply (a text bubble). Users can click buttons in the app OR type in the chat — both go back to the agent through the same callback.
When to use SaC
SaC is for tasks where exploration and interaction matter more than a final answer.
Good fit: trip planning, data analysis dashboards, comparison shopping, project planning, research, financial reviews, decision aids, internal tools
Not the right tool for: simple Q&A, one-shot automations ("set an alarm"), conversations that are purely text
Customize
Every layer is pluggable:
from sac import SaC, FileStore
sac = SaC(
llm=YourLLMProvider(...), # any class implementing LLMProvider
search=YourSearchProvider(...), # any class implementing SearchProvider
store=FileStore(".sac"),
)
Prompts live in src/sac/runtime/prompts/ and
the default design system is in src/sac/renderer/design-systems/default/.
Architecture
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
Project status
v0.1.2 — alpha. The core protocol (generate → evolve → callback loop) is stable and runs in production at sac.dynsoft.ai. The SDK surface is being polished toward v1.0.
Contributing
Issues and PRs welcome. Highest-leverage contributions right now:
- Prompt improvements in
src/sac/runtime/prompts/ - Design system contributions in
src/sac/renderer/design-systems/
For local dev: pip install -e .
Citation
@article{xie2026sac,
title = {Software as Content: Dynamic Applications as the Human-Agent Interaction Layer},
author = {Xie, Mulong},
year = {2026},
url = {https://arxiv.org/abs/2603.21334}
}
License
Apache-2.0 · © 2026 Mulong Xie / Dynsoft Lab
Built by Dynsoft Lab. Questions: mulong@mulongxie.me
Sourced from the repository README.
More in AI & Agents
- PonytailMakes your AI agent think like the laziest senior dev in the room. The best code is the code you never wrote.109,599
- AgentsMulti-harness agentic plugin marketplace for Claude Code, Codex, Cursor, OpenCode, GitHub Copilot, and Google Antigravity39,079
- Frontend SlidesCreate beautiful slides on the web using a coding agent's frontend skills28,060
- Agent Skills Search ServerSearch and discover Agent Skills from the skills.sh registry. Powered by HAPI MCP server.24,658
- Agency Agents Zh🎭 267 个即插即用的 AI 专家角色 — 支持 Hermes Agent/Claude Code/Cursor/Copilot 等 18 种工具,覆盖工程/设计/营销/金融等 20 个部门。含 52 个中国市场原创智能体(小红书/抖音/微信/飞书/钉钉等)。搭配编排器 agency-orchestrator,一句话即可让多位专家按 DAG 自动协作。19,868
- Watermarks RemoverStrip multi-vendor AI provenance marks: Unicode text hygiene, statistical rewrite hooks, and C2PA/metadata from PNG/JPEG/SVG/PDF/DOCX/HTML/MD17,822