Problem
After installing @qverisai/qveris on OpenClaw >=2026.6.11, the plugin loads (status: loaded, enabled: true) but registers zero tools:
$ openclaw plugins inspect qveris --runtime --json | jq '.plugin | {status, toolNames}'
{
"status": "loaded",
"toolNames": []
}
diagnostics shows a single error:
{
"level": "error",
"pluginId": "qveris",
"message": "plugin must declare contracts.tools before registering agent tools"
}
Root cause
OpenClaw 2026.6.11 switched to contract-driven tool registration: plugins must declare the tools they expose in the manifest (openclaw.plugin.json) under contracts.tools. Runtime calls to api.registerTool(..., { names: [...] }) are only allowed for names already listed in the manifest.
The plugin's runtime register call is correct (dist/index.js:8-9):
api.registerTool((ctx) => createQverisTools({ api, ctx }), {
names: ["qveris_discover", "qveris_call", "qveris_inspect"]
});
…but openclaw.plugin.json (peer dependency already declares openclaw: ">=2026.6.11") only ships these top-level keys:
{ "id", "setup", "uiHints", "configSchema" }
There is no "contracts" section, so the Gateway refuses registration.
For comparison, the @openclaw/tavily-plugin manifest (which works fine on the same host) includes:
"contracts": {
"webSearchProviders": ["tavily"],
"tools": ["tavily_search", "tavily_extract"]
}
Reproduction
- Install:
openclaw plugins install @qverisai/qveris
- Enable + restart gateway
openclaw plugins inspect qveris --runtime --json → toolNames: [], diagnostics reports the contract error above
- Same host, install
@openclaw/tavily-plugin → works (toolNames: ["tavily_search", "tavily_extract"], diagnostics empty). The only manifest difference is the contracts block.
Suggested fix
Add to packages/openclaw-qveris-plugin/openclaw.plugin.json:
"contracts": {
"tools": ["qveris_discover", "qveris_call", "qveris_inspect"]
}
(placement: between uiHints and configSchema, matching tavily's layout)
Verified workaround locally
I patched the installed manifest under ~/.openclaw/npm/projects/.../node_modules/@qverisai/qveris/openclaw.plugin.json with the block above, then openclaw plugins disable qveris && openclaw plugins enable qveris. Result:
toolNames: ["qveris_discover", "qveris_call", "qveris_inspect"]
diagnostics: []
Calling qveris_discover / qveris_call then works normally. So the only thing missing in 2026.7.15 is the manifest field — runtime code is already correct.
Happy to send this as a PR against packages/openclaw-qveris-plugin if useful; let me know the preferred branch.
Problem
After installing
@qverisai/qverison OpenClaw>=2026.6.11, the plugin loads (status: loaded,enabled: true) but registers zero tools:diagnostics shows a single error:
{ "level": "error", "pluginId": "qveris", "message": "plugin must declare contracts.tools before registering agent tools" }Root cause
OpenClaw 2026.6.11 switched to contract-driven tool registration: plugins must declare the tools they expose in the manifest (
openclaw.plugin.json) undercontracts.tools. Runtime calls toapi.registerTool(..., { names: [...] })are only allowed for names already listed in the manifest.The plugin's runtime register call is correct (
dist/index.js:8-9):…but
openclaw.plugin.json(peer dependency already declaresopenclaw: ">=2026.6.11") only ships these top-level keys:There is no
"contracts"section, so the Gateway refuses registration.For comparison, the
@openclaw/tavily-pluginmanifest (which works fine on the same host) includes:Reproduction
openclaw plugins install @qverisai/qverisopenclaw plugins inspect qveris --runtime --json→toolNames: [], diagnostics reports the contract error above@openclaw/tavily-plugin→ works (toolNames: ["tavily_search", "tavily_extract"], diagnostics empty). The only manifest difference is thecontractsblock.Suggested fix
Add to
packages/openclaw-qveris-plugin/openclaw.plugin.json:(placement: between
uiHintsandconfigSchema, matching tavily's layout)Verified workaround locally
I patched the installed manifest under
~/.openclaw/npm/projects/.../node_modules/@qverisai/qveris/openclaw.plugin.jsonwith the block above, thenopenclaw plugins disable qveris && openclaw plugins enable qveris. Result:Calling
qveris_discover/qveris_callthen works normally. So the only thing missing in 2026.7.15 is the manifest field — runtime code is already correct.Happy to send this as a PR against
packages/openclaw-qveris-pluginif useful; let me know the preferred branch.