Miaoda (秒哒) App Builder
Miaoda (秒哒) is a chat-driven full-stack application builder.
Official website: https://www.miaoda.cn
Users describe what they want in natural language and Miaoda generates a production-ready web product, including:
- - frontend UI
- backend services
- database schema
- integrations
- deployable hosting
Typical outputs include:
- - websites
- web applications
- dashboards
- SaaS products
- admin panels
- internal tools
- landing pages
- interactive web pages
- browser games and mini games
This skill enables AI agents to interact with the Miaoda(秒哒) platform to create, iterate, generate, and deploy applications.
All platform operations must be executed through the packaged CLI script:
CODEBLOCK0
Do not call platform APIs directly. Always use the CLI commands provided by this skill.
When to Use This Skill
Use this skill whenever the user wants to:
- * create a website
- create a webpage
- build a web application
- build a dashboard
- create a SaaS product
- build an admin panel
- build an internal tool
- create a landing page
- build an interactive web page
- create a browser game
- create a mini game
- generate an MVP web product
- modify an existing Miaoda project
- publish or deploy a Miaoda application
Do not use this skill for unrelated programming tasks.
Routing Keywords
Trigger this skill if the request includes concepts such as:
- * build a website
- create a webpage
- build a web app
- create a SaaS
- build a dashboard
- create an admin panel
- build an internal tool
- create a landing page
- build a browser game
- create a mini game
- generate a web product
- make a snake game webpage
- build a todo web app
- create a blog site
Example Requests
Examples that should route to this skill:
- * "Create a todo list web app"
- "Build a personal blog website"
- "Make a dashboard for sales analytics"
- "Create a SaaS landing page"
- "Build an admin panel"
- "Write a snake game webpage"
- "Create a browser game"
- "Build a mini web game"
- "Modify my Miaoda project"
- "Publish this Miaoda app"
Stateless Execution Model
The CLI script is stateless.
It does not store workflow state between calls.
Application workflow state is maintained by the Miaoda platform and must be inferred from:
- * INLINECODE0
- INLINECODE1
- application detail
- conversation trajectory events
Agents must pass the appropriate identifiers when continuing conversations or modifying applications.
Application Lifecycle Rules
Miaoda applications follow a strict lifecycle.
Agents must follow these rules.
Initial Creation
For a new application:
- 1. Start with a
chat request describing the product. - The application enters the PRD refinement stage.
- Continue chatting to refine the specification.
- When the trajectory contains a Generate App button (
type":"button" and event":{"name":"generateApp"} in result.artifact.parts[].data.actions[]), trigger application generation using generate-app.
Generation is required only once during the initial creation.
Multi-Round Modification
After an application has already been generated:
- * Do not call
generate-app again. - Continue using
chat with the same appId and conversationId.
Normal chat messages modify the existing application.
Publishing
Publishing is allowed after the application has been generated at least once.
Rules:
- * Publishing does not require another generation step
- Publishing may happen anytime after the first generation
- Publishing must be followed by status polling (or use
--wait flag)
Typical deployment flow:
CODEBLOCK1
Or use the --wait flag to auto-poll:
CODEBLOCK2
Stop polling when the status becomes:
- * INLINECODE13
- INLINECODE14
Application URLs
Miaoda provides two types of URLs during the lifecycle.
Project Preview (Editor / Development)
After the application is created, the project can be accessed at:
CODEBLOCK3
This URL can be shared with the user for:
- * viewing the project
- editing the application
- previewing the generated result
The preview URL becomes available once an appId is created.
Production Deployment URL
After publishing succeeds, the application is accessible at:
CODEBLOCK4
This is the public production URL of the deployed application.
Only return this URL after publishing completes successfully.
Standard Workflow
Create New Application
CODEBLOCK5
Modify Existing Generated Application
CODEBLOCK6
(no additional generation step required)
Deploy Application
CODEBLOCK7
Or:
CODEBLOCK8
Available Commands
All commands are executed via the CLI script.
Important: Always set the MIAODA_API_KEY environment variable before running commands.
CODEBLOCK9
list-apps
List all applications belonging to the authenticated user.
Usage:
CODEBLOCK10
Optional Parameters:
- -
--brief: Output only key fields: appId, name, type, appFocus, host, updatedAt. Recommended for agents to reduce token usage. - INLINECODE24 : Filter by app name (substring)
- INLINECODE25 : Page number (default: 1)
- INLINECODE26 : Page size (default: 12)
Example:
CODEBLOCK11
Returns: JSON array of applications with appId, name, type, etc.
app-detail
Get detailed information about a specific application. Automatically injects conversationId into the response by default — no need to call get-context-id separately.
Usage:
CODEBLOCK12
Required Parameters:
- -
--app-id APP_ID: Application ID
Optional Parameters:
- -
--no-context: Skip auto-fetching conversationId from trajectory (faster, but response will not contain conversationId)
Example:
CODEBLOCK13
Returns: JSON object with application details, configuration, and status. data.conversationId is automatically populated.
get-context-id
Recover the conversationId for an existing app by reading its trajectory. Useful when the conversationId has been lost after a session reset.
Usage:
CODEBLOCK14
Required Parameters:
- -
--app-id APP_ID: Application ID
Optional Parameters:
- -
--fetch-timeout SECONDS: Request timeout in seconds (default: 10)
Example:
CODEBLOCK15
Returns: INLINECODE41
Use Cases:
- - Need to modify a previously created app in a new session but
conversationId is lost - Use the returned
conversationId with chat --app-id --context-id to resume modification
conversation-history
Show a human/agent-readable summary of past interactions for an app. More convenient than trajectory or fetch-trajectory for quickly understanding what happened in previous sessions.
Usage:
CODEBLOCK16
Required Parameters:
- -
--app-id APP_ID: Application ID
Optional Parameters:
- -
--full: Show full content instead of truncated summaries (default: truncate at 200 chars) - INLINECODE49 : Only show the last N conversation turns
- INLINECODE50 : Request timeout in seconds (default: 10)
Example:
CODEBLOCK17
Returns: JSON Lines, one entry per meaningful turn:
CODEBLOCK18
Use Cases:
- - Quickly understand what happened in previous sessions before resuming work
- Determine which phase the app is in (PRD refinement / generated / modified)
- Check for unfinished modifications or cancelled tasks
chat
Start or continue a conversation to create or modify an application.
Usage:
CODEBLOCK19
Required Parameters:
- -
--text TEXT: The message/instruction to send
Optional Parameters:
- -
--context-id CONTEXT_ID: Conversation ID of an existing app. - INLINECODE53 : Application ID of an existing app.
- INLINECODE54 : Query mode (default: deep_mode)
- INLINECODE55 : Input field type (default: web)
- INLINECODE56 : Seconds between trajectory polls (default: 2.0)
- INLINECODE57 : Per-request timeout for each trajectory fetch (default: 10)
- INLINECODE58 : Return raw chat POST response without trajectory polling
- INLINECODE59 : After polling, interactively ask whether to submit app generation if text was returned
⚠️ IMPORTANT — --app-id and --context-id must always be used together.
| Intent | INLINECODE62 | INLINECODE63 |
|---|
| Create a brand-new app | omit | omit |
| Continue / modify an existing app |
required | required (conversationId) |
Passing --app-id without --context-id will NOT modify the existing app.
The platform will silently create a new app every time. The CLI will now raise an error in this case to prevent accidental app proliferation.
Examples:
1. Create a new application:
CODEBLOCK20
Response includes appId and contextId for subsequent calls.
2. Continue conversation (refine PRD):
CODEBLOCK21
3. Modify existing generated app:
CODEBLOCK22
Important Notes:
- - Extract
appId and contextId from the response and save them - Use these IDs for all subsequent operations on the same app
- The first
chat creates the app and starts PRD refinement - After generation,
chat directly modifies the app (no generate-app needed)
trajectory
Poll trajectory events until the task reaches a terminal state.
Usage:
CODEBLOCK23
Required Parameters:
- -
--app-id APP_ID: Application ID
Optional Parameters:
- -
--last-event-id EVENT_ID: Start eventId; -1 = all events from beginning (default: -1) - INLINECODE75 : Seconds between polls (default: 2.0)
- INLINECODE76 : Per-request timeout in seconds (default: 10)
- INLINECODE77 : Use legacy SSE streaming instead of polling
Example:
CODEBLOCK24
Use Cases:
- - Monitor conversation / generation progress
- Detect when PRD refinement is complete (look for Generate App button in
result.artifact.parts[].data.actions[]) - Verify generation has completed
fetch-trajectory
Fetch one batch of trajectory events (single request, no polling loop).
Usage:
CODEBLOCK25
Required Parameters:
- -
--app-id APP_ID: Application ID
Optional Parameters:
- -
--last-event-id EVENT_ID: Fetch events after this eventId; -1 = all (default: -1) - INLINECODE81 : Request timeout in seconds (default: 10)
Example:
CODEBLOCK26
Events are printed to stdout as JSON lines; {"maxEventId": N, "isTerminal": bool} is printed to stderr.
Generate App readiness: Inspect result.artifact.parts[].data.actions[] for an action with "type":"button" and "event":{"name":"generateApp"}. Example:
CODEBLOCK27
When this button appears, PRD is ready and generate-app may be called.
generate-app
Submit app-generation confirmation and return immediately with appId/conversationId.
Usage:
CODEBLOCK28
Required Parameters:
- -
--app-id APP_ID: Application ID
Optional Parameters:
- -
--context-id CONTEXT_ID: Conversation ID (default: "") - INLINECODE91 : Query mode (default: deep_mode)
- INLINECODE92 : Block and poll trajectory until generation completes (default: return immediately)
- INLINECODE93 : Seconds between polls when
--watch is set (default: 2.0) - INLINECODE95 : Per-request timeout in seconds when
--watch is set (default: 10)
Example:
CODEBLOCK29
Important:
- - Only call this once during initial creation
- Call only when trajectory contains a Generate App button in
result.artifact.parts[].data.actions[]: an action with "type":"button" and "event":{"name":"generateApp"} (label may vary by locale; use event name for the check). This indicates PRD is ready. - Do not call again for modifications after the first generation
- After this command, use
chat to modify the generated app
publish
Trigger deployment to production.
Usage:
CODEBLOCK30
Required Parameters:
- -
--app-id APP_ID: Application ID to publish
Optional Parameters:
- -
--env ENV: Target environment (default: PRODUCE) - INLINECODE103 : Auto-poll publish status until SUCCESS or FAILED
Examples:
1. Publish and manually check status:
CODEBLOCK31
Returns releaseId immediately. Then poll with publish-status.
2. Publish and auto-wait for completion (recommended):
CODEBLOCK32
This polls automatically and exits when deployment succeeds or fails.
Important:
- - Application must be generated at least once before publishing
- After successful publish, the app is live at: INLINECODE106
publish-status
Check the status of a deployment.
Usage:
CODEBLOCK33
Required Parameters:
- -
--release-id RELEASE_ID: Release ID from publish command
Example:
CODEBLOCK34
Returns: JSON with status: PROCESSING, RUNNING, SUCCESS, or INLINECODE112
Usage Pattern:
CODEBLOCK35
Tip: Use publish --wait to avoid manual polling.
Complete Workflow Examples
Example 1: Create and Deploy a New App
CODEBLOCK36
Example 2: Modify an Existing App
IMPORTANT — Always update CONTEXT_ID from each chat response.
Each chat call prints a JSON header line {"appId": "...", "conversationId": "..."}.
The platform may return an updated conversationId in this response.
Always capture it and use it for the next chat call, or the next round will create a brand-new app.
CODEBLOCK37
Command Semantics
chat
Used to:
- * create a new application
- refine PRD specifications
- modify an existing generated application
For a new application, chat creates the project and begins the PRD stage.
For an existing application, chat performs iterative modifications.
trajectory
Streams conversation progress and system events.
Use this to determine:
- * whether PRD generation is ongoing
- whether the app is ready for generation (see generate-app condition below)
- whether generation has completed
generate-app
Triggers application generation.
Call only when trajectory contains a Generate App button in result.artifact.parts[].data.actions[]: an action with "type":"button" and "event":{"name":"generateApp"}. This indicates PRD is ready. Do not rely on text alone—the button structure is the authoritative signal.
Call once during initial creation. Do not call again for modifications.
publish
Triggers application deployment.
Use --wait flag to auto-poll status (recommended).
publish-status
Polls deployment progress until the release completes.
Not needed if using publish --wait.
Error Handling
IAM AccessKey Validation Failed
Symptom:
CODEBLOCK38
Cause:
The configured MIAODA_API_KEY is invalid or missing.
Resolution:
- 1. Go to the Miaoda(秒哒) official website:
https://www.miaoda.cn
- 2. In the left navigation panel, apply for an available access key.
- 3. Set the key as the environment variable:
CODEBLOCK39
- 4. Or create a
.env file in the skill directory:
CODEBLOCK40
NotOpenSSLWarning
Symptom:
CODEBLOCK41
Cause:
macOS uses LibreSSL by default, but urllib3 v2 recommends OpenSSL.
Impact:
This is a warning only. API calls still work correctly.
Resolution (optional):
If you want to suppress the warning:
CODEBLOCK42
Or ignore it - it doesn't affect functionality.
Error Handling Guidance
Agents should handle the following situations:
- * generation requested before the platform indicates readiness
- publish requested before generation has completed
- missing
appId or conversationId (use get-context-id to recover a lost conversationId) - interrupted trajectory stream
- failed deployment status
- incorrect or missing parameter values
If workflow state is unclear, inspect the trajectory or application detail before taking the next action.
Pro Tips:
- - Always check command
--help when unsure about parameters - Use
--wait flag with publish to simplify deployment - Save
appId and contextId from first chat response - Only call
generate-app once during initial creation - After generation, use
chat directly for modifications
Application Sharing Rule (IMPORTANT)
- - You must share your application only using the production deployment URL (after it has been published). Do not share the editor (development) URL.
Production deployment URL format:
CODEBLOCK43
- - If the application has not been published, you must publish it before sharing with others.
Example publish command:
CODEBLOCK44
- - The project editor URL (
https://www.miaoda.cn/projects/<app_id>) is visible only to yourself. Other users cannot access your editor environment. Never use the editor URL for sharing with others.
Editor URL is for:
- - your own development
- preview
- internal editing only
Editor URL must NOT be used for:
- - external/public sharing
- distribution to others or end users
Miaoda (秒哒) App Builder
Miaoda (秒哒) 是一个对话驱动的全栈应用构建器。
官方网站:https://www.miaoda.cn
用户用自然语言描述需求,Miaoda 即可生成可直接上线的网页产品,包括:
- - 前端界面
- 后端服务
- 数据库结构
- 集成功能
- 可部署的托管环境
典型输出包括:
- - 网站
- Web 应用
- 仪表盘
- SaaS 产品
- 管理后台
- 内部工具
- 落地页
- 交互式网页
- 浏览器游戏和小游戏
该技能使 AI 代理能够与 Miaoda(秒哒)平台 交互,以创建、迭代、生成和部署应用。
所有平台操作必须通过打包的 CLI 脚本执行:
bash
python scripts/miaoda_api.py [options]
不要直接调用平台 API。始终使用此技能提供的 CLI 命令。
何时使用此技能
当用户想要以下操作时,请使用此技能:
- * 创建一个网站
- 创建一个网页
- 构建一个Web 应用
- 构建一个仪表盘
- 创建一个SaaS 产品
- 构建一个管理后台
- 构建一个内部工具
- 创建一个落地页
- 构建一个交互式网页
- 创建一个浏览器游戏
- 创建一个小游戏
- 生成一个MVP 网页产品
- 修改现有的Miaoda 项目
- 发布或部署一个Miaoda 应用
不要将此技能用于无关的编程任务。
路由关键词
如果请求包含以下概念,则触发此技能:
- * 构建一个网站
- 创建一个网页
- 构建一个 Web 应用
- 创建一个 SaaS
- 构建一个仪表盘
- 创建一个管理后台
- 构建一个内部工具
- 创建一个落地页
- 构建一个浏览器游戏
- 创建一个小游戏
- 生成一个网页产品
- 制作一个贪吃蛇游戏网页
- 构建一个待办事项 Web 应用
- 创建一个博客网站
示例请求
应路由到此技能的示例:
- * 创建一个待办事项列表 Web 应用
- 构建一个个人博客网站
- 制作一个销售分析仪表盘
- 创建一个 SaaS 落地页
- 构建一个管理后台
- 写一个贪吃蛇游戏网页
- 创建一个浏览器游戏
- 构建一个小型网页游戏
- 修改我的 Miaoda 项目
- 发布这个 Miaoda 应用
无状态执行模型
CLI 脚本是无状态的。
它在调用之间不存储工作流状态。
应用工作流状态由 Miaoda 平台维护,必须从以下内容推断:
- * appId
- conversationId
- 应用详情
- 对话轨迹事件
代理在继续对话或修改应用时,必须传递适当的标识符。
应用生命周期规则
Miaoda 应用遵循严格的生命周期。
代理必须遵守以下规则。
初始创建
对于新应用:
- 1. 从描述产品的 chat 请求开始。
- 应用进入 PRD 细化阶段。
- 继续对话以细化规格说明。
- 当轨迹中包含一个生成应用按钮(result.artifact.parts[].data.actions[] 中的 type:button 和 event:{name:generateApp})时,使用 generate-app 触发应用生成。
在初始创建期间,仅需生成一次。
多轮修改
在应用已经生成之后:
- * 不要再调用 generate-app。
- 继续使用相同的 appId 和 conversationId 进行 chat。
普通的聊天消息会修改现有应用。
发布
在应用至少生成一次之后才允许发布。
规则:
- * 发布不需要再次执行生成步骤
- 首次生成后,可随时发布
- 发布后必须进行状态轮询(或使用 --wait 标志)
典型部署流程:
publish → publish-status 轮询
或使用 --wait 标志自动轮询:
publish --wait
当状态变为以下之一时停止轮询:
应用 URL
Miaoda 在生命周期中提供两种类型的 URL。
项目预览(编辑器/开发)
应用创建后,可通过以下地址访问项目:
https://www.miaoda.cn/projects/
此 URL 可与用户共享,用于:
一旦创建了 appId,预览 URL 即可使用。
生产部署 URL
发布成功后,应用可通过以下地址访问:
https://.appmiaoda.com
这是已部署应用的公共生产 URL。
仅在发布成功完成后才返回此 URL。
标准工作流
创建新应用
chat → PRD 细化 → generate-app → publish
修改已生成的现有应用
chat → chat → chat
(无需额外的生成步骤)
部署应用
publish → publish-status 轮询
或:
publish --wait
可用命令
所有命令均通过 CLI 脚本执行。
重要提示:在运行命令之前,务必设置 MIAODAAPIKEY 环境变量。
bash
export MIAODAAPIKEY=yourapikey_here
list-apps
列出属于已验证用户的所有应用。
用法:
bash
python scripts/miaoda_api.py list-apps [--brief]
可选参数:
- - --brief:仅输出关键字段:appId、name、type、appFocus、host、updatedAt。建议代理使用以减少 token 消耗。
- --name NAME:按应用名称过滤(子字符串)
- --page PAGE:页码(默认:1)
- --size SIZE:每页数量(默认:12)
示例:
bash
export MIAODAAPIKEY=sk_xxxxx
简洁模式(推荐代理使用)
python scripts/miaoda_api.py list-apps --brief
完整模式
python scripts/miaoda_api.py list-apps
返回: 包含 appId、name、type 等的应用 JSON 数组。
app-detail
获取特定应用的详细信息。默认情况下,自动将 conversationId 注入响应中 — 无需单独调用 get-context-id。
用法:
bash
python scripts/miaodaapi.py app-detail --app-id id> [--no-context]
必需参数:
可选参数:
- - --no-context:跳过从轨迹自动获取 conversationId(更快,但响应不会包含 conversationId)
示例:
bash
export MIAODAAPIKEY=sk_xxxxx
python scripts/miaoda_api.py app-detail --app-id app-abc123xyz
返回: 包含应用详情、配置和状态的 JSON 对象。data.conversationId 会自动填充。
get-context-id
通过读取现有应用的轨迹来恢复其 conversationId。当会话重置后 conversationId 丢失时非常有用。
用法:
bash
python scripts/miaodaapi.py get-context-id --app-id id>
必需参数:
可选参数:
- - --fetch-timeout SECONDS:请求超时时间(秒)(默认:10)
示例:
bash
export MIAODAAPIKEY=sk_xxxxx
python scripts/miaoda_api.py get-context-id --app-id app-abc123xyz
返回: {appId: app-abc123xyz, conversationId: conv-def456uvw}
使用场景:
- - 需要在新会话中修改之前创建的应用,但 conversationId 丢失
- 使用返回的 conversationId 配合 chat --app-id --context-id 恢复修改
conversation-history
显示应用过去交互的人类/代理可读摘要。比 trajectory 或 fetch-trajectory 更方便快速了解之前会话中发生了什么。
用法:
bash
python scripts/miaodaapi.py conversation-history --app-id id> [options]
必需参数:
可选参数:
- - --full:显示完整内容而非截断摘要(默认:截断至 200 字符)
- --limit N: