@pellux/goodvibes-tui 1.19.5 → 1.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE +21 -0
  3. package/README.md +143 -1613
  4. package/docs/README.md +4 -4
  5. package/docs/foundation-artifacts/operator-contract.json +1 -1
  6. package/package.json +7 -7
  7. package/src/cli/ensure-goodvibes-gitignore.ts +16 -4
  8. package/src/cli/entrypoint.ts +5 -1
  9. package/src/cli/launch-auto-update.ts +63 -4
  10. package/src/cli/tui-startup.ts +131 -15
  11. package/src/config/surface.ts +21 -0
  12. package/src/config/tui-extension-settings.ts +9 -1
  13. package/src/core/bookmark-navigation.ts +44 -0
  14. package/src/core/conversation-line-cache.ts +87 -19
  15. package/src/core/conversation-rendering.ts +186 -28
  16. package/src/core/conversation-tool-groups.ts +152 -0
  17. package/src/core/conversation-types.ts +30 -3
  18. package/src/core/conversation.ts +17 -0
  19. package/src/core/rewind-turn-anchors.ts +12 -13
  20. package/src/core/session-recovery.ts +62 -7
  21. package/src/core/session-resume-core.ts +206 -0
  22. package/src/core/transcript-journal.ts +32 -6
  23. package/src/core/turn-event-wiring.ts +55 -12
  24. package/src/input/command-args-hint.ts +11 -2
  25. package/src/input/command-registry.ts +19 -0
  26. package/src/input/commands/checkpoint-runtime.ts +3 -3
  27. package/src/input/commands/health-runtime.ts +1 -3
  28. package/src/input/commands/local-runtime.ts +19 -2
  29. package/src/input/commands/rewind-runtime.ts +132 -1
  30. package/src/input/commands/runtime-services.ts +11 -1
  31. package/src/input/commands/secret-runtime.ts +1 -1
  32. package/src/input/commands/session-content.ts +9 -1
  33. package/src/input/commands/session-picker-filter.ts +28 -0
  34. package/src/input/commands/session-workflow.ts +62 -73
  35. package/src/input/commands/session.ts +36 -1
  36. package/src/input/commands/shell-core.ts +57 -5
  37. package/src/input/commands/update-runtime.ts +120 -4
  38. package/src/input/commands/websearch-runtime.ts +1 -1
  39. package/src/input/handler-content-actions.ts +63 -39
  40. package/src/input/handler-feed-routes.ts +17 -3
  41. package/src/input/handler-feed.ts +3 -0
  42. package/src/input/handler-interactions.ts +19 -23
  43. package/src/input/handler-modal-token-routes.ts +5 -0
  44. package/src/input/handler-types.ts +4 -1
  45. package/src/input/handler-ui-state.ts +6 -2
  46. package/src/input/handler.ts +19 -9
  47. package/src/input/search.ts +94 -2
  48. package/src/input/selection-modal-queue.ts +176 -0
  49. package/src/main.ts +55 -56
  50. package/src/panels/builtin/operations.ts +2 -1
  51. package/src/panels/provider-health-domains.ts +2 -2
  52. package/src/renderer/block-actions-overlay.ts +59 -0
  53. package/src/renderer/block-actions.ts +1 -3
  54. package/src/renderer/context-status-hint.ts +73 -5
  55. package/src/renderer/conversation-layout.ts +16 -0
  56. package/src/renderer/conversation-overlays.ts +6 -0
  57. package/src/renderer/help-overlay.ts +69 -53
  58. package/src/renderer/selection-modal-overlay.ts +66 -10
  59. package/src/renderer/shell-surface.ts +15 -0
  60. package/src/renderer/tool-result-expanded-lines.ts +48 -0
  61. package/src/renderer/ui-factory.ts +1 -1
  62. package/src/runtime/bootstrap-command-context.ts +5 -1
  63. package/src/runtime/bootstrap-command-parts.ts +5 -2
  64. package/src/runtime/bootstrap-core.ts +3 -3
  65. package/src/runtime/bootstrap-hook-bridge.ts +62 -44
  66. package/src/runtime/bootstrap-shell.ts +31 -16
  67. package/src/runtime/bootstrap.ts +13 -18
  68. package/src/runtime/code-index-services.ts +19 -0
  69. package/src/runtime/durability-services.ts +11 -7
  70. package/src/runtime/index.ts +12 -1
  71. package/src/runtime/process-lifecycle.ts +63 -2
  72. package/src/runtime/recovery-autosave.ts +48 -0
  73. package/src/runtime/recovery-offer-wiring.ts +89 -0
  74. package/src/runtime/recovery-prompt.ts +312 -0
  75. package/src/runtime/resume-notice.ts +26 -21
  76. package/src/runtime/services.ts +14 -16
  77. package/src/runtime/session-liveness-marker.ts +120 -0
  78. package/src/runtime/session-pointer-surface.ts +22 -0
  79. package/src/runtime/session-resume-liveness-confirm.ts +84 -0
  80. package/src/runtime/session-storage-services.ts +41 -0
  81. package/src/runtime/workspace-checkpointing.ts +10 -2
  82. package/src/shell/recovery-input-helpers.ts +17 -98
  83. package/src/shell/retry-affordance.ts +123 -0
  84. package/src/shell/ui-openers.ts +9 -0
  85. package/src/utils/splash-lines.ts +1 -1
  86. package/src/version.ts +1 -1
package/README.md CHANGED
@@ -2,1714 +2,244 @@
2
2
 
3
3
  [![CI](https://github.com/mgd34msu/goodvibes-tui/actions/workflows/ci.yml/badge.svg)](https://github.com/mgd34msu/goodvibes-tui/actions/workflows/ci.yml)
4
4
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
- [![Version](https://img.shields.io/badge/version-1.19.5-blue.svg)](https://github.com/mgd34msu/goodvibes-tui)
5
+ [![Version](https://img.shields.io/badge/version-1.20.0-blue.svg)](https://github.com/mgd34msu/goodvibes-tui)
6
6
 
7
- A terminal-native AI coding, operations, automation, knowledge, and integration console with a typed runtime, omnichannel surfaces, structured memory/knowledge, and a raw ANSI renderer.
7
+ GoodVibes is a terminal console for coding and operations work with an AI model. You run `goodvibes` in a project directory and get a full-screen terminal app where you talk to a model that can read and edit your files, run shell commands, search the web, and hand work off to background agents — asking your permission before anything that writes or executes. It talks to many model providers (OpenAI, Anthropic, Gemini, Bedrock, Copilot, OpenRouter and other OpenAI-compatible gateways, plus local servers like Ollama and LM Studio that it finds on startup), keeps its settings, sessions, and secrets on your own machine, and shows you the token count and running cost of every turn. Alongside the conversation, panels turn background work — running agents, git state, diffs, tokens, cost — into live control rooms.
8
8
 
9
- > **1.0.0 shipped 2026-07-03.** From 1.0.0 the project follows the stability posture promised for this milestone: semver, with incompatible changes to CLI flags, config keys, slash commands, key bindings, daemon routes, and on-disk layouts landing only in major releases, and deprecations noted in `CHANGELOG.md` first. Documentation always describes the **current** behavior, not historical behavior.
10
-
11
- <!-- screenshot -->
9
+ <img src="docs/assets/splash.png" alt="GoodVibes starting up in a terminal: a glitch-art GOODVIBES wordmark in cyan-to-magenta gradient, the version and tagline beneath it, the active model and tool count, the working directory, and a hint line reading Ctrl+P panels / ? help / F2 fleet. A status footer shows mode, token usage, context usage, and the daemon and web listener addresses." width="900">
12
10
 
13
11
  ---
14
12
 
15
- ## Start Here
13
+ ## Install
16
14
 
17
- GoodVibes is a Bun program. Install Bun first and make sure `bun` is on `PATH`, then install GoodVibes from the npm registry:
15
+ GoodVibes runs on Linux, macOS, and Windows via WSL2. The one-line installer downloads checksum-verified binaries and needs no package manager:
18
16
 
19
17
  ```sh
20
- bun add -g @pellux/goodvibes-tui
21
- bun pm trust -g @pellux/goodvibes-tui
18
+ curl -fsSL https://goodvibes.sh/install.sh | sh
22
19
  goodvibes
23
20
  ```
24
21
 
25
- Bun blocks lifecycle scripts for untrusted global packages. Only one package needs trusting — `@pellux/goodvibes-tui` itself — so its postinstall can place the matching TUI and daemon binaries. No dependency needs trusting: the prebuilt binaries arrive through the platform-specific `@pellux/goodvibes-tui-<os>-<arch>` package (installed by the package manager with registry integrity, no lifecycle script), and the tree-sitter grammar packages ship their `.wasm` files as plain files — the app loads those, never the native bindings their `install` scripts would build. If you skip the trust step entirely the `goodvibes` launcher still self-heals on first run by fetching and checksum-verifying the binaries. Verify the global install with:
22
+ Or install from the npm registry with [Bun](https://bun.sh):
26
23
 
27
24
  ```sh
28
- bun pm -g untrusted
29
- goodvibes --version
30
- goodvibes-daemon --version
25
+ bun add -g @pellux/goodvibes-tui
26
+ bun pm trust -g @pellux/goodvibes-tui
27
+ goodvibes
31
28
  ```
32
29
 
33
- `bun pm -g untrusted` must report `Found 0 untrusted dependencies with scripts` after trusting `@pellux/goodvibes-tui`. `npm install -g @pellux/goodvibes-tui` is also supported, but it does not install Bun for you. The package preinstall check fails with a clear message if `bun` is missing from `PATH`.
30
+ Bun blocks lifecycle scripts for untrusted global packages, so the second line lets the package's postinstall place the matching TUI and daemon binaries. Only `@pellux/goodvibes-tui` itself needs trusting — no dependency does. If you skip that step, the `goodvibes` launcher still self-heals on first run by fetching and checksum-verifying the binaries. `npm install -g @pellux/goodvibes-tui` also works when `bun` is already on `PATH`.
34
31
 
35
- Or run from source:
32
+ Then point it at a model — an environment variable is the fastest path:
36
33
 
37
34
  ```sh
38
- git clone https://github.com/mgd34msu/goodvibes-tui.git
39
- cd goodvibes-tui
40
- bun install
41
35
  export OPENAI_API_KEY=...
42
- bun run dev
43
36
  ```
44
37
 
45
- Common entrypoints:
46
-
47
- - `bun run dev` — run the TUI from source
48
- - `bun run daemon` — run the headless daemon/API host from source
49
- - `bun run build` — compile the TUI entrypoint into `dist/goodvibes`
50
- - `./dist/goodvibes` — run the compiled TUI binary
51
-
52
- Release distribution:
53
-
54
- - GitHub Releases are the primary distribution path for compiled binaries
55
- - `bun add -g @pellux/goodvibes-tui` is the recommended global install path; the package is hosted on the npm registry and Bun installs from that registry directly
56
- - Bun global installs require trusting only `@pellux/goodvibes-tui` so the package postinstall can place the matching TUI and daemon binaries; no dependency needs trusting (grammar `.wasm` files ship as plain files, the platform binary package carries the binaries with registry integrity, and no runtime dependency's install script is loaded)
57
- - `npm install -g @pellux/goodvibes-tui` is supported on Linux, macOS, and WSL when Bun is already installed; the preinstall check verifies Bun, and the install script downloads the matching TUI and daemon binaries for the current platform
58
- - Windows is supported via WSL2 today: inside a WSL2 distribution GoodVibes is an ordinary Linux install, so the `linux-x64`/`linux-arm64` binaries run natively. Native Windows is beta (the `windows-x64` binary compiles but is not yet a stable release asset). See [docs/windows.md](docs/windows.md).
59
-
60
- Common paths:
61
-
62
- - global settings: `~/.goodvibes/tui/settings.json`
63
- - project settings: `.goodvibes/tui/settings.json`
64
- - secure secrets: `~/.goodvibes/tui/secrets.enc` or `.goodvibes/tui/secrets.enc`
65
- - compatibility secrets: `~/.goodvibes/goodvibes.secrets.json`
66
- - services: `.goodvibes/tui/services.json`
67
- - custom providers: `~/.goodvibes/tui/providers/*.json`
68
- - schedules: `.goodvibes/tui/schedules.json`
69
- - direct TLS certs: `~/.goodvibes/tui/certs/fullchain.pem` and `~/.goodvibes/tui/certs/privkey.pem`
70
-
71
- Deployment shapes:
72
-
73
- - local TUI only
74
- - TUI with in-process daemon/API host
75
- - source-run headless daemon/API host
76
- - omnichannel runtime with Slack, Discord, Telegram, Home Assistant, webhook, Teams, Matrix, and other surfaces
77
- - remote peer/node-host runtime for distributed execution
78
-
79
- Typical workflows:
80
-
81
- - code inside the TUI with `read`, `edit`, `find`, `analyze`, `exec`, and live control-room visibility
82
- - expose the daemon/API host for browser-based operator access, channels, webhooks, and future external clients
83
- - consume the daemon/API host through stable typed contract artifacts and shared transport seams that back external SDK and companion-app clients
84
- - ingest URLs, bookmarks, docs, spreadsheets, and artifacts into the structured knowledge system for later retrieval
85
- - dispatch and review work across remote peers and node-host runners
86
-
87
- The compiled binary is the TUI entrypoint built from `src/main.ts`. The daemon (`daemon.enabled`, on by default, loopback-bound) and, when `danger.httpListener` is enabled, the HTTP listener both start in-process from that same binary. `bun run daemon` uses the separate headless daemon entrypoint from source.
88
-
89
- Inbound TLS can run in `off`, `proxy`, or `direct` mode. Direct mode defaults to the certificate files above unless explicit paths are configured. Outbound HTTPS trust uses Bun’s bundled roots by default and can be extended or replaced with custom CA files/directories for internal or enterprise endpoints. Operator auth now supports bearer headers and local session cookies across REST, SSE, and control-plane WebSocket flows.
38
+ On Windows, run it inside a WSL2 distribution, where it is an ordinary Linux install. Native Windows is beta — see [docs/windows.md](docs/windows.md).
90
39
 
91
- ---
92
-
93
- ## Documentation
94
-
95
- - [Docs index](docs/README.md)
96
- - [Getting started](docs/getting-started.md)
97
- - [Deployment and services](docs/deployment-and-services.md)
98
- - [Providers and routing](docs/providers-and-routing.md)
99
- - [Knowledge, artifacts, and multimodal](docs/knowledge-artifacts-and-multimodal.md)
100
- - [Channels, remote runtime, and API](docs/channels-remote-and-api.md)
101
- - [Tools and commands](docs/tools-and-commands.md)
102
- - [Voice and live TTS](docs/voice-and-live-tts.md)
103
- - [Cloudflare batch and control plane](docs/cloudflare-batch.md)
104
- - [Home Assistant surface](docs/homeassistant-surface.md)
105
- - [Project planning](docs/project-planning.md)
106
- - [QEMU sandbox bootstrapping](docs/qemu-sandbox.md)
107
- - [Local verification](docs/verification/local-verification.md)
108
- - [Release and publishing](docs/release-and-publishing.md)
109
- - [Foundation artifacts](docs/foundation-artifacts/README.md)
40
+ Deeper install notes — the installer's environment variables, uninstall, daemon service registration, encrypted and vault-backed secrets, and running from source — are in [docs/getting-started.md](docs/getting-started.md).
110
41
 
111
42
  ---
112
43
 
113
- ## What is this
44
+ ## A 60-second tour
114
45
 
115
- goodvibes-tui is a terminal-native product for coding, operations, automation, knowledge work, and integrations. The codebase is built around:
46
+ ### The conversation loop
116
47
 
117
- - terminal-native rendering
118
- - Unicode-rich, cell-accurate UI primitives
119
- - compact, token-efficient transcript behavior
120
- - operator-facing control rooms for non-conversational state
121
- - explicit runtime visibility for permissions, routing, health, remote execution, knowledge, and orchestration
122
- - backend-first external surfaces for channels, future web clients, automation, and remote peers
48
+ <img src="docs/assets/conversation.png" alt="A conversation turn in the terminal. The user asks the model to read two source files and explain the project. Below it, an assistant block lists two read tool calls with green checkmarks, followed by a collapsed group labelled tool results, 2 tools, 2 lines. A second assistant block makes one more read call. The final answer is plain prose with an identifier syntax-highlighted in yellow. The footer reads Token Usage: Input 41.3k, Output 337, Cache Read 0, Cache Write 0, Total 41.6k, approximately 0.129 dollars, above a green context usage bar at 5 percent." width="900">
123
49
 
124
- The interface is rendered directly to the alternate screen buffer with raw ANSI escape sequences. Conversation, panels, modals, overlays, and the footer all share the same renderer foundation.
50
+ Tool calls stream inline as the model makes them, then their results fold into a collapsible group so a long working session stays readable — expand any group to see what actually came back. Assistant messages render markdown, syntax-highlighted code, and inline diffs, and any block can be collapsed, bookmarked, copied, or saved to a file.
125
51
 
126
- The runtime is organized around typed store domains, typed runtime events, a shared control plane for permissions and orchestration, and product surfaces for reviewing and repairing state. Agents run in-process with isolated histories, scoped tools, and optional worktrees. Operational state such as provider routing, local auth, daemon/gateway posture, channels, search, artifacts, structured knowledge, multimodal analysis, remote sessions, settings control-plane state, and task execution is routed into dedicated panels and APIs.
52
+ The footer keeps an honest running total: fresh input tokens separated from cache reads, output tokens, the estimated cost so far, and how much of the context window is used. When a model's price is not in the catalog, the cost is reported as unavailable rather than guessed.
127
53
 
128
- The TUI consumes the published `@pellux/goodvibes-sdk` platform layer (the exact pinned version lives in `package.json`) for shared contracts, daemon route surfaces, transports, remote runtime contracts, and other reusable runtime code. The repo keeps the terminal UI, host wiring, and product-specific composition while future surfaces consume the same SDK-backed runtime foundation.
54
+ ### Permissions and workspace trust
129
55
 
130
- ---
56
+ <img src="docs/assets/workspace-trust.png" alt="A modal titled New workspace, choose a trust level, offering two options: Trust this workspace, full capability, all tools may run; and Keep restricted, read-only, explore safely, writes and commands are denied until trusted. Navigation hints read Up/Down Navigate, Enter Choose, Esc Close." width="820">
131
57
 
132
- ## Features
133
-
134
- ### Multi-Provider Models And Routing
135
- - Native OpenAI, Anthropic, OpenAI Codex, Gemini, InceptionLabs, Amazon Bedrock, Amazon Bedrock Mantle, Anthropic Vertex, and GitHub Copilot support plus a broad OpenAI-compatible/gateway layer
136
- - Dynamic model catalog with benchmark metadata, provider auto-registration, custom provider JSON, and hot-reload
137
- - Interactive model and provider pickers with family, capability, availability, and tier filtering
138
- - Synthetic-provider failover that preserves free / paid / subscription boundaries
139
- - Provider account control room with route posture, auth freshness, fallback risk, and recovery actions
140
-
141
- ### Terminal-Native UI System
142
- - Raw ANSI renderer with direct terminal control
143
- - Shared Unicode glyph primitives for borders, cursors, meters, markers, and selection states
144
- - Conversation, panels, and modals built on the same low-level renderer
145
- - Width-aware overlays, stable bottom docking above the prompt, half-height message surfaces, and structured footer layers
146
- - Shared panel workspace layout budgeting with renderer-owned visible-row budgets
147
- - Copy/selection logic that strips decorative gutters and visual scaffolding from clipboard output
148
- - Line-count indicator rendered right-aligned inside the prompt border on multi-line input (footer height stays stable regardless of prompt line count)
149
- - Multi-line clipboard paste handled at the input boundary: bracketed-paste carriage-return line separators are normalized to newlines, the composer grows to the pasted line count, and pastes longer than 8 lines collapse to a compact paste marker
150
-
151
- ### Conversation And Transcript Workflow
152
- - Markdown rendering, syntax highlighting, inline diffs, collapsible blocks, bookmarks, block copy, and block save
153
- - Transcript event navigation by family for operational browsing of long sessions
154
- - Search overlays, compact line-number modes (`all`, `code`, `off`), and block-level collapse/expand
155
- - Presentation routing for non-conversational runtime chatter into control-room panels
156
- - Tracked assistant-message rendering that supports markdown tables, including tolerant handling of slightly malformed LLM-generated separator rows
157
-
158
- ### Panels, Control Rooms, And Workspaces
159
- - Split-pane panel system with panel picker, layout control, and keyboard-first focus behavior
160
- - Six persistent consoles — the Fleet hub plus git, diff, cost, tokens, and local-auth — with heavier operator surfaces (providers, remote, MCP, marketplace, orchestration, tasks, intelligence, worktrees, approvals, policy, security, settings sync, and more) re-homed as configuration/review modals on a single liveness-enforcing config-modal host
161
- - Retired panel ids resolve honestly through aliases, modal redirects, and "this moved" notices, so `/panel open <id>` and saved layouts never point at nothing
162
- - Summary-first heavy surfaces with posture, issues, next actions, and detail regions
163
- - Cross-panel actions between Explorer, Preview, and Symbols so file browsing can open previews and jump to symbol locations directly from panel focus
164
- - Live panels stay subscribed while open and repaint while the main thread is idle, so agent, tool, and thinking updates never look frozen
165
- - The Fleet panel is the live control room for running agents, workstreams, and scheduled jobs — attach/detach (detach never kills), steer, pause/resume, and capability-gated interrupt/kill — reached by `F2`, `Ctrl+O`, or the footer `[Enter]`
166
-
167
- ### Modal And Selection UX
168
- - Modal stack navigation that unwinds correctly back to the slash-command menu and prior nested modals
169
- - Search/list focus ownership in searchable modals, so typing only targets filter input when that row is actually focused
170
- - Toggleable selection-modal behavior with `Space` / `Enter` for primary actions, `Left` / `Right` for booleans, enums, and numeric adjustments, and `Shift+Left` / `Shift+Right` for step-by-10 number changes
171
- - Slash-command menu close behavior that fully clears command mode and prompt state on `Esc`
172
-
173
- ### Token And Usage Visibility
174
- - Live thinking-strip token output that continues to advance even when visible response streaming is disabled
175
- - Fresh-input versus cached-context accounting in the footer and token surfaces, so request counts separate new input from cache-read context while the context bar still reflects the full prompt footprint
176
- - Reasoning-heavy OpenAI/OpenAI-compatible streams advance live token/output indicators for reasoning-delta providers
177
-
178
- ### Agents, Tasks, And WRFC
179
- - In-process agents with isolated history, scoped tools, optional worktrees, and structured communication lanes
180
- - Archetype registry that supports built-ins and user-defined markdown archetypes
181
- - Task lifecycle tracking across exec, agent, MCP, plugin, integration, daemon, scheduler, and ACP work
182
- - Automated WRFC loops with review/fix/check chains, configurable gates, and explicit evidence in completion reports
183
- - WRFC panel renders a constraint badge (`c:N/M`) per chain, colored by aggregate satisfaction status
184
- - Expanded chain detail shows each constraint with status marker `[SAT]`, `[UNS CRIT|MAJOR|MINOR]` (unsatisfied, severity-tagged), or `[UNV]` (unverified), with ` *` suffix for inherited constraints
185
- - Selected-chain summary shows satisfied/total/inherited counts at a glance
186
- - Controller-flagged synthetic issues render above reviewer issues as `[CRITICAL]` "Controller flags"
187
- - Agent-detail modal surfaces `systemPromptAddendum` (WRFC engineer addendum) when present on the agent record
188
- - System-message router surfaces `WORKFLOW_CONSTRAINTS_ENUMERATED` as an operator-visible message when constraints are loaded
189
- - Built-in planning/strategy layer with TUI-owned project planning, passive SDK-backed planning artifacts, execution plans, adaptive plan modes, and status/explain/override controls
190
-
191
- ### Tools And Intelligence
192
- - Built-in native tools include `read`, `write`, `edit`, `find`, `exec`, `fetch`, `web-search`, `analyze`, `inspect`, `agent`, `state`, `workflow`, `registry`, `task`, `team`, `worklist`, `mcp`, `packet`, `query`, `remote`, `repl`, `control`, and `channel`
193
- - Native file tooling with notebook-aware read/write/edit, AST-aware editing, validation hooks, undo, and compact output shaping
194
- - Sandbox-backed REPL/eval tooling with bounded JavaScript, TypeScript, Python, SQL, and GraphQL runtimes plus persisted REPL history
195
- - Durable memory plus a structured knowledge backend with connectors, extractors, projection rendering, GraphQL, consolidation, and task-time packet injection
196
- - Provider-backed web search with DuckDuckGo default plus SearXNG, Brave, Exa, Firecrawl, Tavily, and Perplexity adapters
197
- - Artifact/file runtime for ingesting, storing, delivering, and reusing documents, images, audio, video, spreadsheets, JSON, markdown, and generated outputs
198
- - Unified multimodal analysis runtime that routes images through media understanding, audio through STT, documents through TS extractors, and video through keyframe/transcript fusion
199
- - Language intelligence with bundled LSP servers, tree-sitter grammars, diagnostics, symbols, references, hover, and outline support
200
- - Intelligence control room with readiness, workflow entry points, and recovery guidance
201
-
202
- ### Security, Auth, And Operational Controls
203
- - Prompt / allow-all / custom permission modes with layered evaluation and risk analysis
204
- - Policy bundle loading, signing, verification, divergence simulation, and rule-suggestion flows for permission changes
205
- - Secure-secret hierarchy with `preferred_secure` storage policy by default
206
- - Local daemon/listener auth with bootstrap credentials, local user management, password rotation, session revocation, bearer-or-cookie operator auth, and review surfaces
207
- - Config-gated private-host remote fetches for multimodal and knowledge ingest so internal-network URL access is explicit instead of ambient
208
- - Health, policy, security, and setup control surfaces for reviewing and repairing runtime posture
209
-
210
- ### Ecosystem, MCP, And Remote
211
- - Curated marketplace, plugin trust model, quarantine engine, rollback flows, recommendations, and product-control commands
212
- - MCP lifecycle with trust posture, quarantine, reconnect behavior, repair flows, and tool projection into the main registry
213
- - Distributed peer/node-host runtime with pairing, scoped tokens, work pull/complete flows, replay/review artifacts, and operator-facing remote inspection/recovery surfaces
214
-
215
- ### Runtime Foundations
216
- - Typed runtime store and typed runtime-event system with domain-specific dispatch
217
- - Bootstrap composition root with explicit initialization order
218
- - App-scoped runtime service graph with explicit operator and peer contract ownership instead of ambient singleton wiring
219
- - Stable operator and peer client surfaces with direct, HTTP, SSE, and WebSocket transports for future terminal, web, and mobile shells
220
- - Checked-in foundation artifacts for the operator contract, peer contract, canonical knowledge GraphQL schema, and canonical knowledge SQL schema under [`docs/foundation-artifacts`](docs/foundation-artifacts/README.md)
221
- - Reference in-process and HTTP consumer examples under [`examples/reference-operator-client`](examples/reference-operator-client/README.md), [`examples/reference-http-client`](examples/reference-http-client/README.md), and [`examples/reference-node-host`](examples/reference-node-host/README.md)
222
- - Explicit session submit/steer/follow-up semantics with lifecycle-state tracking, correlation/causation IDs, return-context summaries, knowledge capture, compaction, guidance, diagnostics, notifications, retention, idempotency, and integration-helper APIs
223
- - Feature flags, profiles, profile sync bundles, live settings editing, and UI routing controls for system / operational / WRFC messages
224
- - Performance budgets, panel-health contracts, telemetry exporters, and operator playbooks for stuck turns, reconnect failures, permission deadlocks, plugin degradation, and recovery scenarios
225
-
226
- ### Evaluation, Replay, And Incident Analysis
227
- - Evaluation harness with built-in suites, baselines, scorecards, and regression gates
228
- - Deterministic replay tooling with load / step / seek / diff / export flows
229
- - Forensics collector and registry with incident bundles, replay mismatch evidence, root-cause summaries, and export/capture flows
230
- - State inspector and telemetry substrate with transition logs, time-travel buffers, hotspot sampling, and local ledger exporters
231
-
232
- ### Integrations, Notifications, And Delivery
233
- - Omnichannel delivery/runtime surfaces for `web`, `slack`, `discord`, `ntfy`, `webhook`, `telegram`, `google-chat`, `signal`, `whatsapp`, `imessage`, `msteams`, `bluebubbles`, `mattermost`, and `matrix`
234
- - Shared reply pipeline for progress, reasoning, tool output, and final replies across TUI, web, webhook, and channel-native surfaces
235
- - GitHub automation webhook plus daemon/gateway surfaces for future web clients, companion apps, and remote node/device peers
236
- - Delivery queue, dead-letter handling, delivery classification, and notification routing policies
237
- - Local notification/webhook front doors plus portable remote/session handoff bundles
238
- - Optional voice surface, TTS/STT/realtime providers, and teleport bundle workflows for adjacent operator experiences
239
- - Managed hook workflows, contract inspection, hook simulation, and cron-like scheduled agent tasks
58
+ The first time you open a directory, GoodVibes asks how much it is allowed to do there. Restricted is read-only: the model can look around, but writes and commands are refused until you trust the workspace.
240
59
 
241
- ---
60
+ <img src="docs/assets/permission-prompt.png" alt="An execution approval prompt. A header reads EXECUTE, Shell Execution Approval. Fields list the requesting session, the tool exec, the full command, the working directory, a Risk line reading HIGH write in red, the surface and radius, a summary, the effects: process execution, filesystem mutation, possible network access, and a reviewer checklist. Below, four numbered remember options scope an approval to this exact command, to every mkdir command, to every exec call in this project, or to the rest of the session in memory only. The action line reads: Y Allow once, 1-4 Allow and remember, N Deny, or type a reason to deny." width="900">
242
61
 
243
- ## Supported Providers & Models
244
-
245
- Models are sourced dynamically from [models.dev](https://models.dev). The model catalog is larger than the built-in runtime list below; the tables here describe the provider/search/voice/media surfaces shipped in source today.
246
-
247
- ### Native chat/runtime providers
248
-
249
- | Provider | Type | Notes |
250
- |----------|------|-------|
251
- | `openai` | Native | GPT-4/GPT-5 family, tool calling, TTS/STT/realtime voice coverage |
252
- | `anthropic` | Native | Claude family |
253
- | `openai-codex` | Native | OpenAI subscription/Codex path |
254
- | `gemini` | Native | Gemini family, chat + embeddings |
255
- | `inceptionlabs` | OpenAI-compat | Inception/Mercury models |
256
- | `amazon-bedrock` | Native | Direct Bedrock route |
257
- | `amazon-bedrock-mantle` | Native | Bedrock Mantle route |
258
- | `anthropic-vertex` | Native | Anthropic via Google Vertex |
259
- | `github-copilot` | Native | Copilot-backed chat/runtime integration |
260
- | `synthetic` | Failover | Virtual provider; routes to the best available backend while preserving billing boundaries |
261
-
262
- ### Built-in compatible and gateway providers
263
-
264
- These register automatically when configured and participate in the same routing/model picker/runtime metadata surface:
265
-
266
- - `openrouter`, `aihubmix`, `groq`, `cerebras`, `mistral`, `ollama-cloud`, `huggingface`, `nvidia`, `llm7`
267
- - `deepseek`, `fireworks`, `microsoft-foundry`, `minimax`, `moonshot`, `qianfan`, `qwen`, `sglang`, `stepfun`, `together`, `venice`, `volcengine`, `xai`, `xiaomi`, `zai`
268
- - gateway/proxy-style integrations: `cloudflare-ai-gateway`, `vercel-ai-gateway`, `litellm`, `copilot-proxy`
269
-
270
- **Provider aliases**: Catalog/provider aliases such as `inception -> inceptionlabs`, `copilot -> github-copilot`, `dashscope -> qwen`, `x-ai -> xai`, and `z-ai -> zai` are normalized automatically.
271
-
272
- ### Web search providers
273
-
274
- | Provider | Notes |
275
- |----------|-------|
276
- | `duckduckgo` | Built-in no-key default using Lite search + Instant Answer enrichment |
277
- | `searxng` | Good self-hosted/meta-search option |
278
- | `brave` | Structured web search API |
279
- | `exa` | LLM-oriented search/research API |
280
- | `firecrawl` | Search plus crawl/extraction workflows |
281
- | `tavily` | LLM-oriented search/evidence API |
282
- | `perplexity` | Search/research provider surface |
283
-
284
- ### Voice providers
285
-
286
- | Provider | Capabilities |
287
- |----------|--------------|
288
- | `openai` | `tts`, `stt`, `realtime` |
289
- | `elevenlabs` | `tts`, `stt`, `realtime` |
290
- | `deepgram` | `stt` |
291
- | `google` | `stt` |
292
- | `microsoft` | `tts` |
293
- | `vydra` | `tts` |
294
-
295
- ### Media understanding and generation
296
-
297
- - Image understanding providers: `openai`, `gemini`, `anthropic`, and local OpenAI-compatible multimodal backends
298
- - Generation providers: `byteplus`, `runway`, `alibaba`, `fal`, `comfy`
299
- - Multimodal analysis combines media providers, voice STT providers, and built-in document extractors behind one packet/write-back surface
300
-
301
- ### Local Server Discovery
302
-
303
- goodvibes-tui auto-discovers local inference servers on startup. Supported server types:
304
-
305
- - **Ollama** (port 11434)
306
- - **LM Studio** (port 1234)
307
- - **vLLM** (detected via `x-vllm-*` response headers)
308
- - **llama.cpp** / **LocalAI** (detected via server header)
309
- - **Text Generation Inference (TGI)**
310
- - **Jan**, **GPT4All**, **KoboldCpp**, **Aphrodite**
311
-
312
- Discovered servers are registered automatically as OpenAI-compatible providers at startup.
313
-
314
- ### Synthetic Failover Provider
315
-
316
- The `synthetic` provider groups the same model across multiple backends under a single selectable entry. When one backend hits a rate limit or error, requests fail over automatically to the next. Models are cataloged from models.dev (4,000+ models, 100+ providers) with a 24-hour TTL cache.
317
-
318
- Many model providers support configurable reasoning effort levels. Selectable options include: `instant`, `low`, `medium`, `high`.
319
-
320
- ### Custom Providers
321
-
322
- Any OpenAI-compatible API can be added by dropping a JSON file in `~/.goodvibes/tui/providers/`:
323
-
324
- ```json
325
- {
326
- "name": "openrouter",
327
- "displayName": "OpenRouter",
328
- "type": "openai-compat",
329
- "baseURL": "https://openrouter.ai/api/v1",
330
- "apiKeyEnv": "OPENROUTER_API_KEY",
331
- "models": [
332
- {
333
- "id": "anthropic/claude-sonnet-4-6",
334
- "displayName": "Claude Sonnet 4.6 (via OpenRouter)",
335
- "description": "Anthropic Claude Sonnet 4.6 via OpenRouter",
336
- "contextWindow": 200000,
337
- "capabilities": {
338
- "toolCalling": true,
339
- "codeEditing": true,
340
- "reasoning": true,
341
- "multimodal": true
342
- }
343
- }
344
- ]
345
- }
346
- ```
62
+ After that, the default permission mode is `prompt`: writes, edits, shell commands, network fetches, agent spawns, and MCP calls each stop and ask. The prompt shows what will run, in which directory, its assessed risk, and what it can affect. You can allow it once, deny it (optionally typing a reason the model sees), or remember the decision at whichever scope fits — this exact command, this command shape, this tool for the whole project, or just for the rest of the session. Four other modes are available when prompting is not what you want: `accept-edits` auto-approves file writes and edits while exec and the other risky classes still ask, `plan` allows read-only tools and refuses every mutating or exec call, `allow-all` approves everything, and `custom` takes per-tool `allow` / `prompt` / `deny` overrides. `Shift+Tab` cycles the four session postures — normal, accept-edits, plan, auto — and `/plan` toggles plan mode directly.
347
63
 
348
- Provider configs are hot-reloaded on file change. Use the `/add-provider` skill for interactive guided setup with smart defaults for popular providers.
64
+ ### Models and providers
349
65
 
350
- ---
66
+ <img src="docs/assets/model-picker.png" alt="A fullscreen model workspace. A left column lists routing targets: Main Chat set, Helper Model off, Tool LLM off, TTS LLM inherit, and Embeddings set. The right pane shows the selected target with its current model and a filter row for search, price, capability, grouping, and availability. Below, a table of models lists model key, display name, provider, context window, tier, and capability flags across 2017 catalogued entries, with a footer of list shortcuts." width="900">
351
67
 
352
- ## Setup
68
+ Models come from a live catalog, so the picker lists far more than a hardcoded set, filterable by search, price, capability, and availability. Separate roles route independently: your main chat model, a cheaper helper model for grunt work, a tool model, a TTS model, and an embeddings model can each point somewhere different.
353
69
 
354
- ### Prerequisites
70
+ The `synthetic` provider groups the same model across every backend that serves it into one entry. Pick it and requests route to whichever backend is healthy, failing over on rate limits and transient errors without changing the model you chose — and without ever crossing the free, paid, and subscription boundaries. Any OpenAI-compatible API can be added as a custom provider by dropping a JSON file in `~/.goodvibes/tui/providers/`; it is hot-reloaded. See [docs/providers-and-routing.md](docs/providers-and-routing.md).
355
71
 
356
- - [Bun](https://bun.sh) v1.0 or later
357
- - **Optional**: [Go](https://go.dev) for Go LSP support (gopls auto-installs via `go install`)
358
- - **Optional**: For Rust development, `rust-analyzer` is auto-downloaded from GitHub releases
72
+ ### The Fleet control room
359
73
 
360
- ### Install
74
+ <img src="docs/assets/fleet-panel.png" alt="The Fleet panel open beside the conversation. It lists background work as rows with a kind, a name, elapsed time, token count, and cost — a CI watch poller and a runtime health watcher at 59 seconds each, and a code indexer. The detail region below shows the selected watcher's id, state idle, elapsed time, model, tokens, cost, a headline reading CI watch poller, healthy, an activity phase, and an approvals line. The action hints read j/k navigate, Enter attach, K kill, A archive finish." width="900">
361
75
 
362
- ```sh
363
- git clone https://github.com/mgd34msu/goodvibes-tui.git
364
- cd goodvibes-tui
365
- bun install
366
- ```
76
+ Work that is not conversation goes into panels instead of scrolling past in the transcript. Fleet — reached with `F2` — is the live control room for agents, workstreams, watchers, and scheduled jobs: what is running, for how long, at what token cost, and what it is waiting on. You can attach to a running agent to watch or steer it, detach again without killing it, pause and resume, and archive finished work. Git, diff, cost, token, and local-auth panels sit alongside it; heavier operator surfaces open as review modals.
367
77
 
368
- ### Configure API Keys
78
+ ### Everything else is a command
369
79
 
370
- API keys resolve from environment variables first, then from the GoodVibes secret store. The local store can hold encrypted values directly or provider-backed secret references for Bitwarden, Vaultwarden, Bitwarden Secrets Manager, 1Password, files, and command-backed resolvers.
80
+ <img src="docs/assets/help-overlay.png" alt="A searchable help overlay titled Help, Commands, with a search field and results grouped by category. Under Provider Accounts is the /accounts command with review, panel, show, routes, and repair subcommands and a one-line description. Under Fleet is /agents, described as hosting third-party coding agents as fleet rows over ACP. A line reads 146 below, and the hints read Up/Down Navigate, Enter Run, / Search, Esc Close." width="820">
371
81
 
372
- Set environment variables:
82
+ Press `?` for a searchable, categorized list of every slash command with its arguments and description. The same list is generated into [docs/commands-reference.md](docs/commands-reference.md).
373
83
 
374
- | Provider | Primary Env Var | Accepted Aliases | Type |
375
- |----------|----------------|-----------------|------|
376
- | Anthropic | `ANTHROPIC_API_KEY` | `CLAUDE_API_KEY` | Paid |
377
- | OpenAI | `OPENAI_API_KEY` | `OPENAI_KEY` | Paid |
378
- | Google Gemini | `GEMINI_API_KEY` | `GOOGLE_API_KEY`, `GOOGLE_GEMINI_API_KEY` | Paid |
379
- | InceptionLabs | `INCEPTION_API_KEY` | — | Paid |
380
- | Mistral | `MISTRAL_API_KEY` | — | Paid |
381
- | OpenRouter | `OPENROUTER_API_KEY` | — | Free tier available |
382
- | Groq | `GROQ_API_KEY` | — | Free (LPU inference) |
383
- | Cerebras | `CEREBRAS_API_KEY` | — | Free (wafer-scale inference) |
384
- | AIHubMix | `AIHUBMIX_API_KEY` | — | Free tier (rate-limited) |
385
- | HuggingFace | `HF_API_KEY` | `HUGGINGFACE_API_KEY`, `HF_TOKEN` | Free tier (rate-limited) |
386
- | Ollama Cloud | `OLLAMA_CLOUD_API_KEY` | `OLLAMA_API_KEY` | Free |
387
- | NVIDIA NIM | `NVIDIA_API_KEY` | — | 1000 free credits |
388
- | LLM7 | `LLM7_API_KEY` | — | Free |
389
-
390
- Additional built-in integrations resolve from the same env/secrets path:
391
-
392
- - LLM/gateway providers: `AWS_BEARER_TOKEN_BEDROCK`, `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `GOOGLE_APPLICATION_CREDENTIALS`, `ANTHROPIC_VERTEX_PROJECT_ID`, `GOOGLE_CLOUD_PROJECT`, `COPILOT_GITHUB_TOKEN`, `GH_TOKEN`, `GITHUB_TOKEN`, `DEEPSEEK_API_KEY`, `FIREWORKS_API_KEY`, `AZURE_OPENAI_API_KEY`, `MINIMAX_API_KEY`, `MOONSHOT_API_KEY`, `QIANFAN_API_KEY`, `QWEN_API_KEY`, `DASHSCOPE_API_KEY`, `MODELSTUDIO_API_KEY`, `SGLANG_API_KEY`, `STEPFUN_API_KEY`, `TOGETHER_API_KEY`, `VENICE_API_KEY`, `VOLCANO_ENGINE_API_KEY`, `XAI_API_KEY`, `XIAOMI_API_KEY`, `ZAI_API_KEY`, `CLOUDFLARE_AI_GATEWAY_API_KEY`, `AI_GATEWAY_API_KEY`, `LITELLM_API_KEY`, `COPILOT_PROXY_API_KEY`
393
- - Search and media: `PERPLEXITY_API_KEY`, `DEEPGRAM_API_KEY`, `ELEVENLABS_API_KEY`, `XI_API_KEY`, `VYDRA_API_KEY`, `BYTEPLUS_API_KEY`, `FAL_KEY`, `FAL_API_KEY`, `COMFY_API_KEY`, `RUNWAYML_API_SECRET`, `RUNWAY_API_KEY`
394
-
395
- Alternatively, store keys encrypted using the `/secrets` command. Environment variables take precedence when both are set:
396
-
397
- ```sh
398
- /secrets set OPENAI_API_KEY sk-...
399
- ```
400
-
401
- For self-hosted or external secret managers, link a GoodVibes key to a provider-backed SecretRef:
402
-
403
- ```sh
404
- /secrets link OPENAI_API_KEY goodvibes://secrets/bitwarden?item=GoodVibes%20OpenAI&field=password&sessionEnv=BW_SESSION
405
- /secrets link SLACK_BOT_TOKEN goodvibes://secrets/vaultwarden?item=GoodVibes%20Slack&field=password&server=https%3A%2F%2Fvault.example.test
406
- /secrets link STRIPE_TOKEN goodvibes://secrets/bws/00000000-0000-0000-0000-000000000000?field=value&accessTokenEnv=BWS_ACCESS_TOKEN
407
- /secrets link OPENAI_API_KEY goodvibes://secrets/1password?vault=Private&item=GoodVibes%20OpenAI&field=API%20Key
408
- ```
84
+ ### Keys worth knowing on day one
409
85
 
410
- Use `/secrets providers` for supported provider shapes and `/secrets test <secret-ref>` to validate a ref without printing its value.
86
+ | Key | Does |
87
+ | --- | --- |
88
+ | `Enter` / `Shift+Enter` | Send the message / insert a newline |
89
+ | `?` | Help and command picker (on an empty prompt) |
90
+ | `@` | File picker — insert a path into the prompt |
91
+ | `Tab` | Toggle collapse on the nearest block, or complete a path |
92
+ | `Ctrl+F` | Search the conversation |
93
+ | `Ctrl+Y` / `Ctrl+S` | Copy / save the nearest block |
94
+ | `Ctrl+P` | Toggle the panel sidebar |
95
+ | `F2` | Toggle Fleet — open and focus it, bring it to front, or close it |
96
+ | `Ctrl+K` | Command palette — search and run any command |
97
+ | `Shift+Tab` | Cycle the session permission mode |
98
+ | `Esc` | Leave the current mode — search, command, or modal |
99
+ | `Ctrl+C` | Clear input, cancel a running turn; press twice to quit |
411
100
 
412
- ### Synthetic Failover Provider
413
-
414
- The `synthetic` provider groups models available from multiple backends. When one provider hits a rate limit, requests fail over automatically to the next. To enable failover, set API keys for multiple free providers:
415
-
416
- ```sh
417
- # Recommended minimum for failover
418
- export GROQ_API_KEY="..."
419
- export HF_API_KEY="..."
420
- export NVIDIA_API_KEY="..."
421
- export OLLAMA_CLOUD_API_KEY="..."
422
- export OPENROUTER_API_KEY="..."
423
- export AIHUBMIX_API_KEY="..."
424
- ```
425
-
426
- Then select any model from the `synthetic` provider (e.g., `gpt-oss-120b`, `kimi-k2.5`, `qwen-3.5-397b`). See [Synthetic Provider & Intelligent Failover](#synthetic-provider--intelligent-failover) for full details on failover behavior.
427
-
428
- ### Run
429
-
430
- ```sh
431
- bun run dev
432
- ```
433
-
434
- ### Run the optional daemon/API host
435
-
436
- ```sh
437
- GOODVIBES_DAEMON_TOKEN=... GOODVIBES_HTTP_TOKEN=... bun run daemon
438
- ```
439
-
440
- The daemon/gateway surface is optional, but it is what powers omnichannel routes, the browser-based operator surface, remote peers, knowledge/media APIs, and future external clients.
441
-
442
- ### Build a standalone binary
443
-
444
- ```sh
445
- bun run build
446
- # outputs dist/goodvibes
447
- ```
448
-
449
- `bun run build` compiles `src/main.ts` into `dist/goodvibes`. The compiled binary runs the TUI and also hosts the daemon in-process (`daemon.enabled`, on by default) plus, when `danger.httpListener` is enabled, the HTTP listener. The default build does not produce a separate compiled daemon-only executable.
101
+ Most bindings are customizable in `~/.goodvibes/tui/keybindings.json`, and `/keybindings` shows what is currently bound. Five keys are fixed and stay out of that file: `F2`, `Shift+Tab`, `Esc`, `?`, and `@`. The full reference is in [docs/tools-and-commands.md](docs/tools-and-commands.md).
450
102
 
451
103
  ---
452
104
 
453
- ## Synthetic Provider & Intelligent Failover
454
-
455
- ### What are synthetic models?
105
+ ## What's in the box
456
106
 
457
- Synthetic models are models available from multiple providers, automatically grouped by the system under a single selectable entry. When you pick a synthetic model, the system routes your request to the best available backend — you never need to think about which provider is serving it.
107
+ Each row links to the page that documents it. The product's own `?` overlay and `/help` are always the current authority.
458
108
 
459
- - Models with different naming across providers (e.g., `GPT-4o` vs `gpt 4o`) are automatically merged into one entry
460
- - Each synthetic model shows how many providers are available for failover in the model picker
109
+ | Area | What you get | Docs |
110
+ | --- | --- | --- |
111
+ | Models and routing | Native, OpenAI-compatible, and gateway providers; local inference-server discovery; synthetic failover groups; per-role model targets; custom provider JSON | [providers-and-routing.md](docs/providers-and-routing.md) |
112
+ | Tools | File read/write/edit/find, shell exec, fetch, web search, code analysis and inspection, agents, workflows, bounded REPL/query runtimes | [tools-and-commands.md](docs/tools-and-commands.md) |
113
+ | Slash commands | The full generated command reference, by category | [commands-reference.md](docs/commands-reference.md) |
114
+ | Keyboard | The complete binding reference, and how to rebind | [tools-and-commands.md](docs/tools-and-commands.md) |
115
+ | Agents and workflows | Built-in and custom archetypes, spawning, git worktree isolation, automation and scheduled jobs | [tools-and-commands.md](docs/tools-and-commands.md) |
116
+ | Extending it | Hooks and hook chains, the plugin manifest and API, MCP servers, the curated marketplace | [tools-and-commands.md](docs/tools-and-commands.md) |
117
+ | Diagnostics | Evaluation suites, deterministic replay, incident bundles, the state inspector, telemetry | [tools-and-commands.md](docs/tools-and-commands.md) |
118
+ | CLI flags | Session lifecycle (`--continue`, `--resume`, `--fork`), non-interactive mode, output formats, host selection | [cli-flags.md](docs/cli-flags.md) |
119
+ | Knowledge and memory | Session and durable memory, a structured knowledge store with connectors and extractors, embeddings and retrieval, artifacts, multimodal analysis | [knowledge-artifacts-and-multimodal.md](docs/knowledge-artifacts-and-multimodal.md) |
120
+ | Session durability | Post-turn snapshots plus an fsync-per-record transcript journal replayed at every resume | [session-durability.md](docs/session-durability.md) |
121
+ | Planning | Conversational planning loop, project-scoped knowledge spaces, readiness evaluation, the Planning panel | [project-planning.md](docs/project-planning.md) |
122
+ | Sharing and export | `/share` to HTML, JSON, or Markdown with redaction, upload, and clipboard options | [share-command.md](docs/share-command.md) |
123
+ | Daemon and services | TUI-only or in-process daemon, headless daemon/API host, browser operator surface, background service and autostart, inbound TLS, outbound trust | [deployment-and-services.md](docs/deployment-and-services.md) |
124
+ | Remote access | A worked home-server setup: always-on daemon, browser access, TUI over SSH, reachability and TLS | [remote-access.md](docs/remote-access.md) |
125
+ | Channels and API | Slack, Discord, Telegram, Matrix, webhook and other surfaces; the shared reply pipeline; remote peers and node hosts; the control-plane HTTP and streaming API | [channels-remote-and-api.md](docs/channels-remote-and-api.md) |
126
+ | Voice | Live `/tts` playback, TTS and STT providers, streaming voice API | [voice-and-live-tts.md](docs/voice-and-live-tts.md) |
127
+ | Sandboxing | Bounded eval and isolated MCP execution, with a QEMU-backed VM path | [qemu-sandbox.md](docs/qemu-sandbox.md) |
128
+ | Integrations | Home Assistant surface, Cloudflare Workers/Queues batch, GitHub Action | [homeassistant-surface.md](docs/homeassistant-surface.md) · [cloudflare-batch.md](docs/cloudflare-batch.md) · [github-action.md](docs/github-action.md) |
129
+ | Contributing surfaces | Writing a new TUI panel; the checked-in operator/peer contracts and knowledge schemas | [panel-authoring.md](docs/panel-authoring.md) · [foundation-artifacts](docs/foundation-artifacts/README.md) |
461
130
 
462
- ### Transparent failover
463
-
464
- Failover behavior:
465
-
466
- - **Rate limit (429)** — immediately retries the next provider in the pool
467
- - **Server error (500) or network error** — retries the next provider after a 5-second cooldown
468
- - **Client error (400 Bad Request)** — does NOT trigger failover; the error indicates a problem with the request itself, not the provider
469
- - **All providers temporarily exhausted with short cooldowns (≤120s)** — the system automatically waits for the shortest cooldown to expire and retries
470
-
471
- Failover is silent by default. The model name in the status bar does not change when switching backends for the same synthetic model.
472
-
473
- ### Cross-model failover (free models only)
474
-
475
- When every provider for a free synthetic model is exhausted and cooldowns are too long to wait:
476
-
477
- - The system automatically falls back to the next-best free model, ranked by benchmark score
478
- - The user is notified inline (non-blocking) about the model change
479
- - This cascading continues until a working free model is found
480
- - Free/paid/subscription tiers never mix — cross-model failover only happens within the free tier
481
-
482
- #### **IMPORTANT NOTE**:
483
- This system is not perfect, and there are ways it could result in charges accruing.
484
-
485
- This includes but is not limited to when a provider moves a model from free to paid and you have kept the goodvibes-tui session running for longer than 24 hours (and have not run a model refresh manually in that time period). The system will not know that the model is now a paid model.
486
-
487
- Refreshes happen automatically if a new session is started (or session is resumed) after the 24-hour TTL expires for the model list. For long-running sessions, please ensure that the models are refreshed daily.
488
-
489
- ### Paid and subscription model exhaustion
490
-
491
- Paid and subscription models do **not** auto-failover to a different model. The user made a deliberate, cost-conscious choice.
492
-
493
- When a paid or subscription model is exhausted, the system shows a clear message with recovery options:
494
-
495
- - Wait for the cooldown to expire and retry
496
- - Switch to a different model with `/model`
497
- - Switch to a free synthetic model
498
-
499
- ### Model picker grouping
500
-
501
- - Synthetic models are split into **Top Models** (S-tier or A-tier by benchmark) and **All Synthetic**
502
- - Each entry shows the number of providers available (e.g., `4 providers`)
503
- - Quality tier badges [S/A/B/C] are displayed next to model names based on composite benchmark score
131
+ Full index: [docs/README.md](docs/README.md).
504
132
 
505
133
  ---
506
134
 
507
135
  ## Configuration
508
136
 
509
- Settings are layered, not stored in a single working-directory file:
137
+ Settings are layered. Later layers win:
510
138
 
511
- - defaults
512
- - global TUI settings: `~/.goodvibes/tui/settings.json`
513
- - project overrides: `.goodvibes/tui/settings.json`
514
- - CLI/runtime overrides
139
+ 1. built-in defaults
140
+ 2. global settings — `~/.goodvibes/tui/settings.json`
141
+ 3. project overrides — `.goodvibes/tui/settings.json`
142
+ 4. CLI and runtime overrides
515
143
 
516
- The shared file `~/.goodvibes/goodvibes.json` is reserved for future cross-app state; TUI settings do not live there. You can view and edit settings live with the fullscreen `/config` workspace or `/settings`.
144
+ Edit them live with `/settings` or the fullscreen `/config` workspace rather than by hand. A few of the most-reached-for keys:
517
145
 
518
- Related storage paths:
519
-
520
- - secure secrets: `~/.goodvibes/tui/secrets.enc` and project/ancestor `.goodvibes/tui/secrets.enc`
521
- - plaintext compatibility secrets: `~/.goodvibes/goodvibes.secrets.json` and project/ancestor `.goodvibes/goodvibes.secrets.json`
522
- - service registry: `.goodvibes/tui/services.json`, with service-backed auth/account surfaces in the TUI and daemon
523
- - custom provider JSON: `~/.goodvibes/tui/providers/*.json`
524
- - keybindings: `~/.goodvibes/tui/keybindings.json`
525
- - REPL history: `.goodvibes/tui/repl-history.json`
526
- - schedules: `.goodvibes/tui/schedules.json`
527
-
528
- ### Key Settings
529
-
530
- | Key | Default | Description |
531
- |-----|---------|-------------|
532
- | `display.stream` | `true` | Stream responses token by token |
533
- | `display.lineNumbers` | `off` | Line-number mode: `off`, `code`, or `all` |
534
- | `display.collapseThreshold` | `30` | Lines before a block auto-collapses |
146
+ | Key | Default | What it does |
147
+ | --- | --- | --- |
148
+ | `permissions.mode` | `prompt` | `prompt`, `accept-edits`, `plan`, `allow-all`, or `custom` (per-tool overrides) |
149
+ | `provider.model` | `openrouter:openrouter/free` | Active model for main chat |
150
+ | `provider.reasoningEffort` | `medium` | Reasoning depth on models that support it |
535
151
  | `display.theme` | `vaporwave` | Color theme |
152
+ | `display.stream` | `true` | Stream responses token by token |
153
+ | `display.lineNumbers` | `off` | Line numbers: `off`, `code`, or `all` |
536
154
  | `display.showThinking` | `false` | Show model thinking traces |
537
- | `display.showTokenSpeed` | `false` | Show tokens/sec in status bar |
538
- | `provider.model` | `openrouter/free` | Active model ID |
539
- | `provider.reasoningEffort` | `medium` | Reasoning depth for supported models |
540
- | `provider.systemPromptFile` | `` | Path to a custom system prompt file |
541
- | `behavior.autoApprove` | `false` | Auto-approve all tool permission prompts |
542
- | `behavior.autoCompactThreshold` | `80` | Context % before auto-compact triggers |
543
- | `behavior.saveHistory` | `true` | Persist conversation history |
544
- | `behavior.returnContextMode` | `off` | Session return-context mode: `off`, `local`, `assisted` |
545
- | `behavior.notifyAfterSeconds` | `60` | Send desktop and webhook notifications for long-running turns after this many seconds (`0` disables); metadata-only — no conversation text is included |
546
- | `behavior.guidanceMode` | `minimal` | Operational guidance mode: `off`, `minimal`, `guided` |
547
- | `storage.secretPolicy` | `preferred_secure` | Secret storage policy: prefer secure backing store, fall back when allowed |
548
- | `permissions.mode` | `prompt` | Permission mode: `prompt`, `allow-all`, `custom` |
549
- | `ui.systemMessages` | `panel` | Route general system messages to `panel`, `conversation`, or `both` |
550
- | `ui.operationalMessages` | `panel` | Route operational runtime notices to `panel`, `conversation`, or `both` |
551
- | `ui.wrfcMessages` | `both` | Route WRFC/orchestration updates to `panel`, `conversation`, or `both` |
552
- | `service.enabled` | `false` | Enable OS-backed background service mode |
553
- | `service.autostart` | `false` | Install/enable or disable/remove the OS autostart service |
554
- | `service.restartOnFailure` | `true` | Restart managed daemon services after failure |
555
- | `controlPlane.hostMode` | `local` | Control-plane bind mode: `local`, `network`, or `custom` |
556
- | `controlPlane.port` | `3421` | Control-plane daemon/API port |
557
- | `httpListener.port` | `3422` | Webhook/event listener port |
558
- | `web.enabled` | `false` | Enable browser operator surface |
559
- | `web.hostMode` | `local` | Web surface bind mode: `local`, `network`, or `custom` |
560
- | `web.port` | `3423` | Web/browser surface port |
561
- | `danger.agentRecursion` | `false` | Allow agents to spawn subagents |
562
- | `danger.maxGlobalAgents` | `8` | Max simultaneous agents |
563
- | `daemon.enabled` | `true` | Run the local session daemon (loopback-bound; on by default) |
564
- | `danger.httpListener` | `false` | Enable HTTP webhook listener |
565
- | `tools.autoHeal` | `false` | Auto-fix syntax errors on write/edit |
566
- | `tools.hooksFile` | `hooks.json` | Hook configuration file name |
567
- | `cache.enabled` | `true` | Enable provider-aware prompt caching |
568
- | `cache.stableTtl` | `1h` | TTL for stable content (system prompt + tools) |
569
- | `cache.monitorHitRate` | `true` | Track and warn on low cache hit rates |
155
+ | `behavior.autoCompactThreshold` | `80` | Context percentage before auto-compact runs |
570
156
  | `helper.enabled` | `false` | Route grunt work to a cheaper helper model |
571
- | `helper.globalProvider` | `` | Helper model provider (e.g., `ollama`) |
572
- | `helper.globalModel` | `` | Helper model ID (e.g., `llama3.2:3b`) |
157
+ | `daemon.enabled` | `true` | Run the local session daemon, bound to loopback |
573
158
 
574
- ### Permission Modes
159
+ The wider key table, the permission modes, and the hand-edited TUI namespaces (checkpoint root guard, scriptable statusline, session behavior, launch-time self-update) are in [docs/configuration.md](docs/configuration.md).
575
160
 
576
- - **`prompt`** (default) — ask before write, edit, exec, fetch, agent, workflow, and MCP calls
577
- - **`allow-all`** — never prompt, allow everything
578
- - **`custom`** — per-tool overrides using `permissions.tools.<name>` keys
161
+ ### Where things are stored
579
162
 
580
- Per-tool values: `allow`, `prompt`, `deny`.
581
-
582
- Changing `service.autostart` or `service.enabled` from `/config` reconciles the OS service where supported. On Linux this installs/enables, disables, or rewrites the user `systemd` service so the daemon state matches the setting instead of only changing JSON.
163
+ - global settings `~/.goodvibes/tui/settings.json`, project settings `.goodvibes/tui/settings.json`
164
+ - encrypted secrets `~/.goodvibes/tui/secrets.enc` or `.goodvibes/tui/secrets.enc`
165
+ - custom providers `~/.goodvibes/tui/providers/*.json`, keybindings `~/.goodvibes/tui/keybindings.json`
166
+ - service registry `.goodvibes/tui/services.json`, schedules `.goodvibes/tui/schedules.json`
167
+ - agent archetypes `.goodvibes/agents/*.md`, MCP servers `.goodvibes/mcp.json`, hooks `.goodvibes/hooks.json`
168
+ - sessions, artifacts, and other project runtime state under `.goodvibes/` in the working directory
583
169
 
584
170
  ---
585
171
 
586
- ## Control Rooms, Routing, And Operator Surfaces
587
-
588
- GoodVibes is built around routing runtime state to the right surface.
589
-
590
- The Fleet panel is the one persistent operator control room; most other operator surfaces now open as configuration and review modals on a shared, liveness-enforcing config-modal host rather than as standing panels. The product surfaces state for:
591
-
592
- - provider accounts and provider health
593
- - local auth and local service posture
594
- - settings sync and managed-settings review
595
- - remote peers, node-host contracts, work queues, and artifacts
596
- - knowledge, memory review, and structured projection surfaces
597
- - channels, deliveries, route bindings, and surface setup/doctor flows
598
- - voice, media, search, and multimodal runtime posture
599
- - sandbox posture, presets, setup, and recovery
600
- - MCP posture, trust, reconnect, and repair
601
- - marketplace, plugins, hooks, orchestration, tasks, intelligence, worktrees, approvals, and system messages
602
-
603
- Heavy operational surfaces are summary-first:
604
-
605
- - posture
606
- - current issues
607
- - next actions
608
- - then deeper detail
172
+ ## A note on cost
609
173
 
610
- Routing is configurable with:
174
+ Free-tier synthetic models can cascade to the next-best free model when every backend for the current one is exhausted, and free, paid, and subscription tiers are never mixed. This system is not perfect, and there are ways it could result in charges accruing.
611
175
 
612
- - `ui.systemMessages`
613
- - `ui.operationalMessages`
614
- - `ui.wrfcMessages`
176
+ This includes but is not limited to when a provider moves a model from free to paid and you have kept the session running for longer than 24 hours without refreshing the model list. The system will not know that the model is now a paid model.
615
177
 
616
- This is how startup discovery, runtime notices, and orchestration chatter can be sent to a panel, the conversation, or both.
178
+ Refreshes happen automatically when a new session is started or resumed after the 24-hour catalog TTL expires. For long-running sessions, please ensure that the models are refreshed daily.
617
179
 
618
- The gateway/event layer is also a first-class product surface. Runtime domains such as `session`, `tasks`, `agents`, `automation`, `routes`, `control-plane`, `deliveries`, `surfaces`, `watchers`, `transport`, `ops`, and `knowledge` are exposed through the control plane.
619
-
620
- The notification layer applies policy-aware routing, batching, and visibility controls:
621
-
622
- - quiet-while-typing suppression
623
- - adaptive batching and burst control
624
- - domain verbosity settings
625
- - panel jump and dismiss actions
626
- - routing decisions that favor control rooms for low-signal operational noise
627
-
628
- That routing stack lives under `src/runtime/notifications/*` and helps keep the conversation surface compact even when the runtime is busy.
629
-
630
- Underneath those surfaces, GoodVibes uses a typed runtime store backed by `zustand/vanilla`. Conversation, session, permissions, tasks, agents, orchestration, communication, plugins, MCP, ACP/daemon transport, integrations, intelligence, and other domains are updated through typed dispatch paths.
180
+ Paid and subscription models never auto-switch to a different model — that choice stays yours. When one is exhausted, GoodVibes says so and offers to wait out the cooldown, change model, or move to a free synthetic model. Full failover behavior: [docs/providers-and-routing.md](docs/providers-and-routing.md).
631
181
 
632
182
  ---
633
183
 
634
- ## Sandbox, Isolation, And QEMU
635
-
636
- GoodVibes includes a real sandbox control plane for both evaluation runtimes and MCP isolation.
637
-
638
- Isolation controls:
639
-
640
- - REPL isolation: `shared-vm` or `per-runtime-vm`
641
- - MCP isolation: `disabled`, `shared-vm`, `hybrid`, `per-server-vm`
642
- - host posture on Windows: `native-basic` or `require-wsl`
643
- - VM backend: `local` or `qemu`
644
-
645
- The QEMU path includes:
646
-
647
- - setup bundle generation under the user GoodVibes data directory by default
648
- - first-run bootstrap scaffolding
649
- - Debian cloud-image download, mutable qcow2 clone, resize, and NoCloud ISO creation handled by the bootstrap workflow
650
- - host-side wrapper generation
651
- - guest cloud-init seed generation for the `goodvibes` sudo user, SSH key auth, `/workspace`, and `ens3` DHCP
652
- - guest-test and wrapper-test validation
653
- - session-backed command execution
654
- - guest bundle export / inspect flows
655
- - setup manifest export / apply flows
656
- - `attach` and `launch-per-command` execution modes
657
- - REPL/MCP-friendly guest bootstrap packages for Python, JavaScript, TypeScript, SQL, GraphQL, Bun, Deno, DuckDB, Go, Rust, Ruby, and common CLI build/search tools
658
- - guest JavaScript-family REPL execution through `sandbox.replJavaScriptCommand`, defaulting the generated QEMU setup to `/home/goodvibes/.bun/bin/bun`
659
-
660
- Key commands:
661
-
662
- - `/setup sandbox`
663
- - `/sandbox review`
664
- - `/sandbox recommend`
665
- - `/sandbox doctor`
666
- - `/sandbox probe`
667
- - `/sandbox qemu setup [dir]`
668
- - `/sandbox qemu bootstrap [dir] [size-gb] [--scaffold-only|--no-build|--no-provision]`
669
- - `/sandbox qemu inspect-setup <manifest>`
670
- - `/sandbox qemu apply-setup <manifest>`
671
- - `/sandbox session ...`
672
- - `/sandbox guest-bundle export <path>`
673
- - `/sandbox guest-bundle inspect <path>`
674
-
675
- Typical first-run path:
184
+ ## Development
676
185
 
677
186
  ```sh
678
- /sandbox qemu bootstrap
679
- /sandbox doctor
680
- /sandbox guest-test eval-py
681
- ```
682
-
683
- Bootstrap runs as a background TUI process: the prompt clears, progress is visible in the background-process surface, and the TUI stays responsive. If QEMU exits before SSH is reachable, the wrapper fails fast and includes a tail of the QEMU log so port conflicts or startup failures are visible.
684
-
685
- By default, QEMU setup files, the mutable qcow2 image, SSH keys, logs, and runtime state live in `~/.goodvibes/tui/sandbox`, not in the current project. Pass an explicit directory only when you intentionally want a non-default bundle location. Use `/sandbox qemu setup` or `/sandbox qemu bootstrap --scaffold-only` if you want to generate/review the bundle without building the image or provisioning guest runtimes.
686
-
687
- See [QEMU sandbox bootstrapping](docs/qemu-sandbox.md) for host prerequisites, generated files, first-boot behavior, guest runtime packages, and troubleshooting logs.
688
-
689
- ---
690
-
691
- ## Remote, Local Services, And Integration Helpers
692
-
693
- ### Omnichannel surfaces
694
-
695
- GoodVibes includes a shared channel/runtime layer.
696
-
697
- Current surfaces:
698
-
699
- - `tui`
700
- - `web`
701
- - `slack`
702
- - `discord`
703
- - `ntfy`
704
- - `webhook`
705
- - `homeassistant`
706
- - `telegram`
707
- - `google-chat`
708
- - `signal`
709
- - `whatsapp`
710
- - `imessage`
711
- - `msteams`
712
- - `bluebubbles`
713
- - `mattermost`
714
- - `matrix`
715
-
716
- Inbound adapters, target resolution, account/setup metadata, doctor hooks, routing, and delivery are all driven through the channel runtime.
717
-
718
- ### Remote runtime
719
-
720
- The remote runtime is a distributed peer system with:
721
-
722
- - pair requests and challenge verification
723
- - peer tokens, scopes, heartbeat, and disconnect/revoke flows
724
- - work queues with claim/lease/complete lifecycle
725
- - node-host contract inspection
726
- - remote review artifacts and recovery posture
727
- - capability inspection and rerun-local-from-artifact flows
728
-
729
- Key commands:
730
-
731
- - `/remote`
732
- - `/remote show <runner>`
733
- - `/remote capabilities [runner]`
734
- - `/remote recover [runner]`
735
- - `/remote dispatch ...`
736
- - `/remote dispatch-pool <pool> ...`
737
- - `/remote export <runner>`
738
- - `/remote artifact show <id>`
739
- - `/remote import <path>`
740
-
741
- ### Local daemon and HTTP listener
742
-
743
- The local session daemon runs by default (`daemon.enabled`, loopback-bound); the HTTP
744
- webhook listener is opt-in:
745
-
746
- - `daemon.enabled` (default `true`)
747
- - `danger.httpListener` (default `false`)
748
-
749
- They are protected by local auth, which includes:
750
-
751
- - bootstrap credentials written to the bootstrap file
752
- - local user management
753
- - password rotation
754
- - session revocation
755
- - review surfaces in both commands and panels
756
-
757
- Once enabled, the daemon exposes a substantial backend surface for:
758
-
759
- - provider accounts, usage, routing, and health
760
- - gateway/operator state and browser-based operator review
761
- - knowledge ingest/search/GraphQL/projections/jobs/schedules
762
- - artifacts, media generation, voice, web search, and multimodal analysis
763
- - channels, deliveries, and route bindings
764
- - remote peer pairing, work dispatch, and node-host contracts
765
-
766
- The control-plane surface is typed and transport-aware:
767
-
768
- - `/api/control-plane` for the live gateway snapshot
769
- - `/api/control-plane/methods` and `/api/control-plane/events/catalog` for method/event discovery
770
- - `/api/control-plane/events` for SSE subscriptions
771
- - `/api/control-plane/ws` for WebSocket clients
772
- - `/api/control-plane/web` for the built-in browser/operator shell
773
-
774
- Key commands:
775
-
776
- - `/auth local review`
777
- - `/auth local add-user <username> <password> [roles]`
778
- - `/auth local rotate-password <username> <password>`
779
- - `/auth local revoke-session <token-or-fingerprint>`
780
- - `/auth local clear-bootstrap-file`
781
-
782
- ### Integration helpers
783
-
784
- GoodVibes also exposes integration-helper APIs for future clients and helpers:
785
-
786
- - another GoodVibes instance
787
- - a future web frontend or companion app
788
- - setup/auth helpers
789
- - operational integrations that need session, approval, account, health, knowledge, search, artifact, or delivery posture
790
-
791
- This layer is meant to expose control/state APIs, not a UI protocol.
792
-
793
- The adjacent local-product access layer also includes dedicated front doors for:
794
-
795
- - provider login/logout flows
796
- - install and update posture review
797
- - trust review bundles
798
- - bridge status/review/export/import paths
799
- - setup deep links and portable install/update/auth review bundles
800
- - deeplink review and bundle packaging for operator surfaces
801
-
802
- Key commands:
803
-
804
- - `/login`
805
- - `/logout`
806
- - `/install`
807
- - `/update`
808
- - `/trust`
809
- - `/bridge`
810
- - `/profile-sync` (alias: `/profilesync`)
811
-
812
- The setup surface is also broader than a single readiness screen:
813
-
814
- - onboarding and doctor flows
815
- - service, hook, remote, and sandbox review
816
- - support-bundle export
817
- - setup-transfer export / inspect / import
818
- - deep links for cockpit, security, remote, knowledge, incident, hooks, orchestration, and tasks
819
-
820
- ---
821
-
822
- ## Policy, Permissions, And Trust
823
-
824
- The permission system is more than a prompt toggle. The runtime includes:
825
-
826
- - layered policy evaluation for prefix rules, arg-shape rules, path scope, network scope, and mode constraints
827
- - decision logs for audit and review
828
- - policy preflight review before applying bundles
829
- - rule suggestion generation from actual approval decisions
830
- - policy signing and signature verification
831
- - simulation and divergence reporting for candidate policy bundles before promotion
832
- - policy runtime state with bundle lifecycle, promote, rollback, and diff support
833
-
834
- The adjacent trust layer covers:
835
-
836
- - plugin trust tiers
837
- - quarantine and degraded posture
838
- - marketplace and MCP trust review
839
- - security/policy control-room surfaces for review and remediation
840
-
841
- The result is that approvals, policy rollout, trust posture, and plugin degradation are inspectable product behavior.
842
-
843
- ---
844
-
845
- ## Automation, Hooks, And Scheduling
846
-
847
- GoodVibes includes an automation layer with:
848
-
849
- - managed hooks with scaffold, chain, enable/disable, inspect, import/export, and simulation flows
850
- - hook-point contracts with execution authority, mutation/injection permissions, timeout policy, and failure policy metadata
851
- - workflow state machines such as `wrfc`, `fix_loop`, `test_then_fix`, and `review_only`
852
- - cron-like scheduled agent tasks with timezone-aware schedules, missed-run tracking, run history, and manual trigger support
853
- - TUI-owned project planning with readiness gaps, one-question-at-a-time clarification, project language, decision records, task/dependency/verification metadata, and explicit execution approval
854
- - planning commands with project-planning inspection, active-plan review, and mode/explain/override/status controls
855
- - persistent work-plan tracking for concrete task checklists via `/work-plan`
856
-
857
- Key commands:
858
-
859
- - `/hooks`
860
- - `/workflow`
861
- - `/schedule`
862
- - `/plan`
863
-
864
- The goal is to make recurring operational work, review loops, and reaction policies explicit, inspectable, and schedulable.
865
-
866
- ---
867
-
868
- ## Services, Profiles, And Setup Transfer
869
-
870
- The services/config side is also productized beyond a flat JSON file:
871
-
872
- - named service registry with inspect, auth resolution, connectivity tests, auth review, and doctor output
873
- - first-class SecretRef-backed service credentials through env, GoodVibes local storage, file, exec, 1Password, Bitwarden, Vaultwarden, and Bitwarden Secrets Manager providers
874
- - live profile management plus portable profile sync bundle export/import
875
- - setup transfer bundles that can move config/services/ecosystem posture between environments
876
-
877
- Key commands:
878
-
879
- - `/services inspect|test|resolve|auth|auth-review|doctor|export|import`
880
- - `/profiles`
881
- - `/profile-sync` (alias: `/profilesync`)
882
- - `/setup transfer export|inspect|import`
883
-
884
- Service entries can use existing `tokenKey` fields, a SecretRef in the key field, or explicit `tokenRef` / `passwordRef` / `webhookUrlRef` / `signingSecretRef` / `publicKeyRef` / `appTokenRef` fields:
885
-
886
- ```json
887
- {
888
- "slack": {
889
- "name": "slack",
890
- "authType": "bearer",
891
- "tokenKey": "SLACK_BOT_TOKEN",
892
- "appTokenKey": "SLACK_APP_TOKEN",
893
- "tokenRef": {
894
- "source": "vaultwarden",
895
- "item": "GoodVibes Slack",
896
- "field": "password",
897
- "server": "https://vault.example.test"
898
- },
899
- "appTokenRef": {
900
- "source": "vaultwarden",
901
- "item": "GoodVibes Slack App",
902
- "field": "password",
903
- "server": "https://vault.example.test"
904
- }
905
- }
906
- }
907
- ```
908
-
909
- ---
910
-
911
- ## Marketplace, Plugins, And Curated Ecosystem Paths
912
-
913
- The ecosystem layer is broader than a basic enable/disable plugin list.
914
-
915
- Current capabilities include:
916
-
917
- - local plugin discovery across configured search directories
918
- - plugin inspect/review output with trust tier, quarantine posture, capability counts, and signature fingerprint visibility
919
- - curated ecosystem catalogs with publish-local, unpublish, catalog review, install, update, uninstall, and installed-receipt flows
920
- - local-first curated plugin distribution via `.goodvibes/tui/ecosystem/*.json`
921
- - recommendations tied to installed state, denials, and missing capabilities
922
-
923
- Key commands:
924
-
925
- - `/plugin list|inspect|review|browse|catalog-review|publish-local|install|update|uninstall`
926
- - `/marketplace`
927
-
928
- So the product supports both direct local plugins and a curated local-first ecosystem channel with review and receipt tracking.
929
-
930
- ---
931
-
932
- ## Tools
933
-
934
- goodvibes-tui ships 20+ built-in tools. They cover native file and shell operations, bounded eval, coordination/work management, channels, search, MCP/remote control, planning artifacts, and product-control inspection surfaces.
935
-
936
- ### REPL / Eval runtimes
937
-
938
- GoodVibes also ships a live bounded `repl` tool backed by the sandbox/session layer. The current runtimes are:
939
-
940
- - JavaScript
941
- - TypeScript
942
- - Python
943
- - SQL
944
- - GraphQL
945
-
946
- These are real runtime profiles wired through sandbox profiles such as `eval-js`, `eval-ts`, `eval-py`, `eval-sql`, and `eval-graphql`, and REPL history is persisted under `.goodvibes/tui/repl-history.json`.
947
-
948
- The important nuance is that the runtimes are intentionally bounded:
949
-
950
- - JavaScript and TypeScript evaluate inside the sandbox exec path
951
- - Python runs in an ephemeral virtualenv
952
- - SQL evaluates against an ephemeral in-memory SQLite database
953
- - GraphQL currently provides bounded GraphQL expression analysis/normalization through the REPL path
954
-
955
- ### Durable memory / knowledge
956
-
957
- GoodVibes has three distinct context layers:
958
-
959
- - session memory for lightweight pinned notes that only live for the current session
960
- - durable reviewed memory stored in SQLite for reuse, review, export, and task-time injection
961
- - a structured knowledge store with sources, nodes, edges, issues, extractions, usage records, consolidation candidates/reports, schedules, GraphQL, and markdown/wiki-style projections
962
-
963
- Durable record classes currently include:
964
-
965
- - `decision`
966
- - `constraint`
967
- - `incident`
968
- - `pattern`
969
- - `fact`
970
- - `risk`
971
- - `runbook`
972
- - `architecture`
973
- - `ownership`
974
-
975
- Key capabilities:
976
-
977
- - scopes: `session`, `project`, `team`
978
- - review states: `fresh`, `reviewed`, `stale`, `contradicted`
979
- - confidence scores
980
- - provenance links back to sessions, turns, tasks, events, and files
981
- - links between memory records
982
- - review queues and promotion flows
983
- - bundle export/import and handoff export/import
984
- - task-time knowledge selection and injection based on task text, write scope, graph relations, and usage scoring
985
- - structured capture from incidents, policy preflight, MCP posture, and plugin posture
986
- - connector-based ingest for URLs, bookmark exports, URL lists, and artifacts
987
- - TS extractors for HTML/text/markdown/JSON/CSV/TSV/XML/YAML/PDF text/DOCX/XLSX/PPTX
988
- - GraphQL schema + query/mutation surface over the knowledge store
989
- - projection rendering/materialization for overview pages, rollups, backlinks, source health, and exportable markdown/wiki bundles
990
- - scheduled knowledge jobs including `lint`, `reindex`, `refresh-stale`, `refresh-bookmarks`, `rebuild-projections`, `light-consolidation`, and `deep-consolidation`
991
- - usage-ledger and consolidation pipeline for candidate scoring, promotion, and report generation
992
- - reviewed memory mirrored into structured knowledge for later retrieval and packet building
993
- - sqlite-vec indexing backed by a pluggable embedding registry with providers for local hashed embeddings, OpenAI, OpenAI-compatible/LM Studio, Gemini, Mistral, and Ollama
994
-
995
- There is also a genuine self-improvement loop here:
996
-
997
- - failures and incidents can be captured into durable memory
998
- - policy, MCP, and plugin posture can be promoted into durable reviewed knowledge
999
- - operators can review, mark stale, contradict, or promote records
1000
- - knowledge jobs can refresh stale sources, rebuild projections, reindex reviewed memory, and run light/deep consolidation
1001
- - future tasks can receive automatically selected reviewed knowledge injections
1002
- - the runtime can explain exactly which knowledge records it would inject for a task and why
1003
-
1004
- The system supports iterative operator review and reuse of lessons learned in later work.
1005
-
1006
- Key commands:
1007
-
1008
- - `/recall add ...`
1009
- - `/recall search ...`
1010
- - `/recall queue`
1011
- - `/recall review ...`
1012
- - `/recall explain ...`
1013
- - `/recall promote ...`
1014
- - `/recall capture ...`
1015
- - `/recall export ...`
1016
- - `/recall import ...`
1017
- - `/recall handoff-export ...`
1018
- - `/recall handoff-import ...`
1019
- - `/knowledge status|ingest-url|import-bookmarks|import-urls|list|search|get|queue|candidates|reports|schedules|lint|packet|explain|reindex|consolidate`
1020
-
1021
- This is a reviewed knowledge substrate used by the runtime when preparing task context.
1022
-
1023
- There are also dedicated front doors for memory workflows outside `/recall`:
1024
-
1025
- - `/memory-sync` for durable export/import
1026
- - `/handoff` for reviewable handoff bundles
1027
- - `/session-memory` for session-scoped review/capture
1028
- - `/team-memory` for shared/team-oriented exchange
1029
-
1030
- ### Web search, artifacts, voice, and multimodal
1031
-
1032
- These systems are first-class runtime families.
1033
-
1034
- - `web-search`: provider-backed search with verbosity control, evidence shaping, optional source fetching, and normalized results across DuckDuckGo, SearXNG, Brave, Exa, Firecrawl, Tavily, and Perplexity
1035
- - `artifacts`: durable file/object storage for markdown, text, JSON, CSV, spreadsheets, PDFs, images, audio, video, and generated outputs, with metadata, content access, and delivery reuse
1036
- - `voice`: provider-backed TTS/STT/realtime negotiation with OpenAI, ElevenLabs, Deepgram, Google, Microsoft, and Vydra; the TUI also supports live `/tts` spoken output through streaming TTS providers and local `mpv`/`ffplay` playback
1037
- - `cloudflare`: optional Workers/Queues batch execution and remote control-plane provisioning through SDK daemon routes; local immediate daemon behavior remains the default until Cloudflare and a batch mode are enabled
1038
- - `multimodal`: unified image/audio/video/document analysis with packet building and optional knowledge write-back
1039
-
1040
- These surfaces are exposed through the daemon/API as well as the TUI panels and commands, giving future web and companion clients the same backend runtime.
1041
-
1042
- ### read
1043
-
1044
- Read files with token-efficient extraction modes.
1045
-
1046
- - 5 extract modes: `content` (full text), `outline` (signatures only, significant token savings), `symbols` (exported names, even greater savings), `ast` (structural), `lines` (specific ranges)
1047
- - Tree-sitter powered outline and symbol extraction with regex fallback
1048
- - Token-budget pagination for large batch reads — request N files, get pages that fit within a budget
1049
- - Built-in image, PDF, and Jupyter notebook reading
1050
- - Per-file caching with optimistic concurrency control (OCC) conflict detection — tracks what you've read and warns if it changed externally
1051
-
1052
- ### write
1053
-
1054
- Write files with atomic operations, backup modes, and auto-heal.
1055
-
1056
- - Atomic writes via temp file + rename — no partial writes on crash
1057
- - Three overwrite modes: `fail_if_exists`, `overwrite`, `backup` (copies original to `.goodvibes/.backups/`)
1058
- - Auto-heal pipeline: if a written file has syntax errors and `tools.autoHeal` is enabled, runs formatter → linter → LLM fix automatically
1059
- - Base64 content support for files with special characters
1060
- - Batch writes in a single call with per-file mode control
1061
-
1062
- ### edit
1063
-
1064
- Structural code editing with AST matching, scope hints, and transactional rollback.
1065
-
1066
- - 5 match modes: `exact`, `fuzzy` (whitespace-insensitive), `regex` (with capture groups), `ast` (tree-sitter structural), `ast_pattern` (ast-grep with metavariables like `$VAR` and `$$$ARGS`)
1067
- - Scope hints: `in_function`, `in_class`, `near_line` — disambiguate matches without increasing context
1068
- - Occurrence selection: `first`, `last`, `all`, or specific Nth occurrence — with ambiguity guard by default
1069
- - Atomic transactions: all edits succeed or all roll back. Also supports `partial` and `none` modes
1070
- - Pre/post validation: run `typecheck`, `lint`, `test`, or `build` before and after edits — auto-rollback on failure
1071
- - Auto-heal on validation failure (same pipeline as write)
1072
-
1073
- ### find
1074
-
1075
- Multi-mode search: files, content, symbols, references, and structural AST patterns.
1076
-
1077
- - 5 search modes in one tool: `files` (glob), `content` (regex grep), `symbols` (exported declarations), `references` (find all references via LSP with grep fallback), `structural` (AST pattern matching via ast-grep)
1078
- - Structural search uses ast-grep to find code patterns like `console.log($$$ARGS)` across TypeScript, JavaScript, CSS, and HTML
1079
- - Scope expansion: expand content matches to their enclosing `function` or `class` using tree-sitter
1080
- - Multiple queries per call executed in parallel
1081
- - Progressive output: `count_only` → `files_only` → `locations` → `matches` → `context`
1082
-
1083
- ### exec
1084
-
1085
- Shell execution with background processes, retry, progress tracking, and file operations.
1086
-
1087
- - Background execution with process tracking — spawn, poll status, read output, kill
1088
- - Retry with exponential backoff on transient failures
1089
- - `until` pattern: watch stdout for a regex match, then stop or promote to background
1090
- - Pre-command file operations: copy, move, delete files before running commands
1091
- - Progress file streaming for long-running commands (auto-enabled above 30s)
1092
- - Fail-fast mode: stop sequential execution on first failure, report remaining as skipped
1093
-
1094
- ### fetch
1095
-
1096
- HTTP client with extraction modes, service registry auth, and batch operations.
1097
-
1098
- - 11 extraction modes: `raw`, `text`, `json`, `markdown`, `readable` (strips nav/sidebar/footer), `code_blocks`, `links`, `tables`, `metadata` (og-tags), `structured` (CSS selectors), `pdf`
1099
- - Named service registry: configure API credentials once in `.goodvibes/tui/services.json`, reference by name in fetch calls
1100
- - Inline auth: `bearer`, `basic`, `api-key` per-request
1101
- - Batch parallel fetches in a single tool call
1102
-
1103
- ### web_search
1104
-
1105
- Higher-level provider-backed search built on top of the lower-level fetch/runtime stack.
1106
-
1107
- - Normalized ranked search results
1108
- - Verbosity modes from compact URL lists through richer snippet/evidence bundles
1109
- - Optional instant-answer enrichment and optional fetched evidence for top-ranked sources
1110
- - Provider routing across DuckDuckGo, SearXNG, Brave, Exa, Firecrawl, Tavily, and Perplexity
1111
- - Safer split between `fetch` as the HTTP/extraction primitive and `web_search` as the search/evidence surface
1112
-
1113
- ### analyze
1114
-
1115
- 15-mode code analysis suite — from impact analysis to upgrade compatibility.
1116
-
1117
- - `impact`: trace exported symbols across the project to find what breaks when you change a file
1118
- - `dependencies`: build import graph, detect circular dependencies, list external packages
1119
- - `dead_code`: find exported symbols with zero references outside their own file
1120
- - `security`: scan for hardcoded secrets, world-writable files, and missing .env keys
1121
- - `breaking`: compare git refs and detect removed/changed export signatures
1122
- - `semantic_diff`: LLM-powered diff summary with risk assessment (low/medium/high)
1123
- - `upgrade`: check npm registry for outdated packages and flag breaking version bumps
1124
- - Also: `coverage` (lcov/istanbul parse), `bundle` (stats.json), `surface` (public API), `preview` (dry-run edit), `diff` (git ref diff), `permissions` (dangerous pattern scan), `env_audit` (.env key comparison), `test_find` (locate test files for source files)
1125
-
1126
- ### inspect
1127
-
1128
- 21-mode project and frontend inspection tool.
1129
-
1130
- - `project`: detect project type, package manager, test framework, entry points, monorepo status
1131
- - `api` + `api_spec` + `api_validate` + `api_sync`: discover API routes across Next.js (App + Pages Router), Express, Fastify, and Hono → generate OpenAPI 3.0 specs → validate specs against code → detect frontend/backend drift by scanning fetch() calls
1132
- - `database`: parse Prisma schemas into structured model/field/relation data
1133
- - `components`: extract React component tree with props, hooks, and child components
1134
- - `scaffold`: generate module skeleton (types, implementation, tests, barrel export) with dry-run
1135
- - Frontend analysis: `layout` (CSS/Tailwind layout hierarchy), `accessibility` (a11y issue detection), `component_state` (useState/useReducer/useContext tracing), `render_triggers` (what causes re-renders), `hooks` (dependency array auditing with missing-dep detection), `overflow`/`sizing`/`stacking` (CSS issue detection), `responsive` (Tailwind breakpoint analysis), `events` (handler analysis), `tailwind` (class conflict detection), `client_boundary` (Next.js directive analysis), `error_boundary` (coverage analysis)
1136
-
1137
- ### agent
1138
-
1139
- In-process subagent system with 15 management modes.
1140
-
1141
- - Spawn agents from named archetypes (`engineer`, `reviewer`, `tester`, `researcher`, `general`) or custom archetypes from `.goodvibes/agents/*.md`
1142
- - Full lifecycle management: `spawn`, `status`, `cancel`, `list`, `get` (detailed view with recent messages), `wait` (block until completion with timeout)
1143
- - Inter-agent messaging via `message` mode
1144
- - Token budget estimation via `budget` mode
1145
- - Execution plan introspection via `plan` mode
1146
- - Git worktree isolation: each agent can work in its own branch, merged back on completion
1147
- - Batch spawning via `batch-spawn` mode
1148
- - WRFC chain introspection via `wrfc-chains` and `wrfc-history` modes
1149
- - Cohort tracking via `cohort-status` and `cohort-report` modes
1150
-
1151
- ### state
1152
-
1153
- Session state, persistent memory, telemetry, hooks, and output modes — all in one tool.
1154
-
1155
- - KV state: session-scoped key-value store with atomic persistence
1156
- - Durable memory posture: inspect the reviewed knowledge substrate and related runtime state, while the full durable-memory workflow lives under `/recall` and the knowledge panels
1157
- - Hook management: list, enable, disable, add, and remove hooks at runtime
1158
- - Output mode switching: switch between `default`, `vibecoding`, and `justvibes` verbosity presets
1159
- - Analytics: record tool calls, query by filter, export as JSON/CSV, dashboard view — backed by WASM SQLite
1160
- - Context and budget reporting for token usage awareness
1161
-
1162
- ### workflow
1163
-
1164
- Workflow state machines, automation triggers, and scheduled tasks.
1165
-
1166
- - Named workflow definitions: `wrfc` (work-review-fix cycle), `fix_loop`, `test_then_fix`, `review_only`
1167
- - State machine with validated transitions — prevents invalid state changes
1168
- - Automation triggers: fire shell commands when specific hook events occur, with optional JS conditions
1169
- - Cron scheduler: full 5-field cron expressions with IANA timezone support, missed-run detection, per-task run history, and enable/disable control. Persists to `.goodvibes/tui/schedules.json`
1170
- - Full lifecycle: start, transition, cancel, list active instances
1171
-
1172
- ### task / team / worklist
1173
-
1174
- Structured execution and coordination tools beyond a single conversation turn.
1175
-
1176
- - `task`: create, inspect, block, cancel, depend, and hand off tasks across sessions
1177
- - `team`: define teams, members, lanes, and role assignments
1178
- - `worklist`: manage durable worklists with ownership and priority
1179
-
1180
- ### packet / query
1181
-
1182
- Durable planning and operator-communication artifacts.
1183
-
1184
- - `packet`: create, revise, publish, and list implementation packets / execution packets
1185
- - `query`: track operator queries, answers, escalation targets, and closure state
1186
-
1187
- ### mcp / remote / control
1188
-
1189
- Additional product-control tools that expose runtime breadth directly.
1190
-
1191
- - `mcp`: inspect MCP servers, tools, schema freshness, security posture, auth posture, and quarantine controls
1192
- - `remote`: inspect and manage distributed peers, node-host contracts, work queues, artifacts, and review flows
1193
- - `control`: inspect packaged command families, panel/control-room families, built-in subscription providers, and sandbox presets
1194
-
1195
- ### channel
1196
-
1197
- The `channel` tool exposes the omnichannel runtime directly to the model and operator flows.
1198
-
1199
- - list accounts per surface and inspect individual account/setup state
1200
- - run account lifecycle actions such as setup, inspect, retest, connect, disconnect, login, and logout
1201
- - query shared channel directories and resolve targets across supported surfaces
1202
- - inspect channel capabilities, tools, agent-tools, and operator actions
1203
- - run channel-owned tools/actions and perform authorization checks through the same surface registry used by the daemon and reply pipeline
1204
-
1205
- ### registry
1206
-
1207
- Discover and introspect skills, agents, and tools.
1208
-
1209
- - Fuzzy search across skills (`.goodvibes/skills/*.md`), agents (`.goodvibes/agents/*.md`), and built-in tools
1210
- - Task-based recommendations: describe what you want to do, get ranked suggestions
1211
- - Dependency chain resolution for skills
1212
- - Full content retrieval for any registry item
1213
-
1214
- ---
1215
-
1216
- ## Evaluation, Replay, Diagnostics, And Incidents
1217
-
1218
- GoodVibes includes a substantial post-execution and operator-repair stack:
1219
-
1220
- - `/eval` runs built-in evaluation suites, compares baselines, and applies regression gates
1221
- - `/replay` loads and steps deterministic replay runs
1222
- - `/incident` opens, exports, and captures forensics bundles
1223
- - `Health` and diagnostics surfaces expose repair actions, transport issues, task failure state, and replay hooks
1224
- - the state inspector subsystem tracks transitions, time-travel snapshots, and selector hotspots
1225
- - telemetry exporters can write to local ledgers, console sinks, or OTLP bridges
1226
- - retention and pruning policy keeps checkpoint/snapshot growth bounded
1227
- - idempotency keys prevent duplicate tool execution across replay, reconnect, and retry scenarios
1228
- - operational playbooks describe symptoms, checks, and resolution steps for runtime failure classes
1229
-
1230
- The product also includes validation, replay, incident, telemetry, and repair infrastructure.
1231
-
1232
- The adjacent reliability subsystems include:
1233
-
1234
- - notifications
1235
- - performance budgets and panel-health monitoring
1236
- - retention and pruning
1237
- - idempotency protection
1238
- - machine-readable recovery playbooks
1239
-
1240
- Those pieces cover conversation-noise routing, panel-health/performance budgets, snapshot pruning, duplicate-execution protection, and machine-readable recovery playbooks used by the diagnostics surface.
1241
-
1242
- ---
1243
-
1244
- ## Slash Commands
1245
-
1246
- | Command | Aliases | Description |
1247
- |---------|---------|-------------|
1248
- | `/model [id]` | `/m` | Open the fullscreen provider/model workspace, or set the current model by id |
1249
- | `/provider [name]` | `/p` | Open provider-first model selection, or `add <name> <baseURL> [apiKey]` / `remove <name>` |
1250
- | `/effort [level]` | `/e` | Show or set reasoning effort level |
1251
- | `/config [category\|key]` | `/cfg` | Open the fullscreen configuration workspace for all SDK config keys, TTS settings, model routes, secrets-backed settings, MCP trust, subscriptions, and feature flags |
1252
- | `/debug` | — | Toggle debug mode |
1253
- | `/expand [type]` | — | Expand blocks by type (all/thinking/tool/code) |
1254
- | `/collapse [type]` | — | Collapse blocks by type |
1255
- | `/bookmarks` | `/bm` | List bookmarked blocks |
1256
- | `/settings` | `/cfg-ui` | Open the fullscreen configuration workspace |
1257
- | `/clear` | `/cls` | Clear the conversation display (keeps LLM context) |
1258
- | `/reset` | — | Full reset: clear display and conversation context |
1259
- | `/compact` | — | Compact conversation context using hybrid structured compaction (v2) |
1260
- | `/export [format] [path]` | — | Export conversation (markdown by default) |
1261
- | `/share [format] [path]` | `/shr` | Export session as shareable html, json, or md (supports `--redact`) |
1262
- | `/title [text]` | — | Show or set the conversation title |
1263
- | `/save [name]` | — | Save current session |
1264
- | `/load <name>` | — | Load a saved session |
1265
- | `/sessions` | — | List saved sessions |
1266
- | `/session [action]` | `/sess` | Full session management: list, rename, resume, fork, save, info, export, search, delete |
1267
- | `/undo [file]` | `/u` | Remove last turn, or `/undo file` to revert last file write/edit |
1268
- | `/redo [file]` | — | Restore last undone turn, or `/redo file` to re-apply last reverted file |
1269
- | `/checkpoints` | — | List workspace checkpoints, newest first |
1270
- | `/checkpoint [label]` | — | Create a manual workspace checkpoint (forensic retention) |
1271
- | `/rewind [id]` | — | Preview and restore a workspace checkpoint (files only — conversation history is unchanged) |
1272
- | `/retry [text]` | `/r` | Re-send the last user message |
1273
- | `/template` | `/tmpl` | Manage prompt templates: save, use, list, edit, delete |
1274
- | `/tools` | `/t` | List available tools |
1275
- | `/secrets` | — | Manage encrypted and provider-backed API key secrets (set/link/get/test/list/delete) |
1276
- | `/services` | `/svc` | Manage API service configurations |
1277
- | `/accounts [action]` | — | Review provider-account routes, auth posture, and repair actions |
1278
- | `/auth [action]` | — | Review auth posture and manage local service auth users/sessions |
1279
- | `/note [action]` | — | Session note management (pinned across context compaction): `list`, `add <text>`, `remove <id>` |
1280
- | `/keep <text>` | — | Pin text to session memory; survives context compaction |
1281
- | `/memory-sync [action]` | `/memsync` | Durable memory export/import and bundle exchange: `export <path> [scope]`, `import <path>` |
1282
- | `/recall [action]` | `/rc`, `/memory`, `/mem` | Durable knowledge and memory substrate: capture, review, explain, inspect `injections`, export, import, and handoff |
1283
- | `/knowledge [action]` | `/know`, `/kb` | Structured knowledge graph: ingest URLs/bookmarks, inspect issues, build packets, and run consolidation jobs |
1284
- | `/codebase [action]` | — | Repo source-tree code index: `build`, `status`, and `search` |
1285
- | `/context` | `/ctx` | Inspect context window usage (token breakdown per message) |
1286
- | `/next-error` | `/ne` | Jump to the next error message in the conversation |
1287
- | `/prev-error` | `/pe` | Jump to the previous error message in the conversation |
1288
- | `/profiles` | `/profile` | Browse and load config profiles |
1289
- | `/pin [id]` | — | Pin a model as favorite |
1290
- | `/unpin [id]` | — | Remove a model from favorites |
1291
- | `/git [action]` | `/g` | Git commands: status, log, diff. Opens git panel if no action given |
1292
- | `/scan` | — | Scan for local LLM servers |
1293
- | `/plan [goal]` | — | Inspect or seed TUI-owned project planning state; `panel`, `approve`, `list`, and `show <id>` are supported |
1294
- | `/work-plan [action]` | `/wp`, `/todo`, `/workplan` | Open or update the persistent workspace work-plan checklist |
1295
- | `/workstream [action]` | — | Author and oversee multi-phase agent workstreams (orchestration engine) |
1296
- | `/panel [action]` | `/panels` | Panel management: open, close, list, toggle, move, focus, split, width, height |
1297
- | `/plugin [action]` | — | Manage plugins (enable/disable/reload/list) |
1298
- | `/marketplace [action]` | — | Browse curated plugin, skill, hook-pack, and policy-pack surfaces |
1299
- | `/branch [name]` | `/br` | List conversation branches or switch to one |
1300
- | `/fork [name]` | `/branch-save` | Save a named snapshot of the current conversation |
1301
- | `/merge <name>` | — | Append messages from a branch after the fork point |
1302
- | `/agents` | — | List active and completed agents |
1303
- | `/wrfc` | — | Show WRFC chain status, constraint satisfaction counts, and per-constraint `[SAT]`/`[UNS]`/`[UNV]` breakdown |
1304
- | `/health [action]` | — | Unified runtime health review and repair entry point |
1305
- | `/guidance [action]` | — | Contextual operational guidance without cluttering the conversation |
1306
- | `/test [pattern]` | — | Run the project test script and show pass/fail results |
1307
- | `/remote [action]` | — | Distributed peer, node-host contract, work-queue, and artifact control room |
1308
- | `/sandbox [action]` | — | Isolation presets, doctor/probe, sessions, and QEMU setup flows |
1309
- | `/setup [action]` | — | First-run readiness, services, sandbox, transfer bundles, and deep links |
1310
- | `/worktree [action]` | — | Inspect orchestrator-owned worktrees and recovery posture |
1311
- | `/eval [action]` | — | Evaluation harness: suites, baselines, and regression gates |
1312
- | `/replay [action]` | `/rep` | Deterministic replay load / step / seek / diff / export |
1313
- | `/incident [action]` | — | Incident bundle review, export, and durable-memory capture |
1314
- | `/teleport [action]` | — | Portable remote-session handoff bundles |
1315
- | `/commands` | `/cmds` | Browse all commands in a scrollable list |
1316
- | `/shortcuts` | `/keys`, `/keybinds` | Show keyboard shortcuts reference |
1317
- | `/keybindings` | `/kb` | List current keyboard bindings and their config file path |
1318
- | `/schedule [action]` | `/sched` | Manage scheduled agent tasks (cron): add, list, remove, enable, disable, run |
1319
- | `/image <path>` | `/img` | Attach an image file to the next message |
1320
- | `/imagine <prompt>` | — | Generate an image from a prompt |
1321
- | `/search <query>` | — | Search the web and render ranked results with source labels (`--limit <n>`) |
1322
- | `/paste` | `/clip` | Pull supported text or image data directly from the system clipboard into the prompt |
1323
- | `/refresh-models` | — | Refresh model catalog, benchmarks, and token limits |
1324
- | `/notify [action]` | `/ntf` | Manage webhook notifications (ntfy.sh): add, remove, list, clear, test |
1325
- | `/voice [action]` | — | Review optional voice posture and export/inspect voice bundles |
1326
- | `/tts <prompt>` | — | Submit a normal prompt and play the assistant response through live TTS |
1327
- | `/cloudflare [action]` | `/cf` | Configure optional Cloudflare Workers/Queues batch and remote control-plane provisioning |
1328
- | `/diff [target]` | `/d` | Show unified diff: session, head, working, staged, or a git ref |
1329
- | `/mcp [add\|remove\|reload\|tools]` | — | Manage MCP servers at runtime and list connected tools |
1330
- | `/help [command]` | `/h`, `/?` | Show available commands and keyboard shortcuts |
1331
- | `/quit` | `/:q` | Exit the application |
1332
- | `/wq` | `/:wq` | Commit all git changes, then exit |
1333
-
1334
- > **Tip:** Use the `/add-provider` skill for interactive guided provider setup with smart defaults for popular providers.
1335
- >
1336
- > Additional front doors exist for narrower product surfaces, including `approval`, `knowledge`, `memory-review`, `memory-sync`, `session-memory`, `team-memory`, `remote-setup`, `remote-env`, `runner-pool`, `bootstrap`, `tunnel`, `voice`, `hooks`, `security`, `policy`, `orchestration`, `communication`, `ops`, `cockpit`, `trust`, `welcome`, `login`, `logout`, `bridge`, `install`, `update`, and related setup/review helpers.
1337
-
1338
- ---
1339
-
1340
- ## Keyboard Shortcuts
1341
-
1342
- All shortcuts are customizable via `~/.goodvibes/tui/keybindings.json`. Use `/keybindings` to view current bindings.
1343
-
1344
- ### Input & Editing
1345
-
1346
- | Key | Action |
1347
- |-----|--------|
1348
- | `Enter` | Send message |
1349
- | `Shift+Enter` | Insert newline |
1350
- | `Tab` | Toggle block collapse / path completion |
1351
- | `Ctrl+U` | Kill to start of line (push to kill ring) |
1352
- | `Alt+U` | Clear entire prompt |
1353
- | `Ctrl+W` | Kill word backward (push to kill ring) |
1354
- | `Ctrl+K` | Kill to end of line (push to kill ring) |
1355
- | `Alt+D` | Kill word forward (push to kill ring) |
1356
- | `Ctrl+Shift+Y` | Yank from kill ring |
1357
- | `Alt+Y` | Yank-pop (rotate kill ring, replace last yank) |
1358
- | `Alt+B` | Move word backward |
1359
- | `Alt+F` | Move word forward |
1360
- | `Ctrl+Z` | Undo prompt edit |
1361
- | `Ctrl+Shift+Z` | Redo prompt edit |
1362
- | `Ctrl+V` | Paste (image or text) |
1363
- | `@` | Open file picker (insert file path) |
1364
- | `?` | Open help/command picker (empty prompt) |
1365
- | `r` / `m` | After a turn error: retry the turn / open the model picker (any other key dismisses) |
1366
-
1367
- > **Note:** `Ctrl+W` uses whitespace-delimited word boundaries (readline/unix-word-rubout semantics), while `Alt+D`, `Alt+B`, and `Alt+F` use Unicode word boundaries (letters, digits, underscore).
1368
-
1369
- ### Navigation
1370
-
1371
- | Key | Action |
1372
- |-----|--------|
1373
- | `Arrow Up / Down` | Scroll conversation / recall input history |
1374
- | `PageUp / PageDown` | Scroll by page |
1375
- | `Ctrl+R` | Reverse input history search |
1376
- | `Ctrl+E` | Move to end of line / next error |
1377
- | `Ctrl+A` | Move to start of line / apply nearest diff |
1378
- | `Mouse wheel` | Scroll |
1379
- | `Click drag` | Select text |
1380
- | `Middle click` | Paste |
1381
- | `n` / `N` | Next / previous match in locked search mode; wraps with a `(wrap)` marker |
1382
- | `Escape` | Exit current mode (search, command, modal) |
1383
-
1384
- ### Blocks & Content
1385
-
1386
- | Key | Action |
1387
- |-----|--------|
1388
- | `Ctrl+Y` | Copy nearest block to clipboard |
1389
- | `Ctrl+S` | Save nearest block to file |
1390
- | `Ctrl+B` | Bookmark nearest block |
1391
- | `Ctrl+F` | Open conversation search overlay |
1392
- | `Ctrl+L` | Clear screen |
1393
- | `Ctrl+Shift+C` | Copy selection |
1394
-
1395
- ### Panels
1396
-
1397
- | Key | Action |
1398
- |-----|--------|
1399
- | `Ctrl+P` | Toggle panel sidebar |
1400
- | `F2` | Open and focus the Fleet panel |
1401
- | `Ctrl+]` / `Ctrl+PageDown` | Next panel tab |
1402
- | `Ctrl+PageUp` | Previous panel tab |
1403
- | `Alt+1`…`Alt+9` | Jump to panel tab 1–9 |
1404
- | `Ctrl+X` | Close the focused panel |
1405
- | `Ctrl+Shift+X` | Close all panels |
1406
- | `Ctrl+O` | Open and focus the Fleet panel (formerly Ops Control) |
1407
- | `Ctrl+G` | Toggle focus between split panes |
1408
-
1409
- ### System
1410
-
1411
- | Key | Action |
1412
- |-----|--------|
1413
- | `Ctrl+C` | Clear input / cancel generation / exit (double-press to quit) |
1414
-
1415
- ---
1416
-
1417
- ## Agent System
1418
-
1419
- Agents are in-process subagents with isolated conversation history, a scoped tool registry, and optional git worktree. They run asynchronously and report back through the agent message bus.
1420
-
1421
- ### Built-In Archetypes
1422
-
1423
- | Archetype | Tools | Description |
1424
- |-----------|-------|-------------|
1425
- | `engineer` | read, write, edit, find, exec, analyze | Full-stack implementation agent |
1426
- | `reviewer` | read, find, analyze | Code review and quality assessment |
1427
- | `tester` | read, write, find, exec | Test writing and execution |
1428
- | `researcher` | read, find, analyze, inspect | Codebase exploration and analysis |
1429
- | `general` | read, write, edit, find, exec | General purpose agent |
1430
-
1431
- ### Custom Archetypes
1432
-
1433
- Drop a Markdown file into `.goodvibes/agents/` with YAML frontmatter:
1434
-
1435
- ```markdown
1436
- ---
1437
- name: documenter
1438
- description: API documentation writer
1439
- tools: [read, find, write]
1440
- model: claude-haiku-4-5
1441
- ---
1442
-
1443
- You are a technical documentation specialist. Focus on clarity and completeness.
1444
- ```
1445
-
1446
- The markdown body becomes the agent's system prompt.
1447
-
1448
- ### Spawning an Agent
1449
-
1450
- Use the `agent` tool from within a conversation:
1451
-
1452
- ```
1453
- spawn an engineer agent to refactor src/utils.ts
1454
- ```
1455
-
1456
- Or use the tool directly with the `agent` tool's spawn mode, specifying an archetype and task.
1457
-
1458
- ### Git Worktree Isolation
1459
-
1460
- When an agent is spawned, it can be given its own git worktree. On completion, changes are merged back. On cancellation or error, the worktree is cleaned up.
1461
-
1462
- ---
1463
-
1464
- ## Hook System
1465
-
1466
- Hooks fire on lifecycle events throughout a session. They are configured in `.goodvibes/hooks.json` (or a custom file set in `tools.hooksFile`).
1467
-
1468
- ### Event Path Format
1469
-
1470
- ```
1471
- Phase:Category:Specific
1472
- ```
1473
-
1474
- - **Phases**: `Pre`, `Post`, `Fail`, `Change`, `Lifecycle`
1475
- - **Categories**: `tool`, `file`, `git`, `agent`, `compact`, `llm`, `mcp`, `config`, `budget`, `session`, `workflow`
1476
- - Wildcards are supported: `Pre:tool:*` matches all pre-tool events
1477
-
1478
- ### Hook Types
1479
-
1480
- | Type | Description |
1481
- |------|-------------|
1482
- | `command` | Run a shell command. Event data passed via stdin as JSON. |
1483
- | `prompt` | Send a prompt to an LLM. `$ARGUMENTS` is replaced with the event JSON. |
1484
- | `agent` | Spawn a subagent to handle the event. |
1485
- | `http` | POST the event payload to a URL. |
1486
- | `ts` | Execute a TypeScript module that exports a default handler function. |
1487
-
1488
- ### Example hooks.json
1489
-
1490
- ```json
1491
- {
1492
- "hooks": {
1493
- "Post:tool:write": [
1494
- {
1495
- "type": "command",
1496
- "command": "echo 'File written: $FILE' >> .goodvibes/write-log.txt",
1497
- "async": true,
1498
- "description": "Log all file writes"
1499
- }
1500
- ],
1501
- "Pre:tool:exec": [
1502
- {
1503
- "type": "prompt",
1504
- "prompt": "Review this command for safety: $ARGUMENTS",
1505
- "model": "claude-haiku-4-5",
1506
- "description": "Safety check before exec"
1507
- }
1508
- ]
1509
- }
1510
- }
1511
- ```
1512
-
1513
- ### Hook Chains
1514
-
1515
- Chains trigger an action only after a sequence of events occurs, with optional time windows and conditions:
1516
-
1517
- ```json
1518
- {
1519
- "chains": [
1520
- {
1521
- "name": "notify-after-agent-completes",
1522
- "steps": [
1523
- { "match": "Lifecycle:agent:spawned" },
1524
- { "match": "Lifecycle:agent:completed", "within": "5m" }
1525
- ],
1526
- "action": {
1527
- "type": "command",
1528
- "command": "notify-send 'Agent finished'"
1529
- }
1530
- }
1531
- ]
1532
- }
1533
- ```
1534
-
1535
- Hook properties: `match`, `type`, `command`/`prompt`/`url`/`path`, `async`, `once`, `timeout`, `enabled`, `name`.
1536
-
1537
- ---
1538
-
1539
- ## MCP Integration
1540
-
1541
- Connect to any MCP-compatible server from inside the running TUI:
1542
-
1543
- ```text
1544
- /mcp add filesystem npx -y @modelcontextprotocol/server-filesystem . --scope project --role filesystem --trust constrained
1545
- /mcp tools
1546
- ```
1547
-
1548
- Run `/mcp` without arguments for the fullscreen MCP workspace. The TUI writes
1549
- project-scoped servers to `.goodvibes/mcp.json` or global servers to
1550
- `~/.config/mcp/mcp.json`, reloads the live MCP registry, and makes new tools
1551
- available without restarting. Use `/mcp remove <server> [--scope project|global]`
1552
- to remove a writable config entry and `/mcp reload` if you edited MCP config
1553
- outside the TUI.
1554
-
1555
- You can also edit `.goodvibes/mcp.json` directly:
1556
-
1557
- ```json
1558
- {
1559
- "servers": [
1560
- {
1561
- "name": "filesystem",
1562
- "command": "npx",
1563
- "args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]
1564
- },
1565
- {
1566
- "name": "github",
1567
- "command": "npx",
1568
- "args": ["-y", "@modelcontextprotocol/server-github"],
1569
- "env": {
1570
- "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_..."
1571
- }
1572
- }
1573
- ]
1574
- }
187
+ git clone https://github.com/mgd34msu/goodvibes-tui.git
188
+ cd goodvibes-tui
189
+ bun install
190
+ bun run dev
1575
191
  ```
1576
192
 
1577
- MCP tools appear in the tool registry as `mcp:<server-name>:<tool-name>`. Tool schemas are loaded progressively — names and descriptions at startup, full parameter schemas on first use. Connections are auto-restarted on crash.
193
+ | Command | Does |
194
+ | --- | --- |
195
+ | `bun run dev` | Run the TUI from source |
196
+ | `bun run daemon` | Run the headless daemon/API host from source |
197
+ | `bun test` | Run the suite through the parallel per-file runner |
198
+ | `bun run build` | Compile `src/main.ts` into `dist/goodvibes` |
1578
199
 
1579
- MCP tool calls respect the `permissions.tools.mcp` setting (default: `prompt`).
200
+ The compiled binary is the TUI entrypoint; it also hosts the daemon in-process (`daemon.enabled`, on by default, loopback-bound) and the HTTP listener when `danger.httpListener` is enabled.
1580
201
 
1581
- Current MCP product loops also include:
202
+ Tests live under `src/test/`, mirroring the source tree, and cover contract, security, release-gate, runtime, renderer, panel, integration, and anti-regression cases. Several gates run alongside them in CI: byte-exact golden renderer frames, performance budgets for startup and frame composition and line production (`scripts/perf-baseline.json`), and architecture rules for import cycles, layer boundaries, source-file size, and unused renderer exports (`scripts/check-architecture.ts`).
1582
203
 
1583
- - trust posture and quarantine review
1584
- - auth-review and reconnect flows
1585
- - sandbox-backed execution when isolation is configured
1586
- - routing into dedicated MCP and Health workspaces
204
+ Some decisions worth knowing before you read the source:
1587
205
 
1588
- Useful commands:
206
+ - **Bun runtime** — native TypeScript execution, fast startup, built-in test runner.
207
+ - **Raw ANSI renderer** — the UI is written straight to the alternate screen buffer, giving direct control over every byte sent to the terminal. Conversation, panels, modals, overlays, and the footer all share that one renderer.
208
+ - **In-process agents** — agents run in the same process rather than over IPC, staying isolated through scoped tool registries and namespaced state.
209
+ - **Typed runtime store** — a plain `zustand/vanilla` store with typed selectors and dispatch paths, reachable from agents, tools, renderer, hooks, channels, and daemon surfaces alike.
210
+ - **Tree-sitter and bundled language servers** — grammars for structural analysis, outlines, and AST-level edits, several embedded as WASM for instant startup; TypeScript, Python, Bash, CSS, HTML, and JSON language servers ship as dependencies, while `rust-analyzer` and `gopls` are fetched on first use with checksum verification.
211
+ - **Backend-first external surface** — the daemon and control plane expose typed HTTP and gateway methods, so other clients do not reimplement runtime logic.
212
+ - **Crash recovery** — periodic snapshots plus an fsync-per-record append-only transcript journal, replayed at every resume seam.
213
+ - **Render coalescing and a per-message line cache** — same-tick render requests collapse into one composite frame, and transcript growth re-renders only the appended message instead of rebuilding the whole conversation.
1589
214
 
1590
- - `/mcp`
1591
- - `/mcp add <name> <command> [args...] [--scope project|global] [--role <role>] [--trust <mode>] [--env KEY=VALUE] [--path <path>] [--host <host>]`
1592
- - `/mcp remove <server> [--scope project|global]`
1593
- - `/mcp reload`
1594
- - `/mcp config`
1595
- - `/mcp tools [server]`
1596
- - `/mcp review`
1597
- - `/mcp auth-review`
1598
- - `/mcp repair`
215
+ The TUI consumes the published `@pellux/goodvibes-sdk` platform layer — pinned in `package.json` — for shared contracts, daemon routes, and transports, and keeps the terminal UI, host wiring, and product composition here. Reference consumers of those surfaces live under [`examples/`](examples/reference-operator-client/README.md).
1599
216
 
1600
- ---
1601
-
1602
- ## Plugin System
1603
-
1604
- Extend goodvibes-tui with custom plugins. Place plugin folders in `~/.goodvibes/tui/plugins/`:
1605
-
1606
- Each plugin has a `manifest.json` and an entry file (default: `index.ts`):
1607
-
1608
- ```json
1609
- {
1610
- "name": "my-plugin",
1611
- "version": "1.0.0",
1612
- "description": "My custom plugin"
1613
- }
1614
- ```
1615
-
1616
- Plugins receive a sandboxed API with:
1617
- - `registerCommand()` — add custom slash commands
1618
- - `registerProvider()` / `registerProviderInstance()` — add OpenAI-compatible or fully custom LLM providers
1619
- - `registerTool()` — add custom tools available to the LLM
1620
- - `registerGatewayMethod()` — add control-plane/API methods
1621
- - `registerChannelPlugin()` / `registerDeliveryStrategy()` — extend omnichannel surfaces
1622
- - `registerMemoryEmbeddingProvider()` — extend sqlite-vec-backed memory indexing
1623
- - `registerVoiceProvider()` / `registerMediaProvider()` / `registerWebSearchProvider()` — extend voice, media, and search families
1624
- - `onEvent()` — subscribe to typed runtime events
1625
- - `getConfig()` — read plugin-specific settings
1626
- - `log()` — emit structured plugin logs
1627
-
1628
- Manage via `/plugin enable|disable|reload|list`.
1629
-
1630
- ---
1631
-
1632
- ## Architecture
217
+ Source layout, in brief:
1633
218
 
1634
219
  ```text
1635
220
  src/
1636
- ├── main.ts / core/ — terminal entrypoint, orchestrator, transcript lifecycle
1637
- ├── renderer/ / panels/ — raw ANSI UI, overlays, control rooms, panel workspaces
1638
- ├── input/ — slash commands, keybindings, prompt/input routing
1639
- ├── providers/ — native providers, compat providers, discovery, synthetic failover, model catalog
1640
- ├── tools/ — re-export of SDK-provided built-in tools plus TUI-local tool guards
1641
- ├── agents/ — in-process agents, WRFC, archetypes, worktrees, reports
1642
- ├── automation/ — schedules, routes, job persistence, managed automation runtime
1643
- ├── channels/ / adapters/ — channel plugins, reply pipeline, delivery routing, webhook adapters
1644
- ├── daemon/ / control-plane/ — local daemon host, HTTP routes, gateway/catalog/operator surfaces
1645
- ├── artifacts/ — durable file/object storage used by media, knowledge, export, and delivery
1646
- ├── knowledge/ — connectors, extractors, SQL-backed graph store, GraphQL, projections, consolidation
1647
- ├── web-search/ — provider-backed search runtime and normalization layer
1648
- ├── voice/ — TTS/STT/realtime provider runtime
1649
- ├── media/ — media understanding/generation provider registry
1650
- ├── multimodal/ — unified image/audio/video/document analysis and packet/write-back logic
1651
- ├── runtime/ — typed store, events, emitters, tasks, notifications, auth, diagnostics, eval, remote, sandbox
1652
- ├── config/ / security/ — settings, secrets, services, subscriptions, local auth
1653
- ├── hooks/ / mcp/ / plugins/ — extensibility and external tool surfaces
1654
- ├── export/ / profiles/ / sessions/ — data export, profiles, persistence
1655
- └── discovery/ / intelligence/ — local server discovery plus tree-sitter/LSP intelligence
221
+ ├── main.ts, core/ terminal entrypoint, orchestrator, conversation and transcript state
222
+ ├── renderer/ raw ANSI compositor, overlays, modals, fullscreen workspaces
223
+ ├── panels/ panel manager, the Fleet control room, git/diff/cost/token consoles
224
+ ├── input/ slash commands, keybindings, composer, pickers, settings modals
225
+ ├── runtime/ bootstrap wiring, typed store, service composition, session recovery
226
+ ├── shell/ shell-level modal openers, blocking input, retry affordances
227
+ ├── config/ settings layering, surface roots, secrets, credential availability
228
+ ├── permissions/ approval cards, hunk selection, sandbox exec gate
229
+ ├── cli/ flag parsing, management verbs, doctor, launch-time self-update
230
+ ├── daemon/ daemon CLI, lifecycle, request handlers, service commands
231
+ ├── tools/, mcp/, plugins/ TUI-local tool guards, MCP hot reload, plugin loader
232
+ ├── audio/, export/ turn playback and speech routing, cost pricing and gist upload
233
+ ├── verification/, work-plans/, widget/ live verifier and ledger, work-plan store, widget module
234
+ ├── utils/, types/, scripts/ formatting and clipboard helpers, local types, message script
235
+ └── test/ the suite, mirroring the tree above
1656
236
  ```
1657
237
 
1658
- ### Key Design Decisions
1659
-
1660
- - **Bun runtime** — native TypeScript execution, fast startup, built-in test runner
1661
- - **Raw ANSI renderer** — direct control over every byte sent to the terminal
1662
- - **In-process agents** — agents share the same process and memory, avoiding IPC overhead while maintaining isolation through scoped registries and namespaced state
1663
- - **Tree-sitter for code intelligence** — 17 language grammars (TypeScript, TSX, JavaScript, Python, Rust, Go, Java, C, C++, Ruby, Bash, JSON, YAML, TOML, CSS, HTML, Markdown) for structural analysis, outline extraction, and AST-level edits — with 6 (TypeScript, TSX, JavaScript, Python, JSON, CSS) embedded as WASM for instant startup
1664
- - **Bundled language servers** — TypeScript, Python, Bash, CSS, HTML, and JSON language servers ship as npm dependencies and work out of the box. Rust (`rust-analyzer`) and Go (`gopls`) are downloaded automatically on first use with SHA256 integrity verification. No manual LSP setup required.
1665
- - **SQL.js for analytics** — WASM SQLite for in-process tool call telemetry
1666
- - **Zustand vanilla store** — a plain Zustand store with typed selectors and dispatch paths, usable from agents, tools, renderer, hooks, channels, and daemon surfaces
1667
- - **Agent Client Protocol** — subagents communicate via @agentclientprotocol/sdk over stdio ndJsonStream
1668
- - **Backend-first external surface** — the daemon/control plane exposes typed HTTP/gateway methods for knowledge, artifacts, media, search, channels, and remote peers so future clients do not have to reimplement runtime logic
1669
- - **Plugin system** — manifest.json + sandboxed API surface for commands, providers, tools, gateway methods, channels, embeddings, voice, media, and search
1670
- - **Crash recovery** — periodic JSONL snapshots with recovery prompt on next startup; an fsync-per-record append-only transcript journal between snapshots is replayed at every resume seam (command resume, Ctrl+R crash recovery, panel resume) for SIGKILL-proof durability
1671
- - **Golden-frame regression harness** — 35 committed byte-exact reference frames (including the splash at three widths) pin the renderer's output; any unintended visual change fails CI
1672
- - **Render coalescing** — same-tick render requests collapse into one composite via `src/runtime/render-scheduler.ts`, so a streaming burst pays for one frame instead of several
1673
- - **Per-message line cache** — `src/core/conversation-line-cache.ts` renders only the appended message on transcript growth (~0.9ms) instead of rebuilding the whole conversation (~45ms at 1,000 messages)
1674
-
1675
238
  ---
1676
239
 
1677
- ## Development
1678
-
1679
- ### Run in dev mode
1680
-
1681
- ```sh
1682
- bun run dev
1683
- ```
1684
-
1685
- ### Run tests
1686
-
1687
- ```sh
1688
- bun test
1689
- ```
1690
-
1691
- The suite spans 623 test files (contract, security, release gate, runtime, renderer, panel, integration, and UX anti-regression), run through a parallel per-file runner (`scripts/run-tests.ts`). Performance budgets run as a CI gate — the build fails if startup load, frame-composite p95/p99, or any line-production budget (transcript build/append/resize, panel two-pane build, markdown render, code-block render on both tokenizer paths, overlay open) exceeds the ratcheted values in `scripts/perf-baseline.json`. Architecture gates run alongside: import-cycle and layer rules, an 800-line cap on non-test source files, a raw-hex-literal ratchet, icon-uniqueness and panel contract-parity checks, and a no-unused-exports rule for the renderer layer (`scripts/check-architecture.ts`, `scripts/no-unused-exports-rule.ts`).
1692
-
1693
- ### Build standalone binary
1694
-
1695
- ```sh
1696
- bun run build
1697
- # outputs dist/goodvibes
1698
- ```
1699
-
1700
- ### Project structure conventions
240
+ ## Stability
1701
241
 
1702
- - Built-in tool implementations and parameter schemas live in the extracted `@pellux/goodvibes-sdk` package (`@pellux/goodvibes-sdk/platform/tools`); `src/tools/` re-exports `registerAllTools` and keeps only TUI-local pieces such as the WRFC agent guard
1703
- - Tests mirror the source tree under `src/test/`
1704
- - Project runtime data such as sessions, hooks, MCP config, artifacts, and local state lives under `.goodvibes/` in the working directory
1705
- - Global TUI settings live in `~/.goodvibes/tui/settings.json`; project overrides live in `.goodvibes/tui/settings.json`
1706
- - Secure secrets live in `.goodvibes/tui/secrets.enc` or `~/.goodvibes/tui/secrets.enc`; plaintext compatibility stores use `.goodvibes/goodvibes.secrets.json`
1707
- - Service registry entries live in `.goodvibes/tui/services.json`; custom provider JSON lives in `~/.goodvibes/tui/providers/`
1708
- - Agent archetypes go in `.goodvibes/agents/*.md`
1709
- - MCP server config goes in `.goodvibes/mcp.json`
1710
- - Hook config goes in `.goodvibes/hooks.json` (or the file set in `tools.hooksFile`)
1711
-
1712
- ---
242
+ From 1.0.0 the project follows semver: incompatible changes to CLI flags, config keys, slash commands, key bindings, daemon routes, and on-disk layouts land only in major releases, and deprecations are noted in [CHANGELOG.md](CHANGELOG.md) first. Documentation always describes the **current** behavior, not historical behavior.
1713
243
 
1714
244
  ## License
1715
245