Caricamento in corso...
Caricamento in corso...
Last synced: Today, 22:00
Technical reference for the OpenClaw framework. Real-time synchronization with the official documentation engine.
Use this file to discover all available pages before exploring further.
OpenClaw CI runs on every push to
mainpreflightworkflow_dispatchinclude_androidPlugin PrereleaseFull Release Validation| Job | Purpose | When it runs |
|---|---|---|
text preflight | Detect docs-only changes, changed scopes, changed extensions, and build the CI manifest | Always on non-draft pushes and PRs |
text security-scm-fast | Private key detection and workflow audit via text zizmor | Always on non-draft pushes and PRs |
text security-dependency-audit | Dependency-free production lockfile audit against npm advisories | Always on non-draft pushes and PRs |
text security-fast | Required aggregate for the fast security jobs | Always on non-draft pushes and PRs |
text check-dependencies | Production Knip dependency-only pass plus the unused-file allowlist guard | Node-relevant changes |
text build-artifacts | Build text dist/ | Node-relevant changes |
text checks-fast-core | Fast Linux correctness lanes such as bundled/plugin-contract/protocol checks | Node-relevant changes |
text checks-fast-contracts-channels | Sharded channel contract checks with a stable aggregate check result | Node-relevant changes |
text checks-node-core-test | Core Node test shards, excluding channel, bundled, contract, and extension lanes | Node-relevant changes |
text check | Sharded main local gate equivalent: prod types, lint, guards, test types, and strict smoke | Node-relevant changes |
text check-additional | Architecture, boundary, extension-surface guards, package-boundary, and gateway-watch shards | Node-relevant changes |
text build-smoke | Built-CLI smoke tests and startup-memory smoke | Node-relevant changes |
text checks | Verifier for built-artifact channel tests | Node-relevant changes |
text checks-node-compat-node22 | Node 22 compatibility build and smoke lane | Manual CI dispatch for releases |
text check-docs | Docs formatting, lint, and broken-link checks | Docs changed |
text skills-python | Ruff + pytest for Python-backed skills | Python-skill-relevant changes |
text checks-windows | Windows-specific process/path tests plus shared runtime import specifier regressions | Windows-relevant changes |
text macos-node | macOS TypeScript test lane using the shared built artifacts | macOS-relevant changes |
text macos-swift | Swift lint, build, and tests for the macOS app | macOS-relevant changes |
text android | Android unit tests for both flavors plus one debug APK build | Android-relevant changes |
text test-performance-agent | Daily Codex slow-test optimization after trusted activity | Main CI success or manual dispatch |
preflightdocs-scopechanged-scopesecurity-scm-fastsecurity-dependency-auditsecurity-fastcheckcheck-additionalcheck-docsskills-pythonbuild-artifactschecks-fast-corechecks-fast-contracts-channelschecks-node-core-testcheckschecks-windowsmacos-nodemacos-swiftandroidGitHub may mark superseded jobs as
cancelledmain!cancelled() && always()CI-v7-*CI-manual-v1-*Scope logic lives in
scripts/ci-changed-scope.mjssrc/scripts/ci-changed-scope.test.tspreflightchecks-fast-coreThe slowest Node test families are split or balanced so each job stays small without over-reserving runners: channel contracts run as three weighted shards, small core unit lanes are paired, auto-reply runs as four balanced workers (with the reply subtree split into agent-runner, dispatch, and commands/state-routing shards), and agentic gateway/plugin configs are spread across the existing source-only agentic Node jobs instead of waiting on built artifacts. Broad browser, QA, media, and miscellaneous plugin tests use their dedicated Vitest configs instead of the shared plugin catch-all. Include-pattern shards record timing entries using the CI shard name, so
.artifacts/vitest-shard-timings.jsoncheck-additionalbuild-artifactsdist/dist-runtime/Android CI runs both
testPlayDebugUnitTesttestThirdPartyDebugUnitTestThe
check-dependenciespnpm deadcode:dependenciesdlxpnpm deadcode:unused-filesscripts/deadcode-unused-files.allowlist.mjsManual CI dispatches run the same job graph as normal CI but force every non-Android scoped lane on: Linux Node shards, bundled-plugin shards, channel contracts, Node 22 compatibility,
checkcheck-additionalinclude_android=trueinclude_android=trueagentic-pluginsFull Release ValidationPlugin PrereleaseManual runs use a unique concurrency group so a release-candidate full suite is not cancelled by another push or PR run on the same ref. The optional
target_refbashgh workflow run ci.yml --ref release/YYYY.M.D gh workflow run ci.yml --ref main -f target_ref=<branch-or-sha> -f include_android=true gh workflow run full-release-validation.yml --ref main -f ref=<branch-or-sha>
| Runner | Jobs |
|---|---|
text ubuntu-24.04 | text preflighttext security-scm-fasttext security-dependency-audittext security-fasttext checktext check-additional |
text blacksmith-4vcpu-ubuntu-2404 | text CodeQL Critical Qualitytext checks-fast-coretext checks-node-compat-node22text check-prod-typestext check-test-types |
text blacksmith-8vcpu-ubuntu-2404 | text build-artifactstext android |
text blacksmith-16vcpu-ubuntu-2404 | text check-lint |
text blacksmith-16vcpu-windows-2025 | text checks-windows |
text blacksmith-6vcpu-macos-latest | text macos-nodetext openclaw/openclawtext macos-latest |
text blacksmith-12vcpu-macos-latest | text macos-swifttext openclaw/openclawtext macos-latest |
bashpnpm changed:lanes # inspect the local changed-lane classifier for origin/main...HEAD pnpm check:changed # smart local check gate: changed typecheck/lint/guards by boundary lane pnpm check # fast local gate: prod tsgo + sharded lint + parallel fast guards pnpm check:test-types pnpm check:timed # same gate with per-stage timings pnpm build:strict-smoke pnpm check:architecture pnpm test:gateway:watch-regression pnpm test # vitest tests pnpm test:changed # cheap smart changed Vitest targets pnpm test:channels pnpm test:contracts:channels pnpm check:docs # docs format + lint + broken links pnpm build # build dist when CI artifact/build-smoke lanes matter pnpm ci:timings # summarize the latest origin/main push CI run pnpm ci:timings:recent # compare recent successful main CI runs node scripts/ci-run-timings.mjs <run-id> # summarize wall time, queue time, and slowest jobs node scripts/ci-run-timings.mjs --latest-main # ignore issue/comment noise and choose origin/main push CI node scripts/ci-run-timings.mjs --recent 10 # compare recent successful main CI runs pnpm test:perf:groups --full-suite --allow-failures --output .artifacts/test-perf/baseline-before.json pnpm test:perf:groups:compare .artifacts/test-perf/baseline-before.json .artifacts/test-perf/after-agent.json
Full Release ValidationCIPlugin PrereleaseOpenClaw Release ChecksNPM Telegram Beta E2ESee Full release validation for the stage matrix, exact workflow job names, profile differences, artifacts, and focused rerun handles.
release_profilestablefullminimumstablefullThe umbrella records the dispatched child run ids, and the final
Verify full validationFor recovery, both
Full Release ValidationOpenClaw Release Checksrerun_groupallciplugin-prereleaserelease-checksinstall-smokecross-oslive-e2epackageqaqa-parityqa-livenpm-telegramOpenClaw Release Checksrelease-package-under-testDuplicate
Full Release Validationref=mainrerun_group=allcancel-in-progress: falseThe release live/E2E child keeps broad native
pnpm test:livescripts/test-live-shard.mjsnative-live-src-agentsnative-live-src-gateway-corenative-live-src-gateway-profilesnative-live-src-gateway-backendsnative-live-testnative-live-extensions-a-knative-live-extensions-l-nnative-live-extensions-openainative-live-extensions-o-z-othernative-live-extensions-xaiThat keeps the same file coverage while making slow live provider failures easier to rerun and diagnose. The aggregate
native-live-extensions-o-znative-live-extensions-medianative-live-extensions-media-musicThe native live media shards run in
ghcr.io/openclaw/openclaw-live-media-runner:ubuntu-24.04Live Media Runner ImageffmpegffprobeDocker-backed live model/backend shards use a separate shared
ghcr.io/openclaw/openclaw-live-test:<sha>OPENCLAW_SKIP_DOCKER_BUILD=1timeoutUse
Package Acceptanceresolve_packageworkflow_ref.artifacts/docker-e2e-package/openclaw-current.tgz.artifacts/docker-e2e-package/package-candidate.jsonpackage-under-testdocker_acceptanceopenclaw-live-and-e2e-checks-reusable.ymlref=workflow_refpackage_artifact_name=package-under-testdocker_lanespackage_telegramNPM Telegram Beta E2Etelegram_modenonepackage-under-testsummarysource=npmopenclaw@betaopenclaw@latestopenclaw@2026.4.27-beta.2source=refpackage_refscripts/package-openclaw-for-docker.mjssource=url.tgzpackage_sha256source=artifact.tgzartifact_run_idartifact_namepackage_sha256Keep
workflow_refpackage_refworkflow_refpackage_refsource=refsmokenpm-onboard-channel-agentgateway-networkconfig-reloadpackagenpm-onboard-channel-agentdoctor-switchupdate-channel-switchupgrade-survivorpublished-upgrade-survivorbundled-channel-deps-compatplugins-offlineplugin-updateproductpackagemcp-channelscron-mcp-cleanupopenai-web-search-minimalopenwebuifullcustomdocker_lanessuite_profile=customThe
packagepackage-under-testNPM Telegram Beta E2ERelease checks call Package Acceptance with
source=refpackage_ref=<release-ref>workflow_ref=<release workflow ref>suite_profile=customdocker_lanes='bundled-channel-deps-compat plugins-offline'telegram_mode=mock-openaipublished-upgrade-survivorpackage-under-testpublished_upgrade_survivor_baselineopenclaw@latestOPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECopenclaw@2026.4.15openclaw config setsummary.jsonpublished_upgrade_survivor_baselineOPENCLAW_CROSS_OS_OPENAI_MODELopenai/gpt-5.4-miniPackage Acceptance has bounded legacy-compatibility windows for already-published packages. Packages through
2026.4.252026.4.25-beta.*dist/postinstall-inventory.jsondoctor-switchgateway install --wrapperupdate-channel-switchpnpm.patchedDependenciesupdate.channelplugin-updateThe published
2026.4.26bash# Validate the current beta package with product-level coverage. gh workflow run package-acceptance.yml \ --ref main \ -f workflow_ref=main \ -f source=npm \ -f package_spec=openclaw@beta \ -f suite_profile=product \ -f telegram_mode=mock-openai # Pack and validate a release branch with the current harness. gh workflow run package-acceptance.yml \ --ref main \ -f workflow_ref=main \ -f source=ref \ -f package_ref=release/YYYY.M.D \ -f suite_profile=package \ -f telegram_mode=mock-openai # Validate a tarball URL. SHA-256 is mandatory for source=url. gh workflow run package-acceptance.yml \ --ref main \ -f workflow_ref=main \ -f source=url \ -f package_url=https://example.com/openclaw-current.tgz \ -f package_sha256=<64-char-sha256> \ -f suite_profile=smoke # Reuse a tarball uploaded by another Actions run. gh workflow run package-acceptance.yml \ --ref main \ -f workflow_ref=main \ -f source=artifact \ -f artifact_run_id=<run-id> \ -f artifact_name=package-under-test \ -f suite_profile=custom \ -f docker_lanes='install-e2e plugin-update'
When debugging a failed package acceptance run, start at the
resolve_packagedocker_acceptance.artifacts/docker-tests/**/summary.jsonfailures.jsonThe separate
Install Smokepreflightrun_fast_install_smokerun_full_install_smokemainThe slow Bun global install image-provider smoke is separately gated by
run_bun_global_install_smokeInstall Smokemainpnpm test:docker:allscripts/e2e/Dockerfile/appDocker lane definitions live in
scripts/lib/docker-e2e-scenarios.mjsscripts/lib/docker-e2e-plan.mjsOPENCLAW_DOCKER_E2E_BARE_IMAGEOPENCLAW_DOCKER_E2E_FUNCTIONAL_IMAGEOPENCLAW_SKIP_DOCKER_BUILD=1| Variable | Default | Purpose |
|---|---|---|
text OPENCLAW_DOCKER_ALL_PARALLELISM | 10 | Main-pool slot count for normal lanes. |
text OPENCLAW_DOCKER_ALL_TAIL_PARALLELISM | 10 | Provider-sensitive tail-pool slot count. |
text OPENCLAW_DOCKER_ALL_LIVE_LIMIT | 9 | Concurrent live lane cap so providers do not throttle. |
text OPENCLAW_DOCKER_ALL_NPM_LIMIT | 10 | Concurrent npm install lane cap. |
text OPENCLAW_DOCKER_ALL_SERVICE_LIMIT | 7 | Concurrent multi-service lane cap. |
text OPENCLAW_DOCKER_ALL_START_STAGGER_MS | 2000 | Stagger between lane starts to avoid Docker daemon create storms; set text 0 |
text OPENCLAW_DOCKER_ALL_LANE_TIMEOUT_MS | 7200000 | Per-lane fallback timeout (120 minutes); selected live/tail lanes use tighter caps. |
text OPENCLAW_DOCKER_ALL_DRY_RUN | unset | text 1 |
text OPENCLAW_DOCKER_ALL_LANES | unset | Comma-separated exact lane list; skips cleanup smoke so agents can reproduce one failed lane. |
A lane heavier than its effective cap can still start from an empty pool, then runs alone until it releases capacity. The local aggregate preflights Docker, removes stale OpenClaw E2E containers, emits active-lane status, persists lane timings for longest-first ordering, and stops scheduling new pooled lanes after the first failure by default.
The reusable live/E2E workflow asks
scripts/test-docker-all.mjs --plan-jsonscripts/docker-e2e.mjsscripts/package-openclaw-for-docker.mjspackage_artifact_run_iddocker_e2e_bare_imagedocker_e2e_functional_imageRelease Docker coverage runs smaller chunked jobs with
OPENCLAW_SKIP_DOCKER_BUILD=1OPENCLAW_DOCKER_ALL_PROFILE=release-pathOPENCLAW_DOCKER_ALL_CHUNK=core | package-update-openai | package-update-anthropic | package-update-core | plugins-runtime-plugins | plugins-runtime-services | plugins-runtime-install-a..h | bundled-channelsCurrent release Docker chunks are
corepackage-update-openaipackage-update-anthropicpackage-update-coreplugins-runtime-pluginsplugins-runtime-servicesplugins-runtime-install-aplugins-runtime-install-hbundled-channels-corebundled-channels-update-abundled-channels-update-discordbundled-channels-update-bbundled-channels-contractsbundled-channelsplugins-runtime-coreplugins-runtimeplugins-integrationsinstall-e2ebundled-channelsbundled-channel-*bundled-channel-update-*bundled-channel-depsOpenWebUI is folded into
plugins-runtime-servicesopenwebuiEach chunk uploads
.artifacts/docker-tests/summary.jsonfailures.jsondocker_lanespackage_artifact_run_idpackage_artifact_namebashpnpm test:docker:rerun <run-id> # download Docker artifacts and print combined/per-lane targeted rerun commands pnpm test:docker:timings <summary> # slow-lane and phase critical-path summaries
The scheduled live/E2E workflow runs the full release-path Docker suite daily.
Plugin PrereleaseFull Release ValidationmainQA Lab has dedicated CI lanes outside the main smart-scoped workflow.
Parity gateQA-Lab - All Lanesmainqa-live-sharedRelease checks run Matrix and Telegram live transport lanes with the deterministic mock provider and mock-qualified models (
mock-openai/gpt-5.5mock-openai/gpt-5.5-altMatrix uses
--profile fast--fail-fastallmatrix_profile=alltransportmediae2ee-smokee2ee-deepe2ee-cliOpenClaw Release ChecksDo not put the PR landing path behind
Parity gateThe
CodeQLsecurity-severityThe pull request guard stays light: it only starts for changes under
.github/actions.github/codeql.github/workflowspackagessrc| Category | Surface |
|---|---|
text /codeql-security-high/core-auth-secrets | Auth, secrets, sandbox, cron, and gateway baseline |
text /codeql-security-high/channel-runtime-boundary | Core channel implementation contracts plus the channel plugin runtime, gateway, Plugin SDK, secrets, audit touchpoints |
text /codeql-security-high/network-ssrf-boundary | Core SSRF, IP parsing, network guard, web-fetch, and Plugin SDK SSRF policy surfaces |
text /codeql-security-high/mcp-process-tool-boundary | MCP servers, process execution helpers, outbound delivery, and agent tool-execution gates |
text /codeql-security-high/plugin-trust-boundary | Plugin install, loader, manifest, registry, runtime-dependency staging, source-loading, and Plugin SDK package contract trust surfaces |
CodeQL Android Critical Security/codeql-critical-security/androidCodeQL macOS Critical Security/codeql-critical-security/macosCodeQL Critical Qualityagent-runtime-boundaryconfig-boundarycore-auth-secretschannel-runtime-boundarygateway-runtime-boundarymemory-runtime-boundarymcp-process-runtime-boundaryprovider-runtime-boundarysession-diagnostics-boundaryplugin-boundaryplugin-sdk-package-contractplugin-sdk-reply-runtimeManual dispatch accepts:
textprofile=all|agent-runtime-boundary|config-boundary|core-auth-secrets|channel-runtime-boundary|gateway-runtime-boundary|memory-runtime-boundary|mcp-process-runtime-boundary|plugin-boundary|plugin-sdk-package-contract|plugin-sdk-reply-runtime|provider-runtime-boundary|session-diagnostics-boundary
The narrow profiles are teaching/iteration hooks for running one quality shard in isolation.
| Category | Surface |
|---|---|
text /codeql-critical-quality/core-auth-secrets | Auth, secrets, sandbox, cron, and gateway security boundary code |
text /codeql-critical-quality/config-boundary | Config schema, migration, normalization, and IO contracts |
text /codeql-critical-quality/gateway-runtime-boundary | Gateway protocol schemas and server method contracts |
text /codeql-critical-quality/channel-runtime-boundary | Core channel and bundled channel plugin implementation contracts |
text /codeql-critical-quality/agent-runtime-boundary | Command execution, model/provider dispatch, auto-reply dispatch and queues, and ACP control-plane runtime contracts |
text /codeql-critical-quality/mcp-process-runtime-boundary | MCP servers and tool bridges, process supervision helpers, and outbound delivery contracts |
text /codeql-critical-quality/memory-runtime-boundary | Memory host SDK, memory runtime facades, memory Plugin SDK aliases, memory runtime activation glue, and memory doctor commands |
text /codeql-critical-quality/session-diagnostics-boundary | Reply queue internals, session delivery queues, outbound session binding/delivery helpers, diagnostic event/log bundle surfaces, and session doctor CLI contracts |
text /codeql-critical-quality/plugin-sdk-reply-runtime | Plugin SDK inbound reply dispatch, reply payload/chunking/runtime helpers, channel reply options, delivery queues, and session/thread binding helpers |
text /codeql-critical-quality/provider-runtime-boundary | Model catalog normalization, provider auth and discovery, provider runtime registration, provider defaults/catalogs, and web/search/fetch/embedding registries |
text /codeql-critical-quality/ui-control-plane | Control UI bootstrap, local persistence, gateway control flows, and task control-plane runtime contracts |
text /codeql-critical-quality/web-media-runtime-boundary | Core web fetch/search, media IO, media understanding, image-generation, and media-generation runtime contracts |
text /codeql-critical-quality/plugin-boundary | Loader, registry, public-surface, and Plugin SDK entrypoint contracts |
text /codeql-critical-quality/plugin-sdk-package-contract | Published package-side Plugin SDK source and plugin package contract helpers |
Quality stays separate from security so quality findings can be scheduled, measured, disabled, or expanded without obscuring security signal. Swift, Python, and bundled-plugin CodeQL expansion should be added back as scoped or sharded follow-up work only after the narrow profiles have stable runtime and signal.
The
Docs AgentmainmainmainThe
Test Performance Agentmainmainpnpm check:changedThe
Duplicate PRs After Mergeapply=truebashgh workflow run duplicate-after-merge.yml \ -f landed_pr=70532 \ -f duplicate_prs='70530,70592' \ -f apply=true
Local changed-lane logic lives in
scripts/changed-lanes.mjsscripts/check-changed.mjsLocal changed-test routing lives in
scripts/test-projects.test-support.mjscheck:changedOPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changedRun Testbox from the repo root and prefer a fresh warmed box for broad proof. Before spending a slow gate on a box that was reused, expired, or just reported an unexpectedly large sync, run
pnpm testbox:sanityThe sanity check fails fast when required root files such as
pnpm-lock.yamlgit status --shortOPENCLAW_TESTBOX_ALLOW_MASS_DELETIONS=1pnpm testbox:runOPENCLAW_TESTBOX_SYNC_TIMEOUT_MS=0© 2024 TaskFlow Mirror
Powered by TaskFlow Sync Engine