{"id":"87dbe8e6-41d3-4a06-aca9-1dc2141a578a","entityType":"agent","slug":"clawhub-yugoo-yugoo-app-builder","name":"语构 App Builder","canonicalUrl":"https://www.xpersona.co/agent/clawhub-yugoo-yugoo-app-builder","canonicalPath":"/agent/clawhub-yugoo-yugoo-app-builder","generatedAt":"2026-10-11T17:43:33.874Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T15:35:47.678Z","emptyReason":null},"description":"Build full-stack web applications using 语构's chat-driven development platform. Manages conversations, sends development instructions, monitors build progress... Skill: 语构 App Builder Owner: yugoo Summary: Build full-stack web applications using 语构's chat-driven development platform. Manages conversations, sends development instructions, monitors build progress... Tags: latest:1.0.5 Version history: v1.0.5 | 2026-06-11T03:19:03.570Z | user - Removed the sample file skill-card.md from the project. - No user-facing feature or functional changes in this version. v1.0.4 | 2026-05","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s17420c5ty963cnamcdp4kjbcn88fy58:yugoo-app-builder","sourceUrl":"https://clawhub.ai/yugoo/yugoo-app-builder","homepage":"https://clawhub.ai/yugoo/skills/yugoo-app-builder","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/yugoo/yugoo-app-builder","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/yugoo/skills/yugoo-app-builder","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Build full-stack web applications using 语构's chat-driven development platform. Manages conversations, sends development instructions, monitors build progress..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T15:35:47.678Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T15:35:47.678Z","emptyReason":null},"stars":null,"forks":null,"downloads":1038,"packageName":null,"latestVersion":"1.0.5","tractionLabel":"1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T15:35:47.662Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T15:35:47.678Z","lastCrawledAt":"2026-10-11T15:35:47.662Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T15:35:47.662Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.5","createdAt":"2026-06-11T03:19:03.570Z","changelog":"- Removed the sample file skill-card.md from the project. - No user-facing feature or functional changes in this version.","fileCount":4,"zipByteSize":24897},{"version":"1.0.4","createdAt":"2026-05-21T06:38:35.173Z","changelog":"No user-facing changes in this release. - No changes were detected between this version and the previous one.","fileCount":4,"zipByteSize":24410},{"version":"1.0.3","createdAt":"2026-05-07T02:26:33.886Z","changelog":"**yugoo-app-builder 1.0.3** - Added `homepage` metadata field for improved platform integration and discoverability. - Clarified API key instructions: recommend using a least-privilege or revocable key. - Noted usage and limitations of the `--insecure` flag for CLI commands. - No functional changes to skill logic or file structure.","fileCount":3,"zipByteSize":21725},{"version":"1.0.2","createdAt":"2026-05-07T02:18:54.508Z","changelog":"No user-facing changes in this release. - Version bump to 1.0.2 without file or documentation updates.","fileCount":3,"zipByteSize":21614},{"version":"1.0.1","createdAt":"2026-04-29T09:54:03.066Z","changelog":"yugoo-app-builder 1.0.1 - Initial public release of the skill. - Added 119 files including configuration, CLI scripts, examples, and environment setup. - Provides chat-driven full-stack web app creation, iteration, and deployment via the 语构 platform. - Includes metadata section (slug, display_name, required environment variables, and dependencies) for improved integration. - Comprehensive documentation on usage, routing guidance, and development best practices.","fileCount":3,"zipByteSize":21590},{"version":"1.0.0","createdAt":"2026-04-29T09:40:43.390Z","changelog":"yugoo-app-builder 1.0.0 - Initial release of the yugoo-app-builder skill for building full-stack web applications via the 语构 chat-driven platform. - Enables app creation, iteration, publishing, deployment, and version management through CLI commands, not direct API calls. - Requires the CREO4U_SKILL_API_KEY environment variable for authentication. - Includes clear guidelines for app description, complexity limits (max 1–2 features/bugs per request), and iterative development best practices. - Provides routing keywords and example requests for appropriate usage scenarios. - Stateles execution: relies on conversation and message IDs for workflow continuity.","fileCount":3,"zipByteSize":21524}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17420c5ty963cnamcdp4kjbcn88fy58:yugoo-app-builder","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-yugoo-yugoo-app-builder/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-yugoo-yugoo-app-builder/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-yugoo-yugoo-app-builder/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-yugoo-yugoo-app-builder/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-yugoo-yugoo-app-builder/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-yugoo-yugoo-app-builder/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T17:43:33.871Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-yugoo-yugoo-app-builder/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-yugoo-yugoo-app-builder/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-yugoo-yugoo-app-builder/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-yugoo-yugoo-app-builder/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T15:35:47.678Z","emptyReason":null},"readme":"Skill: 语构 App Builder\n\nOwner: yugoo\n\nSummary: Build full-stack web applications using 语构's chat-driven development platform. Manages conversations, sends development instructions, monitors build progress...\n\nTags: latest:1.0.5\n\nVersion history:\n\nv1.0.5 | 2026-06-11T03:19:03.570Z | user\n\n- Removed the sample file skill-card.md from the project.\n- No user-facing feature or functional changes in this version.\n\nv1.0.4 | 2026-05-21T06:38:35.173Z | user\n\nNo user-facing changes in this release.\n\n- No changes were detected between this version and the previous one.\n\nv1.0.3 | 2026-05-07T02:26:33.886Z | user\n\n**yugoo-app-builder 1.0.3**\n\n- Added `homepage` metadata field for improved platform integration and discoverability.\n- Clarified API key instructions: recommend using a least-privilege or revocable key.\n- Noted usage and limitations of the `--insecure` flag for CLI commands.\n- No functional changes to skill logic or file structure.\n\nv1.0.2 | 2026-05-07T02:18:54.508Z | user\n\nNo user-facing changes in this release.\n\n- Version bump to 1.0.2 without file or documentation updates.\n\nv1.0.1 | 2026-04-29T09:54:03.066Z | user\n\nyugoo-app-builder 1.0.1\n\n- Initial public release of the skill.\n- Added 119 files including configuration, CLI scripts, examples, and environment setup.\n- Provides chat-driven full-stack web app creation, iteration, and deployment via the 语构 platform.\n- Includes metadata section (slug, display_name, required environment variables, and dependencies) for improved integration.\n- Comprehensive documentation on usage, routing guidance, and development best practices.\n\nv1.0.0 | 2026-04-29T09:40:43.390Z | user\n\nyugoo-app-builder 1.0.0\n\n- Initial release of the yugoo-app-builder skill for building full-stack web applications via the 语构 chat-driven platform.\n- Enables app creation, iteration, publishing, deployment, and version management through CLI commands, not direct API calls.\n- Requires the CREO4U_SKILL_API_KEY environment variable for authentication.\n- Includes clear guidelines for app description, complexity limits (max 1–2 features/bugs per request), and iterative development best practices.\n- Provides routing keywords and example requests for appropriate usage scenarios.\n- Stateles execution: relies on conversation and message IDs for workflow continuity.\n\nArchive index:\n\nArchive v1.0.5: 4 files, 24897 bytes\n\nFiles: scripts/yugoo_cli.py (45903b), skill-card.md (2498b), SKILL.md (41402b), _meta.json (136b)\n\nFile v1.0.5:SKILL.md\n\n---\nname: yugoo-app-builder\ndescription: Build full-stack web applications using 语构's chat-driven development platform. Manages conversations, sends development instructions, monitors build progress, extracts results (generated files, summaries, task status), publishes applications, and manages versions.\nmetadata:\n  slug: yugoo-app-builder\n  display_name: 语构 App Builder\n  homepage: https://creo4u.com\n  env:\n    - name: CREO4U_SKILL_API_KEY\n      required: true\n      description: API key for authenticating with the 语构 (Yugoo) platform. Use a least-privilege or revocable key.\n  dependencies:\n    - requests\n---\n\n# Installation\n\n## Prerequisites\n\nBefore using this skill, ensure you have the `CREO4U_SKILL_API_KEY` environment variable set.\n\n### Setup API Key\n\n**Option 1: Provide API Key during installation**\n```bash\nexport CREO4U_SKILL_API_KEY=\"your_api_key_here\"\n```\n\n**Option 2: If not provided, the skill will prompt for it**\n- If `CREO4U_SKILL_API_KEY` is already set in your environment, the skill will use it directly\n- If not set, the skill will ask you to provide the API key\n\n### After Installation\n\nOnce installed, all CLI commands will automatically use the `CREO4U_SKILL_API_KEY` environment variable — no need to pass `--token` or any API key parameter.\n\n---\n\n# 语构 App Builder\n\n语构 is a **chat-driven full-stack application builder**. Users describe what they want in natural language and 语构 generates a **production-ready web application**, including frontend UI, backend services, database schema, and a live development environment.\n\nThis skill enables AI agents to interact with the **语构 platform** to create, iterate, publish, and deploy applications.\n\nAll platform operations must be executed through the CLI script:\n\n```bash\npython scripts/yugoo_cli.py [global options] <command> [command options]\n```\n\n**IMPORTANT: Argument Order** — Global options (`--token`, `--base-url`, `--insecure`, `--timeout`) must appear **BEFORE** the subcommand. Placing them after the subcommand will cause a parse error.\n\n```bash\n# ✅ Correct — global options before subcommand\npython scripts/yugoo_cli.py --token TOKEN create --name \"My App\"\n\n# ❌ Wrong — global options after subcommand\npython scripts/yugoo_cli.py create --token TOKEN --name \"My App\"\n```\n\n> **Note**: The `--insecure` flag disables TLS certificate verification. Only use it in controlled test environments — never for production or when transmitting real API keys.\n\nDo **not** call platform APIs directly. Always use the CLI commands provided by this skill.\n\n---\n\n# When to Use This Skill\n\nUse this skill whenever the user wants to:\n\n* create a **website** or **web application**\n* build a **dashboard** or **admin panel**\n* create a **SaaS product** or **internal tool**\n* build a **full-stack application** with frontend + backend\n* build a **landing page**\n* create a **browser game** or **mini game**\n* iterate on an existing **语构 project**\n* publish or deploy an **语构 application**\n* check sandbox health or preview URLs\n* manage application **versions**\n* **copy** an existing application (own or from market)\n* **clone** an app from the **app market**\n* **switch** between application versions\n* **delete** or **finalize** a version\n\nDo **not** use this skill for unrelated programming tasks.\n\n---\n\n# Routing Keywords\n\nTrigger this skill if the request includes concepts such as:\n\n* build a website\n* create a webpage\n* build a web app\n* create a SaaS\n* build a dashboard\n* create an admin panel\n* build an internal tool\n* create a landing page\n* build a browser game\n* create a mini game\n* generate a web product\n* make a snake game webpage\n* build a todo web app\n* create a blog site\n* publish this app\n* deploy this application\n* copy this app\n* clone an app from market\n* browse app market\n* switch to version\n* list versions\n* delete version\n* finalize version\n\n---\n\n# Example Requests\n\nExamples that should route to this skill:\n\n* \"Create a todo list web app\"\n* \"Build a personal blog website\"\n* \"Make a dashboard for sales analytics\"\n* \"Create a SaaS landing page\"\n* \"Build an admin panel\"\n* \"Write a snake game webpage\"\n* \"Create a browser game\"\n* \"Build a mini web game\"\n* \"Modify my 语构 project\"\n* \"Publish this 语构 app\"\n* \"Deploy my application\"\n\n---\n\n# Application Development Description Guidelines\n\n## ✅ DO: Simple, Focused Requests\n\n### For New Applications\nDescribe the **core functionality** in 1-2 sentences:\n\n```\n\"Build a todo app where users can add tasks, mark them complete, and delete them\"\n\"Create a dashboard to display sales data with charts and filters\"\n\"Build a landing page for a SaaS product with pricing section and contact form\"\n```\n\n### For Bug Fixes or Optimizations (1-2 changes per request)\n\n**✅ Correct - Single Focus:**\n```\n\"Fix the submit button not responding on the contact form\"\n\"Optimize the loading speed of the data table\"\n\"Add error handling for invalid email input\"\n\"Fix the date picker not showing correct format\"\n```\n\n**✅ Correct - Two Related Changes:**\n```\n\"Fix the login button styling and add a loading indicator\"\n\"Optimize the database query and add caching for faster response\"\n\"Fix the mobile layout and adjust the navigation menu\"\n```\n\n**❌ WRONG - Too Complex (DO NOT use):**\n```\n\"Fix the login button, optimize the database, add user authentication, redesign the homepage, and deploy to production\"\n```\n\n## ⚠️ IMPORTANT: Complexity Limits\n\nWhen sending messages to the `chat` API:\n\n| Request Type | Max Items |\n|--------------|-----------|\n| Bug fixes | 1-2 related bugs |\n| Feature additions | 1-2 related features |\n| Optimizations | 1-2 related optimizations |\n| UI changes | 1-2 related components |\n\n**Rationale**: 语构 platform works best with focused, incremental changes. Complex multi-part requests may result in incomplete implementation or unexpected behavior.\n\n## Iterative Development Pattern\n\nFor complex requirements, break them into multiple chat messages:\n\n```bash\n# Round 1: Build basic structure\nchat -c $CID -m \"Build a todo app with add and list features\" --watch\n\n# Round 2: Add one feature\nchat -c $CID -m \"Add delete functionality to todo items\" --watch\n\n# Round 3: Add another feature\nchat -c $CID -m \"Add edit functionality and local storage\" --watch\n\n# Round 4: Polish\nchat -c $CID -m \"Improve the UI styling and add animations\" --watch\n```\n\n---\n\n# How to Describe Application Requirements\n\n## ✅ Do: Keep It Simple\n\nDescribe **what the application should do** in one or two sentences:\n\n```\n\"Build a todo app where users can add tasks, mark them complete, and delete them\"\n\"Create a dashboard to display sales data with charts and filters\"\n```\n\n## ❌ Don't: Over-Specify\n\nAvoid:\n- Technology stack (e.g., \"use React\", \"use FastAPI\")\n- Performance requirements (e.g., \"handle 1000 concurrent users\")\n- Architecture constraints (e.g., \"use microservices\")\n- Detailed feature lists\n\n**For iterative modifications, keep requests brief — only describe the change needed, not the full application again.**\n\n**For bug fixes or optimizations, limit to 1-2 related changes per request.** See [Application Development Description Guidelines](#application-development-description-guidelines) for details.\n\nThe platform handles technical decisions automatically.\n\n---\n\n# Model Selection\n\nThe `chat` command accepts an optional `--model-choice` parameter that selects which model the **Task agent** uses for this message. The Pilot agent always uses the platform default and is **not** affected by this flag.\n\n## Accepted values\n\n| Value | Meaning |\n|-------|---------|\n| *(omitted)* or `auto` | Smart routing — platform picks the best model |\n| `economy` | Preset: cheaper / faster models |\n| `advance` | Preset: balanced cost vs. capability |\n| `expert` | Preset: highest-capability models |\n| `<model-id>` | A concrete model id from `python scripts/yugoo_cli.py models` (e.g. `claude-sonnet-4-6`) |\n\nFormat constraint: `^[A-Za-z0-9._\\-]+$`, max length 80.\n\n## Typical usage\n\n```bash\n# Discover available choices\npython scripts/yugoo_cli.py models\n\n# Pick a preset\npython scripts/yugoo_cli.py chat -c $CID -m \"Build a SaaS landing page\" --model-choice expert --watch\n\n# Pin a concrete model id\npython scripts/yugoo_cli.py chat -c $CID -m \"Add e2e tests\" --model-choice claude-sonnet-4-6 --watch\n```\n\n## When to set it explicitly\n\n- The user asks for a specific model (\"use Sonnet\", \"switch to the cheaper model\").\n- You're running a high-stakes / complex change and want the `expert` preset.\n- You're doing many trivial iterations and want the `economy` preset to save credits.\n\nFor most cases, leave it unset (smart routing).\n\n---\n\n# Stateless Execution Model\n\nThe CLI script is **stateless**. It does not store workflow state between calls.\n\nApplication workflow state is maintained by the 语构 platform and must be tracked via:\n\n* `conversation_id` — the unique session identifier\n* `message_id` — identifies a specific message/generation run\n\nAgents must pass the appropriate identifiers when continuing conversations or checking results.\n\n---\n\n# Application Lifecycle\n\n语构 applications follow a standard lifecycle:\n\n## 1. Initial Creation\n\nFor a new application:\n\n1. Start with a `chat` request describing the product\n2. The platform generates the application automatically\n3. Application is available in the development environment\n\n## 2. Multi-Round Modification\n\nAfter an application has been created:\n\n* Continue using `chat` with the same `conversation_id`\n* Chat messages modify the existing application\n* No additional generation step required\n\n## 3. Publishing\n\nPublishing deploys the application to production:\n\n* Use `publish` command to trigger deployment\n* Use `publish --wait` to auto-poll until deployment completes\n* After successful publish, the app is live at the preview URL\n\n---\n\n# Application URLs\n\n语构 provides URLs during the lifecycle:\n\n## Development/Preview URL\n\nAfter the application is created, access it at:\n\n```\nhttps://preview-{conversation_id}.creo4u.com/\n```\n\nThis URL is for:\n* viewing the application\n* testing features\n* development iteration\n\n## Production URL\n\nAfter publishing succeeds, the application is accessible at:\n\n```\nhttps://preview-{conversation_id}.creo4u.com/\n```\n\nThis is the **public production URL** of the deployed application.\n\nShare this URL only after publishing completes successfully.\n\n---\n\n# Standard Workflow\n\n## Create New Application\n\n```\ncreate → chat --watch → publish --wait → urls\n```\n\n## Iterate on Existing Application\n\n```\nchat --watch → result → chat --watch → result → ...\n```\n\n## Publish Application\n\n```\npublish --wait → urls\n```\n\n## Take Down Application\n\n```\nunpublish\n```\n\n## Copy Own Application\n\n```\ncopy → chat --watch → result → publish --wait\n```\n\n## Clone from App Market\n\n```\nmarket-list → clone-market → chat --watch → result → publish --wait\n```\n\n## Version Management\n\n```\nversions → restore-version → chat --watch → finalize-version\n```\n\n## Build with Attachments\n\n```\nupload --file → chat --attachment OSS_PATH --watch → publish --wait → urls\n```\n\n## Build from Local File\n\n```\nchat --file /path/to/requirements.txt --watch → result → publish --wait → urls\n```\n\n---\n\n# Complete Workflow Example\n\n```bash\n# Step 1: Create a conversation\nCONV=$(python scripts/yugoo_cli.py create --name \"Todo App\")\nCID=$(echo $CONV | python -c \"import sys,json; print(json.load(sys.stdin)['conversation_id'])\")\n\n# Step 2: Send development instructions and watch progress\n# The poll_completed snapshot contains cost/time in assistant messages\npython scripts/yugoo_cli.py chat \\\n  -c $CID \\\n  -m \"Build a todo app with add, complete, and delete features\" \\\n  --watch\n\n# Step 3: Publish the application (auto-wait for completion)\npython scripts/yugoo_cli.py publish -c $CID --wait\n\n# Step 4: Get the production URL\npython scripts/yugoo_cli.py urls -c $CID\n```\n\n---\n\n# Available Commands\n\n**Note**: All commands automatically use the `CREO4U_SKILL_API_KEY` environment variable for authentication.\n\n## create\n\nCreate a new conversation.\n\n```bash\npython scripts/yugoo_cli.py create [--name NAME]\n```\n\n| Parameter | Default | Description |\n|-----------|---------|-------------|\n| `--name` | `New Conversation` | Conversation name |\n\n**Output**: JSON with `conversation_id`, `name`, `status`, `created_at`.\n\n---\n\n## upload\n\nUpload a local file as a chat attachment. The file is uploaded to OSS and the returned `oss_path` can be passed to `chat --attachment`.\n\n```bash\npython scripts/yugoo_cli.py upload --file /path/to/file\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `--file` | Yes | Local file path to upload (max 50MB) |\n\n**Output**: JSON with `oss_path`, `filename`, `file_md5`, `size_bytes`.\n\n```json\n{\"oss_path\": \"chat/attachments/123/abc123def456/document.pdf\", \"filename\": \"document.pdf\", \"file_md5\": \"abc123def456...\", \"size_bytes\": 1048576}\n```\n\n**Example — Upload then chat with attachment:**\n```bash\n# Step 1: Upload the file\nUPLOAD=$(python scripts/yugoo_cli.py upload --file design.png)\nOSS_PATH=$(echo $UPLOAD | python -c \"import sys,json; print(json.load(sys.stdin)['oss_path'])\")\n\n# Step 2: Send message with attachment\npython scripts/yugoo_cli.py chat -c $CID -m \"参考这个设计图来实现页面\" --attachment \"$OSS_PATH\" --watch\n```\n\n---\n\n## chat\n\nSend a message and optionally watch for completion via polling. This is the primary workflow command.\n\n```bash\npython scripts/yugoo_cli.py chat -c CID -m \"message\" [--watch] [--attachment OSS_PATH]\npython scripts/yugoo_cli.py chat -c CID -f /path/to/file [--watch]\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | No | Conversation ID (omit to auto-create) |\n| `-m`, `--content` | No* | Message content (use `-` to read from stdin) |\n| `-f`, `--file` | No* | Read message content from a local file path |\n| `-w`, `--watch` | No | Poll for completion after sending message (15s interval) |\n| `--agent-name` | No | Specific agent to handle the message |\n| `--context` | No | JSON string for additional context |\n| `--attachment` | No | OSS path of uploaded attachment (repeatable for multiple files) |\n| `--model-choice` | No | Model selection for the Task agent. Accepts a preset (`auto` \\| `economy` \\| `advance` \\| `expert`) or a concrete model id from the `models` command. Omit (or pass `auto`) to use smart routing. Only affects the Task agent; the Pilot agent always uses the platform default. |\n\n*Either `--content` or `--file` is required. `--file` takes priority if both are provided.\n\n**Output without `--watch`**: Single JSON line with `message_id`, `conversation_id`.\n\n**Output with `--watch`**: Polling mode with completion status\n```json\n{\"event\": \"message_accepted\", \"message_id\": \"...\", \"conversation_id\": \"...\"}\n{\"event\": \"poll\", \"iteration\": 1, \"state\": \"pending\"}\n{\"event\": \"poll\", \"iteration\": 2, \"state\": \"running\"}\n{\"event\": \"poll_completed\", \"iteration\": 3, \"state\": \"completed\", \"snapshot\": {...}}\n```\n\n**Important**:\n- Use `--watch` for most cases — it sends the message AND polls for completion in one command.\n- Use `--file` to send a local file's content as the message — useful for long requirement documents or pre-written prompts.\n- Use `--content -` to read long prompts from stdin.\n- Use `upload` command first to get `oss_path`, then pass it via `--attachment`.\n- Use `--model-choice` to override the default model routing (see [Model Selection](#model-selection)).\n\n**Example — pick a model preset:**\n\n```bash\n# Use the high-capability \"expert\" preset for the Task agent\npython scripts/yugoo_cli.py chat -c $CID -m \"Refactor the auth flow\" --model-choice expert --watch\n\n# Use a concrete model id (look it up via the `models` command first)\npython scripts/yugoo_cli.py chat -c $CID -m \"Add tests\" --model-choice claude-sonnet-4-6 --watch\n```\n\n---\n\n## models\n\nList available model presets and concrete model ids for use with `chat --model-choice`. This is a public endpoint and does not consume credit.\n\n```bash\npython scripts/yugoo_cli.py models\n```\n\n**Output**:\n```json\n{\n  \"presets\": [\n    {\"id\": \"auto\", \"display_name\": \"Auto\", \"description\": \"Smart routing\", \"is_default\": true, \"first_model\": \"...\", \"fallback_chain\": [\"...\"]},\n    {\"id\": \"economy\", \"display_name\": \"Economy\", \"description\": \"Cheaper, faster models\", \"first_model\": \"...\", \"fallback_chain\": [\"...\"]},\n    {\"id\": \"advance\", \"display_name\": \"Advance\", \"description\": \"Balanced\", \"first_model\": \"...\", \"fallback_chain\": [\"...\"]},\n    {\"id\": \"expert\", \"display_name\": \"Expert\", \"description\": \"Highest capability\", \"first_model\": \"...\", \"fallback_chain\": [\"...\"]}\n  ],\n  \"models\": [\n    {\"id\": \"claude-sonnet-4-6\", \"display_name\": \"Claude Sonnet 4.6\", \"series\": \"claude\", \"price_tier\": \"advance\", \"is_latest\": true, \"enabled\": true, \"context_window\": 200000}\n  ],\n  \"default_choice\": \"auto\"\n}\n```\n\n**When to use**:\n- Before the first chat in a session, if you want a non-default model.\n- When the user explicitly asks \"which models can I use?\" / \"switch to a cheaper model\" / etc.\n- Pass either a preset `id` (e.g. `expert`) or a concrete model `id` (e.g. `claude-sonnet-4-6`) to `chat --model-choice`.\n\n---\n\n## publish\n\nTrigger deployment to production.\n\n```bash\npython scripts/yugoo_cli.py publish -c CID [--wait]\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID to publish |\n| `-w`, `--wait` | No | Auto-poll publish status until published or failed |\n\n**Examples:**\n\n**1. Publish and manually check status:**\n\n```bash\npython scripts/yugoo_cli.py publish -c $CID\n```\n\n**2. Publish and auto-wait for completion (recommended):**\n\n```bash\npython scripts/yugoo_cli.py publish -c $CID --wait\n```\n\n**Important:**\n- Application must be created before publishing\n- After successful publish, the app is live at the preview URL\n- Use `--wait` flag to avoid manual polling\n\n---\n\n## publish-status\n\nCheck the status of a deployment.\n\n```bash\npython scripts/yugoo_cli.py publish-status -c CID\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID |\n\n**Output**: JSON with `status`: `created`, `publishing`, `published`, or `failed`\n\n**Usage Pattern:**\n\n```bash\n# Publish and auto-wait for completion (recommended)\npython scripts/yugoo_cli.py publish -c $CID --wait\n\n# Or check status manually\npython scripts/yugoo_cli.py publish-status -c $CID\n```\n\n**Tip:** Use `publish --wait` to avoid manual polling.\n\n---\n\n## unpublish\n\nTake down a deployed application (removes the public production URL).\n\n```bash\npython scripts/yugoo_cli.py unpublish -c CID\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID to unpublish |\n\n**Example:**\n\n```bash\npython scripts/yugoo_cli.py unpublish -c $CID\n```\n\n**Important:**\n- Application must have been published before it can be unpublished\n- After unpublishing, the production URL is no longer accessible\n- The conversation and source files are preserved; only the deployment is removed\n- You can `publish` the application again later to restore the deployment\n\n---\n\n## messages\n\nGet the full conversation snapshot (all messages and state).\n\n```bash\npython scripts/yugoo_cli.py messages -c CID\n```\n\n**Output**: Complete snapshot JSON with all runs, messages, panels, and metadata.\n\n---\n\n## result\n\nExtract structured development results from the conversation snapshot. This is the recommended way to get results after a `chat --watch` completes.\n\n```bash\npython scripts/yugoo_cli.py result -c CID [--message-id MID]\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID |\n| `--message-id` | No | Specific message run (default: latest) |\n\n**Output**:\n```json\n{\n  \"conversation_id\": \"...\",\n  \"message_id\": \"...\",\n  \"status\": \"completed\",\n  \"summary\": \"Built a full-stack todo application...\",\n  \"files_generated\": [\"src/App.tsx\", \"backend/main.py\"],\n  \"files_modified\": [\"package.json\"],\n  \"assistant_messages\": [\"...\"],\n  \"tasks\": [\n    {\"task_id\": \"...\", \"title\": \"Generate frontend code\", \"status\": \"completed\", \"type\": \"streaming_multi_file\"}\n  ],\n  \"error\": null,\n  \"token_usage\": {\"prompt_tokens\": 1234, \"completion_tokens\": 5678, \"total_tokens\": 6912},\n  \"credit_usage\": 100,\n  \"started_at\": 1705771805000,\n  \"completed_at\": 1705771900000\n}\n```\n\n---\n\n## stop\n\nStop message generation in progress.\n\n```bash\npython scripts/yugoo_cli.py stop -c CID --message-id MID\n```\n\n---\n\n## start-runtime\n\nStart or restart the conversation runtime (container environment).\n\n```bash\npython scripts/yugoo_cli.py start-runtime -c CID\n```\n\nUse this after a container has been reclaimed due to inactivity.\n\n---\n\n## list\n\nList conversations with pagination and filtering.\n\n```bash\npython scripts/yugoo_cli.py list [--limit N] [--offset N] [--keyword KW] [--sort-by FIELD] [--sort-order asc|desc]\n```\n\n---\n\n## get\n\nGet conversation details.\n\n```bash\npython scripts/yugoo_cli.py get -c CID\n```\n\n---\n\n## delete\n\nTerminate a conversation.\n\n```bash\npython scripts/yugoo_cli.py delete -c CID\n```\n\n---\n\n## health\n\nCheck sandbox services health (frontend, backend, sandbox interface).\n\n```bash\npython scripts/yugoo_cli.py health -c CID\n```\n\n**Output**:\n```json\n{\n  \"frontend\": {\"ready\": true, \"status_code\": 200, \"message\": \"Frontend service is ready\"},\n  \"backend\": {\"ready\": true, \"status_code\": 200, \"message\": \"Backend service is ready\"},\n  \"sandbox\": {\"ready\": true, \"status_code\": 200, \"message\": \"Sandbox service is ready\"},\n  \"all_ready\": true\n}\n```\n\n---\n\n## urls\n\nGet sandbox, preview, and backend URLs for the development environment.\n\n```bash\npython scripts/yugoo_cli.py urls -c CID\n```\n\n**Output**:\n```json\n{\"sandbox_url\": \"https://sandbox-xxx.domain.com\", \"preview_url\": \"https://preview-xxx.domain.com\", \"backend_url\": \"https://backend-xxx.domain.com\"}\n```\n\n---\n\n## download\n\nDownload workspace as a zip file.\n\n```bash\npython scripts/yugoo_cli.py download -c CID\n```\n\n**Output**: JSON with `download_url`, `filename`, `size_mb`, `md5`.\n\n---\n\n## versions\n\nList all saved versions for a conversation.\n\n```bash\npython scripts/yugoo_cli.py versions -c CID [--sort-order asc|desc]\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID |\n| `--sort-order` | No | Sort direction: `asc` (oldest first) or `desc` (newest first, default) |\n\n**Output**: JSON with `conversation_id`, `current_version`, `versions` array (each with `version`, `timestamp`, `is_wip`, `is_published`, `description`, `from_version`), and `total` count.\n\n**Example**:\n```bash\npython scripts/yugoo_cli.py versions -c $CID\n# Output: {\"conversation_id\": \"...\", \"current_version\": 3, \"versions\": [...], \"total\": 3}\n```\n\n---\n\n## current-version\n\nGet the current active version number and its metadata.\n\n```bash\npython scripts/yugoo_cli.py current-version -c CID\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID |\n\n**Output**: JSON with `conversation_id`, `current_version`, `is_wip`, `from_version`, `description`.\n\n---\n\n## restore-version\n\nSwitch workspace to a specific version. This changes the active codebase and restarts the sandbox.\n\n```bash\npython scripts/yugoo_cli.py restore-version -c CID --version N\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID |\n| `--version` | Yes | Version number to switch to |\n\n**Output**: JSON with `success`, `version`, `mode` (`tag` or `wip`), `message`.\n\n**Important**:\n- Switching versions restarts the sandbox runtime automatically.\n- Cannot switch versions while another operation is in progress (returns 409).\n- After switching, use `chat` to continue development from that version.\n\n---\n\n## copy\n\nCreate a deep copy of an existing conversation (own application).\n\n```bash\npython scripts/yugoo_cli.py copy -c CID [--new-name NAME] [--wait]\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Source conversation ID |\n| `--new-name` | No | Name for the copy (default: \"{original name}（副本）\") |\n| `-w`, `--wait` | No | Auto-poll copy status until workspace is ready (5s interval, max 10 minutes) |\n\n**Output**: JSON with `conversation_id`, `name`, `status`, `created_at` of the new conversation.\n\n**Important**:\n- Creates a completely independent copy with new conversation ID\n- Workspace files are copied in the background (1-30 seconds)\n- The new conversation is immediately usable for chat commands\n- Use `--wait` to block until workspace files are fully copied\n\n**Example**:\n```bash\n# Copy an existing app (without waiting)\nNEW=$(python scripts/yugoo_cli.py copy -c $CID --new-name \"My App V2\")\nNEW_CID=$(echo $NEW | python -c \"import sys,json; print(json.load(sys.stdin)['conversation_id'])\")\n\n# Copy and wait for workspace to be ready\nNEW=$(python scripts/yugoo_cli.py copy -c $CID --new-name \"My App V2\" --wait)\nNEW_CID=$(echo $NEW | python -c \"import sys,json; print(json.load(sys.stdin)['conversation_id'])\")\n\n# Iterate on the copy\npython scripts/yugoo_cli.py chat -c $NEW_CID -m \"Add dark mode support\" --watch\n```\n\n---\n\n## market-list\n\nBrowse and search the app market.\n\n```bash\npython scripts/yugoo_cli.py market-list [--limit N] [--offset N] [--keyword KW] [--category-id ID] [--sort-by FIELD]\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `--limit` | No | Max results (default: 20) |\n| `--offset` | No | Pagination offset (default: 0) |\n| `--keyword` | No | Search keyword |\n| `--category-id` | No | Filter by category ID |\n| `--sort-by` | No | Sort field (e.g. `view_count`, `clone_count`, `created_at`) |\n\n**Output**: JSON with `items` array containing market item details (item_id, title, description, clone_count, view_count, etc.) and pagination info.\n\n**Example**:\n```bash\n# Search for todo apps\npython scripts/yugoo_cli.py market-list --keyword \"todo\"\n\n# Browse most popular apps\npython scripts/yugoo_cli.py market-list --sort-by view_count --limit 10\n```\n\n---\n\n## clone-market\n\nClone an app from the app market into your conversation list.\n\n```bash\npython scripts/yugoo_cli.py clone-market --item-id ITEM_ID\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `--item-id` | Yes | Market item ID to clone |\n\n**Output**: JSON with `conversation_id`, `cloned_code`, `cloned_prd`, `cloned_history`, `message_count`.\n\n**Important**:\n- The cloned app is created as a new conversation you own\n- What gets cloned depends on the original app's clone permission settings:\n  - CODE: workspace source files\n  - PRD: design documents\n  - HISTORY: conversation messages\n- Workspace files are copied in the background\n\n**Example - Clone from Market and Iterate**:\n```bash\n# Step 1: Browse market\npython scripts/yugoo_cli.py market-list --keyword \"dashboard\"\n\n# Step 2: Clone the app (use item_id from market-list result)\nCLONE=$(python scripts/yugoo_cli.py clone-market --item-id $ITEM_ID)\nCID=$(echo $CLONE | python -c \"import sys,json; print(json.load(sys.stdin)['conversation_id'])\")\n\n# Step 3: Customize the cloned app\npython scripts/yugoo_cli.py chat -c $CID -m \"Change the color scheme to dark blue\" --watch\n\n# Step 4: Publish your customized version\npython scripts/yugoo_cli.py publish -c $CID --wait\n```\n\n---\n\n## delete-version\n\nDelete a WIP (work-in-progress) version and revert to the previous version.\n\n```bash\npython scripts/yugoo_cli.py delete-version -c CID --version N\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID |\n| `--version` | Yes | Version number to delete |\n\n**Output**: JSON with `success`, `version`, `reverted_to_version`, `message`.\n\n**Important**:\n- Only WIP versions can be deleted. Finalized versions cannot be deleted.\n- The workspace automatically reverts to the previous version after deletion.\n- Cannot delete a version while another operation is in progress (returns 409).\n\n---\n\n## finalize-version\n\nFinalize (lock) the current WIP version, making it a permanent checkpoint.\n\n```bash\npython scripts/yugoo_cli.py finalize-version -c CID\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID |\n\n**Output**: JSON with `success`, `version`, `from_version`, `message`.\n\n**Important**:\n- Only works when the workspace is on a WIP branch.\n- After finalization, the version becomes a permanent tag that cannot be deleted.\n- Use this to create stable checkpoints before making major changes.\n\n---\n\n## update-version-desc\n\nUpdate the description of a specific version.\n\n```bash\npython scripts/yugoo_cli.py update-version-desc -c CID --version N --description \"description text\"\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID |\n| `--version` | Yes | Version number |\n| `--description` | Yes | New description text |\n\n**Output**: JSON with `success`, `version`, `description`, `message`.\n\n---\n\n## rename\n\nRename a conversation.\n\n```bash\npython scripts/yugoo_cli.py rename -c CID --name \"New Name\"\n```\n\n---\n\n## spending\n\nGet message-level spending (cost and time) for a conversation. Supports filtering by `message_id` to query a single message's cost and duration.\n\n```bash\npython scripts/yugoo_cli.py spending -c CID [--message-id MID] [--limit N] [--offset N]\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID |\n| `--message-id` | No | Filter by specific message ID |\n| `--limit` | No | Max results (default: 50) |\n| `--offset` | No | Pagination offset (default: 0) |\n\n**Output**:\n```json\n{\n  \"session_id\": \"202501201430-a1b2c3d4\",\n  \"app_name\": \"My Web App\",\n  \"total_cost\": \"1500\",\n  \"total\": 1,\n  \"items\": [\n    {\n      \"message_id\": \"msg-001\",\n      \"message_preview\": \"Build a login page...\",\n      \"total_cost\": \"300\",\n      \"record_count\": 3,\n      \"first_billing_at\": \"2025-01-20T14:30:00\",\n      \"last_billing_at\": \"2025-01-20T14:35:00\",\n      \"started_at\": \"2025-01-20T14:30:00\",\n      \"finished_at\": \"2025-01-20T14:35:00\",\n      \"duration_seconds\": 300.0\n    }\n  ],\n  \"limit\": 20,\n  \"offset\": 0\n}\n```\n\n**Fields**:\n- `total_cost`: Total credits consumed for the entire conversation (integer string)\n- `items[].total_cost`: Credits consumed per message/development round\n- `items[].started_at` / `finished_at`: Start and end timestamps of the development round\n- `items[].duration_seconds`: Duration of the development round in seconds\n- `items[].first_billing_at` / `last_billing_at`: Time range of billing for each round\n\n---\n\n# Output Conventions\n\n- **stdout**: JSON lines (one JSON object per line). Machine-readable.\n- **stderr**: Error messages and metadata.\n- **Exit code 0**: Success.\n- **Exit code 1**: Error (details on stderr as JSON).\n\nEvery stdout line is a complete, self-contained JSON object. This enables piping to `jq` for filtering and line-by-line processing by AI agents.\n\n---\n\n# Polling Mode\n\nThe `chat` and `publish` commands with `--watch` use polling to monitor progress:\n\n- **Interval**: Fixed 15 seconds between polls\n- **Single request timeout**: 10 minutes (40 iterations per request)\n- **Maximum total timeout**: 1 hour (up to 6 retries)\n\nPolling stops automatically when the run reaches `completed` or `failed` state.\n\n**Recommendation**: Use `--wait` flag for publish command to auto-poll status.\n\n## poll\n\nResume polling for a message that is still in progress (after a `poll_timeout`).\n\n```bash\npython scripts/yugoo_cli.py poll -c CID --message-id MID\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID |\n| `--message-id` | Yes | Message ID to poll |\n\n**Output**: Same as `chat --watch` — emits `poll` events and ends with `poll_completed` or `poll_timeout`.\n\n## CRITICAL: Polling Completion Rules\n\n**You MUST follow these rules strictly when using `chat --watch`:**\n\n1. **Single request timeout is 10 minutes**: Each `chat --watch` or `poll` command polls for up to **10 minutes**. If the development is not done, the CLI emits a `poll_timeout` event and exits. This is normal — development can take longer than 10 minutes.\n\n2. **On `poll_timeout`, you MUST retry using the `poll` command**: When you receive a `poll_timeout` event, immediately run the `poll` command with the same `conversation_id` and `message_id` to resume monitoring. **Do NOT** treat `poll_timeout` as a failure or stop.\n\n3. **Maximum 6 retries (1 hour total)**: You may retry the `poll` command up to **6 times** (including the initial `chat --watch`). This ensures a maximum total timeout of 1 hour (6 × 10 min). If all 6 attempts time out, then treat it as a genuine timeout and report to the user.\n\n   **Retry flow:**\n   ```\n   chat --watch (attempt 1, up to 10 min)\n     → poll_timeout? → poll (attempt 2, up to 10 min)\n       → poll_timeout? → poll (attempt 3, up to 10 min)\n         → poll_timeout? → poll (attempt 4, up to 10 min)\n           → poll_timeout? → poll (attempt 5, up to 10 min)\n             → poll_timeout? → poll (attempt 6, up to 10 min)\n               → poll_timeout? → report timeout to user\n   ```\n\n   **Example:**\n   ```bash\n   # Initial request\n   python scripts/yugoo_cli.py chat -c $CID -m \"Build a complex app\" --watch\n   # If poll_timeout, resume with poll:\n   python scripts/yugoo_cli.py poll -c $CID --message-id $MID\n   # Repeat poll up to 5 more times if needed\n   ```\n\n4. **Wait for ALL tasks to complete**: The polling only ends with `poll_completed` when **every task and phase** in the development pipeline has finished (status = `completed` or `failed`). Do NOT consider the operation done just because an assistant message appeared or a partial result was returned.\n\n5. **Do NOT stop polling on intermediate messages**: During development, the platform may return intermediate status messages such as:\n   - \"服务正在启动中，预计还需要几分钟时间。前端服务启动后即可访问！\"\n   - \"正在生成代码...\"\n   - \"正在部署...\"\n   - Any message indicating services are still starting or building\n\n   These are **progress updates, NOT completion signals**. You MUST continue waiting for the `poll_completed` event. **Never** interpret these messages as the final result.\n\n6. **Only `poll_completed` means truly done**:\n   - `poll_completed` → Development finished. Proceed to `result` and `spending`.\n   - `poll_timeout` → Not finished yet. Retry with `poll` command (up to 6 total attempts).\n\n---\n\n# Error Handling\n\nAll HTTP errors produce JSON on stderr:\n\n```json\n{\"error\": {\"error\": \"CONVERSATION_NOT_FOUND\", \"message\": \"Conversation not found\"}, \"status_code\": 404}\n```\n\nCommon error codes:\n\n| Status | Error | Meaning |\n|--------|-------|---------|\n| 402 | `INSUFFICIENT_CREDIT` | User has insufficient credit |\n| 404 | `CONVERSATION_NOT_FOUND` | Conversation does not exist |\n| 409 | `CONVERSATION_IN_PROGRESS` | Another message is being processed |\n| 409 | `WIP_VERSION_CONFLICT` | Version conflict during message send |\n| 409 | `PUBLISH_IN_PROGRESS` | Another publish is being processed |\n| 501 | `NOT_IMPLEMENTED` | Feature not available in current mode |\n\nIf the conversation is locked (409), wait a few seconds and retry.\n\n---\n\n# Application Copy & Clone Workflow\n\n## Copy Your Own Application\n\nUse `copy` to create an independent copy of your existing application, then iterate on it:\n\n```bash\n# Copy the app\nNEW=$(python scripts/yugoo_cli.py copy -c $CID --new-name \"Todo App V2\")\nNEW_CID=$(echo $NEW | python -c \"import sys,json; print(json.load(sys.stdin)['conversation_id'])\")\n\n# Develop on the copy\npython scripts/yugoo_cli.py chat -c $NEW_CID -m \"Add user authentication\" --watch\n\n# Publish the new version\npython scripts/yugoo_cli.py publish -c $NEW_CID --wait\n```\n\n## Clone from App Market\n\nUse `market-list` to find apps, then `clone-market` to clone into your workspace:\n\n```bash\n# Browse the market\npython scripts/yugoo_cli.py market-list --keyword \"ecommerce\" --limit 5\n\n# Clone an app (use item_id from market-list output)\nCLONE=$(python scripts/yugoo_cli.py clone-market --item-id $ITEM_ID)\nCID=$(echo $CLONE | python -c \"import sys,json; print(json.load(sys.stdin)['conversation_id'])\")\n\n# Customize the cloned app\npython scripts/yugoo_cli.py chat -c $CID -m \"Replace product catalog with my inventory\" --watch\n\n# Get results and publish\npython scripts/yugoo_cli.py result -c $CID\npython scripts/yugoo_cli.py publish -c $CID --wait\npython scripts/yugoo_cli.py urls -c $CID\n```\n\n---\n\n# Version Management Workflow\n\nVersions allow you to create checkpoints, switch between states, and safely experiment.\n\n## View and Switch Versions\n\n```bash\n# List all versions\npython scripts/yugoo_cli.py versions -c $CID\n\n# Check current version\npython scripts/yugoo_cli.py current-version -c $CID\n\n# Switch to an earlier version\npython scripts/yugoo_cli.py restore-version -c $CID --version 2\n```\n\n## Create a Checkpoint (Finalize)\n\nAfter development, finalize the current WIP version to create a permanent checkpoint:\n\n```bash\n# Develop features\npython scripts/yugoo_cli.py chat -c $CID -m \"Add payment integration\" --watch\n\n# Lock the version as a stable checkpoint\npython scripts/yugoo_cli.py finalize-version -c $CID\n\n# Add a description to the version\npython scripts/yugoo_cli.py update-version-desc -c $CID --version 3 --description \"Added payment integration with Stripe\"\n```\n\n## Undo Changes (Delete WIP Version)\n\nIf a development round didn't go well, delete the WIP version to revert:\n\n```bash\n# Check current version (e.g., version 4, WIP)\npython scripts/yugoo_cli.py current-version -c $CID\n\n# Delete the WIP version and revert to previous\npython scripts/yugoo_cli.py delete-version -c $CID --version 4\n\n# Now back at version 3 — try again\npython scripts/yugoo_cli.py chat -c $CID -m \"Add payment integration using a different approach\" --watch\n```\n\n---\n\n# Error Handling Guidance\n\nAgents should handle the following situations:\n\n* publish requested before application has been created\n* missing `conversation_id`\n* interrupted polling loop\n* failed deployment status\n* incorrect or missing parameter values\n\nIf workflow state is unclear, inspect the conversation or use `result` command before taking the next action.\n\n**Pro Tips:**\n- Always check command `--help` when unsure about parameters\n- Use `--wait` flag with `publish` to simplify deployment\n- Save `conversation_id` from `create` response\n- After creation, use `chat` directly for modifications\n\n---\n\n# Application Sharing Rule (IMPORTANT)\n\n- You must share your application **only using the production preview URL** (after it has been published).\n\nProduction preview URL format:\n\n```\nhttps://preview-{conversation_id}.creo4u.com/\n```\n\n- If the application has **not been published**, you must publish it before sharing with others.\n\nExample publish command:\n\n```bash\npython scripts/yugoo_cli.py publish -c $CID --wait\n```\n\n---\n\n# Tips\n\n- Use `--watch` with `chat` for the common case — it sends the message and polls for completion.\n- Use `--wait` with `publish` to auto-poll deployment status.\n- Use `result` after completion to get a clean summary without parsing poll events.\n- Use `--file` with `chat` to send a local file's content as the message, useful for long requirement documents or pre-written prompts.\n- The `--content -` flag reads message content from stdin, useful for long prompts.\n- `conversation_id` is abbreviated as `-c` in all commands for convenience.\n- Always check `result` output for `status: \"failed\"` and `error` field to detect failures.\n- Use `health` to verify the sandbox is ready before sending development instructions.\n- Use `start-runtime` to restart a container that was reclaimed due to inactivity.\n\n---\n\n# Development Completion Best Practice\n\n**After an application is built, do NOT manually inspect the generated code files.**\n\nAfter `chat --watch` (or `poll`) completes with `poll_completed`:\n\n1. Query **Development Cost** and **Development Time** using the `spending` command with `--message-id`:\n\n```bash\npython scripts/yugoo_cli.py spending -c \"$CID\" --message-id \"$MID\"\n```\n\nExtract from the response:\n- **Development Cost**: `items[0].total_cost` (Credits)\n- **Development Time**: `items[0].duration_seconds` (seconds)\n\n2. Publish and get URLs:\n\n```bash\npython scripts/yugoo_cli.py publish -c \"$CID\" --wait\npython scripts/yugoo_cli.py urls -c \"$CID\"\n```\n\nThen respond with the following **fixed format** (do NOT change field names or order):\n\n```\n**Application Summary**: [one-line description of what was built and key features]\n\n**Preview URL**: https://preview-{conversation_id}.creo4u.com/\n\n**Publish URL**: [url field from publish command output]\n\n**Publish Status**: [published / failed]\n\n**Development Cost**: [N] Credits\n\n**Development Time**: [N]s\n```\n\n**IMPORTANT**: Always publish after development completes. Never skip any field. Always include both Preview URL and Publish URL.\n\nFile v1.0.5:_meta.json\n\n{\n  \"ownerId\": \"kn799px9ed26zactxmbpt194nd850mcc\",\n  \"slug\": \"yugoo-app-builder\",\n  \"version\": \"1.0.5\",\n  \"publishedAt\": 1781147943570\n}\n\nFile v1.0.5:skill-card.md\n\n## Description:\n\nBuild full-stack web applications through 语构's chat-driven platform, including conversation management, development instruction delivery, build monitoring, result extraction, publishing, and version management.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[yugoo](https://clawhub.ai/user/yugoo)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agents use this skill to create, iterate, publish, and manage full-stack web applications on the 语构 platform from focused natural-language requests.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can perform credential-bearing network operations against the 语构 platform.\n\nMitigation: Use a revocable, least-privilege CREO4U_SKILL_API_KEY and avoid untrusted YUGOO_BASE_URL values.\n\nRisk: The skill supports public publishing and destructive actions such as unpublishing, deleting conversations, and deleting versions.\n\nMitigation: Require explicit user approval before publishing, unpublishing, deleting conversations, deleting versions, finalizing versions, or uploading local files.\n\nRisk: The --insecure option disables TLS certificate verification while transmitting authenticated requests.\n\nMitigation: Do not use --insecure except in controlled test environments with non-production credentials.\n\nRisk: Generated applications may expose secrets or unsafe behavior if published without review.\n\nMitigation: Inspect generated applications for secrets and unsafe behavior before making them public.\n\n## Reference(s):\n\n- [语构 App Builder ClawHub listing](https://clawhub.ai/yugoo/skills/yugoo-app-builder)\n- [yugoo publisher profile](https://clawhub.ai/user/yugoo)\n- [语构 homepage](https://creo4u.com)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with CLI commands and JSON-line command outputs]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Uses CREO4U_SKILL_API_KEY for authenticated platform operations and may produce links to generated preview or published applications.]\n\n## Skill Version(s):\n\n1.0.5 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.4: 4 files, 24410 bytes\n\nFiles: scripts/yugoo_cli.py (45083b), skill-card.md (2274b), SKILL.md (40685b), _meta.json (136b)\n\nFile v1.0.4:SKILL.md\n\n---\nname: yugoo-app-builder\ndescription: Build full-stack web applications using 语构's chat-driven development platform. Manages conversations, sends development instructions, monitors build progress, extracts results (generated files, summaries, task status), publishes applications, and manages versions.\nmetadata:\n  slug: yugoo-app-builder\n  display_name: 语构 App Builder\n  homepage: https://creo4u.com\n  env:\n    - name: CREO4U_SKILL_API_KEY\n      required: true\n      description: API key for authenticating with the 语构 (Yugoo) platform. Use a least-privilege or revocable key.\n  dependencies:\n    - requests\n---\n\n# Installation\n\n## Prerequisites\n\nBefore using this skill, ensure you have the `CREO4U_SKILL_API_KEY` environment variable set.\n\n### Setup API Key\n\n**Option 1: Provide API Key during installation**\n```bash\nexport CREO4U_SKILL_API_KEY=\"your_api_key_here\"\n```\n\n**Option 2: If not provided, the skill will prompt for it**\n- If `CREO4U_SKILL_API_KEY` is already set in your environment, the skill will use it directly\n- If not set, the skill will ask you to provide the API key\n\n### After Installation\n\nOnce installed, all CLI commands will automatically use the `CREO4U_SKILL_API_KEY` environment variable — no need to pass `--token` or any API key parameter.\n\n---\n\n# 语构 App Builder\n\n语构 is a **chat-driven full-stack application builder**. Users describe what they want in natural language and 语构 generates a **production-ready web application**, including frontend UI, backend services, database schema, and a live development environment.\n\nThis skill enables AI agents to interact with the **语构 platform** to create, iterate, publish, and deploy applications.\n\nAll platform operations must be executed through the CLI script:\n\n```bash\npython scripts/yugoo_cli.py [global options] <command> [command options]\n```\n\n**IMPORTANT: Argument Order** — Global options (`--token`, `--base-url`, `--insecure`, `--timeout`) must appear **BEFORE** the subcommand. Placing them after the subcommand will cause a parse error.\n\n```bash\n# ✅ Correct — global options before subcommand\npython scripts/yugoo_cli.py --token TOKEN create --name \"My App\"\n\n# ❌ Wrong — global options after subcommand\npython scripts/yugoo_cli.py create --token TOKEN --name \"My App\"\n```\n\n> **Note**: The `--insecure` flag disables TLS certificate verification. Only use it in controlled test environments — never for production or when transmitting real API keys.\n\nDo **not** call platform APIs directly. Always use the CLI commands provided by this skill.\n\n---\n\n# When to Use This Skill\n\nUse this skill whenever the user wants to:\n\n* create a **website** or **web application**\n* build a **dashboard** or **admin panel**\n* create a **SaaS product** or **internal tool**\n* build a **full-stack application** with frontend + backend\n* build a **landing page**\n* create a **browser game** or **mini game**\n* iterate on an existing **语构 project**\n* publish or deploy an **语构 application**\n* check sandbox health or preview URLs\n* manage application **versions**\n* **copy** an existing application (own or from market)\n* **clone** an app from the **app market**\n* **switch** between application versions\n* **delete** or **finalize** a version\n\nDo **not** use this skill for unrelated programming tasks.\n\n---\n\n# Routing Keywords\n\nTrigger this skill if the request includes concepts such as:\n\n* build a website\n* create a webpage\n* build a web app\n* create a SaaS\n* build a dashboard\n* create an admin panel\n* build an internal tool\n* create a landing page\n* build a browser game\n* create a mini game\n* generate a web product\n* make a snake game webpage\n* build a todo web app\n* create a blog site\n* publish this app\n* deploy this application\n* copy this app\n* clone an app from market\n* browse app market\n* switch to version\n* list versions\n* delete version\n* finalize version\n\n---\n\n# Example Requests\n\nExamples that should route to this skill:\n\n* \"Create a todo list web app\"\n* \"Build a personal blog website\"\n* \"Make a dashboard for sales analytics\"\n* \"Create a SaaS landing page\"\n* \"Build an admin panel\"\n* \"Write a snake game webpage\"\n* \"Create a browser game\"\n* \"Build a mini web game\"\n* \"Modify my 语构 project\"\n* \"Publish this 语构 app\"\n* \"Deploy my application\"\n\n---\n\n# Application Development Description Guidelines\n\n## ✅ DO: Simple, Focused Requests\n\n### For New Applications\nDescribe the **core functionality** in 1-2 sentences:\n\n```\n\"Build a todo app where users can add tasks, mark them complete, and delete them\"\n\"Create a dashboard to display sales data with charts and filters\"\n\"Build a landing page for a SaaS product with pricing section and contact form\"\n```\n\n### For Bug Fixes or Optimizations (1-2 changes per request)\n\n**✅ Correct - Single Focus:**\n```\n\"Fix the submit button not responding on the contact form\"\n\"Optimize the loading speed of the data table\"\n\"Add error handling for invalid email input\"\n\"Fix the date picker not showing correct format\"\n```\n\n**✅ Correct - Two Related Changes:**\n```\n\"Fix the login button styling and add a loading indicator\"\n\"Optimize the database query and add caching for faster response\"\n\"Fix the mobile layout and adjust the navigation menu\"\n```\n\n**❌ WRONG - Too Complex (DO NOT use):**\n```\n\"Fix the login button, optimize the database, add user authentication, redesign the homepage, and deploy to production\"\n```\n\n## ⚠️ IMPORTANT: Complexity Limits\n\nWhen sending messages to the `chat` API:\n\n| Request Type | Max Items |\n|--------------|-----------|\n| Bug fixes | 1-2 related bugs |\n| Feature additions | 1-2 related features |\n| Optimizations | 1-2 related optimizations |\n| UI changes | 1-2 related components |\n\n**Rationale**: 语构 platform works best with focused, incremental changes. Complex multi-part requests may result in incomplete implementation or unexpected behavior.\n\n## Iterative Development Pattern\n\nFor complex requirements, break them into multiple chat messages:\n\n```bash\n# Round 1: Build basic structure\nchat -c $CID -m \"Build a todo app with add and list features\" --watch\n\n# Round 2: Add one feature\nchat -c $CID -m \"Add delete functionality to todo items\" --watch\n\n# Round 3: Add another feature\nchat -c $CID -m \"Add edit functionality and local storage\" --watch\n\n# Round 4: Polish\nchat -c $CID -m \"Improve the UI styling and add animations\" --watch\n```\n\n---\n\n# How to Describe Application Requirements\n\n## ✅ Do: Keep It Simple\n\nDescribe **what the application should do** in one or two sentences:\n\n```\n\"Build a todo app where users can add tasks, mark them complete, and delete them\"\n\"Create a dashboard to display sales data with charts and filters\"\n```\n\n## ❌ Don't: Over-Specify\n\nAvoid:\n- Technology stack (e.g., \"use React\", \"use FastAPI\")\n- Performance requirements (e.g., \"handle 1000 concurrent users\")\n- Architecture constraints (e.g., \"use microservices\")\n- Detailed feature lists\n\n**For iterative modifications, keep requests brief — only describe the change needed, not the full application again.**\n\n**For bug fixes or optimizations, limit to 1-2 related changes per request.** See [Application Development Description Guidelines](#application-development-description-guidelines) for details.\n\nThe platform handles technical decisions automatically.\n\n---\n\n# Model Selection\n\nThe `chat` command accepts an optional `--model-choice` parameter that selects which model the **Task agent** uses for this message. The Pilot agent always uses the platform default and is **not** affected by this flag.\n\n## Accepted values\n\n| Value | Meaning |\n|-------|---------|\n| *(omitted)* or `auto` | Smart routing — platform picks the best model |\n| `economy` | Preset: cheaper / faster models |\n| `advance` | Preset: balanced cost vs. capability |\n| `expert` | Preset: highest-capability models |\n| `<model-id>` | A concrete model id from `python scripts/yugoo_cli.py models` (e.g. `claude-sonnet-4-6`) |\n\nFormat constraint: `^[A-Za-z0-9._\\-]+$`, max length 80.\n\n## Typical usage\n\n```bash\n# Discover available choices\npython scripts/yugoo_cli.py models\n\n# Pick a preset\npython scripts/yugoo_cli.py chat -c $CID -m \"Build a SaaS landing page\" --model-choice expert --watch\n\n# Pin a concrete model id\npython scripts/yugoo_cli.py chat -c $CID -m \"Add e2e tests\" --model-choice claude-sonnet-4-6 --watch\n```\n\n## When to set it explicitly\n\n- The user asks for a specific model (\"use Sonnet\", \"switch to the cheaper model\").\n- You're running a high-stakes / complex change and want the `expert` preset.\n- You're doing many trivial iterations and want the `economy` preset to save credits.\n\nFor most cases, leave it unset (smart routing).\n\n---\n\n# Stateless Execution Model\n\nThe CLI script is **stateless**. It does not store workflow state between calls.\n\nApplication workflow state is maintained by the 语构 platform and must be tracked via:\n\n* `conversation_id` — the unique session identifier\n* `message_id` — identifies a specific message/generation run\n\nAgents must pass the appropriate identifiers when continuing conversations or checking results.\n\n---\n\n# Application Lifecycle\n\n语构 applications follow a standard lifecycle:\n\n## 1. Initial Creation\n\nFor a new application:\n\n1. Start with a `chat` request describing the product\n2. The platform generates the application automatically\n3. Application is available in the development environment\n\n## 2. Multi-Round Modification\n\nAfter an application has been created:\n\n* Continue using `chat` with the same `conversation_id`\n* Chat messages modify the existing application\n* No additional generation step required\n\n## 3. Publishing\n\nPublishing deploys the application to production:\n\n* Use `publish` command to trigger deployment\n* Use `publish --wait` to auto-poll until deployment completes\n* After successful publish, the app is live at the preview URL\n\n---\n\n# Application URLs\n\n语构 provides URLs during the lifecycle:\n\n## Development/Preview URL\n\nAfter the application is created, access it at:\n\n```\nhttps://preview-{conversation_id}.creo4u.com/\n```\n\nThis URL is for:\n* viewing the application\n* testing features\n* development iteration\n\n## Production URL\n\nAfter publishing succeeds, the application is accessible at:\n\n```\nhttps://preview-{conversation_id}.creo4u.com/\n```\n\nThis is the **public production URL** of the deployed application.\n\nShare this URL only after publishing completes successfully.\n\n---\n\n# Standard Workflow\n\n## Create New Application\n\n```\ncreate → chat --watch → publish --wait → urls\n```\n\n## Iterate on Existing Application\n\n```\nchat --watch → result → chat --watch → result → ...\n```\n\n## Publish Application\n\n```\npublish --wait → urls\n```\n\n## Copy Own Application\n\n```\ncopy → chat --watch → result → publish --wait\n```\n\n## Clone from App Market\n\n```\nmarket-list → clone-market → chat --watch → result → publish --wait\n```\n\n## Version Management\n\n```\nversions → restore-version → chat --watch → finalize-version\n```\n\n## Build with Attachments\n\n```\nupload --file → chat --attachment OSS_PATH --watch → publish --wait → urls\n```\n\n## Build from Local File\n\n```\nchat --file /path/to/requirements.txt --watch → result → publish --wait → urls\n```\n\n---\n\n# Complete Workflow Example\n\n```bash\n# Step 1: Create a conversation\nCONV=$(python scripts/yugoo_cli.py create --name \"Todo App\")\nCID=$(echo $CONV | python -c \"import sys,json; print(json.load(sys.stdin)['conversation_id'])\")\n\n# Step 2: Send development instructions and watch progress\n# The poll_completed snapshot contains cost/time in assistant messages\npython scripts/yugoo_cli.py chat \\\n  -c $CID \\\n  -m \"Build a todo app with add, complete, and delete features\" \\\n  --watch\n\n# Step 3: Publish the application (auto-wait for completion)\npython scripts/yugoo_cli.py publish -c $CID --wait\n\n# Step 4: Get the production URL\npython scripts/yugoo_cli.py urls -c $CID\n```\n\n---\n\n# Available Commands\n\n**Note**: All commands automatically use the `CREO4U_SKILL_API_KEY` environment variable for authentication.\n\n## create\n\nCreate a new conversation.\n\n```bash\npython scripts/yugoo_cli.py create [--name NAME]\n```\n\n| Parameter | Default | Description |\n|-----------|---------|-------------|\n| `--name` | `New Conversation` | Conversation name |\n\n**Output**: JSON with `conversation_id`, `name`, `status`, `created_at`.\n\n---\n\n## upload\n\nUpload a local file as a chat attachment. The file is uploaded to OSS and the returned `oss_path` can be passed to `chat --attachment`.\n\n```bash\npython scripts/yugoo_cli.py upload --file /path/to/file\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `--file` | Yes | Local file path to upload (max 50MB) |\n\n**Output**: JSON with `oss_path`, `filename`, `file_md5`, `size_bytes`.\n\n```json\n{\"oss_path\": \"chat/attachments/123/abc123def456/document.pdf\", \"filename\": \"document.pdf\", \"file_md5\": \"abc123def456...\", \"size_bytes\": 1048576}\n```\n\n**Example — Upload then chat with attachment:**\n```bash\n# Step 1: Upload the file\nUPLOAD=$(python scripts/yugoo_cli.py upload --file design.png)\nOSS_PATH=$(echo $UPLOAD | python -c \"import sys,json; print(json.load(sys.stdin)['oss_path'])\")\n\n# Step 2: Send message with attachment\npython scripts/yugoo_cli.py chat -c $CID -m \"参考这个设计图来实现页面\" --attachment \"$OSS_PATH\" --watch\n```\n\n---\n\n## chat\n\nSend a message and optionally watch for completion via polling. This is the primary workflow command.\n\n```bash\npython scripts/yugoo_cli.py chat -c CID -m \"message\" [--watch] [--attachment OSS_PATH]\npython scripts/yugoo_cli.py chat -c CID -f /path/to/file [--watch]\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | No | Conversation ID (omit to auto-create) |\n| `-m`, `--content` | No* | Message content (use `-` to read from stdin) |\n| `-f`, `--file` | No* | Read message content from a local file path |\n| `-w`, `--watch` | No | Poll for completion after sending message (15s interval) |\n| `--agent-name` | No | Specific agent to handle the message |\n| `--context` | No | JSON string for additional context |\n| `--attachment` | No | OSS path of uploaded attachment (repeatable for multiple files) |\n| `--model-choice` | No | Model selection for the Task agent. Accepts a preset (`auto` \\| `economy` \\| `advance` \\| `expert`) or a concrete model id from the `models` command. Omit (or pass `auto`) to use smart routing. Only affects the Task agent; the Pilot agent always uses the platform default. |\n\n*Either `--content` or `--file` is required. `--file` takes priority if both are provided.\n\n**Output without `--watch`**: Single JSON line with `message_id`, `conversation_id`.\n\n**Output with `--watch`**: Polling mode with completion status\n```json\n{\"event\": \"message_accepted\", \"message_id\": \"...\", \"conversation_id\": \"...\"}\n{\"event\": \"poll\", \"iteration\": 1, \"state\": \"pending\"}\n{\"event\": \"poll\", \"iteration\": 2, \"state\": \"running\"}\n{\"event\": \"poll_completed\", \"iteration\": 3, \"state\": \"completed\", \"snapshot\": {...}}\n```\n\n**Important**:\n- Use `--watch` for most cases — it sends the message AND polls for completion in one command.\n- Use `--file` to send a local file's content as the message — useful for long requirement documents or pre-written prompts.\n- Use `--content -` to read long prompts from stdin.\n- Use `upload` command first to get `oss_path`, then pass it via `--attachment`.\n- Use `--model-choice` to override the default model routing (see [Model Selection](#model-selection)).\n\n**Example — pick a model preset:**\n\n```bash\n# Use the high-capability \"expert\" preset for the Task agent\npython scripts/yugoo_cli.py chat -c $CID -m \"Refactor the auth flow\" --model-choice expert --watch\n\n# Use a concrete model id (look it up via the `models` command first)\npython scripts/yugoo_cli.py chat -c $CID -m \"Add tests\" --model-choice claude-sonnet-4-6 --watch\n```\n\n---\n\n## models\n\nList available model presets and concrete model ids for use with `chat --model-choice`. This is a public endpoint and does not consume credit.\n\n```bash\npython scripts/yugoo_cli.py models\n```\n\n**Output**:\n```json\n{\n  \"presets\": [\n    {\"id\": \"auto\", \"display_name\": \"Auto\", \"description\": \"Smart routing\", \"is_default\": true, \"first_model\": \"...\", \"fallback_chain\": [\"...\"]},\n    {\"id\": \"economy\", \"display_name\": \"Economy\", \"description\": \"Cheaper, faster models\", \"first_model\": \"...\", \"fallback_chain\": [\"...\"]},\n    {\"id\": \"advance\", \"display_name\": \"Advance\", \"description\": \"Balanced\", \"first_model\": \"...\", \"fallback_chain\": [\"...\"]},\n    {\"id\": \"expert\", \"display_name\": \"Expert\", \"description\": \"Highest capability\", \"first_model\": \"...\", \"fallback_chain\": [\"...\"]}\n  ],\n  \"models\": [\n    {\"id\": \"claude-sonnet-4-6\", \"display_name\": \"Claude Sonnet 4.6\", \"series\": \"claude\", \"price_tier\": \"advance\", \"is_latest\": true, \"enabled\": true, \"context_window\": 200000}\n  ],\n  \"default_choice\": \"auto\"\n}\n```\n\n**When to use**:\n- Before the first chat in a session, if you want a non-default model.\n- When the user explicitly asks \"which models can I use?\" / \"switch to a cheaper model\" / etc.\n- Pass either a preset `id` (e.g. `expert`) or a concrete model `id` (e.g. `claude-sonnet-4-6`) to `chat --model-choice`.\n\n---\n\n## publish\n\nTrigger deployment to production.\n\n```bash\npython scripts/yugoo_cli.py publish -c CID [--wait]\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID to publish |\n| `-w`, `--wait` | No | Auto-poll publish status until published or failed |\n\n**Examples:**\n\n**1. Publish and manually check status:**\n\n```bash\npython scripts/yugoo_cli.py publish -c $CID\n```\n\n**2. Publish and auto-wait for completion (recommended):**\n\n```bash\npython scripts/yugoo_cli.py publish -c $CID --wait\n```\n\n**Important:**\n- Application must be created before publishing\n- After successful publish, the app is live at the preview URL\n- Use `--wait` flag to avoid manual polling\n\n---\n\n## publish-status\n\nCheck the status of a deployment.\n\n```bash\npython scripts/yugoo_cli.py publish-status -c CID\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID |\n\n**Output**: JSON with `status`: `created`, `publishing`, `published`, or `failed`\n\n**Usage Pattern:**\n\n```bash\n# Publish and auto-wait for completion (recommended)\npython scripts/yugoo_cli.py publish -c $CID --wait\n\n# Or check status manually\npython scripts/yugoo_cli.py publish-status -c $CID\n```\n\n**Tip:** Use `publish --wait` to avoid manual polling.\n\n---\n\n## messages\n\nGet the full conversation snapshot (all messages and state).\n\n```bash\npython scripts/yugoo_cli.py messages -c CID\n```\n\n**Output**: Complete snapshot JSON with all runs, messages, panels, and metadata.\n\n---\n\n## result\n\nExtract structured development results from the conversation snapshot. This is the recommended way to get results after a `chat --watch` completes.\n\n```bash\npython scripts/yugoo_cli.py result -c CID [--message-id MID]\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID |\n| `--message-id` | No | Specific message run (default: latest) |\n\n**Output**:\n```json\n{\n  \"conversation_id\": \"...\",\n  \"message_id\": \"...\",\n  \"status\": \"completed\",\n  \"summary\": \"Built a full-stack todo application...\",\n  \"files_generated\": [\"src/App.tsx\", \"backend/main.py\"],\n  \"files_modified\": [\"package.json\"],\n  \"assistant_messages\": [\"...\"],\n  \"tasks\": [\n    {\"task_id\": \"...\", \"title\": \"Generate frontend code\", \"status\": \"completed\", \"type\": \"streaming_multi_file\"}\n  ],\n  \"error\": null,\n  \"token_usage\": {\"prompt_tokens\": 1234, \"completion_tokens\": 5678, \"total_tokens\": 6912},\n  \"credit_usage\": 100,\n  \"started_at\": 1705771805000,\n  \"completed_at\": 1705771900000\n}\n```\n\n---\n\n## stop\n\nStop message generation in progress.\n\n```bash\npython scripts/yugoo_cli.py stop -c CID --message-id MID\n```\n\n---\n\n## start-runtime\n\nStart or restart the conversation runtime (container environment).\n\n```bash\npython scripts/yugoo_cli.py start-runtime -c CID\n```\n\nUse this after a container has been reclaimed due to inactivity.\n\n---\n\n## list\n\nList conversations with pagination and filtering.\n\n```bash\npython scripts/yugoo_cli.py list [--limit N] [--offset N] [--keyword KW] [--sort-by FIELD] [--sort-order asc|desc]\n```\n\n---\n\n## get\n\nGet conversation details.\n\n```bash\npython scripts/yugoo_cli.py get -c CID\n```\n\n---\n\n## delete\n\nTerminate a conversation.\n\n```bash\npython scripts/yugoo_cli.py delete -c CID\n```\n\n---\n\n## health\n\nCheck sandbox services health (frontend, backend, sandbox interface).\n\n```bash\npython scripts/yugoo_cli.py health -c CID\n```\n\n**Output**:\n```json\n{\n  \"frontend\": {\"ready\": true, \"status_code\": 200, \"message\": \"Frontend service is ready\"},\n  \"backend\": {\"ready\": true, \"status_code\": 200, \"message\": \"Backend service is ready\"},\n  \"sandbox\": {\"ready\": true, \"status_code\": 200, \"message\": \"Sandbox service is ready\"},\n  \"all_ready\": true\n}\n```\n\n---\n\n## urls\n\nGet sandbox, preview, and backend URLs for the development environment.\n\n```bash\npython scripts/yugoo_cli.py urls -c CID\n```\n\n**Output**:\n```json\n{\"sandbox_url\": \"https://sandbox-xxx.domain.com\", \"preview_url\": \"https://preview-xxx.domain.com\", \"backend_url\": \"https://backend-xxx.domain.com\"}\n```\n\n---\n\n## download\n\nDownload workspace as a zip file.\n\n```bash\npython scripts/yugoo_cli.py download -c CID\n```\n\n**Output**: JSON with `download_url`, `filename`, `size_mb`, `md5`.\n\n---\n\n## versions\n\nList all saved versions for a conversation.\n\n```bash\npython scripts/yugoo_cli.py versions -c CID [--sort-order asc|desc]\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID |\n| `--sort-order` | No | Sort direction: `asc` (oldest first) or `desc` (newest first, default) |\n\n**Output**: JSON with `conversation_id`, `current_version`, `versions` array (each with `version`, `timestamp`, `is_wip`, `is_published`, `description`, `from_version`), and `total` count.\n\n**Example**:\n```bash\npython scripts/yugoo_cli.py versions -c $CID\n# Output: {\"conversation_id\": \"...\", \"current_version\": 3, \"versions\": [...], \"total\": 3}\n```\n\n---\n\n## current-version\n\nGet the current active version number and its metadata.\n\n```bash\npython scripts/yugoo_cli.py current-version -c CID\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID |\n\n**Output**: JSON with `conversation_id`, `current_version`, `is_wip`, `from_version`, `description`.\n\n---\n\n## restore-version\n\nSwitch workspace to a specific version. This changes the active codebase and restarts the sandbox.\n\n```bash\npython scripts/yugoo_cli.py restore-version -c CID --version N\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID |\n| `--version` | Yes | Version number to switch to |\n\n**Output**: JSON with `success`, `version`, `mode` (`tag` or `wip`), `message`.\n\n**Important**:\n- Switching versions restarts the sandbox runtime automatically.\n- Cannot switch versions while another operation is in progress (returns 409).\n- After switching, use `chat` to continue development from that version.\n\n---\n\n## copy\n\nCreate a deep copy of an existing conversation (own application).\n\n```bash\npython scripts/yugoo_cli.py copy -c CID [--new-name NAME] [--wait]\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Source conversation ID |\n| `--new-name` | No | Name for the copy (default: \"{original name}（副本）\") |\n| `-w`, `--wait` | No | Auto-poll copy status until workspace is ready (5s interval, max 10 minutes) |\n\n**Output**: JSON with `conversation_id`, `name`, `status`, `created_at` of the new conversation.\n\n**Important**:\n- Creates a completely independent copy with new conversation ID\n- Workspace files are copied in the background (1-30 seconds)\n- The new conversation is immediately usable for chat commands\n- Use `--wait` to block until workspace files are fully copied\n\n**Example**:\n```bash\n# Copy an existing app (without waiting)\nNEW=$(python scripts/yugoo_cli.py copy -c $CID --new-name \"My App V2\")\nNEW_CID=$(echo $NEW | python -c \"import sys,json; print(json.load(sys.stdin)['conversation_id'])\")\n\n# Copy and wait for workspace to be ready\nNEW=$(python scripts/yugoo_cli.py copy -c $CID --new-name \"My App V2\" --wait)\nNEW_CID=$(echo $NEW | python -c \"import sys,json; print(json.load(sys.stdin)['conversation_id'])\")\n\n# Iterate on the copy\npython scripts/yugoo_cli.py chat -c $NEW_CID -m \"Add dark mode support\" --watch\n```\n\n---\n\n## market-list\n\nBrowse and search the app market.\n\n```bash\npython scripts/yugoo_cli.py market-list [--limit N] [--offset N] [--keyword KW] [--category-id ID] [--sort-by FIELD]\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `--limit` | No | Max results (default: 20) |\n| `--offset` | No | Pagination offset (default: 0) |\n| `--keyword` | No | Search keyword |\n| `--category-id` | No | Filter by category ID |\n| `--sort-by` | No | Sort field (e.g. `view_count`, `clone_count`, `created_at`) |\n\n**Output**: JSON with `items` array containing market item details (item_id, title, description, clone_count, view_count, etc.) and pagination info.\n\n**Example**:\n```bash\n# Search for todo apps\npython scripts/yugoo_cli.py market-list --keyword \"todo\"\n\n# Browse most popular apps\npython scripts/yugoo_cli.py market-list --sort-by view_count --limit 10\n```\n\n---\n\n## clone-market\n\nClone an app from the app market into your conversation list.\n\n```bash\npython scripts/yugoo_cli.py clone-market --item-id ITEM_ID\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `--item-id` | Yes | Market item ID to clone |\n\n**Output**: JSON with `conversation_id`, `cloned_code`, `cloned_prd`, `cloned_history`, `message_count`.\n\n**Important**:\n- The cloned app is created as a new conversation you own\n- What gets cloned depends on the original app's clone permission settings:\n  - CODE: workspace source files\n  - PRD: design documents\n  - HISTORY: conversation messages\n- Workspace files are copied in the background\n\n**Example - Clone from Market and Iterate**:\n```bash\n# Step 1: Browse market\npython scripts/yugoo_cli.py market-list --keyword \"dashboard\"\n\n# Step 2: Clone the app (use item_id from market-list result)\nCLONE=$(python scripts/yugoo_cli.py clone-market --item-id $ITEM_ID)\nCID=$(echo $CLONE | python -c \"import sys,json; print(json.load(sys.stdin)['conversation_id'])\")\n\n# Step 3: Customize the cloned app\npython scripts/yugoo_cli.py chat -c $CID -m \"Change the color scheme to dark blue\" --watch\n\n# Step 4: Publish your customized version\npython scripts/yugoo_cli.py publish -c $CID --wait\n```\n\n---\n\n## delete-version\n\nDelete a WIP (work-in-progress) version and revert to the previous version.\n\n```bash\npython scripts/yugoo_cli.py delete-version -c CID --version N\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID |\n| `--version` | Yes | Version number to delete |\n\n**Output**: JSON with `success`, `version`, `reverted_to_version`, `message`.\n\n**Important**:\n- Only WIP versions can be deleted. Finalized versions cannot be deleted.\n- The workspace automatically reverts to the previous version after deletion.\n- Cannot delete a version while another operation is in progress (returns 409).\n\n---\n\n## finalize-version\n\nFinalize (lock) the current WIP version, making it a permanent checkpoint.\n\n```bash\npython scripts/yugoo_cli.py finalize-version -c CID\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID |\n\n**Output**: JSON with `success`, `version`, `from_version`, `message`.\n\n**Important**:\n- Only works when the workspace is on a WIP branch.\n- After finalization, the version becomes a permanent tag that cannot be deleted.\n- Use this to create stable checkpoints before making major changes.\n\n---\n\n## update-version-desc\n\nUpdate the description of a specific version.\n\n```bash\npython scripts/yugoo_cli.py update-version-desc -c CID --version N --description \"description text\"\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID |\n| `--version` | Yes | Version number |\n| `--description` | Yes | New description text |\n\n**Output**: JSON with `success`, `version`, `description`, `message`.\n\n---\n\n## rename\n\nRename a conversation.\n\n```bash\npython scripts/yugoo_cli.py rename -c CID --name \"New Name\"\n```\n\n---\n\n## spending\n\nGet message-level spending (cost and time) for a conversation. Supports filtering by `message_id` to query a single message's cost and duration.\n\n```bash\npython scripts/yugoo_cli.py spending -c CID [--message-id MID] [--limit N] [--offset N]\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID |\n| `--message-id` | No | Filter by specific message ID |\n| `--limit` | No | Max results (default: 50) |\n| `--offset` | No | Pagination offset (default: 0) |\n\n**Output**:\n```json\n{\n  \"session_id\": \"202501201430-a1b2c3d4\",\n  \"app_name\": \"My Web App\",\n  \"total_cost\": \"1500\",\n  \"total\": 1,\n  \"items\": [\n    {\n      \"message_id\": \"msg-001\",\n      \"message_preview\": \"Build a login page...\",\n      \"total_cost\": \"300\",\n      \"record_count\": 3,\n      \"first_billing_at\": \"2025-01-20T14:30:00\",\n      \"last_billing_at\": \"2025-01-20T14:35:00\",\n      \"started_at\": \"2025-01-20T14:30:00\",\n      \"finished_at\": \"2025-01-20T14:35:00\",\n      \"duration_seconds\": 300.0\n    }\n  ],\n  \"limit\": 20,\n  \"offset\": 0\n}\n```\n\n**Fields**:\n- `total_cost`: Total credits consumed for the entire conversation (integer string)\n- `items[].total_cost`: Credits consumed per message/development round\n- `items[].started_at` / `finished_at`: Start and end timestamps of the development round\n- `items[].duration_seconds`: Duration of the development round in seconds\n- `items[].first_billing_at` / `last_billing_at`: Time range of billing for each round\n\n---\n\n# Output Conventions\n\n- **stdout**: JSON lines (one JSON object per line). Machine-readable.\n- **stderr**: Error messages and metadata.\n- **Exit code 0**: Success.\n- **Exit code 1**: Error (details on stderr as JSON).\n\nEvery stdout line is a complete, self-contained JSON object. This enables piping to `jq` for filtering and line-by-line processing by AI agents.\n\n---\n\n# Polling Mode\n\nThe `chat` and `publish` commands with `--watch` use polling to monitor progress:\n\n- **Interval**: Fixed 15 seconds between polls\n- **Single request timeout**: 10 minutes (40 iterations per request)\n- **Maximum total timeout**: 1 hour (up to 6 retries)\n\nPolling stops automatically when the run reaches `completed` or `failed` state.\n\n**Recommendation**: Use `--wait` flag for publish command to auto-poll status.\n\n## poll\n\nResume polling for a message that is still in progress (after a `poll_timeout`).\n\n```bash\npython scripts/yugoo_cli.py poll -c CID --message-id MID\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID |\n| `--message-id` | Yes | Message ID to poll |\n\n**Output**: Same as `chat --watch` — emits `poll` events and ends with `poll_completed` or `poll_timeout`.\n\n## CRITICAL: Polling Completion Rules\n\n**You MUST follow these rules strictly when using `chat --watch`:**\n\n1. **Single request timeout is 10 minutes**: Each `chat --watch` or `poll` command polls for up to **10 minutes**. If the development is not done, the CLI emits a `poll_timeout` event and exits. This is normal — development can take longer than 10 minutes.\n\n2. **On `poll_timeout`, you MUST retry using the `poll` command**: When you receive a `poll_timeout` event, immediately run the `poll` command with the same `conversation_id` and `message_id` to resume monitoring. **Do NOT** treat `poll_timeout` as a failure or stop.\n\n3. **Maximum 6 retries (1 hour total)**: You may retry the `poll` command up to **6 times** (including the initial `chat --watch`). This ensures a maximum total timeout of 1 hour (6 × 10 min). If all 6 attempts time out, then treat it as a genuine timeout and report to the user.\n\n   **Retry flow:**\n   ```\n   chat --watch (attempt 1, up to 10 min)\n     → poll_timeout? → poll (attempt 2, up to 10 min)\n       → poll_timeout? → poll (attempt 3, up to 10 min)\n         → poll_timeout? → poll (attempt 4, up to 10 min)\n           → poll_timeout? → poll (attempt 5, up to 10 min)\n             → poll_timeout? → poll (attempt 6, up to 10 min)\n               → poll_timeout? → report timeout to user\n   ```\n\n   **Example:**\n   ```bash\n   # Initial request\n   python scripts/yugoo_cli.py chat -c $CID -m \"Build a complex app\" --watch\n   # If poll_timeout, resume with poll:\n   python scripts/yugoo_cli.py poll -c $CID --message-id $MID\n   # Repeat poll up to 5 more times if needed\n   ```\n\n4. **Wait for ALL tasks to complete**: The polling only ends with `poll_completed` when **every task and phase** in the development pipeline has finished (status = `completed` or `failed`). Do NOT consider the operation done just because an assistant message appeared or a partial result was returned.\n\n5. **Do NOT stop polling on intermediate messages**: During development, the platform may return intermediate status messages such as:\n   - \"服务正在启动中，预计还需要几分钟时间。前端服务启动后即可访问！\"\n   - \"正在生成代码...\"\n   - \"正在部署...\"\n   - Any message indicating services are still starting or building\n\n   These are **progress updates, NOT completion signals**. You MUST continue waiting for the `poll_completed` event. **Never** interpret these messages as the final result.\n\n6. **Only `poll_completed` means truly done**:\n   - `poll_completed` → Development finished. Proceed to `result` and `spending`.\n   - `poll_timeout` → Not finished yet. Retry with `poll` command (up to 6 total attempts).\n\n---\n\n# Error Handling\n\nAll HTTP errors produce JSON on stderr:\n\n```json\n{\"error\": {\"error\": \"CONVERSATION_NOT_FOUND\", \"message\": \"Conversation not found\"}, \"status_code\": 404}\n```\n\nCommon error codes:\n\n| Status | Error | Meaning |\n|--------|-------|---------|\n| 402 | `INSUFFICIENT_CREDIT` | User has insufficient credit |\n| 404 | `CONVERSATION_NOT_FOUND` | Conversation does not exist |\n| 409 | `CONVERSATION_IN_PROGRESS` | Another message is being processed |\n| 409 | `WIP_VERSION_CONFLICT` | Version conflict during message send |\n| 409 | `PUBLISH_IN_PROGRESS` | Another publish is being processed |\n| 501 | `NOT_IMPLEMENTED` | Feature not available in current mode |\n\nIf the conversation is locked (409), wait a few seconds and retry.\n\n---\n\n# Application Copy & Clone Workflow\n\n## Copy Your Own Application\n\nUse `copy` to create an independent copy of your existing application, then iterate on it:\n\n```bash\n# Copy the app\nNEW=$(python scripts/yugoo_cli.py copy -c $CID --new-name \"Todo App V2\")\nNEW_CID=$(echo $NEW | python -c \"import sys,json; print(json.load(sys.stdin)['conversation_id'])\")\n\n# Develop on the copy\npython scripts/yugoo_cli.py chat -c $NEW_CID -m \"Add user authentication\" --watch\n\n# Publish the new version\npython scripts/yugoo_cli.py publish -c $NEW_CID --wait\n```\n\n## Clone from App Market\n\nUse `market-list` to find apps, then `clone-market` to clone into your workspace:\n\n```bash\n# Browse the market\npython scripts/yugoo_cli.py market-list --keyword \"ecommerce\" --limit 5\n\n# Clone an app (use item_id from market-list output)\nCLONE=$(python scripts/yugoo_cli.py clone-market --item-id $ITEM_ID)\nCID=$(echo $CLONE | python -c \"import sys,json; print(json.load(sys.stdin)['conversation_id'])\")\n\n# Customize the cloned app\npython scripts/yugoo_cli.py chat -c $CID -m \"Replace product catalog with my inventory\" --watch\n\n# Get results and publish\npython scripts/yugoo_cli.py result -c $CID\npython scripts/yugoo_cli.py publish -c $CID --wait\npython scripts/yugoo_cli.py urls -c $CID\n```\n\n---\n\n# Version Management Workflow\n\nVersions allow you to create checkpoints, switch between states, and safely experiment.\n\n## View and Switch Versions\n\n```bash\n# List all versions\npython scripts/yugoo_cli.py versions -c $CID\n\n# Check current version\npython scripts/yugoo_cli.py current-version -c $CID\n\n# Switch to an earlier version\npython scripts/yugoo_cli.py restore-version -c $CID --version 2\n```\n\n## Create a Checkpoint (Finalize)\n\nAfter development, finalize the current WIP version to create a permanent checkpoint:\n\n```bash\n# Develop features\npython scripts/yugoo_cli.py chat -c $CID -m \"Add payment integration\" --watch\n\n# Lock the version as a stable checkpoint\npython scripts/yugoo_cli.py finalize-version -c $CID\n\n# Add a description to the version\npython scripts/yugoo_cli.py update-version-desc -c $CID --version 3 --description \"Added payment integration with Stripe\"\n```\n\n## Undo Changes (Delete WIP Version)\n\nIf a development round didn't go well, delete the WIP version to revert:\n\n```bash\n# Check current version (e.g., version 4, WIP)\npython scripts/yugoo_cli.py current-version -c $CID\n\n# Delete the WIP version and revert to previous\npython scripts/yugoo_cli.py delete-version -c $CID --version 4\n\n# Now back at version 3 — try again\npython scripts/yugoo_cli.py chat -c $CID -m \"Add payment integration using a different approach\" --watch\n```\n\n---\n\n# Error Handling Guidance\n\nAgents should handle the following situations:\n\n* publish requested before application has been created\n* missing `conversation_id`\n* interrupted polling loop\n* failed deployment status\n* incorrect or missing parameter values\n\nIf workflow state is unclear, inspect the conversation or use `result` command before taking the next action.\n\n**Pro Tips:**\n- Always check command `--help` when unsure about parameters\n- Use `--wait` flag with `publish` to simplify deployment\n- Save `conversation_id` from `create` response\n- After creation, use `chat` directly for modifications\n\n---\n\n# Application Sharing Rule (IMPORTANT)\n\n- You must share your application **only using the production preview URL** (after it has been published).\n\nProduction preview URL format:\n\n```\nhttps://preview-{conversation_id}.creo4u.com/\n```\n\n- If the application has **not been published**, you must publish it before sharing with others.\n\nExample publish command:\n\n```bash\npython scripts/yugoo_cli.py publish -c $CID --wait\n```\n\n---\n\n# Tips\n\n- Use `--watch` with `chat` for the common case — it sends the message and polls for completion.\n- Use `--wait` with `publish` to auto-poll deployment status.\n- Use `result` after completion to get a clean summary without parsing poll events.\n- Use `--file` with `chat` to send a local file's content as the message, useful for long requirement documents or pre-written prompts.\n- The `--content -` flag reads message content from stdin, useful for long prompts.\n- `conversation_id` is abbreviated as `-c` in all commands for convenience.\n- Always check `result` output for `status: \"failed\"` and `error` field to detect failures.\n- Use `health` to verify the sandbox is ready before sending development instructions.\n- Use `start-runtime` to restart a container that was reclaimed due to inactivity.\n\n---\n\n# Development Completion Best Practice\n\n**After an application is built, do NOT manually inspect the generated code files.**\n\nAfter `chat --watch` (or `poll`) completes with `poll_completed`:\n\n1. Query **Development Cost** and **Development Time** using the `spending` command with `--message-id`:\n\n```bash\npython scripts/yugoo_cli.py spending -c \"$CID\" --message-id \"$MID\"\n```\n\nExtract from the response:\n- **Development Cost**: `items[0].total_cost` (Credits)\n- **Development Time**: `items[0].duration_seconds` (seconds)\n\n2. Publish and get URLs:\n\n```bash\npython scripts/yugoo_cli.py publish -c \"$CID\" --wait\npython scripts/yugoo_cli.py urls -c \"$CID\"\n```\n\nThen respond with the following **fixed format** (do NOT change field names or order):\n\n```\n**Application Summary**: [one-line description of what was built and key features]\n\n**Preview URL**: https://preview-{conversation_id}.creo4u.com/\n\n**Publish URL**: [url field from publish command output]\n\n**Publish Status**: [published / failed]\n\n**Development Cost**: [N] Credits\n\n**Development Time**: [N]s\n```\n\n**IMPORTANT**: Always publish after development completes. Never skip any field. Always include both Preview URL and Publish URL.\n\nFile v1.0.4:_meta.json\n\n{\n  \"ownerId\": \"kn799px9ed26zactxmbpt194nd850mcc\",\n  \"slug\": \"yugoo-app-builder\",\n  \"version\": \"1.0.4\",\n  \"publishedAt\": 1779345515173\n}\n\nFile v1.0.4:skill-card.md\n\n## Description: <br>\nBuild full-stack web applications using 语构's chat-driven development platform, including conversation management, development instructions, build monitoring, result extraction, publishing, and version management. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[seedling-you](https://clawhub.ai/user/seedling-you) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and agents use this skill to create, iterate, publish, deploy, copy, clone, and manage full-stack web applications on the 语构 platform. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can create, modify, publish, upload to, clone, copy, and delete remote application state. <br>\nMitigation: Require explicit user approval before publishing, deleting conversations or versions, uploading local files, cloning or copying projects, or making broad remote changes. <br>\nRisk: The skill requires an API key for the Yugoo platform. <br>\nMitigation: Use a revocable, least-privilege key and avoid exposing it in prompts, logs, shared files, or command output. <br>\nRisk: The CLI supports an insecure TLS mode. <br>\nMitigation: Use --insecure only in controlled test environments and never when transmitting real API keys. <br>\n\n\n## Reference(s): <br>\n- [语构 homepage](https://creo4u.com) <br>\n- [ClawHub skill page](https://clawhub.ai/seedling-you/yugoo-app-builder) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown guidance with shell commands and JSON command output] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May produce remote application state, generated files, summaries, task status, URLs, and publish/version operation results through the Yugoo CLI.] <br>\n\n## Skill Version(s): <br>\n1.0.4 (source: server-resolved release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.0.3: 3 files, 21725 bytes\n\nFiles: scripts/yugoo_cli.py (43742b), SKILL.md (37205b), _meta.json (136b)\n\nFile v1.0.3:SKILL.md\n\n---\nname: yugoo-app-builder\ndescription: Build full-stack web applications using 语构's chat-driven development platform. Manages conversations, sends development instructions, monitors build progress, extracts results (generated files, summaries, task status), publishes applications, and manages versions.\nmetadata:\n  slug: yugoo-app-builder\n  display_name: 语构 App Builder\n  homepage: https://creo4u.com\n  env:\n    - name: CREO4U_SKILL_API_KEY\n      required: true\n      description: API key for authenticating with the 语构 (Yugoo) platform. Use a least-privilege or revocable key.\n  dependencies:\n    - requests\n---\n\n# Installation\n\n## Prerequisites\n\nBefore using this skill, ensure you have the `CREO4U_SKILL_API_KEY` environment variable set.\n\n### Setup API Key\n\n**Option 1: Provide API Key during installation**\n```bash\nexport CREO4U_SKILL_API_KEY=\"your_api_key_here\"\n```\n\n**Option 2: If not provided, the skill will prompt for it**\n- If `CREO4U_SKILL_API_KEY` is already set in your environment, the skill will use it directly\n- If not set, the skill will ask you to provide the API key\n\n### After Installation\n\nOnce installed, all CLI commands will automatically use the `CREO4U_SKILL_API_KEY` environment variable — no need to pass `--token` or any API key parameter.\n\n---\n\n# 语构 App Builder\n\n语构 is a **chat-driven full-stack application builder**. Users describe what they want in natural language and 语构 generates a **production-ready web application**, including frontend UI, backend services, database schema, and a live development environment.\n\nThis skill enables AI agents to interact with the **语构 platform** to create, iterate, publish, and deploy applications.\n\nAll platform operations must be executed through the CLI script:\n\n```bash\npython scripts/yugoo_cli.py [global options] <command> [command options]\n```\n\n**IMPORTANT: Argument Order** — Global options (`--token`, `--base-url`, `--insecure`, `--timeout`) must appear **BEFORE** the subcommand. Placing them after the subcommand will cause a parse error.\n\n```bash\n# ✅ Correct — global options before subcommand\npython scripts/yugoo_cli.py --token TOKEN create --name \"My App\"\n\n# ❌ Wrong — global options after subcommand\npython scripts/yugoo_cli.py create --token TOKEN --name \"My App\"\n```\n\n> **Note**: The `--insecure` flag disables TLS certificate verification. Only use it in controlled test environments — never for production or when transmitting real API keys.\n\nDo **not** call platform APIs directly. Always use the CLI commands provided by this skill.\n\n---\n\n# When to Use This Skill\n\nUse this skill whenever the user wants to:\n\n* create a **website** or **web application**\n* build a **dashboard** or **admin panel**\n* create a **SaaS product** or **internal tool**\n* build a **full-stack application** with frontend + backend\n* build a **landing page**\n* create a **browser game** or **mini game**\n* iterate on an existing **语构 project**\n* publish or deploy an **语构 application**\n* check sandbox health or preview URLs\n* manage application **versions**\n* **copy** an existing application (own or from market)\n* **clone** an app from the **app market**\n* **switch** between application versions\n* **delete** or **finalize** a version\n\nDo **not** use this skill for unrelated programming tasks.\n\n---\n\n# Routing Keywords\n\nTrigger this skill if the request includes concepts such as:\n\n* build a website\n* create a webpage\n* build a web app\n* create a SaaS\n* build a dashboard\n* create an admin panel\n* build an internal tool\n* create a landing page\n* build a browser game\n* create a mini game\n* generate a web product\n* make a snake game webpage\n* build a todo web app\n* create a blog site\n* publish this app\n* deploy this application\n* copy this app\n* clone an app from market\n* browse app market\n* switch to version\n* list versions\n* delete version\n* finalize version\n\n---\n\n# Example Requests\n\nExamples that should route to this skill:\n\n* \"Create a todo list web app\"\n* \"Build a personal blog website\"\n* \"Make a dashboard for sales analytics\"\n* \"Create a SaaS landing page\"\n* \"Build an admin panel\"\n* \"Write a snake game webpage\"\n* \"Create a browser game\"\n* \"Build a mini web game\"\n* \"Modify my 语构 project\"\n* \"Publish this 语构 app\"\n* \"Deploy my application\"\n\n---\n\n# Application Development Description Guidelines\n\n## ✅ DO: Simple, Focused Requests\n\n### For New Applications\nDescribe the **core functionality** in 1-2 sentences:\n\n```\n\"Build a todo app where users can add tasks, mark them complete, and delete them\"\n\"Create a dashboard to display sales data with charts and filters\"\n\"Build a landing page for a SaaS product with pricing section and contact form\"\n```\n\n### For Bug Fixes or Optimizations (1-2 changes per request)\n\n**✅ Correct - Single Focus:**\n```\n\"Fix the submit button not responding on the contact form\"\n\"Optimize the loading speed of the data table\"\n\"Add error handling for invalid email input\"\n\"Fix the date picker not showing correct format\"\n```\n\n**✅ Correct - Two Related Changes:**\n```\n\"Fix the login button styling and add a loading indicator\"\n\"Optimize the database query and add caching for faster response\"\n\"Fix the mobile layout and adjust the navigation menu\"\n```\n\n**❌ WRONG - Too Complex (DO NOT use):**\n```\n\"Fix the login button, optimize the database, add user authentication, redesign the homepage, and deploy to production\"\n```\n\n## ⚠️ IMPORTANT: Complexity Limits\n\nWhen sending messages to the `chat` API:\n\n| Request Type | Max Items |\n|--------------|-----------|\n| Bug fixes | 1-2 related bugs |\n| Feature additions | 1-2 related features |\n| Optimizations | 1-2 related optimizations |\n| UI changes | 1-2 related components |\n\n**Rationale**: 语构 platform works best with focused, incremental changes. Complex multi-part requests may result in incomplete implementation or unexpected behavior.\n\n## Iterative Development Pattern\n\nFor complex requirements, break them into multiple chat messages:\n\n```bash\n# Round 1: Build basic structure\nchat -c $CID -m \"Build a todo app with add and list features\" --watch\n\n# Round 2: Add one feature\nchat -c $CID -m \"Add delete functionality to todo items\" --watch\n\n# Round 3: Add another feature\nchat -c $CID -m \"Add edit functionality and local storage\" --watch\n\n# Round 4: Polish\nchat -c $CID -m \"Improve the UI styling and add animations\" --watch\n```\n\n---\n\n# How to Describe Application Requirements\n\n## ✅ Do: Keep It Simple\n\nDescribe **what the application should do** in one or two sentences:\n\n```\n\"Build a todo app where users can add tasks, mark them complete, and delete them\"\n\"Create a dashboard to display sales data with charts and filters\"\n```\n\n## ❌ Don't: Over-Specify\n\nAvoid:\n- Technology stack (e.g., \"use React\", \"use FastAPI\")\n- Performance requirements (e.g., \"handle 1000 concurrent users\")\n- Architecture constraints (e.g., \"use microservices\")\n- Detailed feature lists\n\n**For iterative modifications, keep requests brief — only describe the change needed, not the full application again.**\n\n**For bug fixes or optimizations, limit to 1-2 related changes per request.** See [Application Development Description Guidelines](#application-development-description-guidelines) for details.\n\nThe platform handles technical decisions automatically.\n\n---\n\n# Stateless Execution Model\n\nThe CLI script is **stateless**. It does not store workflow state between calls.\n\nApplication workflow state is maintained by the 语构 platform and must be tracked via:\n\n* `conversation_id` — the unique session identifier\n* `message_id` — identifies a specific message/generation run\n\nAgents must pass the appropriate identifiers when continuing conversations or checking results.\n\n---\n\n# Application Lifecycle\n\n语构 applications follow a standard lifecycle:\n\n## 1. Initial Creation\n\nFor a new application:\n\n1. Start with a `chat` request describing the product\n2. The platform generates the application automatically\n3. Application is available in the development environment\n\n## 2. Multi-Round Modification\n\nAfter an application has been created:\n\n* Continue using `chat` with the same `conversation_id`\n* Chat messages modify the existing application\n* No additional generation step required\n\n## 3. Publishing\n\nPublishing deploys the application to production:\n\n* Use `publish` command to trigger deployment\n* Use `publish --wait` to auto-poll until deployment completes\n* After successful publish, the app is live at the preview URL\n\n---\n\n# Application URLs\n\n语构 provides URLs during the lifecycle:\n\n## Development/Preview URL\n\nAfter the application is created, access it at:\n\n```\nhttps://preview-{conversation_id}.creo4u.com/\n```\n\nThis URL is for:\n* viewing the application\n* testing features\n* development iteration\n\n## Production URL\n\nAfter publishing succeeds, the application is accessible at:\n\n```\nhttps://preview-{conversation_id}.creo4u.com/\n```\n\nThis is the **public production URL** of the deployed application.\n\nShare this URL only after publishing completes successfully.\n\n---\n\n# Standard Workflow\n\n## Create New Application\n\n```\ncreate → chat --watch → publish --wait → urls\n```\n\n## Iterate on Existing Application\n\n```\nchat --watch → result → chat --watch → result → ...\n```\n\n## Publish Application\n\n```\npublish --wait → urls\n```\n\n## Copy Own Application\n\n```\ncopy → chat --watch → result → publish --wait\n```\n\n## Clone from App Market\n\n```\nmarket-list → clone-market → chat --watch → result → publish --wait\n```\n\n## Version Management\n\n```\nversions → restore-version → chat --watch → finalize-version\n```\n\n## Build with Attachments\n\n```\nupload --file → chat --attachment OSS_PATH --watch → publish --wait → urls\n```\n\n## Build from Local File\n\n```\nchat --file /path/to/requirements.txt --watch → result → publish --wait → urls\n```\n\n---\n\n# Complete Workflow Example\n\n```bash\n# Step 1: Create a conversation\nCONV=$(python scripts/yugoo_cli.py create --name \"Todo App\")\nCID=$(echo $CONV | python -c \"import sys,json; print(json.load(sys.stdin)['conversation_id'])\")\n\n# Step 2: Send development instructions and watch progress\n# The poll_completed snapshot contains cost/time in assistant messages\npython scripts/yugoo_cli.py chat \\\n  -c $CID \\\n  -m \"Build a todo app with add, complete, and delete features\" \\\n  --watch\n\n# Step 3: Publish the application (auto-wait for completion)\npython scripts/yugoo_cli.py publish -c $CID --wait\n\n# Step 4: Get the production URL\npython scripts/yugoo_cli.py urls -c $CID\n```\n\n---\n\n# Available Commands\n\n**Note**: All commands automatically use the `CREO4U_SKILL_API_KEY` environment variable for authentication.\n\n## create\n\nCreate a new conversation.\n\n```bash\npython scripts/yugoo_cli.py create [--name NAME]\n```\n\n| Parameter | Default | Description |\n|-----------|---------|-------------|\n| `--name` | `New Conversation` | Conversation name |\n\n**Output**: JSON with `conversation_id`, `name`, `status`, `created_at`.\n\n---\n\n## upload\n\nUpload a local file as a chat attachment. The file is uploaded to OSS and the returned `oss_path` can be passed to `chat --attachment`.\n\n```bash\npython scripts/yugoo_cli.py upload --file /path/to/file\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `--file` | Yes | Local file path to upload (max 50MB) |\n\n**Output**: JSON with `oss_path`, `filename`, `file_md5`, `size_bytes`.\n\n```json\n{\"oss_path\": \"chat/attachments/123/abc123def456/document.pdf\", \"filename\": \"document.pdf\", \"file_md5\": \"abc123def456...\", \"size_bytes\": 1048576}\n```\n\n**Example — Upload then chat with attachment:**\n```bash\n# Step 1: Upload the file\nUPLOAD=$(python scripts/yugoo_cli.py upload --file design.png)\nOSS_PATH=$(echo $UPLOAD | python -c \"import sys,json; print(json.load(sys.stdin)['oss_path'])\")\n\n# Step 2: Send message with attachment\npython scripts/yugoo_cli.py chat -c $CID -m \"参考这个设计图来实现页面\" --attachment \"$OSS_PATH\" --watch\n```\n\n---\n\n## chat\n\nSend a message and optionally watch for completion via polling. This is the primary workflow command.\n\n```bash\npython scripts/yugoo_cli.py chat -c CID -m \"message\" [--watch] [--attachment OSS_PATH]\npython scripts/yugoo_cli.py chat -c CID -f /path/to/file [--watch]\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | No | Conversation ID (omit to auto-create) |\n| `-m`, `--content` | No* | Message content (use `-` to read from stdin) |\n| `-f`, `--file` | No* | Read message content from a local file path |\n| `-w`, `--watch` | No | Poll for completion after sending message (15s interval) |\n| `--agent-name` | No | Specific agent to handle the message |\n| `--context` | No | JSON string for additional context |\n| `--attachment` | No | OSS path of uploaded attachment (repeatable for multiple files) |\n\n*Either `--content` or `--file` is required. `--file` takes priority if both are provided.\n\n**Output without `--watch`**: Single JSON line with `message_id`, `conversation_id`.\n\n**Output with `--watch`**: Polling mode with completion status\n```json\n{\"event\": \"message_accepted\", \"message_id\": \"...\", \"conversation_id\": \"...\"}\n{\"event\": \"poll\", \"iteration\": 1, \"state\": \"pending\"}\n{\"event\": \"poll\", \"iteration\": 2, \"state\": \"running\"}\n{\"event\": \"poll_completed\", \"iteration\": 3, \"state\": \"completed\", \"snapshot\": {...}}\n```\n\n**Important**:\n- Use `--watch` for most cases — it sends the message AND polls for completion in one command.\n- Use `--file` to send a local file's content as the message — useful for long requirement documents or pre-written prompts.\n- Use `--content -` to read long prompts from stdin.\n- Use `upload` command first to get `oss_path`, then pass it via `--attachment`.\n\n---\n\n## publish\n\nTrigger deployment to production.\n\n```bash\npython scripts/yugoo_cli.py publish -c CID [--wait]\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID to publish |\n| `-w`, `--wait` | No | Auto-poll publish status until published or failed |\n\n**Examples:**\n\n**1. Publish and manually check status:**\n\n```bash\npython scripts/yugoo_cli.py publish -c $CID\n```\n\n**2. Publish and auto-wait for completion (recommended):**\n\n```bash\npython scripts/yugoo_cli.py publish -c $CID --wait\n```\n\n**Important:**\n- Application must be created before publishing\n- After successful publish, the app is live at the preview URL\n- Use `--wait` flag to avoid manual polling\n\n---\n\n## publish-status\n\nCheck the status of a deployment.\n\n```bash\npython scripts/yugoo_cli.py publish-status -c CID\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID |\n\n**Output**: JSON with `status`: `created`, `publishing`, `published`, or `failed`\n\n**Usage Pattern:**\n\n```bash\n# Publish and auto-wait for completion (recommended)\npython scripts/yugoo_cli.py publish -c $CID --wait\n\n# Or check status manually\npython scripts/yugoo_cli.py publish-status -c $CID\n```\n\n**Tip:** Use `publish --wait` to avoid manual polling.\n\n---\n\n## messages\n\nGet the full conversation snapshot (all messages and state).\n\n```bash\npython scripts/yugoo_cli.py messages -c CID\n```\n\n**Output**: Complete snapshot JSON with all runs, messages, panels, and metadata.\n\n---\n\n## result\n\nExtract structured development results from the conversation snapshot. This is the recommended way to get results after a `chat --watch` completes.\n\n```bash\npython scripts/yugoo_cli.py result -c CID [--message-id MID]\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID |\n| `--message-id` | No | Specific message run (default: latest) |\n\n**Output**:\n```json\n{\n  \"conversation_id\": \"...\",\n  \"message_id\": \"...\",\n  \"status\": \"completed\",\n  \"summary\": \"Built a full-stack todo application...\",\n  \"files_generated\": [\"src/App.tsx\", \"backend/main.py\"],\n  \"files_modified\": [\"package.json\"],\n  \"assistant_messages\": [\"...\"],\n  \"tasks\": [\n    {\"task_id\": \"...\", \"title\": \"Generate frontend code\", \"status\": \"completed\", \"type\": \"streaming_multi_file\"}\n  ],\n  \"error\": null,\n  \"token_usage\": {\"prompt_tokens\": 1234, \"completion_tokens\": 5678, \"total_tokens\": 6912},\n  \"credit_usage\": 100,\n  \"started_at\": 1705771805000,\n  \"completed_at\": 1705771900000\n}\n```\n\n---\n\n## stop\n\nStop message generation in progress.\n\n```bash\npython scripts/yugoo_cli.py stop -c CID --message-id MID\n```\n\n---\n\n## start-runtime\n\nStart or restart the conversation runtime (container environment).\n\n```bash\npython scripts/yugoo_cli.py start-runtime -c CID\n```\n\nUse this after a container has been reclaimed due to inactivity.\n\n---\n\n## list\n\nList conversations with pagination and filtering.\n\n```bash\npython scripts/yugoo_cli.py list [--limit N] [--offset N] [--keyword KW] [--sort-by FIELD] [--sort-order asc|desc]\n```\n\n---\n\n## get\n\nGet conversation details.\n\n```bash\npython scripts/yugoo_cli.py get -c CID\n```\n\n---\n\n## delete\n\nTerminate a conversation.\n\n```bash\npython scripts/yugoo_cli.py delete -c CID\n```\n\n---\n\n## health\n\nCheck sandbox services health (frontend, backend, sandbox interface).\n\n```bash\npython scripts/yugoo_cli.py health -c CID\n```\n\n**Output**:\n```json\n{\n  \"frontend\": {\"ready\": true, \"status_code\": 200, \"message\": \"Frontend service is ready\"},\n  \"backend\": {\"ready\": true, \"status_code\": 200, \"message\": \"Backend service is ready\"},\n  \"sandbox\": {\"ready\": true, \"status_code\": 200, \"message\": \"Sandbox service is ready\"},\n  \"all_ready\": true\n}\n```\n\n---\n\n## urls\n\nGet sandbox, preview, and backend URLs for the development environment.\n\n```bash\npython scripts/yugoo_cli.py urls -c CID\n```\n\n**Output**:\n```json\n{\"sandbox_url\": \"https://sandbox-xxx.domain.com\", \"preview_url\": \"https://preview-xxx.domain.com\", \"backend_url\": \"https://backend-xxx.domain.com\"}\n```\n\n---\n\n## download\n\nDownload workspace as a zip file.\n\n```bash\npython scripts/yugoo_cli.py download -c CID\n```\n\n**Output**: JSON with `download_url`, `filename`, `size_mb`, `md5`.\n\n---\n\n## versions\n\nList all saved versions for a conversation.\n\n```bash\npython scripts/yugoo_cli.py versions -c CID [--sort-order asc|desc]\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID |\n| `--sort-order` | No | Sort direction: `asc` (oldest first) or `desc` (newest first, default) |\n\n**Output**: JSON with `conversation_id`, `current_version`, `versions` array (each with `version`, `timestamp`, `is_wip`, `is_published`, `description`, `from_version`), and `total` count.\n\n**Example**:\n```bash\npython scripts/yugoo_cli.py versions -c $CID\n# Output: {\"conversation_id\": \"...\", \"current_version\": 3, \"versions\": [...], \"total\": 3}\n```\n\n---\n\n## current-version\n\nGet the current active version number and its metadata.\n\n```bash\npython scripts/yugoo_cli.py current-version -c CID\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID |\n\n**Output**: JSON with `conversation_id`, `current_version`, `is_wip`, `from_version`, `description`.\n\n---\n\n## restore-version\n\nSwitch workspace to a specific version. This changes the active codebase and restarts the sandbox.\n\n```bash\npython scripts/yugoo_cli.py restore-version -c CID --version N\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID |\n| `--version` | Yes | Version number to switch to |\n\n**Output**: JSON with `success`, `version`, `mode` (`tag` or `wip`), `message`.\n\n**Important**:\n- Switching versions restarts the sandbox runtime automatically.\n- Cannot switch versions while another operation is in progress (returns 409).\n- After switching, use `chat` to continue development from that version.\n\n---\n\n## copy\n\nCreate a deep copy of an existing conversation (own application).\n\n```bash\npython scripts/yugoo_cli.py copy -c CID [--new-name NAME] [--wait]\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Source conversation ID |\n| `--new-name` | No | Name for the copy (default: \"{original name}（副本）\") |\n| `-w`, `--wait` | No | Auto-poll copy status until workspace is ready (5s interval, max 10 minutes) |\n\n**Output**: JSON with `conversation_id`, `name`, `status`, `created_at` of the new conversation.\n\n**Important**:\n- Creates a completely independent copy with new conversation ID\n- Workspace files are copied in the background (1-30 seconds)\n- The new conversation is immediately usable for chat commands\n- Use `--wait` to block until workspace files are fully copied\n\n**Example**:\n```bash\n# Copy an existing app (without waiting)\nNEW=$(python scripts/yugoo_cli.py copy -c $CID --new-name \"My App V2\")\nNEW_CID=$(echo $NEW | python -c \"import sys,json; print(json.load(sys.stdin)['conversation_id'])\")\n\n# Copy and wait for workspace to be ready\nNEW=$(python scripts/yugoo_cli.py copy -c $CID --new-name \"My App V2\" --wait)\nNEW_CID=$(echo $NEW | python -c \"import sys,json; print(json.load(sys.stdin)['conversation_id'])\")\n\n# Iterate on the copy\npython scripts/yugoo_cli.py chat -c $NEW_CID -m \"Add dark mode support\" --watch\n```\n\n---\n\n## market-list\n\nBrowse and search the app market.\n\n```bash\npython scripts/yugoo_cli.py market-list [--limit N] [--offset N] [--keyword KW] [--category-id ID] [--sort-by FIELD]\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `--limit` | No | Max results (default: 20) |\n| `--offset` | No | Pagination offset (default: 0) |\n| `--keyword` | No | Search keyword |\n| `--category-id` | No | Filter by category ID |\n| `--sort-by` | No | Sort field (e.g. `view_count`, `clone_count`, `created_at`) |\n\n**Output**: JSON with `items` array containing market item details (item_id, title, description, clone_count, view_count, etc.) and pagination info.\n\n**Example**:\n```bash\n# Search for todo apps\npython scripts/yugoo_cli.py market-list --keyword \"todo\"\n\n# Browse most popular apps\npython scripts/yugoo_cli.py market-list --sort-by view_count --limit 10\n```\n\n---\n\n## clone-market\n\nClone an app from the app market into your conversation list.\n\n```bash\npython scripts/yugoo_cli.py clone-market --item-id ITEM_ID\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `--item-id` | Yes | Market item ID to clone |\n\n**Output**: JSON with `conversation_id`, `cloned_code`, `cloned_prd`, `cloned_history`, `message_count`.\n\n**Important**:\n- The cloned app is created as a new conversation you own\n- What gets cloned depends on the original app's clone permission settings:\n  - CODE: workspace source files\n  - PRD: design documents\n  - HISTORY: conversation messages\n- Workspace files are copied in the background\n\n**Example - Clone from Market and Iterate**:\n```bash\n# Step 1: Browse market\npython scripts/yugoo_cli.py market-list --keyword \"dashboard\"\n\n# Step 2: Clone the app (use item_id from market-list result)\nCLONE=$(python scripts/yugoo_cli.py clone-market --item-id $ITEM_ID)\nCID=$(echo $CLONE | python -c \"import sys,json; print(json.load(sys.stdin)['conversation_id'])\")\n\n# Step 3: Customize the cloned app\npython scripts/yugoo_cli.py chat -c $CID -m \"Change the color scheme to dark blue\" --watch\n\n# Step 4: Publish your customized version\npython scripts/yugoo_cli.py publish -c $CID --wait\n```\n\n---\n\n## delete-version\n\nDelete a WIP (work-in-progress) version and revert to the previous version.\n\n```bash\npython scripts/yugoo_cli.py delete-version -c CID --version N\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID |\n| `--version` | Yes | Version number to delete |\n\n**Output**: JSON with `success`, `version`, `reverted_to_version`, `message`.\n\n**Important**:\n- Only WIP versions can be deleted. Finalized versions cannot be deleted.\n- The workspace automatically reverts to the previous version after deletion.\n- Cannot delete a version while another operation is in progress (returns 409).\n\n---\n\n## finalize-version\n\nFinalize (lock) the current WIP version, making it a permanent checkpoint.\n\n```bash\npython scripts/yugoo_cli.py finalize-version -c CID\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID |\n\n**Output**: JSON with `success`, `version`, `from_version`, `message`.\n\n**Important**:\n- Only works when the workspace is on a WIP branch.\n- After finalization, the version becomes a permanent tag that cannot be deleted.\n- Use this to create stable checkpoints before making major changes.\n\n---\n\n## update-version-desc\n\nUpdate the description of a specific version.\n\n```bash\npython scripts/yugoo_cli.py update-version-desc -c CID --version N --description \"description text\"\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID |\n| `--version` | Yes | Version number |\n| `--description` | Yes | New description text |\n\n**Output**: JSON with `success`, `version`, `description`, `message`.\n\n---\n\n## rename\n\nRename a conversation.\n\n```bash\npython scripts/yugoo_cli.py rename -c CID --name \"New Name\"\n```\n\n---\n\n## spending\n\nGet message-level spending (cost and time) for a conversation. Supports filtering by `message_id` to query a single message's cost and duration.\n\n```bash\npython scripts/yugoo_cli.py spending -c CID [--message-id MID] [--limit N] [--offset N]\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID |\n| `--message-id` | No | Filter by specific message ID |\n| `--limit` | No | Max results (default: 50) |\n| `--offset` | No | Pagination offset (default: 0) |\n\n**Output**:\n```json\n{\n  \"session_id\": \"202501201430-a1b2c3d4\",\n  \"app_name\": \"My Web App\",\n  \"total_cost\": \"1500\",\n  \"total\": 1,\n  \"items\": [\n    {\n      \"message_id\": \"msg-001\",\n      \"message_preview\": \"Build a login page...\",\n      \"total_cost\": \"300\",\n      \"record_count\": 3,\n      \"first_billing_at\": \"2025-01-20T14:30:00\",\n      \"last_billing_at\": \"2025-01-20T14:35:00\",\n      \"started_at\": \"2025-01-20T14:30:00\",\n      \"finished_at\": \"2025-01-20T14:35:00\",\n      \"duration_seconds\": 300.0\n    }\n  ],\n  \"limit\": 20,\n  \"offset\": 0\n}\n```\n\n**Fields**:\n- `total_cost`: Total credits consumed for the entire conversation (integer string)\n- `items[].total_cost`: Credits consumed per message/development round\n- `items[].started_at` / `finished_at`: Start and end timestamps of the development round\n- `items[].duration_seconds`: Duration of the development round in seconds\n- `items[].first_billing_at` / `last_billing_at`: Time range of billing for each round\n\n---\n\n# Output Conventions\n\n- **stdout**: JSON lines (one JSON object per line). Machine-readable.\n- **stderr**: Error messages and metadata.\n- **Exit code 0**: Success.\n- **Exit code 1**: Error (details on stderr as JSON).\n\nEvery stdout line is a complete, self-contained JSON object. This enables piping to `jq` for filtering and line-by-line processing by AI agents.\n\n---\n\n# Polling Mode\n\nThe `chat` and `publish` commands with `--watch` use polling to monitor progress:\n\n- **Interval**: Fixed 15 seconds between polls\n- **Single request timeout**: 10 minutes (40 iterations per request)\n- **Maximum total timeout**: 1 hour (up to 6 retries)\n\nPolling stops automatically when the run reaches `completed` or `failed` state.\n\n**Recommendation**: Use `--wait` flag for publish command to auto-poll status.\n\n## poll\n\nResume polling for a message that is still in progress (after a `poll_timeout`).\n\n```bash\npython scripts/yugoo_cli.py poll -c CID --message-id MID\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID |\n| `--message-id` | Yes | Message ID to poll |\n\n**Output**: Same as `chat --watch` — emits `poll` events and ends with `poll_completed` or `poll_timeout`.\n\n## CRITICAL: Polling Completion Rules\n\n**You MUST follow these rules strictly when using `chat --watch`:**\n\n1. **Single request timeout is 10 minutes**: Each `chat --watch` or `poll` command polls for up to **10 minutes**. If the development is not done, the CLI emits a `poll_timeout` event and exits. This is normal — development can take longer than 10 minutes.\n\n2. **On `poll_timeout`, you MUST retry using the `poll` command**: When you receive a `poll_timeout` event, immediately run the `poll` command with the same `conversation_id` and `message_id` to resume monitoring. **Do NOT** treat `poll_timeout` as a failure or stop.\n\n3. **Maximum 6 retries (1 hour total)**: You may retry the `poll` command up to **6 times** (including the initial `chat --watch`). This ensures a maximum total timeout of 1 hour (6 × 10 min). If all 6 attempts time out, then treat it as a genuine timeout and report to the user.\n\n   **Retry flow:**\n   ```\n   chat --watch (attempt 1, up to 10 min)\n     → poll_timeout? → poll (attempt 2, up to 10 min)\n       → poll_timeout? → poll (attempt 3, up to 10 min)\n         → poll_timeout? → poll (attempt 4, up to 10 min)\n           → poll_timeout? → poll (attempt 5, up to 10 min)\n             → poll_timeout? → poll (attempt 6, up to 10 min)\n               → poll_timeout? → report timeout to user\n   ```\n\n   **Example:**\n   ```bash\n   # Initial request\n   python scripts/yugoo_cli.py chat -c $CID -m \"Build a complex app\" --watch\n   # If poll_timeout, resume with poll:\n   python scripts/yugoo_cli.py poll -c $CID --message-id $MID\n   # Repeat poll up to 5 more times if needed\n   ```\n\n4. **Wait for ALL tasks to complete**: The polling only ends with `poll_completed` when **every task and phase** in the development pipeline has finished (status = `completed` or `failed`). Do NOT consider the operation done just because an assistant message appeared or a partial result was returned.\n\n5. **Do NOT stop polling on intermediate messages**: During development, the platform may return intermediate status messages such as:\n   - \"服务正在启动中，预计还需要几分钟时间。前端服务启动后即可访问！\"\n   - \"正在生成代码...\"\n   - \"正在部署...\"\n   - Any message indicating services are still starting or building\n\n   These are **progress updates, NOT completion signals**. You MUST continue waiting for the `poll_completed` event. **Never** interpret these messages as the final result.\n\n6. **Only `poll_completed` means truly done**:\n   - `poll_completed` → Development finished. Proceed to `result` and `spending`.\n   - `poll_timeout` → Not finished yet. Retry with `poll` command (up to 6 total attempts).\n\n---\n\n# Error Handling\n\nAll HTTP errors produce JSON on stderr:\n\n```json\n{\"error\": {\"error\": \"CONVERSATION_NOT_FOUND\", \"message\": \"Conversation not found\"}, \"status_code\": 404}\n```\n\nCommon error codes:\n\n| Status | Error | Meaning |\n|--------|-------|---------|\n| 402 | `INSUFFICIENT_CREDIT` | User has insufficient credit |\n| 404 | `CONVERSATION_NOT_FOUND` | Conversation does not exist |\n| 409 | `CONVERSATION_IN_PROGRESS` | Another message is being processed |\n| 409 | `WIP_VERSION_CONFLICT` | Version conflict during message send |\n| 409 | `PUBLISH_IN_PROGRESS` | Another publish is being processed |\n| 501 | `NOT_IMPLEMENTED` | Feature not available in current mode |\n\nIf the conversation is locked (409), wait a few seconds and retry.\n\n---\n\n# Application Copy & Clone Workflow\n\n## Copy Your Own Application\n\nUse `copy` to create an independent copy of your existing application, then iterate on it:\n\n```bash\n# Copy the app\nNEW=$(python scripts/yugoo_cli.py copy -c $CID --new-name \"Todo App V2\")\nNEW_CID=$(echo $NEW | python -c \"import sys,json; print(json.load(sys.stdin)['conversation_id'])\")\n\n# Develop on the copy\npython scripts/yugoo_cli.py chat -c $NEW_CID -m \"Add user authentication\" --watch\n\n# Publish the new version\npython scripts/yugoo_cli.py publish -c $NEW_CID --wait\n```\n\n## Clone from App Market\n\nUse `market-list` to find apps, then `clone-market` to clone into your workspace:\n\n```bash\n# Browse the market\npython scripts/yugoo_cli.py market-list --keyword \"ecommerce\" --limit 5\n\n# Clone an app (use item_id from market-list output)\nCLONE=$(python scripts/yugoo_cli.py clone-market --item-id $ITEM_ID)\nCID=$(echo $CLONE | python -c \"import sys,json; print(json.load(sys.stdin)['conversation_id'])\")\n\n# Customize the cloned app\npython scripts/yugoo_cli.py chat -c $CID -m \"Replace product catalog with my inventory\" --watch\n\n# Get results and publish\npython scripts/yugoo_cli.py result -c $CID\npython scripts/yugoo_cli.py publish -c $CID --wait\npython scripts/yugoo_cli.py urls -c $CID\n```\n\n---\n\n# Version Management Workflow\n\nVersions allow you to create checkpoints, switch between states, and safely experiment.\n\n## View and Switch Versions\n\n```bash\n# List all versions\npython scripts/yugoo_cli.py versions -c $CID\n\n# Check current version\npython scripts/yugoo_cli.py current-version -c $CID\n\n# Switch to an earlier version\npython scripts/yugoo_cli.py restore-version -c $CID --version 2\n```\n\n## Create a Checkpoint (Finalize)\n\nAfter development, finalize the current WIP version to create a permanent checkpoint:\n\n```bash\n# Develop features\npython scripts/yugoo_cli.py chat -c $CID -m \"Add payment integration\" --watch\n\n# Lock the version as a stable checkpoint\npython scripts/yugoo_cli.py finalize-version -c $CID\n\n# Add a description to the version\npython scripts/yugoo_cli.py update-version-desc -c $CID --version 3 --description \"Added payment integration with Stripe\"\n```\n\n## Undo Changes (Delete WIP Version)\n\nIf a development round didn't go well, delete the WIP version to revert:\n\n```bash\n# Check current version (e.g., version 4, WIP)\npython scripts/yugoo_cli.py current-version -c $CID\n\n# Delete the WIP version and revert to previous\npython scripts/yugoo_cli.py delete-version -c $CID --version 4\n\n# Now back at version 3 — try again\npython scripts/yugoo_cli.py chat -c $CID -m \"Add payment integration using a different approach\" --watch\n```\n\n---\n\n# Error Handling Guidance\n\nAgents should handle the following situations:\n\n* publish requested before application has been created\n* missing `conversation_id`\n* interrupted polling loop\n* failed deployment status\n* incorrect or missing parameter values\n\nIf workflow state is unclear, inspect the conversation or use `result` command before taking the next action.\n\n**Pro Tips:**\n- Always check command `--help` when unsure about parameters\n- Use `--wait` flag with `publish` to simplify deployment\n- Save `conversation_id` from `create` response\n- After creation, use `chat` directly for modifications\n\n---\n\n# Application Sharing Rule (IMPORTANT)\n\n- You must share your application **only using the production preview URL** (after it has been published).\n\nProduction preview URL format:\n\n```\nhttps://preview-{conversation_id}.creo4u.com/\n```\n\n- If the application has **not been published**, you must publish it before sharing with others.\n\nExample publish command:\n\n```bash\npython scripts/yugoo_cli.py publish -c $CID --wait\n```\n\n---\n\n# Tips\n\n- Use `--watch` with `chat` for the common case — it sends the message and polls for completion.\n- Use `--wait` with `publish` to auto-poll deployment status.\n- Use `result` after completion to get a clean summary without parsing poll events.\n- Use `--file` with `chat` to send a local file's content as the message, useful for long requirement documents or pre-written prompts.\n- The `--content -` flag reads message content from stdin, useful for long prompts.\n- `conversation_id` is abbreviated as `-c` in all commands for convenience.\n- Always check `result` output for `status: \"failed\"` and `error` field to detect failures.\n- Use `health` to verify the sandbox is ready before sending development instructions.\n- Use `start-runtime` to restart a container that was reclaimed due to inactivity.\n\n---\n\n# Development Completion Best Practice\n\n**After an application is built, do NOT manually inspect the generated code files.**\n\nAfter `chat --watch` (or `poll`) completes with `poll_completed`:\n\n1. Query **Development Cost** and **Development Time** using the `spending` command with `--message-id`:\n\n```bash\npython scripts/yugoo_cli.py spending -c \"$CID\" --message-id \"$MID\"\n```\n\nExtract from the response:\n- **Development Cost**: `items[0].total_cost` (Credits)\n- **Development Time**: `items[0].duration_seconds` (seconds)\n\n2. Publish and get URLs:\n\n```bash\npython scripts/yugoo_cli.py publish -c \"$CID\" --wait\npython scripts/yugoo_cli.py urls -c \"$CID\"\n```\n\nThen respond with the following **fixed format** (do NOT change field names or order):\n\n```\n**Application Summary**: [one-line description of what was built and key features]\n\n**Preview URL**: https://preview-{conversation_id}.creo4u.com/\n\n**Publish URL**: [url field from publish command output]\n\n**Publish Status**: [published / failed]\n\n**Development Cost**: [N] Credits\n\n**Development Time**: [N]s\n```\n\n**IMPORTANT**: Always publish after development completes. Never skip any field. Always include both Preview URL and Publish URL.\n\nFile v1.0.3:_meta.json\n\n{\n  \"ownerId\": \"kn799px9ed26zactxmbpt194nd850mcc\",\n  \"slug\": \"yugoo-app-builder\",\n  \"version\": \"1.0.3\",\n  \"publishedAt\": 1778120793886\n}\n\nArchive v1.0.2: 3 files, 21614 bytes\n\nFiles: scripts/yugoo_cli.py (43742b), SKILL.md (36965b), _meta.json (136b)\n\nFile v1.0.2:SKILL.md\n\n---\nname: yugoo-app-builder\ndescription: Build full-stack web applications using 语构's chat-driven development platform. Manages conversations, sends development instructions, monitors build progress, extracts results (generated files, summaries, task status), publishes applications, and manages versions.\nmetadata:\n  slug: yugoo-app-builder\n  display_name: 语构 App Builder\n  env:\n    - name: CREO4U_SKILL_API_KEY\n      required: true\n      description: API key for authenticating with the 语构 (Yugoo) platform\n  dependencies:\n    - requests\n---\n\n# Installation\n\n## Prerequisites\n\nBefore using this skill, ensure you have the `CREO4U_SKILL_API_KEY` environment variable set.\n\n### Setup API Key\n\n**Option 1: Provide API Key during installation**\n```bash\nexport CREO4U_SKILL_API_KEY=\"your_api_key_here\"\n```\n\n**Option 2: If not provided, the skill will prompt for it**\n- If `CREO4U_SKILL_API_KEY` is already set in your environment, the skill will use it directly\n- If not set, the skill will ask you to provide the API key\n\n### After Installation\n\nOnce installed, all CLI commands will automatically use the `CREO4U_SKILL_API_KEY` environment variable — no need to pass `--token` or any API key parameter.\n\n---\n\n# 语构 App Builder\n\n语构 is a **chat-driven full-stack application builder**. Users describe what they want in natural language and 语构 generates a **production-ready web application**, including frontend UI, backend services, database schema, and a live development environment.\n\nThis skill enables AI agents to interact with the **语构 platform** to create, iterate, publish, and deploy applications.\n\nAll platform operations must be executed through the CLI script:\n\n```bash\npython scripts/yugoo_cli.py [global options] <command> [command options]\n```\n\n**IMPORTANT: Argument Order** — Global options (`--token`, `--base-url`, `--insecure`, `--timeout`) must appear **BEFORE** the subcommand. Placing them after the subcommand will cause a parse error.\n\n```bash\n# ✅ Correct — global options before subcommand\npython scripts/yugoo_cli.py --token TOKEN --insecure create --name \"My App\"\n\n# ❌ Wrong — global options after subcommand\npython scripts/yugoo_cli.py create --token TOKEN --name \"My App\"\n```\n\nDo **not** call platform APIs directly. Always use the CLI commands provided by this skill.\n\n---\n\n# When to Use This Skill\n\nUse this skill whenever the user wants to:\n\n* create a **website** or **web application**\n* build a **dashboard** or **admin panel**\n* create a **SaaS product** or **internal tool**\n* build a **full-stack application** with frontend + backend\n* build a **landing page**\n* create a **browser game** or **mini game**\n* iterate on an existing **语构 project**\n* publish or deploy an **语构 application**\n* check sandbox health or preview URLs\n* manage application **versions**\n* **copy** an existing application (own or from market)\n* **clone** an app from the **app market**\n* **switch** between application versions\n* **delete** or **finalize** a version\n\nDo **not** use this skill for unrelated programming tasks.\n\n---\n\n# Routing Keywords\n\nTrigger this skill if the request includes concepts such as:\n\n* build a website\n* create a webpage\n* build a web app\n* create a SaaS\n* build a dashboard\n* create an admin panel\n* build an internal tool\n* create a landing page\n* build a browser game\n* create a mini game\n* generate a web product\n* make a snake game webpage\n* build a todo web app\n* create a blog site\n* publish this app\n* deploy this application\n* copy this app\n* clone an app from market\n* browse app market\n* switch to version\n* list versions\n* delete version\n* finalize version\n\n---\n\n# Example Requests\n\nExamples that should route to this skill:\n\n* \"Create a todo list web app\"\n* \"Build a personal blog website\"\n* \"Make a dashboard for sales analytics\"\n* \"Create a SaaS landing page\"\n* \"Build an admin panel\"\n* \"Write a snake game webpage\"\n* \"Create a browser game\"\n* \"Build a mini web game\"\n* \"Modify my 语构 project\"\n* \"Publish this 语构 app\"\n* \"Deploy my application\"\n\n---\n\n# Application Development Description Guidelines\n\n## ✅ DO: Simple, Focused Requests\n\n### For New Applications\nDescribe the **core functionality** in 1-2 sentences:\n\n```\n\"Build a todo app where users can add tasks, mark them complete, and delete them\"\n\"Create a dashboard to display sales data with charts and filters\"\n\"Build a landing page for a SaaS product with pricing section and contact form\"\n```\n\n### For Bug Fixes or Optimizations (1-2 changes per request)\n\n**✅ Correct - Single Focus:**\n```\n\"Fix the submit button not responding on the contact form\"\n\"Optimize the loading speed of the data table\"\n\"Add error handling for invalid email input\"\n\"Fix the date picker not showing correct format\"\n```\n\n**✅ Correct - Two Related Changes:**\n```\n\"Fix the login button styling and add a loading indicator\"\n\"Optimize the database query and add caching for faster response\"\n\"Fix the mobile layout and adjust the navigation menu\"\n```\n\n**❌ WRONG - Too Complex (DO NOT use):**\n```\n\"Fix the login button, optimize the database, add user authentication, redesign the homepage, and deploy to production\"\n```\n\n## ⚠️ IMPORTANT: Complexity Limits\n\nWhen sending messages to the `chat` API:\n\n| Request Type | Max Items |\n|--------------|-----------|\n| Bug fixes | 1-2 related bugs |\n| Feature additions | 1-2 related features |\n| Optimizations | 1-2 related optimizations |\n| UI changes | 1-2 related components |\n\n**Rationale**: 语构 platform works best with focused, incremental changes. Complex multi-part requests may result in incomplete implementation or unexpected behavior.\n\n## Iterative Development Pattern\n\nFor complex requirements, break them into multiple chat messages:\n\n```bash\n# Round 1: Build basic structure\nchat -c $CID -m \"Build a todo app with add and list features\" --watch\n\n# Round 2: Add one feature\nchat -c $CID -m \"Add delete functionality to todo items\" --watch\n\n# Round 3: Add another feature\nchat -c $CID -m \"Add edit functionality and local storage\" --watch\n\n# Round 4: Polish\nchat -c $CID -m \"Improve the UI styling and add animations\" --watch\n```\n\n---\n\n# How to Describe Application Requirements\n\n## ✅ Do: Keep It Simple\n\nDescribe **what the application should do** in one or two sentences:\n\n```\n\"Build a todo app where users can add tasks, mark them complete, and delete them\"\n\"Create a dashboard to display sales data with charts and filters\"\n```\n\n## ❌ Don't: Over-Specify\n\nAvoid:\n- Technology stack (e.g., \"use React\", \"use FastAPI\")\n- Performance requirements (e.g., \"handle 1000 concurrent users\")\n- Architecture constraints (e.g., \"use microservices\")\n- Detailed feature lists\n\n**For iterative modifications, keep requests brief — only describe the change needed, not the full application again.**\n\n**For bug fixes or optimizations, limit to 1-2 related changes per request.** See [Application Development Description Guidelines](#application-development-description-guidelines) for details.\n\nThe platform handles technical decisions automatically.\n\n---\n\n# Stateless Execution Model\n\nThe CLI script is **stateless**. It does not store workflow state between calls.\n\nApplication workflow state is maintained by the 语构 platform and must be tracked via:\n\n* `conversation_id` — the unique session identifier\n* `message_id` — identifies a specific message/generation run\n\nAgents must pass the appropriate identifiers when continuing conversations or checking results.\n\n---\n\n# Application Lifecycle\n\n语构 applications follow a standard lifecycle:\n\n## 1. Initial Creation\n\nFor a new application:\n\n1. Start with a `chat` request describing the product\n2. The platform generates the application automatically\n3. Application is available in the development environment\n\n## 2. Multi-Round Modification\n\nAfter an application has been created:\n\n* Continue using `chat` with the same `conversation_id`\n* Chat messages modify the existing application\n* No additional generation step required\n\n## 3. Publishing\n\nPublishing deploys the application to production:\n\n* Use `publish` command to trigger deployment\n* Use `publish --wait` to auto-poll until deployment completes\n* After successful publish, the app is live at the preview URL\n\n---\n\n# Application URLs\n\n语构 provides URLs during the lifecycle:\n\n## Development/Preview URL\n\nAfter the application is created, access it at:\n\n```\nhttps://preview-{conversation_id}.creo4u.com/\n```\n\nThis URL is for:\n* viewing the application\n* testing features\n* development iteration\n\n## Production URL\n\nAfter publishing succeeds, the application is accessible at:\n\n```\nhttps://preview-{conversation_id}.creo4u.com/\n```\n\nThis is the **public production URL** of the deployed application.\n\nShare this URL only after publishing completes successfully.\n\n---\n\n# Standard Workflow\n\n## Create New Application\n\n```\ncreate → chat --watch → publish --wait → urls\n```\n\n## Iterate on Existing Application\n\n```\nchat --watch → result → chat --watch → result → ...\n```\n\n## Publish Application\n\n```\npublish --wait → urls\n```\n\n## Copy Own Application\n\n```\ncopy → chat --watch → result → publish --wait\n```\n\n## Clone from App Market\n\n```\nmarket-list → clone-market → chat --watch → result → publish --wait\n```\n\n## Version Management\n\n```\nversions → restore-version → chat --watch → finalize-version\n```\n\n## Build with Attachments\n\n```\nupload --file → chat --attachment OSS_PATH --watch → publish --wait → urls\n```\n\n## Build from Local File\n\n```\nchat --file /path/to/requirements.txt --watch → result → publish --wait → urls\n```\n\n---\n\n# Complete Workflow Example\n\n```bash\n# Step 1: Create a conversation\nCONV=$(python scripts/yugoo_cli.py create --name \"Todo App\")\nCID=$(echo $CONV | python -c \"import sys,json; print(json.load(sys.stdin)['conversation_id'])\")\n\n# Step 2: Send development instructions and watch progress\n# The poll_completed snapshot contains cost/time in assistant messages\npython scripts/yugoo_cli.py chat \\\n  -c $CID \\\n  -m \"Build a todo app with add, complete, and delete features\" \\\n  --watch\n\n# Step 3: Publish the application (auto-wait for completion)\npython scripts/yugoo_cli.py publish -c $CID --wait\n\n# Step 4: Get the production URL\npython scripts/yugoo_cli.py urls -c $CID\n```\n\n---\n\n# Available Commands\n\n**Note**: All commands automatically use the `CREO4U_SKILL_API_KEY` environment variable for authentication.\n\n## create\n\nCreate a new conversation.\n\n```bash\npython scripts/yugoo_cli.py create [--name NAME]\n```\n\n| Parameter | Default | Description |\n|-----------|---------|-------------|\n| `--name` | `New Conversation` | Conversation name |\n\n**Output**: JSON with `conversation_id`, `name`, `status`, `created_at`.\n\n---\n\n## upload\n\nUpload a local file as a chat attachment. The file is uploaded to OSS and the returned `oss_path` can be passed to `chat --attachment`.\n\n```bash\npython scripts/yugoo_cli.py upload --file /path/to/file\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `--file` | Yes | Local file path to upload (max 50MB) |\n\n**Output**: JSON with `oss_path`, `filename`, `file_md5`, `size_bytes`.\n\n```json\n{\"oss_path\": \"chat/attachments/123/abc123def456/document.pdf\", \"filename\": \"document.pdf\", \"file_md5\": \"abc123def456...\", \"size_bytes\": 1048576}\n```\n\n**Example — Upload then chat with attachment:**\n```bash\n# Step 1: Upload the file\nUPLOAD=$(python scripts/yugoo_cli.py upload --file design.png)\nOSS_PATH=$(echo $UPLOAD | python -c \"import sys,json; print(json.load(sys.stdin)['oss_path'])\")\n\n# Step 2: Send message with attachment\npython scripts/yugoo_cli.py chat -c $CID -m \"参考这个设计图来实现页面\" --attachment \"$OSS_PATH\" --watch\n```\n\n---\n\n## chat\n\nSend a message and optionally watch for completion via polling. This is the primary workflow command.\n\n```bash\npython scripts/yugoo_cli.py chat -c CID -m \"message\" [--watch] [--attachment OSS_PATH]\npython scripts/yugoo_cli.py chat -c CID -f /path/to/file [--watch]\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | No | Conversation ID (omit to auto-create) |\n| `-m`, `--content` | No* | Message content (use `-` to read from stdin) |\n| `-f`, `--file` | No* | Read message content from a local file path |\n| `-w`, `--watch` | No | Poll for completion after sending message (15s interval) |\n| `--agent-name` | No | Specific agent to handle the message |\n| `--context` | No | JSON string for additional context |\n| `--attachment` | No | OSS path of uploaded attachment (repeatable for multiple files) |\n\n*Either `--content` or `--file` is required. `--file` takes priority if both are provided.\n\n**Output without `--watch`**: Single JSON line with `message_id`, `conversation_id`.\n\n**Output with `--watch`**: Polling mode with completion status\n```json\n{\"event\": \"message_accepted\", \"message_id\": \"...\", \"conversation_id\": \"...\"}\n{\"event\": \"poll\", \"iteration\": 1, \"state\": \"pending\"}\n{\"event\": \"poll\", \"iteration\": 2, \"state\": \"running\"}\n{\"event\": \"poll_completed\", \"iteration\": 3, \"state\": \"completed\", \"snapshot\": {...}}\n```\n\n**Important**:\n- Use `--watch` for most cases — it sends the message AND polls for completion in one command.\n- Use `--file` to send a local file's content as the message — useful for long requirement documents or pre-written prompts.\n- Use `--content -` to read long prompts from stdin.\n- Use `upload` command first to get `oss_path`, then pass it via `--attachment`.\n\n---\n\n## publish\n\nTrigger deployment to production.\n\n```bash\npython scripts/yugoo_cli.py publish -c CID [--wait]\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID to publish |\n| `-w`, `--wait` | No | Auto-poll publish status until published or failed |\n\n**Examples:**\n\n**1. Publish and manually check status:**\n\n```bash\npython scripts/yugoo_cli.py publish -c $CID\n```\n\n**2. Publish and auto-wait for completion (recommended):**\n\n```bash\npython scripts/yugoo_cli.py publish -c $CID --wait\n```\n\n**Important:**\n- Application must be created before publishing\n- After successful publish, the app is live at the preview URL\n- Use `--wait` flag to avoid manual polling\n\n---\n\n## publish-status\n\nCheck the status of a deployment.\n\n```bash\npython scripts/yugoo_cli.py publish-status -c CID\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID |\n\n**Output**: JSON with `status`: `created`, `publishing`, `published`, or `failed`\n\n**Usage Pattern:**\n\n```bash\n# Publish and auto-wait for completion (recommended)\npython scripts/yugoo_cli.py publish -c $CID --wait\n\n# Or check status manually\npython scripts/yugoo_cli.py publish-status -c $CID\n```\n\n**Tip:** Use `publish --wait` to avoid manual polling.\n\n---\n\n## messages\n\nGet the full conversation snapshot (all messages and state).\n\n```bash\npython scripts/yugoo_cli.py messages -c CID\n```\n\n**Output**: Complete snapshot JSON with all runs, messages, panels, and metadata.\n\n---\n\n## result\n\nExtract structured development results from the conversation snapshot. This is the recommended way to get results after a `chat --watch` completes.\n\n```bash\npython scripts/yugoo_cli.py result -c CID [--message-id MID]\n```\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `-c`, `--conversation-id` | Yes | Conversation ID |\n| `--message-id` | No | Specific message run (default: latest) |\n\n**Output**:\n```json\n{\n  \"conversation_id\": \"...\",\n  \"message_id\": \"...\",\n  \"status\": \"completed\",\n  \"summary\": \"Built a full-stack todo application...\",\n  \"files_generated\": [\"src/App.tsx\", \"backend/main.py\"],\n  \"files_modified\": [\"package.json\"],\n  \"assistant_messages\": [\"...\"],\n  \"tasks\": [\n    {\"task_id\": \"...\", \"title\": \"Generate frontend code\", \"status\": \"completed\", \"type\": \"streaming_multi_file\"}\n  ],\n  \"error\": null,\n  \"token_usage\": {\"prompt_tokens\": 1234, \"completion_tokens\": 5678, \"total_tokens\": 6912},\n  \"credit_usage\": 100,\n  \"started_at\": 1705771805000,\n  \"completed_at\": 1705771900000\n}\n```\n\n---\n\n## stop\n\nStop message generation in progress.\n\n```bash\npython scripts/yugoo_cli.py stop -c CID --message-id MID\n```\n\n---\n\n## start-runtime\n\nStart or restart the conversation runtime (container environment).\n\n```bash\npython scripts/yugoo_cli.py start-runtime -c CID\n```\n\nUse this after a container has been reclaimed due to inactivity.\n\n---\n\n## list\n\nList conversations with pagination and filtering.\n\n```bash\npython scripts/yugoo_cli.py list [--limit N] [--offset N] [--keyword KW] [--sort-by FIELD] [--sort-order asc|desc]\n```\n\nArchive v1.0.1: 3 files, 21590 bytes\n\nFiles: scripts/yugoo_cli.py (43378b), SKILL.md (36965b), _meta.json (136b)\n\nArchive v1.0.0: 3 files, 21524 bytes\n\nFiles: scripts/yugoo_cli.py (43378b), SKILL.md (36723b), _meta.json (136b)","readmeExcerpt":"Skill: 语构 App Builder Owner: yugoo Summary: Build full-stack web applications using 语构's chat-driven development platform. Manages conversations, sends development instructions, monitors build progress... Tags: latest:1.0.5 Version history: v1.0.5 | 2026-06-11T03:19:03.570Z | user - Removed the sample file skill-card.md from the project. - No user-facing feature or functional changes in this version. v1.0.4 | 2026-05","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"export CREO4U_SKILL_API_KEY=\"your_api_key_here\""},{"language":"bash","snippet":"python scripts/yugoo_cli.py [global options] <command> [command options]"},{"language":"bash","snippet":"# ✅ Correct — global options before subcommand\npython scripts/yugoo_cli.py --token TOKEN create --name \"My App\"\n\n# ❌ Wrong — global options after subcommand\npython scripts/yugoo_cli.py create --token TOKEN --name \"My App\""},{"language":"text","snippet":"\"Build a todo app where users can add tasks, mark them complete, and delete them\"\n\"Create a dashboard to display sales data with charts and filters\"\n\"Build a landing page for a SaaS product with pricing section and contact form\""},{"language":"text","snippet":"\"Fix the submit button not responding on the contact form\"\n\"Optimize the loading speed of the data table\"\n\"Add error handling for invalid email input\"\n\"Fix the date picker not showing correct format\""},{"language":"text","snippet":"\"Fix the login button styling and add a loading indicator\"\n\"Optimize the database query and add caching for faster response\"\n\"Fix the mobile layout and adjust the navigation menu\""}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: yugoo-app-builder\ndescription: Build full-stack web applications using 语构's chat-driven development platform. Manages conversations, sends development instructions, monitors build progress, extracts results (generated files, summaries, task status), publishes applications, and manages versions.\nmetadata:\n  slug: yugoo-app-builder\n  display_name: 语构 App Builder\n  homepage: https://creo4u.com\n  env:\n    - name: CREO4U_SKILL_API_KEY\n      required: true\n      description: API key for authenticating with the 语构 (Yugoo) platform. Use a least-privilege or revocable key.\n  dependencies:\n    - requests\n---\n\n# Installation\n\n## Prerequisites\n\nBefore using this skill, ensure you have the `CREO4U_SKILL_API_KEY` environment variable set.\n\n### Setup API Key\n\n**Option 1: Provide API Key during installation**\n```bash\nexport CREO4U_SKILL_API_KEY=\"your_api_key_here\"\n```\n\n**Option 2: If not provided, the skill will prompt for it**\n- If `CREO4U_SKILL_API_KEY` is already set in your environment, the skill will use it directly\n- If not set, the skill will ask you to provide the API key\n\n### After Installation\n\nOnce installed, all CLI commands will automatically use the `CREO4U_SKILL_API_KEY` environment variable — no need to pass `--token` or any API key parameter.\n\n---\n\n# 语构 App Builder\n\n语构 is a **chat-driven full-stack application builder**. Users describe what they want in natural language and 语构 generates a **production-ready web application**, including frontend UI, backend services, database schema, and a live development environment.\n\nThis skill enables AI agents to interact with the **语构 platform** to create, iterate, publish, and deploy applications.\n\nAll platform operations must be executed through the CLI script:\n\n```bash\npython scripts/yugoo_cli.py [global options] <command> [command options]\n```\n\n**IMPORTANT: Argument Order** — Global options (`--token`, `--base-url`, `--insecure`, `--timeout`) must appear **BEFORE** the subcommand. Placing them after the subcommand will cause a parse error.\n\n```bash\n# ✅ Correct — global options before subcommand\npython scripts/yugoo_cli.py --token TOKEN create --name \"My App\"\n\n# ❌ Wrong — global options after subcommand\npython scripts/yugoo_cli.py create --token TOKEN --name \"My App\"\n```\n\n> **Note**: The `--insecure` flag disables TLS certificate verification. Only use it in controlled test environments — never for production or when transmitting real API keys.\n\nDo **not** call platform APIs directly. Always use the CLI commands provided by this skill.\n\n---\n\n# When to Use This Skill\n\nUse this skill whenever the user wants to:\n\n* create a **website** or **web application**\n* build a **dashboard** or **admin panel**\n* create a **SaaS product** or **internal tool**\n* build a **full-stack application** with frontend + backend\n* build a **landing page**\n* create a **browser game** or **mini game**\n* iterate on an existing **语构 project**\n* publish or deploy an **语构 application**\n* check sandbox health or preview URLs"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn799px9ed26zactxmbpt194nd850mcc\",\n  \"slug\": \"yugoo-app-builder\",\n  \"version\": \"1.0.5\",\n  \"publishedAt\": 1781147943570\n}"},{"path":"skill-card.md","content":"## Description:\n\nBuild full-stack web applications through 语构's chat-driven platform, including conversation management, development instruction delivery, build monitoring, result extraction, publishing, and version management.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[yugoo](https://clawhub.ai/user/yugoo)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agents use this skill to create, iterate, publish, and manage full-stack web applications on the 语构 platform from focused natural-language requests.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can perform credential-bearing network operations against the 语构 platform.\n\nMitigation: Use a revocable, least-privilege CREO4U_SKILL_API_KEY and avoid untrusted YUGOO_BASE_URL values.\n\nRisk: The skill supports public publishing and destructive actions such as unpublishing, deleting conversations, and deleting versions.\n\nMitigation: Require explicit user approval before publishing, unpublishing, deleting conversations, deleting versions, finalizing versions, or uploading local files.\n\nRisk: The --insecure option disables TLS certificate verification while transmitting authenticated requests.\n\nMitigation: Do not use --insecure except in controlled test environments with non-production credentials.\n\nRisk: Generated applications may expose secrets or unsafe behavior if published without review.\n\nMitigation: Inspect generated applications for secrets and unsafe behavior before making them public.\n\n## Reference(s):\n\n- [语构 App Builder ClawHub listing](https://clawhub.ai/yugoo/skills/yugoo-app-builder)\n- [yugoo publisher profile](https://clawhub.ai/user/yugoo)\n- [语构 homepage](https://creo4u.com)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with CLI commands and JSON-line command outputs]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Uses CREO4U_SKILL_API_KEY for authenticated platform operations and may produce links to generated preview or published applications.]\n\n## Skill Version(s):\n\n1.0.5 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Build full-stack web applications using 语构's chat-driven development platform. Manages conversations, sends development instructions, monitors build progress... Skill: 语构 App Builder Owner: yugoo Summary: Build full-stack web applications using 语构's chat-driven development platform. Manages conversations, sends development instructions, monitors build progress... Tags: latest:1.0.5 Version history: v1.0.5 | 2026-06-11T03:19:03.570Z | user - Removed the sample file skill-card.md from the project. - No user-facing feature or functional changes in this version. v1.0.4 | 2026-05","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1280,"uniquenessScore":47,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T15:35:47.678Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T15:35:47.678Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T17:43:33.874Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}