
Huawei Cloud Find Skills
- 222 installs
- 19 repo stars
- Updated July 31, 2026
- huaweicloud/huaweicloud-skills
Search, browse, and install Huawei Cloud agent skills hosted on GitHub by keyword or category, with full SKILL.md detail lookups.
About
Enables searching, browsing, and installing Huawei Cloud agent skills from a pre-built GitHub index, matching on name, description, and triggers. A developer uses it to discover which Huawei Cloud skill fits a task and install it via npx skills add or clawhub.
- Keyword/category search over a prebuilt skill index
- Fetches full SKILL.md and guides install
Huawei Cloud Find Skills by the numbers
- 222 all-time installs (skills.sh)
- +20 installs in the week ending Aug 2, 2026 (Skillselion tracking)
- Ranked #172 of 792 Skill Development skills by installs in the Skillselion catalog
- Data as of Aug 2, 2026 (Skillselion catalog sync)
npx skills add https://github.com/huaweicloud/huaweicloud-skills --skill huawei-cloud-find-skillsAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 222 |
|---|---|
| repo stars | ★ 19 |
| Last updated | July 31, 2026 |
| Repository | huaweicloud/huaweicloud-skills ↗ |
What it does
Search, browse, and install Huawei Cloud agent skills hosted on GitHub by keyword or category, with full SKILL.md detail lookups.
Files
[!IMPORTANT]
For any Huawei Cloud query or management task:
1. Search — use this skill (huawei-cloud-find-skills) to find the relevant Skill.2. Install — install the matched Skill (see Step 3).
3. Execute — follow the installed Skill's instructions to fulfill the request.
Huawei Cloud Agent Skills Search and Discovery
This skill enables users to efficiently search, discover, and install Huawei Cloud skills hosted on GitHub.
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,npx clawhub install, or fallback GitCode method
Architecture: Pre-built index (references/index.json) → Script-based search → GitHub raw fetch for details → Install
Use Cases
- "Find a skill for managing ECS instances"
- "What Huawei Cloud skills are available for OBS?"
- "华为云有哪些 VPC 相关的 skill?"
- "Browse all available Huawei Cloud skills"
- "Install a skill for RDS management"
- "帮我找一个华为云网络相关的skill"
Repository Info
REPO=huaweicloud/huaweicloud-skills
BRANCH=master
RAW_BASE=https://raw.githubusercontent.com/$REPO/$BRANCH
INDEX=references/index.jsonCore Workflow
Step 1: Search Skills
MANDATORY: The agent MUST execute the search script to read references/index.json. 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:
# PowerShell
.\scripts\search-skills.ps1 -Keyword "<keyword>"
.\scripts\search-skills.ps1 -Keyword "<keyword>" -Category "<category>"
.\scripts\search-skills.ps1 -Category "<category>"# Bash
./scripts/search-skills.sh "<keyword>"
./scripts/search-skills.sh "<keyword>" "<category>"
./scripts/search-skills.sh "" "<category>"→ scripts/search-skills.ps1 (PowerShell) · scripts/search-skills.sh (Bash)
What the script does: 1. Reads references/index.json and parses the skills array 2. Expands keywords via references/cn-en-map.json (bidirectional CN↔EN, e.g., "ECS" → "ECS, 弹性云服务器, 云服务器") 3. Scores each skill: name match +10, trigger match +8, description match +5, service match +3 4. Sorts by score descending, outputs formatted results with matched keywords
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: Use one of the commands below. Option A is the default; Option C is a fallback when Option A is unavailable.
# Option A: npx skills add from GitHub (default)
npx skills add huaweicloud/huaweicloud-skills --skill <skill-name>
# Option B: npx clawhub install (OpenClaw ecosystem)
npx clawhub install <skill-name>
# Option C (fallback): npx skills add from GitCode
npx skills add https://gitcode.com/huaweicloud/huaweicloud-skills.git#master --skill <skill-name>If all installation attempts fail, report the error message to the user. Do NOT attempt any method outside the commands above.
Parameters
| 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 |
Reference Documentation
| Document | Description |
|---|---|
| references/index.json | Pre-built skill index with 49 entries (name, description, triggers, category, service) |
| references/cn-en-map.json | Chinese-English keyword mapping for search expansion (bidirectional) |
| scripts/search-skills.ps1 | Step 1 search script (PowerShell) — reads index.json, expands keywords, scores, sorts |
| scripts/search-skills.sh | Step 1 search script (Bash) — reads index.json, expands keywords, scores, sorts |
Search Heuristics
Optional reference for keyword-to-category hints. The agent can infer categories from index.json without 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: Script fails with "index.json not found"
Cause: Script cannot locate references/index.json relative to its own path Solution: Ensure the skill directory structure is intact: scripts/search-skills.ps1 and references/index.json must both exist
Issue: raw.githubusercontent.com returns 404
Cause: File path incorrect or default branch is not master 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: 1. Try broader keywords 2. Switch between Chinese and English keywords (e.g., "对象存储" → "obs") 3. List all skills: .\scripts\search-skills.ps1 -Category "computing"
Notes
- This skill is read-only and does not create any cloud resources
- No cache management needed — index is pre-built and shipped with the skill
- Offline search — index is local, only Step 2 requires network
- MUST use script to search — do not read index.json directly
- Repo:
https://github.com/huaweicloud/huaweicloud-skills(branch:master)
{
"弹性云服务器": "ecs", "云服务器": "ecs", "裸金属": "bms", "镜像": "ims", "弹性伸缩": "as",
"对象存储": "obs", "块存储": "evs", "文件存储": "sfs", "云硬盘": "evs",
"虚拟私有云": "vpc", "弹性公网": "eip", "负载均衡": "elb", "域名": "dns",
"关系型数据库": "rds", "图数据库": "ges",
"容器": "cce", "集群": "cce", "镜像仓库": "swr",
"监控": "ces", "告警": "ces", "日志": "lts",
"身份认证": "iam", "安全": "security",
"账单": "bss", "计费": "bss", "费用": "bss",
"命令行": "cli", "编排": "terraform",
"昇腾": "ascend", "NPU": "ascend", "模型迁移": "ascend", "算子优化": "ascend",
"模型训练": "modelarts", "模型部署": "modelarts", "模型分析": "modelarts", "模型适配": "modelarts",
"技能搜索": "find-skills", "技能发现": "find-skills",
"云容器实例": "cci", "容器实例": "cci",
"环境评估": "csm", "解决方案评估": "csm",
"Flexus": "flexus-l", "云耀云": "flexus-l", "轻量服务器": "flexus-l",
"函数": "functiongraph", "函数计算": "functiongraph", "无服务器": "functiongraph",
"大模型": "maas", "语言模型": "maas", "MaaS": "maas",
"资源查询": "ops", "运维查询": "ops",
"应用加速": "sac", "智能加速": "sac",
"多云": "ucs", "统一集群": "ucs", "跨云": "ucs"
}
param(
[string]$Keyword = "",
[string]$Category = ""
)
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
$indexFile = Join-Path $scriptDir "..\references\index.json"
$cnEnFile = Join-Path $scriptDir "..\references\cn-en-map.json"
if (-not (Test-Path $indexFile)) {
Write-Error "index.json not found at $indexFile"; exit 1
}
if (-not $Keyword -and -not $Category) {
Write-Host "Usage: .\search-skills.ps1 -Keyword <keyword> [-Category <category>]"
$cats = (Get-Content $indexFile -Raw -Encoding UTF8 | ConvertFrom-Json).categories -join ", "
Write-Host "Categories: $cats"
exit 1
}
$cnEnMap = @{}
if (Test-Path $cnEnFile) {
$cnEnObj = Get-Content $cnEnFile -Raw -Encoding UTF8 | ConvertFrom-Json
foreach ($prop in $cnEnObj.PSObject.Properties) { $cnEnMap[$prop.Name] = $prop.Value }
}
$keywords = @()
if ($Keyword) {
$keywords = @($Keyword -split '[\s,;]+' | Where-Object { $_.Length -gt 0 })
$expanded = @()
foreach ($kw in $keywords) {
$expanded += $kw
if ($cnEnMap.ContainsKey($kw)) { $expanded += $cnEnMap[$kw] }
foreach ($entry in $cnEnMap.GetEnumerator()) {
if ($entry.Value -eq $kw.ToLower()) { $expanded += $entry.Key }
}
}
$keywords = @($expanded | Sort-Object -Unique)
}
$idx = Get-Content $indexFile -Raw -Encoding UTF8 | ConvertFrom-Json
$results = @()
foreach ($skill in $idx.skills) {
if ($Category -and $skill.category -ne $Category) { continue }
$score = 0
$matchedKws = @()
if ($keywords.Count -gt 0) {
foreach ($kw in $keywords) {
$k = $kw.ToLower()
$kwScore = 0
if ($skill.name.ToLower() -like "*$k*") { $kwScore += 10 }
if ($skill.triggers) {
foreach ($t in $skill.triggers) {
if ($t -and $t.ToLower() -like "*$k*") { $kwScore += 8; break }
}
}
if ($skill.description -and $skill.description.ToLower() -like "*$k*") { $kwScore += 5 }
if ($skill.service -and $skill.service.ToLower() -like "*$k*") { $kwScore += 3 }
if ($kwScore -gt 0) {
$score += $kwScore
$matchedKws += $kw
}
}
if ($score -eq 0) { continue }
} else {
$score = 1
}
$desc = $skill.description
if ($desc -and $desc.Length -gt 150) { $desc = $desc.Substring(0, 150) + "..." }
$trigPreview = @()
if ($skill.triggers) { $trigPreview = @($skill.triggers | Select-Object -First 5) }
$results += [ordered]@{ score=$score; name=$skill.name; category=$skill.category; service=$skill.service; description=$desc; triggers=$trigPreview; matched=$matchedKws }
}
$results = @($results | Sort-Object -Property score -Descending)
if ($results.Count -eq 0) {
Write-Host "No results for keyword='$Keyword' category='$Category'" -ForegroundColor Yellow
Write-Host ""
Write-Host "Fallback suggestions:"
Write-Host " 1. Try broader or alternative keywords"
Write-Host " 2. Remove category filter"
Write-Host " 3. Switch CN<->EN (e.g., 'obs' <-> 'object storage')"
Write-Host " 4. List all: .\search-skills.ps1 -Category 'computing'"
exit 0
}
Write-Host "Found $($results.Count) skill(s) for keyword='$Keyword' category='$Category':" -ForegroundColor Cyan
if ($keywords.Count -gt 1 -or ($keywords.Count -eq 1 -and $keywords[0] -ne $Keyword)) {
Write-Host " (expanded: $($keywords -join ', '))" -ForegroundColor DarkGray
}
Write-Host ""
foreach ($r in $results) {
$matchInfo = if ($r.matched.Count -gt 0) { " matched: $($r.matched -join ',')" } else { "" }
Write-Host " [$($r.score)pts] $($r.name) ($($r.category)/$($r.service))$matchInfo" -ForegroundColor White
Write-Host " $($r.description)" -ForegroundColor DarkGray
if ($r.triggers.Count -gt 0) {
Write-Host " triggers: $($r.triggers -join ', ')" -ForegroundColor DarkGray
}
Write-Host ""
}#!/bin/bash
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
INDEX_FILE="$SCRIPT_DIR/../references/index.json"
CN_EN_FILE="$SCRIPT_DIR/../references/cn-en-map.json"
KEYWORD="${1:-}"
CATEGORY="${2:-}"
if [ ! -f "$INDEX_FILE" ]; then
echo "Error: index.json not found at $INDEX_FILE" >&2; exit 1
fi
if [ -z "$KEYWORD" ] && [ -z "$CATEGORY" ]; then
echo "Usage: $0 <keyword> [category]"
echo "Categories: $(jq -r '.categories | join(", ")' "$INDEX_FILE")"
exit 1
fi
KEYWORDS=()
if [ -n "$KEYWORD" ] && [ -f "$CN_EN_FILE" ]; then
IFS=' ,' read -ra PARTS <<< "$KEYWORD"
for p in "${PARTS[@]}"; do
KEYWORDS+=("$p")
while IFS=: read -r cn en; do
cn=$(echo "$cn" | tr -d '"'); en=$(echo "$en" | tr -d '" ,')
if [ "$cn" = "$p" ]; then KEYWORDS+=("$en"); fi
if [ "$en" = "$(echo "$p" | tr '[:upper:]' '[:lower:]')" ]; then KEYWORDS+=("$cn"); fi
done < <(jq -r 'to_entries[] | "\(.key):\(.value)"' "$CN_EN_FILE")
done
elif [ -n "$KEYWORD" ]; then
IFS=' ,' read -ra PARTS <<< "$KEYWORD"
KEYWORDS=("${PARTS[@]}")
fi
KW_JSON=$(printf '%s\n' "${KEYWORDS[@]}" | jq -R . | jq -s .)
QUERY=$(jq -r --argjson kws "$KW_JSON" --arg cat "$CATEGORY" '
.skills | map(
select(.category == $cat or $cat == "") |
. as $s |
($kws | map(
. as $kw | $s |
(if .name | test($kw; "i") then 10 else 0 end) +
(if .triggers | any(test($kw; "i")) then 8 else 0 end) +
(if .description | test($kw; "i") then 5 else 0 end) +
(if .service | test($kw; "i") then 3 else 0 end)
) | add // 0) as $score |
select($score > 0 or ($kws | length) == 0) |
{
name, category, service,
description: (if (.description | length) > 150 then .description[:150] + "..." else .description end),
triggers: (.triggers[:5]),
score: (if ($kws | length) == 0 then 1 else $score end)
}
) | sort_by(-.score)
' "$INDEX_FILE")
TOTAL=$(echo "$QUERY" | jq 'length')
if [ "$TOTAL" -eq 0 ]; then
echo "No results for keyword='$KEYWORD' category='$CATEGORY'"
echo ""
echo "Fallback suggestions:"
echo " 1. Try broader or alternative keywords"
echo " 2. Remove category filter"
echo " 3. Switch CN<->EN (e.g., 'obs' <-> 'object storage')"
echo " 4. List all: $0 '' 'computing'"
exit 0
fi
echo "Found $TOTAL skill(s) for keyword='$KEYWORD' category='$CATEGORY':"
echo ""
echo "$QUERY" | jq -r '.[] | " [\(.score)pts] \(.name) (\(.category)/\(.service))\n \(.description)\n triggers: \(.triggers | join(", "))\n"'