Agent skill

E2E CLI Test

by heygen-com in heygen-com/heygen-cli

End-to-end test of the heygen CLI against the live API. An agent skill from heygen-com/heygen-cli.

Apache-2.0Auto-check passedTesting & QA

Install E2E CLI Test

skills CLI
$ npx skills add heygen-com/heygen-cli --skill e2e-cli-test -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install heygen-com/heygen-cli e2e-cli-test --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/heygen-com/heygen-cli.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/e2e-cli-test .claude/skills/e2e-cli-test && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
e2e-cli-test
GitHub stars
145
Token cost
~2.4k tokens
SKILL.md length
821 words
Files
1
Skills in repo
3
Repo updated
First seen
Licence
Apache-2.0

At a glance

End-to-end test of the heygen CLI against the live API. An agent skill from heygen-com/heygen-cli.

  • Works in 9 steps: Build → Phase 1 -- Auth and account → Phase 2 -- Read-only list commands → …
  • Tasks that involve End-to-end testing
  • SKILL.md covers Prerequisites and Workflow
  • Calls make and jq; needs HEYGEN_API_KEY

What it does

E2E CLI Test is an agent skill from heygen-com/heygen-cli. End-to-end test of the heygen CLI against the live API. Builds the binary, then exercises auth, list, get, --human, schema, error handling, and the full create-poll-download-delete write path. Spends a small number of API credits per run. Use before cutting a stable release.

Its SKILL.md is about 2.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Testing & QA, covering End-to-end testing. It works with HeyGen and Go. The repository describes itself as: Create AI videos from the terminal. Official CLI for the HeyGen video generation API. The licence is Apache-2.0.

When your agent uses it

  • Tasks that involve End-to-end testing

Example prompts

  • “/e2e-cli-test”

Requirements

  • A credential in HEYGEN_API_KEY

Workflow steps

9 steps, taken from the step headings in SKILL.md.

  1. Build
  2. Phase 1 -- Auth and account
  3. Phase 2 -- Read-only list commands
  4. Phase 3 -- Read-only get/detail commands
  5. Phase 4 -- --human output mode
  6. Phase 5 -- Schema introspection
  7. Phase 6 -- Error handling
  8. Phase 7 -- Write path (costs credits)
  9. Report

What it can do on your machine

Read from SKILL.md and the folder at commit 8cda12d. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • make
    • jq

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • HEYGEN_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

E2E CLI Test loads about 2.4k tokens when it runs. Until then it costs about 72 tokens; SKILL.md has 821 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~72
When it runs · the whole SKILL.md, loaded when a task matches
~2.4k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from heygen-com/heygen-cli at commit 8cda12d, republished under its Apache-2.0 licence (© heygen-com). 821 words, ~2,440 tokens.

