openclaw - ✅(Solved) Fix [Bug]: Eligible configured skill is usable at runtime but missing from session available_skills [2 pull requests, 1 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#60716Fetched 2026-04-08 02:48:01
View on GitHub
Comments
0
Participants
1
Timeline
7
Reactions
0
Participants
Timeline (top)
cross-referenced ×2referenced ×2closed ×1labeled ×1

notion is configured for the agent, exists on disk, and shows as eligible in Control UI. It is also usable at runtime — I successfully read and wrote a Notion page. However, it does not appear in the session-visible available_skills list. This makes the assistant assume the skill is unavailable when it actually works.

Root Cause

notion is configured for the agent, exists on disk, and shows as eligible in Control UI. It is also usable at runtime — I successfully read and wrote a Notion page. However, it does not appear in the session-visible available_skills list. This makes the assistant assume the skill is unavailable when it actually works.

Fix Action

Fixed

PR fix notes

PR #60852: fix(skills): unify runtime inclusion and available_skills exposure policy

Description (problem / solution / changelog)

Summary

Closes #60716.

This fixes a semantic split in the skills pipeline where a skill could remain runtime-eligible/configured but disappear from the session <available_skills> prompt due to a later formatter-layer filter.

Before this change:

  • runtime inclusion was decided via shouldIncludeSkill() in src/agents/skills/config.ts
  • prompt visibility was re-decided later in two places:
    • resolveWorkspaceSkillPromptState() in src/agents/skills/workspace.ts
    • formatSkillsForPrompt() in src/agents/skills/skill-contract.ts

That layering allowed one concrete inconsistent state:

  • shouldIncludeSkill(...) === true
  • but the skill was still omitted from <available_skills> because disable-model-invocation was applied again later while building/rendering the prompt

Root cause

The problem came from prompt visibility being controlled in a different layer than runtime inclusion.

More specifically:

  • src/agents/skills/config.ts decided whether a skill was included from the runtime/config/eligibility perspective
  • src/agents/skills/workspace.ts then removed entry.invocation?.disableModelInvocation === true entries before prompt generation
  • src/agents/skills/skill-contract.ts also treated formatter input as visibility-policy input instead of pure render input

So the bug was not just "a bad filter" — it was that business visibility policy was split across multiple layers.

What changed

  • introduced explicit SkillExposure on SkillEntry
  • moved prompt visibility policy upstream into workspace skill resolution
  • made prompt formatters render the provided skill set instead of re-applying business policy
  • updated tests to validate aligned behavior across runtime inclusion and available_skills generation

Changed files

  • src/agents/skills.available-skills-visibility.test.ts (added, +35/-0)
  • src/agents/skills.issue-60716-design.test.ts (added, +37/-0)
  • src/agents/skills.issue-60716-proof.test.ts (added, +42/-0)
  • src/agents/skills.resolveskillspromptforrun.test.ts (modified, +22/-0)
  • src/agents/skills/compact-format.test.ts (modified, +19/-6)
  • src/agents/skills/skill-contract.ts (modified, +2/-3)
  • src/agents/skills/types.ts (modified, +7/-0)
  • src/agents/skills/workspace.ts (modified, +20/-7)

PR #60853: fix(skills): rebuild snapshot when skills config version changes

Description (problem / solution / changelog)

Problem

Skills configured or added via the Control UI appear as eligible in the UI (skills.status is called fresh each time) but are missing from available_skills in the session system prompt. The assistant then assumes the skill is unavailable even though it works at runtime.

Reported in #60716.

Root Cause

In agent-command.ts, the condition for rebuilding the skills snapshot was:

const needsSkillsSnapshot = isNewSession || !sessionEntry?.skillsSnapshot;

This misses the case where:

  1. A session already exists with a cached skillsSnapshot
  2. The user adds/configures a skill (bumping skillsSnapshotVersion on disk)
  3. The next turn in the same session still uses the stale snapshot because isNewSession is false and skillsSnapshot is truthy

The version number was computed but never compared against the persisted snapshot's version.

Fix

Add a version-mismatch guard to the rebuild condition:

const needsSkillsSnapshot =
  isNewSession ||
  !sessionEntry?.skillsSnapshot ||
  (skillsSnapshotVersion !== undefined &&
    sessionEntry.skillsSnapshot.version !== skillsSnapshotVersion);

When the config version advances (new skill installed, skill enabled/disabled), the cached snapshot is treated as stale and rebuilt on the next agent turn — without requiring the user to start a /new session.

Fixes #60716

Changed files

  • src/agents/agent-command.ts (modified, +5/-1)
RAW_BUFFERClick to expand / collapse

Bug type

Behavior bug (incorrect output/state without crash)

Beta release blocker

No

Summary

notion is configured for the agent, exists on disk, and shows as eligible in Control UI. It is also usable at runtime — I successfully read and wrote a Notion page. However, it does not appear in the session-visible available_skills list. This makes the assistant assume the skill is unavailable when it actually works.

Steps to reproduce

  1. Configure notion for an agent and make sure Control UI shows it as eligible.
  2. Start a new assistant session and inspect the session-visible available_skills.
  3. Observe that notion is missing from available_skills even though it is usable at runtime.

Expected behavior

eligible agent-enabled skills should appear in available_skills.

Actual behavior

it does not appear in the session-visible available_skills list

OpenClaw version

2026.4.2

Operating system

macOS 15.7.4

Install method

No response

Model

gpt-5.4

Provider / routing chain

webchat -> local OpenClaw gateway -> agent runtime (gpt-5.4)

Additional provider/model setup details

No response

Logs, screenshots, and evidence

Impact and severity

No response

Additional information

No response

extent analysis

TL;DR

The issue can be resolved by ensuring that the notion skill is properly registered and synchronized with the available_skills list in the agent runtime.

Guidance

  • Verify that the notion skill is correctly configured and enabled for the agent in the Control UI.
  • Check the agent runtime logs for any errors or warnings related to skill registration or synchronization.
  • Inspect the available_skills list in the agent runtime to ensure that it is being updated correctly.
  • Test the notion skill in a new assistant session to confirm that it is usable and appears in the available_skills list.

Example

No code snippet is provided as the issue does not contain sufficient information about the codebase.

Notes

The issue may be related to a synchronization issue between the Control UI and the agent runtime. Further investigation is needed to determine the root cause.

Recommendation

Apply workaround: Verify that the notion skill is properly registered and synchronized with the available_skills list in the agent runtime, and test the skill in a new assistant session to confirm that it is usable. This is recommended because the issue appears to be related to a synchronization issue rather than a version-specific bug.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

FAQ

Expected behavior

eligible agent-enabled skills should appear in available_skills.

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

openclaw - ✅(Solved) Fix [Bug]: Eligible configured skill is usable at runtime but missing from session available_skills [2 pull requests, 1 participants]