Troubleshooting
June 16, 2026 ยท View on GitHub
Common errors and how to fix them.
Related: Getting Started | CLI Reference | README
Missing API key
Symptom:
Error: No LLM provider configured. Set ANTHROPIC_API_KEY or OPENAI_API_KEY.
or
RuntimeError: No LLM provider configured.
Fix:
export ANTHROPIC_API_KEY=sk-ant-...
# or
export OPENAI_API_KEY=sk-...
This is only required for commands that call an LLM: design, modify, compare, chat, and adr. Everything else runs offline.
To verify which commands are offline, see the command list in Getting Started.
Wrong extras version (lockstep requirement)
Symptom:
ImportError: cannot import name 'X' from 'cloudwright'
or features from a recent release are missing after upgrading.
Cause:
The four Cloudwright packages (cloudwright-ai, cloudwright-ai-cli, cloudwright-ai-web, cloudwright-ai-mcp) must be on the same version. The extras pins in cloudwright-ai[cli] etc. enforce this, but a partial install or a manual pip upgrade of just one package can break the lockstep.
Fix:
pip install 'cloudwright-ai[all]=={version}' --force-reinstall
Replace {version} with the target version (e.g. 1.6.0). Check the current installed version with:
cloudwright --version
cloudwright plan fails because terraform is not on PATH
Symptom:
[SKIP] terraform not found on PATH
or
FileNotFoundError: terraform
Fix:
Install Terraform: https://developer.hashicorp.com/terraform/install
Then verify:
terraform version
If you only want offline proof without cloud credentials, pass --no-plan:
cloudwright plan spec.yaml --no-plan
This runs terraform validate only and does not need credentials.
For Pulumi targets, install Pulumi: https://www.pulumi.com/docs/install/
cloudwright plan times out
Symptom:
[SKIP] plan timed out after 180s
or the command hangs for several minutes before failing.
Fix:
Extend the timeout (in seconds):
cloudwright plan spec.yaml --timeout 600
Common causes: slow network when Terraform downloads provider plugins on first init, or an unusually large plan against a cloud account with many existing resources.
Provider credential errors during plan or import-live
Symptom:
Error: No valid credential sources found for AWS Provider.
or permission-denied messages from GCP / Azure.
Fix for plan: Use --no-plan to skip the credential-requiring step:
cloudwright plan spec.yaml --no-plan
Fix for import-live: Configure credentials before running:
- AWS:
aws configureor setAWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY, or use--profile <name>for a named profile. - GCP:
gcloud auth application-default login, then pass--project <PROJECT_ID>. - Azure:
az login, then pass--subscription <SUB_ID>.
Per-service permission errors during import-live are non-fatal. Components Cloudwright cannot read are skipped and reported on stderr.
Rate limiting
Symptom:
Rate limited, try again in a moment.
or HTTP 429 responses from the LLM provider.
Fix:
Wait 10-30 seconds and retry. If this happens frequently, you are hitting the API tier's rate limit. Options:
- Reduce concurrency if you are running multiple
designcalls in parallel. - Use
--dry-runto check prompt size without making the call. - Upgrade your API tier on the provider's dashboard.
Provider download / network timeout during plan
Symptom:
Terraform stalls downloading a provider plugin, or the plan times out waiting for network.
Fix:
If you are behind a proxy, set HTTPS_PROXY in your environment before running cloudwright plan. Alternatively, pre-download the provider:
cd /tmp && terraform init -from-module github.com/hashicorp/example
Or run with --no-plan to skip the network-dependent provider download:
cloudwright plan spec.yaml --no-plan
SVG or PNG export fails ("D2 binary not found")
Symptom:
Warning: D2 binary not found โ returning D2 source text.
or for PNG:
Error: D2 binary not found
Fix:
curl -fsSL https://d2lang.com/install.sh | sh
Then verify:
d2 --version
The mermaid, terraform, cloudformation, sbom, and aibom formats do not need D2.
PDF compliance report fails
Symptom:
ImportError: No module named 'weasyprint'
Fix:
pip install 'cloudwright-ai[pdf]'
import-live fails with ImportError
Symptom:
Live import core is unavailable. Install with: pip install 'cloudwright-ai[live-import]'
Fix:
pip install 'cloudwright-ai[live-import]'
For provider-specific installs:
pip install 'cloudwright-ai[live-import-aws]' # AWS only
pip install 'cloudwright-ai[live-import-gcp]' # GCP only
pip install 'cloudwright-ai[live-import-azure]' # Azure only
databricks-validate fails with ImportError
Symptom:
Error: databricks-sdk not installed. Run: pip install cloudwright-ai[databricks]
Fix:
pip install 'cloudwright-ai[databricks]'
Then set DATABRICKS_HOST and DATABRICKS_TOKEN (or pass them as options).
Behavioral tests fail with API key set
Symptom (for contributors running the test suite):
Tests in test_e2e.py, test_architect.py, and the web test_api.py make live LLM calls when ANTHROPIC_API_KEY or OPENAI_API_KEY is set, causing them to be slow or incur costs.
Fix:
Unset the keys before running tests to match CI behavior:
env -u ANTHROPIC_API_KEY -u OPENAI_API_KEY python -m pytest packages/core/tests -q --timeout=60
Live-LLM tests (test_e2e.py::TestLLM::*) are expected to fail with keys unset. This is not a regression.
Web canvas shows a blank page or errors on startup
Symptom:
Browser shows nothing or a JavaScript error after cloudwright chat --web.
Cause:
The static bundle in packages/web/cloudwright_web/static/ may be stale (built from a previous version) or missing.
Fix:
Rebuild the frontend:
cd packages/web/frontend && npm run build
rm -rf ../cloudwright_web/static
cp -r dist ../cloudwright_web/static
Then restart:
cloudwright chat --web
Port already in use
Symptom:
Error: port 8765 is already in use.
Fix:
cloudwright chat --web --port 9000
cloudwright compliance Checkov scan doesn't run
Symptom:
The compliance output shows scanner: builtin even though you expected Checkov to run.
Fix:
Checkov must be on PATH:
pip install checkov
checkov --version
Also install the compliance extra:
pip install 'cloudwright-ai[compliance]'
Checkov is auto-detected. You can force it with --checkov or skip it with --no-checkov.