Skip to content

User-created skills land in Managed/Other Platforms, never in Custom Skills (directory mismatch) #59

Description

@yikkuro

Summary

When a user creates a new skill (e.g. by asking the agent / using the skill-creator flow), the skill is written to the managed skills directory (~/.openclaw/skills), not the custom skills directory (~/.agents/skills). As a result:

  • The new skill appears under Managed Skills (in the "Other Platforms" sub-group), never under the "Custom Skills" section.
  • The "Custom Skills" section stays empty ("No custom skills") because nothing in the normal create flow ever writes to ~/.agents/skills.

This makes the "Custom Skills" section effectively pointless — the natural way to author a skill never populates it.

Steps to reproduce

  1. Ask the agent in chat to create a new skill (e.g. "create a skill called test-skill").
  2. Open Settings → Skills and scroll to the bottom.
  3. Observe the new skill (test-skill) shows under Managed Skills → Other Platforms, while Custom Skills (0) still says "No custom skills".

Expected

A user-created skill should appear under Custom Skills (that's the section's whole purpose), or the two concepts (custom dir vs. where skills are actually created) should be reconciled so the UI is consistent.

Actual

  • test-skill was written to C:\Users\<user>\.openclaw\skills\test-skill\SKILL.md (managed dir).
  • It renders under Managed Skills → Other Platforms (1).
  • Custom Skills (0) remains empty.

Root cause / technical detail

Two separate directories back these two sections (desktop/src/main.ts, skills:list):

const customDir  = path.join(homeDir, ".agents", "skills");   // ← "Custom Skills" reads THIS
const managedDir = path.join(homeDir, ".openclaw", "skills");  // ← skills actually get created HERE
...
const custom       = scanSkills(customDir, "custom");
const managedOnDisk = scanSkills(managedDir, "managed");

The create/skill-creator flow writes to ~/.openclaw/skills (managed), but the Custom Skills UI only reads ~/.agents/skills (custom) — a directory that is never created or populated by the app. So user-authored skills can never land in the Custom section.

Additionally, the created SKILL.md has no platform: field:

---
name: test-skill
description: "Empty test skill for UI testing. Use when testing MicroClaw's custom skill interface."
---

Because it isn't in the managed catalog and has no windows platform, the list logic drops it into the "Other Platforms" managed sub-group (otherPlatformManagedSkills = managed skills whose platform doesn't include windows), which is misleading for a locally-authored skill.

Suggested fix

  • Point the create/skill-creator flow at the custom dir (~/.agents/skills) so authored skills appear under Custom Skills, or
  • Have the Custom Skills section read from the same directory skills are actually created in, or
  • Reconcile the "custom" vs "managed" concepts so user-created skills are surfaced consistently (and not mislabeled "Other Platforms" due to missing platform metadata).

Screenshots

test-skill appears under Other Platforms, while Custom Skills is empty:

Other Platforms vs Custom Skills

Full Skills page (Managed Skills → Other Platforms → Custom Skills):

Skills page bottom

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Fields

    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