Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Create, modify, generate, and deploy websites, web apps, dashboards, SaaS products, internal tools, interactive web pages, Weixin mini program , games on the Baidu Miaoda (秒哒) platform using natural-language instructions.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 243% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 305% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 343% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 276% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 466% | 0% |
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:
Typical outputs include:
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:
bashpython scripts/miaoda_api.py <command> [options]
Do not call platform APIs directly. Always use the CLI commands provided by this skill.
Use this skill whenever the user wants to:
Do not use this skill for unrelated programming tasks.
Trigger this skill if the request includes concepts such as:
Examples that should route to this skill:
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:
appIdconversationIdAgents must pass the appropriate identifiers when continuing conversations or modifying applications.
Miaoda applications follow a strict lifecycle.
Agents must follow these rules.
For a new application:
chat request describing the product.generate-app.Generation is required only once during the initial creation.
After an application has already been generated:
generate-app again.chat with the same appId and conversationId.Normal chat messages modify the existing application.
Publishing is allowed after the application has been generated at least once.
Rules:
--wait flag)Typical deployment flow:
publish → publish-status pollingOr use the --wait flag to auto-poll:
publish --waitStop polling when the status becomes:
SUCCESSFAILEDMiaoda provides two types of URLs during the lifecycle.
After the application is created, the project can be accessed at:
https://www.miaoda.cn/projects/<app_id>This URL can be shared with the user for:
The preview URL becomes available once an appId is created.
After publishing succeeds, the application is accessible at:
https://<app_id>.appmiaoda.comThis is the public production URL of the deployed application.
Only return this URL after publishing completes successfully.
chat → PRD refinement → generate-app → publishchat → chat → chat(no additional generation step required)
publish → publish-status pollingOr:
publish --waitAll commands are executed via the CLI script.
Important: Always set the MIAODA_API_KEY environment variable before running commands.
bashexport MIAODA_API_KEY="your_api_key_here"
List all applications belonging to the authenticated user.
Usage:
bashpython scripts/miaoda_api.py list-apps
Example:
bashexport MIAODA_API_KEY="sk_xxxxx" python scripts/miaoda_api.py list-apps
Returns: JSON array of applications with appId, name, type, etc.
Get detailed information about a specific application.
Usage:
bashpython scripts/miaoda_api.py app-detail --app-id <app_id>
Required Parameters:
--app-id APP_ID: Application IDExample:
bashexport MIAODA_API_KEY="sk_xxxxx" python scripts/miaoda_api.py app-detail --app-id app-abc123xyz
Returns: JSON object with application details, configuration, and status.
Start or continue a conversation to create or modify an application.
Usage:
bashpython scripts/miaoda_api.py chat --text "description" [options]
Required Parameters:
--text TEXT: The message/instruction to sendOptional Parameters:
--context-id CONTEXT_ID: Conversation ID of an existing app.--app-id APP_ID: Application ID of an existing app.--query-mode QUERY_MODE: Query mode (default: deep_mode)--input-field-type INPUT_FIELD_TYPE: Input field type (default: web)--poll-interval SECONDS: Seconds between trajectory polls (default: 2.0)--fetch-timeout SECONDS: Per-request timeout for each trajectory fetch (default: 10)--no-stream: Return raw chat POST response without trajectory polling--prompt-generate: 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 | --app-id | --context-id | > |--------|-----------|----------------| > | 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:
bashexport MIAODA_API_KEY="sk_xxxxx" python scripts/miaoda_api.py chat --text "创建一个待办事项管理应用"
Response includes appId and contextId for subsequent calls.
2. Continue conversation (refine PRD):
bashpython scripts/miaoda_api.py chat \ --text "添加优先级标记功能" \ --app-id app-abc123xyz \ --context-id conv-def456uvw
3. Modify existing generated app:
bashpython scripts/miaoda_api.py chat \ --text "把按钮颜色改成蓝色" \ --app-id app-abc123xyz \ --context-id conv-def456uvw
Important Notes:
appId and contextId from the response and save themchat creates the app and starts PRD refinementchat directly modifies the app (no generate-app needed)Poll trajectory events until the task reaches a terminal state.
Usage:
bashpython scripts/miaoda_api.py trajectory --app-id <app_id> [options]
Required Parameters:
--app-id APP_ID: Application IDOptional Parameters:
--last-event-id EVENT_ID: Start eventId; -1 = all events from beginning (default: -1)--poll-interval SECONDS: Seconds between polls (default: 2.0)--fetch-timeout SECONDS: Per-request timeout in seconds (default: 10)--sse: Use legacy SSE streaming instead of pollingExample:
bashexport MIAODA_API_KEY="sk_xxxxx" python scripts/miaoda_api.py trajectory --app-id app-abc123xyz
Use Cases:
Fetch one batch of trajectory events (single request, no polling loop).
Usage:
bashpython scripts/miaoda_api.py fetch-trajectory --app-id <app_id> [options]
Required Parameters:
--app-id APP_ID: Application IDOptional Parameters:
--last-event-id EVENT_ID: Fetch events after this eventId; -1 = all (default: -1)--fetch-timeout SECONDS: Request timeout in seconds (default: 10)Example:
bash# First call — get all events (note maxEventId from stderr) python scripts/miaoda_api.py fetch-trajectory --app-id app-abc123xyz # Subsequent calls — incremental fetch python scripts/miaoda_api.py fetch-trajectory --app-id app-abc123xyz --last-event-id 345
Events are printed to stdout as JSON lines; {"maxEventId": N, "isTerminal": bool} is printed to stderr.
Submit app-generation confirmation and return immediately with appId/conversationId.
Usage:
bashpython scripts/miaoda_api.py generate-app --app-id <app_id> --context-id <context_id> [options]
Required Parameters:
--app-id APP_ID: Application IDOptional Parameters:
--context-id CONTEXT_ID: Conversation ID (default: "")--query-mode QUERY_MODE: Query mode (default: deep_mode)--watch: Block and poll trajectory until generation completes (default: return immediately)--poll-interval SECONDS: Seconds between polls when --watch is set (default: 2.0)--fetch-timeout SECONDS: Per-request timeout in seconds when --watch is set (default: 10)Example:
bashexport MIAODA_API_KEY="sk_xxxxx" # Submit and return immediately — check status later with fetch-trajectory python scripts/miaoda_api.py generate-app \ --app-id app-abc123xyz \ --context-id conv-def456uvw # Submit and block until generation finishes python scripts/miaoda_api.py generate-app \ --app-id app-abc123xyz \ --context-id conv-def456uvw \ --watch
Important:
chat to modify the generated appTrigger deployment to production.
Usage:
bashpython scripts/miaoda_api.py publish --app-id <app_id> [options]
Required Parameters:
--app-id APP_ID: Application ID to publishOptional Parameters:
--env ENV: Target environment (default: PRODUCE)--wait: Auto-poll publish status until SUCCESS or FAILEDExamples:
1. Publish and manually check status:
bashexport MIAODA_API_KEY="sk_xxxxx" python scripts/miaoda_api.py publish --app-id app-abc123xyz
Returns releaseId immediately. Then poll with publish-status.
2. Publish and auto-wait for completion (recommended):
bashexport MIAODA_API_KEY="sk_xxxxx" python scripts/miaoda_api.py publish --app-id app-abc123xyz --wait
This polls automatically and exits when deployment succeeds or fails.
Important:
https://<app_id>.appmiaoda.comCheck the status of a deployment.
Usage:
bashpython scripts/miaoda_api.py publish-status --release-id <release_id>
Required Parameters:
--release-id RELEASE_ID: Release ID from publish commandExample:
bashexport MIAODA_API_KEY="sk_xxxxx" python scripts/miaoda_api.py publish-status --release-id app_release_record-xyz789abc
Returns: JSON with status: PROCESSING, RUNNING, SUCCESS, or FAILED
Usage Pattern:
bash# Get release ID from publish RELEASE_ID=$(python scripts/miaoda_api.py publish --app-id app-abc123xyz | jq -r '.releaseId') # Poll status while true; do STATUS=$(python scripts/miaoda_api.py publish-status --release-id $RELEASE_ID | jq -r '.status') echo "Status: $STATUS" if [[ "$STATUS" == "SUCCESS" || "$STATUS" == "FAILED" ]]; then break fi sleep 5 done
Tip: Use publish --wait to avoid manual polling.
bashexport MIAODA_API_KEY="sk_xxxxx" cd ~/.openclaw/skills/miaoda-app-builder # Step 1: Create app via chat (returns appId + conversationId on first line) FIRST=$(python scripts/miaoda_api.py chat --text "创建一个简单的计数器应用" | head -1) APP_ID=$(echo $FIRST | jq -r '.appId') CONTEXT_ID=$(echo $FIRST | jq -r '.conversationId') # Step 2: Generate the app (returns immediately; use fetch-trajectory to check progress) python scripts/miaoda_api.py generate-app \ --app-id $APP_ID \ --context-id $CONTEXT_ID # Step 3: Poll until generation finishes python scripts/miaoda_api.py trajectory --app-id $APP_ID # Step 4: Publish (with auto-wait) python scripts/miaoda_api.py publish --app-id $APP_ID --wait # Done! App is live at: echo "https://$APP_ID.appmiaoda.com"
bashexport MIAODA_API_KEY="sk_xxxxx" cd ~/.openclaw/skills/miaoda-app-builder APP_ID="app-abc123xyz" CONTEXT_ID="conv-def456uvw" # Modify the app (no generate-app needed) python scripts/miaoda_api.py chat \ --text "把背景颜色改成深色模式" \ --app-id $APP_ID \ --context-id $CONTEXT_ID # Re-publish python scripts/miaoda_api.py publish --app-id $APP_ID --wait
Used to:
For a new application, chat creates the project and begins the PRD stage.
For an existing application, chat performs iterative modifications.
Streams conversation progress and system events.
Use this to determine:
Triggers application generation.
Use only when the platform indicates the app is ready to generate.
Call once during initial creation. Do not call again for modifications.
Triggers application deployment.
Use --wait flag to auto-poll status (recommended).
Polls deployment progress until the release completes.
Not needed if using publish --wait.
Symptom:
IAM access key validation failed.Cause:
The configured MIAODA_API_KEY is invalid or missing.
Resolution:
https://www.miaoda.cn
bash export MIAODA_API_KEY="sk_xxxxx"
.env file in the skill directory:bash echo "MIAODA_API_KEY=sk_xxxxx" > ~/.openclaw/skills/miaoda-app-builder/.env
Symptom:
NotOpenSSLWarning: urllib3 v2 only supports OpenSSL 1.1.1+,
currently the 'ssl' module is compiled with 'LibreSSL 2.8.3'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:
bashpip3 install 'urllib3<2'
Or ignore it - it doesn't affect functionality.
Agents should handle the following situations:
appId or conversationIdIf workflow state is unclear, inspect the trajectory or application detail before taking the next action.
Pro Tips:
--help when unsure about parameters--wait flag with publish to simplify deploymentappId and contextId from first chat responsegenerate-app once during initial creationchat directly for modificationsApplication Sharing Rule (IMPORTANT)
Production deployment URL format:
https://<app_id>.appmiaoda.comExample publish command:
python scripts/miaoda_api.py publish --app-id <app_id> --waithttps://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:
Editor URL must NOT be used for:
Other measured skills in the registry, with their headline benchmark lift.