Not in the top 1,000 by GitHub stars
heygen-com/heygen-cli
Create AI videos from the terminal. Official CLI for the HeyGen video generation API.
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
27f93c98ee5d → 27f93c98ee5d
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 27f93c98ee5d
No earlier version was observed for comparison.
Verified commit 27f93c98ee5d798eadca0d7a5f1e6845431c315c
git clone --filter=blob:none --no-checkout https://github.com/heygen-com/heygen-cli.git .hotskills/heygen-com-heygen-cli && git -C .hotskills/heygen-com-heygen-cli checkout --detach 27f93c98ee5d798eadca0d7a5f1e6845431c315c
# Copy each selected skill directory from .hotskills/heygen-com-heygen-cli into .claude/skills/<skill-name>/git clone --filter=blob:none --no-checkout https://github.com/heygen-com/heygen-cli.git .hotskills/heygen-com-heygen-cli && git -C .hotskills/heygen-com-heygen-cli checkout --detach 27f93c98ee5d798eadca0d7a5f1e6845431c315c
# Copy each selected skill directory from .hotskills/heygen-com-heygen-cli into .agents/skills/<skill-name>/Heat
4.2- Star growth, last 7 daysNot available
- Star growth, last 24 hoursNot available
- Rank movement, last 7 daysNot available
- Commits, last 30 daysNot available
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekNot available
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
How it works
heygen-cli
When your agent uses it
Create AI videos, manage avatars, translate videos, and download results via the HeyGen API. Use when an agent needs to generate videos from text prompts, create avatar-based videos, translate existing videos, or automate video production workflows.
What it loads into context
Frontmatter
55 tokensAlways available to the agent
SKILL.md
2,020 tokensWhen the skill is activated
Reference documents
24,067 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Key Commands
- Async Workflow
- Discovering API Fields
- Output Contract
- Notes
Scripts executed separately
.github/scripts/check_pr_template.py.github/scripts/cleanup-failed-release.sh.github/scripts/find-run-draft.sh.github/scripts/install-goreleaser.shMakefilecmd/heygen/aliases.gocmd/heygen/aliases_brandkit_test.gocmd/heygen/aliases_test.gocmd/heygen/auth.gocmd/heygen/auth_login.gocmd/heygen/auth_login_device_test.gocmd/heygen/auth_login_dispatch_test.gocmd/heygen/auth_login_friendly_test.gocmd/heygen/auth_login_oauth_test.gocmd/heygen/auth_login_picker.gocmd/heygen/auth_login_picker_test.gocmd/heygen/auth_logout.gocmd/heygen/auth_logout_test.gocmd/heygen/auth_status.gocmd/heygen/auth_status_friendly_test.gocmd/heygen/auth_status_oauth_test.gocmd/heygen/auth_status_test.gocmd/heygen/auth_test.gocmd/heygen/builder.gocmd/heygen/builder_test.gocmd/heygen/columns.gocmd/heygen/columns_test.gocmd/heygen/config_cmd.gocmd/heygen/config_cmd_test.gocmd/heygen/confirm.gocmd/heygen/confirm_test.gocmd/heygen/context.gocmd/heygen/context_test.gocmd/heygen/deprecated_flags_test.gocmd/heygen/feedback.gocmd/heygen/feedback_test.gocmd/heygen/formatter_select.gocmd/heygen/generated_example_flags_test.gocmd/heygen/generated_examples_test.gocmd/heygen/generated_root_test.gocmd/heygen/go_version_pin_test.gocmd/heygen/headers_test.gocmd/heygen/help_flatten.gocmd/heygen/hidden_commands_test.gocmd/heygen/idempotency_key_test.gocmd/heygen/instant_video_test.gocmd/heygen/main.gocmd/heygen/main_test.gocmd/heygen/poll_configs.gocmd/heygen/poll_configs_test.gocmd/heygen/root.gocmd/heygen/root_test.gocmd/heygen/testutil_test.gocmd/heygen/timeouts.gocmd/heygen/timeouts_test.gocmd/heygen/update.gocmd/heygen/update_notice.gocmd/heygen/update_notice_test.gocmd/heygen/update_notice_unix.gocmd/heygen/update_notice_windows.gocmd/heygen/update_test.gocmd/heygen/video_download.gocmd/heygen/video_download_test.gocmd/heygen/video_list_test.gocodegen/examples.gocodegen/examples_test.gocodegen/generate.gocodegen/generate_test.gocodegen/grouper.gocodegen/grouper_test.gocodegen/main.gocodegen/schema.gocodegen/schema_test.gocodegen/surface_allowlist_test.gocodegen/testdata/golden/registry.gocodegen/testdata/golden/upload.gocodegen/testdata/golden/widget.gogen/ai-clipping.gogen/asset.gogen/audio.gogen/avatar.gogen/background-removal.gogen/brand.gogen/filler-word-removal.gogen/folder.gogen/lipsync.gogen/model.gogen/registry.gogen/template.gogen/user.gogen/video-agent.gogen/video-translate.gogen/video.gogen/voice.gogen/webhook.gointernal/analytics/analytics.gointernal/analytics/analytics_test.gointernal/auth/chain_resolver.gointernal/auth/chain_resolver_test.gointernal/auth/chain_typed_test.gointernal/auth/constants.gointernal/auth/credential.gointernal/auth/credentials_file.gointernal/auth/env_resolver.gointernal/auth/env_resolver_test.gointernal/auth/file_resolver.gointernal/auth/file_resolver_test.gointernal/auth/file_store.gointernal/auth/file_store_test.gointernal/auth/not_configured.gointernal/auth/oauth/browser.gointernal/auth/oauth/browser_test.gointernal/auth/oauth/device.gointernal/auth/oauth/device_test.gointernal/auth/oauth/loopback.gointernal/auth/oauth/loopback_test.gointernal/auth/oauth/oauth.gointernal/auth/oauth/oauth_test.gointernal/auth/oauth/pkce.gointernal/auth/oauth/pkce_test.gointernal/auth/oauth/tokens.gointernal/auth/oauth/tokens_test.gointernal/auth/oauth_store.gointernal/auth/resolver.gointernal/auth/store.gointernal/auth/user_store.gointernal/auth/user_store_test.gointernal/client/client.gointernal/client/client_test.gointernal/client/executor.gointernal/client/executor_test.gointernal/client/oauth_transport_test.gointernal/client/retry.gointernal/client/retry_test.gointernal/command/hidden.gointernal/command/spec.gointernal/command/spec_test.gointernal/config/config.gointernal/config/env_provider.gointernal/config/env_provider_test.gointernal/config/file_provider.gointernal/config/file_provider_test.gointernal/config/layered_provider.gointernal/config/layered_provider_test.gointernal/errors/api_error.gointernal/errors/codes.gointernal/errors/codes_test.gointernal/errors/errors.gointernal/errors/errors_test.gointernal/origin/origin.gointernal/origin/origin_test.gointernal/output/formatter.gointernal/output/human_formatter.gointernal/output/human_formatter_test.gointernal/output/json_formatter.gointernal/output/json_formatter_test.gointernal/output/spinner.gointernal/output/spinner_test.gointernal/paths/paths.goscripts/install.shscripts/release-surface.sh
Files
.agents/skills/README.mddoc1,533 bytes.agents/skills/changelog-cli/SKILL.mddoc4,089 bytes.agents/skills/e2e-cli-test/SKILL.mddoc9,761 bytes.agents/skills/release-cli/SKILL.mddoc7,425 bytes.claude/skills/changelog-cli/SKILL.mddoc4,089 bytes.claude/skills/e2e-cli-test/SKILL.mddoc9,761 bytes.claude/skills/release-cli/SKILL.mddoc7,425 bytes.gitattributesasset19 bytes.github/GIT_CONVENTIONS.mddoc1,683 bytes.github/ISSUE_TEMPLATE/bug.ymlasset1,015 bytes.github/ISSUE_TEMPLATE/config.ymlasset28 bytes.github/ISSUE_TEMPLATE/feature.ymlasset637 bytes.github/PULL_REQUEST_TEMPLATEasset173 bytes.github/dependabot.ymlasset324 bytes.github/scripts/check_pr_template.pyruns1,004 bytes.github/scripts/cleanup-failed-release.shruns3,397 bytes.github/scripts/find-run-draft.shruns736 bytes.github/scripts/install-goreleaser.shruns792 bytes.github/workflows/ci.ymlasset8,851 bytes.github/workflows/dev-release.ymlasset6,594 bytes.github/workflows/release-stable.ymlasset10,287 bytes.gitignoreasset85 bytes.gitleaks.tomlasset194 bytes.golangci.ymlasset908 bytes.goreleaser.yamlasset999 bytesAGENTS.mddoc8,055 bytesCODE_OF_CONDUCT.mddoc5,520 bytesCONTRIBUTING.mddoc8,230 bytesLICENSEasset10,763 bytesMakefileruns601 bytesNOTICEasset88 bytesREADME.mddoc12,149 bytesRELEASE.mddoc15,986 bytesSECURITY.mddoc654 bytesSKILL.mdcore8,302 bytesSKILL.mdcore8,302 bytesSKILL.mdcore8,302 bytesSKILL.mdcore8,302 bytesSKILL.mdcore8,302 bytesSKILL.mdcore8,302 bytescmd/heygen/aliases.goruns3,960 bytescmd/heygen/aliases_brandkit_test.goruns1,166 bytescmd/heygen/aliases_test.goruns3,309 bytescmd/heygen/auth.goruns2,023 bytescmd/heygen/auth_login.goruns41,706 bytescmd/heygen/auth_login_device_test.goruns8,277 bytescmd/heygen/auth_login_dispatch_test.goruns15,474 bytescmd/heygen/auth_login_friendly_test.goruns7,898 bytescmd/heygen/auth_login_oauth_test.goruns48,074 bytescmd/heygen/auth_login_picker.goruns6,069 bytescmd/heygen/auth_login_picker_test.goruns5,129 bytescmd/heygen/auth_logout.goruns4,076 bytescmd/heygen/auth_logout_test.goruns5,687 bytescmd/heygen/auth_status.goruns8,829 bytescmd/heygen/auth_status_friendly_test.goruns6,553 bytescmd/heygen/auth_status_oauth_test.goruns8,817 bytescmd/heygen/auth_status_test.goruns14,435 bytescmd/heygen/auth_test.goruns4,883 bytescmd/heygen/builder.goruns17,194 bytescmd/heygen/builder_test.goruns45,199 bytescmd/heygen/columns.goruns4,697 bytescmd/heygen/columns_test.goruns2,480 bytescmd/heygen/config_cmd.goruns4,157 bytescmd/heygen/config_cmd_test.goruns6,501 bytescmd/heygen/confirm.goruns861 bytescmd/heygen/confirm_test.goruns1,064 bytescmd/heygen/context.goruns6,081 bytescmd/heygen/context_test.goruns5,004 bytescmd/heygen/deprecated_flags_test.goruns7,432 bytescmd/heygen/feedback.goruns2,900 bytescmd/heygen/feedback_test.goruns3,541 bytescmd/heygen/formatter_select.goruns1,179 bytescmd/heygen/generated_example_flags_test.goruns9,092 bytescmd/heygen/generated_examples_test.goruns488 bytescmd/heygen/generated_root_test.goruns13,575 bytescmd/heygen/go_version_pin_test.goruns4,911 bytescmd/heygen/headers_test.goruns2,297 bytescmd/heygen/help_flatten.goruns4,911 bytescmd/heygen/hidden_commands_test.goruns2,579 bytescmd/heygen/idempotency_key_test.goruns2,377 bytescmd/heygen/instant_video_test.goruns2,811 bytescmd/heygen/main.goruns4,823 bytescmd/heygen/main_test.goruns3,350 bytescmd/heygen/poll_configs.goruns1,753 bytescmd/heygen/poll_configs_test.goruns470 bytescmd/heygen/root.goruns9,242 bytescmd/heygen/root_test.goruns1,286 bytescmd/heygen/testutil_test.goruns3,688 bytescmd/heygen/timeouts.goruns2,148 bytescmd/heygen/timeouts_test.goruns1,567 bytescmd/heygen/update.goruns11,327 bytescmd/heygen/update_notice.goruns11,520 bytescmd/heygen/update_notice_test.goruns20,836 bytescmd/heygen/update_notice_unix.goruns1,303 bytescmd/heygen/update_notice_windows.goruns1,008 bytescmd/heygen/update_test.goruns20,862 bytescmd/heygen/video_download.goruns8,974 bytescmd/heygen/video_download_test.goruns21,352 bytescmd/heygen/video_list_test.goruns7,124 bytescodegen/examples.goruns2,601 bytescodegen/examples/ai-clipping.yamlasset509 bytescodegen/examples/asset.yamlasset2,840 bytescodegen/examples/audio.yamlasset453 bytescodegen/examples/avatar.yamlasset1,835 bytescodegen/examples/background-removal.yamlasset1,105 bytescodegen/examples/batch.yamlasset855 bytescodegen/examples/brand.yamlasset3,507 bytescodegen/examples/filler-word-removal.yamlasset1,296 bytescodegen/examples/folder.yamlasset222 bytescodegen/examples/lipsync.yamlasset1,537 bytescodegen/examples/model.yamlasset4,101 bytescodegen/examples/template.yamlasset1,964 bytescodegen/examples/user.yamlasset92 bytescodegen/examples/video-agent.yamlasset1,387 bytescodegen/examples/video-translate.yamlasset3,219 bytescodegen/examples/video.yamlasset2,391 bytescodegen/examples/voice.yamlasset1,422 bytescodegen/examples/webhook.yamlasset1,116 bytescodegen/examples_test.goruns1,672 bytescodegen/generate.goruns3,753 bytescodegen/generate_test.goruns2,831 bytescodegen/grouper.goruns33,929 bytescodegen/grouper_test.goruns33,138 bytescodegen/main.goruns2,506 bytescodegen/schema.goruns4,816 bytescodegen/schema_test.goruns6,128 bytescodegen/surface_allowlist_test.goruns12,857 bytescodegen/templates/command.go.tmplasset1,560 bytescodegen/templates/registry.go.tmplasset723 bytescodegen/testdata/golden/registry.goruns587 bytescodegen/testdata/golden/upload.goruns1,020 bytescodegen/testdata/golden/widget.goruns6,708 bytescodegen/testdata/mini_spec.jsonasset8,508 bytescodegen/testdata/test_examples.yamlasset999 bytescodegen/testdata/test_spec.yamlasset9,336 bytesdocs/demo.gifasset88,401 bytesdocs/demo.tapeasset934 bytesgen/ai-clipping.goruns26,836 bytesgen/asset.goruns41,261 bytesgen/audio.goruns5,174 bytesgen/avatar.goruns72,050 bytesgen/background-removal.goruns14,795 bytesgen/brand.goruns78,621 bytesgen/filler-word-removal.goruns10,740 bytesgen/folder.goruns9,088 bytesgen/lipsync.goruns40,579 bytesgen/model.goruns92,143 bytesgen/registry.goruns4,400 bytesgen/template.goruns328,384 bytesgen/user.goruns5,382 bytesgen/video-agent.goruns41,000 bytesgen/video-translate.goruns87,620 bytesgen/video.goruns335,599 bytesgen/voice.goruns29,999 bytesgen/webhook.goruns24,164 bytesgo.modasset2,784 bytesgo.sumasset15,178 bytesinternal/analytics/analytics.goruns12,592 bytesinternal/analytics/analytics_test.goruns22,786 bytesinternal/auth/chain_resolver.goruns3,146 bytesinternal/auth/chain_resolver_test.goruns4,358 bytesinternal/auth/chain_typed_test.goruns5,775 bytesinternal/auth/constants.goruns822 bytesinternal/auth/credential.goruns2,295 bytesinternal/auth/credentials_file.goruns4,172 bytesinternal/auth/env_resolver.goruns984 bytesinternal/auth/env_resolver_test.goruns805 bytesinternal/auth/file_resolver.goruns12,297 bytesinternal/auth/file_resolver_test.goruns14,335 bytesinternal/auth/file_store.goruns1,275 bytesinternal/auth/file_store_test.goruns7,730 bytesinternal/auth/not_configured.goruns196 bytesinternal/auth/oauth/browser.goruns3,757 bytesinternal/auth/oauth/browser_test.goruns5,418 bytesinternal/auth/oauth/device.goruns7,295 bytesinternal/auth/oauth/device_test.goruns8,397 bytesinternal/auth/oauth/loopback.goruns12,355 bytesinternal/auth/oauth/loopback_test.goruns10,977 bytesinternal/auth/oauth/oauth.goruns20,439 bytesinternal/auth/oauth/oauth_test.goruns21,670 bytesinternal/auth/oauth/pkce.goruns1,463 bytesinternal/auth/oauth/pkce_test.goruns1,949 bytesinternal/auth/oauth/tokens.goruns2,066 bytesinternal/auth/oauth/tokens_test.goruns1,961 bytesinternal/auth/oauth_store.goruns6,972 bytesinternal/auth/resolver.goruns1,101 bytesinternal/auth/store.goruns143 bytesinternal/auth/user_store.goruns4,414 bytesinternal/auth/user_store_test.goruns9,205 bytesinternal/client/client.goruns20,552 bytesinternal/client/client_test.goruns8,759 bytesinternal/client/executor.goruns20,794 bytesinternal/client/executor_test.goruns38,860 bytesinternal/client/oauth_transport_test.goruns32,310 bytesinternal/client/retry.goruns5,536 bytesinternal/client/retry_test.goruns12,099 bytesinternal/command/hidden.goruns1,375 bytesinternal/command/spec.goruns13,652 bytesinternal/command/spec_test.goruns18,941 bytesinternal/config/config.goruns953 bytesinternal/config/env_provider.goruns1,404 bytesinternal/config/env_provider_test.goruns1,588 bytesinternal/config/file_provider.goruns1,741 bytesinternal/config/file_provider_test.goruns4,269 bytesinternal/config/layered_provider.goruns1,668 bytesinternal/config/layered_provider_test.goruns3,280 bytesinternal/errors/api_error.goruns334 bytesinternal/errors/codes.goruns2,639 bytesinternal/errors/codes_test.goruns8,078 bytesinternal/errors/errors.goruns8,354 bytesinternal/errors/errors_test.goruns13,080 bytesinternal/origin/origin.goruns8,204 bytesinternal/origin/origin_test.goruns6,646 bytesinternal/output/formatter.goruns1,612 bytesinternal/output/human_formatter.goruns19,334 bytesinternal/output/human_formatter_test.goruns20,430 bytesinternal/output/json_formatter.goruns2,799 bytesinternal/output/json_formatter_test.goruns6,672 bytesinternal/output/spinner.goruns2,831 bytesinternal/output/spinner_test.goruns1,183 bytesinternal/paths/paths.goruns400 bytesscripts/install.shruns5,235 bytesscripts/release-surface.shruns10,476 bytes
Read SKILL.md
# HeyGen CLI
Official CLI for the HeyGen video generation API. 30+ commands auto-generated from the OpenAPI spec. All output is JSON by default.
- **API Docs**: https://developers.heygen.com
- **Install**: `curl -fsSL https://static.heygen.ai/cli/install.sh | bash`
- **Auth**: Requires `HEYGEN_API_KEY` environment variable. The key must be provisioned by a user from https://app.heygen.com/settings/api
For attended human setup in a remote/headless terminal, `heygen auth login
--device` can provision the shared `~/.heygen/credentials` OAuth session.
Agents and CI must continue using `HEYGEN_API_KEY`; device login deliberately
refuses unattended environments.
## Key CommandsView the complete source on GitHubSkills included
- heygen-cli
Repository facts
- License
- Apache-2.0
- Created
- Mar 30, 2026
- Last pushed
- Nov 7, 2026
- Forks
- 29
- Open issues
- 2
- Project activity
- Active
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 5, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 126 notes
SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedgen/ai-clipping.go:12Analysis incomplete: physical or joined line exceeds character limitgen/ai-clipping.go:10Analysis incomplete: physical or joined line exceeds character limitgen/ai-clipping.go:11Analysis incomplete: physical or joined line exceeds character limitgen/ai-clipping.go:106Analysis incomplete: physical or joined line exceeds character limitgen/ai-clipping.go:104Analysis incomplete: physical or joined line exceeds character limitgen/ai-clipping.go:105Analysis incomplete: physical or joined line exceeds character limitgen/ai-clipping.go:123Analysis incomplete: physical or joined line exceeds character limitgen/ai-clipping.go:121Analysis incomplete: physical or joined line exceeds character limitgen/ai-clipping.go:122Analysis incomplete: physical or joined line exceeds character limitgen/asset.go:187Analysis incomplete: physical or joined line exceeds character limitgen/asset.go:188Analysis incomplete: physical or joined line exceeds character limitgen/asset.go:403Analysis incomplete: physical or joined line exceeds character limitgen/asset.go:401Analysis incomplete: physical or joined line exceeds character limitgen/asset.go:402Analysis incomplete: physical or joined line exceeds character limitgen/avatar.go:11Analysis incomplete: physical or joined line exceeds character limit
- No broad tool permissions
- 11 dangerous shell commandsin 9 files: .github/workflows/ci.yml:82 Makefile:19 .agents/skills/e2e-cli-test/SKILL.md:212 and 6 more
- 495 network referencesin 70 files: internal/auth/oauth/oauth_test.go:58 cmd/heygen/builder_test.go:191 cmd/heygen/config_cmd_test.go:16 and 67 more
- No hidden or obfuscated text
- 3 instruction override signalsin 1 file: cmd/heygen/builder.go:233
- 161 executable scriptsin 161 files: .github/scripts/check_pr_template.py:1 .github/scripts/cleanup-failed-release.sh:1 .github/scripts/find-run-draft.sh:1 and 158 more
- 299 references to secretsin 56 files: cmd/heygen/auth_login_oauth_test.go:64 internal/auth/file_resolver_test.go:136 cmd/heygen/auth_login.go:173 and 53 more
- No requests to vote in Hot
Show all 969 signals by file
.agents/skills/README.md
- Network accessline 3
Skills for working on this repository, in the open [Agent Skills](https://agentskills.io)
.agents/skills/e2e-cli-test/SKILL.md
.agents/skills/release-cli/SKILL.md
- Access to secretsline 35
[Credential-related source omitted] - Network accessline 129
<file>`; stop point 5 unless its hash still matches) and read it back, and verify the installer into a scratch directory rather than over the user's own `heygen`. `install.sh` reads `INSTALL_DIR`, so it goes on `bash`, not `curl`: `d=$(mkte - Network accessline 130
the installer into a scratch directory rather than over the user's own `heygen`. `install.sh` reads `INSTALL_DIR`, so it goes on `bash`, not `curl`: `d=$(mktemp -d); curl -fsSL https://static.heygen.ai/cli/install.sh | INSTALL_DIR="$d" bash - Network accessline 131
`install.sh` reads `INSTALL_DIR`, so it goes on `bash`, not `curl`: `d=$(mktemp -d); curl -fsSL https://static.heygen.ai/cli/install.sh | INSTALL_DIR="$d" bash`,
.claude/skills/e2e-cli-test/SKILL.md
.claude/skills/release-cli/SKILL.md
- Access to secretsline 35
[Credential-related source omitted] - Network accessline 129
<file>`; stop point 5 unless its hash still matches) and read it back, and verify the installer into a scratch directory rather than over the user's own `heygen`. `install.sh` reads `INSTALL_DIR`, so it goes on `bash`, not `curl`: `d=$(mkte - Network accessline 130
the installer into a scratch directory rather than over the user's own `heygen`. `install.sh` reads `INSTALL_DIR`, so it goes on `bash`, not `curl`: `d=$(mktemp -d); curl -fsSL https://static.heygen.ai/cli/install.sh | INSTALL_DIR="$d" bash - Network accessline 131
`install.sh` reads `INSTALL_DIR`, so it goes on `bash`, not `curl`: `d=$(mktemp -d); curl -fsSL https://static.heygen.ai/cli/install.sh | INSTALL_DIR="$d" bash`,
.github/scripts/check_pr_template.py
.github/scripts/cleanup-failed-release.sh
- Executable scriptline 1
#!/usr/bin/env bash
.github/scripts/find-run-draft.sh
- Executable scriptline 1
#!/usr/bin/env bash
.github/scripts/install-goreleaser.sh
- Executable scriptline 1
#!/usr/bin/env bash - Network accessline 12
cd "$(mktemp -d)" curl -sSfL "https://github.com/goreleaser/goreleaser/releases/download/${GORELEASER_VERSION}/goreleaser_Linux_x86_64.tar.gz" -o goreleaser.tar.gz - Network accessline 13
curl -sSfL "https://github.com/goreleaser/goreleaser/releases/download/${GORELEASER_VERSION}/goreleaser_Linux_x86_64.tar.gz" -o goreleaser.tar.gz - Dangerous shell operationline 16
sudo mv goreleaser /usr/local/bin/
.github/workflows/ci.yml
- Network accessline 77
GITLEAKS_SHA256="a65b5253807a68ac0cafa4414031fd740aeb55f54fb7e55f386acb52e6a840eb" cd /tmp curl -sSfL "https://github.com/gitleaks/gitleaks/releases/download/v${GITLEAKS_VERSION}/gitleaks_${GITLEAKS_VERSION}_linux_x64.ta - Network accessline 78
cd /tmp curl -sSfL "https://github.com/gitleaks/gitleaks/releases/download/v${GITLEAKS_VERSION}/gitleaks_${GITLEAKS_VERSION}_linux_x64.tar.gz" -o gitleaks.tar.gz echo "${GITLEAKS_SHA256} gitleaks.tar.gz" | sha256sum -c - Network accessline 79
curl -sSfL "https://github.com/gitleaks/gitleaks/releases/download/v${GITLEAKS_VERSION}/gitleaks_${GITLEAKS_VERSION}_linux_x64.tar.gz" -o gitleaks.tar.gz - Dangerous shell operationline 82
sudo mv gitleaks /usr/local/bin/ - Dangerous shell operationline 83
rm -f gitleaks.tar.gz
AGENTS.md
CODE_OF_CONDUCT.md
- Network accessline 39
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement via [GitHub Issues](https://github.com/heygen-com/heygen-cli/issues). All complaints will be reviewed a - Network accessline 73
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. - Network accessline 77
For answers to common questions about this code of conduct, see the FAQ at [https://www.contributor-covenant.org/faq][FAQ]. Translations are available at [https://www.contributor-covenant.org/translations][translations]. - Network accessline 79
[homepage]: https://www.contributor-covenant.org - Network accessline 80
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html - Network accessline 81
[Mozilla CoC]: https://github.com/mozilla/diversity - Network accessline 82
[FAQ]: https://www.contributor-covenant.org/faq - Network accessline 83
[translations]: https://www.contributor-covenant.org/translations
CONTRIBUTING.md
LICENSE
Makefile
README.md
- Network accessline 3
[](https://github.com/heygen-com/heygen-cli/actions/workflows/ci.yml) - Network accessline 4
[](https://go.dev) - Network accessline 5
[](./LICENSE) - Network accessline 11
Full reference and examples: **[developers.heygen.com/cli](https://developers.heygen.com/cli)**. - Network accessline 22
[heygen-com/skills](https://github.com/heygen-com/skills) — one-line install for Claude Code, Codex, and other agents. Create your own avatar and generate a video in a single conversation. - Access to secretsline 28
[Credential-related source omitted] - Dangerous shell operationline 34
curl -fsSL https://static.heygen.ai/cli/install.sh | bash - Network accessline 34
curl -fsSL https://static.heygen.ai/cli/install.sh | bash - Access to secretsline 68
[Credential-related source omitted] - Network accessline 103
Verify any of the above with `heygen auth status`. When an API key is active, the status includes its name, permission mode and scopes, and expiration. Get an API key at [app.heygen.com/settings/api](https://app.heygen.com/settings/api). - Access to secretsline 105
[Credential-related source omitted] - Access to secretsline 107
[Credential-related source omitted] - Network accessline 126
heygen video get <video-id> | jq -r '.data.video_page_url' # → https://app.heygen.com/videos/... - Network accessline 127
# → https://app.heygen.com/videos/... - Network accessline 154
Mirrors the [HeyGen v3 API](https://developers.heygen.com). Pattern: `heygen <noun> <verb>`. - Network accessline 187
{"error": {"code": "not_found", "message": "Video not found", "hint": "Check ID with: heygen video list", "doc_url": "https://developers.heygen.com/docs/error-codes#not-found"}} - Access to secretsline 197
[Credential-related source omitted] - Network accessline 207
- **Quick signal (recommended for agents):** `heygen feedback --rating <1-5> --comment "..."`. Goes to private, anonymous analytics. Safe to run unattended. Usage telemetry is anonymous until you sign in: running `heygen auth login` links i - Network accessline 208
- **Tracked bug a maintainer should see:** open a [GitHub issue](https://github.com/heygen-com/heygen-cli/issues). This repo is **public**, so review what you paste first and omit anything sensitive (API keys, prompts, internal URLs, person - Network accessline 222
- [CLI Documentation](https://developers.heygen.com/cli) - Network accessline 223
- [API Documentation](https://developers.heygen.com) - Network accessline 224
- [Releases](https://github.com/heygen-com/heygen-cli/releases)
RELEASE.md
SECURITY.md
- Network accessline 5
If you discover a security vulnerability in the HeyGen CLI, please report it through [GitHub Security Advisories](https://github.com/heygen-com/heygen-cli/security/advisories/new). Do not open a public issue.
SKILL.md
- Network accessline 10
- **API Docs**: https://developers.heygen.com - **Install**: `curl -fsSL https://static.heygen.ai/cli/install.sh | bash` - Dangerous shell operationline 11
- **Install**: `curl -fsSL https://static.heygen.ai/cli/install.sh | bash` - Network accessline 11
- **Install**: `curl -fsSL https://static.heygen.ai/cli/install.sh | bash` - Network accessline 12
[Credential-related source omitted] - Access to secretsline 12
[Credential-related source omitted] - Access to secretsline 16
[Credential-related source omitted] - Network accessline 45
# Translate a video heygen video-translate create -d '{"video":{"type":"url","url":"https://..."},"output_languages":["es"]}' - Network accessline 46
heygen video-translate create -d '{"video":{"type":"url","url":"https://..."},"output_languages":["es"]}' - Network accessline 162
with `HEYGEN_NO_UPDATE_CHECK=1`. - Video download writes to `{video-id}.mp4` by default. Override with `--output-path`. Errors if the file already exists; use `--force` to overwrite. - For the full API reference (concepts, limits, pricing), - Network accessline 164
- For the full API reference (concepts, limits, pricing), see https://developers.heygen.com
cmd/heygen/aliases.go
- Executable scriptline 1
Executable file
cmd/heygen/aliases_brandkit_test.go
- Executable scriptline 1
Executable file - Network accessline 18
"GET /v3/brand-kits": { StatusCode: 200, Body: `{"data":[{"brand_kit_id":"bk_1","name":"Acme","logo_url":"https://x/y.png","colors":["#ffffff"]}]}`, - Network accessline 19
StatusCode: 200, Body: `{"data":[{"brand_kit_id":"bk_1","name":"Acme","logo_url":"https://x/y.png","colors":["#ffffff"]}]}`, }, - Network accessline 20
Body: `{"data":[{"brand_kit_id":"bk_1","name":"Acme","logo_url":"https://x/y.png","colors":["#ffffff"]}]}`,
cmd/heygen/aliases_test.go
- Executable scriptline 1
Executable file
cmd/heygen/auth.go
- Executable scriptline 1
Executable file - Network accessline 17
2. Browser OAuth (uses subscription credits — opens https://app.heygen.com): - Access to secretsline 32
[Credential-related source omitted] - Access to secretsline 37
[Credential-related source omitted] - Access to secretsline 42
[Credential-related source omitted]
cmd/heygen/auth_login.go
- Executable scriptline 1
Executable file - Network accessline 167
The OAuth flow opens your default browser to https://app.heygen.com/oauth/authorize and waits for the redirect on a - Network accessline 168
https://app.heygen.com/oauth/authorize and waits for the redirect on a - Access to secretsline 173
[Credential-related source omitted] - Access to secretsline 181
[Credential-related source omitted] - Access to secretsline 274
[Credential-related source omitted] - Access to secretsline 298
[Credential-related source omitted] - Access to secretsline 309
[Credential-related source omitted] - Access to secretsline 326
[Credential-related source omitted] - Access to secretsline 340
[Credential-related source omitted] - Access to secretsline 347
[Credential-related source omitted] - Access to secretsline 352
[Credential-related source omitted] - Access to secretsline 361
[Credential-related source omitted] - Access to secretsline 385
[Credential-related source omitted] - Access to secretsline 386
[Credential-related source omitted] - Access to secretsline 398
[Credential-related source omitted] - Access to secretsline 463
[Credential-related source omitted] - Access to secretsline 676
[Credential-related source omitted] - Network accessline 817
fmt.Fprintln(cmd.ErrOrStderr(), "Opening browser to https://app.heygen.com/oauth/authorize ...") - Access to secretsline 850
[Credential-related source omitted] - Access to secretsline 855
[Credential-related source omitted] - Access to secretsline 872
[Credential-related source omitted] - Access to secretsline 873
[Credential-related source omitted] - Access to secretsline 925
[Credential-related source omitted] - Network accessline 991
req.Header.Set("Authorization", "Bearer "+accessToken) req.Header.Set("User-Agent", "heygen-cli/device-login") hc := &http.Client{Timeout: 10 * time.Second} - Network accessline 992
req.Header.Set("User-Agent", "heygen-cli/device-login") hc := &http.Client{Timeout: 10 * time.Second} resp, err := hc.Do(req) //nolint:gosec // G704: configured HeyGen API or explicit test endpoint - Network accessline 993
hc := &http.Client{Timeout: 10 * time.Second} - Access to secretsline 1032
[Credential-related source omitted] - Access to secretsline 1034
[Credential-related source omitted] - Access to secretsline 1048
[Credential-related source omitted] - Network accessline 1050
func buildUsersMeRequest(ctx context.Context, baseURL string) (*http.Request, error) { if baseURL == "" { baseURL = "https://api.heygen.com" - Network accessline 1051
if baseURL == "" { baseURL = "https://api.heygen.com" } - Network accessline 1052
baseURL = "https://api.heygen.com" - Network accessline 1066
func runUsersMeRequest(req *http.Request) auth.UserInfo { hc := &http.Client{Timeout: 10 * time.Second} - Network accessline 1067
hc := &http.Client{Timeout: 10 * time.Second}
cmd/heygen/auth_login_device_test.go
cmd/heygen/auth_login_dispatch_test.go
- Executable scriptline 1
Executable file - Network accessline 287
res := runCommandWithInput(t, "http://example.invalid", "", strings.NewReader("piped-key\n"), - Access to secretsline 293
[Credential-related source omitted] - Access to secretsline 352
[Credential-related source omitted] - Access to secretsline 362
[Credential-related source omitted] - Access to secretsline 434
[Credential-related source omitted] - Access to secretsline 446
[Credential-related source omitted] - Access to secretsline 447
[Credential-related source omitted] - Access to secretsline 449
[Credential-related source omitted] - Access to secretsline 450
[Credential-related source omitted] - Access to secretsline 457
[Credential-related source omitted] - Access to secretsline 458
[Credential-related source omitted] - Access to secretsline 470
[Credential-related source omitted] - Access to secretsline 471
[Credential-related source omitted] - Access to secretsline 473
[Credential-related source omitted] - Access to secretsline 474
[Credential-related source omitted]
cmd/heygen/auth_login_friendly_test.go
- Executable scriptline 1
Executable file - Access to secretsline 121
[Credential-related source omitted] - Access to secretsline 127
[Credential-related source omitted] - Access to secretsline 152
[Credential-related source omitted] - Access to secretsline 178
[Credential-related source omitted] - Access to secretsline 193
[Credential-related source omitted]
cmd/heygen/auth_login_oauth_test.go
- Executable scriptline 1
Executable file - Access to secretsline 64
[Credential-related source omitted] - Network accessline 141
c := &http.Client{Timeout: 5 * time.Second} - Access to secretsline 159
[Credential-related source omitted] - Network accessline 168
cfg := oauthLoginConfig{ AuthorizeURL: "http://127.0.0.1:1/oauth/authorize", // unused — we never visit it - Network accessline 169
AuthorizeURL: "http://127.0.0.1:1/oauth/authorize", // unused — we never visit it - Access to secretsline 195
[Credential-related source omitted] - Access to secretsline 245
[Credential-related source omitted] - Network accessline 276
res := runCommandWithInput(t, "http://example.invalid", "", strings.NewReader("hg_xyz\n"), - Access to secretsline 295
[Credential-related source omitted] - Access to secretsline 299
[Credential-related source omitted] - Network accessline 311
res := runCommandWithInput(t, "http://example.invalid", "", strings.NewReader("hg_replacement\n"), - Access to secretsline 322
[Credential-related source omitted] - Access to secretsline 336
[Credential-related source omitted] - Network accessline 341
res := runCommandWithInput(t, "http://example.invalid", "", strings.NewReader("hg_first\n"), - Access to secretsline 359
[Credential-related source omitted] - Access to secretsline 364
[Credential-related source omitted] - Access to secretsline 366
[Credential-related source omitted] - Access to secretsline 397
[Credential-related source omitted] - Access to secretsline 399
[Credential-related source omitted] - Access to secretsline 402
[Credential-related source omitted] - Access to secretsline 403
[Credential-related source omitted] - Access to secretsline 410
[Credential-related source omitted] - Access to secretsline 412
[Credential-related source omitted] - Access to secretsline 415
[Credential-related source omitted] - Access to secretsline 419
[Credential-related source omitted] - Access to secretsline 436
[Credential-related source omitted] - Network accessline 447
res := runCommandWithInput(t, "http://example.invalid", "", strings.NewReader("hg_new\n"), - Access to secretsline 453
[Credential-related source omitted] - Access to secretsline 459
[Credential-related source omitted] - Network accessline 474
res := runCommandWithInput(t, "http://example.invalid", "", strings.NewReader(""), - Network accessline 484
// W4: when cfg.UsersMeBaseURL is empty (production path), the login // identity probe must read HEYGEN_API_BASE from the config provider // instead of hardcoding https://api.heygen.com. Without this, pointing - Network accessline 485
// identity probe must read HEYGEN_API_BASE from the config provider // instead of hardcoding https://api.heygen.com. Without this, pointing // the CLI at a dev sandbox silently fans the probe out to prod. - Network accessline 486
// instead of hardcoding https://api.heygen.com. Without this, pointing - Access to secretsline 491
[Credential-related source omitted] - Access to secretsline 680
[Credential-related source omitted] - Access to secretsline 744
[Credential-related source omitted] - Access to secretsline 842
[Credential-related source omitted] - Access to secretsline 878
[Credential-related source omitted] - Access to secretsline 909
[Credential-related source omitted] - Access to secretsline 941
[Credential-related source omitted] - Access to secretsline 973
[Credential-related source omitted] - Access to secretsline 1005
[Credential-related source omitted] - Access to secretsline 1059
[Credential-related source omitted] - Access to secretsline 1060
[Credential-related source omitted] - Access to secretsline 1068
[Credential-related source omitted] - Access to secretsline 1111
[Credential-related source omitted] - Access to secretsline 1112
[Credential-related source omitted] - Access to secretsline 1187
[Credential-related source omitted]
cmd/heygen/auth_login_picker.go
- Executable scriptline 1
Executable file
cmd/heygen/auth_login_picker_test.go
- Executable scriptline 1
Executable file
cmd/heygen/auth_logout.go
- Executable scriptline 1
Executable file - Access to secretsline 45
[Credential-related source omitted] - Access to secretsline 49
[Credential-related source omitted] - Access to secretsline 58
[Credential-related source omitted] - Access to secretsline 75
[Credential-related source omitted] - Access to secretsline 110
[Credential-related source omitted] - Access to secretsline 125
[Credential-related source omitted]
cmd/heygen/auth_logout_test.go
- Executable scriptline 1
Executable file - Network accessline 60
func TestAuthLogoutConfigFromEnvironmentUsesRevokeOverride(t *testing.T) { t.Setenv("HEYGEN_OAUTH_REVOKE_URL", "http://127.0.0.1:18080/v1/oauth/revoke") - Network accessline 61
t.Setenv("HEYGEN_OAUTH_REVOKE_URL", "http://127.0.0.1:18080/v1/oauth/revoke") - Network accessline 66
if got.RevokeURL != "http://127.0.0.1:18080/v1/oauth/revoke" { - Access to secretsline 76
[Credential-related source omitted] - Network accessline 94
res := runAuthLogoutForTest(t, authLogoutConfig{RevokeURL: "http://127.0.0.1:1/revoke"}) - Access to secretsline 99
[Credential-related source omitted] - Network accessline 120
res := runAuthLogoutForTest(t, authLogoutConfig{RevokeURL: "http://127.0.0.1:1/revoke"}) - Access to secretsline 130
[Credential-related source omitted] - Access to secretsline 131
[Credential-related source omitted] - Network accessline 139
res := runAuthLogoutForTest(t, authLogoutConfig{RevokeURL: "http://127.0.0.1:1/revoke"})
cmd/heygen/auth_status.go
cmd/heygen/auth_status_friendly_test.go
- Executable scriptline 1
Executable file - Access to secretsline 18
[Credential-related source omitted] - Access to secretsline 20
[Credential-related source omitted] - Access to secretsline 82
[Credential-related source omitted] - Access to secretsline 126
[Credential-related source omitted] - Access to secretsline 127
[Credential-related source omitted] - Access to secretsline 134
[Credential-related source omitted]
cmd/heygen/auth_status_oauth_test.go
- Executable scriptline 1
Executable file - Access to secretsline 43
[Credential-related source omitted] - Access to secretsline 44
[Credential-related source omitted] - Access to secretsline 77
[Credential-related source omitted] - Access to secretsline 78
[Credential-related source omitted] - Access to secretsline 130
[Credential-related source omitted] - Access to secretsline 132
[Credential-related source omitted] - Access to secretsline 145
[Credential-related source omitted] - Access to secretsline 181
[Credential-related source omitted] - Access to secretsline 208
[Credential-related source omitted] - Access to secretsline 246
[Credential-related source omitted] - Access to secretsline 259
[Credential-related source omitted] - Access to secretsline 260
[Credential-related source omitted]
cmd/heygen/auth_status_test.go
- Executable scriptline 1
Executable file - Access to secretsline 193
[Credential-related source omitted] - Access to secretsline 272
[Credential-related source omitted] - Access to secretsline 280
[Credential-related source omitted] - Access to secretsline 342
[Credential-related source omitted] - Access to secretsline 349
[Credential-related source omitted] - Access to secretsline 382
[Credential-related source omitted] - Network accessline 384
res := runCommand(t, "http://example.invalid", "", "auth", "status")
cmd/heygen/auth_test.go
- Executable scriptline 1
Executable file - Access to secretsline 11
[Credential-related source omitted] - Access to secretsline 12
[Credential-related source omitted] - Access to secretsline 20
[Credential-related source omitted] - Access to secretsline 29
[Credential-related source omitted] - Access to secretsline 32
[Credential-related source omitted] - Network accessline 34
res := runCommandWithInput(t, "http://example.invalid", "", strings.NewReader(""), "auth", "login", "--api-key") - Access to secretsline 42
[Credential-related source omitted] - Access to secretsline 47
[Credential-related source omitted] - Access to secretsline 53
[Credential-related source omitted] - Network accessline 55
res := runCommandWithInput(t, "http://example.invalid", "", strings.NewReader(""), "auth", "login", "--api-key") - Network accessline 71
res := runCommandWithInput(t, "http://example.invalid", "", strings.NewReader("real-key\n"), "auth", "login", "--api-key") - Access to secretsline 78
[Credential-related source omitted] - Network accessline 85
res := runCommandWithInput(t, "http://example.invalid", "", strings.NewReader("test-key-123\n"), "auth", "login", "--api-key") - Access to secretsline 101
[Credential-related source omitted] - Network accessline 108
res := runCommandWithInput(t, "http://example.invalid", "", strings.NewReader("\n"), "auth", "login", "--api-key") - Network accessline 118
first := runCommandWithInput(t, "http://example.invalid", "", strings.NewReader("first-key\n"), "auth", "login", "--api-key") - Network accessline 123
second := runCommandWithInput(t, "http://example.invalid", "", strings.NewReader("second-key\n"), "auth", "login", "--api-key") - Access to secretsline 129
[Credential-related source omitted] - Network accessline 136
res := runCommandWithInput(t, "http://example.invalid", "", strings.NewReader("test-key-123\n"), "auth", "login", "--api-key")
cmd/heygen/builder.go
- Executable scriptline 1
Executable file - Instruction override signalline 233
} if spec.Destructive { cmd.Flags().Bool("force", false, "Skip confirmation prompt for destructive operations") - Instruction override signalline 234
if spec.Destructive { cmd.Flags().Bool("force", false, "Skip confirmation prompt for destructive operations") } - Instruction override signalline 235
cmd.Flags().Bool("force", false, "Skip confirmation prompt for destructive operations")
cmd/heygen/builder_test.go
- Executable scriptline 1
Executable file - Network accessline 191
func TestGenBuilder_VideoCreate_RequestSchema(t *testing.T) { res := runGenCommand(t, "http://example.test", "", videoCreateSchemaSpec, "create", "--request-schema") - Network accessline 192
res := runGenCommand(t, "http://example.test", "", videoCreateSchemaSpec, "create", "--request-schema") - Network accessline 205
func TestGenBuilder_VideoGet_ResponseSchema(t *testing.T) { res := runGenCommand(t, "http://example.test", "", videoGetSchemaSpec, "get", "vid_123", "--response-schema") - Network accessline 206
res := runGenCommand(t, "http://example.test", "", videoGetSchemaSpec, "get", "vid_123", "--response-schema") - Network accessline 216
func TestGenBuilder_VideoList_NoRequestSchema(t *testing.T) { res := runGenCommand(t, "http://example.test", "test-key", videoListSpec, "list", "--request-schema") - Network accessline 217
res := runGenCommand(t, "http://example.test", "test-key", videoListSpec, "list", "--request-schema") - Network accessline 227
func TestGenBuilder_VideoCreate_SchemaSkipsAuth(t *testing.T) { res := runGenCommand(t, "http://example.test", "", videoCreateSchemaSpec, "create", "--response-schema") - Network accessline 228
res := runGenCommand(t, "http://example.test", "", videoCreateSchemaSpec, "create", "--response-schema") - Network accessline 238
func TestGenBuilder_SchemaBypassesRequiredFlags(t *testing.T) { res := runGenCommand(t, "http://example.test", "", videoTranslateSchemaSpec, "create", "--request-schema") - Network accessline 239
res := runGenCommand(t, "http://example.test", "", videoTranslateSchemaSpec, "create", "--request-schema") - Network accessline 252
func TestGenBuilder_SchemaBypassesArgs(t *testing.T) { res := runGenCommand(t, "http://example.test", "", webhookEndpointUpdateSchemaSpec, "endpoints", "update", "--request-schema") - Network accessline 253
res := runGenCommand(t, "http://example.test", "", webhookEndpointUpdateSchemaSpec, "endpoints", "update", "--request-schema") - Network accessline 266
func TestGenBuilder_RequiredFlagsStillValidatedWithoutSchema(t *testing.T) { res := runGenCommand(t, "http://example.test", "test-key", videoTranslateSchemaSpec, "create") - Network accessline 267
res := runGenCommand(t, "http://example.test", "test-key", videoTranslateSchemaSpec, "create") - Network accessline 277
func TestGenBuilder_ArgsStillValidatedWithoutSchema(t *testing.T) { res := runGenCommand(t, "http://example.test", "", webhookEndpointUpdateSchemaSpec, "endpoints", "update") - Network accessline 278
res := runGenCommand(t, "http://example.test", "", webhookEndpointUpdateSchemaSpec, "endpoints", "update") - Network accessline 332
res := runGenCommand(t, "http://example.test", "test-key", spec, "create", "-d", `{"title":"Demo"}`) - Network accessline 357
res := runGenCommand(t, "http://example.test", "test-key", spec, "create", "--help") - Network accessline 390
res := runGenCommand(t, "http://example.test", "test-key", spec, "glossaries", "list", "--help") - Network accessline 607
return } _, _ = w.Write([]byte(`{"data":{"video_id":"vid_123","status":"completed","video_url":"https://cdn.test/video.mp4"}}`)) - Network accessline 608
} _, _ = w.Write([]byte(`{"data":{"video_id":"vid_123","status":"completed","video_url":"https://cdn.test/video.mp4"}}`)) return - Network accessline 609
_, _ = w.Write([]byte(`{"data":{"video_id":"vid_123","status":"completed","video_url":"https://cdn.test/video.mp4"}}`)) - Network accessline 661
return } _, _ = w.Write([]byte(`{"data":{"video_id":"vid_123","status":"completed","video_url":"https://cdn.test/video.mp4"}}`)) - Network accessline 662
} _, _ = w.Write([]byte(`{"data":{"video_id":"vid_123","status":"completed","video_url":"https://cdn.test/video.mp4"}}`)) return - Network accessline 663
_, _ = w.Write([]byte(`{"data":{"video_id":"vid_123","status":"completed","video_url":"https://cdn.test/video.mp4"}}`)) - Network accessline 990
{Name: "entity-id", Type: "string", Source: "body", JSONName: "entity_id"}, }, Examples: []string{"heygen webhook create --url https://example.com/hook"}, - Network accessline 991
}, Examples: []string{"heygen webhook create --url https://example.com/hook"}, } - Network accessline 992
Examples: []string{"heygen webhook create --url https://example.com/hook"}, - Network accessline 995
res := runGenCommand(t, srv.URL, "test-key", spec, "create", "--url", "https://example.com/hook", "--entity-id", "proj_456") - Network accessline 996
"create", "--url", "https://example.com/hook", "--entity-id", "proj_456") - Network accessline 999
t.Errorf("ExitCode = %d, want 0\nstderr: %s", res.ExitCode, res.Stderr) } if gotBody["url"] != "https://example.com/hook" { - Network accessline 1000
} if gotBody["url"] != "https://example.com/hook" { t.Errorf("body.url = %v, want %q", gotBody["url"], "https://example.com/hook") - Network accessline 1001
if gotBody["url"] != "https://example.com/hook" { - Network accessline 1002
t.Errorf("body.url = %v, want %q", gotBody["url"], "https://example.com/hook") - Network accessline 1118
{Name: "events", Type: "string-slice", Source: "body", JSONName: "events", Enum: []string{"avatar_video.success", "avatar_video.fail"}}, }, Examples: []string{"heygen webhook endpoints create --url https://example.com/hook --events avat - Network accessline 1119
}, Examples: []string{"heygen webhook endpoints create --url https://example.com/hook --events avatar_video.success"}, } - Network accessline 1120
Examples: []string{"heygen webhook endpoints create --url https://example.com/hook --events avatar_video.success"}, - Network accessline 1123
res := runGenCommand(t, srv.URL, "test-key", spec, "endpoints", "create", "--url", "https://example.com/hook", "--events", "avatar_video.success") - Network accessline 1124
"--url", "https://example.com/hook", "--events", "avatar_video.success") - Network accessline 1236
res := runGeneratedRootCommand(t, "http://example.test", "test-key", - Access to secretsline 1334
[Credential-related source omitted]
cmd/heygen/columns.go
- Executable scriptline 1
Executable file
cmd/heygen/columns_test.go
- Executable scriptline 1
Executable file
cmd/heygen/config_cmd.go
- Executable scriptline 1
Executable file
cmd/heygen/config_cmd_test.go
- Executable scriptline 1
Executable file - Network accessline 16
res := runCommand(t, "http://example.invalid", "", "config", "set", "output", "human") - Network accessline 30
func TestConfigSet_InvalidKey(t *testing.T) { t.Setenv("HEYGEN_CONFIG_DIR", t.TempDir()) res := runCommand(t, "http://example.invalid", "", "config", "set", "bogus", "value") - Network accessline 31
t.Setenv("HEYGEN_CONFIG_DIR", t.TempDir()) res := runCommand(t, "http://example.invalid", "", "config", "set", "bogus", "value") if res.ExitCode != 2 { - Network accessline 32
res := runCommand(t, "http://example.invalid", "", "config", "set", "bogus", "value") - Network accessline 38
func TestConfigSet_APIBaseNotExposed(t *testing.T) { t.Setenv("HEYGEN_CONFIG_DIR", t.TempDir()) res := runCommand(t, "http://example.invalid", "", "config", "set", "api_base", "https://api-dev.heygen.com") - Network accessline 39
t.Setenv("HEYGEN_CONFIG_DIR", t.TempDir()) res := runCommand(t, "http://example.invalid", "", "config", "set", "api_base", "https://api-dev.heygen.com") if res.ExitCode != 2 { - Network accessline 40
res := runCommand(t, "http://example.invalid", "", "config", "set", "api_base", "https://api-dev.heygen.com") - Network accessline 46
func TestConfigSet_InvalidOutputValue(t *testing.T) { t.Setenv("HEYGEN_CONFIG_DIR", t.TempDir()) res := runCommand(t, "http://example.invalid", "", "config", "set", "output", "xml") - Network accessline 47
t.Setenv("HEYGEN_CONFIG_DIR", t.TempDir()) res := runCommand(t, "http://example.invalid", "", "config", "set", "output", "xml") if res.ExitCode != 2 { - Network accessline 48
res := runCommand(t, "http://example.invalid", "", "config", "set", "output", "xml") - Network accessline 54
func TestConfigSet_SkipsAuth(t *testing.T) { t.Setenv("HEYGEN_CONFIG_DIR", t.TempDir()) res := runCommand(t, "http://example.invalid", "", "config", "set", "output", "human") - Network accessline 55
t.Setenv("HEYGEN_CONFIG_DIR", t.TempDir()) res := runCommand(t, "http://example.invalid", "", "config", "set", "output", "human") if res.ExitCode != 0 { - Network accessline 56
res := runCommand(t, "http://example.invalid", "", "config", "set", "output", "human") - Network accessline 62
func TestConfigGet_Default(t *testing.T) { t.Setenv("HEYGEN_CONFIG_DIR", t.TempDir()) res := runCommand(t, "http://example.invalid", "", "config", "get", "output") - Network accessline 63
t.Setenv("HEYGEN_CONFIG_DIR", t.TempDir()) res := runCommand(t, "http://example.invalid", "", "config", "get", "output") if res.ExitCode != 0 { - Network accessline 64
res := runCommand(t, "http://example.invalid", "", "config", "get", "output") - Network accessline 84
res := runCommand(t, "http://example.invalid", "", "config", "get", "output", "--human=false") - Network accessline 106
res := runCommand(t, "http://example.invalid", "", "config", "get", "output", "--human=false") - Network accessline 120
func TestConfigGet_InvalidKey(t *testing.T) { t.Setenv("HEYGEN_CONFIG_DIR", t.TempDir()) res := runCommand(t, "http://example.invalid", "", "config", "get", "bogus") - Network accessline 121
t.Setenv("HEYGEN_CONFIG_DIR", t.TempDir()) res := runCommand(t, "http://example.invalid", "", "config", "get", "bogus") if res.ExitCode != 2 { - Network accessline 122
res := runCommand(t, "http://example.invalid", "", "config", "get", "bogus") - Network accessline 128
func TestConfigList_AllDefaults(t *testing.T) { t.Setenv("HEYGEN_CONFIG_DIR", t.TempDir()) res := runCommand(t, "http://example.invalid", "", "config", "list") - Network accessline 129
t.Setenv("HEYGEN_CONFIG_DIR", t.TempDir()) res := runCommand(t, "http://example.invalid", "", "config", "list") if res.ExitCode != 0 { - Network accessline 130
res := runCommand(t, "http://example.invalid", "", "config", "list") - Network accessline 151
res := runCommand(t, "http://example.invalid", "", "config", "list") - Network accessline 168
dir := t.TempDir() t.Setenv("HEYGEN_CONFIG_DIR", dir) if res := runCommand(t, "http://example.invalid", "", "config", "set", "update_check", "false"); res.ExitCode != 0 { - Network accessline 169
t.Setenv("HEYGEN_CONFIG_DIR", dir) if res := runCommand(t, "http://example.invalid", "", "config", "set", "update_check", "false"); res.ExitCode != 0 { t.Fatalf("config set: exit %d, stderr %s", res.ExitCode, res.Stderr) - Network accessline 170
if res := runCommand(t, "http://example.invalid", "", "config", "set", "update_check", "false"); res.ExitCode != 0 { - Network accessline 180
} t.Setenv("HEYGEN_NO_UPDATE_CHECK", "1") res := runCommand(t, "http://example.invalid", "", "config", "get", "update_check") - Network accessline 181
t.Setenv("HEYGEN_NO_UPDATE_CHECK", "1") res := runCommand(t, "http://example.invalid", "", "config", "get", "update_check") var got configResponse - Network accessline 182
res := runCommand(t, "http://example.invalid", "", "config", "get", "update_check")
cmd/heygen/confirm.go
- Executable scriptline 1
Executable file
cmd/heygen/confirm_test.go
- Executable scriptline 1
Executable file
cmd/heygen/context.go
cmd/heygen/context_test.go
- Executable scriptline 1
Executable file - Access to secretsline 27
[Credential-related source omitted] - Access to secretsline 49
[Credential-related source omitted] - Access to secretsline 80
[Credential-related source omitted] - Network accessline 88
res := runCommand(t, "http://example.invalid", "", "video", "list") - Access to secretsline 117
[Credential-related source omitted] - Access to secretsline 144
[Credential-related source omitted]
cmd/heygen/deprecated_flags_test.go
- Executable scriptline 1
Executable file
cmd/heygen/feedback.go
- Executable scriptline 1
Executable file
cmd/heygen/feedback_test.go
- Executable scriptline 1
Executable file
cmd/heygen/formatter_select.go
- Executable scriptline 1
Executable file
cmd/heygen/generated_example_flags_test.go
- Executable scriptline 1
Executable file
cmd/heygen/generated_examples_test.go
- Executable scriptline 1
Executable file
cmd/heygen/generated_root_test.go
- Executable scriptline 1
Executable file - Network accessline 277
func TestGeneratedRoot_VideoCreate_RequestSchema_NoAuth(t *testing.T) { res := runCommand(t, "http://example.test", "", "video", "create", "--request-schema") - Network accessline 278
res := runCommand(t, "http://example.test", "", "video", "create", "--request-schema") - Network accessline 295
func TestGeneratedRoot_VideoGet_ResponseSchema_NoAuth(t *testing.T) { res := runCommand(t, "http://example.test", "", "video", "get", "vid_123", "--response-schema") - Network accessline 296
res := runCommand(t, "http://example.test", "", "video", "get", "vid_123", "--response-schema") - Network accessline 313
"GET /v3/videos": { StatusCode: 200, Body: `{"data":[{"id":"vid_123","title":"Demo","status":"completed","created_at":1710000000,"thumbnail_url":"https://cdn.example/thumb.jpg"}]}`, - Network accessline 314
StatusCode: 200, Body: `{"data":[{"id":"vid_123","title":"Demo","status":"completed","created_at":1710000000,"thumbnail_url":"https://cdn.example/thumb.jpg"}]}`, }, - Network accessline 315
Body: `{"data":[{"id":"vid_123","title":"Demo","status":"completed","created_at":1710000000,"thumbnail_url":"https://cdn.example/thumb.jpg"}]}`, - Network accessline 385
"GET /v3/avatars/looks": { StatusCode: 200, Body: `{"data":[{"id":"look_001","name":"Default","avatar_type":"studio_avatar","preview_image_url":"https://cdn.example/look.png","gender":"female"}]}`, - Network accessline 386
StatusCode: 200, Body: `{"data":[{"id":"look_001","name":"Default","avatar_type":"studio_avatar","preview_image_url":"https://cdn.example/look.png","gender":"female"}]}`, }, - Network accessline 387
Body: `{"data":[{"id":"look_001","name":"Default","avatar_type":"studio_avatar","preview_image_url":"https://cdn.example/look.png","gender":"female"}]}`,
cmd/heygen/go_version_pin_test.go
- Executable scriptline 1
Executable file
cmd/heygen/headers_test.go
- Executable scriptline 1
Executable file
cmd/heygen/help_flatten.go
- Executable scriptline 1
Executable file
cmd/heygen/hidden_commands_test.go
- Executable scriptline 1
Executable file
cmd/heygen/idempotency_key_test.go
- Executable scriptline 1
Executable file
cmd/heygen/instant_video_test.go
- Executable scriptline 1
Executable file - Network accessline 67
"GET /v3/models/videos/video-1": { StatusCode: http.StatusOK, Body: `{"data":{"video_id":"video-1","status":"completed","video_url":"https://example.com/result.mp4"}}`, - Network accessline 68
StatusCode: http.StatusOK, Body: `{"data":{"video_id":"video-1","status":"completed","video_url":"https://example.com/result.mp4"}}`, }, - Network accessline 69
Body: `{"data":{"video_id":"video-1","status":"completed","video_url":"https://example.com/result.mp4"}}`, - Network accessline 75
t.Fatalf("exit=%d stderr=%s", result.ExitCode, result.Stderr) } if !strings.Contains(result.Stdout, "https://example.com/result.mp4") { - Network accessline 76
} if !strings.Contains(result.Stdout, "https://example.com/result.mp4") { t.Fatalf("missing result URL: %s", result.Stdout) - Network accessline 77
if !strings.Contains(result.Stdout, "https://example.com/result.mp4") {
cmd/heygen/main.go
- Executable scriptline 1
Executable file
cmd/heygen/main_test.go
- Executable scriptline 1
Executable file
cmd/heygen/poll_configs.go
- Executable scriptline 1
Executable file
cmd/heygen/poll_configs_test.go
- Executable scriptline 1
Executable file
cmd/heygen/root.go
cmd/heygen/root_test.go
- Executable scriptline 1
Executable file - Network accessline 10
func TestCommandGroup_UnknownSubcommand_ListsAvailable(t *testing.T) { res := runCommand(t, "http://example.invalid", "test-key", "user", "info") - Network accessline 11
res := runCommand(t, "http://example.invalid", "test-key", "user", "info") - Network accessline 30
func TestCommandGroup_BareInvocation_ShowsHelp(t *testing.T) { res := runCommand(t, "http://example.invalid", "test-key", "user") - Network accessline 31
res := runCommand(t, "http://example.invalid", "test-key", "user")
cmd/heygen/testutil_test.go
cmd/heygen/timeouts.go
- Executable scriptline 1
Executable file
cmd/heygen/timeouts_test.go
- Executable scriptline 1
Executable file
cmd/heygen/update.go
cmd/heygen/update_notice.go
cmd/heygen/update_notice_test.go
cmd/heygen/update_notice_unix.go
- Executable scriptline 1
Executable file
cmd/heygen/update_notice_windows.go
- Executable scriptline 1
Executable file
cmd/heygen/update_test.go
cmd/heygen/video_download.go
cmd/heygen/video_download_test.go
- Executable scriptline 1
Executable file - Network accessline 309
"GET /v3/videos/vid_123": { StatusCode: 200, Body: `{"data":{"video_url":"https://example.test/video.mp4","status":"completed"}}`, - Network accessline 310
StatusCode: 200, Body: `{"data":{"video_url":"https://example.test/video.mp4","status":"completed"}}`, ValidateRequest: func(t *testing.T, r *http.Request) { - Network accessline 311
Body: `{"data":{"video_url":"https://example.test/video.mp4","status":"completed"}}`, - Network accessline 484
if r.URL.Path == "/v3/videos/vid_123" { writeJSON(t, w, map[string]any{ "data": map[string]any{"video_url": "http://%zz", "status": "completed"}, - Network accessline 485
writeJSON(t, w, map[string]any{ "data": map[string]any{"video_url": "http://%zz", "status": "completed"}, }) - Network accessline 486
"data": map[string]any{"video_url": "http://%zz", "status": "completed"},
cmd/heygen/video_list_test.go
- Executable scriptline 1
Executable file
codegen/examples.go
- Executable scriptline 1
Executable file
codegen/examples/background-removal.yaml
- Network accessline 1
"POST /v3/background-removals": - desc: "Submit a video for background removal (returns a job id; poll with get)" cmd: "heygen background-removal create -d '{\"video\":{\"type\":\"url\",\"url\":\"https://example.com/clip.mp4\"}}'" - Network accessline 2
- desc: "Submit a video for background removal (returns a job id; poll with get)" cmd: "heygen background-removal create -d '{\"video\":{\"type\":\"url\",\"url\":\"https://example.com/clip.mp4\"}}'" - desc: "Submit with explicit layer - Network accessline 3
cmd: "heygen background-removal create -d '{\"video\":{\"type\":\"url\",\"url\":\"https://example.com/clip.mp4\"}}'" - Network accessline 4
- desc: "Submit with explicit layer set" cmd: "heygen background-removal create -d '{\"video\":{\"type\":\"url\",\"url\":\"https://example.com/clip.mp4\"},\"layers\":[\"foreground\",\"mask\",\"background\"]}'" - desc: "See all availab - Network accessline 5
cmd: "heygen background-removal create -d '{\"video\":{\"type\":\"url\",\"url\":\"https://example.com/clip.mp4\"},\"layers\":[\"foreground\",\"mask\",\"background\"]}'"
codegen/examples/brand.yaml
- Network accessline 4
"POST /v3/brand-kits": - desc: "Build a brand kit from a public website, importing its logos, colors and fonts" cmd: "heygen brand kits create --url https://www.heygen.com" - Network accessline 5
- desc: "Build a brand kit from a public website, importing its logos, colors and fonts" cmd: "heygen brand kits create --url https://www.heygen.com" - desc: "Name the kit yourself instead of taking the brand name detected on the site - Network accessline 6
cmd: "heygen brand kits create --url https://www.heygen.com" - Network accessline 7
- desc: "Name the kit yourself instead of taking the brand name detected on the site" cmd: "heygen brand kits create --url https://www.heygen.com --name 'HeyGen brand'" "GET /v3/brand-kits/{brand_kit_id}": - Network accessline 8
cmd: "heygen brand kits create --url https://www.heygen.com --name 'HeyGen brand'"
codegen/examples/filler-word-removal.yaml
- Network accessline 1
"POST /v3/filler-word-removals": - desc: "Submit a video to strip filler words and overlong silences" cmd: "heygen filler-word-removal create -d '{\"video\":{\"type\":\"url\",\"url\":\"https://example.com/talk.mp4\"}}'" - Network accessline 2
- desc: "Submit a video to strip filler words and overlong silences" cmd: "heygen filler-word-removal create -d '{\"video\":{\"type\":\"url\",\"url\":\"https://example.com/talk.mp4\"}}'" - desc: "Submit a previously uploaded asset ins - Network accessline 3
cmd: "heygen filler-word-removal create -d '{\"video\":{\"type\":\"url\",\"url\":\"https://example.com/talk.mp4\"}}'" - Network accessline 5
cmd: "heygen filler-word-removal create -d '{\"video\":{\"type\":\"asset_id\",\"asset_id\":\"<asset-id>\"}}'" - desc: "Set a title and get a webhook when the job finishes" cmd: "heygen filler-word-removal create -d '{\"video\":{\"type - Network accessline 6
- desc: "Set a title and get a webhook when the job finishes" cmd: "heygen filler-word-removal create -d '{\"video\":{\"type\":\"url\",\"url\":\"https://example.com/talk.mp4\"},\"title\":\"Q3 all-hands\",\"callback_url\":\"https://examp - Network accessline 7
cmd: "heygen filler-word-removal create -d '{\"video\":{\"type\":\"url\",\"url\":\"https://example.com/talk.mp4\"},\"title\":\"Q3 all-hands\",\"callback_url\":\"https://example.com/hooks/heygen\",\"callback_id\":\"all-hands-q3\"}'"
codegen/examples/lipsync.yaml
- Network accessline 16
"POST /v3/lipsyncs/batches": - desc: "Submit a batch of lipsync jobs in one request (up to 100 items)" cmd: "heygen lipsync batches create --title 'Dub batch' -d '{\"lipsyncs\":[{\"video\":{\"type\":\"url\",\"url\":\"https://example.c - Network accessline 17
- desc: "Submit a batch of lipsync jobs in one request (up to 100 items)" cmd: "heygen lipsync batches create --title 'Dub batch' -d '{\"lipsyncs\":[{\"video\":{\"type\":\"url\",\"url\":\"https://example.com/source.mp4\"},\"audio\":{\"t - Network accessline 18
cmd: "heygen lipsync batches create --title 'Dub batch' -d '{\"lipsyncs\":[{\"video\":{\"type\":\"url\",\"url\":\"https://example.com/source.mp4\"},\"audio\":{\"type\":\"url\",\"url\":\"https://example.com/replacement.mp3\"}}]}'"
codegen/examples/model.yaml
- Network accessline 8
cmd: "heygen model audio sts create --voice-id <voice-id> -d '{\"audio\":{\"type\":\"asset_id\",\"asset_id\":\"<asset-id>\"}}'" - desc: "Clean background noise from a URL source first, with an idempotency key for retries" cmd: "heygen - Network accessline 9
- desc: "Clean background noise from a URL source first, with an idempotency key for retries" cmd: "heygen model audio sts create --voice-id <voice-id> --remove-background-noise --idempotency-key <unique-key> -d '{\"audio\":{\"type\":\" - Network accessline 10
cmd: "heygen model audio sts create --voice-id <voice-id> --remove-background-noise --idempotency-key <unique-key> -d '{\"audio\":{\"type\":\"url\",\"url\":\"https://example.com/speech.mp3\"}}'"
codegen/examples/video-translate.yaml
- Network accessline 42
"POST /v3/video-translations/batches": - desc: "Submit a batch of translations in one request (up to 100 items; multiple output languages fan out per item)" cmd: "heygen video-translate batches create --title 'Localization batch' -d ' - Network accessline 43
- desc: "Submit a batch of translations in one request (up to 100 items; multiple output languages fan out per item)" cmd: "heygen video-translate batches create --title 'Localization batch' -d '{\"video_translations\":[{\"video\":{\"ty - Network accessline 44
cmd: "heygen video-translate batches create --title 'Localization batch' -d '{\"video_translations\":[{\"video\":{\"type\":\"url\",\"url\":\"https://example.com/source.mp4\"},\"output_languages\":[\"Spanish (Spain)\",\"French (France)\"]}]}
codegen/examples/video.yaml
- Network accessline 8
cmd: "heygen video create -d '{\"type\":\"avatar\",\"avatar_id\":\"<avatar-id>\",\"script\":\"Hello world\",\"voice_id\":\"<voice-id>\"}' --wait" - desc: "Create from a custom image" cmd: "heygen video create -d '{\"type\":\"image\",\ - Network accessline 9
- desc: "Create from a custom image" cmd: "heygen video create -d '{\"type\":\"image\",\"image\":{\"type\":\"url\",\"url\":\"https://example.com/photo.jpg\"},\"script\":\"Hello\",\"voice_id\":\"<voice-id>\"}' --wait" - desc: "See all - Network accessline 10
cmd: "heygen video create -d '{\"type\":\"image\",\"image\":{\"type\":\"url\",\"url\":\"https://example.com/photo.jpg\"},\"script\":\"Hello\",\"voice_id\":\"<voice-id>\"}' --wait"
codegen/examples/voice.yaml
- Network accessline 21
"POST /v3/voices/clone": - desc: "Clone a voice from a URL" cmd: "heygen voice clone create --voice-name 'My Clone' -d '{\"audio\":{\"type\":\"url\",\"url\":\"https://example.com/sample.mp3\"}}'" - Network accessline 22
- desc: "Clone a voice from a URL" cmd: "heygen voice clone create --voice-name 'My Clone' -d '{\"audio\":{\"type\":\"url\",\"url\":\"https://example.com/sample.mp3\"}}'" - desc: "Clone from an uploaded asset" - Network accessline 23
cmd: "heygen voice clone create --voice-name 'My Clone' -d '{\"audio\":{\"type\":\"url\",\"url\":\"https://example.com/sample.mp3\"}}'"
codegen/examples/webhook.yaml
- Network accessline 4
"POST /v3/webhooks/endpoints": - desc: "Register a webhook" cmd: "heygen webhook endpoints create --url https://example.com/hook" - Network accessline 5
- desc: "Register a webhook" cmd: "heygen webhook endpoints create --url https://example.com/hook" - desc: "Register with event filter" - Network accessline 6
cmd: "heygen webhook endpoints create --url https://example.com/hook" - Network accessline 7
- desc: "Register with event filter" cmd: "heygen webhook endpoints create --url https://example.com/hook --events avatar_video.success --events avatar_video.fail" "PATCH /v3/webhooks/endpoints/{endpoint_id}": - Network accessline 8
cmd: "heygen webhook endpoints create --url https://example.com/hook --events avatar_video.success --events avatar_video.fail" - Network accessline 9
"PATCH /v3/webhooks/endpoints/{endpoint_id}": - desc: "Update webhook URL" cmd: "heygen webhook endpoints update <endpoint-id> --url https://new.example.com/hook" - Network accessline 10
- desc: "Update webhook URL" cmd: "heygen webhook endpoints update <endpoint-id> --url https://new.example.com/hook" "DELETE /v3/webhooks/endpoints/{endpoint_id}": - Network accessline 11
cmd: "heygen webhook endpoints update <endpoint-id> --url https://new.example.com/hook"
codegen/examples_test.go
- Executable scriptline 1
Executable file
codegen/generate.go
- Executable scriptline 1
Executable file
codegen/generate_test.go
- Executable scriptline 1
Executable file
codegen/grouper.go
- Executable scriptline 1
Executable file
codegen/grouper_test.go
- Executable scriptline 1
Executable file
codegen/main.go
- Executable scriptline 1
Executable file
codegen/schema.go
- Executable scriptline 1
Executable file
codegen/schema_test.go
- Executable scriptline 1
Executable file
codegen/surface_allowlist_test.go
- Executable scriptline 1
Executable file
codegen/testdata/golden/registry.go
- Executable scriptline 1
Executable file
codegen/testdata/golden/upload.go
- Executable scriptline 1
Executable file
codegen/testdata/golden/widget.go
- Executable scriptline 1
Executable file
docs/demo.tape
gen/ai-clipping.go
- Executable scriptline 1
Executable file
gen/asset.go
- Executable scriptline 1
Executable file
gen/audio.go
- Executable scriptline 1
Executable file
gen/avatar.go
- Executable scriptline 1
Executable file - Network accessline 10
Summary: "Create Avatar Consent", Description: "Starts the consent flow for an avatar group and returns a URL where the subject approves in their browser. Required before a private avatar can generate video. The link expires afte - Network accessline 11
Description: "Starts the consent flow for an avatar group and returns a URL where the subject approves in their browser. Required before a private avatar can generate video. The link expires after 24 hours and accepts one submission.", - Network accessline 12
RequestSchema: "{\n \"description\": \"Request body for POST /v3/avatars/{group_id}/consent.\",\n \"properties\": {\n \"consent_text\": {\n \"description\": \"Custom consent text rendered on the consent page in place of the defau - Network accessline 54
Summary: "Create Avatar", Description: "Creates a new avatar from an image, video footage, or a text prompt. Supports photo, digital_twin, and prompt types. Avatar training is asynchronous.", RequestSchema: "{\n \"description\ - Network accessline 55
Description: "Creates a new avatar from an image, video footage, or a text prompt. Supports photo, digital_twin, and prompt types. Avatar training is asynchronous.", RequestSchema: "{\n \"description\": \"Discriminated union for POST - Network accessline 56
RequestSchema: "{\n \"description\": \"Discriminated union for POST /v3/avatars request body.\",\n \"discriminator\": {\n \"mapping\": {\n \"digital_twin\": \"#/components/schemas/CreateDigitalTwinRequest\",\n \"photo\": \"#
gen/background-removal.go
- Executable scriptline 1
Executable file - Network accessline 16
BodyEncoding: "json", Examples: []string{ "# Submit a video for background removal (returns a job id; poll with get)\n heygen background-removal create -d '{\"video\":{\"type\":\"url\",\"url\":\"https://example.com/clip.mp4\"}}'", - Network accessline 17
Examples: []string{ "# Submit a video for background removal (returns a job id; poll with get)\n heygen background-removal create -d '{\"video\":{\"type\":\"url\",\"url\":\"https://example.com/clip.mp4\"}}'", "# Submit with explicit la - Network accessline 18
"# Submit a video for background removal (returns a job id; poll with get)\n heygen background-removal create -d '{\"video\":{\"type\":\"url\",\"url\":\"https://example.com/clip.mp4\"}}'", - Network accessline 19
"# Submit with explicit layer set\n heygen background-removal create -d '{\"video\":{\"type\":\"url\",\"url\":\"https://example.com/clip.mp4\"},\"layers\":[\"foreground\",\"mask\",\"background\"]}'",
gen/brand.go
- Executable scriptline 1
Executable file - Network accessline 171
BodyEncoding: "json", Examples: []string{ "# Build a brand kit from a public website, importing its logos, colors and fonts\n heygen brand kits create --url https://www.heygen.com", - Network accessline 172
Examples: []string{ "# Build a brand kit from a public website, importing its logos, colors and fonts\n heygen brand kits create --url https://www.heygen.com", "# Name the kit yourself instead of taking the brand name detected on the s - Network accessline 173
"# Build a brand kit from a public website, importing its logos, colors and fonts\n heygen brand kits create --url https://www.heygen.com", - Network accessline 174
"# Name the kit yourself instead of taking the brand name detected on the site\n heygen brand kits create --url https://www.heygen.com --name 'HeyGen brand'",
gen/filler-word-removal.go
- Executable scriptline 1
Executable file - Network accessline 15
BodyEncoding: "json", Examples: []string{ "# Submit a video to strip filler words and overlong silences\n heygen filler-word-removal create -d '{\"video\":{\"type\":\"url\",\"url\":\"https://example.com/talk.mp4\"}}'", - Network accessline 16
Examples: []string{ "# Submit a video to strip filler words and overlong silences\n heygen filler-word-removal create -d '{\"video\":{\"type\":\"url\",\"url\":\"https://example.com/talk.mp4\"}}'", "# Submit a previously uploaded asset - Network accessline 17
"# Submit a video to strip filler words and overlong silences\n heygen filler-word-removal create -d '{\"video\":{\"type\":\"url\",\"url\":\"https://example.com/talk.mp4\"}}'", - Network accessline 18
"# Submit a previously uploaded asset instead of a URL\n heygen filler-word-removal create -d '{\"video\":{\"type\":\"asset_id\",\"asset_id\":\"<asset-id>\"}}'", "# Set a title and get a webhook when the job finishes\n heygen filler-wor - Network accessline 19
"# Set a title and get a webhook when the job finishes\n heygen filler-word-removal create -d '{\"video\":{\"type\":\"url\",\"url\":\"https://example.com/talk.mp4\"},\"title\":\"Q3 all-hands\",\"callback_url\":\"https://example.com/hooks/h
gen/folder.go
- Executable scriptline 1
Executable file
gen/lipsync.go
- Executable scriptline 1
Executable file - Network accessline 15
BodyEncoding: "json", Examples: []string{ "# Submit a batch of lipsync jobs in one request (up to 100 items)\n heygen lipsync batches create --title 'Dub batch' -d '{\"lipsyncs\":[{\"video\":{\"type\":\"url\",\"url\":\"https://example. - Network accessline 16
Examples: []string{ "# Submit a batch of lipsync jobs in one request (up to 100 items)\n heygen lipsync batches create --title 'Dub batch' -d '{\"lipsyncs\":[{\"video\":{\"type\":\"url\",\"url\":\"https://example.com/source.mp4\"},\"audi - Network accessline 17
"# Submit a batch of lipsync jobs in one request (up to 100 items)\n heygen lipsync batches create --title 'Dub batch' -d '{\"lipsyncs\":[{\"video\":{\"type\":\"url\",\"url\":\"https://example.com/source.mp4\"},\"audio\":{\"type\":\"url\",
gen/model.go
- Executable scriptline 1
Executable file - Network accessline 17
Examples: []string{ "# Re-speak a recording in one of your instant voices, keeping its words and timing\n heygen model audio sts create --voice-id <voice-id> -d '{\"audio\":{\"type\":\"asset_id\",\"asset_id\":\"<asset-id>\"}}'", "# Cle - Network accessline 18
"# Re-speak a recording in one of your instant voices, keeping its words and timing\n heygen model audio sts create --voice-id <voice-id> -d '{\"audio\":{\"type\":\"asset_id\",\"asset_id\":\"<asset-id>\"}}'", "# Clean background noise fr - Network accessline 19
"# Clean background noise from a URL source first, with an idempotency key for retries\n heygen model audio sts create --voice-id <voice-id> --remove-background-noise --idempotency-key <unique-key> -d '{\"audio\":{\"type\":\"url\",\"url\":
gen/registry.go
- Executable scriptline 1
Executable file
gen/template.go
- Executable scriptline 1
Executable file
gen/user.go
- Executable scriptline 1
Executable file
gen/video-agent.go
- Executable scriptline 1
Executable file
gen/video-translate.go
- Executable scriptline 1
Executable file - Network accessline 15
BodyEncoding: "json", Examples: []string{ "# Submit a batch of translations in one request (up to 100 items; multiple output languages fan out per item)\n heygen video-translate batches create --title 'Localization batch' -d '{\"video_ - Network accessline 16
Examples: []string{ "# Submit a batch of translations in one request (up to 100 items; multiple output languages fan out per item)\n heygen video-translate batches create --title 'Localization batch' -d '{\"video_translations\":[{\"video - Network accessline 17
"# Submit a batch of translations in one request (up to 100 items; multiple output languages fan out per item)\n heygen video-translate batches create --title 'Localization batch' -d '{\"video_translations\":[{\"video\":{\"type\":\"url\",\
gen/video.go
- Executable scriptline 1
Executable file - Network accessline 126
Examples: []string{ "# Create an avatar video and wait for completion\n heygen video create -d '{\"type\":\"avatar\",\"avatar_id\":\"<avatar-id>\",\"script\":\"Hello world\",\"voice_id\":\"<voice-id>\"}' --wait", "# Create from a custo - Network accessline 127
"# Create an avatar video and wait for completion\n heygen video create -d '{\"type\":\"avatar\",\"avatar_id\":\"<avatar-id>\",\"script\":\"Hello world\",\"voice_id\":\"<voice-id>\"}' --wait", "# Create from a custom image\n heygen vide - Network accessline 128
"# Create from a custom image\n heygen video create -d '{\"type\":\"image\",\"image\":{\"type\":\"url\",\"url\":\"https://example.com/photo.jpg\"},\"script\":\"Hello\",\"voice_id\":\"<voice-id>\"}' --wait",
gen/voice.go
- Executable scriptline 1
Executable file - Network accessline 16
BodyEncoding: "json", Examples: []string{ "# Clone a voice from a URL\n heygen voice clone create --voice-name 'My Clone' -d '{\"audio\":{\"type\":\"url\",\"url\":\"https://example.com/sample.mp3\"}}'", - Network accessline 17
Examples: []string{ "# Clone a voice from a URL\n heygen voice clone create --voice-name 'My Clone' -d '{\"audio\":{\"type\":\"url\",\"url\":\"https://example.com/sample.mp3\"}}'", "# Clone from an uploaded asset\n heygen voice clone - Network accessline 18
"# Clone a voice from a URL\n heygen voice clone create --voice-name 'My Clone' -d '{\"audio\":{\"type\":\"url\",\"url\":\"https://example.com/sample.mp3\"}}'",
gen/webhook.go
- Executable scriptline 1
Executable file - Network accessline 16
BodyEncoding: "json", Examples: []string{ "# Register a webhook\n heygen webhook endpoints create --url https://example.com/hook", - Network accessline 17
Examples: []string{ "# Register a webhook\n heygen webhook endpoints create --url https://example.com/hook", "# Register with event filter\n heygen webhook endpoints create --url https://example.com/hook --events avatar_video.success - Network accessline 18
"# Register a webhook\n heygen webhook endpoints create --url https://example.com/hook", - Network accessline 19
"# Register with event filter\n heygen webhook endpoints create --url https://example.com/hook --events avatar_video.success --events avatar_video.fail", - Network accessline 172
BodyEncoding: "json", Examples: []string{ "# Update webhook URL\n heygen webhook endpoints update <endpoint-id> --url https://new.example.com/hook", - Network accessline 173
Examples: []string{ "# Update webhook URL\n heygen webhook endpoints update <endpoint-id> --url https://new.example.com/hook", }, - Network accessline 174
"# Update webhook URL\n heygen webhook endpoints update <endpoint-id> --url https://new.example.com/hook",
internal/analytics/analytics.go
internal/analytics/analytics_test.go
internal/auth/chain_resolver.go
internal/auth/chain_resolver_test.go
internal/auth/chain_typed_test.go
- Executable scriptline 1
Executable file - Access to secretsline 13
[Credential-related source omitted] - Access to secretsline 47
[Credential-related source omitted] - Access to secretsline 81
[Credential-related source omitted] - Access to secretsline 87
[Credential-related source omitted] - Access to secretsline 113
[Credential-related source omitted] - Access to secretsline 159
[Credential-related source omitted] - Access to secretsline 179
[Credential-related source omitted] - Access to secretsline 190
[Credential-related source omitted]
internal/auth/constants.go
- Executable scriptline 1
Executable file
internal/auth/credential.go
- Executable scriptline 1
Executable file
internal/auth/credentials_file.go
internal/auth/env_resolver.go
- Executable scriptline 1
Executable file - Access to secretsline 7
[Credential-related source omitted] - Access to secretsline 10
[Credential-related source omitted] - Access to secretsline 13
[Credential-related source omitted] - Access to secretsline 23
[Credential-related source omitted] - Access to secretsline 29
[Credential-related source omitted]
internal/auth/env_resolver_test.go
- Executable scriptline 1
Executable file
internal/auth/file_resolver.go
- Executable scriptline 1
Executable file - Access to secretsline 30
[Credential-related source omitted] - Access to secretsline 43
[Credential-related source omitted] - Access to secretsline 144
[Credential-related source omitted] - Access to secretsline 146
[Credential-related source omitted] - Access to secretsline 209
[Credential-related source omitted] - Access to secretsline 239
[Credential-related source omitted] - Access to secretsline 269
[Credential-related source omitted] - Access to secretsline 271
[Credential-related source omitted] - Access to secretsline 275
[Credential-related source omitted] - Access to secretsline 277
[Credential-related source omitted] - Access to secretsline 278
[Credential-related source omitted] - Access to secretsline 312
[Credential-related source omitted]
internal/auth/file_resolver_test.go
- Executable scriptline 1
Executable file - Access to secretsline 136
[Credential-related source omitted] - Access to secretsline 152
[Credential-related source omitted] - Access to secretsline 156
[Credential-related source omitted] - Access to secretsline 183
[Credential-related source omitted] - Access to secretsline 184
[Credential-related source omitted] - Access to secretsline 187
[Credential-related source omitted] - Access to secretsline 191
[Credential-related source omitted] - Access to secretsline 199
[Credential-related source omitted] - Access to secretsline 205
[Credential-related source omitted] - Access to secretsline 206
[Credential-related source omitted] - Access to secretsline 217
[Credential-related source omitted] - Access to secretsline 223
[Credential-related source omitted] - Access to secretsline 238
[Credential-related source omitted] - Access to secretsline 242
[Credential-related source omitted] - Access to secretsline 247
[Credential-related source omitted] - Access to secretsline 251
[Credential-related source omitted] - Access to secretsline 252
[Credential-related source omitted] - Access to secretsline 254
[Credential-related source omitted] - Access to secretsline 259
[Credential-related source omitted] - Access to secretsline 275
[Credential-related source omitted] - Access to secretsline 279
[Credential-related source omitted] - Access to secretsline 341
[Credential-related source omitted] - Access to secretsline 369
[Credential-related source omitted] - Access to secretsline 370
[Credential-related source omitted] - Access to secretsline 382
[Credential-related source omitted] - Access to secretsline 397
[Credential-related source omitted] - Access to secretsline 398
[Credential-related source omitted] - Network accessline 407
[Credential-related source omitted] - Network accessline 409
[Credential-related source omitted] - Access to secretsline 409
[Credential-related source omitted] - Network accessline 425
t.Fatalf("user.email = %v, want u@example.com", user["email"]) } if user["avatar_url"] != "https://cdn/x.png" { - Network accessline 426
} if user["avatar_url"] != "https://cdn/x.png" { t.Fatalf("user.avatar_url not preserved: %v", user["avatar_url"]) - Network accessline 427
if user["avatar_url"] != "https://cdn/x.png" {
internal/auth/file_store.go
internal/auth/file_store_test.go
- Executable scriptline 1
Executable file - Access to secretsline 43
[Credential-related source omitted] - Access to secretsline 100
[Credential-related source omitted] - Access to secretsline 113
[Credential-related source omitted] - Access to secretsline 125
[Credential-related source omitted] - Access to secretsline 143
[Credential-related source omitted] - Access to secretsline 162
[Credential-related source omitted] - Access to secretsline 163
[Credential-related source omitted] - Access to secretsline 173
[Credential-related source omitted] - Access to secretsline 174
[Credential-related source omitted] - Access to secretsline 191
[Credential-related source omitted] - Access to secretsline 228
[Credential-related source omitted] - Access to secretsline 250
[Credential-related source omitted] - Access to secretsline 253
[Credential-related source omitted]
internal/auth/not_configured.go
- Executable scriptline 1
Executable file
internal/auth/oauth/browser.go
- Executable scriptline 1
Executable file
internal/auth/oauth/browser_test.go
- Executable scriptline 1
Executable file - Network accessline 54
if err := OpenBrowser("https://example.test/oauth/authorize?x=1"); err != nil { - Network accessline 55
t.Fatalf("OpenBrowser: %v", err) } if called != "https://example.test/oauth/authorize?x=1" { - Network accessline 56
} if called != "https://example.test/oauth/authorize?x=1" { t.Errorf("opener called with %q", called) - Network accessline 57
if called != "https://example.test/oauth/authorize?x=1" { - Network accessline 75
if err := OpenBrowser("https://example.test/x"); err != nil { - Network accessline 79
t.Error("opener should not be called when stdin is non-TTY") } if !strings.Contains(buf.String(), "https://example.test/x") { - Network accessline 80
} if !strings.Contains(buf.String(), "https://example.test/x") { t.Errorf("expected URL in print output, got %q", buf.String()) - Network accessline 81
if !strings.Contains(buf.String(), "https://example.test/x") { - Network accessline 94
err := OpenBrowser("https://example.test/x") - Network accessline 96
t.Fatal("expected opener error to surface") } if !strings.Contains(buf.String(), "https://example.test/x") { - Network accessline 97
} if !strings.Contains(buf.String(), "https://example.test/x") { t.Errorf("expected fallback print, got %q", buf.String()) - Network accessline 98
if !strings.Contains(buf.String(), "https://example.test/x") { - Network accessline 117
if err := OpenBrowser("https://example.test/x"); err != nil { - Network accessline 121
t.Error("opener should not run when HEYGEN_NO_BROWSER=1") } if !strings.Contains(buf.String(), "https://example.test/x") { - Network accessline 122
} if !strings.Contains(buf.String(), "https://example.test/x") { t.Errorf("expected URL in print, got %q", buf.String()) - Network accessline 123
if !strings.Contains(buf.String(), "https://example.test/x") { - Network accessline 139
if err := OpenBrowser("https://example.test/x"); err != nil { - Network accessline 143
t.Error("opener should not run when BROWSER=none") } if !strings.Contains(buf.String(), "https://example.test/x") { - Network accessline 144
} if !strings.Contains(buf.String(), "https://example.test/x") { t.Errorf("expected URL in print, got %q", buf.String()) - Network accessline 145
if !strings.Contains(buf.String(), "https://example.test/x") { - Network accessline 162
} t.Setenv("BROWSER", "firefox") cmd := platformOpenCmd("https://example.test/x") - Network accessline 163
t.Setenv("BROWSER", "firefox") cmd := platformOpenCmd("https://example.test/x") if len(cmd.Args) < 2 || cmd.Args[0] != "firefox" || cmd.Args[1] != "https://example.test/x" { - Network accessline 164
cmd := platformOpenCmd("https://example.test/x") - Network accessline 165
if len(cmd.Args) < 2 || cmd.Args[0] != "firefox" || cmd.Args[1] != "https://example.test/x" { - Network accessline 177
t.Setenv("BROWSER", "none") cmd := platformOpenCmd("https://example.test/x") - Network accessline 178
cmd := platformOpenCmd("https://example.test/x") - Network accessline 187
} t.Setenv("BROWSER", "") cmd := platformOpenCmd("https://example.test/x") - Network accessline 188
t.Setenv("BROWSER", "") cmd := platformOpenCmd("https://example.test/x") if len(cmd.Args) < 1 || cmd.Args[0] != "xdg-open" { - Network accessline 189
cmd := platformOpenCmd("https://example.test/x")
internal/auth/oauth/device.go
- Executable scriptline 1
Executable file
internal/auth/oauth/device_test.go
- Executable scriptline 1
Executable file - Network accessline 26
"device_code": "device-secret", "user_code": "ABCD-EFGH", "verification_uri": "https://app.heygen.com/oauth/device", - Network accessline 27
"user_code": "ABCD-EFGH", "verification_uri": "https://app.heygen.com/oauth/device", "expires_in": 600, - Network accessline 28
"verification_uri": "https://app.heygen.com/oauth/device", - Network accessline 41
context.Background(), "openid profile", "https://api.heygen.com", - Network accessline 42
"openid profile", "https://api.heygen.com", ) - Network accessline 43
"https://api.heygen.com", - Network accessline 48
if got.Get("client_id") != "cli-id" || got.Get("scope") != "openid profile" || got.Get("resource") != "https://api.heygen.com" { - Network accessline 49
got.Get("scope") != "openid profile" || got.Get("resource") != "https://api.heygen.com" { t.Fatalf("form = %#v", got) - Network accessline 50
got.Get("resource") != "https://api.heygen.com" { - Network accessline 63
"device_code": "device-secret", "user_code": "ABCD-EFGH", "verification_uri": "https://app.heygen.com/oauth/device", - Network accessline 64
"user_code": "ABCD-EFGH", "verification_uri": "https://app.heygen.com/oauth/device", "expires_in": 600, - Network accessline 65
"verification_uri": "https://app.heygen.com/oauth/device", - Network accessline 88
"device_code": "device-secret", "user_code": "ABCD-EFGH", "verification_uri": "http://attacker.example/oauth/device", - Network accessline 89
"user_code": "ABCD-EFGH", "verification_uri": "http://attacker.example/oauth/device", "expires_in": 600, - Network accessline 90
"verification_uri": "http://attacker.example/oauth/device", - Network accessline 109
"device_code": "device-secret", "user_code": "ABCD-\x1b[31mEFGH", "verification_uri": "https://app.heygen.com/oauth/device", - Network accessline 110
"user_code": "ABCD-\x1b[31mEFGH", "verification_uri": "https://app.heygen.com/oauth/device", "expires_in": 600, - Network accessline 111
"verification_uri": "https://app.heygen.com/oauth/device", - Access to secretsline 149
[Credential-related source omitted] - Access to secretsline 192
[Credential-related source omitted] - Access to secretsline 229
[Credential-related source omitted]
internal/auth/oauth/loopback.go
internal/auth/oauth/loopback_test.go
- Executable scriptline 1
Executable file - Network accessline 25
t.Error("Port should be assigned") } if !strings.HasPrefix(lb.RedirectURI, "http://127.0.0.1:") { - Network accessline 26
} if !strings.HasPrefix(lb.RedirectURI, "http://127.0.0.1:") { t.Errorf("RedirectURI = %q", lb.RedirectURI) - Network accessline 27
if !strings.HasPrefix(lb.RedirectURI, "http://127.0.0.1:") {
internal/auth/oauth/oauth.go
- Executable scriptline 1
Executable file - Network accessline 31
const ( DefaultAuthorizeURL = "https://app.heygen.com/oauth/authorize" - Network accessline 32
DefaultAuthorizeURL = "https://app.heygen.com/oauth/authorize" - Network accessline 33
DefaultDeviceAuthorizationURL = "https://api2.heygen.com/v1/oauth/device_authorization" - Network accessline 34
DefaultTokenURL = "https://api2.heygen.com/v1/oauth/token" - Network accessline 35
DefaultRevokeURL = "https://api2.heygen.com/v1/oauth/revoke" - Network accessline 57
// HTTPClient is used for the token + revoke round trips. Defaults // to an http.Client with sensible timeouts. - Network accessline 58
// to an http.Client with sensible timeouts. - Network accessline 59
HTTPClient *http.Client - Network accessline 95
// WithHTTPClient injects a custom *http.Client (required for httptest). - Network accessline 96
func WithHTTPClient(hc *http.Client) Option { - Network accessline 118
TokenURL: DefaultTokenURL, RevokeURL: DefaultRevokeURL, HTTPClient: &http.Client{Timeout: DefaultExchangeTimeout}, - Network accessline 119
RevokeURL: DefaultRevokeURL, HTTPClient: &http.Client{Timeout: DefaultExchangeTimeout}, Now: time.Now, - Network accessline 120
HTTPClient: &http.Client{Timeout: DefaultExchangeTimeout}, - Network accessline 395
// classifyTransportErr distinguishes the caller giving up from the transport // failing. It reads ctx.Err() rather than inspecting err, because an // http.Client.Timeout error also satisfies errors.Is(err, - Network accessline 396
// failing. It reads ctx.Err() rather than inspecting err, because an // http.Client.Timeout error also satisfies errors.Is(err, // context.DeadlineExceeded) while the caller's context is still live — matching - Network accessline 397
// http.Client.Timeout error also satisfies errors.Is(err, - Network accessline 429
// an agent-imposed deadline). Nothing is wrong upstream, which is why it is // separate from ErrTokenNetwork. Determined from ctx.Err(), never from the // returned error: an http.Client.Timeout error also satisfies - Network accessline 430
// separate from ErrTokenNetwork. Determined from ctx.Err(), never from the // returned error: an http.Client.Timeout error also satisfies // errors.Is(err, context.DeadlineExceeded) even when the caller's context is - Network accessline 431
// returned error: an http.Client.Timeout error also satisfies - Access to secretsline 460
[Credential-related source omitted] - Access to secretsline 462
[Credential-related source omitted] - Access to secretsline 465
[Credential-related source omitted]
internal/auth/oauth/oauth_test.go
- Executable scriptline 1
Executable file - Network accessline 58
return NewClient( WithClientID("test-client"), WithAuthorizeURL("https://example.test/oauth/authorize"), - Network accessline 59
WithClientID("test-client"), WithAuthorizeURL("https://example.test/oauth/authorize"), WithTokenURL(f.server.URL+"/v1/oauth/token"), - Network accessline 60
WithAuthorizeURL("https://example.test/oauth/authorize"), - Network accessline 69
c := NewClient( WithClientID("test-client"), WithAuthorizeURL("https://example.test/oauth/authorize"), - Network accessline 70
WithClientID("test-client"), WithAuthorizeURL("https://example.test/oauth/authorize"), ) - Network accessline 71
WithAuthorizeURL("https://example.test/oauth/authorize"), - Network accessline 72
) u, err := c.BuildAuthorizationURL("the-state", "the-challenge", "http://127.0.0.1:12345/cb", "") if err != nil { - Network accessline 73
u, err := c.BuildAuthorizationURL("the-state", "the-challenge", "http://127.0.0.1:12345/cb", "") - Network accessline 86
{"response_type", "code"}, {"client_id", "test-client"}, {"redirect_uri", "http://127.0.0.1:12345/cb"}, - Network accessline 87
{"client_id", "test-client"}, {"redirect_uri", "http://127.0.0.1:12345/cb"}, {"scope", DefaultScopes}, - Network accessline 88
{"redirect_uri", "http://127.0.0.1:12345/cb"}, - Network accessline 101
func TestBuildAuthorizationURL_HonorsExistingQuery(t *testing.T) { c := NewClient(WithAuthorizeURL("https://example.test/oauth/authorize?foo=bar")) - Network accessline 102
c := NewClient(WithAuthorizeURL("https://example.test/oauth/authorize?foo=bar")) - Network accessline 103
u, err := c.BuildAuthorizationURL("s", "c", "http://127.0.0.1/cb", "openid") - Network accessline 115
func TestBuildAuthorizationURL_CustomScopeRespected(t *testing.T) { c := NewClient(WithAuthorizeURL("https://example.test/oauth/authorize")) - Network accessline 116
c := NewClient(WithAuthorizeURL("https://example.test/oauth/authorize")) - Network accessline 117
u, err := c.BuildAuthorizationURL("s", "c", "http://127.0.0.1/cb", "custom scope here") - Network accessline 127
func TestBuildAuthorizationURL_RejectsEmptyArgs(t *testing.T) { c := NewClient(WithAuthorizeURL("https://example.test/oauth/authorize")) - Network accessline 128
c := NewClient(WithAuthorizeURL("https://example.test/oauth/authorize")) - Network accessline 130
name, state, challenge, redirect string }{ {"empty state", "", "c", "http://127.0.0.1/cb"}, - Network accessline 131
}{ {"empty state", "", "c", "http://127.0.0.1/cb"}, {"empty challenge", "s", "", "http://127.0.0.1/cb"}, - Network accessline 132
{"empty state", "", "c", "http://127.0.0.1/cb"}, - Network accessline 133
{"empty challenge", "s", "", "http://127.0.0.1/cb"}, - Access to secretsline 150
[Credential-related source omitted] - Network accessline 159
tok, err := c.ExchangeAuthorizationCode(context.Background(), "the-code", "the-verifier", "http://127.0.0.1:8080/cb") - Access to secretsline 164
[Credential-related source omitted] - Network accessline 178
"grant_type": "authorization_code", "code": "the-code", "redirect_uri": "http://127.0.0.1:8080/cb", - Network accessline 179
"code": "the-code", "redirect_uri": "http://127.0.0.1:8080/cb", "client_id": "test-client", - Network accessline 180
"redirect_uri": "http://127.0.0.1:8080/cb", - Network accessline 198
_, err := c.ExchangeAuthorizationCode(context.Background(), "bad-code", "verifier", "http://127.0.0.1/cb") - Access to secretsline 222
[Credential-related source omitted] - Access to secretsline 231
[Credential-related source omitted] - Network accessline 284
c := NewClient( WithClientID("test-client"), WithRevokeURL("http://127.0.0.1:1/v1/oauth/revoke"), // unroutable - Network accessline 285
WithClientID("test-client"), WithRevokeURL("http://127.0.0.1:1/v1/oauth/revoke"), // unroutable WithHTTPClient(&http.Client{Timeout: 50 * time.Millisecond}), - Network accessline 286
WithRevokeURL("http://127.0.0.1:1/v1/oauth/revoke"), // unroutable - Network accessline 287
WithHTTPClient(&http.Client{Timeout: 50 * time.Millisecond}), - Access to secretsline 305
[Credential-related source omitted] - Access to secretsline 307
[Credential-related source omitted] - Network accessline 315
} c := idp.client(t) _, err := c.ExchangeAuthorizationCode(context.Background(), "code", "verifier", "http://127.0.0.1/cb") - Network accessline 316
c := idp.client(t) _, err := c.ExchangeAuthorizationCode(context.Background(), "code", "verifier", "http://127.0.0.1/cb") if err == nil { - Network accessline 317
_, err := c.ExchangeAuthorizationCode(context.Background(), "code", "verifier", "http://127.0.0.1/cb") - Network accessline 329
} c := idp.client(t) _, err := c.ExchangeAuthorizationCode(context.Background(), "code", "verifier", "http://127.0.0.1/cb") - Network accessline 330
c := idp.client(t) _, err := c.ExchangeAuthorizationCode(context.Background(), "code", "verifier", "http://127.0.0.1/cb") if err == nil { - Network accessline 331
_, err := c.ExchangeAuthorizationCode(context.Background(), "code", "verifier", "http://127.0.0.1/cb") - Access to secretsline 345
[Credential-related source omitted] - Network accessline 352
_, err := c.ExchangeAuthorizationCode(ctx, "code", "verifier", "http://127.0.0.1/cb") - Access to secretsline 484
[Credential-related source omitted] - Network accessline 500
_, err := c.ExchangeAuthorizationCode(context.Background(), "the-code", "the-verifier", "http://127.0.0.1:8080/cb") - Access to secretsline 521
[Credential-related source omitted] - Network accessline 528
_, err := c.ExchangeAuthorizationCode(ctx, "the-code", "the-verifier", "http://127.0.0.1:8080/cb") - Network accessline 542
func TestPostTokenForm_UnreachableEndpointIsNetworkError(t *testing.T) { c := NewClient(WithTokenURL("http://127.0.0.1:1/v1/oauth/token")) - Network accessline 543
c := NewClient(WithTokenURL("http://127.0.0.1:1/v1/oauth/token")) - Network accessline 545
_, err := c.ExchangeAuthorizationCode(context.Background(), "the-code", "the-verifier", "http://127.0.0.1:8080/cb") - Network accessline 557
// An http.Client.Timeout error satisfies errors.Is(err, - Network accessline 566
} c := idp.client(t) c.HTTPClient = &http.Client{Timeout: 50 * time.Millisecond} - Network accessline 568
c.HTTPClient = &http.Client{Timeout: 50 * time.Millisecond} - Network accessline 571
_, err := c.ExchangeAuthorizationCode(context.Background(), "the-code", "the-verifier", "http://127.0.0.1:8080/cb") - Network accessline 588
func TestPostTokenForm_UnbuildableRequest(t *testing.T) { c := NewClient(WithTokenURL("http://\x7f invalid/v1/oauth/token")) - Network accessline 589
c := NewClient(WithTokenURL("http://\x7f invalid/v1/oauth/token")) - Network accessline 591
_, err := c.ExchangeAuthorizationCode(context.Background(), "the-code", "the-verifier", "http://127.0.0.1:8080/cb") - Network accessline 616
_, err := c.ExchangeAuthorizationCode(context.Background(), "the-code", "the-verifier", "http://127.0.0.1:8080/cb") - Access to secretsline 637
[Credential-related source omitted] - Network accessline 647
_, err := c.ExchangeAuthorizationCode(ctx, "the-code", "the-verifier", "http://127.0.0.1:8080/cb")
internal/auth/oauth/pkce.go
internal/auth/oauth/pkce_test.go
- Executable scriptline 1
Executable file
internal/auth/oauth/tokens.go
internal/auth/oauth/tokens_test.go
- Executable scriptline 1
Executable file
internal/auth/oauth_store.go
- Executable scriptline 1
Executable file - Access to secretsline 63
[Credential-related source omitted] - Access to secretsline 93
[Credential-related source omitted] - Access to secretsline 95
[Credential-related source omitted] - Access to secretsline 99
[Credential-related source omitted] - Access to secretsline 100
[Credential-related source omitted] - Access to secretsline 146
[Credential-related source omitted] - Access to secretsline 147
[Credential-related source omitted] - Access to secretsline 177
[Credential-related source omitted] - Access to secretsline 179
[Credential-related source omitted]
internal/auth/resolver.go
- Executable scriptline 1
Executable file
internal/auth/store.go
- Executable scriptline 1
Executable file
internal/auth/user_store.go
internal/auth/user_store_test.go
- Executable scriptline 1
Executable file - Access to secretsline 62
[Credential-related source omitted] - Access to secretsline 88
[Credential-related source omitted] - Access to secretsline 101
[Credential-related source omitted] - Access to secretsline 148
[Credential-related source omitted] - Access to secretsline 155
[Credential-related source omitted] - Access to secretsline 156
[Credential-related source omitted] - Access to secretsline 173
[Credential-related source omitted] - Access to secretsline 181
[Credential-related source omitted] - Access to secretsline 203
[Credential-related source omitted]
internal/client/client.go
- Executable scriptline 1
Executable file - Network accessline 18
const ( DefaultBaseURL = "https://api.heygen.com" - Network accessline 19
DefaultBaseURL = "https://api.heygen.com" - Network accessline 37
// Client wraps net/http.Client with HeyGen-specific behavior: - Network accessline 41
type Client struct { httpClient *http.Client - Network accessline 42
httpClient *http.Client - Network accessline 80
// WithHTTPClient injects a custom http.Client (critical for httptest). - Network accessline 81
func WithHTTPClient(hc *http.Client) Option { - Network accessline 153
func NewWithCredential(cred auth.Credential, opts ...Option) *Client { c := &Client{ httpClient: &http.Client{Timeout: DefaultTimeout}, - Network accessline 154
c := &Client{ httpClient: &http.Client{Timeout: DefaultTimeout}, baseURL: DefaultBaseURL, - Network accessline 155
httpClient: &http.Client{Timeout: DefaultTimeout},
internal/client/client_test.go
- Executable scriptline 1
Executable file - Network accessline 161
func TestClient_WithHTTPClientPreservesTimeout(t *testing.T) { custom := &http.Client{ - Network accessline 162
custom := &http.Client{ - Network accessline 180
func TestClient_WithHTTPClientNoMutation(t *testing.T) { base := &stubTransport{} custom := &http.Client{ - Network accessline 181
base := &stubTransport{} custom := &http.Client{ Timeout: 5 * time.Second, - Network accessline 182
custom := &http.Client{
internal/client/executor.go
- Executable scriptline 1
Executable file - Network accessline 233
// upload no longer masquerades as a generic network_error on one path // and a timeout on the other. net.Error.Timeout() is the robust // detector: http.Client.Timeout's wrapped error does not reliably - Network accessline 234
// and a timeout on the other. net.Error.Timeout() is the robust // detector: http.Client.Timeout's wrapped error does not reliably // satisfy errors.Is(context.DeadlineExceeded), which is why the old - Network accessline 235
// detector: http.Client.Timeout's wrapped error does not reliably
internal/client/executor_test.go
- Executable scriptline 1
Executable file - Network accessline 990
func TestParseErrorResponse_SurfacesParamAndDocURL(t *testing.T) { body := []byte(`{"error":{"code":"invalid_parameter","message":"bad value","param":"avatar_id","doc_url":"https://developers.heygen.com/docs/error-codes#invalid-parameter"} - Network accessline 991
body := []byte(`{"error":{"code":"invalid_parameter","message":"bad value","param":"avatar_id","doc_url":"https://developers.heygen.com/docs/error-codes#invalid-parameter"}}`) - Network accessline 1021
func TestExecute_ResponseBodyReadError_NetworkError(t *testing.T) { c := New("key", WithBaseURL("http://example.invalid"), WithHTTPClient(&http.Client{Transport: errBodyTransport{}})) - Network accessline 1022
c := New("key", WithBaseURL("http://example.invalid"), WithHTTPClient(&http.Client{Transport: errBodyTransport{}}))
internal/client/oauth_transport_test.go
- Executable scriptline 1
Executable file - Access to secretsline 66
[Credential-related source omitted] - Network accessline 93
WithBaseURL(api.URL), WithHTTPClient(api.Client()), WithOAuthClient(oauth.NewClient(oauth.WithTokenURL("http://example.invalid/token"))), - Network accessline 94
WithHTTPClient(api.Client()), WithOAuthClient(oauth.NewClient(oauth.WithTokenURL("http://example.invalid/token"))), WithOAuthPersister(&fakePersister{}), - Network accessline 95
WithOAuthClient(oauth.NewClient(oauth.WithTokenURL("http://example.invalid/token"))), - Access to secretsline 208
[Credential-related source omitted] - Network accessline 460
WithMaxRetries(0), WithOAuthClient(oauth.NewClient( oauth.WithTokenURL("http://127.0.0.1:1"), // dead endpoint - Network accessline 461
WithOAuthClient(oauth.NewClient( oauth.WithTokenURL("http://127.0.0.1:1"), // dead endpoint )), - Network accessline 462
oauth.WithTokenURL("http://127.0.0.1:1"), // dead endpoint - Network accessline 542
WithBaseURL(api.URL), WithHTTPClient(api.Client()), WithOAuthClient(oauth.NewClient(oauth.WithTokenURL("http://example.invalid"))), - Network accessline 543
WithHTTPClient(api.Client()), WithOAuthClient(oauth.NewClient(oauth.WithTokenURL("http://example.invalid"))), WithOAuthPersister(&fakePersister{}), - Network accessline 544
WithOAuthClient(oauth.NewClient(oauth.WithTokenURL("http://example.invalid"))), - Network accessline 617
WithMaxRetries(0), WithOAuthClient(oauth.NewClient( oauth.WithTokenURL("http://127.0.0.1:1"), // dead IdP - Network accessline 618
WithOAuthClient(oauth.NewClient( oauth.WithTokenURL("http://127.0.0.1:1"), // dead IdP )), - Network accessline 619
oauth.WithTokenURL("http://127.0.0.1:1"), // dead IdP - Access to secretsline 711
[Credential-related source omitted] - Access to secretsline 828
[Credential-related source omitted] - Access to secretsline 844
[Credential-related source omitted] - Network accessline 1018
ExpiresAt: pinned.Add(10 * time.Second), }, WithOAuthClient(oauth.NewClient(oauth.WithTokenURL("http://example.invalid"))), - Network accessline 1019
}, WithOAuthClient(oauth.NewClient(oauth.WithTokenURL("http://example.invalid"))), WithNow(func() time.Time { return pinned }), - Network accessline 1020
WithOAuthClient(oauth.NewClient(oauth.WithTokenURL("http://example.invalid"))), - Network accessline 1032
ExpiresAt: pinned.Add(2 * time.Hour), }, WithOAuthClient(oauth.NewClient(oauth.WithTokenURL("http://example.invalid"))), - Network accessline 1033
}, WithOAuthClient(oauth.NewClient(oauth.WithTokenURL("http://example.invalid"))), WithNow(func() time.Time { return pinned }), - Network accessline 1034
WithOAuthClient(oauth.NewClient(oauth.WithTokenURL("http://example.invalid"))),
internal/client/retry.go
- Executable scriptline 1
Executable file - Network accessline 92
// A tripped client timeout is not worth retrying: http.Client.Timeout is - Network accessline 93
// a total-Do budget, so the context is already spent. Match on // net.Error.Timeout() as well as the context sentinels, because // http.Client.Timeout's wrapped error does not reliably satisfy - Network accessline 94
// net.Error.Timeout() as well as the context sentinels, because // http.Client.Timeout's wrapped error does not reliably satisfy // errors.Is(context.DeadlineExceeded) — the same reason the executor's - Network accessline 95
// http.Client.Timeout's wrapped error does not reliably satisfy
internal/client/retry_test.go
- Executable scriptline 1
Executable file - Network accessline 202
c := New("key", WithHTTPClient(&http.Client{ - Network accessline 203
WithHTTPClient(&http.Client{ - Network accessline 224
func TestRetry_NetworkErrorNoRetry_POST(t *testing.T) { c := New("key", WithHTTPClient(&http.Client{ - Network accessline 225
c := New("key", WithHTTPClient(&http.Client{ Transport: &failOnceTransport{err: errors.New("temporary network error")}, - Network accessline 226
WithHTTPClient(&http.Client{ - Network accessline 232
req, _ := http.NewRequest(http.MethodPost, "http://example.invalid", strings.NewReader(`{"title":"demo"}`)) - Network accessline 428
func TestCloneRequestForRetry_PreservesURL(t *testing.T) { req, _ := http.NewRequest(http.MethodGet, "https://example.com/v1/videos?limit=1", nil) - Network accessline 429
req, _ := http.NewRequest(http.MethodGet, "https://example.com/v1/videos?limit=1", nil) - Network accessline 435
got, _ := url.Parse(cloned.URL.String()) if got.String() != "https://example.com/v1/videos?limit=1" { - Network accessline 436
if got.String() != "https://example.com/v1/videos?limit=1" {
internal/command/hidden.go
- Executable scriptline 1
Executable file
internal/command/spec.go
- Executable scriptline 1
Executable file
internal/command/spec_test.go
- Executable scriptline 1
Executable file - Network accessline 270
data := map[string]any{ "title": "From JSON", "video": map[string]any{"type": "url", "url": "https://example.com"}, - Network accessline 271
"title": "From JSON", "video": map[string]any{"type": "url", "url": "https://example.com"}, } - Network accessline 272
"video": map[string]any{"type": "url", "url": "https://example.com"},
internal/config/config.go
- Executable scriptline 1
Executable file
internal/config/env_provider.go
- Executable scriptline 1
Executable file - Network accessline 10
DefaultBaseURL = "https://api.heygen.com" - Network accessline 24
// BaseURL returns the API base URL. Reads HEYGEN_API_BASE if set (undocumented, // used by tests and internal dev only). Defaults to https://api.heygen.com. - Network accessline 25
// used by tests and internal dev only). Defaults to https://api.heygen.com.
internal/config/env_provider_test.go
- Executable scriptline 1
Executable file
internal/config/file_provider.go
- Executable scriptline 1
Executable file
internal/config/file_provider_test.go
- Executable scriptline 1
Executable file
internal/config/layered_provider.go
internal/config/layered_provider_test.go
- Executable scriptline 1
Executable file
internal/errors/api_error.go
- Executable scriptline 1
Executable file
internal/errors/codes.go
- Executable scriptline 1
Executable file
internal/errors/codes_test.go
- Executable scriptline 1
Executable file
internal/errors/errors.go
internal/errors/errors_test.go
- Executable scriptline 1
Executable file - Access to secretsline 317
[Credential-related source omitted] - Access to secretsline 321
[Credential-related source omitted] - Network accessline 334
func TestFromAPIError_SurfacesDocURLAndParam(t *testing.T) { param := "avatar_id" docURL := "https://developers.heygen.com/docs/error-codes#invalid-parameter" - Network accessline 335
param := "avatar_id" docURL := "https://developers.heygen.com/docs/error-codes#invalid-parameter" apiErr := &APIError{Code: "invalid_parameter", Message: "bad value", Param: ¶m, DocURL: &docURL} - Network accessline 336
docURL := "https://developers.heygen.com/docs/error-codes#invalid-parameter"
internal/origin/origin.go
- Executable scriptline 1
Executable file - Access to secretsline 57
[Credential-related source omitted] - Network accessline 97
// Replit workspace. REPL_ID + REPLIT_USER are long-documented // (https://docs.replit.com/replit-workspace/configuring-the-environment). - Network accessline 98
// (https://docs.replit.com/replit-workspace/configuring-the-environment). - Network accessline 100
// Nous Research Hermes Agent — cli.py:50 sets HERMES_QUIET="1" // unconditionally at module load (https://github.com/NousResearch/hermes-agent). - Network accessline 101
// unconditionally at module load (https://github.com/NousResearch/hermes-agent). - Network accessline 103
// openclaw multi-channel AI gateway — propagates OPENCLAW_STATE_DIR / // OPENCLAW_CONFIG_PATH to every spawned CLI subprocess // (https://github.com/openclaw/openclaw). - Network accessline 105
// (https://github.com/openclaw/openclaw). - Network accessline 107
// Pi coding agent (https://pi.dev) — packages/coding-agent/src/cli.ts:13 - Access to secretsline 131
[Credential-related source omitted]
internal/origin/origin_test.go
- Executable scriptline 1
Executable file
internal/output/formatter.go
- Executable scriptline 1
Executable file
internal/output/human_formatter.go
- Executable scriptline 1
Executable file
internal/output/human_formatter_test.go
internal/output/json_formatter.go
- Executable scriptline 1
Executable file
internal/output/json_formatter_test.go
- Executable scriptline 1
Executable file
internal/output/spinner.go
- Executable scriptline 1
Executable file
internal/output/spinner_test.go
- Executable scriptline 1
Executable file
internal/paths/paths.go
- Executable scriptline 1
Executable file
scripts/install.sh
- Executable scriptline 1
#!/usr/bin/env bash - Network accessline 5
CDN_BASE="${HEYGEN_CDN_BASE_URL:-https://static.heygen.ai/cli}" - Dangerous shell operationline 8
trap 'rm -rf "$TMPDIR"' EXIT - Network accessline 56
if command -v curl >/dev/null 2>&1; then - Network accessline 57
if [[ -n "$output" ]]; then curl -fsSL "$url" -o "$output" else - Network accessline 58
curl -fsSL "$url" -o "$output" - Network accessline 59
else curl -fsSL "$url" fi - Network accessline 60
curl -fsSL "$url" - Network accessline 65
if command -v wget >/dev/null 2>&1; then - Network accessline 66
if [[ -n "$output" ]]; then wget -q -O "$output" "$url" else - Network accessline 67
wget -q -O "$output" "$url" - Network accessline 68
else wget -q -O - "$url" fi - Network accessline 69
wget -q -O - "$url" - Network accessline 74
fail "curl or wget required" - Network accessline 108
latest_stable_tag() { local version if ! version="$(download "${CDN_BASE}/stable")"; then - Network accessline 109
local version if ! version="$(download "${CDN_BASE}/stable")"; then fail "failed to resolve latest stable version from ${CDN_BASE}/stable" - Network accessline 110
if ! version="$(download "${CDN_BASE}/stable")"; then - Network accessline 111
fail "failed to resolve latest stable version from ${CDN_BASE}/stable" - Network accessline 126
local asset_name="$2" local checksums_name="$3" local release_url="${CDN_BASE}/releases/${release_tag}" - Network accessline 128
local release_url="${CDN_BASE}/releases/${release_tag}" - Network accessline 198
log "Detected: ${os} ${arch}" log "Installing heygen release tag '${release_tag}' from ${CDN_BASE}" - Network accessline 199
log "Installing heygen release tag '${release_tag}' from ${CDN_BASE}"
scripts/release-surface.sh
- Executable scriptline 1
#!/usr/bin/env bash
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Declared and executed: 1 fact
- Contacts us.i.posthog.com, which SKILL.md, the README and the plugin manifest do not mentioninternal/analytics/analytics.go:26High confidence
Signal confidence: 499 facts
- Network access in prose of documentation.agents/skills/README.md:3Low confidence
- Access to secrets in prose of the SKILL.md.agents/skills/e2e-cli-test/SKILL.md:18Low confidence
- Access to secrets in code of the SKILL.md.agents/skills/e2e-cli-test/SKILL.md:164High confidence
- Access to secrets in prose of the SKILL.md.agents/skills/e2e-cli-test/SKILL.md:170Low confidence
- Dangerous shell operation in code of the SKILL.md.agents/skills/e2e-cli-test/SKILL.md:212High confidence
- Access to secrets in prose of the SKILL.md.agents/skills/release-cli/SKILL.md:35Low confidence
- Network access in prose of the SKILL.md.agents/skills/release-cli/SKILL.md:129Low confidence
- Network access in prose of the SKILL.md.agents/skills/release-cli/SKILL.md:130Low confidence
- Network access in prose of the SKILL.md.agents/skills/release-cli/SKILL.md:131Low confidence
- Executable script in code of a file that runs.github/scripts/check_pr_template.py:1High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored value.github/scripts/check_pr_template.py:17Low confidence
- Network access in code of a file that runs.github/scripts/check_pr_template.py:20High confidence
- Network access in code of a file that runs.github/scripts/check_pr_template.py:27High confidence
- Executable script in code of a file that runs.github/scripts/cleanup-failed-release.sh:1High confidence
- Executable script in code of a file that runs.github/scripts/find-run-draft.sh:1High confidence
- Executable script in code of a file that runs.github/scripts/install-goreleaser.sh:1High confidence
- Network access in code of a file that runs.github/scripts/install-goreleaser.sh:12High confidence
- Network access in code of a file that runs.github/scripts/install-goreleaser.sh:13High confidence
- Dangerous shell operation in code of a file that runs.github/scripts/install-goreleaser.sh:16High confidence
- Access to secrets in prose of documentation: a variable, placeholder or call, not a stored valueAGENTS.md:15Low confidence
- Access to secrets in prose of documentationAGENTS.md:79Low confidence
- Network access in prose of documentationCODE_OF_CONDUCT.md:39Low confidence
- Network access in prose of documentationCODE_OF_CONDUCT.md:73Low confidence
- Network access in prose of documentationCODE_OF_CONDUCT.md:77Low confidence
- Network access in prose of documentationCODE_OF_CONDUCT.md:79Low confidence
- Network access in prose of documentationCODE_OF_CONDUCT.md:80Low confidence
- Network access in prose of documentationCODE_OF_CONDUCT.md:81Low confidence
- Network access in prose of documentationCODE_OF_CONDUCT.md:82Low confidence
- Network access in prose of documentationCODE_OF_CONDUCT.md:83Low confidence
- Network access in prose of documentationCONTRIBUTING.md:5Low confidence
- Network access in prose of documentationCONTRIBUTING.md:6Low confidence
- Access to secrets in code of documentation: a variable, placeholder or call, not a stored valueCONTRIBUTING.md:21Low confidence
- Executable script in code of a file that runsMakefile:1High confidence
- Dangerous shell operation in code of a file that runsMakefile:19High confidence
- Dangerous shell operation in code of a file that runsMakefile:22High confidence
- Network access in prose of documentationREADME.md:3Low confidence
- Network access in prose of documentationREADME.md:4Low confidence
- Network access in prose of documentationREADME.md:5Low confidence
- Network access in prose of documentationREADME.md:11Low confidence
- Network access in prose of documentationREADME.md:22Low confidence
- Access to secrets in prose of documentationREADME.md:28Low confidence
- Dangerous shell operation in code of documentationREADME.md:34Low confidence
- Network access in code of documentationREADME.md:34Low confidence
- Access to secrets in code of documentation: a variable, placeholder or call, not a stored valueREADME.md:68Low confidence
- Network access in prose of documentationREADME.md:103Low confidence
- Access to secrets in prose of documentationREADME.md:105Low confidence
- Access to secrets in prose of documentationREADME.md:107Low confidence
- Network access in code of documentationREADME.md:126Low confidence
- Network access in code of documentationREADME.md:127Low confidence
- Network access in prose of documentationREADME.md:154Low confidence
and 449 more
Only the first 500 facts are listed.
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Path .claude/skills/changelog-cli | .claude/skills/<skill-name>/ |
| Codex | Native | Manifest AGENTS.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.