diff --git a/packages/opencode/src/cli/cmd/tui/context/sync.tsx b/packages/opencode/src/cli/cmd/tui/context/sync.tsx
index 9f8a384f777..f0121f5951d 100644
--- a/packages/opencode/src/cli/cmd/tui/context/sync.tsx
+++ b/packages/opencode/src/cli/cmd/tui/context/sync.tsx
@@ -152,6 +152,13 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
case "permission.asked": {
const request = event.properties
+ if (kv.get("yolo_mode", false)) {
+ void sdk.client.permission.reply({
+ requestID: request.id,
+ reply: "once",
+ })
+ break
+ }
const requests = store.permission[request.sessionID]
if (!requests) {
setStore("permission", request.sessionID, [request])
diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/footer.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/footer.tsx
index c3a96254e98..dd54367b6b6 100644
--- a/packages/opencode/src/cli/cmd/tui/routes/session/footer.tsx
+++ b/packages/opencode/src/cli/cmd/tui/routes/session/footer.tsx
@@ -5,11 +5,13 @@ import { useDirectory } from "../../context/directory"
import { useConnected } from "../../component/use-connected"
import { createStore } from "solid-js/store"
import { useRoute } from "../../context/route"
+import { useKV } from "../../context/kv"
export function Footer() {
const { theme } = useTheme()
const sync = useSync()
const route = useRoute()
+ const kv = useKV()
const mcp = createMemo(() => Object.values(sync.data.mcp).filter((x) => x.status === "connected").length)
const mcpError = createMemo(() => Object.values(sync.data.mcp).some((x) => x.status === "failed"))
const lsp = createMemo(() => Object.keys(sync.data.lsp))
@@ -82,6 +84,9 @@ export function Footer() {
{mcp()} MCP
+
+ YOLO
+
/status
diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx
index ce651fdbe46..44b14edff9d 100644
--- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx
+++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx
@@ -134,6 +134,7 @@ const sessionBindingCommands = [
"session.toggle.actions",
"session.toggle.scrollbar",
"session.toggle.generic_tool_output",
+ "session.toggle.yolo",
"session.page.up",
"session.page.down",
"session.line.up",
@@ -226,6 +227,7 @@ export function Session() {
const [diffWrapMode] = kv.signal<"word" | "none">("diff_wrap_mode", "word")
const [_animationsEnabled, _setAnimationsEnabled] = kv.signal("animations_enabled", true)
const [showGenericToolOutput, setShowGenericToolOutput] = kv.signal("generic_tool_output_visibility", false)
+ const [yoloMode, setYoloMode] = kv.signal("yolo_mode", false)
const wide = createMemo(() => dimensions().width > 120)
const sidebarVisible = createMemo(() => {
@@ -730,6 +732,23 @@ export function Session() {
dialog.clear()
},
},
+ {
+ title: yoloMode() ? "Disable YOLO mode" : "Enable YOLO mode",
+ value: "session.toggle.yolo",
+ category: "Session",
+ slash: {
+ name: "yolo",
+ },
+ run: () => {
+ const next = !yoloMode()
+ setYoloMode(next)
+ toast.show({
+ message: next ? "YOLO mode enabled — permissions will be auto-approved" : "YOLO mode disabled",
+ variant: next ? "warning" : "success",
+ })
+ dialog.clear()
+ },
+ },
{
title: "Page up",
value: "session.page.up",
diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx
index 0f9214092eb..45aa3812696 100644
--- a/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx
+++ b/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx
@@ -5,6 +5,7 @@ import { useTheme } from "../../context/theme"
import { useTuiConfig } from "../../context/tui-config"
import { InstallationChannel, InstallationVersion } from "@opencode-ai/core/installation/version"
import { TuiPluginRuntime } from "@/cli/cmd/tui/plugin/runtime"
+import { useKV } from "../../context/kv"
import { getScrollAcceleration } from "../../util/scroll"
import { WorkspaceLabel } from "../../component/workspace-label"
@@ -14,6 +15,7 @@ export function Sidebar(props: { sessionID: string; overlay?: boolean }) {
const sync = useSync()
const { theme } = useTheme()
const tuiConfig = useTuiConfig()
+ const kv = useKV()
const session = createMemo(() => sync.session.get(props.sessionID))
const workspace = () => {
const workspaceID = session()?.workspaceID
@@ -85,7 +87,12 @@ export function Sidebar(props: { sessionID: string; overlay?: boolean }) {
-
+
+
+
+ YOLO MODE
+
+
• Open