@skwid138/opencode-tuiConfigurable TUI plugin for OpenCode — custom logo and prompt placeholders
4
63
近 7 天 9
36.7
生态多维模型
8 天前
2026-08-11
快速安装与配置
opencode.json写入当前项目的 opencode.json,只对这个仓库生效。
opencode.json
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["@skwid138/opencode-tui@1.1.1"]
}写入 ~/.config/opencode/opencode.json,对所有项目生效。
~/.config/opencode/opencode.json
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["@skwid138/opencode-tui@1.1.1"]
}若你要在本地改造这个插件,先装到项目里再从本地路径引用。
shell
pnpm add -D @skwid138/opencode-tuiopencode 启动时会通过内嵌运行时自动加载 npm 依赖并缓存至本地目录,无需手动在全局环境执行安装。
Lipstick for your OpenCode TUI.
@skwid138/opencode-tui is a configurable OpenCode TUI plugin that replaces the home screen logo and prompt placeholders with friendlier defaults. Use it as-is, customize ASCII logo rows with per-segment inline colors, swap prompt suggestions for normal and shell modes, or disable either section independently while invalid config safely falls back to defaults.
Quick Start
Install the package:
npm install @skwid138/opencode-tui
Add the TUI entry to your OpenCode plugin configuration using the package's TUI export:
{
"plugin": ["@skwid138/opencode-tui/tui"]
}
Features
- Custom ASCII logos made from rows of inline text segments.
- Per-segment logo colors using 3- or 6-digit hex values.
- Prompt placeholder customization for normal and shell modes.
- Disable logo or prompt customization independently.
- Graceful fallback to defaults when config is invalid.
- Companion Logo Builder web app for generating
logo.rowsconfig.
Usage
Zero config
Use the default JustVibes logo and default prompt placeholders:
{
"plugin": ["@skwid138/opencode-tui/tui"]
}
Plugin options are registered as a tuple: ["@skwid138/opencode-tui/tui", { config }].
Disable sections
Disable only the logo:
{
"plugin": [
["@skwid138/opencode-tui/tui", { "logo": false }]
]
}
Disable only the prompt override:
{
"plugin": [
["@skwid138/opencode-tui/tui", { "prompt": false }]
]
}
Disable both sections:
{
"plugin": [
["@skwid138/opencode-tui/tui", { "logo": false, "prompt": false }]
]
}
Custom prompts
{
"plugin": [
[
"@skwid138/opencode-tui/tui",
{
"prompt": {
"placeholders": {
"normal": [
"Build a dashboard for my team",
"Refactor this component",
"Help me debug this error"
],
"shell": [
"List files by size",
"Show current git status"
]
}
}
}
]
]
}
Custom logo rows
Each row contains literal pre-rendered ASCII text segments. Segment color is an inline 3- or 6-digit hex string including #.
{
"plugin": [
[
"@skwid138/opencode-tui/tui",
{
"logo": {
"rows": [
{
"segments": [
{ "text": "Open", "color": "#5DBDB3" },
{ "text": "Code", "color": "#F8B4C4" }
]
}
]
}
}
]
]
}
Options reference
| Option | Type | Default | Description |
|---|---|---|---|
logo |
false | LogoConfig |
default logo | Set to false to leave home_logo untouched. |
logo.rows |
Array<{ segments: Array<{ text: string; color: string }> }> |
JustVibes ASCII art | Logo rows rendered as horizontal text segments. Segment colors must match #RGB or #RRGGBB. Empty arrays fall back to defaults. |
prompt |
false | PromptConfig |
default prompt | Set to false to leave home_prompt untouched. |
prompt.placeholders.normal |
string[] |
11 default ideas | Suggestions for normal prompt mode. Empty arrays fall back to defaults. |
prompt.placeholders.shell |
string[] |
3 default shell ideas | Suggestions for shell prompt mode. Empty arrays fall back to defaults. |
Invalid sections are isolated: a bad logo config falls back to the default logo without breaking prompt customization, and a bad prompt config falls back without breaking the logo. Validation never throws; warnings are logged and surfaced through the OpenCode toast API when available.
Logo Builder
Use the companion Logo Builder app to generate custom logo.rows config: https://skwid138.github.io/opencode-logo-builder/. The companion repo lives at https://github.com/skwid138/opencode-logo-builder.
Development
Install dependencies:
npm install
Run tests:
npm test
Run tests with coverage:
npm run test:coverage
Type-check:
npm run typecheck
Build the package:
npm run build
The build emits ESM artifacts and declaration files into dist/.
Commit messages
This repo uses Conventional Commits. A local
husky hook runs
commitlint on every commit, and PR titles are validated
by GitHub Actions (.github/workflows/pr-title.yml) since this repo squash-merges
with the PR title as the commit subject.
Allowed types: feat, fix, perf, refactor (patch), docs, chore, ci,
style, test, build, revert.
Notes:
- Use
git commit --no-verifyto bypass the hook in unusual cases (e.g. WIP commits you'll squash later). - A
BREAKING CHANGE:footer in the commit body triggers a major release regardless of the type prefix — use deliberately. - The conventional prefix governs the release type, but the human is responsible for
matching prefix to actual change (a
feat:whose diff is a README typo will still publish a minor release).
License
MIT © Spencer Miller