diff --git a/.opencode/plugins/tui-smoke.tsx b/.opencode/plugins/tui-smoke.tsx
new file mode 100644
index 0000000000..dba51f0840
--- /dev/null
+++ b/.opencode/plugins/tui-smoke.tsx
@@ -0,0 +1,33 @@
+/** @jsxImportSource @opentui/solid */
+import mytheme from "../themes/mytheme.json" with { type: "json" }
+
+const slot = (label) => ({
+ id: "workspace-smoke",
+ slots: {
+ home_hint() {
+ return [plugin:{label}]
+ },
+ home_footer() {
+ return theme:workspace-plugin-smoke
+ },
+ session_footer(_ctx, props) {
+ return session:{props.session_id.slice(0, 8)}
+ },
+ },
+})
+
+const themes = {
+ "workspace-plugin-smoke": mytheme,
+}
+
+const tui = async (input, options) => {
+ if (options?.enabled === false) return
+ const label = typeof options?.label === "string" ? options.label : "smoke"
+ input.slots.register(slot(label))
+ console.error(`[workspace-smoke] tui plugin initialized (${label})`)
+}
+
+export default {
+ themes,
+ tui,
+}
diff --git a/.opencode/tui.json b/.opencode/tui.json
new file mode 100644
index 0000000000..e519f683ba
--- /dev/null
+++ b/.opencode/tui.json
@@ -0,0 +1,13 @@
+{
+ "$schema": "https://opencode.ai/tui.json",
+ "theme": "workspace-plugin-smoke",
+ "plugin": [
+ [
+ "./plugins/tui-smoke.tsx",
+ {
+ "enabled": true,
+ "label": "workspace"
+ }
+ ]
+ ]
+}