PluginBench
Skill
Review
Audit score 70

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
Prerequisites
  • 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
Claude Code
Cursor
Windsurf
Cline

How to use huawei-cloud-vod-collector

  1. 1.Run ensure_cli.sh to install skill-quality-cli: bash <SKILL_DIR>/scripts/ensure_cli.sh
  2. 2.Install Python dependencies: pip install -r <SKILL_DIR>/requirements.txt
  3. 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. 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. 5.Enrich feedback with context using the Agent or by editing the markdown file directly
  6. 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. 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

Good for
  • 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
Who it's for
  • 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

What triggers feedback capture?

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).

How does deduplication work?

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.

Where is the target repository URL configured?

The repo_url is read only from assets/config.yaml under delivery.channels.gitcode.repo_url. It is never inferred from git remote.

What happens if login is required?

If deliver returns 'need_login', run vod_install.sh, start the server, call /login/start, wait for session completion, then stop the server.

Can I edit feedback files directly?

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 with skill-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-feedback to 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 deliver returns need_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-feedback writes 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 from assets/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:


Prerequisites

Python dependencies

Install required Python packages before running any scripts:

pip install -r <SKILL_DIR>/requirements.txt

  • skill-quality-cli — ensured by bash <SKILL_DIR>/scripts/ensure_cli.sh (idempotent, skips if present)
    • Upgrade: run skill-quality-cli upgrade manually (no auto-upgrade)
    • Disable telemetry report: set SKILL_QUALITY_REPORT=0

**⚠️ 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 of python / md_io.py / vod_sanitize.py / vod_deliver.py / vod_install.* / curl are strictly forbidden. Disable telemetry (opt-out): SKILL_QUALITY_REPORT=0. Bootstrapping exception: ensure_cli.sh / install_cli.sh are the installers themselves, so they may be executed bare (unwrapped) when skill-quality-cli is 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 --help for 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_type within capture.dedup_window_sec → increment recurrence_count instead 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-feedback to 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_stack
  • user_intent — What the user wanted to do (e.g. "create OBS bucket"), NOT how → ## Context → user_intent
  • scenario — Reconstruct what the user was doing → ## User Report → scenario
  • expected_behavior — What the user expected. From dialog if explicit, otherwise infer from error → ## User Report → expected_behavior
  • product_name — Priority: annotation > agent_action > error_message → Title prefix 【Product】
  • environment — Platform, OS, session ID, Python version → ## Context → environment
  • dialog_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_url comes only from assets/config.yaml → delivery.channels.gitcode.repo_url. Never use git 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-connector MCP server exposes a gitcode_create_issue (or create_issue) tool. If the tool exists AND is callable, use it to create the issue directly — the deliver response now carries repo_url, issue_title, and issue_body for this purpose. After the MCP tool creates the issue, run update-status --status delivered and 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:

  1. Check & install: Execute skill-quality-cli run --skill-name huawei-cloud-vod-collector -- bash <SKILL_DIR>/scripts/vod_install.sh (Linux/macOS) or skill-quality-cli run --skill-name huawei-cloud-vod-collector -- powershell <SKILL_DIR>/scripts/vod_install.ps1 (Windows).

  2. Start server: skill-quality-cli run --skill-name huawei-cloud-vod-collector -- python <SKILL_DIR>/scripts/vod_deliver.py server-start → get pid from JSON output

  3. Initiate QR login: skill-quality-cli run --skill-name huawei-cloud-vod-collector -- curl -s -X POST http://localhost:8080/login/start → get login_url, qr_code, session_id from JSON

  4. Show QR to user: Display the login_url and ASCII qr_code. Say: "🔐 First-time login requires AtomGit authorization. Scan the QR code or open the URL in your browser."

  5. 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.

  6. 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.
  7. Stop server: skill-quality-cli run --skill-name huawei-cloud-vod-collector -- python <SKILL_DIR>/scripts/vod_deliver.py server-stop --pid <pid>

  8. Re-run the original deliver command.


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 → resolved or open → delivered → discarded (delivered is the post-delivery state written by update-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 via SKILL_QUALITY_REPORT=0 (opt-out).

Storage

  • Path: <CWD>/.vod/feedbacks/
  • Format: VOD-YYYYMMDD-NNNN.md

CLI Reference

ParameterDescription
--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 (mode 0600)
  • Security Note: GitCode API v5 requires access_token as 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