| title | Troubleshooting |
|---|
Common issues and their fixes when running Agora CLI. For broader install
guidance see Install. For programmatic error inspection,
prefer agora project doctor --json and agora auth status --json.
Before opening an issue, capture these:
agora --version
agora project doctor --json
agora auth status --jsonThe output above is what the bug report template asks for and is the fastest path to a fix.
Symptom: the OAuth browser window does not open, or you are running over SSH / in a container.
agora login --no-browserThis prints the login URL so you can open it on another machine and paste the callback. You can also disable auto-open globally:
agora config update --browser-auto-open=falseThe installer printed the install directory but it is not on PATH.
# macOS / Linux
echo "$PATH"
sh install.sh # re-run installer (PATH wiring is auto-on by default)
# Windows PowerShell
$env:Path -split ';'
.\install.ps1 # re-run installer (PATH wiring is auto-on by default)The installer detects when another agora shadows the freshly installed
binary and warns. You can also check directly:
which -a agora # macOS / Linux
where.exe agora # Windows PowerShellReorder PATH so the installer's directory comes first, or remove the
older binary.
If the older binary came from a global npm install and you want to switch to the standalone installer, either migrate in one installer run:
curl -fsSL @@CLI_INSTALL_SH_URL@@ | sh -s -- --replace-npmOr uninstall npm first and then run the standalone installer:
npm uninstall -g agoraio-cli
curl -fsSL @@CLI_INSTALL_SH_URL@@ | shUse --force only when you intentionally want two installs and understand
that the first agora on PATH wins.
The installer downloads from GitHub by default and automatically falls back to
the Agora mirror at dl.agora.io when GitHub is unreachable or rate-limited;
downloads stay SHA-256 verified either way. Where GitHub is fully blocked,
the GitHub-hosted script URL is unreachable too, so fetch the script from the
mirror and skip GitHub entirely:
curl -fsSL https://dl.agora.io/cli/install.sh | AGORA_INSTALL_SOURCE=s3 shPowerShell:
$env:AGORA_INSTALL_SOURCE = 's3'; irm https://dl.agora.io/cli/install.ps1 | iexAGORA_INSTALL_SOURCE accepts auto (default), github, or s3. Note that
--prerelease and version listing require GitHub; pin an explicit --version
to install a specific release from the mirror. See
Install for details.
The CLI shells out to git clone for quickstarts. Most failures map to a stable error code:
| Error code | Meaning | Fix |
|---|---|---|
QUICKSTART_GIT_MISSING |
git is not on PATH. |
Install git (git-scm.com/downloads) and retry. |
QUICKSTART_REF_INVALID |
--ref is empty, dash-prefixed, or contains whitespace. |
Pass a valid branch/tag/commit. |
QUICKSTART_REPO_OVERRIDE_INVALID |
The AGORA_QUICKSTART_<TEMPLATE>_REPO_URL env override is malformed. |
Set it to an https://, ssh://, git://, file://, git@host:path, or absolute local path URL — or unset it. |
If the clone reaches git but still fails, verify connectivity:
git --version
git ls-remote https://github.com/AgoraIO-Conversational-AI/agent-quickstart-nextjs.gitCheck proxies and corporate firewall rules if ls-remote hangs or fails.
The CLI invokes git with -c credential.helper= so credential helpers (including macOS keychain) are not consulted for these public clones — agent and CI subprocesses no longer fail with "Device not configured."
Workshops and internal forks can override the clone URL per template, e.g.:
AGORA_QUICKSTART_NEXTJS_REPO_URL=https://github.com/my-org/fork agora init demo --template nextjsA clone:override progress event is emitted whenever this is in use, so JSON automation runs show which fork was cloned.
quickstart env write, init, and project env --with-secrets need a
project with an App Certificate. Either pick another project or enable
the certificate in Agora Console.
agora project list --json
agora project use <project-name>
agora project doctor --jsonThis is intentional. --yes accepts the default for confirmation
prompts; it does not start a brand-new interactive OAuth flow in JSON,
CI, or non-TTY contexts. Authenticate once on the host first:
agora loginThen re-run your automation. CI runners should authenticate as part of their bootstrap, not as part of every command.
CI auto-detection is intentional: in CI, the CLI never spawns an OAuth
browser flow even with --yes. Pre-authenticate the runner:
agora loginOr set AGORA_HOME=$(mktemp -d) per job for an isolated session and
provision credentials via your secret store before invoking the CLI.
agora upgrade performs an in-place update for installer-managed installs.
In CI and agent automation, prefer non-mutating checks:
agora upgrade --check --json
agora --upgrade-check --jsonInstaller-managed self-update is blocked in CI by default (v0.2.1+). Blocked
runs return status: "manual" with ciBlocked: true in JSON. Set
AGORA_ALLOW_UPGRADE_IN_CI=1 only when a job intentionally needs to mutate
the installed binary.
For package-manager installs, use the package manager's own upgrade command.
Release archives were renamed from agora-cli-go_v* to agora-cli_v*
starting in v0.2.1. Binaries installed from v0.1.7 through v0.2.0 embed
upgrade logic that only knows the old prefix, so agora upgrade may fail
when downloading v0.2.1+.
Re-run the installer once (it always fetches the latest script and archive names):
curl -fsSL @@CLI_INSTALL_SH_URL@@ | shnpm and other package-manager installs are unaffected.
In JSON, CI, or non-TTY runs, agora init requires an explicit template.
Pass --template (list options with agora quickstart list):
agora init my-demo --template nextjs --new-project --yes --jsonThe CLI auto-detects CI and disables color and progress bars there. In local TTYs you can override:
agora <command> --no-color
NO_COLOR=1 agora <command>
agora <command> --jsonFor wrappers that parse output, always pass --json. Pretty output is
not a stable contract.
If you mistype a subcommand the CLI prints the closest matches:
$ agora projct doctor
Error: unknown command "projct" for "agora"
Did you mean this?
project
Use --debug (equivalent to AGORA_DEBUG=1) to mirror structured log
records to stderr. JSON envelopes and exit codes are unchanged.
v0.2.0 removed the legacy
--verbose/-valias and theAGORA_VERBOSEenvironment variable. If you still have a 0.1.x config file with averbosekey, it is silently migrated todebugon first load — no action required. Update any scripts that setAGORA_VERBOSE=1to setAGORA_DEBUG=1instead.
agora --debug project list
AGORA_DEBUG=1 agora init my-demo --template nextjs --jsonThe same lines are written to a rotating log file. Print the path with:
agora config path # parent directoryThe log file is agora-cli.log next to the config file.
Telemetry is opt-out. Disable with any of:
agora telemetry disable
agora config update --telemetry-enabled=false
DO_NOT_TRACK=1 agora <command>See Telemetry for the field schema.
Boolean flags in agora config update need explicit =false syntax. For example:
agora config update --telemetry-enabled=false
agora config update --browser-auto-open=false
agora config update --debug=falsePassing only --telemetry-enabled sets the value to true; omitting the flag leaves the existing config unchanged.
- Open a GitHub Discussion for "how do I" questions.
- Open a bug report for a reproducible defect.
- Email security@agora.io for a suspected security vulnerability (see SECURITY.md).