feat(skills): diagnose skill_workshop hidden by tool policy#100654
Merged
Conversation
Workshop can be enabled and auto-capturing while tools.profile hides the skill_workshop tool; every inspection surface looked healthy. plugins inspect and openclaw doctor now name the excluding policy layer (global/ agent/provider profile, allowlist, denylist) and the exact alsoAllow grant to add, via a shared resolveSkillWorkshopToolPolicyAvailability helper that /learn's guard now reuses instead of composing policy itself. Diagnosis only; no policy behavior change.
github-actions Bot
pushed a commit
to Desicool/openclaw
that referenced
this pull request
Jul 6, 2026
…#100654) * feat(skills): diagnose skill_workshop hidden by tool policy (openclaw#87570) Workshop can be enabled and auto-capturing while tools.profile hides the skill_workshop tool; every inspection surface looked healthy. plugins inspect and openclaw doctor now name the excluding policy layer (global/ agent/provider profile, allowlist, denylist) and the exact alsoAllow grant to add, via a shared resolveSkillWorkshopToolPolicyAvailability helper that /learn's guard now reuses instead of composing policy itself. Diagnosis only; no policy behavior change. * ci: retrigger
giodl73-repo
pushed a commit
to giodl73-repo/openclaw
that referenced
this pull request
Jul 8, 2026
…#100654) * feat(skills): diagnose skill_workshop hidden by tool policy (openclaw#87570) Workshop can be enabled and auto-capturing while tools.profile hides the skill_workshop tool; every inspection surface looked healthy. plugins inspect and openclaw doctor now name the excluding policy layer (global/ agent/provider profile, allowlist, denylist) and the exact alsoAllow grant to add, via a shared resolveSkillWorkshopToolPolicyAvailability helper that /learn's guard now reuses instead of composing policy itself. Diagnosis only; no policy behavior change. * ci: retrigger
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What Problem This Solves
Skill Workshop can be enabled, loaded, and auto-capturing proposals while the
skill_workshoptool is silently hidden from agent sessions because the effective tool policy excludes it (e.g.tools.profile: "coding"withoutgroup:plugins). Every inspection surface (openclaw plugins list --enabled,openclaw plugins inspect skill-workshop) reported the plugin healthy, so operators debugged this as a plugin registration bug instead of a one-line policy grant.Closes #87570.
Why This Change Was Made
src/skills/workshop/tool-policy-diagnostic.ts):resolveSkillWorkshopToolPolicyAvailabilityruns the real effective-tool-policy pipeline with a lightweightskill_workshopprobe (constructing the actual tool has storage/config side effects irrelevant to policy resolution) and, when the tool is excluded, attributes the excluding layer precisely — global/agent/provider profile, allowlist, denylist — including shadowing (an agent-levelalsoAllowrecommendation when agent config owns the effective policy, not a global one that would be ignored).openclaw plugins inspect skill-workshopnow prints the excluding policy source and the exact grant to add (e.g.tools.profile: "messaging" does not include "skill_workshop"/fix: Add tools.alsoAllow: ["skill_workshop"]).openclaw doctorgainscore/doctor/skill-workshop-tool-policyin the real doctor contribution path (the interrupted first pass registered it constructor-only, whichdoctor --lintflagged as an unknown check — fixed and covered). The wiring refactor also deduplicates two pre-existing copy-paste health runners into onerunCoreHealthFindingNotehelper./learnnow reuses the shared resolver instead of composing tool policy itself — the follow-up flagged in the /learn PR review, landed here.applyToolPolicyPipelineaccepts an optionalonFiltercallback (ToolPolicyFilterEvent) so diagnostics can see which step excluded the tool; no policy behavior change.User Impact
Operators hitting the "plugin healthy but tool missing" trap get an actionable answer at both surfaces they actually check, naming the excluding config layer and the exact
alsoAllowgrant. Diagnosis only — no tool-policy behavior, defaults, or profiles change. Docs: troubleshooting note in skill-workshop.Evidence
tool-policy-diagnostic.test.ts,doctor-core-checks.test.ts,doctor-health-contributions.test.ts,plugins-cli.list.test.ts,commands-learn.test.ts(139 tests in the implementation pass, re-run on the final tree).check:changedpassed; core + core-test typechecks passed;git diff --checkclean.doctor --lint, coding-profile negative case, disabled-autonomy negative case, and shadowed-grant case all verified against a real config.alsoAllowmisattribution (fixed); final round clean on the full branch diff.feat—plugins inspectanddoctornow explain when tool policy hides the Skill Workshop tool and name the exact grant to add.