Skip to content

OpenClaw plugin exposes skills that call tools it doesn't register #1728

Open

Description

@phernandez

Problem

The shared skills/memory-* set is written against the full Basic Memory MCP tool surface. The OpenClaw plugin registers a narrower one, so most skills lead OpenClaw agents into rejected or unavailable tool calls.

OpenClaw's registered tools (integrations/openclaw/tools/) lack:

  • recent_activity and list_directory (not registered at all)
  • build_context.timeframe
  • search_notes.page_size; search_notes.query is required
  • write_note.directory; OpenClaw requires folder

A grep of each SKILL.md for those calls finds 12 of 16 skills using at least one. Only memory-comark, memory-defrag, memory-lifecycle and memory-ci-capture are clean. Skills OpenClaw already exposes are affected, including memory-ingest, memory-reflect, memory-metadata-search and memory-literary-analysis.

Two skill lists that disagree

  • openclaw.plugin.json enumerates the skills OpenClaw exposes. It omits memory-capture, memory-ci-capture, memory-continue and memory-curate, with no recorded reason.
  • scripts/fetch-skills.ts generates skills/manifest.json from every memory-* directory, and commands/skills.ts::registerSkillCommands registers a slash command for each entry. So /capture, /continue and /curate are available anyway.

Nothing checks either list against skills/.

For the plugin redo

  • Decide the plugin's tool surface: match the MCP server's tools and parameters, or keep it narrow and ship OpenClaw-specific skill variants or a filtered set.
  • Drive the manifest and the slash commands from one source.
  • Add a package check that fails when a skill is exposed but uses calls OpenClaw doesn't register, or when the lists drift.

Context: found during #1715 and the closed #1727, which tried an exclusion list in scripts/validate_skills.py. Codex review showed the mismatch is broader than four skills.

Activity

  1. claude commented on Oct 10, 2026

    @claude
    Contributor

    Claude finished @phernandez's task in 15s —— View job


    Triage

    • Type: bug (shipped skills direct OpenClaw agents to tools or parameters the plugin doesn't register). The fix also involves a design decision.
    • Component: OpenClaw plugin (integrations/openclaw) and the shared skills/ set. This is not Cloud-related, so I didn't apply the cloud label.
    • Priority: Medium. Most of the shared skills (12 of 16) can lead OpenClaw agents into rejected tool calls. Nothing breaks and no data is at risk.
    • Complexity: Medium to complex. The tool-surface decision (match the MCP server, or keep the plugin narrow and ship OpenClaw-specific skill variants) affects everything else. The remaining work follows from it: a single source for the manifest and slash commands, plus a package check for skill/tool/list drift.
    • Duplicates: I searched and found none. docs(skills): add memory-comark for ::bm-* components in notes #1715 and the closed fix(integrations): check OpenClaw manifest against skills, with explicit exclusions #1727 are related context, not duplicates.

    Suggested order:

    1. Decide the tool surface. This is a product call for the maintainers.
    2. Derive openclaw.plugin.json and registerSkillCommands from one source, so the two skill lists can't disagree.
    3. Add a check to just package-check-openclaw that fails when an exposed skill calls an unregistered tool or parameter, or when the lists drift from skills/.

    I haven't made any code changes. This was triage only.

  2. phernandez commented on Oct 14, 2026

    @phernandez
    MemberAuthor

    Update from #1767: the rewritten memory-defrag now audits with list_directory and recent_activity, so it joins the affected set (it was one of the four clean skills above). memory-reflect now also uses list_directory(sort="title_desc") to find its last checkpoint, along with recent_activity. Both stay in openclaw.plugin.json for now, so OpenClaw's /reflect and /defrag will hit unregistered tools until the plugin redo here lands.

    #1767 also adds memory-okf, which needs a shell with the bm CLI. It's listed in the OpenClaw manifest because validate_skills.py requires every distributed skill there unless it's in may_omit, the exclusion pattern this issue says should become a real per-tool check.

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

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions