miso-tui
Use this skill when configuring multi-process TUI display, task ordering, or concurrent tasks.
Field
Controls the terminal UI mode. Set at the top level of
.
| Value | Behavior |
|---|
| Default. No TUI. Normal stdout. |
| Sidebar with per-process log panes. Click or use arrow keys to navigate, to restart, to copy full log buffer. |
| Interleaved output with color-coded process labels and a filter bar. |
{ "mode": "tabbed", "cleanExit": true }
| Object form. suppresses the log dump to stdout when the TUI exits. By default, all buffered process output is printed to stdout after the TUI closes. |
Auto-exit behavior: After all processes finish, the TUI waits 2 seconds then exits. By default, all buffered output is also dumped to stdout after the TUI closes. Set
to suppress that dump.
Field
Controls how miso discovers and orchestrates workspaces or pipeline tasks.
| Value | Behavior |
|---|
| Default. One project, no workspace awareness. |
| Miso-native monorepo orchestration. Discovers workspaces from in root . |
| Delegates to Turborepo. Parses Turborepo output into TUI tabs. |
| Delegates to Nx (nx run-many --target=<script>
). Parses output into TUI tabs. |
| Object form | Use when you need config: { "mode": "turbo", "tasks": { ... } }
|
— Concurrent and Dependent Tasks
is an object where each key is a script name. Configure ordering and concurrency:
Run upstream tasks before this one (topological order):
json
"repo": {
"mode": "mono",
"tasks": {
"build": {
"dependsOn": ["^build"]
}
}
}
means: run
in all upstream dependencies first.
Without
, it's a same-workspace dependency (rarely needed).
Launch additional tasks alongside this one in the TUI:
json
"repo": {
"mode": "turbo",
"tasks": {
"dev": {
"concurrent": ["studio"]
}
}
}
Running
will also launch
as a TUI tab alongside it.
tasks are always run by miso directly — they are
not passed to turbo/nx even when
is
.
In
mode,
launches extra scripts from the root
folder alongside the workspace-distributed task.
In
mode,
launches extra scripts from the root
folder alongside miso's native
orchestration (not turbo's).
Overriding a Turbo (or Nx) Task
When
is
or
, miso routes each command individually:
- Task name is in → miso runs it directly with its own TUI orchestration
- Task name is NOT in → miso delegates to (or )
This lets you pick exactly which tasks miso controls and which turbo handles.
Example: take over , keep turbo for everything else
Before (turbo handles dev — string shorthand):
json
{
"repo": "turbo",
"tui": "tabbed"
}
→ delegates to
; turbo parses output into TUI tabs.
After (miso handles dev — object form with
):
json
{
"repo": {
"mode": "turbo",
"tasks": {
"dev": {
"concurrent": ["studio"]
}
}
},
"tui": "tabbed"
}
→ miso discovers workspaces from
, launches
+
in parallel in TUI tabs directly.
and
still delegate to turbo.
Minimum override (no extra config needed):
An empty task entry is enough to make miso take over
.
Full Example
json
{
"$schema": "https://misojs.dev/miso.schema.json",
"tui": "tabbed",
"repo": {
"mode": "turbo",
"tasks": {
"dev": {
"concurrent": ["studio", "worker"]
},
"build": {
"dependsOn": ["^build"]
}
}
}
}
Common Mistakes
- without Turbo installed — Turbo must be in PATH; miso shells out to directly
- without — means same-workspace dependency; use for cross-workspace topological ordering
- Expecting TUI for a single process — the TUI only launches when multiple processes are involved (either monorepo workspaces or tasks configured)
- nested inside — is a top-level field, not under
- when you want miso to run dev — string shorthand fully delegates all tasks to turbo; to make miso handle specific tasks, use the object form with :
{ "mode": "turbo", "tasks": { "dev": {} } }
- tasks going to turbo — tasks are always run by miso directly, even in mode; they are not passed to