Skip to content

Undeclared legacy hyphenated tool aliases cause 4 activation errors on OpenClaw 2026.9.x ("plugin must declare contracts.tools") #63

Closed

Description

@fray-ai

Summary

On OpenClaw 2026.9.x the plugin logs four ERROR lines on every Gateway start because it registers legacy hyphenated tool aliases that are not declared in openclaw.plugin.json → contracts.tools. OpenClaw's plugin loader now rejects undeclared tool registrations.

[plugins] plugin must declare contracts.tools for: supermemory-search (plugin=openclaw-supermemory, source=.../@supermemory/openclaw-supermemory/dist/index.js)
[plugins] plugin must declare contracts.tools for: supermemory-save (...)
[plugins] plugin must declare contracts.tools for: supermemory-forget (...)
[plugins] plugin must declare contracts.tools for: supermemory-profile (...)

Environment

  • @supermemory/openclaw-supermemory 2.1.16 (also present on main, index.ts L79–L82)
  • OpenClaw 2026.9.2 and 2026.9.3, npm global install, Linux x64, Node 26.8.1
  • Plugin otherwise works: initializes, supermemory_search/store/forget/profile (underscore names) are available.

Cause

openclaw.plugin.json declares:

"contracts": { "tools": ["supermemory_search", "supermemory_store", "supermemory_forget", "supermemory_profile"] }

but index.ts also registers the same four tools a second time under hyphenated names:

registerSearchTool(api, client, cfg, "supermemory-search")
registerStoreTool(api, client, cfg, "supermemory-save")
registerForgetTool(api, client, cfg, "supermemory-forget")
registerProfileTool(api, client, cfg, "supermemory-profile")

OpenClaw's registerTool path runs findUndeclaredPluginToolNames() against contracts.tools and reports each undeclared name via reportRegistrationError (surfaced as "plugin activation errors" in openclaw update verification and in doctor).

Fix options

  1. Drop the four hyphenated registrations (they duplicate the underscore tools; the hyphen forms are not valid tool names for several model providers anyway). This is what I applied locally and it removes all four errors with no loss of functionality.
  2. Or, if backward compatibility matters, add the four hyphenated names to contracts.tools — but that doubles the tool surface exposed to the model.

Happy to open a PR for option 1 if you prefer that direction.

Activity

  1. MaheshtheDev commented on Sep 9, 2026

    @MaheshtheDev
    Member

    Thanks for the detailed report, the diagnosis is spot on. The four hyphenated aliases have been registering without being declared in contracts.tools since 2.1.13, and 2026.9.x now rejects them.

    We went with a variation of your option 2. The hyphenated names are our standard across the other Supermemory plugins (Codex, Claude), so rather than dropping them we declared them in the manifest alongside the snake_case names. The snake_case names are now deprecated in the README and will be removed in 3.0, which gets the tool surface back down to four.

    Draft PR: #64

    One small note on your option 1 rationale: hyphens are accepted in tool names by OpenAI, Anthropic and Gemini, so that was not a constraint here.

    Appreciate you offering the PR, and thanks for tracing it to the exact registration lines.

  2. added a commit that references this issue on Sep 9, 2026
    92a59bc
  3. added a commit that references this issue on Sep 13, 2026
    b70d6ee
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions