diff --git a/packages/opencode/src/cli/cmd/tui/app.tsx b/packages/opencode/src/cli/cmd/tui/app.tsx
index 4b177e292cf..2b0fda4d2bb 100644
--- a/packages/opencode/src/cli/cmd/tui/app.tsx
+++ b/packages/opencode/src/cli/cmd/tui/app.tsx
@@ -296,6 +296,18 @@ function App() {
dialog.replace(() => )
},
},
+ {
+ title: "Switch to last session",
+ value: "session.last",
+ keybind: "session_last",
+ category: "Session",
+ suggested: !!route.previous,
+ onSelect: () => {
+ if (!route.previous) return
+ route.navigate({ type: "session", sessionID: route.previous })
+ dialog.clear()
+ },
+ },
{
title: "New session",
suggested: route.data.type === "session",
diff --git a/packages/opencode/src/cli/cmd/tui/context/route.tsx b/packages/opencode/src/cli/cmd/tui/context/route.tsx
index 358461921b2..8b43accc2c0 100644
--- a/packages/opencode/src/cli/cmd/tui/context/route.tsx
+++ b/packages/opencode/src/cli/cmd/tui/context/route.tsx
@@ -26,12 +26,18 @@ export const { use: useRoute, provider: RouteProvider } = createSimpleContext({
},
)
+ let previous: string | undefined
+
return {
get data() {
return store
},
+ get previous() {
+ return previous
+ },
navigate(route: Route) {
console.log("navigate", route)
+ if (store.type === "session") previous = store.sessionID
setStore(route)
},
}
diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts
index ddb3af4b0a8..a752ce79dbc 100644
--- a/packages/opencode/src/config/config.ts
+++ b/packages/opencode/src/config/config.ts
@@ -640,6 +640,7 @@ export namespace Config {
session_export: z.string().optional().default("x").describe("Export session to editor"),
session_new: z.string().optional().default("n").describe("Create a new session"),
session_list: z.string().optional().default("l").describe("List all sessions"),
+ session_last: z.string().optional().default("o").describe("Switch to last session"),
session_timeline: z.string().optional().default("g").describe("Show session timeline"),
session_fork: z.string().optional().default("none").describe("Fork session from message"),
session_rename: z.string().optional().default("ctrl+r").describe("Rename session"),
diff --git a/packages/sdk/js/src/v2/gen/types.gen.ts b/packages/sdk/js/src/v2/gen/types.gen.ts
index b7e72fbad8f..e7433646bf1 100644
--- a/packages/sdk/js/src/v2/gen/types.gen.ts
+++ b/packages/sdk/js/src/v2/gen/types.gen.ts
@@ -970,6 +970,10 @@ export type KeybindsConfig = {
* List all sessions
*/
session_list?: string
+ /**
+ * Switch to last session
+ */
+ session_last?: string
/**
* Show session timeline
*/
diff --git a/packages/web/src/content/docs/keybinds.mdx b/packages/web/src/content/docs/keybinds.mdx
index 51508a4f864..f2cdeb8031c 100644
--- a/packages/web/src/content/docs/keybinds.mdx
+++ b/packages/web/src/content/docs/keybinds.mdx
@@ -21,6 +21,7 @@ OpenCode has a list of keybinds that you can customize through the OpenCode conf
"session_export": "x",
"session_new": "n",
"session_list": "l",
+ "session_last": "o",
"session_timeline": "g",
"session_fork": "none",
"session_rename": "none",