Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions packages/extension/src/opencode_config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -400,6 +400,11 @@ export function buildOpencodeConfigContent(
permission: {
bash: "allow",
edit: "allow",
// The staged skill set is already curated by us (surface: product +
// entitlement filter), so the skill tool's default per-name "ask" adds
// friction without a security boundary — and hangs headless sessions,
// same class as the external_directory default documented above.
skill: "allow",
external_directory: {
[templatePath]: "allow", // exact template file the agent reads
[`${templatesDir}/**`]: "allow", // (belt-and-suspenders for the dir)
Expand Down
3 changes: 3 additions & 0 deletions packages/extension/test/opencode_config.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@ describe("buildOpencodeConfigContent", () => {
expect(ed["/home/u/.amico/runs/default/**"]).toBe("allow");
expect(cfg.permission.bash).toBe("allow"); // runs amico-run (compound launch)
expect(cfg.permission.edit).toBe("allow"); // fills the FILL-IN block
// The staged skill set is curated by us — a per-name "ask" on the skill
// tool is friction without a boundary, and hangs headless sessions.
expect(cfg.permission.skill).toBe("allow");
expect(cfg.permission.webfetch).toBeUndefined(); // unused by the solve flow — dropped
});
it("registers the amicode_* plugin by ABSOLUTE default path — and the file actually exists", () => {
Expand Down
Loading