A digital studio for content-driven creation.
Code, write, design, and build — with an AI that thinks like a maker.
dscode's editorial workshop — a creative space for code, design, and conversation.
|
Digital studios don't use one tool. They use ten. MCP turns every tool into an API — dscode is the agent that orchestrates them. Blender for 3D modeling, PlayCanvas for real-time graphics, browser automation for testing, documents for specs, spreadsheets for data. If your production tool has an MCP server, dscode brings it into the workflow. Your toolchain. One agent. All through MCP. |
dscode is built entirely through spec coding with OpenSpec. Every feature begins as a formal spec — Code is the implementation of specs — not the other way around. |
|
Too many MCP servers? Context explosion is a real problem when every tool schema competes for token budget. dscode ships with a built-in All the tools. None of the bloat. |
dscode is not a chatbot with a dark theme. It's a digital studio — a creative workspace with editorial typography, generous whitespace, and a warm, tool-like aesthetic. The interface is designed for makers: phase-labeled message groups, serif structural labels, sidebar detail panels, and a Dashboard that's a mode of Chat, not a separate page. Every pixel earns its place. A creative space. Not just a chat window. |
|
🖥 Terminal + Web Full TUI with streaming, thinking, tool calls, per-turn token usage & cost stats. Modern React Web UI with identical feature parity via WebSocket. |
🔌 MCP Connector Stdio, Streamable HTTP (MCP 2025-11-25), legacy SSE fallback. Auto transport inference. MCP App sandbox for server-driven UI. |
🛡 Agent Harness Permission control, context compression (1M token window), session persistence, cross-session memory, retry with exponential backoff. |
|
📦 Skills System Declarative third-party extensions via SKILL.md. On-demand activation. User-level + project-level scopes. |
👁 Vision Pipeline Auto-routing to vision-capable models. tesseract OCR fallback (ENG + CHI). Drag, paste, or @-file images. |
🔧 Open Design AI-driven visual design workspace with frontend generation, image-to-code, and design-system management. Integrated via MCP. |
|
🎬 Dashboard & Motion Chat↔Dashboard cascade transition with physics-based "dscode" cluster animation. Session dashboard with context-window usage bar. |
📐 Hash-Anchor Editing Content-addressable file editing with 3-level adaptive resolution, atomic batch operations, checkpoint safety rollback, and structured invalidation scopes. |
🔁 Retry & Resilience Exponential backoff with configurable retry policy. Handles rate limits, timeouts, and server errors transparently. Respects Retry-After headers. |
Tip: In TUI, paste clipboard images with
Ctrl+V(macOS) or/image clipboard.
dscode auto-connects on launch. Tools appear as mcp_blender_* and mcp_playwright_*. MCP servers can also serve sandboxed UI via the App Host — no boilerplate, no SDK, no glue code.
show_playcanvas.mp4PlayCanvas + MCP — build a jump game entirely through natural language |
show_blender.mp4Blender + MCP — 3D modeling and scene composition through conversation |
Tip: Videos play inline — these are real MCP workflows, click to watch.
npm install -g @creative-dswork/dscode
dscode # Terminal UI
dscode --web # Web UI → http://localhost:3000First launch? Run
/config key <your-api-key>and/config model deepseek-v4-proto get started. Type/helpfor the full guide.
Build from source:
git clone https://github.com/creativedswork/dscode.git
cd dscode && npm install && npm run build
node dist/dscode.mjsdscode uses two levels of settings.json, merged with project settings overriding user settings:
| Scope | Path | Purpose |
|---|---|---|
| User | ~/.dscode/settings.json |
Defaults across all projects |
| Project | .dscode/settings.json |
Per-project overrides |
Note: Model configuration (
provider,modelId,apiKey,thinkingLevel) lives in~/.dscode/config.json, managed via/configcommands. Type/helpin-session for the full command list.
// ~/.dscode/settings.json
{
// --- MCP Servers ---
"mcpServers": {
"blender": {
"command": "uvx",
"args": ["blender-mcp"]
},
"playwright": {
"command": "npx",
"args": ["@anthropic/mcp-playwright"]
},
"my-api": {
"url": "https://my-mcp.example.com/mcp",
"headers": { "Authorization": "Bearer <token>" }
}
},
// --- Permissions ---
"permissions": {
"allow": [
"Bash(git add *)",
"Bash(npm *)"
],
"deny": [
"Bash(rm -rf *)"
],
"rules": [
{ "tool": "Bash(curl *)", "decision": "allow", "priority": 5 }
]
},
// --- Skills ---
"skills": ["brandkit", "minimalist-ui"],
// --- Retry ---
// Controls how dscode retries failed API calls (rate limits, timeouts, server errors).
// Uses exponential backoff: starts at baseDelayMs, doubles each retry, capped at maxDelayMs.
"retry": {
"maxRetries": 3, // Max retry attempts before giving up
"baseDelayMs": 1000, // Initial delay before first retry (ms)
"maxDelayMs": 30000, // Upper bound on backoff delay (ms)
"retryOnTimeout": true, // Retry when the provider times out
"retryOnRateLimit": true, // Retry when hitting rate limits (respects Retry-After header)
"retryOnServerError": true // Retry on 5xx server errors
},
// --- @-file limits ---
"atFileMaxFiles": 5,
"atFileMaxFileSize": 51200,
"atFileMaxTotalSize": 204800
}Each server under mcpServers supports:
| Field | Type | Description |
|---|---|---|
command |
string | Executable (for stdio transport) |
args |
string[] | Arguments passed to the command |
url |
string | HTTP endpoint (for streamable-http transport) |
env |
object | Extra environment variables for the server process |
headers |
object | Custom HTTP headers |
transport |
string | "stdio" | "streamable-http" | "sse" (auto-detected if omitted) |
preferredProtocolVersion |
string | "2025-11-25" | "2025-03-26" | "2024-11-05" |
requestTimeoutMs |
number | Per-request timeout |
connectTimeoutMs |
number | Connection timeout |
Tip: Transport is auto-detected — if
urlis set withoutcommand, streamable-http is used. Otherwise stdio.
All settings can also be set via environment variables for CI / containers:
| Variable | Setting |
|---|---|
DEEPSEEK_API_KEY |
API key (provider-specific vars also supported: OPENAI_API_KEY, ANTHROPIC_API_KEY, etc.) |
AGENT_PROVIDER |
Provider override |
AGENT_MODEL |
Model override |
AGENT_THINKING_LEVEL |
Thinking level override |
AGENT_VISION_PROVIDER |
Vision model provider |
AGENT_VISION_MODEL |
Vision model ID |
DSCODE_MAX_TOKENS |
Max tokens |
DSCODE_CONFIG_HOME |
Custom config directory (default: ~/.dscode) |
DSCODE_DATA_HOME |
Custom data directory |
DSCODE_PROJECT_PATH |
Project directory |
DSCODE_RETRY_MAX_RETRIES |
Retry max retries |
DSCODE_RETRY_BASE_DELAY_MS |
Retry base delay |
DSCODE_RETRY_MAX_DELAY_MS |
Retry max delay |
dscode integrates Open Design — a visual design workspace that brings AI-driven frontend generation directly into your workflow. Think of it as Figma meets AI: design tokens, components, and entire layouts generated through natural language, with real-time preview and iteration.
- Visual design workspace — create, edit, and iterate on frontend designs without leaving dscode
- Image-to-code — generate production-ready HTML/CSS from design mockups
- Design system management — maintain consistent design tokens, typography scales, and color palettes across projects
- Multi-file artifact generation — produce complete frontend projects with structured file trees
git clone https://github.com/wangcan26/open-design.git
cd open-design
npm installThen configure the MCP server in ~/.dscode/settings.json:
{
"mcpServers": {
"open-design": {
"command": "npx",
"args": [
"tsx",
"/path/to/open-design/apps/daemon/src/cli.ts",
"mcp",
"--daemon-url",
"http://127.0.0.1:7456"
]
}
}
}Note: Open Design's dscode integration currently lives on the
add-dscode-agentbranch and has not yet been submitted as a PR to upstream. The integration provides dscode-specific installer targets and agent configuration. Track the progress at github.com/wangcan26/open-design.
dscode is currently a single-developer SDD project and does not accept direct code contributions (Pull Requests).
We welcome bug reports, feature ideas, and technical discussions via GitHub Issues. See CONTRIBUTING.md for the full policy.
| CONTRIBUTING.md | Contribution policy & how the SDD workflow operates |
| Document | What's inside |
|---|---|
| ARCHITECTURE.md | Full architecture: Agent as OS, 6-layer design, Driver/Skill model, source tree |
| ROADMAP.md | What's next: Sub-Agent system, System Prompt modularization, Diff-based editing |
| CONTRIBUTING.md | How to contribute: philosophy alignment, OpenSpec SDD workflow, coding conventions |
| STYLE.md | TypeScript coding style: naming, imports, module structure, error handling |
dscode stands on the shoulders of:
-
OpenSpec — the spec-driven development framework that shapes our entire workflow
-
pi-ai / pi-agent-core — Mario Zechner's agent loop and model abstraction foundation
-
taste-skill — Leonxlnx's design taste skill system, inspired our skills architecture
-
@_can1357 — hash-anchor editing protocol, the cornerstone of our
edittool
If you like this project, give it a ⭐ Star — your support keeps dscode evolving.