Download SKILL.mdSave it as .claude/skills/e2e-cli-test/SKILL.md (or your agent's skills folder).
name
e2e-cli-test
description
End-to-end test of the heygen CLI against the live API. Builds the binary, then exercises auth, list, get, --human, schema, error handling, and the full create-poll-download-delete write path. Spends a small number of API credits per run. Use before cutting a stable release.

E2E CLI Test

Step 5 of the release; the release-cli skill runs it for you. It also works on its own.

Pre-release validation that exercises ./bin/heygen against the live HeyGen API.

Prerequisites

  • HEYGEN_API_KEY must be set in the environment
  • Working directory must be the heygen-cli repo root

Workflow

Run each phase in order. Report results as you go. If a phase fails, continue to the next phase (do not abort early) so the final report covers everything. Always use ./bin/heygen (the freshly built binary), never a globally installed heygen.

Step 1: Build
bash
make build

If this fails, stop and report the build error. Nothing else can run.

Step 2: Phase 1 -- Auth and account
bash
./bin/heygen auth status
./bin/heygen user me get
  • Assert auth status exits 0
  • Assert user me get exits 0, stdout is valid JSON, and jq -e '.data.username' succeeds
  • If either command fails, stop and report the auth error. Every subsequent phase requires a valid key.
Step 3: Phase 2 -- Read-only list commands

Run each command below. Assert exit 0 and valid JSON stdout for every one. Save the JSON output from each -- Phase 3 will extract IDs from these results.

bash
./bin/heygen video list --limit 1
./bin/heygen template list --limit 1
./bin/heygen ai-clipping list --limit 1
./bin/heygen avatar list --limit 1
./bin/heygen avatar looks list --limit 1
./bin/heygen avatar look-templates list --limit 1
./bin/heygen voice list --limit 1
./bin/heygen model audio voices list --limit 1
./bin/heygen audio sounds list --query "calm ambient piano" --limit 1
./bin/heygen video-translate list --limit 1
./bin/heygen video-translate languages list
./bin/heygen video-translate proofreads list --limit 1
./bin/heygen video-agent list --limit 1
./bin/heygen video-agent styles list --limit 1
./bin/heygen lipsync list --limit 1
./bin/heygen webhook endpoints list
./bin/heygen webhook event-types list
./bin/heygen webhook events list
./bin/heygen brand kits list --limit 1
./bin/heygen brand glossaries list --limit 1

model audio voices list reads professional voice clones, which need a purchased voice slot. On an account with no slot, treat a 403 as SKIPPED and note the missing entitlement; any other non-zero exit is a FAIL. A SKIPPED list saves no JSON, so model audio voices get in Phase 3 is SKIPPED with it.

asset list requires --username (the workspace member whose assets to list, the owner value on asset items) while the endpoint is in beta. Use the .data.username captured in Phase 1 (user me get): ./bin/heygen asset list --username <phase-1-username> --limit 1.

Step 4: Phase 3 -- Read-only get/detail commands

For each command below, extract the required ID from the corresponding Phase 2 list result. If a list returned an empty .data array, or was itself SKIPPED, skip that detail command and mark it as SKIPPED (not FAIL). If more than half of the detail commands are skipped, mark the phase as WARN and print a warning that the account lacks sufficient data for meaningful get/detail coverage.

bash
./bin/heygen video get <video-id>              # .data[0].id from video list
./bin/heygen video scenes get <video-id>       # .data[0].id from video list; 404 "no editor document" (e.g. a translated video) is SKIPPED, not FAIL
./bin/heygen ai-clipping get <job-id>          # .data[0].id from ai-clipping list
./bin/heygen avatar get <group-id>             # .data[0].id from avatar list
./bin/heygen avatar looks get <look-id>        # .data[0].id from avatar looks list
./bin/heygen video-agent get <session-id>      # .data[0].session_id from video-agent list
./bin/heygen video-agent videos list <session-id>
./bin/heygen video-translate get <id>          # .data[0].id from video-translate list
./bin/heygen lipsync get <id>                  # .data[0].id from lipsync list
./bin/heygen voice get <voice-id>              # .data[0].voice_id from voice list
./bin/heygen model audio voices get <voice-id> # .data[0].voice_id from model audio voices list
./bin/heygen template get <template-id>        # .data[0].id from template list
./bin/heygen brand kits get <id>               # .data[0].brand_kit_id from brand kits list
./bin/heygen brand glossaries get <id>         # .data[0].brand_glossary_id from brand glossaries list
./bin/heygen video statuses list --video-ids <video-id>   # a video-id from video list (bulk status lookup)
./bin/heygen lipsync statuses list --lipsync-ids <id>     # .data[0].id from lipsync list
./bin/heygen video-translate statuses list --video-translation-ids <id>  # .data[0].id from video-translate list

asset statuses list --asset-ids <asset-id> needs an asset id from the asset list result above (.data[0].id). Skip only if that list is empty.

<resource> batches get <batch-id> needs a batch id, which has no read-only list source (batches are created via the write path). Run each only if a batch id is available from a prior batch-create call; otherwise skip. The producer is video batches create / lipsync batches create / video-translate batches create, and for assets asset direct-uploads batches create.

For video-agent resources get: first run ./bin/heygen video-agent get <session-id>, then look for a resource_id in messages[*].resource_ids[*]. Only run ./bin/heygen video-agent resources get <session-id> <resource-id> if both values are available; otherwise skip.

Assert exit 0 and valid JSON for each command that runs.

Step 5: Phase 4 -- --human output mode
bash
./bin/heygen video list --limit 1 --human
./bin/heygen template list --limit 1 --human
./bin/heygen avatar list --limit 1 --human
./bin/heygen voice list --limit 1 --human

Assert exit 0. Assert stdout is NOT valid JSON (it should be a formatted table).

Show full SKILL.md (324 more words)Show less
Step 6: Phase 5 -- Schema introspection

These do not make API calls.

bash
./bin/heygen video create --request-schema
./bin/heygen video create --response-schema
./bin/heygen model audio tts create --request-schema
./bin/heygen model audio voices create --request-schema
./bin/heygen avatar looks create --request-schema

Assert exit 0 and stdout is valid JSON for each.

The last three creates are covered here rather than in the write path because each bills a resource the write path cannot reclaim: voice training occupies a purchased slot and consumes one of five monthly trainings, and a Look Pack bills per generated look, so its cost is set by the pack rather than by the call. --request-schema exercises their flag and schema wiring at no cost.

Step 7: Phase 6 -- Error handling
bash
# Invalid API key -- expect exit 3 (auth error)
HEYGEN_API_KEY=sk_invalid_key_000 ./bin/heygen user me get

# Missing required flags -- expect exit 2 (usage error)
./bin/heygen video get

Assert the expected exit codes. Temporarily override HEYGEN_API_KEY for the auth test only; restore the real key afterward.

Step 8: Phase 7 -- Write path (costs credits)

This phase must always clean up, even on failure.

bash
# Create a short video. Keep the prompt phrased as a video request -- the agent
# answers a conversational one ("Say hello world") in chat and never generates,
# so the phase burns the full --wait timeout and reports FAIL on a healthy CLI.
./bin/heygen video-agent create --prompt "Create a short 5 second video of an avatar saying: Hello world." --wait
  • Accept exit 0 (completed) or exit 4 (poll timeout) as success
  • Extract the video id from stdout as .data.id. Under --wait the CLI prints the polled video object, not the create response, in both the completed and the timeout case -- so there is no .data.video_id to read here
  • If exit code is anything other than 0 or 4, or the id is missing, fail immediately but still run cleanup below
bash
# Verify the video exists
./bin/heygen video get <video_id>
  • If create returned exit 4, continue polling with ./bin/heygen video get <video_id> in a bounded loop (e.g., every 15 seconds for up to 5 minutes) until .data.status reaches completed or failed
  • If status reaches failed or never reaches completed, mark the phase as FAIL
bash
# Download the completed video (use a unique temp path to avoid collisions)
DOWNLOAD_PATH="/tmp/e2e-cli-test-$$-$(date +%s).mp4"
./bin/heygen video download <video_id> --output-path "$DOWNLOAD_PATH" --force
  • Assert exit 0, stdout is valid JSON with a .path field
  • Assert the file exists at $DOWNLOAD_PATH with non-zero size
bash
# Cleanup (unconditional -- always runs if video_id was extracted)
./bin/heygen video delete <video_id> --force
rm -f "$DOWNLOAD_PATH"
Step 9: Report

Print a summary table:

Phase                    Result
-----                    ------
1. Auth and account      PASS
2. List commands         PASS (<passed>/<ran>, <skipped> skipped)
3. Get/detail commands   PASS (<passed>/<ran>, <skipped> skipped)   # or WARN if >50% skipped
4. --human output        PASS
5. Schema introspection  PASS
6. Error handling        PASS
7. Write path            PASS

Counts are the actual number of commands executed in each phase (Phase 2/3 grow as new list/get commands are added) — compute them from the run, don't hard-code totals.

If any phase is FAIL, end with a clear message identifying which phase(s) failed and the first failing command with its exit code and stderr.

© heygen-com, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .agents/skills/e2e-cli-test of heygen-com/heygen-cli.

Open the folder on GitHubat commit 8cda12d

Compare with similar skills

E2E CLI Test next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

E2E CLI Test compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
E2E CLI Test this skillheygen-com/heygen-cli145—~2.4kAutomated safety check: PassApache-2.0
Go Redis Client Test Runnerredis/go-redis22k—~786Automated safety check: PassBSD-2-Clause
Security UpdatesSmilyOrg/photofield608—~808Automated safety check: PassMIT
remindb Integration Testsradimsem/remindb129—~1.8kAutomated safety check: PassMIT
Unblock Dependabot PRkubernetes-sigs/cloud-provider-azure294—~1.5kAutomated safety check: PassApache-2.0
Web Application Testinganthropics/skills180k51 repos~966Automated safety check: PassApache-2.0

Similar skills

  • Official

    Explains how to run go-redis tests: the Docker Compose stack, make targets, focusing a single Ginkgo spec, the e2e suite and the version environment variables.

    22k GitHub stars~786 tokensUpdated today
    Testing & QAAuto-check passed
  • Security Updates

    SmilyOrg/photofield

    Check and apply security updates across the photofield project (api/Go, ui/npm, docs/npm, e2e/npm).

    608 GitHub stars~808 tokensUpdated 1 mo ago
    Testing & QAAuto-check passed
  • Explains how to add an end-to-end test scenario to remindb, choosing between a direct API test and an MCP test and using the shared helpers and fixtures.

    129 GitHub stars~1.8k tokensUpdated 2 mo ago
    Testing & QAAuto-check passed
  • Unblock Dependabot PR

    kubernetes-sigs/cloud-provider-azure

    Official

    Diagnose and unblock failed Dependabot pull requests in cloud-provider-azure by closing Kubernetes minor-version dependency bumps, classifying CI failures, syncing Go modules, retesting quota-flaked…

    294 GitHub stars~1.5k tokensUpdated today
    DevelopmentAuto-check passed
  • Web Application Testing

    anthropics/skills

    Official

    Tests local web applications with Python Playwright scripts, checking frontend behavior, capturing screenshots and reading browser console logs.

    180k GitHub starsUsed in 51 repos~966 tokens
    Testing & QAAuto-check passed
  • Validates OpenHarness features by running real multi-turn agent loops with live LLM calls against an unfamiliar codebase, checking actual tool execution.

    16k GitHub starsUsed in 1 repo~2.1k tokens
    Testing & QAAuto-check: notes

More from heygen-com/heygen-cli

  • Changelog CLI

    heygen-com/heygen-cli

    Generate a user-facing changelog for the next stable release.

    145 GitHub stars~1k tokensUpdated today
    Auto-check passed
  • Release CLI

    heygen-com/heygen-cli

    Cut a stable (or dev) release of the heygen CLI end to end: run RELEASE.md's pre-release checklist, land pending PRs, check the command surface, run E2E, pick the version, write the changelog…

    145 GitHub stars~1.9k tokensUpdated today
    Auto-check passed

Works with

Categories

Questions about E2E CLI Test

What does E2E CLI Test do?

End-to-end test of the heygen CLI against the live API. An agent skill from heygen-com/heygen-cli. E2E CLI Test is an agent skill from heygen-com/heygen-cli. End-to-end test of the heygen CLI against the live API.

When should I use E2E CLI Test?

E2E CLI Test fits situations like: tasks that involve End-to-end testing.

How do I install E2E CLI Test in Claude Code?

Run `npx skills add heygen-com/heygen-cli --skill e2e-cli-test -a claude-code`. Or copy the skill folder (.agents/skills/e2e-cli-test in heygen-com/heygen-cli) into .claude/skills/e2e-cli-test in your project. Claude Code loads it when a task matches its description.

How do I install E2E CLI Test in Codex?

Run `npx skills add heygen-com/heygen-cli --skill e2e-cli-test -a codex`. Or copy the skill folder (.agents/skills/e2e-cli-test in heygen-com/heygen-cli) into .agents/skills/e2e-cli-test in your project. Codex loads it when a task matches its description.

Can I use E2E CLI Test in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add heygen-com/heygen-cli --skill e2e-cli-test -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/e2e-cli-test, .gemini/skills/e2e-cli-test, .github/skills/e2e-cli-test and .opencode/skills/e2e-cli-test in your project.

What does E2E CLI Test need to run?

Going by SKILL.md and its folder, E2E CLI Test needs the command-line tools its instructions call (make and jq) and credentials named HEYGEN_API_KEY. Our summary lists: A credential in HEYGEN_API_KEY.

Does E2E CLI Test access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is E2E CLI Test safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does E2E CLI Test use?

E2E CLI Test is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does E2E CLI Test use?

About 2.4k tokens (SKILL.md is roughly 9.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to E2E CLI Test?

Skills that share tags, products or a category with E2E CLI Test: Go Redis Client Test Runner (redis/go-redis, 22k stars), Security Updates (SmilyOrg/photofield, 608 stars), remindb Integration Tests (radimsem/remindb, 129 stars) and Unblock Dependabot PR (kubernetes-sigs/cloud-provider-azure, 294 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains E2E CLI Test?

heygen-com (a GitHub organization) maintains it in heygen-com/heygen-cli, which has 145 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 8, 2026.

Source: heygen-com/heygen-cli on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.