From 914bbdfd0575e40554c39c6691e4264a63109953 Mon Sep 17 00:00:00 2001 From: Josh Holmer Date: Tue, 5 May 2026 12:21:48 -0400 Subject: [PATCH] fix(core): restore Skill tool as allow by default (#9924) --- .changeset/skill-tool-default-agents.md | 5 +++ packages/opencode/src/kilocode/agent/index.ts | 4 ++ .../kilocode/agent-skill-permissions.test.ts | 38 +++++++++++++++++++ 3 files changed, 47 insertions(+) create mode 100644 .changeset/skill-tool-default-agents.md create mode 100644 packages/opencode/test/kilocode/agent-skill-permissions.test.ts diff --git a/.changeset/skill-tool-default-agents.md b/.changeset/skill-tool-default-agents.md new file mode 100644 index 0000000000..5608e935f9 --- /dev/null +++ b/.changeset/skill-tool-default-agents.md @@ -0,0 +1,5 @@ +--- +"@kilocode/cli": patch +--- + +Restore Skill tool access for Plan, Ask, Explore, and other non-system agents so skill workflows are available by default. diff --git a/packages/opencode/src/kilocode/agent/index.ts b/packages/opencode/src/kilocode/agent/index.ts index c6d8f6bb0b..8fe3caeb62 100644 --- a/packages/opencode/src/kilocode/agent/index.ts +++ b/packages/opencode/src/kilocode/agent/index.ts @@ -142,6 +142,7 @@ function askGuard(mcp: Record = {}) { grep: "allow", glob: "allow", list: "allow", + skill: "allow", question: "allow", webfetch: "allow", websearch: "allow", @@ -160,6 +161,7 @@ function planGuard(mcp: Record = {}) { "*": "deny", question: "allow", suggest: "allow", + skill: "allow", plan_exit: "allow", bash: readOnlyBash, read: { @@ -317,6 +319,7 @@ export function patchAgents( glob: "allow", list: "allow", bash: "allow", + skill: "allow", webfetch: "allow", websearch: "allow", codesearch: "allow", @@ -371,6 +374,7 @@ export function patchAgents( glob: "allow", list: "allow", question: "allow", + skill: "allow", suggest: "allow", // kilocode_change task: "allow", todoread: "allow", diff --git a/packages/opencode/test/kilocode/agent-skill-permissions.test.ts b/packages/opencode/test/kilocode/agent-skill-permissions.test.ts new file mode 100644 index 0000000000..9742d17760 --- /dev/null +++ b/packages/opencode/test/kilocode/agent-skill-permissions.test.ts @@ -0,0 +1,38 @@ +// kilocode_change - new file +import { afterEach, test, expect } from "bun:test" +import { tmpdir } from "../fixture/fixture" +import { Instance } from "../../src/project/instance" +import { Agent } from "../../src/agent/agent" +import { Permission } from "../../src/permission" + +afterEach(async () => { + await Instance.disposeAll() +}) + +function action(name: string, ruleset: Permission.Ruleset) { + return Permission.evaluate("skill", name, ruleset).action +} + +test("skill tool available for non-system native agents and denied for system agents", async () => { + await using tmp = await tmpdir() + await Instance.provide({ + directory: tmp.path, + fn: async () => { + const allow = ["code", "plan", "debug", "orchestrator", "ask", "general", "explore"] + for (const name of allow) { + const agent = await Agent.get(name) + expect(agent).toBeDefined() + expect(action("using-superpowers", agent!.permission)).toBe("allow") + expect(Permission.disabled(["skill"], agent!.permission).has("skill")).toBe(false) + } + + const deny = ["compaction", "title", "summary"] + for (const name of deny) { + const agent = await Agent.get(name) + expect(agent).toBeDefined() + expect(action("using-superpowers", agent!.permission)).toBe("deny") + expect(Permission.disabled(["skill"], agent!.permission).has("skill")).toBe(true) + } + }, + }) +})