diff --git a/packages/opencode/src/cli/cmd/serve.ts b/packages/opencode/src/cli/cmd/serve.ts index bee2c8f711..ad25494a54 100644 --- a/packages/opencode/src/cli/cmd/serve.ts +++ b/packages/opencode/src/cli/cmd/serve.ts @@ -1,6 +1,6 @@ import { Server } from "../../server/server" import { cmd } from "./cmd" -import { withNetworkOptions, resolveNetworkOptions } from "../network" +import { withNetworkOptions, resolveNetworkOptions, applyYoloMode } from "../network" import { Flag } from "../../flag/flag" export const ServeCommand = cmd({ @@ -8,6 +8,7 @@ export const ServeCommand = cmd({ builder: (yargs) => withNetworkOptions(yargs), describe: "starts a headless opencode server", handler: async (args) => { + if (args.yolo) applyYoloMode() if (!Flag.OPENCODE_SERVER_PASSWORD) { console.log("Warning: OPENCODE_SERVER_PASSWORD is not set; server is unsecured.") } diff --git a/packages/opencode/src/cli/cmd/web.ts b/packages/opencode/src/cli/cmd/web.ts index 0fe056f21f..d89c61c29e 100644 --- a/packages/opencode/src/cli/cmd/web.ts +++ b/packages/opencode/src/cli/cmd/web.ts @@ -1,7 +1,7 @@ import { Server } from "../../server/server" import { UI } from "../ui" import { cmd } from "./cmd" -import { withNetworkOptions, resolveNetworkOptions } from "../network" +import { withNetworkOptions, resolveNetworkOptions, applyYoloMode } from "../network" import { Flag } from "../../flag/flag" import open from "open" import { networkInterfaces } from "os" @@ -33,6 +33,7 @@ export const WebCommand = cmd({ builder: (yargs) => withNetworkOptions(yargs), describe: "start opencode server and open web interface", handler: async (args) => { + if (args.yolo) applyYoloMode() if (!Flag.OPENCODE_SERVER_PASSWORD) { UI.println(UI.Style.TEXT_WARNING_BOLD + "! " + "OPENCODE_SERVER_PASSWORD is not set; server is unsecured.") } diff --git a/packages/opencode/src/cli/network.ts b/packages/opencode/src/cli/network.ts index dd09e1689f..44fdf78de9 100644 --- a/packages/opencode/src/cli/network.ts +++ b/packages/opencode/src/cli/network.ts @@ -28,6 +28,11 @@ const options = { describe: "additional domains to allow for CORS", default: [] as string[], }, + yolo: { + type: "boolean" as const, + describe: "auto-approve all permissions (YOLO mode)", + default: false, + }, } export type NetworkOptions = InferredOptionTypes @@ -58,3 +63,25 @@ export async function resolveNetworkOptions(args: NetworkOptions) { return { hostname, port, mdns, mdnsDomain, cors } } + +export function applyYoloMode() { + process.env.OPENCODE_PERMISSION = JSON.stringify({ + bash: "allow", + edit: "allow", + read: { "*": "allow" }, + glob: { "*": "allow" }, + grep: { "*": "allow" }, + list: { "*": "allow" }, + task: "allow", + external_directory: { "*": "allow" }, + todowrite: "allow", + todoread: "allow", + question: "allow", + webfetch: "allow", + websearch: "allow", + codesearch: "allow", + lsp: { "*": "allow" }, + doom_loop: "allow", + skill: { "*": "allow" }, + }) +}