End-to-end fix for OpenClaw 2026.4.25+. After a clean npx -y install and openclaw gateway restart, traces flow without manual intervention.
Breaking
- Minimum supported OpenClaw is now 2026.4.25. The installer detects the version up-front (
openclaw --version) and aborts with an upgrade message on older versions. Earlier OpenClaws either rejecthooks.allowConversationAccessoutright (≤ 2026.4.21) or have unverified hook-dispatch gating (2026.4.22 – 2026.4.24); supporting the entire range with portability shims would mean shipping known-broken behaviour. We'd rather fail loudly. Upgrade withnpm install -g openclaw@latest.
Fixed
- Plugin discovery + the
installs.jsonindex now stay in sync. 0.0.3 hand-placed files into~/.openclaw/extensions/<name>/, which the gateway's runtime discovery picked up — but OpenClaw's persisted~/.openclaw/plugins/installs.jsonwasn't refreshed, soopenclaw config validateand every other CLI command warnedplugin not found: @latitude-data/openclaw-telemetry (stale config entry ignored). Replaced hand-placement withopenclaw plugins install <package-path> --force. OpenClaw now owns placement, writes the install record, and creates the (initially disabled)plugins.entries[id]block — we layer config + hooks +plugins.allowon top. - Hook dispatch is no longer blocked. OpenClaw 2026.4.22+ added
hooks.allowConversationAccessto the strict zod schema and made it the runtime gate forllm_input/llm_output/before_tool_call/after_tool_call/agent_enddispatch to non-bundled plugins. 0.0.3 only wroteconfig.allowConversationAccess, so on 2026.4.25 the gateway logged[plugins] typed hook "..." blocked because non-bundled plugins must set plugins.entries.<id>.hooks.allowConversationAccess=truefor every event and our handlers never fired — zero traces.setPluginEntrynow writes both:config.allowConversationAccess(payload-content gate, read by our runtime) andhooks.allowConversationAccess(dispatch gate, read by OpenClaw's runtime). Always coupled to the same source value. plugins.allowwarning silenced. OpenClaw warns at every gateway start when a non-bundled plugin auto-loads without provenance viaplugins.allowor an install record. Going throughopenclaw plugins installclears the provenance side; the installer also auto-adds the plugin id toplugins.allow(runningnpx installis the trust signal). New--no-trustflag opts out — the warning will keep showing until the operator adds the id manually.SCOPE_VERSIONno longer lies. The hard-coded"0.0.2"inotlp.tsis gone; the version is now read at runtime frompackage.json, matching the patterncli.tsuses for--version. Future bumps only touchpackage.json.
Removed
src/install-files.ts— superseded byopenclaw plugins install. We never write to~/.openclaw/extensions/ourselves anymore.
Added
src/openclaw-cli.ts— shell-out wrapper with structured failure modes (enoent/timeout/exit), CalVer comparison, andopenclaw --versionparsing.--no-trustinstall flag — skip auto-adding toplugins.allow. The README documents what changes when set.