huawei-cloud-vod-collector
huaweicloud/huaweicloud-skills
Capture and report Huawei Cloud developer issues as structured feedback to GitCode.
What is huawei-cloud-vod-collector?
The VoD (Voice of Developer) Collector captures poor developer experiences and issues encountered while using Huawei Cloud tools or services. It deduplicates, sanitizes, and delivers prioritized issue reports to a GitCode repository for product and engineering teams.
- Captures raw feedback triggered by errors, user rejection, or proactive reports
- Automatically sanitizes and redacts secrets from feedback
- Deduplicates feedback in-session and cross-session using LLM analysis
- Enriches feedback with context (error stack, user intent, environment, dialog history)
- Delivers feedback as structured GitCode issues with priority and metadata
- Supports auto-login and session management for GitCode repository delivery
How to install huawei-cloud-vod-collector
npx skills add https://github.com/huaweicloud/huaweicloud-skills --skill huawei-cloud-vod-collector- Python 3.7+ with pip
- skill-quality-cli (auto-installed via ensure_cli.sh)
- Python dependencies: pip install -r <SKILL_DIR>/requirements.txt
- Huawei Cloud / GitCode account with repository access
- assets/config.yaml configured with delivery.channels.gitcode.repo_url
How to use huawei-cloud-vod-collector
- 1.Run ensure_cli.sh to install skill-quality-cli: bash <SKILL_DIR>/scripts/ensure_cli.sh
- 2.Install Python dependencies: pip install -r <SKILL_DIR>/requirements.txt
- 3.Capture feedback: skill-quality-cli run --skill-name huawei-cloud-vod-collector -- python <SKILL_DIR>/scripts/md_io.py write-feedback --output .vod/feedbacks/
- 4.Sanitize if needed: skill-quality-cli run --skill-name huawei-cloud-vod-collector -- python <SKILL_DIR>/scripts/vod_sanitize.py file --path <file>
- 5.Enrich feedback with context using the Agent or by editing the markdown file directly
- 6.Deliver to GitCode: skill-quality-cli run --skill-name huawei-cloud-vod-collector -- python <SKILL_DIR>/scripts/vod_deliver.py deliver --feedback-id <id> --feedbacks-dir .vod/feedbacks
- 7.Update delivery status: skill-quality-cli run --skill-name huawei-cloud-vod-collector -- python <SKILL_DIR>/scripts/vod_deliver.py update-status --feedback-id <id> --status delivered --feedbacks-dir .vod/feedbacks
Use cases
- Report bugs or poor experiences encountered while using Huawei Cloud services
- Collect structured feedback from development teams for product improvement
- Automatically deduplicate and prioritize developer issues before submission
- Integrate feedback collection into CI/CD or agent-based workflows via hooks
- Track issue delivery status and manage feedback lifecycle
- Huawei Cloud product and engineering teams
- Development teams using Huawei Cloud services
- Agent-based systems and coding assistants integrating quality feedback
- DevOps and platform engineering teams managing cloud infrastructure
huawei-cloud-vod-collector FAQ
Hooks are triggered by tool errors, user rejection (拒绝了请求), or proactive reports containing keywords like 'bug report', 'poor experience', 'report a problem', or Chinese equivalents (体验差, 反馈问题, 这个有bug).
In-session: same session_id + command + error_type within the dedup_window_sec increments recurrence_count. Cross-session: LLM scans 10 recent feedbacks for duplicates before delivery.
The repo_url is read only from assets/config.yaml under delivery.channels.gitcode.repo_url. It is never inferred from git remote.
If deliver returns 'need_login', run vod_install.sh, start the server, call /login/start, wait for session completion, then stop the server.
Yes. Feedback is stored as markdown in .vod/feedbacks/ and can be edited directly or updated via write-feedback to modify specific fields.
Full instructions (SKILL.md)
Source of truth, from huaweicloud/huaweicloud-skills.
name: huawei-cloud-vod-collector description: | Invoke this skill to capture poor experiences and distill them into high-value requirements (Voice of Developer). Use when user encounters any Huawei Cloud related issues, like user expresses dissatisfaction, encounters errors, or wants to report issues/suggestions.Triggers include: "体验差","反馈问题","反馈建议","这个有bug","拒绝了请求","报告问题","反馈体验","report a problem","report a suggestion","bug report","poor experience","voice of developer"
VoD (Voice of Developer) Collector Skill
Script execution: All scripts are located in
<SKILL_DIR>/scripts/. You must wrap every script execution withskill-quality-cli run --skill-name huawei-cloud-vod-collector --(Mandatory mandate below); never run them bare.<SKILL_DIR>= directory containing this SKILL.md..vod/is relative to CWD (project working directory).
Overview
The VoD (Voice of Developer) Collector captures poor developer experiences and issues encountered while using Huawei Cloud tools or services. It prepares high-quality requirements or issue reports (GitCode issues) for product and engineering teams. The skill is declarative: it collects feedback with scripts and a hooks-based capture pipeline, deduplicates, sanitizes, and delivers prioritized issues to a GitCode repository.
Dependency: Quality telemetry is collected automatically via skill-quality-cli (installed by <SKILL_DIR>/scripts/ensure_cli.sh if absent).
Core Commands
Common CLI examples grouped by function (all scripts under <SKILL_DIR>/scripts/):
- Capture
skill-quality-cli run --skill-name huawei-cloud-vod-collector -- python <SKILL_DIR>/scripts/md_io.py write-feedback --output .vod/feedbacks/
skill-quality-cli run --skill-name huawei-cloud-vod-collector -- python <SKILL_DIR>/scripts/vod_sanitize.py file --path <file>
-
Extract / Edit (use
write-feedbackto update fields or edit feedback files directly) -
Deliver
skill-quality-cli run --skill-name huawei-cloud-vod-collector -- python <SKILL_DIR>/scripts/vod_deliver.py deliver --feedback-id <id> --feedbacks-dir .vod/feedbacks
skill-quality-cli run --skill-name huawei-cloud-vod-collector -- python <SKILL_DIR>/scripts/vod_deliver.py update-status --feedback-id <id> --status delivered --feedbacks-dir .vod/feedbacks
- Auto-login (only when
deliverreturnsneed_login)
skill-quality-cli run --skill-name huawei-cloud-vod-collector -- bash <SKILL_DIR>/scripts/vod_install.sh
skill-quality-cli run --skill-name huawei-cloud-vod-collector -- python <SKILL_DIR>/scripts/vod_deliver.py server-start
skill-quality-cli run --skill-name huawei-cloud-vod-collector -- curl -s -X POST http://localhost:8080/login/start
skill-quality-cli run --skill-name huawei-cloud-vod-collector -- python <SKILL_DIR>/scripts/vod_deliver.py login-wait --session-id <session_id>
skill-quality-cli run --skill-name huawei-cloud-vod-collector -- python <SKILL_DIR>/scripts/vod_deliver.py server-stop --pid <pid>
Parameter Confirmation
The following parameters can be configured by users or integrators:
--feedbacks-dir/--output: Feedback storage directory.md_io.py write-feedbackwrites via--output;vod_deliver.py(deliver/update-status) reads via--feedbacks-dir. Both default to.vod/feedbacks/and accept the same value (equivalent per-command naming).--atomgit-home/ATOMCODE_HOME: AtomGit-GO configuration directory, default~/.atomcode.delivery.channels.gitcode.repo_url: Target repository URL — read only fromassets/config.yaml.capture.dedup_window_sec: In-session deduplication window in seconds.storage.max_feedbacks_per_session: Maximum stored feedbacks per session (default 5).- Logging/Debug: Optional flags inside scripts to enable additional logging or debug modes.
Before delivery or auto-login, ensure the repo_url is provided via assets/config.yaml and is not inferred from git remote.
References
See additional implementation details and integration guides in the repository:
- references/hooks-setup.md
- references/openclaw-integration.md
- assets/VOD_FEEDBACKS.md
- assets/VOD_ISSUE.md
- references/acceptance-criteria.md
- references/verification-method.md
Prerequisites
Python dependencies
Install required Python packages before running any scripts:
pip install -r <SKILL_DIR>/requirements.txt
skill-quality-cli— ensured bybash <SKILL_DIR>/scripts/ensure_cli.sh(idempotent, skips if present)- Upgrade: run
skill-quality-cli upgrademanually (no auto-upgrade) - Disable telemetry report: set
SKILL_QUALITY_REPORT=0
- Upgrade: run
**⚠️ Mandatory: every script execution in this skill MUST be wrapped with
skill-quality-cli run --skill-name huawei-cloud-vod-collector --(e.g.skill-quality-cli run --skill-name huawei-cloud-vod-collector -- python <SKILL_DIR>/scripts/md_io.py write-feedback ...) — bare invocations ofpython/md_io.py/vod_sanitize.py/vod_deliver.py/vod_install.*/curlare strictly forbidden. Disable telemetry (opt-out):SKILL_QUALITY_REPORT=0. Bootstrapping exception:ensure_cli.sh/install_cli.share the installers themselves, so they may be executed bare (unwrapped) whenskill-quality-cliis not yet installed; all other script executions must be wrapped once the CLI exists.
Workflow
Phase 1: Capture
Triggered by hooks (tool errors, user rejection, proactive reports). Generates raw feedback.
1.1 Generate Raw Feedback
- Write the feedback file —
skill-quality-cli run --skill-name huawei-cloud-vod-collector -- python <SKILL_DIR>/scripts/md_io.py write-feedback --output .vod/feedbacks/(see--helpfor all params) - Sanitize — secrets are redacted automatically by
write-feedback. To manually sanitize an existing file:skill-quality-cli run --skill-name huawei-cloud-vod-collector -- python <SKILL_DIR>/scripts/vod_sanitize.py file --path <file>
1.2 Deduplication
- In-session (during write): Same
session_id + command + error_typewithincapture.dedup_window_sec→ incrementrecurrence_countinstead of writing a new file. - Cross-session (before Phase 3 delivery): Scan 10 recent feedbacks via LLM for duplicates.
Phase 2: Extract
Note: This phase is executed by the Agent (LLM) directly — there is no independent extraction script. The Agent enriches the feedback file using
write-feedbackto update fields.
Enrich feedback with context using LLM, then write all fields directly into the feedback file.
Each field maps to a specific section in the markdown file:
error_stack— Extract traceback/exit code from error context →## Error Information → error_stackuser_intent— What the user wanted to do (e.g. "create OBS bucket"), NOT how →## Context → user_intentscenario— Reconstruct what the user was doing →## User Report → scenarioexpected_behavior— What the user expected. From dialog if explicit, otherwise infer from error →## User Report → expected_behaviorproduct_name— Priority: annotation > agent_action > error_message → Title prefix【Product】environment— Platform, OS, session ID, Python version →## Context → environmentdialog_context— 3-5 key turns around the problem point, preserve original language →## Context → dialog_context
Use write-feedback again to update fields, or edit the markdown file directly.
Phase 3: Deliver
3.1 Sync to GitCode Issue
⚠️
repo_urlcomes only fromassets/config.yaml→delivery.channels.gitcode.repo_url. Never usegit remote, never ask the user.
Single delivery — submit one feedback as a GitCode Issue:
skill-quality-cli run --skill-name huawei-cloud-vod-collector -- python <SKILL_DIR>/scripts/vod_deliver.py deliver \
--feedback-id <id> \
--feedbacks-dir .vod/feedbacks
Update status — mark a feedback as delivered (or other status):
skill-quality-cli run --skill-name huawei-cloud-vod-collector -- python <SKILL_DIR>/scripts/vod_deliver.py update-status \
--feedback-id <id> --status delivered --feedbacks-dir .vod/feedbacks
Auto-login — when deliver returns "need_login": true, perform the following:
Pre-check (MCP shortcut — try first): Before starting the QR-code login flow below, check whether the
devspace-connectorMCP server exposes agitcode_create_issue(orcreate_issue) tool. If the tool exists AND is callable, use it to create the issue directly — thedeliverresponse now carriesrepo_url,issue_title, andissue_bodyfor this purpose. After the MCP tool creates the issue, runupdate-status --status deliveredand skip the QR-code login steps 1–8 below.If the connector is unavailable — for ANY reason (server not connected, not configured, tool absent, or call fails): directly fall back to the QR-code login flow below. Do NOT ask the user whether to connect the MCP server or present any choice — proceed silently to step 1 of the fallback. Any attempt to "enable/connect the connector" is out of scope here and must NOT be offered as an option.
CRITICAL: Before installation, MUST tell the user:
- This login uses the open-source project AtomGit-GO (MIT license).
- Source: https://gitcode.com/weixin_45218422/AtomGit-GO
-
Check & install: Execute
skill-quality-cli run --skill-name huawei-cloud-vod-collector -- bash <SKILL_DIR>/scripts/vod_install.sh(Linux/macOS) orskill-quality-cli run --skill-name huawei-cloud-vod-collector -- powershell <SKILL_DIR>/scripts/vod_install.ps1(Windows). -
Start server:
skill-quality-cli run --skill-name huawei-cloud-vod-collector -- python <SKILL_DIR>/scripts/vod_deliver.py server-start→ getpidfrom JSON output -
Initiate QR login:
skill-quality-cli run --skill-name huawei-cloud-vod-collector -- curl -s -X POST http://localhost:8080/login/start→ getlogin_url,qr_code,session_idfrom JSON -
Show QR to user: Display the
login_urland ASCIIqr_code. Say: "🔐 First-time login requires AtomGit authorization. Scan the QR code or open the URL in your browser." -
Wait for authorization:
skill-quality-cli run --skill-name huawei-cloud-vod-collector -- python <SKILL_DIR>/scripts/vod_deliver.py login-wait --session-id <session_id>— blocks until scanned (up to 60s). Do NOT ask the user whether they scanned; just wait. -
On
SCAN_SUCCESS, proceed to step 7.CRITICAL: After successful authorization, MUST output the Security Notice:
- Security Notice: The AtomGit-GO login flow persists the token only to
${ATOMCODE_HOME:-$HOME/.atomcode}/auth.toml(owner-readable only, mode 0600). Anyone with file access can impersonate you — do not share this file. - Note: Stored only in the local AI Shell environment. It will not be uploaded to any external server.
- Deletion: Manually delete the file, or it will be cleaned up when the environment resources are reclaimed.
- Security Notice: The AtomGit-GO login flow persists the token only to
-
Stop server:
skill-quality-cli run --skill-name huawei-cloud-vod-collector -- python <SKILL_DIR>/scripts/vod_deliver.py server-stop --pid <pid> -
Re-run the original
delivercommand.
Behavioral Constraints
- Cancel: Clean up current file only. Never delete
.vod/or other records. - Decline: Skip silently, do not suppress future triggers.
- Validation: Only product/service issues. No empty/minimal content ("test", "hello").
- Session limit: Max
storage.max_feedbacks_per_session(default 5). Exceeded → inform user. - Updates: In-place only. ID immutable. State machine:
open → delivered → promoted → resolvedoropen → delivered → discarded(deliveredis the post-delivery state written byupdate-status --status delivered). - Auto-init:
.vod/created on first use. Never overwritten. - Quality telemetry (mandatory): every script/command execution is wrapped with
skill-quality-cli run --skill-name huawei-cloud-vod-collector --; disable viaSKILL_QUALITY_REPORT=0(opt-out).
Storage
- Path:
<CWD>/.vod/feedbacks/ - Format:
VOD-YYYYMMDD-NNNN.md
CLI Reference
| Parameter | Description |
|---|---|
--atomgit-home <path> | AtomGit-GO config dir (default: ~/.atomcode or $ATOMCODE_HOME) |
--feedback-id <id> | Feedback ID to deliver/update |
--feedbacks-dir <path> | Path to .vod/feedbacks/ |
KooCLI region
KooCLI invocations accept the global parameter --cli-region=<region>
(e.g. hcloud ECS ListServers --cli-region=cn-north-4). In this skill all
hcloud calls go through scripts/hcloud-run.sh, which injects
--cli-region automatically from the HW_CLI_REGION environment variable
when set (and the command does not already pass it).
Token Configuration
- Token from open-source AtomGit-GO, saved in plaintext to
~/.atomcode/auth.toml(mode0600) - Security Note: GitCode API v5 requires
access_tokenas a URL query parameter. The token may appear in proxy/load-balancer/server logs. Error responses are redacted, but normal request URLs are not. This is a GitCode API limitation. - Override:
--atomgit-home <path> - Missing/expired → script returns
"need_login": true→ follow Phase 3.1 auto-login - Never write token to any file outside
~/.atomcode/auth.toml
Related skills
More from huaweicloud/huaweicloud-skills and the wider catalog.

huawei-cloud-billing-scout
Read-only Huawei Cloud billing reconciliation: spend, charges, and attribution via hcloud BSS.

huawei-cloud-cci-instance-management
Manage Huawei Cloud CCI serverless containers via hcloud CLI with full lifecycle control and safety confirmations.

huawei-cloud-computing-query
Query Huawei Cloud computing resources (ECS, BMS, IMS, AS) without write operations.

huawei-cloud-find-skills
Search, discover, and install Huawei Cloud agent skills from a centralized index.

audience-targeting
Build targeted contact segments by filtering on lifecycle, engagement, job title, geography, and firmographics—then export as JSONL.

bulk-operations
Foundation patterns for bulk operations in the HubSpot CLI — JSONL piping, pagination, dry-run, and recovery.