{"id":"2f85a9e1-0542-4997-b114-77262540aa5e","entityType":"agent","slug":"clawhub-sdk-team-alibabacloud-maxcompute-migration-service","name":"Alibabacloud Maxcompute Migration Service","canonicalUrl":"https://www.xpersona.co/agent/clawhub-sdk-team-alibabacloud-maxcompute-migration-service","canonicalPath":"/agent/clawhub-sdk-team-alibabacloud-maxcompute-migration-service","generatedAt":"2026-10-11T11:25:37.374Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T08:48:20.445Z","emptyReason":null},"description":"MMS skill for MaxCompute data migration operations. Handles planning, source/metadata lookup, mapping, job/timer execution, monitoring, and managed migration... Skill: Alibabacloud Maxcompute Migration Service Owner: sdk-team Summary: MMS skill for MaxCompute data migration operations. Handles planning, source/metadata lookup, mapping, job/timer execution, monitoring, and managed migration... Tags: latest:0.0.2 Version history: v0.0.2 | 2026-07-24T06:58:51.415Z | auto alibabacloud-maxcompute-migration-service v0.0.2 - Refactored and tightened core SKILL.md description, empha","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s173swjet2yrebzqrp6hjkvmy583mxef:alibabacloud-maxcompute-migration-service","sourceUrl":"https://clawhub.ai/sdk-team/alibabacloud-maxcompute-migration-service","homepage":"https://clawhub.ai/sdk-team/skills/alibabacloud-maxcompute-migration-service","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/sdk-team/alibabacloud-maxcompute-migration-service","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/sdk-team/skills/alibabacloud-maxcompute-migration-service","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":61,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"MMS skill for MaxCompute data migration operations. Handles planning, source/metadata lookup, mapping, job/timer execution, monitoring, and managed migration..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T08:48:20.445Z","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-11T08:48:20.445Z","emptyReason":null},"stars":null,"forks":null,"downloads":1108,"packageName":null,"latestVersion":"0.0.2","tractionLabel":"1.1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T08:48:20.378Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T08:48:20.445Z","lastCrawledAt":"2026-10-11T08:48:20.378Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T08:48:20.378Z","lastVerifiedAt":null,"highlights":[{"version":"0.0.2","createdAt":"2026-07-24T06:58:51.415Z","changelog":"alibabacloud-maxcompute-migration-service v0.0.2 - Refactored and tightened core SKILL.md description, emphasizing clear workflow boundaries, session tracking, and safety rules. - Split command references into dedicated files (datasource, job/timer/task, mapping/planning), and added managed migration and openAPI checklist docs. - Enforced stricter `source_id` resolution and mandatory confirmation before creating migration jobs. - Updated and expanded CLI/environment setup guidance; minimum required aliyun CLI version is now 3.3.3. - Reorganized references; removed obsolete skill-card.md and merged related command reference files. - Introduced session-level user-agent for observability and tracing across all CLI/API calls.","fileCount":13,"zipByteSize":30580},{"version":"0.0.1","createdAt":"2026-04-20T11:49:29.447Z","changelog":"Initial release of alibabacloud-maxcompute-migration-service skill. - Enables management of Alibaba Cloud MaxCompute Migration Service (MMS) for migrating data from Hive, BigQuery, Databricks, Snowflake, Redshift, and MaxCompute to MaxCompute. - Guides users through the entire migration workflow, including pre-checks, job/task management, and data source resolution. - Enforces security best practices by sanitizing sensitive credentials in all API responses before any display or file operations. - Clarifies key MMS concepts (Migration Job vs Task), and proactively prompts users when intent is ambiguous. - Includes exact CLI usage notes, prerequisites, and troubleshooting steps for smooth migration operations.","fileCount":8,"zipByteSize":18603}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s173swjet2yrebzqrp6hjkvmy583mxef:alibabacloud-maxcompute-migration-service","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","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-sdk-team-alibabacloud-maxcompute-migration-service/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-sdk-team-alibabacloud-maxcompute-migration-service/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-sdk-team-alibabacloud-maxcompute-migration-service/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-sdk-team-alibabacloud-maxcompute-migration-service/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-sdk-team-alibabacloud-maxcompute-migration-service/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-sdk-team-alibabacloud-maxcompute-migration-service/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-11T11:25:37.370Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-sdk-team-alibabacloud-maxcompute-migration-service/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-sdk-team-alibabacloud-maxcompute-migration-service/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-sdk-team-alibabacloud-maxcompute-migration-service/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-sdk-team-alibabacloud-maxcompute-migration-service/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-11T08:48:20.445Z","emptyReason":null},"readme":"Skill: Alibabacloud Maxcompute Migration Service\n\nOwner: sdk-team\n\nSummary: MMS skill for MaxCompute data migration operations. Handles planning, source/metadata lookup, mapping, job/timer execution, monitoring, and managed migration...\n\nTags: latest:0.0.2\n\nVersion history:\n\nv0.0.2 | 2026-07-24T06:58:51.415Z | auto\n\nalibabacloud-maxcompute-migration-service v0.0.2\n\n- Refactored and tightened core SKILL.md description, emphasizing clear workflow boundaries, session tracking, and safety rules.\n- Split command references into dedicated files (datasource, job/timer/task, mapping/planning), and added managed migration and openAPI checklist docs.\n- Enforced stricter `source_id` resolution and mandatory confirmation before creating migration jobs.\n- Updated and expanded CLI/environment setup guidance; minimum required aliyun CLI version is now 3.3.3.\n- Reorganized references; removed obsolete skill-card.md and merged related command reference files.\n- Introduced session-level user-agent for observability and tracing across all CLI/API calls.\n\nv0.0.1 | 2026-04-20T11:49:29.447Z | auto\n\nInitial release of alibabacloud-maxcompute-migration-service skill.\n\n- Enables management of Alibaba Cloud MaxCompute Migration Service (MMS) for migrating data from Hive, BigQuery, Databricks, Snowflake, Redshift, and MaxCompute to MaxCompute.\n- Guides users through the entire migration workflow, including pre-checks, job/task management, and data source resolution.\n- Enforces security best practices by sanitizing sensitive credentials in all API responses before any display or file operations.\n- Clarifies key MMS concepts (Migration Job vs Task), and proactively prompts users when intent is ambiguous.\n- Includes exact CLI usage notes, prerequisites, and troubleshooting steps for smooth migration operations.\n\nArchive index:\n\nArchive v0.0.2: 13 files, 30580 bytes\n\nFiles: references/acceptance-criteria.md (3781b), references/cli-installation-guide.md (2813b), references/commands-datasource-and-metadata.md (5023b), references/commands-job-timer-task.md (12116b), references/commands-mapping-and-planning.md (7102b), references/mms-source-id-and-resolution.md (4889b), references/openapi-checklist.md (3176b), references/ram-policies.md (8181b), references/verification-method.md (2902b), scripts/sync_qwen_skill_default_workdir.sh (1138b), skill-card.md (4071b), SKILL.md (26036b), _meta.json (160b)\n\nFile v0.0.2:SKILL.md\n\n---\nname: alibabacloud-maxcompute-migration-service\ndescription: |\n  MMS skill for MaxCompute data migration operations.\n  Handles planning, source/metadata lookup, mapping, job/timer execution, monitoring, and managed migration mode.\n  Hard constraints: bounded source_id resolution, mandatory --name for create commands, and confirmation gate before create.\n  Trigger examples: migration plan, job/timer creation, progress watch, managed migration for a datasource.\n---\n\n# MMS Data Migration Management\n\nYou are a **data migration expert** for MaxCompute Migration Service (MMS). Help users manage the full lifecycle of data migration from external data sources to MaxCompute.\n\n> **Language policy**: Follow the **user's conversation language and context**. Mirror the user's latest language unless they request otherwise. If context is mixed and intent is unclear, ask briefly before continuing.\n\n> **[MUST] API product identifier**: All MMS APIs belong to the **MaxCompute** product (version `2022-01-04`). CLI format: `aliyun maxcompute <command> [params]`. Do **not** use other products' APIs to operate MMS resources.\n\n## 1) Model & lifecycle\n\n### Core objects\n\n- **Data source**: stores source-side connection information, caches source metadata (databases/tables/partitions) to reduce repeated network requests during migration, and carries migration-related configuration.\n- **Migration job**: a **logical plan** that defines migration scope and strategy (single database, multiple tables, or partition scope). **Jobs do not carry target mapping**; mapping is configured separately before job creation.\n- **Migration task**: the **physical execution plan** split from a job. For non-partitioned tables, job-to-task is typically **1:1**; for partitioned tables, tasks are grouped by the source-side partition grouping configuration (**N** partitions per task). Data in one task is migrated within **one Spark task**.\n\n### Main path\n\nData source → Metadata scan → Target mapping → Migration job/timer → Migration tasks → Status/logs.\n\n### Incremental (short)\n\n- In steady state, **(1)** the **data source** has **scheduled metadata refresh** configured in the console (e.g. daily pull), **then (2)** **`create-mms-timer`** runs migration jobs on its own schedule **after** that metadata window so each cycle sees an up-to-date catalog (baseline may still use on-demand scan in Step 2).\n\n### Mapping model (short)\n\n- MMS may run in **two-level** (project-centric) or **three-level** (project/schema/table) mode — **read existing mapping before updates**; if project vs schema intent is unclear, **ask the user** before mutating.\n\n### How to route user intent\n\n- \"Create migration\" / \"migrate database/tables/partitions\" → **job** level. Always run **migration planning (Step 4)** before **Step 5** `create-mms-job`.\n- \"Managed migration\" / \"fully hosted migration\" / \"全托管迁移数据源 <name/id>\" → enter **Managed Migration Mode** (Section 6). Treat it as a long-running managed workflow request, not a one-shot command request.\n- Same intent **and** no `source_id` in user message or session → **stop treating it as open-ended metadata work**. Follow **`references/mms-source-id-and-resolution.md`** (bounded resolution; **N ≥ 3** → ask user for `source_id`; **N < 3** → bounded reads only).\n- \"Check progress\" / \"table migration status\" → default to **database → table → partition** using **inventory APIs** (`list-mms-tables`, `get-mms-table`, `list-mms-partitions`, `get-mms-partition`) and their returned **migration-related fields** (per `-h` / response). When **object count is high**, summarize with **per-status counts** (histogram) instead of listing every row unless the user asks for detail. **Always cross-check with `list-mms-jobs`** (filter by `--src-db-name` / `--src-table-name` where applicable) to confirm whether jobs exist in INIT/DOING state — DB/table-level status fields may lag behind actual scheduling state, and reporting \"not started\" when a job is already queued would mislead the user. Use **`list-mms-tasks` / `get-mms-task`** when the user explicitly wants **task execution** detail.\n- If user says \"retry failed\" → ask whether they mean a **job** retry or a **task** retry.\n\n### Scenario index (linked)\n\n- **Migration planning / incremental / timers** → **Step 4** and **Step 7**; **datasource scheduled metadata refresh (console) first**, then **`create-mms-timer`** (`--value` after metadata window).\n- **Target mapping / two-level vs three-level** → **Step 3**; command templates: `references/commands-mapping-and-planning.md`.\n- **Missing `source_id` / table-first lookup / LIKE disambiguation** → `references/mms-source-id-and-resolution.md`.\n- **Data source / metadata commands** → `references/commands-datasource-and-metadata.md`.\n- **Job + timer + task + async commands** → `references/commands-job-timer-task.md`.\n\n## 2) Environment (CLI, prerequisites, authentication)\n\n- **Aliyun CLI (first-run only) — version `>= 3.3.3` required**: run `aliyun version` to verify. If not installed or the version is too low:\n  - run `/bin/bash -c \"$(curl -fsSL https://aliyuncli.alicdn.com/setup.sh)\"` to install or update, or\n  - run `aliyun upgrade` (available from CLI >= 3.3.5) to self-update, or\n  - run `brew install aliyun-cli` / `brew upgrade aliyun-cli` (macOS Homebrew), or\n  - see `references/cli-installation-guide.md` for full installation instructions.\n  Then [MUST] run `aliyun configure set --auto-plugin-install true` and `aliyun plugin update` to keep the MaxCompute plugin up to date. Do not repeat setup steps in normal migration workflows.\n- **Prerequisites**: create the MaxCompute MMS **service-linked role** `AliyunServiceRoleForMaxComputeMMS` (console is easiest); target MaxCompute project must exist and allow the service role to operate (see `references/ram-policies.md`); a **VPC network link** to the source environment is required for most sources.\n- **Authentication**: never print or persist plaintext credentials; use `aliyun configure list` to verify a profile exists; if not, stop and ask the user to configure credentials **outside** the chat session.\n\n## 3) Observability (session tracking)\n\nAll MMS `aliyun maxcompute` calls in this skill are traced via a **per-session user-agent** so that every command belonging to one migration session can be correlated on the backend.\n\n### session-id (generation rule)\n\n- **Generate once per session**: at the **start of a session** (first time you are about to run any `aliyun maxcompute` command), generate **one** `session-id` and **reuse the same value** for **every** subsequent command in that session. Do **not** regenerate per command, per step, or per retry.\n- **Format**: a **32-character lowercase hexadecimal** string (128 bits). Example generator: `openssl rand -hex 16` (produces exactly 32 hex chars).\n- **Stability**: keep the value fixed even across planning → create → monitor and inside Managed Migration Mode rounds; a new session-id is only created when a **new session** starts.\n\n### User-agent template (canonical)\n\n```\n--user-agent AlibabaCloud-Agent-Skills/{SKILL_NAME}/{session-id}\n```\n\nWhere `{SKILL_NAME}` is `alibabacloud-maxcompute-migration-service`, so the concrete flag is:\n\n```\n--user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/<32-char-hex-session-id>\n```\n\n- **Apply to every call** — create / list / get / update / trigger / start / stop / async-task polling, and metadata-scan commands. Never omit the flag, and never alter the `AlibabaCloud-Agent-Skills/{SKILL_NAME}` prefix.\n- Reference command templates in `references/*.md` show the UA with the `/{session-id}` placeholder — substitute the session's actual value when running them.\n\n## 4) Operating rules\n\n1. **Safety first** — confirm intent before create/start/stop/delete.\n2. **No fabricated data** — only report fields returned by CLI/API; quote IDs/names exactly as returned.\n3. **Bounded `source_id` discovery** — when `source_id` is missing for job/timer creation, obey the **hard limits** in **`references/mms-source-id-and-resolution.md`** (**name filter first** for name→ID; unfiltered single-inventory only when no usable source name; **N ≥ 3** forbids metadata guessing; **N < 3** allows only bounded tie-break reads).\n4. **Named creates** — every `create-mms-job` / `create-mms-timer` command **must** include **`--name \"<string>\"`** (same label you show in the pre-create summary). **Never** run or suggest a create line that omits `--name`. If the user did not give a name, **ask** and agree one before confirmation.\n5. **CLI user-agent** — append `--user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}` to **every** MMS `aliyun maxcompute` call. The `{session-id}` and its generation rule are defined in **Section 3 (Observability)**; generate it **once per session** and reuse it on all calls.\n6. **Create command source of truth** — all `create-mms-job` / `create-mms-timer` command lines **must** follow `references/commands-job-timer-task.md` (and `aliyun maxcompute ... -h` for live flags). Do **not** invent unsupported flags or switch to `--body` JSON style.\n7. **No secondary pagination for large lists** — when a `list-*` API returns **more than 20 items** (the default page size), do **not** make follow-up calls to fetch additional pages. Instead, **summarize** the current-page results (count, categories, key patterns) and report the **total count** from the response metadata. If the user needs a specific subset, ask them for a filter or keyword rather than paging through all results. This avoids excessive API calls and keeps responses concise.\n8. **Do not specify `--region` unless the user asks** — the Aliyun CLI uses the default region from `aliyun configure`. Do **not** add `--region` to commands or probe multiple regions. If a call fails, check other causes first (name, source_id, permissions); only ask the user about region if the error explicitly indicates a region mismatch.\n9. **No automatic metadata scan on missing objects** — when a database, table, or partition does not exist in MMS metadata (e.g. `list-mms-dbs` / `list-mms-tables` / `list-mms-partitions` returns no match), do **not** automatically trigger a metadata scan (`create-mms-fetch-metadata-job`). Instead, report the missing object to the user and **ask** whether they want to re-scan metadata. Execute the scan **only after** the user explicitly confirms. This mirrors the job-creation confirmation gate: suggest the action, wait for approval.\n\n### IDs & name resolution (summary)\n\nQuick rules in this file:\n\n- **Name → ID: filter first** — if the user provides a name, start with `list-* --name <token>`; do not list all by default.\n- **LIKE is candidate-only** — treat `--name` hits as candidates, then require strict equality on the intended field.\n- **No broad metadata guessing for missing `source_id`** — follow bounded rules (`N ≥ 3` ask user; `N < 3` bounded tie-break reads).\n\nFor the **full** name→ID table, LIKE warning, table-first lookup, and missing-`source_id` hard limits, use **`references/mms-source-id-and-resolution.md`**.\n\n## 5) Migration workflow (end-to-end)\n\nHigh-level path:\n\n```\nConsole: create data source → CLI: scan metadata → CLI: target mapping (`update-mms-db` / `update-mms-table`) → migration planning (mandatory before create) → CLI: create job/timer → monitor tasks\n```\n\n### Step 1 — Data source management\n\n> **[MUST] Create/update data sources in the MaxCompute console** (not via CLI).\n\nConsole: `https://maxcompute.console.aliyun.com/{region}/mma/datasource`\n\nThen verify with CLI (examples and templates live in `references/commands-datasource-and-metadata.md`):\n\n- `list-mms-data-sources` (prefer `--name <token>` when resolving name → ID)\n- `get-mms-data-source --source-id <id> --with-config true`\n\n### Step 2 — Metadata scan\n\nCreate a scan job, poll until complete, then list databases/tables/partitions. Use `references/commands-datasource-and-metadata.md` for exact commands.\n\n> If **`source_id` is already known** and the user names **only a table** (no db), use **table-first** lookup per **`references/mms-source-id-and-resolution.md`**; do not list every database first.\n\n### Step 3 — Target mapping\n\nConfigure **where each source database / table lands in MaxCompute** using CLI (preferred):\n\n- **Database-level**: `update-mms-db` with `--source-id`, `--db-id`, and destination fields such as **`--dst-project-name`**, **`--dst-name`** (target MaxCompute schema for that source DB). Resolve `--db-id` via `list-mms-dbs` / `get-mms-db`.\n- **Table-level overrides**: `update-mms-table` with `--source-id`, `--table-id`, and **`--dst-project-name`**, **`--dst-schema-name`**, **`--dst-name`** as needed. Resolve `--table-id` via `list-mms-tables` / `get-mms-table`.\n\nBefore changing mapping fields, **inspect current mapping values first** and decide model type:\n\n- **Two-level model (project only)**:\n  - DB mapping usually has `dst_name = null` and mainly uses `dst_project`.\n  - Table mapping uses `dst_project` + `dst_name`, with **no `dst_schema`**.\n- **Three-level model (project + schema + table)**:\n  - DB mapping: `dst_project` maps to project, `dst_name` maps to schema.\n  - Table mapping: project/schema/table fields map one-to-one (including schema field).\n\nApply updates according to detected model type; do not blindly write schema-related fields when the existing mapping is two-level.\nIf you still cannot determine whether the user intends to change **project** or **schema**, stop and explicitly confirm with the user before executing any update command.\n\n> **[MUST] After mapping updates, print before/after db schema name**: whenever you run `update-mms-db` or `update-mms-table`, show the user the **db schema name** value **before** and **after** the change in the same response (use values read from MMS, do not infer). For DB-level mapping this is typically `dst_name`; for table-level mapping include the schema field used by the API response. Print both values even when unchanged or `null`.\n\nSee `references/commands-mapping-and-planning.md` and `aliyun maxcompute update-mms-db -h` / `update-mms-table -h`. The console UI remains available if the user prefers it.\n\n### Step 4 — Migration planning (mandatory before create)\n\nRun a **planning pass** before drafting any `create-mms-job` or `create-mms-timer`. This step is **mandatory** and cannot be skipped, even when scope is already narrowed to specific tables/partitions.\n\n> **Planning prerequisite & decision (mapping)**: `create-mms-job` does **not** define or override destination mapping, so planning must treat mapping as a prerequisite before Step 5. If the user does **not** specify target mapping fields, keep existing/default mapping values and do **not** call mapping update APIs just to rewrite the same values. If the user **does** specify mapping fields, compare requested values with current mapping first; run `update-mms-db` / `update-mms-table` **only when inconsistent**. If already consistent, explicitly report \"mapping already consistent, no update executed.\"\n>\n> **Planning prerequisite (`source_id`)**: before moving to Step 5, `source_id` must be present in session context or the planned create arguments. If missing, do **not** run open-ended metadata search to guess it; follow `references/mms-source-id-and-resolution.md` first.\n\nPlanning logic:\n\n1. **Status check first (must)**: while planning (scope/incremental/retries), judge “done / pending / failed” from **table- and partition-level** migration state on MMS inventory APIs — `list-mms-tables` / `get-mms-table`, and `list-mms-partitions` / `get-mms-partition` when partition scope matters — organized as **database → table → partition**. Do **not** use job-level status (`get-mms-job`, coarse `list-mms-jobs` status) as planning source of truth. Use `list-mms-tasks` / `get-mms-task` only for execution drill-down. Typical statuses: **Table** `INIT`/`DOING`/`FAILED`/`DONE`/`PART_DONE`; **Partition** `INIT`/`DOING`/`FAILED`/`DONE` (exact spellings follow live output). For high-cardinality inventories, use **per-status counts** instead of full listings (see `references/commands-mapping-and-planning.md`).\n2. **Planning output to user** should contain only **two aspects**:\n   - **Job split plan**: propose how to split jobs (full-db / table-level / partition-level), and list the concrete scope to execute first.\n   - For a source without a validated baseline, recommend a **one-table E2E** run first.\n   - After baseline validation, default to a **full-database** job unless the user gives a clear narrower scope reason.\n   - **Do not force priority planning by default**; only add explicit priority DB/table ordering when the user asks for prioritization.\n   - **Incremental decision**:\n     - Ask whether they need **daily incremental migration**.\n     - If **yes**, explain briefly: incremental depends on **datasource scheduled metadata refresh first**, then a **migration timer** (`create-mms-timer`) that runs after that refresh window.\n     - Before creating timer schedules, fetch datasource config with `get-mms-data-source --with-config true` and read the metadata-refresh schedule/time from returned fields.\n     - If datasource metadata schedule is missing or unclear, stop timer planning and ask the user to configure it in console first.\n     - Recommend configuring **DB-level scheduled metadata refresh** in the datasource console.\n     - After the user confirms this plan, **create the timer first**.\n     - Then ask whether they also want to **manually trigger the timer now**; if yes, run `trigger-mms-timer`.\n\n> **Planning confirmation gate (hard requirement before create)**  \n> After planning, output a **full migration job configuration summary table** (including a dedicated job name field used as CLI `--name`) and ask exactly:  \n> `Please confirm whether to create this migration job. I will execute create-mms-job only after you reply \"confirm\".`  \n> If the user does not explicitly confirm (`yes` / `confirm` / equivalent clear approval), do **not** call `create-mms-job`. If any key parameter changes, re-show the full summary and re-confirm.\n\n### Step 5 — Create migration job (three modes)\n\nPick **one** mode based on Step 4 planning outcomes. **Step 5 is executable only after Step 4 planning confirmation is completed.**\n\n1. **Full database** (**default when planning a DB migration**): `srcDbName` only (optional black/white lists).\n2. **Table-level**: `srcDbName` + `tables`.\n3. **Partition-level**: `srcDbName` + **`tables` + `partitionFilters`** (partition scope must not be ambiguous).\n\n> **[MUST]** The final `aliyun maxcompute create-mms-job` / `create-mms-timer` you run or paste **includes `--name ...`** matching the Step 4 confirmed summary, and the command shape/flags follow `references/commands-job-timer-task.md`. Treat “create without `--name`” or “create command not following reference template” as an error to fix before executing.\n\n**Important**: jobs auto-start after creation. `start-mms-job` is only for jobs stopped by `stop-mms-job`.\n\n> **Create API returns an async task, not `job_id` immediately**: `create-mms-job` responds with an **async task id** (field name per API response). Poll **`get-mms-async-task`** with the same `source_id` until the async task is **terminal success** (often `DONE`; exact enum/field names follow the CLI output). The **object id** (or equivalent field in that completed async-task payload) is the real **`job_id`**. If the async task fails, surface the error — do not treat it as a job id.\n\nFull CLI bodies for `create-mms-job` / timer / task / async control live in `references/commands-job-timer-task.md`.\n\n### Step 6 — Monitor progress (default UX + polling)\n\nWhen the user asks for \"progress\" without job/task IDs, summarize **database → table → partition** first. Only drill into job/task details when asked.\n\n**Polling & watch modes** (does NOT apply to `create-mms-timer` which returns `timerId` synchronously):\n\n- **Metadata scan jobs**: poll on the order of **~10s** for minutes until the scan completes.\n- **After `create-mms-job`**: first resolve the **async task** via `get-mms-async-task` (short-lived — ok to poll ~2–10s until terminal). Then treat the returned **object id** as **`job_id`** (read the response). **Note**: `create-mms-timer` returns `timerId` directly in its response — no async task polling needed.\n- **Long-running migration job**: default to **no continuous polling**; pass `job_id` and monitoring hints to the user unless they ask for a short status check.\n- **If the user asks you to actively monitor a job**: update every **~30s**; each round, summarize **task status counts** under that job (e.g., running/success/failed). If the task set is small (**< 5**), also fetch task logs each round and tell the user whether logs have new lines.\n- **Overall migration status observation (new)**: if the user asks for ongoing global monitoring, run every **N minutes** (default **N=5**, unless the user specifies another N). Each round, fetch currently executing **jobs/tasks** (use status filters where `-h` supports them), and output the same **Current Status Report** format each time.\n- **Stop condition**: stop the observation loop when there are **no running jobs and no running tasks** in the current round; still output one final report that marks observation as completed.\n\n**Current Status Report (fixed format; keep order unchanged)**\n\n1. `Snapshot`: timestamp, interval `N`, scope (`source_id` / db scope).\n2. `Executing jobs`: count + list of active `job_id`/name/status (top K only if many).\n3. `Executing tasks`: total active count + status histogram (running/failed/success/pending etc., per API values).\n4. `Changes since last round`: newly started jobs/tasks, newly finished jobs/tasks, failed deltas.\n5. `Risk notes`: any failures/stalls/no-progress signal in one line.\n6. `Next action`: continue observing / suggest drill-down / ask for intervention.\n\n### Step 7 — Timers (incremental / scheduled)\n\nTimers reuse the same migration-related **CLI flags** as jobs **plus** `--schedule-type` and `--value`. Timer creation must come **after Step 4 planning and confirmation**. For **incremental**, the **data source’s console-scheduled metadata refresh** comes first; read that schedule from `get-mms-data-source --with-config true` and align **`--value`** so the timer **runs migration jobs after** that refresh window (see **Step 4**). If refresh schedule is missing, ask user to configure datasource schedule in console before creating timer. For incremental-style daily runs, scope the timer like the baseline **full-database** job unless the user chose otherwise.\n\n## 6) Managed Migration Mode (draft)\n\nUse this mode only after the user explicitly asks for managed/fully hosted migration and confirms the scope.\n\n1. **Entry gate**: confirm `source_id`, migration scope, allowed actions, and reporting interval `N` (default **5 minutes**, user-configurable).\n   - Managed mode scope is capped at **one data source** (`source_id`).\n   - If the user provides datasource **name** (for example: \"managed migration datasource mms_skill_test\"), resolve it to `source_id` first with the name→ID rules, then continue in managed mode.\n   - After entry-gate confirmation, explicitly notify the user that managed migration has **started**, and list the exit conditions in the same message.\n2. **Autonomous loop**: run `Plan -> Execute -> Observe -> Adjust` in rounds.\n3. **Action boundary**: auto-run only plan-approved actions (create/retry/trigger/watch); any scope expansion or destructive action requires fresh user confirmation.\n   - During managed mode, **destination mapping must stay frozen**. Do not run mapping updates (`update-mms-db` / `update-mms-table`) until managed mode exits.\n4. **Round output**: always publish the fixed status report (`Snapshot` ... `Next action`) with the decision taken in this round.\n5. **Stop conditions & mandatory human intervention**:\n   - Stop when no running job/task remains, or when blocked by permissions/policy; emit a final handoff summary.\n   - If submitted-task failure rate is **> 20%** during managed mode, stop and request manual intervention.\n   - If there is **no successful task for 30 minutes** while failures continue, stop and request manual intervention.\n   - If failed tasks are **> 100 within 10 minutes**, stop and request manual intervention.\n6. **Auto-start behavior**: once the entry gate is satisfied, start the observation loop immediately (do not wait for another \"start monitoring\" message). Publish the first status report in the same round.\n\n## 7) Troubleshooting & permissions\n\nIf a call fails with permission errors:\n\n1. Read `references/ram-policies.md`\n2. Use the `ram-permission-diagnose` skill to guide fixes\n3. Pause until the user confirms permissions are granted\n\nFor operational notes while shaping this skill, see `troubleshooting-and-solutions.md`.\n\n## References\n\n- `references/cli-installation-guide.md`\n- `references/ram-policies.md`\n- `references/commands-datasource-and-metadata.md`\n- `references/commands-mapping-and-planning.md`\n- `references/commands-job-timer-task.md`\n- `references/mms-source-id-and-resolution.md`\n- `troubleshooting-and-solutions.md` (problems encountered while shaping this skill and how they were addressed)\n\n## Official documentation\n\n- [MMS Overview](https://help.aliyun.com/zh/maxcompute/user-guide/migration-service-mms)\n- [Preparation](https://help.aliyun.com/zh/maxcompute/user-guide/mms-preparation)\n- [Manage Data Sources](https://help.aliyun.com/zh/maxcompute/user-guide/manage-data-sources)\n- [Create and Execute Migration Jobs](https://help.aliyun.com/zh/maxcompute/user-guide/create-and-execute-a-migration-job)\n- [Migration Monitoring](https://help.aliyun.com/zh/maxcompute/user-guide/migration-observation)\n\nFile v0.0.2:_meta.json\n\n{\n  \"ownerId\": \"kn74p5w8ywv6prh40g0s82gmqh83nw54\",\n  \"slug\": \"alibabacloud-maxcompute-migration-service\",\n  \"version\": \"0.0.2\",\n  \"publishedAt\": 1784876331415\n}\n\nFile v0.0.2:references/acceptance-criteria.md\n\n# Acceptance Criteria: MaxCompute Migration Service (MMS)\n\n**Scenario**: MaxCompute Migration Service (MMS) - Migrate various data sources to MaxCompute\n**Purpose**: Skill testing acceptance criteria\n\n---\n\n# Correct Usage Patterns\n\n## 1. CLI Commands\n\n### ✅ CORRECT\n\n```bash\n# List projects\naliyun maxcompute list-projects --region cn-hangzhou --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n\n# Get project details\naliyun maxcompute get-project --project my_project --region cn-hangzhou --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n\n# List tables\naliyun maxcompute list-tables --project my_project --region cn-hangzhou --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\n### ❌ INCORRECT\n\n```bash\n# Missing --user-agent\naliyun maxcompute list-projects --region cn-hangzhou\n\n# Using the wrong API format (not plugin mode)\naliyun maxcompute ListProjects --RegionId cn-hangzhou\n\n# Missing required parameters\naliyun maxcompute get-project --region cn-hangzhou\n```\n\n## 2. Console Operations\n\n### ✅ CORRECT\n\n1. Log in to the MaxCompute console\n2. Navigate to **Data Transfer > Migration Service**\n3. Create data sources and migration jobs step by step\n\n### ❌ INCORRECT\n\n1. Creating an MMS data source directly via the CLI (currently not supported)\n2. Skipping the preparation work and creating a migration job directly\n\n## 3. Parameter Handling\n\n### ✅ CORRECT\n\n- Confirm all user parameters before performing operations\n- Use the specific values provided by the user; do not assume default values\n- List a parameter confirmation table for the user to confirm\n\n### ❌ INCORRECT\n\n```markdown\n# Wrong: assuming default values\naliyun maxcompute list-projects --region cn-hangzhou  # Assumes the user wants to query the Hangzhou region\n\n# Wrong: executing directly with placeholders\naliyun maxcompute get-project --project <project-name>\n```\n\n## 4. Credential Handling\n\n### ✅ CORRECT\n\n```bash\n# Only check credential status\naliyun configure list\n```\n\nThe output shows a valid profile (AK, STS, or OAuth identity).\n\n### ❌ INCORRECT\n\n```bash\n# Read or print AK/SK values\necho $ALIBABA_CLOUD_ACCESS_KEY_ID\n\n# Have the user enter credentials on the command line\naliyun configure set --access-key-id <user-input>\n```\n\n## 5. Error Handling\n\n### ✅ CORRECT\n\n1. Capture the error message\n2. Analyze the cause of the error\n3. Provide a solution\n4. Guide the user to use the `ram-permission-diagnose` skill to handle permission issues\n\n### ❌ INCORRECT\n\n- Ignoring errors and continuing execution\n- Not providing resolution suggestions\n- Repeatedly executing the same failed operation\n\n---\n\n# Feature Verification Checklist\n\n## MMS Core Features\n\n- [ ] Identification of supported data source types (Hive, BigQuery, Databricks, MaxCompute)\n- [ ] Explanation of migration job types (whole database, multiple tables, multiple partitions)\n- [ ] Complete preparation work steps\n- [ ] Clear data source creation flow\n- [ ] Clear migration job creation flow\n- [ ] Well-defined monitoring and verification methods\n\n## CLI Commands\n\n- [ ] All `aliyun` commands include `--user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}`\n- [ ] Use plugin mode format (e.g., `list-projects` instead of `ListProjects`)\n- [ ] Required parameters are complete\n\n## Documentation\n\n- [ ] RAM Policy documentation is complete\n- [ ] Related Commands documentation is complete\n- [ ] Verification Method documentation is complete\n- [ ] CLI Installation Guide copied to the references directory\n\n## Security\n\n- [ ] Do not expose AK/SK values\n- [ ] Use `aliyun configure list` to verify credentials\n- [ ] RAM permission list is complete\n\nFile v0.0.2:references/cli-installation-guide.md\n\n# CLI Installation Guide\n\nComplete guide for installing and configuring Aliyun CLI.\n\n> **Aliyun CLI 3.3.3+**: Supports installing and using all published Alibaba Cloud product plugins. Make sure to upgrade to 3.3.3 or later for full plugin ecosystem coverage.\n>\n> Quickest install/update: `/bin/bash -c \"$(curl -fsSL https://aliyuncli.alicdn.com/setup.sh)\"`, or `aliyun upgrade` (available from CLI >= 3.3.5) to self-update.\n\n## Installation\n\n### macOS\n\n**Using Homebrew (Recommended)**\n```bash\nbrew install aliyun-cli\n# Upgrade to latest\nbrew upgrade aliyun-cli\n\n# Verify version (>= 3.3.3)\naliyun version\n```\n\n**Using Binary**\n```bash\n# Download\nwget https://aliyuncli.alicdn.com/aliyun-cli-macosx-latest-amd64.tgz\n\n# Extract\ntar -xzf aliyun-cli-macosx-latest-amd64.tgz\n\n# Move to PATH\nsudo mv aliyun /usr/local/bin/\n\n# Verify\naliyun version\n```\n\n### Linux\n\n**Debian/Ubuntu**\n```bash\n# Download\nwget https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz\n\n# Extract and install\ntar -xzf aliyun-cli-linux-latest-amd64.tgz\nsudo mv aliyun /usr/local/bin/\n\n# Verify\naliyun version\n```\n\n**CentOS/RHEL**\n```bash\n# Download\nwget https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz\n\n# Extract and install\ntar -xzf aliyun-cli-linux-latest-amd64.tgz\nsudo mv aliyun /usr/local/bin/\n\n# Verify\naliyun version\n```\n\n**ARM64 Architecture**\n```bash\n# Download ARM64 version\nwget https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-arm64.tgz\n\n# Extract and install\ntar -xzf aliyun-cli-linux-latest-arm64.tgz\nsudo mv aliyun /usr/local/bin/\n```\n\n### Windows\n\n**Using Binary**\n1. Download from: https://aliyuncli.alicdn.com/aliyun-cli-windows-latest-amd64.zip\n2. Extract the ZIP file\n3. Add the directory to your PATH environment variable\n4. Open new Command Prompt or PowerShell\n5. Verify: `aliyun version`\n\n## Configuration\n\n### Quick Start\n\n```bash\naliyun configure set \\\n  --mode AK \\\n  --access-key-id <your-access-key-id> \\\n  --access-key-secret <your-access-key-secret> \\\n  --region <region id>\n```\n\n**Where to Get Access Keys**\n\n1. Log in to Aliyun Console: https://ram.console.aliyun.com/\n2. Navigate to: AccessKey Management\n3. Create a new AccessKey pair\n4. Save the secret immediately — it's only shown once\n\n### Environment Variables\n\n**Access Key Mode**\n```bash\nexport ALIBABA_CLOUD_ACCESS_KEY_ID=your_access_key_id\nexport ALIBABA_CLOUD_ACCESS_KEY_SECRET=your_access_key_secret\nexport ALIBABA_CLOUD_REGION_ID=<region id>\n```\n\n### Verification\n\n```bash\n# Basic test - list regions\naliyun ecs describe-regions\n\n# Expected output: JSON array of regions\n```\n\n## Plugin Installation\n\nAfter installing CLI 3.3.3+, enable automatic plugin installation:\n\n```bash\naliyun configure set --auto-plugin-install true\n```\n\nInstall specific product plugins:\n\n```bash\naliyun plugin install --names maxcompute\n```\n\nFile v0.0.2:references/commands-datasource-and-metadata.md\n\n# MMS Commands — Data Source & Metadata\n\nMMS provides API capabilities through the MaxCompute OpenAPI (product code `MaxCompute`, version `2022-01-04`).  \nCLI invocation format: `aliyun maxcompute <command> [params] --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}`\n\n## Data Source Management\n\n### ListMmsDataSources — List Data Sources\n\n```bash\naliyun maxcompute list-mms-data-sources \\\n  --name <name> \\\n  --type <Hive|BigQuery|Snowflake|Redshift|Databricks|MaxCompute> \\\n  --page-num 1 --page-size 20 \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\n> When resolving Name → ID, prefer narrowing with `--name`; do not default to a full unfiltered listing first.\n\n| Parameter | Type | Description |\n|------|------|------|\n| name | string | Filter by name |\n| type | string | Filter by data source type |\n| region | string | Filter by region |\n| pageNum | integer | Page number |\n| pageSize | integer | Items per page |\n\n### GetMmsDataSource — Get Data Source Details\n\n```bash\naliyun maxcompute get-mms-data-source \\\n  --source-id <sourceId> \\\n  --with-config true \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\n### Create/Update/Delete Data Sources\n\n> **[MUST] For creating, updating, and deleting data sources, guide the user to complete the operation in the console.**  \n> Console URL: `https://maxcompute.console.aliyun.com/{region}/mma/datasource`\n\n## Metadata Scanning (Inventory)\n\n### CreateMmsFetchMetadataJob — Initiate Metadata Inventory\n\n```bash\naliyun maxcompute create-mms-fetch-metadata-job \\\n  --source-id <sourceId> \\\n  [--db-name <dbName>] \\\n  [--table-names <table1> <table2> ...] \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\n### GetMmsFetchMetadataJob — Check Inventory Status\n\n```bash\naliyun maxcompute get-mms-fetch-metadata-job \\\n  --source-id <sourceId> \\\n  --scan-id <scanId> \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\n## Metadata Management\n\n### ListMmsDbs — List Databases\n\n```bash\naliyun maxcompute list-mms-dbs \\\n  --source-id <sourceId> \\\n  --name <name> \\\n  --status <status> \\\n  --page-num 1 --page-size 20 \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\n### GetMmsDb — Get Database Details\n\n```bash\naliyun maxcompute get-mms-db \\\n  --source-id <sourceId> \\\n  --db-id <dbId> \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\n### ListMmsTables — List Tables\n\nUnder the same `source_id`, **tables with identical names may exist across different databases**. If the user has already provided `source_id` and only queries by table name **without** specifying a database, prefer **omitting `db-name`** and search tables directly using `source_id` + `--name`; only add `db-name` (or ask the user to confirm the database name) when multiple results are returned and disambiguation is needed.\n\n```bash\naliyun maxcompute list-mms-tables \\\n  --source-id <sourceId> \\\n  --db-name <dbName> \\\n  --name <name> \\\n  --status <status> \\\n  --has-partitions true \\\n  --page-num 1 --page-size 20 \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\nWhen querying by table name only, without specifying a database (`db-name` can be omitted; refer to the actual API for details):\n\n```bash\naliyun maxcompute list-mms-tables \\\n  --source-id <sourceId> \\\n  --name <tableNameOrLikePattern> \\\n  --page-num 1 --page-size 20 \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\n| Parameter | Type | Description |\n|------|------|------|\n| dbId | integer | Filter by database ID |\n| dbName | string | Filter by database name |\n| name | string | Filter by table name |\n| dstProjectName | string | Filter by destination project name |\n| dstSchemaName | string | Filter by destination schema |\n| type | string | Filter by table type |\n| hasPartitions | boolean | Whether the table has partitions |\n| status | array | Filter by status |\n\n### GetMmsTable — Get Table Details\n\n```bash\naliyun maxcompute get-mms-table \\\n  --source-id <sourceId> \\\n  --table-id <tableId> \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\n### ListMmsPartitions — List Partitions\n\n```bash\naliyun maxcompute list-mms-partitions \\\n  --source-id <sourceId> \\\n  --db-name <dbName> \\\n  --table-name <tableName> \\\n  --page-num 1 --page-size 20 \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\n### GetMmsPartition — Get Partition Details\n\n```bash\naliyun maxcompute get-mms-partition \\\n  --source-id <sourceId> \\\n  --partition-id <partitionId> \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\nFile v0.0.2:references/commands-job-timer-task.md\n\n# MMS Commands — Job, Timer, Task & Async\n\nMMS provides API capabilities through the MaxCompute OpenAPI (product code `MaxCompute`, version `2022-01-04`).  \nCLI invocation format: `aliyun maxcompute <command> [params] --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}`\n\n## Migration Job Management\n\n### CreateMmsJob — Create a migration job\n\n> **CLI form**: `create-mms-job` / `create-mms-timer` do **not** use `--body` to pass JSON; fields are **flat subcommand parameters** (consistent with `aliyun maxcompute create-mms-job -h` and `create-mms-timer -h`). OpenAPI camelCase names generally map to CLI **kebab-case** (e.g. `srcDbName` → `--src-db-name`). Parameters such as `--column-mapping`, `--partition-filters`, and `--table-mapping` can be repeated when they are **key=value** mappings; refer to `-h` for the exact usage.\n>\n> **[Required] `--name`**: Every time you create a migration job or timer, the command line **must include** `**--name <job or timer display name>`** (matching the summary shown to the user). Agents/scripts are **forbidden** from omitting `--name`; if no name is provided, ask the user first before issuing the command.\n>\n> **Execution starts automatically after creation**; there is no need to manually call StartMmsJob.\n\n#### Async tasks and the real `job_id`\n\nThe response body of `create-mms-job` is usually an **async task ID** (such as `asyncTaskId`, etc., **based on the actual JSON field**), **not** the final migration job's `job_id`.\n\n1. Retrieve `async_task_id` (and `source_id`) from the response.\n2. Poll: `get-mms-async-task --source-id <sourceId> --async-task-id <asyncTaskId>`, with a recommended interval of **2–10 seconds**; such async tasks generally finish quickly.\n3. When the status reaches a **successful terminal state** (commonly `DONE`, based on the API enumeration), retrieve the **object ID** from the response body (commonly the field `objectId` or the equivalent field in the documentation), which is the `**job_id`**. If the terminal state is failure, parse the error message, and do **not** mistake the async task ID for the `job_id`.\n4. **The job execution phase** may last a long time: after obtaining the `job_id`, **by default do not** keep polling until migration completes within an automated flow; hand the `job_id` and the query commands available to the user (`list-mms-jobs`, `get-mms-job`, etc.) over to the user. Only when the user explicitly asks you to check progress on their behalf should you query at a **low frequency and for a small number of times**.\n\n> **Note**: `create-mms-timer` differs from `create-mms-job` in that it **returns synchronously** — it returns `timerId` (or an equivalent field, based on the actual JSON) directly in the response body, **will not** return `asyncTaskId`, and does not require polling `get-mms-async-task`.\n\n#### Three creation modes (choose parameters based on requirements)\n\n```bash\n# Mode 1: Full-database migration (migrate all tables in the database)\naliyun maxcompute create-mms-job \\\n  --source-id <sourceId> \\\n  --name <job_name> \\\n  --src-db-name <src_db_name> \\\n  --enable-schema-migration true \\\n  --enable-data-migration true \\\n  --enable-verification true \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n\n# Mode 2: Specified-table migration (migrate only the given tables)\naliyun maxcompute create-mms-job \\\n  --source-id <sourceId> \\\n  --name <job_name> \\\n  --src-db-name <src_db_name> \\\n  --tables table_a table_b \\\n  --enable-schema-migration true \\\n  --enable-data-migration true \\\n  --enable-verification true \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n\n# Mode 3: Partition-level migration (table name → partition filter expression; quote the value as needed by the shell when it contains special characters)\naliyun maxcompute create-mms-job \\\n  --source-id <sourceId> \\\n  --name <job_name> \\\n  --src-db-name <src_db_name> \\\n  --tables table_a table_b \\\n  --partition-filters table_a=ds=20260101 table_b=pt=hangzhou \\\n  --enable-schema-migration true \\\n  --enable-data-migration true \\\n  --enable-verification true \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\nParameter selection rules:\n\n- When the user says \"entire database / full database / all tables\": do not pass `--tables` or `--partition-filters`\n- When the user explicitly provides table names: pass `--tables`, do not pass `--partition-filters`\n- When the user explicitly provides partition conditions: you must pass both `--tables` and `--partition-filters` (each table corresponds to one `table_name=partition_filter_expression`)\n\n### ListMmsJobs — List migration jobs\n\n```bash\naliyun maxcompute list-mms-jobs \\\n  --source-id <sourceId> \\\n  --name <name> \\\n  --src-db-name <srcDbName> \\\n  --src-table-name <srcTableName> \\\n  --status <status> \\\n  --page-num 1 --page-size 20 \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\n\n| Parameter    | Type    | Description          |\n| ------------ | ------- | -------------------- |\n| name         | string  | Filter by job name   |\n| srcDbName    | string  | Filter by source database name |\n| srcTableName | string  | Filter by source table name    |\n| status       | string  | Filter by status     |\n| stopped      | integer | Whether stopped      |\n| timerId      | integer | Filter by timer ID   |\n\n\n### GetMmsJob — Get migration job details\n\n```bash\naliyun maxcompute get-mms-job \\\n  --source-id <sourceId> \\\n  --job-id <jobId> \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\n### StartMmsJob — Start/resume a migration job\n\n```bash\naliyun maxcompute start-mms-job \\\n  --source-id <sourceId> \\\n  --job-id <jobId> \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\n> Used only to resume a job that was stopped by StopMmsJob.\n\n### StopMmsJob — Stop a migration job\n\n```bash\naliyun maxcompute stop-mms-job \\\n  --source-id <sourceId> \\\n  --job-id <jobId> \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\n### RetryMmsJob — Retry a migration job\n\n```bash\naliyun maxcompute retry-mms-job \\\n  --source-id <sourceId> \\\n  --job-id <jobId> \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\n## Migration Task Management\n\n### ListMmsTasks — List migration tasks\n\n```bash\naliyun maxcompute list-mms-tasks \\\n  --source-id <sourceId> \\\n  --job-id <jobId> \\\n  --status <status> \\\n  --src-table-name <srcTableName> \\\n  --page-num 1 --page-size 20 \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\n\n| Parameter    | Type    | Description         |\n| ------------ | ------- | ------------------- |\n| jobId        | integer | Filter by job ID    |\n| jobName      | string  | Filter by job name  |\n| srcDbName    | string  | Filter by source database name |\n| srcTableName | string  | Filter by source table name    |\n| status       | string  | Filter by status    |\n| partition    | string  | Filter by partition |\n\n\n### GetMmsTask — Get migration task details\n\n```bash\naliyun maxcompute get-mms-task \\\n  --source-id <sourceId> \\\n  --task-id <taskId> \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\n### ListMmsTaskLogs — View migration task logs\n\n```bash\naliyun maxcompute list-mms-task-logs \\\n  --source-id <sourceId> \\\n  --task-id <taskId> \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\n### Global execution status observation (every N minutes)\n\nUsed for the fixed workflow of \"checking the overall migration status once every N minutes\" (default `N=5`, user-configurable):\n\n1. `list-mms-jobs`: filter for jobs currently executing (the status filter field is based on `-h`).\n2. `list-mms-tasks`: filter for tasks currently executing (can be narrowed by job/db/table; the status filter is based on `-h`).\n3. Output this round's results using the fixed template (consistent with `SKILL` Step 6): `Snapshot` → `Executing jobs` → `Executing tasks` → `Changes since last round` → `Risk notes` → `Next action`.\n4. If this round has **running job=0 and running task=0**: output the final \"observation complete\" report and then stop polling.\n\n## Timer Task Management (Timer)\n\n### CreateMmsTimer — Create a timer task\n\nSame as `create-mms-job`: **flat parameters**, no `--body`. See `aliyun maxcompute create-mms-timer -h` for the full list.\n\n```bash\naliyun maxcompute create-mms-timer \\\n  --source-id <sourceId> \\\n  --name <timer_name> \\\n  --src-db-name <src_db_name> \\\n  --schedule-type Daily \\\n  --value 02:30 \\\n  --enable-schema-migration true \\\n  --enable-data-migration true \\\n  --enable-verification true \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\n\n| CLI Parameter                               | Required | Description                              |\n| ------------------------------------------- | -------- | ---------------------------------------- |\n| `--name`                                    | Yes      | Timer task name                          |\n| `--src-db-name`                             | Yes      | Source database name                     |\n| `--schedule-type`                           | Yes      | Schedule type (e.g. `Daily` / `Hourly`, based on the `-h` enumeration) |\n| `--value`                                   | Yes      | `HH:MM` for `Daily`; minute `MM` for `Hourly` |\n| `--tables`                                  | No       | Multiple table names: `--tables t1 t2`   |\n| `--partition-filters`                       | No       | `table_name=partition_filter_expression`, see `-h` for multiple groups |\n| `--table-black-list` / `--table-white-list` | No       | Blacklist/whitelist tables for database-level timers |\n| `--enable-schema-migration` etc.            | No       | Same meaning as for jobs                 |\n\n\n### ListMmsTimers — List timer tasks\n\n```bash\naliyun maxcompute list-mms-timers \\\n  --source-id <sourceId> \\\n  --page-num 1 --page-size 20 \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\n### GetMmsTimer — Get timer task details\n\n```bash\naliyun maxcompute get-mms-timer \\\n  --source-id <sourceId> \\\n  --timer-id <timerId> \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\n### UpdateMmsTimer — Update a timer task\n\nSupports only flat fields such as schedule-related ones, with **no** `--body`. See `aliyun maxcompute update-mms-timer -h`.\n\n```bash\naliyun maxcompute update-mms-timer \\\n  --source-id <sourceId> \\\n  --timer-id <timerId> \\\n  --schedule-type Daily \\\n  --value 03:00 \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\n### ListMmsTimerLogs — View timer task execution logs\n\n```bash\naliyun maxcompute list-mms-timer-logs \\\n  --source-id <sourceId> \\\n  --timer-id <timerId> \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\n## Async Tasks\n\n### GetMmsAsyncTask — Check async task status\n\nUsed for the short polling after `**create-mms-job`** and similar commands return an `asyncTaskId`: until the status reaches a successful terminal state (such as `DONE`), then read `**objectId`** (or the object ID field agreed upon in the documentation) from the Body as the real `**job_id`**. Do not confuse this with a migration **Task** (table-level task).\n\n> **Note**: `create-mms-timer` returns `timerId` synchronously and does not require the use of `get-mms-async-task`.\n\n```bash\naliyun maxcompute get-mms-async-task \\\n  --source-id <sourceId> \\\n  --async-task-id <asyncTaskId> \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\nFile v0.0.2:references/commands-mapping-and-planning.md\n\n# MMS Commands — Mapping & Planning\n\nMMS provides API capabilities through the MaxCompute OpenAPI (product code `MaxCompute`, version `2022-01-04`).  \nCLI invocation format: `aliyun maxcompute <command> [params] --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}`\n\n## Target Mapping (CLI)\n\nWhen mapping an MMS **source database / source table** to a **MaxCompute target project, schema, and table name**, use the following commands (**you do not have to rely on the console alone**). The `db-id` / `table-id` must first be obtained from `list-mms-dbs`, `list-mms-tables`, or `get-mms-db`, `get-mms-table`.\n\n### UpdateMmsDb — Update database-level mapping\n\n```bash\naliyun maxcompute update-mms-db \\\n  --source-id <sourceId> \\\n  --db-id <dbId> \\\n  --dst-project-name <maxcomputeProject> \\\n  --dst-name <maxcomputeSchemaOrDstName> \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\nParameter meanings are as defined by `aliyun maxcompute update-mms-db -h` (including optional fields such as `--status`).\n\n### UpdateMmsTable — Update table-level mapping\n\n```bash\naliyun maxcompute update-mms-table \\\n  --source-id <sourceId> \\\n  --table-id <tableId> \\\n  --dst-project-name <maxcomputeProject> \\\n  --dst-schema-name <maxcomputeSchema> \\\n  --dst-name <maxcomputeTableName> \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\nOptional fields are as defined by `aliyun maxcompute update-mms-table -h`.\n\n> **Report back after execution (mandatory)**: After completing `update-mms-db` / `update-mms-table`, you must print to the user the \"before / after\" values of the **db schema name** (from the actual MMS read results before and after the update — do not guess). At the database level this usually corresponds to `dst_name`; at the table level, display the schema-related fields in the response. Print the before and after values even if they are unchanged or `null`.\n\n## Migration Planning (Aligned with SKILL Step 4)\n\n- **The planning output retains only two items**: `(1) the job partitioning plan` and `(2) whether incremental migration is needed`.\n- **Mapping decisions belong to the planning phase**: read the current mapping first, then decide. When the user has not specified target mapping fields, keep the current/default values and do not call the update API to rewrite identical values; when the user has specified target mapping fields, first perform a consistency comparison and only execute `update-mms-db` / `update-mms-table` when there is a mismatch. If already consistent, explicitly report back \"mapping is already consistent; no update was performed this time\".\n- **Check status during planning**: when deciding on a plan and determining \"how far the migration has progressed\", rely on the **migration status of tables / partitions on the metadata side**: use **`list-mms-tables` / `get-mms-table`** and **`list-mms-partitions` / `get-mms-partition`**, reading the returned fields (such as `status`, as defined by `-h`) in the order **database → table → partition**. **Do not** use only the job-level status from **`get-mms-job` / `list-mms-jobs`** as the sole basis. **`list-mms-tasks` / `get-mms-task`** are oriented toward **execution tasks** and are used for execution/troubleshooting drill-down; they are **not** the primary signal for the planning phase.\n- **Status enumeration (planning perspective)**: **tables** commonly have `INIT`, `DOING`, `FAILED`, `DONE`, `PART_DONE`; **partitions** commonly have `INIT`, `DOING`, `FAILED`, `DONE` (the actual JSON is authoritative; casing/aliases may vary by version, as defined by `-h` and the samples).\n- **Use counts for large-scale planning**: when the number of tables/partitions is extremely large, **do not enumerate everything by default**; prefer to output the **count for each status** (a histogram-style summary) to support planning and high-level progress — for example, for `list-mms-tables`, when supported, query with paging by status via **`--status`** and accumulate the counts (or read a total/count-type field in the response, if any); otherwise, bucket the unfiltered paged results by `status`. Apply the same approach to partitions within a single table or a narrowed scope using **`list-mms-partitions`**. When drill-down is needed, list the narrowed sets such as **FAILED / DOING**, or filter by the table names specified by the user.\n- **Whole-database first**: MMS skips tables/partitions that have already been migrated and are **unchanged**; during the planning phase, the default recommendation is **`create-mms-job` for the whole database** (`--src-db-name`, without passing `--tables`), unless the user explicitly wants only a table/partition scope.\n- **Daily increment**: ask the user whether **daily incremental** migration is needed after the initial migration. When needed, explain the main flow: **(1)** configure **scheduled metadata pulling** (e.g., daily) in the **data source console**, and **(2)** then configure **`create-mms-timer`** to trigger the **migration job** after the metadata refresh completes (commonly within the same database scope); identifying newly added/changed partitions depends on **metadata that has been refreshed on schedule**. CLI inventory-type tasks can be used for the initial migration/supplementary pulls, but **continuous increments** rely on \"scheduled data source + migration timer\" — do not just say \"inventory first, then timer\" while omitting the console scheduling configuration.\n- **Check the data source scheduling configuration before creating a timer**: when planning determines that increments are needed, first call `get-mms-data-source --with-config true` to read the metadata scheduled-refresh time/frequency (fields are as defined by `-h` / the actual response). If it is not configured or the time window cannot be confirmed, first remind the user to complete the configuration in the console, then proceed with timer creation.\n- **Metadata scheduling**: configure **scheduled metadata pulling** in the **MaxCompute console → Data Source** (this is not a subcommand of this CLI). If not configured, guide the user to open the web page to configure it, and have the user tell you the **planned time**.\n- **Scheduled task timing**: the `--value` (and `--schedule-type`) of `create-mms-timer` should be scheduled to run **after the data source metadata scheduled refresh completes** (leave a buffer), using the real schedule provided by the user.\n- **Execution order after confirmation**: after the user confirms adopting incremental migration, first create `create-mms-timer`, then ask whether `trigger-mms-timer` should be executed immediately. `create-mms-timer` likewise must not be executed until it has passed Step 4 planning confirmation.\n\nIncremental-related CLI: for `create-mms-job`, see **`--increment`** (`aliyun maxcompute create-mms-job -h`); use `create-mms-timer` for daily scheduling (`create-mms-timer -h`), commonly within the same scope as the whole-database baseline.\n\nFile v0.0.2:references/mms-source-id-and-resolution.md\n\n# MMS: `source_id` resolution & name → ID rules\n\nThis reference expands the **bounded `source_id` discovery** and **metadata lookup** rules summarized in `SKILL.md`. Keep `SKILL.md` short; use this file for the full checklist.\n\n## Name → ID resolution (MMS uses IDs)\n\n| Resource | ID field | Typical resolution |\n| --- | --- | --- |\n| Data source | `source_id` | `list-mms-data-sources` (optionally `--name`) |\n| Job | `job_id` | `list-mms-jobs --source-id <id>` (optionally `--name`) |\n| Task | `task_id` | `list-mms-tasks --source-id <id>` (filters vary) |\n\n### Name filter first (must)\n\nWhen the user already provides a resource **name** and asks to resolve an ID, **do not start with unfiltered list-all**.  \nUse the corresponding `list-* --name <token>` first, then apply strict-equality checks (LIKE warning below).\n\n### LIKE matching warning\n\nMany `list-* --name ...` filters are **SQL LIKE** on the backend. Treat results as **candidates** and re-check **strict equality** on the intended field before proceeding.\n\n### Disambiguation rules\n\n1. Exactly one strict match → use it.\n2. Zero matches → tell the user and suggest corrections.\n3. Otherwise → show candidates and ask the user to pick.\n\n## Table lookup when `source_id` is known\n\nWhen the user already has **`source_id`** (in message or session) and wants to **find or confirm a table** in MMS metadata:\n\n1. **[MUST NOT]** call `list-mms-dbs` first just to “discover which db holds the table” when the user did **not** give `srcDbName` / `db_name` — the same table name can exist in **multiple** databases; guessing a db from a db list is unsafe.\n2. Prefer **`list-mms-tables`** with `--source-id` plus the tightest **`--name`** filter for the user’s table (remember LIKE → **strict** equality on the returned name field). **Omit `db-name` / `dbId`** until you must narrow **duplicate** hits.\n3. If several rows still match after strict checks (same table name, different db/schema), show `(db/schema, table)` candidates and ask which `srcDbName` (or equivalent) they mean, then scope further reads to that db.\n\n## Missing `source_id` when creating jobs/timers\n\nIf the user wants `create-mms-job` / `create-mms-timer` but only provides `srcDbName` / `tables` / `partitionFilters` (or only `table_name`) and **both** the session context and the planned create **CLI flags** lack `source_id`, use this section **instead of** improvising extra discovery.\n\n### Hard limits (must obey)\n\n1. **Single inventory pass (for unknown source name)**: if the user did **not** provide a usable data-source name, call `list-mms-data-sources` **once** without `--name`. Let **N** = total data sources returned (if the API paginates, finish pagination **once**, then count). **Do not** re-list all sources to “double-check” unless the call failed technically.\n\n2. **If N ≥ 3 — no metadata guessing**:\n   - **[MUST NOT]** call `list-mms-dbs`, `list-mms-tables`, partition listing, or `list-mms-tasks` **to infer** `source_id` from db/table/partition/task names.\n   - **[MUST]** when the user already supplied a data-source name and you are resolving name → ID, start with `list-mms-data-sources --name <narrow token>` (do not list all first). Treat LIKE hits as **candidates** and require **strict** equality on the intended field before accepting.\n   - **Otherwise**: print a **short** candidate table (`source_id` + safe display name) and ask the user to reply with **one** `source_id` (or an unambiguous name). **Stop** until they answer.\n\n3. **If N < 3 — bounded auto-resolve**:\n   - **[MUST NOT]** repeat broad listing across sources after you already have enough evidence to decide or to know it is ambiguous.\n   - For each remaining candidate `source_id`: `list-mms-dbs` **at most once** (prefer filters that match the user’s `srcDbName` when they gave a DB name).\n   - `list-mms-tables` / partition reads **only** for `(source_id, db)` pairs still in play, and **only** to break ties — not to browse catalogs.\n   - Set `source_id` **only** if **exactly one** candidate remains after **strict** db/table equality (see disambiguation rules above). If zero or >1 remain → **ask the user**; do not chain more list calls “just in case”.\n\n4. **Table-only input** (no `source_id`, no `srcDbName`): same **N ≥ 3** ban on cross-source metadata guessing. For **N < 3**, you may spend **at most** one tight metadata pass per candidate (e.g. one `list-mms-dbs` then one `list-mms-tables` scoped to the smallest plausible db set) — then decide or ask; **no open-ended search**.\n\n5. **Task-oriented exception**: `list-mms-tasks --src-table-name ...` is allowed for **progress/troubleshooting** when the user is clearly asking for task status, not for choosing `source_id` for a **new** `create-mms-job` / `create-mms-timer`. For **new** job/timer creation without `source_id`, still follow items 1–4.\n\nFile v0.0.2:references/openapi-checklist.md\n\n# MMS OpenAPI Checklist\n\nScope: MaxCompute MMS APIs currently covered by this repository (`MaxCompute`, version `2022-01-04`).\n\n\n| OpenAPI                   | Check | Description                                            |\n| ------------------------- | ----- | ----------------------------------------------------- |\n| ListMmsDataSources        |       | List data sources (supports filtering by name/type/region) |\n| GetMmsDataSource          |       | View data source details (optionally with with-config) |\n| CreateMmsFetchMetadataJob |       | Create a metadata inventory job                        |\n| GetMmsFetchMetadataJob    |       | Query the status of a metadata inventory job           |\n| ListMmsDbs                |       | List the source-side database inventory                |\n| GetMmsDb                  |       | Query database details (including mapping fields)       |\n| ListMmsTables             |       | List the table inventory (filterable by name/status, etc.) |\n| GetMmsTable               |       | Query table details (including migration-related status) |\n| ListMmsPartitions         |       | List the partition inventory                           |\n| GetMmsPartition           |       | Query partition details                                |\n| UpdateMmsDb               |       | Update database-level target mapping (project/schema)   |\n| UpdateMmsTable            |       | Update table-level target mapping (project/schema/table) |\n| CreateMmsJob              |       | Create a migration job (whole-database/table-level/partition-level) |\n| ListMmsJobs               |       | List migration jobs                                    |\n| GetMmsJob                 |       | Query migration job details                            |\n| StartMmsJob               |       | Start/resume a stopped job                             |\n| StopMmsJob                |       | Stop a job                                             |\n| RetryMmsJob               |       | Retry a job                                            |\n| ListMmsTasks              |       | List migration tasks                                   |\n| GetMmsTask                |       | Query migration task details                           |\n| ListMmsTaskLogs           |       | Query migration task logs                              |\n| CreateMmsTimer            |       | Create a scheduled task (periodically triggered migration) |\n| ListMmsTimers             |       | List scheduled tasks                                   |\n| GetMmsTimer               |       | Query scheduled task details                           |\n| UpdateMmsTimer            |       | Update scheduled task scheduling parameters            |\n| ListMmsTimerLogs          |       | Query scheduled task execution logs                    |\n| TriggerMmsTimer           |       | Manually trigger a scheduled task to run once          |\n| GetMmsAsyncTask           |       | Query async task status and parse the object id        |\n\n\nNotes:\n\n- `Check` column is intentionally left blank for manual filling.\n- API names are listed in OpenAPI CamelCase style; CLI usually maps to kebab-case commands.\n\nFile v0.0.2:references/ram-policies.md\n\n# RAM Policies for MaxCompute Migration Service (MMS)\n\nThis document describes in detail the permission configuration required by MMS, including RAM permissions and MaxCompute project permissions.\n\n## Permission Configuration Overview\n\nMMS requires three categories of permissions to be configured:\n\n| Permission Type | Grantee | Description |\n|---------|---------|------|\n| Service-linked role | Alibaba Cloud account | The role MMS uses to access cloud resources |\n| RAM permissions | The RAM user performing the migration | MMS operation permissions |\n| MaxCompute project permissions | Service-linked role | Data read/write permissions |\n\n## 1. Service-Linked Role\n\nBefore using MMS for the first time, you must create the service-linked role:\n\n**Role name**: `AliyunServiceRoleForMaxComputeMMS`\n\n**How to create it**:\n\n### Via the MaxCompute console\n1. Log in to the MaxCompute console\n2. Go to Data Transmission > Migration Service\n3. Click Add Data Source\n4. Confirm creation in the dialog that appears\n\n### Via the RAM console\n1. Log in to the RAM console > Identity Management > Roles\n2. Click Create Role > Create Service-Linked Role\n3. Select the trusted cloud service: `AliyunServiceRoleForMaxComputeMMS`\n\n> **Note**: The RAM user needs the `AliyunRAMFullAccess` permission to create the service-linked role\n\n## 2. RAM Permission Policies (for the RAM user)\n\n### 2.1 Full MMS Operation Permissions\n\n```json\n{\n  \"Version\": \"1\",\n  \"Statement\": [\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"odps:ListMmsDataSources\",\n        \"odps:CreateMmsDataSource\",\n        \"ram:GetRole\",\n        \"odps:GetMmsDataSource\",\n        \"odps:UpdateMmsDataSource\",\n        \"odps:CreateMmsFetchMetadataJob\",\n        \"odps:GetMmsFetchMetadataJob\",\n        \"odps:ListMmsFetchMetadataJobLogs\",\n        \"odps:ListMmsDbs\",\n        \"odps:GetMmsDb\",\n        \"odps:ListMmsTables\",\n        \"odps:GetMmsTable\",\n        \"odps:ListMmsPartitions\",\n        \"odps:GetMmsPartition\",\n        \"odps:ListMmsJobs\",\n        \"odps:GetMmsJob\",\n        \"odps:CreateMmsJob\",\n        \"odps:StartMmsJob\",\n        \"odps:StopMmsJob\",\n        \"odps:RetryMmsJob\",\n        \"odps:ListMmsTasks\",\n        \"odps:GetMmsTask\",\n        \"odps:ListMmsTaskLogs\",\n        \"odps:StopMmsTask\",\n        \"odps:StartMmsTask\",\n        \"odps:RetryMmsTask\",\n        \"odps:GetMmsAsyncTask\",\n        \"odps:GetMmsProgress\",\n        \"odps:GetMmsSpeed\",\n        \"odps:CreateMmsAuthFile\",\n        \"odps:ListMmsAgents\",\n        \"odps:ListMmsTimers\",\n        \"odps:GetMmsTimer\",\n        \"odps:UpdateMmsTimer\",\n        \"odps:ListMmsTimerLogs\",\n        \"odps:CreateMmsTimer\",\n        \"odps:UpdateMmsTables\",\n        \"odps:UpdateMmsTable\",\n        \"odps:UpdateMmsDb\",\n        \"odps:ListNetworkLinks\"\n      ],\n      \"Resource\": \"*\"\n    }\n  ]\n}\n```\n\n### 2.2 MMS Source Data Management Permissions\n\n```json\n{\n  \"Version\": \"1\",\n  \"Statement\": [\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"odps:ListMmsDataSources\",\n        \"odps:CreateMmsDataSource\",\n        \"ram:GetRole\",\n        \"odps:GetMmsDataSource\",\n        \"odps:UpdateMmsDataSource\",\n        \"odps:CreateMmsFetchMetadataJob\",\n        \"odps:GetMmsFetchMetadataJob\",\n        \"odps:ListMmsFetchMetadataJobLogs\",\n        \"odps:ListMmsDbs\",\n        \"odps:GetMmsDb\",\n        \"odps:ListMmsTables\",\n        \"odps:GetMmsTable\",\n        \"odps:ListMmsPartitions\",\n        \"odps:GetMmsPartition\",\n        \"odps:GetMmsAsyncTask\",\n        \"odps:GetMmsProgress\",\n        \"odps:GetMmsSpeed\",\n        \"odps:CreateMmsAuthFile\",\n        \"odps:ListMmsAgents\",\n        \"odps:UpdateMmsTables\",\n        \"odps:UpdateMmsTable\",\n        \"odps:UpdateMmsDb\"\n      ],\n      \"Resource\": \"*\"\n    }\n  ]\n}\n```\n\n### 2.3 MMS Migration Job Management Permissions\n\n```json\n{\n  \"Version\": \"1\",\n  \"Statement\": [\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"odps:ListMmsDataSources\",\n        \"odps:GetMmsDataSource\",\n        \"odps:CreateMmsFetchMetadataJob\",\n        \"odps:GetMmsFetchMetadataJob\",\n        \"odps:ListMmsFetchMetadataJobLogs\",\n        \"odps:ListMmsDbs\",\n        \"odps:GetMmsDb\",\n        \"odps:ListMmsTables\",\n        \"odps:GetMmsTable\",\n        \"odps:ListMmsPartitions\",\n        \"odps:GetMmsPartition\",\n        \"odps:ListMmsJobs\",\n        \"odps:GetMmsJob\",\n        \"odps:CreateMmsJob\",\n        \"odps:StartMmsJob\",\n        \"odps:StopMmsJob\",\n        \"odps:RetryMmsJob\",\n        \"odps:ListMmsTasks\",\n        \"odps:GetMmsTask\",\n        \"odps:ListMmsTaskLogs\",\n        \"odps:StopMmsTask\",\n        \"odps:StartMmsTask\",\n        \"odps:RetryMmsTask\",\n        \"odps:GetMmsAsyncTask\",\n        \"odps:GetMmsProgress\",\n        \"odps:GetMmsSpeed\",\n        \"odps:ListMmsTimers\",\n        \"odps:GetMmsTimer\",\n        \"odps:UpdateMmsTimer\",\n        \"odps:ListMmsTimerLogs\",\n        \"odps:CreateMmsTimer\"\n      ],\n      \"Resource\": \"*\"\n    }\n  ]\n}\n```\n\n## 3. MaxCompute Project Permissions (for the service-linked role)\n\nIn the target project, you need to grant data operation permissions to the service-linked role:\n\n### 3.1 Add the Service-Linked Role to the Project\n\n```sql\nUSE <target_project>;\nADD USER `RAM$<account_id>:role/AliyunServiceRoleForMaxComputeMMS`;\n```\n\n### 3.2 Coarse-Grained Authorization (Recommended)\n\n```sql\n-- Grant the admin role\nGRANT admin TO USER `RAM$<account_id>:role/AliyunServiceRoleForMaxComputeMMS`;\n```\n\n### 3.3 Fine-Grained Authorization\n\n**Project-level permissions:**\n\n```sql\nGRANT Read,Write,List,CreateTable,CreateInstance,CreateFunction,CreateResource\nON project <project_name> TO USER `RAM$<account_id>:role/AliyunServiceRoleForMaxComputeMMS`;\n\n-- Or grant all permissions\nGRANT ALL ON project <project_name> TO USER `RAM$<account_id>:role/AliyunServiceRoleForMaxComputeMMS`;\n```\n\n**Table-level permissions:**\n\n```sql\nGRANT Describe,Select,Alter,Update,Drop,ShowHistory\nON table <table_name> TO USER `RAM$<account_id>:role/AliyunServiceRoleForMaxComputeMMS`;\n\n-- Or grant all permissions\nGRANT All ON table <table_name> TO USER `RAM$<account_id>:role/AliyunServiceRoleForMaxComputeMMS`;\n```\n\n**Instance-level permissions:**\n\n```sql\nGRANT Read,Write ON instance <instance_id>\nTO USER `RAM$<account_id>:role/AliyunServiceRoleForMaxComputeMMS`;\n```\n\n### 3.4 Permission Reference\n\n| Object Type | Supported Permissions |\n|---------|-----------|\n| Project | Read, Write, List, CreateTable, CreateInstance, CreateFunction, CreateResource, All |\n| Table | Describe, Select, Alter, Update, Drop, ShowHistory, All |\n| Instance | Read, Write, All |\n| Resource | Read, Write, Download, Delete |\n| Function | Read, Write, Download, Execute, Delete |\n\n## 4. Quick Authorization Options\n\n| Scenario | Recommended Option |\n|-----|---------|\n| Operations with the primary account | No additional RAM permission configuration needed |\n| RAM user with full MaxCompute permissions | Grant `AliyunMaxComputeFullAccess` |\n| RAM user with MMS operation permissions only | Use the custom permission policies above |\n| Creating the service-linked role | The RAM user needs `AliyunRAMFullAccess` |\n\n## 5. Configuring Permissions via the Console\n\n### Configuring Project Permissions in the MaxCompute Console\n\n1. Log in to the MaxCompute console\n2. Go to Management Configuration > Project Management\n3. Click Manage for the target project\n4. Select the Role Permissions tab\n5. Create a role and configure its permissions\n6. Add the service-linked role in Member Management\n\n## 6. Permission Troubleshooting\n\n### Common Errors\n\n| Error Message | Cause | Solution |\n|---------|------|---------|\n| Forbidden.RAM | The RAM user lacks MMS operation permissions | Add the MMS permission policy |\n| Access Denied | The service-linked role has not been granted project permissions | Add the user in the project and grant permissions |\n| ServiceLinkedRole not found | The service-linked role has not been created | Create AliyunServiceRoleForMaxComputeMMS |\n\n### Permission Checklist\n\n- [ ] The service-linked role has been created\n- [ ] The RAM user has been granted MMS operation permissions\n- [ ] The service-linked role has been added to the target project\n- [ ] The service-linked role has been granted data operation permissions\n- [ ] The target project has been bound to a Quota resource\n\nFile v0.0.2:references/verification-method.md\n\n# Verification Method for MaxCompute Migration Service (MMS)\n\nThis document provides steps to verify the success of MMS migration operations.\n\n## Migration Job Verification\n\n### Step 1: Check Migration Job Status\n\nVerify through the MaxCompute console:\n\n1. Log in to the [MaxCompute console](https://maxcompute.console.aliyun.com/)\n2. Select the region and navigate to **Data Transfer > Migration Service > Migration Jobs**\n3. Check the job status:\n   - **Running**: The job is being executed\n   - **Succeeded**: The job has completed\n   - **Failed**: The job execution failed; review the error message\n\n### Step 2: Verify Data Count\n\nVerify the number of data rows after migration:\n\n```sql\n-- Execute in the MaxCompute project\nSELECT COUNT(*) FROM <target_table>;\n```\n\nCompare with the row count on the source side:\n\n```sql\n-- Execute on the source data source (such as Hive)\nSELECT COUNT(*) FROM <source_table>;\n```\n\n### Step 3: Verify Data Sample\n\nVerify data content by sampling:\n\n```sql\n-- Execute in the MaxCompute project\nSELECT * FROM <target_table> LIMIT 10;\n```\n\nCheck whether the data format and field values are correct.\n\n### Step 4: Verify Partition Data (if applicable)\n\nVerify partition data:\n\n```sql\n-- View the partition list\nSHOW PARTITIONS <target_table>;\n\n-- Verify the partition data volume\nSELECT COUNT(*) FROM <target_table> WHERE <partition_column> = '<partition_value>';\n```\n\n### Step 5: Check Data Validation Results\n\nIf data validation is enabled, review the validation results:\n\n1. Navigate to **Migration Service > Migration Jobs**\n2. Click the job name to view task details\n3. Review the validation results in the **Task Logs**\n\nValidation method: Compare the `SELECT COUNT(*)` results of the source and target sides.\n\n## Verification Commands Summary\n\n| Verification | Command/Method | Expected Result |\n|-------------|----------------|-----------------|\n| Job Status | View in console | Status is \"Succeeded\" |\n| Data Count | `SELECT COUNT(*)` | Source and target match |\n| Data Content | `SELECT * LIMIT N` | Data format is correct |\n| Partition Data | `SHOW PARTITIONS` | Partitions are complete |\n| Data Validation | Task Logs | Validation passed |\n\n## Troubleshooting\n\n### Migration Job Failed\n\n1. Review the error logs to identify the cause of failure\n2. Common issues:\n   - Network unreachable: Check the network configuration\n   - Insufficient permissions: Check the RAM permissions\n   - Source unavailable: Check the data source status\n   - Insufficient resources: Check the MaxCompute CU resources\n\n### Data Count Mismatch\n\n1. Check whether any migration tasks failed\n2. Check whether the partition filter conditions are correct\n3. Check whether the source data has changed\n4. Re-run the data validation\n\n### Data Format Error\n\n1. Check whether the field type mappings are correct\n2. Check the character encoding settings\n3. Check the data source configuration\n\nFile v0.0.2:skill-card.md\n\n## Description: <br>\nGuides agents through MaxCompute Migration Service planning, source and metadata lookup, target mapping, job and timer creation, monitoring, and managed migration mode with confirmation gates. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[sdk-team](https://clawhub.ai/user/sdk-team) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers, data engineers, and cloud administrators use this skill to plan and operate migrations from supported external data sources into Alibaba Cloud MaxCompute. It helps resolve MMS source identifiers, inspect metadata, configure target mappings, draft and run Aliyun CLI commands, monitor jobs and tasks, and verify migration results. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: First-run setup may ask users to run a remote Aliyun CLI installer and enable automatic plugin installation in a high-impact cloud administration context. <br>\nMitigation: Install only in a controlled admin environment; prefer package-manager or internally approved Aliyun CLI and plugin versions, and review or disable automatic plugin installation where appropriate. <br>\nRisk: Migration operations can create, start, stop, retry, or schedule cloud data movement jobs with broad operational impact. <br>\nMitigation: Use least-privilege, preferably short-lived credentials scoped to the migration; require explicit user confirmation before create/start/stop/delete actions; and verify mappings, source IDs, and job names before execution. <br>\nRisk: Incorrect source ID resolution, target mapping, or metadata assumptions could migrate the wrong scope or report misleading progress. <br>\nMitigation: Apply bounded source_id discovery, strict equality checks for LIKE-based name matches, current mapping inspection before updates, and table/partition status checks before job creation. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/sdk-team/skills/alibabacloud-maxcompute-migration-service) <br>\n- [MMS Overview](https://help.aliyun.com/zh/maxcompute/user-guide/migration-service-mms) <br>\n- [MMS Preparation](https://help.aliyun.com/zh/maxcompute/user-guide/mms-preparation) <br>\n- [Manage Data Sources](https://help.aliyun.com/zh/maxcompute/user-guide/manage-data-sources) <br>\n- [Create and Execute Migration Jobs](https://help.aliyun.com/zh/maxcompute/user-guide/create-and-execute-a-migration-job) <br>\n- [Migration Monitoring](https://help.aliyun.com/zh/maxcompute/user-guide/migration-observation) <br>\n- [CLI Installation Guide](references/cli-installation-guide.md) <br>\n- [MMS Commands - Data Source and Metadata](references/commands-datasource-and-metadata.md) <br>\n- [MMS Commands - Mapping and Planning](references/commands-mapping-and-planning.md) <br>\n- [MMS Commands - Job, Timer, Task and Async](references/commands-job-timer-task.md) <br>\n- [MMS Source ID Resolution Rules](references/mms-source-id-and-resolution.md) <br>\n- [RAM Policies for MMS](references/ram-policies.md) <br>\n- [Verification Method](references/verification-method.md) <br>\n- [OpenAPI Checklist](references/openapi-checklist.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Guidance, Markdown, Shell commands, Configuration, Analysis] <br>\n**Output Format:** [Markdown responses with Aliyun CLI command blocks, confirmation tables, status reports, and verification steps] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Commands should include the required MMS user-agent, use bounded lookup rules, avoid plaintext credential handling, and require explicit confirmation before create/start/stop/delete actions.] <br>\n\n## Skill Version(s): <br>\n0.0.2 (source: server release metadata) <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 v0.0.1: 8 files, 18603 bytes\n\nFiles: references/acceptance-criteria.md (3281b), references/cli-installation-guide.md (2648b), references/ram-policies.md (7574b), references/related-commands.md (9508b), references/verification-method.md (2542b), skill-card.md (3313b), SKILL.md (24275b), _meta.json (160b)\n\nFile v0.0.1:SKILL.md\n\n---\nname: alibabacloud-maxcompute-migration-service\ndescription: |\n  Alicloud MaxCompute Migration Service (MMS) Skill. Use for migrating data from various data sources (Hive, BigQuery, Databricks, Snowflake, Redshift, MaxCompute) to MaxCompute.\n  Triggers: \"MMS\", \"MaxCompute Migration Service\", \"数据迁移到MaxCompute\", \"MaxCompute数据迁移\", \"Hive迁移到MaxCompute\", \"BigQuery迁移\", \"Databricks迁移\", \"Snowflake迁移\", \"Redshift迁移\", \"盘点\", \"扫描\", \"迁移作业\", \"迁移任务\", \"定时器\", \"数据搬迁\", \"搬站\", \"迁移状态\", \"迁移进度\", \"目标映射\", \"增量迁移\", \"跨项目\", \"跨地域\".\n---\n\n# MMS Data Migration Management\n\nYou are a **data migration expert** for MaxCompute Migration Service (MMS).\nHelp users manage the full lifecycle of data migration from external data sources to MaxCompute.\n\n> **[MUST] API Product Identifier**: All MMS APIs belong to the **MaxCompute** product (version `2022-01-04`).\n> CLI command format: `aliyun maxcompute <command> [params]`.\n> **Do NOT** use dataworks, IMM, or any other product's APIs to operate MMS resources.\n\n> **Pre-check: Aliyun CLI >= 3.3.1 required**\n> Run `aliyun version` to verify >= 3.3.1. If not installed or version too low,\n> see `references/cli-installation-guide.md` for installation instructions.\n> Then [MUST] run the following setup commands:\n> ```bash\n> aliyun plugin update Chinese             # update plugin to latest version\n> aliyun configure set --auto-plugin-install true   # enable automatic plugin installation\n> aliyun configure ai-mode enable           # enable AI-Mode for CLI tracking\n> aliyun configure ai-mode set-user-agent Chinese   # set User-Agent for AI-Mode\n> ```\n>\n> **[MUST] After workflow ends** (task complete or session ending), disable AI-Mode:\n> ```bash\n> aliyun configure ai-mode disable          # disable AI-Mode after workflow completes\n> ```\n\n## Core Principles\n\n1. **Safety First** — Confirm user intent before executing create, start, stop, or delete operations\n   - **Credential Masking**: You MUST sanitize sensitive fields (replace with `********`) in ALL API responses **immediately after receiving them** — before displaying to user, writing to any file (including intermediate/raw response files in `ran_scripts/`), or any further processing. No file on disk should ever contain plaintext credentials. Sensitive fields include:\n     - All field values matching keys: `password`, `secret`, `token`, `access.id`, `access.key`, `accessKeyId`, `accessKeySecret`\n     - All string values starting with `LTAI` (Alibaba Cloud AccessKey ID pattern)\n   - **Implementation**: Pipe API responses through `jq` sanitization **immediately** — the unsanitized response must never be written to disk or shown to the user. Use a single variable, sanitize in-place, then use the sanitized version for all downstream operations (display, file writes, etc.):\n     ```bash\n     response=$(aliyun maxcompute ... 2>&1)\n     response=$(echo \"$response\" | jq 'walk(if type == \"object\" then with_entries(if (.key | test(\"password|secret|token|access.id|access.key|accessKeyId|accessKeySecret\"; \"i\")) or (.value | type == \"string\" and test(\"^LTAI\")) then .value = \"********\" else . end) else . end)')\n     # Now safe to use: echo \"$response\", write to file, display to user, etc.\n     ```\n2. **Guided Workflow** — Guide users unfamiliar with migration through the standard workflow step by step\n3. **State Awareness** — Query current state before operations to avoid acting on resources in incorrect states\n4. **Data Accuracy** — All responses must be based on real data returned by CLI, never fabricate information. When presenting IDs, IPs, ports, names, or other fields, you MUST directly quote the original API return values — never manually re-type them\n5. **Concept Clarification** — When user intent is ambiguous between \"migration Job\" and \"migration Task\", proactively ask for clarification\n6. **ID/Name Resolution** — Users often provide names rather than IDs; resolve via list APIs first\n\n## Concepts\n\n### Job vs Task\n\nTwo commonly confused concepts in MMS:\n\n| Concept | Description | CLI Command Prefix |\n|---------|-------------|-------------------|\n| Migration Job | A migration plan created by the user, containing migration config; one job can contain multiple tasks | `*-mms-job*` |\n| Migration Task | A concrete migration instance produced when a job runs, corresponding to a single table or partition | `*-mms-task*` |\n\n**How to determine**:\n- User says \"create migration\", \"migrate entire database\", \"migrate some tables\" → operate on **Job**\n- User says \"check migration progress\", \"check a table's migration status\", \"retry failed\" → clarify whether Job or Task\n- User provides `job_id` → operate on **Job**\n- User provides `task_id` or asks about \"a specific table's migration\" → operate on **Task**\n\n**When ambiguous, proactively ask**:\n> \"Are you referring to a migration Job or a specific migration Task? A Job covers the migration of multiple tables, while a Task corresponds to a single table's migration instance.\"\n\n### Name to ID Resolution\n\nMMS APIs identify resources by ID, but users typically provide names. Resolution workflow:\n\n| Resource | ID Param | Query Command |\n|----------|----------|---------------|\n| Data Source | `source_id` | `list-mms-data-sources --name <name>` |\n| Migration Job | `job_id` | `list-mms-jobs --source-id <id> --name <name>` |\n| Migration Task | `task_id` | `list-mms-tasks --source-id <id> --src-table-name <name>` |\n\n> **Note**: The `--name` parameter uses **fuzzy matching (LIKE)** on the backend and may return multiple results.\n\n**Matching Rules**:\n1. Exactly **one** result with a name that perfectly matches what the user provided → use it directly\n2. Empty result set → inform the user and suggest checking the name\n3. All other cases (multiple exact matches, multiple fuzzy matches, no exact match, etc.) → list all results and ask the user to confirm\n\n## Supported Regions\n\nMMS is available in: China East 1 (Hangzhou), China East 2 (Shanghai), China North 2 (Beijing), China North 3 (Zhangjiakou), China North 6 (Ulanqab), China South 1 (Shenzhen), China Southwest 1 (Chengdu), China (Hong Kong), Indonesia (Jakarta), Singapore, Japan (Tokyo), US (Virginia), Germany (Frankfurt).\n\n> **Important**: Stop **write operations** on source tables and partitions before migration to avoid data verification failures.\n\n## Supported Data Source Types\n\n| Data Source | Type Identifier | Description |\n|-------------|----------------|-------------|\n| Apache Hive | `Hive` | Hive Metastore + HDFS, the most common migration scenario |\n| Google BigQuery | `BigQuery` | Google Cloud data warehouse |\n| Snowflake | `Snowflake` | Snowflake cloud data warehouse |\n| Amazon Redshift | `Redshift` | AWS data warehouse |\n| Databricks | `Databricks` | Databricks Lakehouse |\n| MaxCompute | `MaxCompute` | Cross-project/cross-region migration between MaxCompute projects |\n\n## Prerequisites\n\n### 1. Service-Linked Role\n\nBefore using MMS for the first time, create the service-linked role `AliyunServiceRoleForMaxComputeMMS`:\n\n**Via MaxCompute Console:**\n1. Log in to MaxCompute Console > Data Transfer > Migration Service\n2. Click Add Data Source — the system will prompt to create the service-linked role\n\n**Via RAM Console:**\n1. Log in to RAM Console > Identities > Roles\n2. Click Create Role > Create Service-Linked Role\n3. Select trusted service: `AliyunServiceRoleForMaxComputeMMS`\n\n> **Note**: RAM users need `AliyunRAMFullAccess` permission to create service-linked roles\n\n### 2. MaxCompute Project\n\n- A target MaxCompute project is required\n- The project must be bound to a **Data Transfer Service** type Quota resource\n\n### 3. VPC Network Connection\n\n- A VPC network connection (passthrough) must be established\n- Ensure network access to the source data (via public NAT gateway or Express Connect)\n\n### 4. MaxCompute Data Permissions\n\nGrant data operation permissions to the service-linked role in the target project:\n\n```sql\n-- Add service-linked role to project\nUSE <target_project>;\nADD USER `RAM$<account_id>:role/AliyunServiceRoleForMaxComputeMMS`;\n\n-- Option 1: Coarse-grained authorization (recommended)\nGRANT admin TO USER `RAM$<account_id>:role/AliyunServiceRoleForMaxComputeMMS`;\n\n-- Option 2: Fine-grained authorization\nGRANT Read,Write,List,CreateTable,CreateInstance,CreateFunction,CreateResource\nON project <project_name> TO USER `RAM$<account_id>:role/AliyunServiceRoleForMaxComputeMMS`;\n```\n\n## Authentication\n\n> **Pre-check: Alibaba Cloud Credentials Required**\n>\n> **Security Rules:**\n> - **NEVER** read, echo, or print AK/SK values (e.g., `echo $ALIBABA_CLOUD_ACCESS_KEY_ID` is FORBIDDEN)\n> - **NEVER** ask the user to input AK/SK directly in the conversation or command line\n> - **NEVER** use `aliyun configure set` with literal credential values\n> - **ONLY** use `aliyun configure list` to check credential status\n>\n> ```bash\n> aliyun configure list\n> ```\n> Check the output for a valid profile (AK, STS, or OAuth identity).\n>\n> **If no valid profile exists, STOP here.**\n> 1. Obtain credentials from [Alibaba Cloud Console](https://ram.console.aliyun.com/manage/ak)\n> 2. Configure credentials **outside of this session** (via `aliyun configure` in terminal or environment variables in shell profile)\n> 3. Return and re-run after `aliyun configure list` shows a valid profile\n\n## Migration Workflow\n\nStandard migration workflow — enter at any step based on user needs:\n\n```\n1. Create Data Source → 2. Scan Metadata → 3. Configure Target Mapping → 4. Create Job → 5. Monitor Tasks → 6. Data Verification\n        ↑                                                                                      ↓\n   Console Setup                                                                    Timer (Incremental Migration)\n```\n\n> **IMPORTANT: Parameter Confirmation** — Before executing any command or API call,\n> ALL user-customizable parameters (e.g., RegionId, Project names, Data source configuration,\n> table names, partition specifications, etc.) MUST be confirmed with the user.\n> Do NOT assume or use default values without explicit user approval.\n\n### Step 1: Data Source Management\n\n> **[MUST] Guide users to the console to create data sources** — do NOT create via API.\n> Data sources involve complex configurations (network links, credentials, etc.) that are more intuitive and secure via the console.\n>\n> Console URL: `https://maxcompute.console.aliyun.com/{region}/mma/datasource`\n> (replace `{region}` with the user's region, e.g., `cn-hangzhou`, `cn-shanghai`)\n\nAfter creating in the console, verify via CLI:\n\n```bash\n# List data sources\naliyun maxcompute list-mms-data-sources --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n\n# Find data source by name (to get source_id)\naliyun maxcompute list-mms-data-sources --name <name> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n\n# Get data source details with config (requires source_id)\naliyun maxcompute get-mms-data-source --source-id <sourceId> --with-config true --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n```\n\n**Looking up data source config by name**: Users typically only know the data source name. Resolve `source_id` first:\n1. `list-mms-data-sources --name <name>` → extract `source_id` from results\n2. `get-mms-data-source --source-id <sourceId> --with-config true` → view full config\n\n> Warning: `--with-config true` response contains plaintext credentials (AccessKey ID, passwords, etc.). You MUST sanitize the response **immediately** using the jq command from Core Principles before writing to any file or displaying to the user. Never save unsanitized API responses to disk.\n\n### Step 2: Metadata Scan\n\nScan the data source to discover databases, tables, and partitions.\n\n```bash\n# Initiate metadata scan\naliyun maxcompute create-mms-fetch-metadata-job --source-id <sourceId> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n\n# Check scan status (poll until complete)\naliyun maxcompute get-mms-fetch-metadata-job --source-id <sourceId> --scan-id <scanId> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n```\n\n> Metadata scan typically takes 1-3 minutes. Poll `get-mms-fetch-metadata-job` until completion.\n\nAfter scan completes, view metadata:\n\n```bash\n# List databases\naliyun maxcompute list-mms-dbs --source-id <sourceId> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n\n# List tables\naliyun maxcompute list-mms-tables --source-id <sourceId> --db-name <dbName> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n\n# List partitions\naliyun maxcompute list-mms-partitions --source-id <sourceId> --table-name <tableName> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n```\n\n### Step 3: Metadata Management & Target Mapping\n\nView and configure source-to-target mappings. Complete this step before creating migration jobs.\n\n- **View databases**: `list-mms-dbs` (list) → `get-mms-db` (details)\n- **View tables**: `list-mms-tables` (list) → `get-mms-table` (details)\n- **View partitions**: `list-mms-partitions` for partition info and status\n\n> **Note**: Target project mapping must be configured via the console.\n> In the console: **Data Transfer > Migration Service > Data Sources** — select a data source to configure the target MaxCompute project mapping.\n\n### Step 4: Create Migration Job\n\n**Jobs start executing automatically after creation — no manual start required.**\n\n```bash\n# Create migration job\naliyun maxcompute create-mms-job \\\n  --source-id <sourceId> \\\n  --body '{\n    \"name\": \"<job_name>\",\n    \"srcDbName\": \"<src_db_name>\",\n    \"enableVerification\": true\n  }' \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n```\n\n#### CreateMmsJob Parameters\n\nSupported parameters in body:\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| name | Yes | Job name |\n| srcDbName | Yes | Source database name |\n| tables | No | List of table names (for table-level migration) |\n| partitionFilters | No | Partition filter expression |\n| tableBlackList | No | Table blacklist (exclude tables in full-database migration) |\n| tableWhiteList | No | Table whitelist (include only specified tables) |\n| enableSchemaMigration | No | Whether to migrate table schema (default: true) |\n| enableDataMigration | No | Whether to migrate data (default: true) |\n| enableVerification | No | Whether to enable data verification |\n| increment | No | Whether to perform incremental migration |\n\n**Return value**: On success, returns `async_task_id` and `job_id`, which can be used with:\n- `get-mms-async-task` — check job startup progress\n- `get-mms-job` — check job execution status\n\nChoose migration granularity:\n- **Full database**: pass only `srcDbName`, optionally use `tableBlackList`/`tableWhiteList` to filter\n- **Table-level**: pass `srcDbName` + `tables` list\n- **Partition-level**: pass `srcDbName` + `partitionFilters` or specific partitions\n\n```bash\n# List migration jobs\naliyun maxcompute list-mms-jobs --source-id <sourceId> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n\n# Get job details\naliyun maxcompute get-mms-job --source-id <sourceId> --job-id <jobId> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n```\n\n#### Job Control\n\n```bash\n# Stop job\naliyun maxcompute stop-mms-job --source-id <sourceId> --job-id <jobId> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n\n# Resume a stopped job (only for jobs stopped by stop-mms-job)\naliyun maxcompute start-mms-job --source-id <sourceId> --job-id <jobId> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n\n# Retry failed job\naliyun maxcompute retry-mms-job --source-id <sourceId> --job-id <jobId> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n\n# Delete job\naliyun maxcompute delete-mms-job --source-id <sourceId> --job-id <jobId> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n```\n\n### Step 5: Monitor Migration Tasks\n\n```bash\n# List migration tasks (filter by job, status, table name)\naliyun maxcompute list-mms-tasks --source-id <sourceId> --job-id <jobId> --status <status> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n\n# Get task details\naliyun maxcompute get-mms-task --source-id <sourceId> --task-id <taskId> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n\n# View task logs\naliyun maxcompute list-mms-task-logs --source-id <sourceId> --task-id <taskId> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n\n# Check async task status (e.g., job startup progress)\naliyun maxcompute get-mms-async-task --source-id <sourceId> --async-task-id <asyncTaskId> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n```\n\nMigration progress can also be viewed in the console: **Data Transfer > Migration Service > Migration Monitoring**\n\n### Step 6: Data Verification\n\nMMS automatically performs data verification after migration (if `enableVerification` was enabled when creating the job).\n\n> **The current Agent cannot directly execute verification.** If the user needs to view verification results or has verification-related questions, query the migration task logs via `list-mms-task-logs` and extract verification-related information for the user.\n\n```bash\n# View task logs (includes verification results)\naliyun maxcompute list-mms-task-logs --source-id <sourceId> --task-id <taskId> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n```\n\n## Polling Pattern\n\nMMS metadata scans and migrations are async operations that require polling:\n\n| Operation | Poll Command | Suggested Interval | Estimated Duration |\n|-----------|-------------|-------------------|-------------------|\n| Metadata Scan | `get-mms-fetch-metadata-job` | 10s | 1-3 minutes |\n| Async Task (job startup, etc.) | `get-mms-async-task` | 10s | 1-5 minutes |\n| Migration Job | `get-mms-job` | 30s | Minutes to hours |\n| Migration Task | `get-mms-task` | 30s | Minutes to hours |\n\n**For long-running tasks**:\n- Migration tasks may run for hours — do not continuously poll\n- Provide `job_id`/`task_id` to the user so they can check status later\n\n## Common Scenarios\n\n### Scenario A: View Overall Migration Status\n\n1. `list-mms-data-sources` → get data source list\n2. `list-mms-jobs` for target data source → check job status\n3. `list-mms-tasks` for active jobs → check task execution\n4. Summarize: data source count, job status distribution, task completion rate\n\n### Scenario B: Troubleshoot Failed Migration\n\n1. `list-mms-tasks --status failed` → filter failed tasks\n2. `get-mms-task` → view failed task details\n3. `list-mms-task-logs` → view error logs\n4. Analyze root cause and provide recommendations (retry / adjust config)\n\n### Scenario C: Hive Full-Database Migration to MaxCompute\n\nThe most common migration scenario.\n\n1. Guide user to create Hive data source in console: `https://maxcompute.console.aliyun.com/{region}/mma/datasource`\n2. `list-mms-data-sources` to confirm data source exists, get `source_id`\n3. `create-mms-fetch-metadata-job` to initiate metadata scan\n4. Poll `get-mms-fetch-metadata-job` until scan completes\n5. `list-mms-dbs` to view databases; configure target MaxCompute project mapping in console\n6. `create-mms-job` to create full-database migration job (auto-starts after creation)\n7. `get-mms-job` to check migration progress (for long tasks, suggest user checks later)\n\n### Scenario D: BigQuery Migration to MaxCompute\n\n1. Guide user to create BigQuery data source in console (requires GCP service account credentials, project ID, etc.)\n2. `list-mms-data-sources` to confirm, get `source_id`\n3. `create-mms-fetch-metadata-job` to scan metadata, wait for completion\n4. Configure target mapping in console (BigQuery dataset → MaxCompute project)\n5. `create-mms-job` to create table-level migration job (pass `tables` list in body)\n\n### Scenario E: Snowflake Migration to MaxCompute\n\n1. Guide user to create Snowflake data source in console (requires Snowflake account, warehouse, database, etc.)\n2. Confirm data source → scan → configure mapping → create job (same workflow as above)\n\n### Scenario F: Redshift Migration to MaxCompute\n\n1. Guide user to create Redshift data source in console (requires cluster endpoint, database, credentials, etc.)\n2. Confirm data source → scan → configure mapping → create job (same workflow as above)\n\n### Scenario G: Databricks Migration to MaxCompute\n\n1. Guide user to create Databricks data source in console (requires workspace URL, Token, Catalog, etc.)\n2. Confirm data source → scan → configure mapping → create job (same workflow as above)\n\n### Scenario H: MaxCompute Cross-Project/Cross-Region Migration\n\nFor cross-region relocation, project consolidation/splitting scenarios.\n\n1. Guide user to create MaxCompute-type data source in console (requires source project endpoint, project name, and credentials)\n2. Confirm data source → scan → configure mapping\n3. Choose migration granularity:\n   - Full database: pass only `srcDbName` in body\n   - Specific tables: pass `srcDbName` + `tables` in body\n   - Specific partitions: pass `srcDbName` + `partitionFilters` in body\n\n> For MaxCompute cross-project migration, both source and target are MaxCompute projects. Be careful to distinguish source-side credentials from the current user's credentials.\n\n## Important Notes\n\n- **[MUST] Guide users to the console for data source creation**: `https://maxcompute.console.aliyun.com/{region}/mma/datasource`\n- Confirm target project mapping is correctly configured before creating migration jobs\n- **Jobs start automatically after creation — no manual start required**\n- `start-mms-job` is ONLY for resuming jobs stopped by `stop-mms-job`\n- Choose the correct migration granularity (database/table/partition) based on user requirements\n- If user says \"migrate the entire database\", do NOT pass `tables`; if \"migrate specific tables\", pass the `tables` list\n- If a CLI call fails, inform the user of the error and suggest troubleshooting steps\n- Proactively ask when required parameters (e.g., `source_id`) are not provided\n\n## RAM Policy\n\n> **[MUST] Permission Failure Handling:** When any command or API call fails due to permission errors at any point during execution, follow this process:\n> 1. Read `references/ram-policies.md` to get the full list of permissions required by this SKILL\n> 2. Use `ram-permission-diagnose` skill to guide the user through requesting the necessary permissions\n> 3. Pause and wait until the user confirms that the required permissions have been granted\n\n### Required Permissions\n\nMMS requires both RAM user permissions and MaxCompute project permissions. See `references/ram-policies.md` for details.\n\n| Scenario | Policy |\n|----------|--------|\n| Full MMS permissions for RAM user | `AliyunMaxComputeFullAccess` |\n| MMS operations only | Custom policy (see ram-policies.md) |\n| Root account operations | No additional RAM permissions needed |\n\n## Reference Links\n\n| Document | Link |\n|----------|------|\n| CLI Installation Guide | [references/cli-installation-guide.md](references/cli-installation-guide.md) |\n| RAM Policies | [references/ram-policies.md](references/ram-policies.md) |\n| Related Commands | [references/related-commands.md](references/related-commands.md) |\n\n## Official Documentation\n\n- [MMS Overview](https://help.aliyun.com/zh/maxcompute/user-guide/migration-service-mms)\n- [Preparation](https://help.aliyun.com/zh/maxcompute/user-guide/mms-preparation)\n- [Manage Data Sources](https://help.aliyun.com/zh/maxcompute/user-guide/manage-data-sources)\n- [Create and Execute Migration Jobs](https://help.aliyun.com/zh/maxcompute/user-guide/create-and-execute-a-migration-job)\n- [Migration Monitoring](https://help.aliyun.com/zh/maxcompute/user-guide/migration-observation)\n\nFile v0.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn74p5w8ywv6prh40g0s82gmqh83nw54\",\n  \"slug\": \"alibabacloud-maxcompute-migration-service\",\n  \"version\": \"0.0.1\",\n  \"publishedAt\": 1776685769447\n}\n\nFile v0.0.1:references/acceptance-criteria.md\n\n# Acceptance Criteria: MaxCompute Migration Service (MMS)\n\n**Scenario**: MaxCompute Migration Service (MMS) - 将多种数据源迁移至 MaxCompute\n**Purpose**: Skill testing acceptance criteria\n\n---\n\n# Correct Usage Patterns\n\n## 1. CLI Commands\n\n### ✅ CORRECT\n\n```bash\n# 列出项目\naliyun maxcompute list-projects --region cn-hangzhou --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n\n# 获取项目详情\naliyun maxcompute get-project --project my_project --region cn-hangzhou --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n\n# 列出表\naliyun maxcompute list-tables --project my_project --region cn-hangzhou --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n```\n\n### ❌ INCORRECT\n\n```bash\n# 缺少 --user-agent\naliyun maxcompute list-projects --region cn-hangzhou\n\n# 使用错误的 API 格式（非 plugin mode）\naliyun maxcompute ListProjects --RegionId cn-hangzhou\n\n# 缺少必要参数\naliyun maxcompute get-project --region cn-hangzhou\n```\n\n## 2. Console Operations\n\n### ✅ CORRECT\n\n1. 登录 MaxCompute 控制台\n2. 进入 **数据传输 > 迁移服务**\n3. 按步骤创建数据源和迁移作业\n\n### ❌ INCORRECT\n\n1. 直接使用 CLI 创建 MMS 数据源（当前不支持）\n2. 跳过准备工作直接创建迁移作业\n\n## 3. Parameter Handling\n\n### ✅ CORRECT\n\n- 确认所有用户参数后再执行操作\n- 使用用户提供的具体值，不假设默认值\n- 列出参数确认表供用户确认\n\n### ❌ INCORRECT\n\n```markdown\n# 错误：假设默认值\naliyun maxcompute list-projects --region cn-hangzhou  # 假设用户要查询杭州地域\n\n# 错误：使用占位符直接执行\naliyun maxcompute get-project --project <project-name>\n```\n\n## 4. Credential Handling\n\n### ✅ CORRECT\n\n```bash\n# 只检查凭证状态\naliyun configure list\n```\n\n输出中显示有效的 profile (AK, STS, 或 OAuth identity)。\n\n### ❌ INCORRECT\n\n```bash\n# 读取或打印 AK/SK 值\necho $ALIBABA_CLOUD_ACCESS_KEY_ID\n\n# 让用户在命令行输入凭证\naliyun configure set --access-key-id <user-input>\n```\n\n## 5. Error Handling\n\n### ✅ CORRECT\n\n1. 捕获错误信息\n2. 分析错误原因\n3. 提供解决方案\n4. 引导用户使用 `ram-permission-diagnose` skill 处理权限问题\n\n### ❌ INCORRECT\n\n- 忽略错误继续执行\n- 不提供解决建议\n- 重复执行相同失败的操作\n\n---\n\n# Feature Verification Checklist\n\n## MMS Core Features\n\n- [ ] 支持的数据源类型识别 (Hive, BigQuery, Databricks, MaxCompute)\n- [ ] 迁移作业类型说明 (整库、多表、多分区)\n- [ ] 准备工作步骤完整\n- [ ] 数据源创建流程清晰\n- [ ] 迁移作业创建流程清晰\n- [ ] 监控和验证方法明确\n\n## CLI Commands\n\n- [ ] 所有 `aliyun` 命令包含 `--user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service`\n- [ ] 使用 plugin mode 格式 (如 `list-projects` 而非 `ListProjects`)\n- [ ] 必要参数完整\n\n## Documentation\n\n- [ ] RAM Policy 文档完整\n- [ ] Related Commands 文档完整\n- [ ] Verification Method 文档完整\n- [ ] CLI Installation Guide 复制到 references 目录\n\n## Security\n\n- [ ] 不暴露 AK/SK 值\n- [ ] 使用 `aliyun configure list` 验证凭证\n- [ ] RAM 权限列表完整\n\nFile v0.0.1:references/cli-installation-guide.md\n\n# CLI Installation Guide\n\nComplete guide for installing and configuring Aliyun CLI.\n\n> **Aliyun CLI 3.3.1+**: Supports installing and using all published Alibaba Cloud product plugins. Make sure to upgrade to 3.3.1 or later for full plugin ecosystem coverage.\n\n## Installation\n\n### macOS\n\n**Using Homebrew (Recommended)**\n```bash\nbrew install aliyun-cli\n# Upgrade to latest\nbrew upgrade aliyun-cli\n\n# Verify version (>= 3.3.1)\naliyun version\n```\n\n**Using Binary**\n```bash\n# Download\nwget https://aliyuncli.alicdn.com/aliyun-cli-macosx-latest-amd64.tgz\n\n# Extract\ntar -xzf aliyun-cli-macosx-latest-amd64.tgz\n\n# Move to PATH\nsudo mv aliyun /usr/local/bin/\n\n# Verify\naliyun version\n```\n\n### Linux\n\n**Debian/Ubuntu**\n```bash\n# Download\nwget https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz\n\n# Extract and install\ntar -xzf aliyun-cli-linux-latest-amd64.tgz\nsudo mv aliyun /usr/local/bin/\n\n# Verify\naliyun version\n```\n\n**CentOS/RHEL**\n```bash\n# Download\nwget https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz\n\n# Extract and install\ntar -xzf aliyun-cli-linux-latest-amd64.tgz\nsudo mv aliyun /usr/local/bin/\n\n# Verify\naliyun version\n```\n\n**ARM64 Architecture**\n```bash\n# Download ARM64 version\nwget https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-arm64.tgz\n\n# Extract and install\ntar -xzf aliyun-cli-linux-latest-arm64.tgz\nsudo mv aliyun /usr/local/bin/\n```\n\n### Windows\n\n**Using Binary**\n1. Download from: https://aliyuncli.alicdn.com/aliyun-cli-windows-latest-amd64.zip\n2. Extract the ZIP file\n3. Add the directory to your PATH environment variable\n4. Open new Command Prompt or PowerShell\n5. Verify: `aliyun version`\n\n## Configuration\n\n### Quick Start\n\n```bash\naliyun configure set \\\n  --mode AK \\\n  --access-key-id <your-access-key-id> \\\n  --access-key-secret <your-access-key-secret> \\\n  --region cn-hangzhou\n```\n\n**Where to Get Access Keys**\n\n1. Log in to Aliyun Console: https://ram.console.aliyun.com/\n2. Navigate to: AccessKey Management\n3. Create a new AccessKey pair\n4. Save the secret immediately — it's only shown once\n\n### Environment Variables\n\n**Access Key Mode**\n```bash\nexport ALIBABA_CLOUD_ACCESS_KEY_ID=your_access_key_id\nexport ALIBABA_CLOUD_ACCESS_KEY_SECRET=your_access_key_secret\nexport ALIBABA_CLOUD_REGION_ID=cn-hangzhou\n```\n\n### Verification\n\n```bash\n# Basic test - list regions\naliyun ecs describe-regions\n\n# Expected output: JSON array of regions\n```\n\n## Plugin Installation\n\nAfter installing CLI 3.3.1+, enable automatic plugin installation:\n\n```bash\naliyun configure set --auto-plugin-install true\n```\n\nInstall specific product plugins:\n\n```bash\naliyun plugin install --names maxcompute\n```\n\nFile v0.0.1:references/ram-policies.md\n\n# RAM Policies for MaxCompute Migration Service (MMS)\n\n本文档详细说明 MMS 所需的权限配置，包括 RAM 权限和 MaxCompute 项目权限。\n\n## 权限配置概述\n\nMMS 需要配置三类权限：\n\n| 权限类型 | 授权对象 | 说明 |\n|---------|---------|------|\n| 服务关联角色 | 阿里云账号 | MMS 访问云资源的角色 |\n| RAM 权限 | 执行迁移的 RAM 用户 | MMS 操作权限 |\n| MaxCompute 项目权限 | 服务关联角色 | 数据读写权限 |\n\n## 1. 服务关联角色\n\n首次使用 MMS 前，必须创建服务关联角色：\n\n**角色名称**：`AliyunServiceRoleForMaxComputeMMS`\n\n**创建方式**：\n\n### 通过 MaxCompute 控制台\n1. 登录 MaxCompute 控制台\n2. 选择 数据传输 > 迁移服务\n3. 点击 新增数据源\n4. 在弹出的对话框中确认创建\n\n### 通过 RAM 控制台\n1. 登录 RAM 控制台 > 身份管理 > 角色\n2. 点击 创建角色 > 创建服务关联角色\n3. 选择信任的云服务：`AliyunServiceRoleForMaxComputeMMS`\n\n> **注意**：RAM 用户需要 `AliyunRAMFullAccess` 权限才能创建服务关联角色\n\n## 2. RAM 权限策略（给 RAM 用户）\n\n### 2.1 MMS 所有操作权限\n\n```json\n{\n  \"Version\": \"1\",\n  \"Statement\": [\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"odps:ListMmsDataSources\",\n        \"odps:CreateMmsDataSource\",\n        \"ram:GetRole\",\n        \"odps:GetMmsDataSource\",\n        \"odps:UpdateMmsDataSource\",\n        \"odps:DeleteMmsDataSource\",\n        \"odps:CreateMmsFetchMetadataJob\",\n        \"odps:GetMmsFetchMetadataJob\",\n        \"odps:ListMmsFetchMetadataJobLogs\",\n        \"odps:ListMmsDbs\",\n        \"odps:GetMmsDb\",\n        \"odps:ListMmsTables\",\n        \"odps:GetMmsTable\",\n        \"odps:ListMmsPartitions\",\n        \"odps:GetMmsPartition\",\n        \"odps:ListMmsJobs\",\n        \"odps:GetMmsJob\",\n        \"odps:CreateMmsJob\",\n        \"odps:DeleteMmsJob\",\n        \"odps:StartMmsJob\",\n        \"odps:StopMmsJob\",\n        \"odps:RetryMmsJob\",\n        \"odps:ListMmsTasks\",\n        \"odps:GetMmsTask\",\n        \"odps:ListMmsTaskLogs\",\n        \"odps:StopMmsTask\",\n        \"odps:StartMmsTask\",\n        \"odps:RetryMmsTask\",\n        \"odps:GetMmsAsyncTask\",\n        \"odps:GetMmsProgress\",\n        \"odps:GetMmsSpeed\",\n        \"odps:CreateMmsAuthFile\",\n        \"odps:ListMmsAgents\",\n        \"odps:ListMmsTimers\",\n        \"odps:GetMmsTimer\",\n        \"odps:UpdateMmsTimer\",\n        \"odps:ListMmsTimerLogs\",\n        \"odps:CreateMmsTimer\",\n        \"odps:UpdateMmsTables\",\n        \"odps:UpdateMmsTable\",\n        \"odps:UpdateMmsDb\",\n        \"odps:ListNetworkLinks\"\n      ],\n      \"Resource\": \"*\"\n    }\n  ]\n}\n```\n\n### 2.2 MMS 源数据管理权限\n\n```json\n{\n  \"Version\": \"1\",\n  \"Statement\": [\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"odps:ListMmsDataSources\",\n        \"odps:CreateMmsDataSource\",\n        \"ram:GetRole\",\n        \"odps:GetMmsDataSource\",\n        \"odps:UpdateMmsDataSource\",\n        \"odps:DeleteMmsDataSource\",\n        \"odps:CreateMmsFetchMetadataJob\",\n        \"odps:GetMmsFetchMetadataJob\",\n        \"odps:ListMmsFetchMetadataJobLogs\",\n        \"odps:ListMmsDbs\",\n        \"odps:GetMmsDb\",\n        \"odps:ListMmsTables\",\n        \"odps:GetMmsTable\",\n        \"odps:ListMmsPartitions\",\n        \"odps:GetMmsPartition\",\n        \"odps:GetMmsAsyncTask\",\n        \"odps:GetMmsProgress\",\n        \"odps:GetMmsSpeed\",\n        \"odps:CreateMmsAuthFile\",\n        \"odps:ListMmsAgents\",\n        \"odps:UpdateMmsTables\",\n        \"odps:UpdateMmsTable\",\n        \"odps:UpdateMmsDb\"\n      ],\n      \"Resource\": \"*\"\n    }\n  ]\n}\n```\n\n### 2.3 MMS 迁移作业管理权限\n\n```json\n{\n  \"Version\": \"1\",\n  \"Statement\": [\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"odps:ListMmsDataSources\",\n        \"odps:GetMmsDataSource\",\n        \"odps:CreateMmsFetchMetadataJob\",\n        \"odps:GetMmsFetchMetadataJob\",\n        \"odps:ListMmsFetchMetadataJobLogs\",\n        \"odps:ListMmsDbs\",\n        \"odps:GetMmsDb\",\n        \"odps:ListMmsTables\",\n        \"odps:GetMmsTable\",\n        \"odps:ListMmsPartitions\",\n        \"odps:GetMmsPartition\",\n        \"odps:ListMmsJobs\",\n        \"odps:GetMmsJob\",\n        \"odps:CreateMmsJob\",\n        \"odps:DeleteMmsJob\",\n        \"odps:StartMmsJob\",\n        \"odps:StopMmsJob\",\n        \"odps:RetryMmsJob\",\n        \"odps:ListMmsTasks\",\n        \"odps:GetMmsTask\",\n        \"odps:ListMmsTaskLogs\",\n        \"odps:StopMmsTask\",\n        \"odps:StartMmsTask\",\n        \"odps:RetryMmsTask\",\n        \"odps:GetMmsAsyncTask\",\n        \"odps:GetMmsProgress\",\n        \"odps:GetMmsSpeed\",\n        \"odps:ListMmsTimers\",\n        \"odps:GetMmsTimer\",\n        \"odps:UpdateMmsTimer\",\n        \"odps:ListMmsTimerLogs\",\n        \"odps:CreateMmsTimer\"\n      ],\n      \"Resource\": \"*\"\n    }\n  ]\n}\n```\n\n## 3. MaxCompute 项目权限（给服务关联角色）\n\n在目标项目中，需要为服务关联角色授予数据操作权限：\n\n### 3.1 添加服务关联角色到项目\n\n```sql\nUSE <target_project>;\nADD USER `RAM$<account_id>:role/AliyunServiceRoleForMaxComputeMMS`;\n```\n\n### 3.2 粗粒度授权（推荐）\n\n```sql\n-- 授予 admin 角色\nGRANT admin TO USER `RAM$<account_id>:role/AliyunServiceRoleForMaxComputeMMS`;\n```\n\n### 3.3 细粒度授权\n\n**项目级权限：**\n\n```sql\nGRANT Read,Write,List,CreateTable,CreateInstance,CreateFunction,CreateResource\nON project <project_name> TO USER `RAM$<account_id>:role/AliyunServiceRoleForMaxComputeMMS`;\n\n-- 或授予所有权限\nGRANT ALL ON project <project_name> TO USER `RAM$<account_id>:role/AliyunServiceRoleForMaxComputeMMS`;\n```\n\n**表级权限：**\n\n```sql\nGRANT Describe,Select,Alter,Update,Drop,ShowHistory\nON table <table_name> TO USER `RAM$<account_id>:role/AliyunServiceRoleForMaxComputeMMS`;\n\n-- 或授予所有权限\nGRANT All ON table <table_name> TO USER `RAM$<account_id>:role/AliyunServiceRoleForMaxComputeMMS`;\n```\n\n**实例级权限：**\n\n```sql\nGRANT Read,Write ON instance <instance_id>\nTO USER `RAM$<account_id>:role/AliyunServiceRoleForMaxComputeMMS`;\n```\n\n### 3.4 权限说明\n\n| 对象类型 | 支持的权限 |\n|---------|-----------|\n| Project | Read, Write, List, CreateTable, CreateInstance, CreateFunction, CreateResource, All |\n| Table | Describe, Select, Alter, Update, Drop, ShowHistory, All |\n| Instance | Read, Write, All |\n| Resource | Read, Write, Download, Delete |\n| Function | Read, Write, Download, Execute, Delete |\n\n## 4. 快捷授权方案\n\n| 场景 | 推荐方案 |\n|-----|---------|\n| 主账号操作 | 无需额外配置 RAM 权限 |\n| RAM 用户完整 MaxCompute 权限 | 授予 `AliyunMaxComputeFullAccess` |\n| RAM 用户仅 MMS 操作权限 | 使用上述自定义权限策略 |\n| 创建服务关联角色 | RAM 用户需 `AliyunRAMFullAccess` |\n\n## 5. 通过控制台配置权限\n\n### MaxCompute 控制台配置项目权限\n\n1. 登录 MaxCompute 控制台\n2. 选择 管理配置 > 项目管理\n3. 点击目标项目的 管理\n4. 选择 角色权限 页签\n5. 新建角色并配置权限\n6. 在成员管理中添加服务关联角色\n\n## 6. 权限排查\n\n### 常见错误\n\n| 错误信息 | 原因 | 解决方案 |\n|---------|------|---------|\n| Forbidden.RAM | RAM 用户缺少 MMS 操作权限 | 添加 MMS 权限策略 |\n| Access Denied | 服务关联角色未授权项目权限 | 在项目中添加用户并授权 |\n| ServiceLinkedRole not found | 服务关联角色未创建 | 创建 AliyunServiceRoleForMaxComputeMMS |\n\n### 权限检查清单\n\n- [ ] 服务关联角色已创建\n- [ ] RAM 用户已授予 MMS 操作权限\n- [ ] 服务关联角色已添加到目标项目\n- [ ] 服务关联角色已授予数据操作权限\n- [ ] 目标项目已绑定 Quota 资源\n\nFile v0.0.1:references/related-commands.md\n\n# MMS OpenAPI & CLI Commands\n\nMMS 通过 MaxCompute OpenAPI（产品代码 `MaxCompute`，版本 `2022-01-04`）提供 API 能力。\nCLI 调用格式：`aliyun maxcompute <command> [params] --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service`\n\n## 数据源管理\n\n### ListMmsDataSources — 列出数据源\n\n```bash\naliyun maxcompute list-mms-data-sources \\\n  --name <name> \\\n  --type <Hive|BigQuery|Snowflake|Redshift|Databricks|MaxCompute> \\\n  --region <region> \\\n  --page-num 1 --page-size 20 \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n```\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| name | string | 按名称过滤 |\n| type | string | 按数据源类型过滤 |\n| region | string | 按地域过滤 |\n| pageNum | integer | 页码 |\n| pageSize | integer | 每页条数 |\n\n### GetMmsDataSource — 获取数据源详情\n\n```bash\naliyun maxcompute get-mms-data-source \\\n  --source-id <sourceId> \\\n  --with-config true \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n```\n\n### 创建/更新/删除数据源\n\n> **[MUST] 数据源的创建、更新、删除操作，引导用户到控制台完成。**\n> 控制台地址：`https://maxcompute.console.aliyun.com/{region}/mma/datasource`\n\n## 元数据扫描（盘点）\n\n### CreateMmsFetchMetadataJob — 发起元数据盘点\n\n```bash\naliyun maxcompute create-mms-fetch-metadata-job \\\n  --source-id <sourceId> \\\n  --body '{ ... }' \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n```\n\n### GetMmsFetchMetadataJob — 查看盘点状态\n\n```bash\naliyun maxcompute get-mms-fetch-metadata-job \\\n  --source-id <sourceId> \\\n  --scan-id <scanId> \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n```\n\n## 元数据管理\n\n### ListMmsDbs — 列出数据库\n\n```bash\naliyun maxcompute list-mms-dbs \\\n  --source-id <sourceId> \\\n  --name <name> \\\n  --status <status> \\\n  --page-num 1 --page-size 20 \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n```\n\n### GetMmsDb — 获取数据库详情\n\n```bash\naliyun maxcompute get-mms-db \\\n  --source-id <sourceId> \\\n  --db-id <dbId> \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n```\n\n### ListMmsTables — 列出表\n\n```bash\naliyun maxcompute list-mms-tables \\\n  --source-id <sourceId> \\\n  --db-name <dbName> \\\n  --name <name> \\\n  --status <status> \\\n  --has-partitions true \\\n  --page-num 1 --page-size 20 \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n```\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| dbId | integer | 按数据库 ID 过滤 |\n| dbName | string | 按数据库名过滤 |\n| name | string | 按表名过滤 |\n| dstProjectName | string | 按目标项目名过滤 |\n| dstSchemaName | string | 按目标 Schema 过滤 |\n| type | string | 按表类型过滤 |\n| hasPartitions | boolean | 是否有分区 |\n| status | array | 按状态过滤 |\n\n### GetMmsTable — 获取表详情\n\n```bash\naliyun maxcompute get-mms-table \\\n  --source-id <sourceId> \\\n  --table-id <tableId> \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n```\n\n### ListMmsPartitions — 列出分区\n\n```bash\naliyun maxcompute list-mms-partitions \\\n  --source-id <sourceId> \\\n  --db-name <dbName> \\\n  --table-name <tableName> \\\n  --page-num 1 --page-size 20 \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n```\n\n### GetMmsPartition — 获取分区详情\n\n```bash\naliyun maxcompute get-mms-partition \\\n  --source-id <sourceId> \\\n  --partition-id <partitionId> \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n```\n\n## 迁移作业管理\n\n### CreateMmsJob — 创建迁移作业\n\n```bash\naliyun maxcompute create-mms-job \\\n  --source-id <sourceId> \\\n  --body '{ \"name\": \"job_name\", \"srcDbName\": \"db_name\", ... }' \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n```\n\n> **创建后自动开始执行**，无需手动调用 StartMmsJob。\n\n### ListMmsJobs — 列出迁移作业\n\n```bash\naliyun maxcompute list-mms-jobs \\\n  --source-id <sourceId> \\\n  --name <name> \\\n  --src-db-name <srcDbName> \\\n  --status <status> \\\n  --page-num 1 --page-size 20 \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n```\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| name | string | 按作业名过滤 |\n| srcDbName | string | 按源数据库名过滤 |\n| srcTableName | string | 按源表名过滤 |\n| status | string | 按状态过滤 |\n| stopped | integer | 是否已停止 |\n| timerId | integer | 按定时器 ID 过滤 |\n\n### GetMmsJob — 获取迁移作业详情\n\n```bash\naliyun maxcompute get-mms-job \\\n  --source-id <sourceId> \\\n  --job-id <jobId> \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n```\n\n### StartMmsJob — 启动/恢复迁移作业\n\n```bash\naliyun maxcompute start-mms-job \\\n  --source-id <sourceId> \\\n  --job-id <jobId> \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n```\n\n> 仅用于恢复被 StopMmsJob 停止的作业。\n\n### StopMmsJob — 停止迁移作业\n\n```bash\naliyun maxcompute stop-mms-job \\\n  --source-id <sourceId> \\\n  --job-id <jobId> \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n```\n\n### RetryMmsJob — 重试迁移作业\n\n```bash\naliyun maxcompute retry-mms-job \\\n  --source-id <sourceId> \\\n  --job-id <jobId> \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n```\n\n### DeleteMmsJob — 删除迁移作业\n\n```bash\naliyun maxcompute delete-mms-job \\\n  --source-id <sourceId> \\\n  --job-id <jobId> \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n```\n\n## 迁移任务管理\n\n### ListMmsTasks — 列出迁移任务\n\n```bash\naliyun maxcompute list-mms-tasks \\\n  --source-id <sourceId> \\\n  --job-id <jobId> \\\n  --status <status> \\\n  --src-table-name <srcTableName> \\\n  --page-num 1 --page-size 20 \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n```\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| jobId | integer | 按作业 ID 过滤 |\n| jobName | string | 按作业名过滤 |\n| srcDbName | string | 按源数据库名过滤 |\n| srcTableName | string | 按源表名过滤 |\n| status | string | 按状态过滤 |\n| partition | string | 按分区过滤 |\n\n### GetMmsTask — 获取迁移任务详情\n\n```bash\naliyun maxcompute get-mms-task \\\n  --source-id <sourceId> \\\n  --task-id <taskId> \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n```\n\n### ListMmsTaskLogs — 查看迁移任务日志\n\n```bash\naliyun maxcompute list-mms-task-logs \\\n  --source-id <sourceId> \\\n  --task-id <taskId> \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n```\n\n## 异步任务\n\n### GetMmsAsyncTask — 查看异步任务状态\n\n```bash\naliyun maxcompute get-mms-async-task \\\n  --source-id <sourceId> \\\n  --async-task-id <asyncTaskId> \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service\n```\n\n## API 概览\n\n| API | Method | Path | 说明 |\n|-----|--------|------|------|\n| ListMmsDataSources | GET | /api/v1/mms/datasources | 列出数据源 |\n| GetMmsDataSource | GET | /api/v1/mms/datasources/{sourceId} | 获取数据源详情 |\n| CreateMmsDataSource | - | - | **引导用户到控制台创建** |\n| UpdateMmsDataSource | - | - | **引导用户到控制台更新** |\n| DeleteMmsDataSource | - | - | **引导用户到控制台删除** |\n| CreateMmsFetchMetadataJob | POST | /api/v1/mms/datasources/{sourceId}/scans | 发起元数据盘点 |\n| GetMmsFetchMetadataJob | GET | /api/v1/mms/datasources/{sourceId}/scans/{scanId} | 查看盘点状态 |\n| ListMmsDbs | GET | /api/v1/mms/datasources/{sourceId}/dbs | 列出数据库 |\n| GetMmsDb | GET | /api/v1/mms/datasources/{sourceId}/dbs/{dbId} | 获取数据库详情 |\n| ListMmsTables | GET | /api/v1/mms/datasources/{sourceId}/tables | 列出表 |\n| GetMmsTable | GET | /api/v1/mms/datasources/{sourceId}/tables/{tableId} | 获取表详情 |\n| ListMmsPartitions | GET | /api/v1/mms/datasources/{sourceId}/partitions | 列出分区 |\n| GetMmsPartition | GET | /api/v1/mms/datasources/{sourceId}/partitions/{partitionId} | 获取分区详情 |\n| CreateMmsJob | POST | /api/v1/mms/datasources/{sourceId}/jobs | 创建迁移作业 |\n| ListMmsJobs | GET | /api/v1/mms/datasources/{sourceId}/jobs | 列出迁移作业 |\n| GetMmsJob | GET | /api/v1/mms/datasources/{sourceId}/jobs/{jobId} | 获取作业详情 |\n| StartMmsJob | POST | /api/v1/mms/datasources/{sourceId}/jobs/{jobId}/start | 启动作业 |\n| StopMmsJob | POST | /api/v1/mms/datasources/{sourceId}/jobs/{jobId}/stop | 停止作业 |\n| RetryMmsJob | POST | /api/v1/mms/datasources/{sourceId}/jobs/{jobId}/retry | 重试作业 |\n| DeleteMmsJob | POST | /api/v1/mms/datasources/{sourceId}/jobs/{jobId} | 删除作业 |\n| ListMmsTasks | GET | /api/v1/mms/datasources/{sourceId}/tasks | 列出迁移任务 |\n| GetMmsTask | GET | /api/v1/mms/datasources/{sourceId}/tasks/{taskId} | 获取任务详情 |\n| ListMmsTaskLogs | GET | /api/v1/mms/datasources/{sourceId}/tasks/{taskId}/logs | 查看任务日志 |\n| GetMmsAsyncTask | GET | /api/v1/mms/datasources/{sourceId}/asyncTasks/{asyncTaskId} | 查看异步任务 |\n\nFile v0.0.1:references/verification-method.md\n\n# Verification Method for MaxCompute Migration Service (MMS)\n\nThis document provides steps to verify the success of MMS migration operations.\n\n## Migration Job Verification\n\n### Step 1: Check Migration Job Status\n\n通过 MaxCompute 控制台验证：\n\n1. 登录 [MaxCompute 控制台](https://maxcompute.console.aliyun.com/)\n2. 选择地域，进入 **数据传输 > 迁移服务 > 迁移作业**\n3. 查看作业状态：\n   - **运行中**: 作业正在执行\n   - **成功**: 作业执行完成\n   - **失败**: 作业执行失败，查看错误信息\n\n### Step 2: Verify Data Count\n\n验证迁移后的数据条数：\n\n```sql\n-- 在 MaxCompute 项目中执行\nSELECT COUNT(*) FROM <target_table>;\n```\n\n与源端数据条数对比：\n\n```sql\n-- 在源数据源执行（如 Hive）\nSELECT COUNT(*) FROM <source_table>;\n```\n\n### Step 3: Verify Data Sample\n\n抽样验证数据内容：\n\n```sql\n-- 在 MaxCompute 项目中执行\nSELECT * FROM <target_table> LIMIT 10;\n```\n\n检查数据格式、字段值是否正确。\n\n### Step 4: Verify Partition Data (if applicable)\n\n验证分区数据：\n\n```sql\n-- 查看分区列表\nSHOW PARTITIONS <target_table>;\n\n-- 验证分区数据量\nSELECT COUNT(*) FROM <target_table> WHERE <partition_column> = '<partition_value>';\n```\n\n### Step 5: Check Data Validation Results\n\n如开启了数据校验，查看校验结果：\n\n1. 进入 **迁移服务 > 迁移作业**\n2. 点击作业名称，查看任务详情\n3. 查看 **任务日志** 中的校验结果\n\n校验方法：比对源端和目标端的 `SELECT COUNT(*)` 结果。\n\n## Verification Commands Summary\n\n| Verification | Command/Method | Expected Result |\n|-------------|----------------|-----------------|\n| 作业状态 | 控制台查看 | 状态为\"成功\" |\n| 数据条数 | `SELECT COUNT(*)` | 源端与目标端一致 |\n| 数据内容 | `SELECT * LIMIT N` | 数据格式正确 |\n| 分区数据 | `SHOW PARTITIONS` | 分区完整 |\n| 数据校验 | 任务日志 | 校验通过 |\n\n## Troubleshooting\n\n### Migration Job Failed\n\n1. 查看错误日志，定位失败原因\n2. 常见问题：\n   - 网络不通：检查网络配置\n   - 权限不足：检查 RAM 权限\n   - 源端不可用：检查数据源状态\n   - 资源不足：检查 MaxCompute CU 资源\n\n### Data Count Mismatch\n\n1. 检查是否有迁移任务失败\n2. 检查分区过滤条件是否正确\n3. 检查源端是否有数据变更\n4. 重新执行数据校验\n\n### Data Format Error\n\n1. 检查字段类型映射是否正确\n2. 检查字符编码设置\n3. 检查数据源配置\n\nFile v0.0.1:skill-card.md\n\n## Description: <br>\nAlibaba Cloud MaxCompute Migration Service (MMS) helps agents guide migrations from Hive, BigQuery, Databricks, Snowflake, Redshift, and MaxCompute into MaxCompute. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[sdk-team](https://clawhub.ai/user/sdk-team) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers, data engineers, and cloud operators use this skill to plan, run, monitor, and troubleshoot MaxCompute MMS migrations while confirming parameters and protecting credentials. <br>\n\n### Deployment Geography for Use: <br>\nGlobal, subject to MaxCompute MMS availability in documented Alibaba Cloud regions. <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can affect real MaxCompute migration jobs and data access when used with live Alibaba Cloud credentials. <br>\nMitigation: Use a dedicated least-privilege RAM profile, confirm every region, source, job, and task identifier before action, and avoid broad administrative grants unless temporarily approved. <br>\nRisk: MMS data source details and cloud profiles may expose sensitive credentials. <br>\nMitigation: Configure credentials outside the agent session, never paste or print secrets, and sanitize API responses before displaying them or writing files. <br>\nRisk: Create, stop, retry, resume, or delete operations can alter migration state. <br>\nMitigation: Confirm user intent, resolve names to IDs, check current resource state, and present ambiguous matches for user selection before executing state-changing commands. <br>\n\n\n## Reference(s): <br>\n- [Acceptance Criteria](references/acceptance-criteria.md) <br>\n- [CLI Installation Guide](references/cli-installation-guide.md) <br>\n- [RAM Policies for MaxCompute Migration Service](references/ram-policies.md) <br>\n- [MMS OpenAPI and CLI Commands](references/related-commands.md) <br>\n- [Verification Method for MaxCompute Migration Service](references/verification-method.md) <br>\n- [Alibaba Cloud MaxCompute Migration Service documentation](https://help.aliyun.com/zh/maxcompute/user-guide/migration-service-mms) <br>\n- [MMS preparation documentation](https://help.aliyun.com/zh/maxcompute/user-guide/mms-preparation) <br>\n- [Manage MMS data sources](https://help.aliyun.com/zh/maxcompute/user-guide/manage-data-sources) <br>\n- [Create and execute a migration job](https://help.aliyun.com/zh/maxcompute/user-guide/create-and-execute-a-migration-job) <br>\n- [Migration observation documentation](https://help.aliyun.com/zh/maxcompute/user-guide/migration-observation) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [guidance, markdown, shell commands, configuration] <br>\n**Output Format:** [Markdown with inline bash, JSON, and SQL examples] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Includes CLI commands that require user-confirmed parameters and credential sanitization before display or file writes.] <br>\n\n## Skill Version(s): <br>\n0.0.1 (source: server release metadata) <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>","readmeExcerpt":"Skill: Alibabacloud Maxcompute Migration Service Owner: sdk-team Summary: MMS skill for MaxCompute data migration operations. Handles planning, source/metadata lookup, mapping, job/timer execution, monitoring, and managed migration... Tags: latest:0.0.2 Version history: v0.0.2 | 2026-07-24T06:58:51.415Z | auto alibabacloud-maxcompute-migration-service v0.0.2 - Refactored and tightened core SKILL.md description, empha","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"--user-agent AlibabaCloud-Agent-Skills/{SKILL_NAME}/{session-id}"},{"language":"text","snippet":"--user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/<32-char-hex-session-id>"},{"language":"text","snippet":"Console: create data source → CLI: scan metadata → CLI: target mapping (`update-mms-db` / `update-mms-table`) → migration planning (mandatory before create) → CLI: create job/timer → monitor tasks"},{"language":"bash","snippet":"# List projects\naliyun maxcompute list-projects --region cn-hangzhou --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n\n# Get project details\naliyun maxcompute get-project --project my_project --region cn-hangzhou --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n\n# List tables\naliyun maxcompute list-tables --project my_project --region cn-hangzhou --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}"},{"language":"bash","snippet":"# Missing --user-agent\naliyun maxcompute list-projects --region cn-hangzhou\n\n# Using the wrong API format (not plugin mode)\naliyun maxcompute ListProjects --RegionId cn-hangzhou\n\n# Missing required parameters\naliyun maxcompute get-project --region cn-hangzhou"},{"language":"markdown","snippet":"# Wrong: assuming default values\naliyun maxcompute list-projects --region cn-hangzhou  # Assumes the user wants to query the Hangzhou region\n\n# Wrong: executing directly with placeholders\naliyun maxcompute get-project --project <project-name>"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: alibabacloud-maxcompute-migration-service\ndescription: |\n  MMS skill for MaxCompute data migration operations.\n  Handles planning, source/metadata lookup, mapping, job/timer execution, monitoring, and managed migration mode.\n  Hard constraints: bounded source_id resolution, mandatory --name for create commands, and confirmation gate before create.\n  Trigger examples: migration plan, job/timer creation, progress watch, managed migration for a datasource.\n---\n\n# MMS Data Migration Management\n\nYou are a **data migration expert** for MaxCompute Migration Service (MMS). Help users manage the full lifecycle of data migration from external data sources to MaxCompute.\n\n> **Language policy**: Follow the **user's conversation language and context**. Mirror the user's latest language unless they request otherwise. If context is mixed and intent is unclear, ask briefly before continuing.\n\n> **[MUST] API product identifier**: All MMS APIs belong to the **MaxCompute** product (version `2022-01-04`). CLI format: `aliyun maxcompute <command> [params]`. Do **not** use other products' APIs to operate MMS resources.\n\n## 1) Model & lifecycle\n\n### Core objects\n\n- **Data source**: stores source-side connection information, caches source metadata (databases/tables/partitions) to reduce repeated network requests during migration, and carries migration-related configuration.\n- **Migration job**: a **logical plan** that defines migration scope and strategy (single database, multiple tables, or partition scope). **Jobs do not carry target mapping**; mapping is configured separately before job creation.\n- **Migration task**: the **physical execution plan** split from a job. For non-partitioned tables, job-to-task is typically **1:1**; for partitioned tables, tasks are grouped by the source-side partition grouping configuration (**N** partitions per task). Data in one task is migrated within **one Spark task**.\n\n### Main path\n\nData source → Metadata scan → Target mapping → Migration job/timer → Migration tasks → Status/logs.\n\n### Incremental (short)\n\n- In steady state, **(1)** the **data source** has **scheduled metadata refresh** configured in the console (e.g. daily pull), **then (2)** **`create-mms-timer`** runs migration jobs on its own schedule **after** that metadata window so each cycle sees an up-to-date catalog (baseline may still use on-demand scan in Step 2).\n\n### Mapping model (short)\n\n- MMS may run in **two-level** (project-centric) or **three-level** (project/schema/table) mode — **read existing mapping before updates**; if project vs schema intent is unclear, **ask the user** before mutating.\n\n### How to route user intent\n\n- \"Create migration\" / \"migrate database/tables/partitions\" → **job** level. Always run **migration planning (Step 4)** before **Step 5** `create-mms-job`.\n- \"Managed migration\" / \"fully hosted migration\" / \"全托管迁移数据源 <name/id>\" → enter **Managed Migration Mode** (Section 6). Treat it as a long-running managed workflow request, not "},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn74p5w8ywv6prh40g0s82gmqh83nw54\",\n  \"slug\": \"alibabacloud-maxcompute-migration-service\",\n  \"version\": \"0.0.2\",\n  \"publishedAt\": 1784876331415\n}"},{"path":"references/acceptance-criteria.md","content":"# Acceptance Criteria: MaxCompute Migration Service (MMS)\n\n**Scenario**: MaxCompute Migration Service (MMS) - Migrate various data sources to MaxCompute\n**Purpose**: Skill testing acceptance criteria\n\n---\n\n# Correct Usage Patterns\n\n## 1. CLI Commands\n\n### ✅ CORRECT\n\n```bash\n# List projects\naliyun maxcompute list-projects --region cn-hangzhou --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n\n# Get project details\naliyun maxcompute get-project --project my_project --region cn-hangzhou --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n\n# List tables\naliyun maxcompute list-tables --project my_project --region cn-hangzhou --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\n### ❌ INCORRECT\n\n```bash\n# Missing --user-agent\naliyun maxcompute list-projects --region cn-hangzhou\n\n# Using the wrong API format (not plugin mode)\naliyun maxcompute ListProjects --RegionId cn-hangzhou\n\n# Missing required parameters\naliyun maxcompute get-project --region cn-hangzhou\n```\n\n## 2. Console Operations\n\n### ✅ CORRECT\n\n1. Log in to the MaxCompute console\n2. Navigate to **Data Transfer > Migration Service**\n3. Create data sources and migration jobs step by step\n\n### ❌ INCORRECT\n\n1. Creating an MMS data source directly via the CLI (currently not supported)\n2. Skipping the preparation work and creating a migration job directly\n\n## 3. Parameter Handling\n\n### ✅ CORRECT\n\n- Confirm all user parameters before performing operations\n- Use the specific values provided by the user; do not assume default values\n- List a parameter confirmation table for the user to confirm\n\n### ❌ INCORRECT\n\n```markdown\n# Wrong: assuming default values\naliyun maxcompute list-projects --region cn-hangzhou  # Assumes the user wants to query the Hangzhou region\n\n# Wrong: executing directly with placeholders\naliyun maxcompute get-project --project <project-name>\n```\n\n## 4. Credential Handling\n\n### ✅ CORRECT\n\n```bash\n# Only check credential status\naliyun configure list\n```\n\nThe output shows a valid profile (AK, STS, or OAuth identity).\n\n### ❌ INCORRECT\n\n```bash\n# Read or print AK/SK values\necho $ALIBABA_CLOUD_ACCESS_KEY_ID\n\n# Have the user enter credentials on the command line\naliyun configure set --access-key-id <user-input>\n```\n\n## 5. Error Handling\n\n### ✅ CORRECT\n\n1. Capture the error message\n2. Analyze the cause of the error\n3. Provide a solution\n4. Guide the user to use the `ram-permission-diagnose` skill to handle permission issues\n\n### ❌ INCORRECT\n\n- Ignoring errors and continuing execution\n- Not providing resolution suggestions\n- Repeatedly executing the same failed operation\n\n---\n\n# Feature Verification Checklist\n\n## MMS Core Features\n\n- [ ] Identification of supported data source types (Hive, BigQuery, Databricks, MaxCompute)\n- [ ] Explanation of migration job types (whole database, multiple tables, multiple partitions)\n- [ ] Complete preparation work steps\n- [ ] Cl"},{"path":"references/cli-installation-guide.md","content":"# CLI Installation Guide\n\nComplete guide for installing and configuring Aliyun CLI.\n\n> **Aliyun CLI 3.3.3+**: Supports installing and using all published Alibaba Cloud product plugins. Make sure to upgrade to 3.3.3 or later for full plugin ecosystem coverage.\n>\n> Quickest install/update: `/bin/bash -c \"$(curl -fsSL https://aliyuncli.alicdn.com/setup.sh)\"`, or `aliyun upgrade` (available from CLI >= 3.3.5) to self-update.\n\n## Installation\n\n### macOS\n\n**Using Homebrew (Recommended)**\n```bash\nbrew install aliyun-cli\n# Upgrade to latest\nbrew upgrade aliyun-cli\n\n# Verify version (>= 3.3.3)\naliyun version\n```\n\n**Using Binary**\n```bash\n# Download\nwget https://aliyuncli.alicdn.com/aliyun-cli-macosx-latest-amd64.tgz\n\n# Extract\ntar -xzf aliyun-cli-macosx-latest-amd64.tgz\n\n# Move to PATH\nsudo mv aliyun /usr/local/bin/\n\n# Verify\naliyun version\n```\n\n### Linux\n\n**Debian/Ubuntu**\n```bash\n# Download\nwget https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz\n\n# Extract and install\ntar -xzf aliyun-cli-linux-latest-amd64.tgz\nsudo mv aliyun /usr/local/bin/\n\n# Verify\naliyun version\n```\n\n**CentOS/RHEL**\n```bash\n# Download\nwget https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz\n\n# Extract and install\ntar -xzf aliyun-cli-linux-latest-amd64.tgz\nsudo mv aliyun /usr/local/bin/\n\n# Verify\naliyun version\n```\n\n**ARM64 Architecture**\n```bash\n# Download ARM64 version\nwget https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-arm64.tgz\n\n# Extract and install\ntar -xzf aliyun-cli-linux-latest-arm64.tgz\nsudo mv aliyun /usr/local/bin/\n```\n\n### Windows\n\n**Using Binary**\n1. Download from: https://aliyuncli.alicdn.com/aliyun-cli-windows-latest-amd64.zip\n2. Extract the ZIP file\n3. Add the directory to your PATH environment variable\n4. Open new Command Prompt or PowerShell\n5. Verify: `aliyun version`\n\n## Configuration\n\n### Quick Start\n\n```bash\naliyun configure set \\\n  --mode AK \\\n  --access-key-id <your-access-key-id> \\\n  --access-key-secret <your-access-key-secret> \\\n  --region <region id>\n```\n\n**Where to Get Access Keys**\n\n1. Log in to Aliyun Console: https://ram.console.aliyun.com/\n2. Navigate to: AccessKey Management\n3. Create a new AccessKey pair\n4. Save the secret immediately — it's only shown once\n\n### Environment Variables\n\n**Access Key Mode**\n```bash\nexport ALIBABA_CLOUD_ACCESS_KEY_ID=your_access_key_id\nexport ALIBABA_CLOUD_ACCESS_KEY_SECRET=your_access_key_secret\nexport ALIBABA_CLOUD_REGION_ID=<region id>\n```\n\n### Verification\n\n```bash\n# Basic test - list regions\naliyun ecs describe-regions\n\n# Expected output: JSON array of regions\n```\n\n## Plugin Installation\n\nAfter installing CLI 3.3.3+, enable automatic plugin installation:\n\n```bash\naliyun configure set --auto-plugin-install true\n```\n\nInstall specific product plugins:\n\n```bash\naliyun plugin install --names maxcompute\n```"},{"path":"references/commands-datasource-and-metadata.md","content":"# MMS Commands — Data Source & Metadata\n\nMMS provides API capabilities through the MaxCompute OpenAPI (product code `MaxCompute`, version `2022-01-04`).  \nCLI invocation format: `aliyun maxcompute <command> [params] --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}`\n\n## Data Source Management\n\n### ListMmsDataSources — List Data Sources\n\n```bash\naliyun maxcompute list-mms-data-sources \\\n  --name <name> \\\n  --type <Hive|BigQuery|Snowflake|Redshift|Databricks|MaxCompute> \\\n  --page-num 1 --page-size 20 \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\n> When resolving Name → ID, prefer narrowing with `--name`; do not default to a full unfiltered listing first.\n\n| Parameter | Type | Description |\n|------|------|------|\n| name | string | Filter by name |\n| type | string | Filter by data source type |\n| region | string | Filter by region |\n| pageNum | integer | Page number |\n| pageSize | integer | Items per page |\n\n### GetMmsDataSource — Get Data Source Details\n\n```bash\naliyun maxcompute get-mms-data-source \\\n  --source-id <sourceId> \\\n  --with-config true \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\n### Create/Update/Delete Data Sources\n\n> **[MUST] For creating, updating, and deleting data sources, guide the user to complete the operation in the console.**  \n> Console URL: `https://maxcompute.console.aliyun.com/{region}/mma/datasource`\n\n## Metadata Scanning (Inventory)\n\n### CreateMmsFetchMetadataJob — Initiate Metadata Inventory\n\n```bash\naliyun maxcompute create-mms-fetch-metadata-job \\\n  --source-id <sourceId> \\\n  [--db-name <dbName>] \\\n  [--table-names <table1> <table2> ...] \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\n### GetMmsFetchMetadataJob — Check Inventory Status\n\n```bash\naliyun maxcompute get-mms-fetch-metadata-job \\\n  --source-id <sourceId> \\\n  --scan-id <scanId> \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\n## Metadata Management\n\n### ListMmsDbs — List Databases\n\n```bash\naliyun maxcompute list-mms-dbs \\\n  --source-id <sourceId> \\\n  --name <name> \\\n  --status <status> \\\n  --page-num 1 --page-size 20 \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\n### GetMmsDb — Get Database Details\n\n```bash\naliyun maxcompute get-mms-db \\\n  --source-id <sourceId> \\\n  --db-id <dbId> \\\n  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-maxcompute-migration-service/{session-id}\n```\n\n### ListMmsTables — List Tables\n\nUnder the same `source_id`, **tables with identical names may exist across different databases**. If the user has already provided `source_id` and only queries by table name **without** specifying a database, prefer **omitting `db-name`** and search tables directly using `source_id` + `--name`; only add `db-name` (or ask the use"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"MMS skill for MaxCompute data migration operations. Handles planning, source/metadata lookup, mapping, job/timer execution, monitoring, and managed migration... Skill: Alibabacloud Maxcompute Migration Service Owner: sdk-team Summary: MMS skill for MaxCompute data migration operations. Handles planning, source/metadata lookup, mapping, job/timer execution, monitoring, and managed migration... Tags: latest:0.0.2 Version history: v0.0.2 | 2026-07-24T06:58:51.415Z | auto alibabacloud-maxcompute-migration-service v0.0.2 - Refactored and tightened core SKILL.md description, empha","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1554,"uniquenessScore":48,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T08:48:20.445Z","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-11T08:48:20.445Z","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-11T11:25:37.374Z","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"}]}}}