Search the Huawei Cloud skill catalog by keyword or category, then install the matching skill.
Design & media
huawei-cloud-vod-collector
Try itInvoke 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"
What it does
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"
The skill document
VoD (Voice of Developer) Collector Skill
Script execution: All scripts are located in
/scripts/. You must useskill action=execto execute them. Do not run them directly in a shell. `` = 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.
Core Commands
Common CLI examples grouped by function (all scripts under /scripts/):
- Capture
python /scripts/md_io.py write-feedback --output .vod/feedbacks/
python /scripts/vod_sanitize.py file --path
-
Extract / Edit (use
write-feedbackto update fields or edit feedback files directly) -
Deliver
python /scripts/vod_deliver.py deliver --feedback-id --feedbacks-dir .vod/feedbacks
python /scripts/vod_deliver.py update-status --feedback-id --status delivered --feedbacks-dir .vod/feedbacks
- Auto-login (only when
deliverreturnsneed_login)
bash /scripts/vod_install.sh
python /scripts/vod_deliver.py server-start
curl -s -X POST http://localhost:8080/login/start
python /scripts/vod_deliver.py login-wait --session-id
python /scripts/vod_deliver.py server-stop --pid
Parameters
The following parameters can be configured by users or integrators:
--feedbacks-dir: Path for storing feedbacks, default is.vod/feedbacks/.--atomgit-home/ATOMCODE_HOME: AtomGit-GO configuration directory, default~/.atomcode.delivery.channels.gitcode.repo_url: Target repository URL — read only fromassets/config.yaml.template.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.template 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/VOD_ISSUE.md
- references/acceptance-criteria.md
Prerequisites
Python dependencies
Install required Python packages before running any scripts:
pip install -r /requirements.txt
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 —
python /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:python /scripts/vod_sanitize.py file --path
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
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.template→delivery.channels.gitcode.repo_url. Never usegit remote, never ask the user.
Single delivery — submit one feedback as a GitCode Issue:
python /scripts/vod_deliver.py deliver \
--feedback-id \
--feedbacks-dir .vod/feedbacks
Update status — mark a feedback as delivered (or other status):
python /scripts/vod_deliver.py update-status \
--feedback-id --status delivered --feedbacks-dir .vod/feedbacks
Auto-login — when deliver returns "need_login": true, perform the following:
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
bash /scripts/vod_install.sh(Linux/macOS) orpowershell /scripts/vod_install.ps1(Windows). -
Start server:
python /scripts/vod_deliver.py server-start→ getpidfrom JSON output -
Initiate QR login:
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:
python /scripts/vod_deliver.py login-wait --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: After authorization, the access token will be saved to
~/.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: After authorization, the access token will be saved to
-
Stop server:
python /scripts/vod_deliver.py server-stop --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 → promoted → resolvedoropen → discarded. - Auto-init:
.vod/created on first use. Never overwritten.
Storage
- Path:
/.vod/feedbacks/ - Format:
VOD-YYYYMMDD-NNNN.md
CLI Reference
| Parameter | Description |
|---|---|
--atomgit-home | AtomGit-GO config dir (default: ~/.atomcode or $ATOMCODE_HOME) |
--feedback-id | Feedback ID to deliver/update |
--feedbacks-dir | Path to .vod/feedbacks/ |
Token Configuration
- Token from open-source AtomGit-GO, saved in plaintext to
~/.atomcode/auth.toml(mode0600) - Override:
--atomgit-home - 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
Queries Huawei Cloud storage resources (EVS/OBS/SFS/CBR). Covers cloud disks (volumes/snapshots/types/quotas/recycle bin), OBS buckets (ACL/metadata/notifica...
Provides guidance for Huawei Cloud KooCLI command-line tool operations. Covers KooCLI installation, IAM authentication configuration, access credential confi...
Read-only queries against Huawei Cloud resources for inventory, verification, and parameter discovery.
Read-only query of Huawei Cloud ECS, BMS, IMS, and AS resources via local Python scripts.
Queries Huawei Cloud monitoring and enterprise project resources (CES/EPS). Covers alarm rules, alarm histories, alarm templates, dashboards, notification ma...
More from huaweicloud-skills-team
Browse all skillsManage Huawei Ascend NPUs with natural language commands that translate to npu-smi, locally or over SSH.
Deploy and test LLM, VL, Embedding, and Rerank models on Huawei Cloud Ascend 910B DevServer with single- or dual-node topologies.
Read-only queries against Huawei Cloud resources for inventory, verification, and parameter discovery.
Query Huawei Cloud IAM resources (users, groups, policies, agencies, AK/SK, MFA, security settings) read-only via local Python SDK.
Deploy the OpenClaw AI Agent platform on Huawei Cloud Flexus L Instance and configure models and channels via COC.
One-click deploy Hermes AI Agent platform on Huawei Cloud Flexus L instances with model and channel configuration.