[!IMPORTANT] When the user wants to search, discover, or install a Huawei Cloud (华为云) agent skill:
- Search — use this skill (
huawei-cloud-find-skills) to find the relevant Skill.- Install — install the matched Skill (see Step 3).
- Execute — follow the installed Skill's instructions to fulfill the request.
This skill handles skill discovery and installation only — it does not perform Huawei Cloud resource management/query tasks itself; those are handled by the skills it installs.
Overview
This skill enables users to efficiently search, discover, and install Huawei Cloud skills.
Dependency: Python 3.6+ and network access to gitcode.com (API v5 for the skill
index) and github.com / raw.githubusercontent.com (for skill details). Quality telemetry is collected automatically via
skill-quality-cli (installed by scripts/ensure_cli.sh if absent) — no other CLI
or credential is required.
Privacy & Telemetry
Transparent Disclosure: During the search and installation process, this skill generates the following external telemetry reports. All areanonymous aggregate data(metadata such as skill name/category/service), does not includeuser input content, credentials, cloud resource data, or personally identifiable information.Quality reporting is enabled by default(opt-out): to disable it, set the environment variable
export SKILL_QUALITY_REPORT=0to disable it entirely.
| Reported content | Trigger point | Destination | Contains sensitive data |
|---|---|---|---|
| Search top-3 exposure count | scripts/search-skills.py(each search) |
devdata2.huaweicloud.com install-count API |
No (only skill name/category/service) |
| Installation count | Step 3.1 curl(before each installation) |
devdata2.huaweicloud.com install-count API |
No (only skill_id, i.e. skills/<category>/<service>/<name>) |
| Quality reporting | skill-quality-cli run wrapped execution |
quality reporting APIG (test environment) | No (execution status/duration/skill name) |
- Enabled by default / How to disable: The above three types of reporting areenabled by default(reporting occurs if this environment variable is not set); to disable it, execute
export SKILL_QUALITY_REPORT=0(skill-quality-cliandsearch-skills.pyboth follow this switch). - All reporting is fire-and-forget, and never blocks the main search/installation flow.
Scenario Description
This skill enables users to:
- Search Skills: Find skills by keyword, category, or both (matched against name, description, and triggers)
- Browse Categories: Explore available skill categories
- View Skill Details: Fetch full SKILL.md content from GitHub for specific skills
- Install Skills: Guide users through skill installation via
npx skills add(GitCode default),npx skills add https://clawhub.ai/huaweicloudskill/skills/<skill-name>(ClawHub), or fallback GitHub method
Architecture: GitCode API v5 (index.json + cn-en-map.json) → HTTP GET (base64 decode) → In-memory search → GitHub raw fetch for details → Install
Use Cases
- "Find a skill for managing ECS instances"
- "What Huawei Cloud skills are available for OBS?"
- "What VPC-related skills does Huawei Cloud have?"
- "Browse all available Huawei Cloud skills"
- "Install a skill for RDS management"
- "Help me find a Huawei Cloud network-related skill"
Prerequisites
- Python 3.6+ must be installed and available as
python(orpython3) inPATH - Network access to
gitcode.com(API v5 for index) andgithub.com/raw.githubusercontent.com(for skill details) skill-quality-cli— MANDATORY (Step 0.1): ensured bybash scripts/ensure_cli.sh(idempotent, skips if already present). MUST be triggered on EVERY execution of this skill before running any search/install command.- Upgrade: run
skill-quality-cli upgrademanually (no auto-upgrade) - Quality reporting: Every search (Step 1) and installation (Step 3) command must be wrapped with
skill-quality-cli run --skill-name huawei-cloud-find-skills --for execution, ensuring that quality reporting is triggered on every execution
- Upgrade: run
Step 0: Check Python Environment
MANDATORY: Before running any script command, verify Python is available.
⚠️ Mandatory: every
hcloudcommand in this skill MUST be wrapped withskill-quality-cli run --skill-name huawei-cloud-find-skills --— barehcloudcalls are strictly forbidden.
# Check Python availability
python --version # or: python3 --version
If the command fails or returns Python 2.x:
- Install Python 3: Download from python.org or use a package manager:
# macOS brew install python3 # Ubuntu/Debian sudo apt-get install python3 # Windows — download installer from python.org, check "Add Python to PATH" - Verify after install: Run
python --versionagain to confirm Python 3.6+ is available - If
pythonpoints to Python 2: Usepython3instead ofpythonin all commands below
Step 0.1: Ensure skill-quality-cli (MANDATORY)
MANDATORY: Before running any search/install command, ensure
skill-quality-cliis installed and available. This step MUST be triggered on EVERY execution of this skill, immediately after Step 0. It is at the same mandatory level as Step 0: Check Python Environment — do not skip it even if you believe the CLI is already present (ensure_cli.shis idempotent and exits silently when everything is ready).Disclosure: This CLI is only used for this skill'sanonymous quality telemetry reporting(execution status/duration, see Privacy & Telemetry); installation location
~/.local/bin, does not modify system services or global configuration; for how to disable, see Privacy & Telemetry。
# Ensure ~/.local/bin is on PATH (where skill-quality-cli is installed)
export PATH="$HOME/.local/bin:$PATH"
# Ensure skill-quality-cli is ready (idempotent: installs only if absent;
# also auto-links the CLI into a writable PATH dir so the bare command works)
bash scripts/ensure_cli.sh
# Verify availability
command -v skill-quality-cli && skill-quality-cli version
| Outcome | Behavior |
|---|---|
| CLI already installed & usable | Silent pass — script exits immediately |
| CLI missing | Installs the latest release into ~/.local/bin/ (prints skill-quality-cli vX.Y.Z 已就绪) |
| Install fails (no network, etc.) | Prints a warning; never blocks the flow |
ensure_cli.shwill automatically symlinkskill-quality-cliintoPATHthe first writable directory (e.g./usr/local/bin), soskill-quality-cliis usually directly callable. If it is still unavailable (no writable PATH directory exists), execute in the current shell:export PATH="$HOME/.local/bin:$PATH"Manual one-off install fallback:
bash scripts/install_cli.sh.
Step 0.5: Check KooCLI Version (NON-BLOCKING)
OPTIONAL: A KooCLI (
hcloud) availability/version check that never blocks the flow. Skills installed later may depend on KooCLI; this step warns early, then always continues to Step 1 regardless of the outcome.
# Check KooCLI availability & version (non-blocking)
python scripts/check-koocli.py
→ scripts/check-koocli.py (Python — cross-platform)
| Outcome | Behavior |
|---|---|
hcloud installed and version OK (≥ 3.0.0) |
Silent pass — no output |
hcloud installed but too old |
Prints an upgrade reminder (hcloud update -y) |
hcloud not installed |
Prints an install reminder (official KooCLI guide link) |
The script always exits
0— it is informational only and never interrupts search or installation.
Repository Info
INDEX_REPO=developer-skill/skills-group-contribution
INDEX_BRANCH=test-for-index
SKILLS_REPO=huaweicloud/huaweicloud-skills
SKILLS_BRANCH=master
RAW_BASE=https://raw.githubusercontent.com/$SKILLS_REPO/$SKILLS_BRANCH
Index Source
The search script fetches the skill index from GitCode API v5 via HTTP GET (base64 auto-decoded):
SKILLS_INDEX_URL=https://gitcode.com/api/v5/repos/developer-skill/skills-group-contribution/contents/skills-index/index.json?ref=test-for-index
SKILLS_CN_EN_MAP_URL=https://gitcode.com/api/v5/repos/developer-skill/skills-group-contribution/contents/skills-index/cn-en-map.json?ref=test-for-index
Core Workflow and Core Commands
Step 1: Search Skills
MANDATORY: The agent MUST execute the search script to search the skill index. Do NOT read the JSON file directly — always use the script.
Given keyword (from AI-understood user intent) and optional category, run the search script:
⚠️ MANDATORY (quality reporting): The search command must be wrapped with
skill-quality-cli run --skill-name huawei-cloud-find-skills --to ensure that quality reporting is triggered on every search. Callingpython scripts/search-skills.py。
# PowerShell
skill-quality-cli run --skill-name huawei-cloud-find-skills -- python scripts/search-skills.py -k "<keyword>"
skill-quality-cli run --skill-name huawei-cloud-find-skills -- python scripts/search-skills.py -k "<keyword>" -c "<category>"
skill-quality-cli run --skill-name huawei-cloud-find-skills -- python scripts/search-skills.py -c "<category>"
# Bash
skill-quality-cli run --skill-name huawei-cloud-find-skills -- python scripts/search-skills.py -k "<keyword>"
skill-quality-cli run --skill-name huawei-cloud-find-skills -- python scripts/search-skills.py -k "<keyword>" -c "<category>"
skill-quality-cli run --skill-name huawei-cloud-find-skills -- python scripts/search-skills.py -c "<category>"
⚠️ Security (command injection protection):
keyword/categorycomes from user input, and it is strictly forbidden to concatenate it unescaped directly into a shell command string. If the input contains$(),$(...), backticks,;,|` and other shell metacharacters, it will trigger command injection in Bash/PowerShell double-quoted strings. It must be invoked as follows, avoiding concatenating external input into shell strings:
- Preferred (recommended): Use Python
subprocessargument array invocation, without going through the shell:subprocess.run([sys.executable, "scripts/search-skills.py", "-k", keyword, "-c", category]);- When it must be executed in a shell, usesingle quotesWrap the user input (
'<keyword>'), and escape it first (replace'in the input with'\'') or use a shell escaping tool (shlex.quote);- When encountering inputs containing
$(), backticks,;,|and other metacharacters, prefer switching to the parameter array approach, or sanitize the input before displaying it to the user.
→ scripts/search-skills.py (Python — cross-platform)
What the script does:
- Fetches
index.jsonandcn-en-map.jsonvia HTTP GET from GitCode API v5 (auto-decodes base64 content) - Expands keywords via
cn-en-map.json(bidirectional CN↔EN, e.g., "ECS" → "ECS, 弹性云服务器, 云服务器") - Scores each skill: name match +10, trigger match +8, description match +5, service match +3
- Sorts by score descending, outputs formatted results with matched keywords
- Reports only the top-3 results' skill names to the install-count API (
skills/<category>/<service>/<name>) as exposure impressions — fire-and-forget, never blocks or fails the search
Fallback iteration (if no results): 1) Switch CN↔EN keywords 2) Expand keywords 3) Remove category filter 4) Try synonyms 5) List all skills
The process should persist until the skill is found or its absence is confirmed. In the event of total failure, notify the user of the specific steps that were attempted.
Step 2: View Skill Details (optional)
Fetch the full SKILL.md content from GitHub for intent validation. Skip this step if the search results from Step 1 are sufficiently informative.
# URL pattern — use the skill's category, service, and name from index
DETAIL_URL="https://raw.githubusercontent.com/huaweicloud/huaweicloud-skills/master/skills/${category}/${service}/${name}/SKILL.md"
The agent can fetch this URL using curl or its web-fetch tool, then present the skill's full documentation to the user.
Step 3: Install Skill
MANDATORY: Before installing, the agent MUST call the install-count API to record the installation. Then use one of the install commands below. Option A is the default; Option C is a fallback when Option A is unavailable.
Step 3.1: Record Install Count
Before executing the install command, call the install-count API. The skill_id is constructed from the search results in Step 1: skills/<category>/<service>/<skill-name>.
IMPORTANT: The
categoryandservicevalues MUST be taken directly from the Step 1 search output (format:name (category/service)). Do NOT guess or hardcode them.
⚠️ MANDATORY (quality reporting): The install count request must likewise be wrapped with
runto ensure the installation process triggers quality reporting.
skill-quality-cli run --skill-name huawei-cloud-find-skills -- curl -s -X POST "https://devdata2.huaweicloud.com/rest/developer/fwdo/rest/developer/servlet/hdskillservice/v1/obs/findcounts/increment" -H "Accept: application/json, text/plain, */*" -H "Content-Type: application/json" -H "Origin: https://skills.huaweicloud.com" -H "Referer: https://skills.huaweicloud.com/" -d "{\"skill_id\":\"skills/<category>/<service>/<skill-name>\"}"
This is a fire-and-forget request. Do NOT block the install flow on its success or failure.
Step 3.2: Execute Install Command
⚠️ MANDATORY (quality reporting): The install command must be wrapped with
skill-quality-cli run --skill-name huawei-cloud-find-skills -- sh -c '...'to ensure every installation triggers quality reporting.sh -cwithin theprintf "\n"is used to automatically confirmnpx skills add's scope interaction prompt.
# Option A: npx skills add from GitCode (default)
skill-quality-cli run --skill-name huawei-cloud-find-skills -- sh -c 'printf "\n" | npx skills add https://gitcode.com/huaweicloud/huaweicloud-skills.git#master --skill <skill-name> -y'
# Option B: npx skills add from ClawHub
skill-quality-cli run --skill-name huawei-cloud-find-skills -- sh -c 'printf "\n" | npx skills add https://clawhub.ai/huaweicloudskill/skills/<skill-name> -y'
# Option C (fallback): npx skills add from GitHub
skill-quality-cli run --skill-name huawei-cloud-find-skills -- sh -c 'printf "\n" | npx skills add huaweicloud/huaweicloud-skills --skill <skill-name> -y'
⚠️ Security:
<skill-name>must come from the canonical skill name in the Step 1 search results (thenamefield). It is forbidden to concatenate unvalidated user input intosh -c '...'; if the skill name contains'and other shell metacharacters, it must first be escaped ('→'\'') or switch to thenpx skills add ... -ybare call (in which case quality reporting is changed to a manualskill-quality-cli report --skill-name huawei-cloud-find-skills)。
If all installation attempts fail, report the error message to the user. Do NOT attempt any method outside the commands above.
Parameter Confirmation
| Parameter | Required/Optional | Description | Default |
|---|---|---|---|
Keyword |
Optional | Search keyword (matched against name, description, triggers, service) | None |
Category |
Optional | Category code for filtering (e.g., "computing", "storage", "network") | None |
skill-name |
Required (Step 3) | Exact skill name for installing | None |
References
| Document | Description |
|---|---|
GitCode API v5 index.json |
Skill index fetched via HTTP GET (base64 decoded) |
GitCode API v5 cn-en-map.json |
Chinese-English keyword mapping fetched via HTTP GET (base64 decoded) |
| scripts/search-skills.py | Search script (Python) — fetches from GitCode API v5, expands keywords, scores, sorts, reports top-3 search-result exposures |
| scripts/check-koocli.py | Step 0.5 non-blocking KooCLI (hcloud) availability/version check |
| scripts/ensure_cli.sh | MANDATORY (Step 0.1) idempotent installer for skill-quality-cli (installs only if absent, no auto-upgrade) |
| scripts/install_cli.sh | Manual one-off installer for skill-quality-cli (user-triggered only) |
| references/iam-policies.md | IAM permission description — This Skill only accesses public interfaces and requires no IAM credentials/policies |
| references/verification-method.md | Verification method — Verification steps and expected results for each scenario |
| references/acceptance-criteria.md | Acceptance criteria — Functional/data/security/file specification acceptance items |
| references/cli-installation-guide.md | CLI installation/upgrade/telemetry disabling instructions |
Search Heuristics
Optional reference for keyword-to-category hints. The agent can infer categories from
index.jsonwithout these.
- Cloud infrastructure keywords (ecs, bms, vpc, obs, rds, ...) → likely
computing,network,storage, etc. - Tool keywords (cli, terraform, koo) → likely
devtools - Management keywords (monitoring, alarm, log) → likely
monitoring
Troubleshooting
Issue: python is not recognized as a command
Cause: Python 3 is not installed or not in PATH
Solution: Install Python 3.6+ and ensure it is added to PATH. On Windows, re-run the installer and check "Add Python to PATH". Alternatively, use python3 if available.
Issue: skill-quality-cli: command not found (exit 127)
Cause: skill-quality-cli is installed into ~/.local/bin/, which is usually
NOT on the default PATH.
Solution: Re-run bash scripts/ensure_cli.sh — it now auto-links the CLI into the
first writable directory on PATH (e.g. /usr/local/bin), so the bare command works.
As a manual fallback, run export PATH="$HOME/.local/bin:$PATH" in the current shell.
If the CLI is missing entirely, ensure_cli.sh installs it idempotently (skips if
already present) and never blocks the business flow.
Issue: Script fails with SyntaxError: invalid syntax
Cause: System python points to Python 2.x (the script requires Python 3.6+)
Solution: Run with python3 explicitly: python3 scripts/search-skills.py -k "<keyword>"
Issue: Script fails with "Failed to fetch index.json"
Cause: GitCode API v5 URL unreachable
Solution: Verify network connectivity to gitcode.com
Issue: GitCode API v5 returns 404
Cause: File path incorrect or the branch is not test-for-index
Solution: Verify the skill's category, service, and name from search results
Issue: Search returns no results
Cause: Keywords don't match any skill Solution:
- Try broader keywords
- Switch between Chinese and English keywords (e.g., "对象存储" → "obs")
- List all skills:
python scripts/search-skills.py -c "computing"
Notes
- This skill is read-only and does not create any cloud resources
- No cache management needed — index is fetched fresh from GitCode API v5 each run
- Network required — index data is hosted on GitCode, fetched via HTTP GET (base64 decoded)
- MUST use script to search — do not read index.json directly
- Index repo:
https://gitcode.com/developer-skill/skills-group-contribution(branch:test-for-index) - Skills repo:
https://github.com/huaweicloud/huaweicloud-skills(branch:master) - KooCLI: the search/install flow itself is pure Python + HTTP (no service-level
hcloud commands, no
--cli-region). Step 0.5 performs only a non-blocking KooCLI availability/version check (hcloud versionviascripts/check-koocli.py) to warn about a missing/outdated CLI before installing skills that depend on it.