Skip to content

Skill config requirements with object format show "[object Object]" instead of proper values #79488

@sebrinass

Description

@sebrinass

Bug type

CLI / Skill parsing

Summary

When a SKILL.md defines requires.config using the object format (with path, access, purpose properties), the openclaw skills info command incorrectly serializes the config requirement as "[object Object]", and the skill is marked as eligible: false / blocked even though the config file exists and is readable.

Reproduction

  1. Create or install any skill with a requires.config entry in object format:
---
name: example-skill
metadata:
  openclaw:
    requires:
      config:
        - path: "~/.openclaw/openclaw.json"
          access: "read"
          purpose: "读取插件配置路径"
---
  1. Run openclaw skills info example-skill --agent main --json

Actual behavior

{
  "name": "example-skill",
  "eligible": false,
  "requirements": {
    "config": ["[object Object]"]
  },
  "missing": {
    "config": ["[object Object]"]
  },
  "configChecks": [
    {
      "path": "[object Object]",
      "satisfied": false
    }
  ]
}

The skill shows as blocked in the UI / CLI.

Expected behavior

The config requirement should be parsed as an object with path, access, and purpose properties, and the path check should validate correctly against the filesystem.

Root cause analysis

Looking at the source code:

  1. src/shared/frontmatter.tsresolveOpenClawManifestRequires() calls normalizeStringList(requiresRaw.config)
  2. src/shared/string-normalization.tsnormalizeStringEntries() uses String(entry) which converts objects to "[object Object]"
  3. src/shared/requirements.tsRequirements.config is typed as string[], not supporting objects

The config field in requires supports object format per the documentation/schema, but the normalization and type definitions only handle string values.

Environment

  • OpenClaw version: 2026.5.7 (eeef486)
  • OS: Ubuntu 26.04 LTS
  • Install mode: npm global

Workaround

None known. The skill still functions correctly at runtime (the plugin loads via npm), but the status display and eligibility check are broken.

Related

  • openclaw doctor also reports this skill as having missing requirements due to the same bug.

Metadata

Metadata

Assignees

No one assigned

    Labels

    staleMarked as stale due to inactivity

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions