v0.6.2 (2026-02-10)
This release introduces the grove-daemon (groved), shifting state management to a centralized background process. This includes the new core groved subcommand for lifecycle management (d75b602), a robust client infrastructure enabling local/remote fallback (891966f), and a collector engine (42df574) that gathers git, session, and workspace data in the background.
The daemon now supports SSE streaming for real-time state updates (1f766b0) and uses fsnotify for instant session detection (d5a9b52). Performance has been significantly optimized by reusing cached workspace data and reducing CPU-intensive IO operations (3d82b8d), alongside dynamic scan intervals that adapt based on the number of focused workspaces (2484832).
Workspace discovery has been centralized and enhanced to support generic note groups and full worktree resolution (4f5419f). The enrichment system now includes release information, binary status, and context statistics (30347a9), providing comprehensive data for consumer tools like nav.
Features
- Add
core grovedsubcommand for daemon management (d75b602) - Add daemon client infrastructure with local/remote fallback (891966f)
- Implement Phase 4 collector engine for background state aggregation (42df574)
- Add RemoteClient and SSE streaming support (1f766b0)
- Add monitoring, config inspection, and focus-based scanning (b9b3c71)
- Implement dynamic scan intervals based on focus count (2484832)
- Implement Phase 2 session collector with fsnotify support (d5a9b52)
- Implement Phase 3 session registry with full discovery (4f5419f)
- Add Release, Binary, and CX stats enrichment support (30347a9)
Bug Fixes
- Reduce CPU usage by reusing cached workspace data (3d82b8d)
File Changes
cmd/core/main.go | 1 +
cmd/groved.go | 395 +++++++++++++++++
config/config.go | 1 +
config/types.go | 12 +
internal/daemon/collector/git.go | 170 ++++++++
internal/daemon/collector/interface.go | 19 +
internal/daemon/collector/note.go | 114 +++++
internal/daemon/collector/plan.go | 110 +++++
internal/daemon/collector/session.go | 614 +++++++++++++++++++++++++++
internal/daemon/collector/workspace.go | 94 +++++
internal/daemon/engine/engine.go | 70 ++++
internal/daemon/pidfile/pidfile.go | 67 +++
internal/daemon/server/server.go | 319 ++++++++++++++
internal/daemon/store/store.go | 152 +++++++
internal/daemon/store/types.go | 30 ++
pkg/daemon/client.go | 75 ++++
pkg/daemon/factory.go | 60 +++
pkg/daemon/local.go | 95 +++++
pkg/daemon/remote.go | 313 ++++++++++++++
pkg/enrichment/enrich.go | 151 +++++++
pkg/enrichment/notes.go | 67 +++
pkg/enrichment/plans.go | 197 +++++++++
pkg/enrichment/tools.go | 191 +++++++++
pkg/enrichment/types.go | 67 +++
pkg/paths/xdg.go | 24 ++
pkg/sessions/discovery.go | 744 +++++++++++++++++++++++++++++++++
pkg/workspace/provider.go | 17 +-
util/frontmatter/parser.go | 98 +++++
28 files changed, 4263 insertions(+), 4 deletions(-)v0.6.0 (2026-02-02)
Configuration capabilities have been expanded with support for TOML files (31f9a44), a new GROVE_CONFIG_OVERLAY mechanism for isolated environments (876b799), and integrated hooks configuration within the main grove.yml schema (fca2cdb). Path resolution has been overhauled to adhere to XDG standards (f6483cb), accompanied by a new paths command for discovery (7e5ea37) and support for binary path overrides via GROVE_BIN (c8e50d0).
Workspace management improvements include configurable cx repository locations (c79f801) and better organization of docgen assets (a7359d8). The CLI help system now supports styled examples (0b337f4), while tmux integration received updates for socket-aware command execution (6d7fd1a) and server-level environment variable management (ac2f07e).
Features
- Add TOML configuration file support (31f9a44)
- Support cmd.Example in styled help (0b337f4)
- Add hooks configuration to grove.yml schema (fca2cdb)
- Add GROVE_BIN env var for binary path override (c8e50d0)
- Add paths command for XDG directory discovery (7e5ea37)
- Add XDG-compliant path resolution package (f6483cb)
- Add context.repos_dir to configure cx repo location (c79f801)
- Add GetDocgenDir method to NotebookLocator (534c1b7)
- Add GROVE_CONFIG_OVERLAY for isolated environments (876b799)
- Add SetGlobalEnvironment for server-level env vars (ac2f07e)
- Add Command() helper for socket-aware exec.Cmd (6d7fd1a)
- Organize docgen prompts in prompts/ subdirectory (a7359d8)
- Add descriptions to choices (b1427e7)
Bug Fixes
- Make version field optional in config schema (ee30a6e)
- Add Hooks to config merge logic (a28d7d8)
- Use XDG paths for repo manager and workspace discovery (28e07ad)
- Remove common paths from nb resolver (3afc381)
- Get actual window name instead of assuming session name (ff9ccc8)
- Dont bold status text e.g. success, error, warning etc (65fbb00)
- Update VERSION_PKG to grovetools/core path (c727ade)
Code Refactoring
- Use extensions for hooks config instead of struct field (4d897d4)
- Update docgen title to match package name (32ef41c)
Chores
- Add MIT License (fee40be)
- Update schemas, readme, makefile, cli ref, docs (3fd1819)
- Add concept lookup instructions to CLAUDE.md (30f3410)
- Update readme/overview (594ffd7)
- Move README template to notebook (7e25ad3)
- Remove docgen files from repo (75fddb7)
- Move docs.rules to .cx/ directory (8ad28fd)
- Update go.mod for grovetools migration (0627935)
File Changes
.cx/docs.rules | 10 +
CLAUDE.md | 13 ++
LICENSE | 21 ++
Makefile | 2 +-
README.md | 131 +++++-------
cli/help.go | 47 ++++-
cmd/core/main.go | 1 +
cmd/paths.go | 54 +++++
config/config.go | 322 ++++++++++++++++++++++++-----
config/merge.go | 13 +-
config/schema.go | 14 +-
config/schema/definitions/base.schema.json | 166 +++++++++++----
config/types.go | 163 +++++++--------
docs/01-overview.md | 172 ++++-----------
docs/02-cli-reference.md | 282 +++++++++++++++++++++++++
docs/03-configuration.md | 193 +++++++++++++++++
docs/README.md.tpl | 7 -
docs/docgen.config.yml | 22 --
docs/docs.rules | 1 -
go.mod | 10 +-
go.sum | 38 +++-
grove.toml | 13 ++
grove.yml | 13 --
logging.schema.json | 2 +-
logging/config.go | 36 ++--
notebook.schema.json | 57 +++--
pkg/docs/docs.json | 55 ++++-
pkg/models/hooks.go | 15 --
pkg/paths/xdg.go | 146 +++++++++++++
pkg/repo/manager.go | 22 +-
pkg/sessions/registry.go | 7 +-
pkg/tmux/client.go | 11 +
pkg/tmux/launch.go | 10 +-
pkg/tmux/session.go | 13 ++
pkg/workspace/discover.go | 9 +-
pkg/workspace/discover_test.go | 10 +
pkg/workspace/notebook_locator.go | 36 +++-
pkg/workspace/notebook_resolver.go | 24 +--
schema/definitions/base.schema.json | 253 ++++++++++++++++++++---
schema/grove.embedded.schema.json | 237 ++++++++++++++++++---
tests/e2e/main.go | 1 +
tests/e2e/scenarios_config.go | 79 +++++++
tui/theme/theme.go | 21 +-
43 files changed, 2120 insertions(+), 632 deletions(-)v0.5.0 (2026-01-14)
This release introduces a complete overhaul of the logging system, a new interactive logs TUI, a reusable embedded Neovim component, and major improvements to the workspace discovery and path resolution systems. The new unified logging API provides a chainable builder pattern for creating both structured and pretty-printed log output from a single call, with extensive configuration options for component-based filtering (dbc1670, c455796). The new core logs command leverages this system to provide a powerful tool for viewing logs across an entire ecosystem, complete with a full-featured TUI for interactive browsing, searching, and filtering (ce02c65, 769ec18).
Workspace management has been significantly enhanced with the introduction of a centralized NotebookLocator for consistent, configuration-driven path resolution for notes, plans, and chats across both local and centralized notebook structures (f6ded98, d9a4582). Path handling is now more robust with new utilities that correctly normalize for case-sensitivity on different operating systems (6ea4031, dfed5b8), and a new utility prevents bugs related to deleted worktrees (210604e, ed647c8). The alias resolution system has also been centralized into grove-core and expanded to natively support notebook resources (9c81658, 8574644).
For developers, this release adds a build_after field to grove.yml for defining build dependencies (b77e7bb), a reusable embedded Neovim TUI component (3a07cca), and a comprehensive set of over 100 theme icons with Nerd Font and ASCII fallbacks to create richer and more informative TUIs across the ecosystem (bccd627, 081b068, 667bf5a).
Features
- Add unified logging API with a chainable builder pattern for structured and pretty output (dbc1670)
- Implement
core logscommand with text, JSON, and interactive TUI modes (ce02c65) - Add extensive component-based log filtering with CLI overrides and filter statistics (c455796)
- Add reusable embedded Neovim TUI component with a demo command (3a07cca)
- Add centralized
NotebookLocatorfor consistent notebook, plan, and chat path resolution (f6ded98) - Add
IsZombieWorktreeutility to prevent bugs from deleted worktrees (210604e) - Add
CanonicalPathfunction for case-correct path normalization on macOS (6ea4031) - Move and enhance alias resolver from
grove-contexttogrove-corefor shared use (9c81658) - Add native support for notebook resource aliases (e.g.,
@a:nb:notebook:path) (8574644) - Add
build_afterfield togrove.ymlfor defining build dependency order (b77e7bb) - Add comprehensive set of over 100 theme icons with Nerd Font and ASCII fallbacks (bccd627)
- Add support for user-configurable note types with TUI metadata (d9a4582)
- Add global writer for dynamic TUI output redirection, fixing output mangling (0dce554)
- Add workspace-aware path resolution for log files (63767f9)
- Add reusable scrollbar utility package for TUI components (d506f4a)
- Add
StreamWriterutility for streaming command output to TUIs without splitting lines (abeacbe) - Add support for global override configuration file (
~/.config/grove/grove.override.yml) (8b2bb9d) - Add
core config-layerscommand to diagnose configuration merging (0c3e40f) - Add session registry for tracking live agent sessions from
grove-hooks(13d2214)
Bug Fixes
- Fix path normalization to correctly handle filesystem case on macOS (dfed5b8)
- Prevent recreation of “zombie” worktree directories by long-running loggers (ed647c8, de8429f)
- Fix
FindEcosystemConfigto correctly recognize ecosystem worktrees (7489d3d) - Prevent logviewer deadlock when using
StreamWriterfor TUI output (b89a451) - Require
nb:prefix for notebook aliases to resolve ambiguity with project paths (bf00107) - Fix TUI log filtering to respect CLI override flags (3cf7532)
- Fix logviewer scrollbar calculation to account for text wrapping (e52a77b)
- Make default log filtering show all logs unless explicitly configured (466153c)
- Fix
tmuxcommands to use exact session name matching to prevent ambiguity (8651e9b) - Fix
core ws listto correctly handle ecosystem worktree contents in focus mode (4b7b0db)
Miscellaneous
- Standardize CI release workflows and disable CI runs on branches to reduce cost (bba4be4)
- Migrate
docgenprompts to the notebook workspace (a61df2d)
File Changes
.cx/core.rules | 3 +
.cx/dev-no-tests.rules | 19 +
.cx/dev-with-tests.rules | 16 +
.cx/docs-only.rules | 8 +
.cx/pkg-only.rules | 1 +
.cx/workspace-only.rules | 1 +
.github/workflows/ci.yml | 52 ++
.github/workflows/release.yml | 38 +-
.gitignore | 56 +-
CLAUDE.md | 30 +
Makefile | 102 +-
README.md | 4 +-
cmd/config.go | 60 ++
cmd/core/main.go | 29 +
cmd/editor.go | 78 ++
cmd/logs.go | 732 +++++++++++++++
cmd/logs_tui.go | 1334 +++++++++++++++++++++++++++
cmd/nvim_demo.go | 342 +++++++
cmd/open_in_window.go | 51 +
cmd/tmux.go | 18 +
cmd/tmux_editor.go | 147 +++
cmd/version.go | 36 +
cmd/ws.go | 122 +++
command/builder.go | 29 +-
command/executor.go | 31 +
config/config.go | 340 ++++---
config/config_test.go | 77 ++
config/merge.go | 108 ++-
config/schema.go | 72 +-
config/schema/definitions/base.schema.json | 211 +++++
config/types.go | 271 +++++-
config/validator.go | 207 ----
docs/01-overview.md | 170 +++-
docs/docgen.config.yml | 35 +-
docs/prompts/01-overview.md | 30 -
fs/utils.go | 63 +-
git/extended_status.go | 91 ++
git/status.go | 54 +-
git/utils.go | 24 +-
git/worktree.go | 27 +-
go.mod | 25 +-
go.sum | 53 +-
grove.yml | 12 +-
logging.schema.json | 109 +++
logging/config.go | 90 +-
logging/context_writer.go | 24 +
logging/formatter.go | 8 +-
logging/global_writer.go | 43 +
logging/logger.go | 268 +++++-
logging/logger_test.go | 635 ++++++++++++-
logging/pretty.go | 188 ++--
logging/unified.go | 318 +++++++
logging/unified_test.go | 414 +++++++++
logging/zombie_writer.go | 110 +++
notebook.schema.json | 71 ++
pkg/alias/notebook.go | 17 +
pkg/alias/resolver.go | 425 +++++++++
pkg/alias/resolver_test.go | 143 +++
pkg/docs/docs.json | 14 +-
pkg/logging/logutil/finder.go | 87 ++
pkg/models/session.go | 5 +
pkg/process/process.go | 31 +
pkg/profiling/cobra.go | 79 ++
pkg/profiling/timer.go | 142 +++
pkg/repo/manager.go | 440 +++++++--
pkg/sessions/metadata.go | 22 +
pkg/sessions/registry.go | 132 +++
pkg/tmux/client.go | 47 +
pkg/tmux/launch.go | 42 +
pkg/tmux/session.go | 284 +++++-
pkg/tmux/tui.go | 258 ++++++
pkg/tmux/types.go | 21 +
pkg/workspace/discover.go | 582 ++++++++----
pkg/workspace/discover_test.go | 8 +-
pkg/workspace/enrich.go | 222 -----
pkg/workspace/filter/filter.go | 115 ++-
pkg/workspace/history.go | 127 +++
pkg/workspace/identifier.go | 73 +-
pkg/workspace/identifier_test.go | 72 +-
pkg/workspace/lookup.go | 448 +++++++--
pkg/workspace/lookup_test.go | 323 ++++++-
pkg/workspace/notebook_locator.go | 777 ++++++++++++++++
pkg/workspace/notebook_locator_test.go | 116 +++
pkg/workspace/notebook_resolver.go | 316 +++++++
pkg/workspace/prepare.go | 83 +-
pkg/workspace/prepare_test.go | 51 +-
pkg/workspace/provider.go | 245 +++++
pkg/workspace/provider_test.go | 183 ++++
pkg/workspace/submodules.go | 142 +--
pkg/workspace/submodules_test.go | 95 +-
pkg/workspace/transform.go | 484 ++++++++--
pkg/workspace/transform_test.go | 291 ++++++
pkg/workspace/types.go | 322 ++++++-
pkg/workspace/utils.go | 19 +
pkg/workspace/zombie.go | 68 ++
schema/definitions/base.schema.json | 113 +++
schema/grove.embedded.schema.json | 113 +++
schema/manifest.go | 18 +
schema/validator.go | 71 ++
starship/command.go | 158 ++++
starship/provider.go | 30 +
state/state.go | 158 ++++
state/state_test.go | 167 ++++
tests/e2e/main.go | 82 ++
tests/e2e/scenarios_basic.go | 42 +
tests/e2e/scenarios_config.go | 503 ++++++++++
tests/e2e/scenarios_log_creation.go | 526 +++++++++++
tests/e2e/scenarios_logging.go | 1031 +++++++++++++++++++++
tests/e2e/scenarios_logs_filtering.go | 240 +++++
tests/e2e/scenarios_logs_tui.go | 1000 ++++++++++++++++++++
tests/e2e/scenarios_logs_tui_filtering.go | 186 ++++
tests/e2e/scenarios_logs_tui_sorting.go | 508 ++++++++++
tests/e2e/scenarios_notebooks_debug.go | 272 ++++++
tests/e2e/scenarios_workspace.go | 226 +++++
tests/e2e/scenarios_workspace_advanced.go | 481 ++++++++++
tests/e2e/scenarios_workspace_edge_cases.go | 513 ++++++++++
tests/e2e/scenarios_zombie_worktrees.go | 202 ++++
tests/e2e/test_utils.go | 25 +
tools/logging-schema-generator/main.go | 37 +
tools/notebook-schema-generator/main.go | 37 +
tools/schema-composer/main.go | 163 ++++
tools/schema-generator/main.go | 30 +
tui/components/components.go | 2 +-
tui/components/help/help.go | 264 ++++--
tui/components/jsontree/keymap.go | 113 +++
tui/components/jsontree/model.go | 969 +++++++++++++++++++
tui/components/logviewer/logviewer.go | 311 +++++++
tui/components/logviewer/writer.go | 62 ++
tui/components/navigator/io.go | 9 +-
tui/components/navigator/keymap.go | 6 +-
tui/components/navigator/model.go | 105 ++-
tui/components/nvim/model.go | 303 ++++++
tui/components/nvim/nvim.go | 538 +++++++++++
tui/components/table/table.go | 87 +-
tui/keymap/keymap.go | 1 -
tui/theme/icons.go | 777 ++++++++++++++++
tui/theme/theme.go | 553 ++++++++---
tui/utils/scrollbar/scrollbar.go | 100 ++
tui/wsnav/io.go | 14 +
tui/wsnav/model.go | 68 ++
tui/wsnav/update.go | 42 +
tui/wsnav/util.go | 39 +
tui/wsnav/view.go | 241 +++++
tui/wsnav/wsnav.go | 60 ++
util/pathutil/normalize.go | 119 +++
145 files changed, 24669 insertions(+), 1884 deletions(-)v0.4.2 (2026-01-14)
This release introduces a complete overhaul of the logging system, a new interactive logs TUI, a reusable embedded Neovim component, and major improvements to the workspace discovery and path resolution systems. The new unified logging API provides a chainable builder pattern for creating both structured and pretty-printed log output from a single call, with extensive configuration options for component-based filtering (dbc1670, c455796). The new core logs command leverages this system to provide a powerful tool for viewing logs across an entire ecosystem, complete with a full-featured TUI for interactive browsing, searching, and filtering (ce02c65, 769ec18).
Workspace management has been significantly enhanced with the introduction of a centralized NotebookLocator for consistent, configuration-driven path resolution for notes, plans, and chats across both local and centralized notebook structures (f6ded98, d9a4582). Path handling is now more robust with new utilities that correctly normalize for case-sensitivity on different operating systems (6ea4031, dfed5b8), and a new IsZombieWorktree utility prevents bugs related to deleted worktrees (210604e, ed647c8). The alias resolution system has also been centralized into grove-core and expanded to natively support notebook resources (9c81658, 8574644).
For developers, this release adds a build_after field to grove.yml for defining build dependencies (b77e7bb), a reusable embedded Neovim TUI component (3a07cca), and a comprehensive set of over 100 theme icons with Nerd Font and ASCII fallbacks to create richer and more informative TUIs across the ecosystem (bccd627, 081b068, 667bf5a).
Features
- Add unified logging API with a chainable builder pattern for structured and pretty output (dbc1670)
- Implement
core logscommand with text, JSON, and interactive TUI modes (ce02c65) - Add extensive component-based log filtering with CLI overrides and filter statistics (c455796)
- Add reusable embedded Neovim TUI component with a demo command (3a07cca)
- Add centralized
NotebookLocatorfor consistent notebook, plan, and chat path resolution (f6ded98) - Add
IsZombieWorktreeutility to prevent bugs from deleted worktrees (210604e) - Add
CanonicalPathfunction for case-correct path normalization on macOS (6ea4031) - Move and enhance alias resolver from
grove-contexttogrove-corefor shared use (9c81658) - Add native support for notebook resource aliases (e.g.,
@a:nb:notebook:path) (8574644) - Add
build_afterfield togrove.ymlfor defining build dependency order (b77e7bb) - Add comprehensive set of over 100 theme icons with Nerd Font and ASCII fallbacks (bccd627)
- Add support for user-configurable note types with TUI metadata (d9a4582)
- Add global writer for dynamic TUI output redirection, fixing output mangling (0dce554)
- Add workspace-aware path resolution for log files (63767f9)
- Add reusable scrollbar utility package for TUI components (d506f4a)
- Add
StreamWriterutility for streaming command output to TUIs without splitting lines (abeacbe) - Add support for global override configuration file (
~/.config/grove/grove.override.yml) (8b2bb9d) - Add
core config-layerscommand to diagnose configuration merging (0c3e40f) - Add session registry for tracking live agent sessions from
grove-hooks(13d2214)
Bug Fixes
- Fix path normalization to correctly handle filesystem case on macOS (dfed5b8)
- Prevent recreation of “zombie” worktree directories by long-running loggers (ed647c8, de8429f)
- Fix
FindEcosystemConfigto correctly recognize ecosystem worktrees (7489d3d) - Prevent logviewer deadlock when using
StreamWriterfor TUI output (b89a451) - Require
nb:prefix for notebook aliases to resolve ambiguity with project paths (bf00107) - Fix TUI log filtering to respect CLI override flags (3cf7532)
- Fix logviewer scrollbar calculation to account for text wrapping (e52a77b)
- Make default log filtering show all logs unless explicitly configured (466153c)
- Fix
tmuxcommands to use exact session name matching to prevent ambiguity (8651e9b) - Fix
core ws listto correctly handle ecosystem worktree contents in focus mode (4b7b0db)
Miscellaneous
- Standardize CI release workflows and disable CI runs on branches to reduce cost (bba4be4)
- Migrate
docgenprompts to the notebook workspace (a61df2d)
File Changes
.cx/core.rules | 3 +
.cx/dev-no-tests.rules | 19 +
.cx/dev-with-tests.rules | 16 +
.cx/docs-only.rules | 8 +
.cx/pkg-only.rules | 1 +
.cx/workspace-only.rules | 1 +
.github/workflows/ci.yml | 52 ++
.github/workflows/release.yml | 38 +-
.gitignore | 56 +-
CLAUDE.md | 30 +
Makefile | 102 +-
README.md | 4 +-
cmd/config.go | 60 ++
cmd/core/main.go | 29 +
cmd/editor.go | 78 ++
cmd/logs.go | 732 +++++++++++++++
cmd/logs_tui.go | 1334 +++++++++++++++++++++++++++
cmd/nvim_demo.go | 342 +++++++
cmd/open_in_window.go | 51 +
cmd/tmux.go | 18 +
cmd/tmux_editor.go | 147 +++
cmd/version.go | 36 +
cmd/ws.go | 122 +++
command/builder.go | 29 +-
command/executor.go | 31 +
config/config.go | 340 ++++---
config/config_test.go | 77 ++
config/merge.go | 108 ++-
config/schema.go | 72 +-
config/schema/definitions/base.schema.json | 211 +++++
config/types.go | 271 +++++-
config/validator.go | 207 ----
docs/01-overview.md | 170 +++-
docs/docgen.config.yml | 35 +-
docs/prompts/01-overview.md | 30 -
fs/utils.go | 63 +-
git/extended_status.go | 91 ++
git/status.go | 54 +-
git/utils.go | 24 +-
git/worktree.go | 27 +-
go.mod | 25 +-
go.sum | 53 +-
grove.yml | 12 +-
logging.schema.json | 109 +++
logging/config.go | 90 +-
logging/context_writer.go | 24 +
logging/formatter.go | 8 +-
logging/global_writer.go | 43 +
logging/logger.go | 268 +++++-
logging/logger_test.go | 635 ++++++++++++-
logging/pretty.go | 188 ++--
logging/unified.go | 318 +++++++
logging/unified_test.go | 414 +++++++++
logging/zombie_writer.go | 110 +++
notebook.schema.json | 71 ++
pkg/alias/notebook.go | 17 +
pkg/alias/resolver.go | 425 +++++++++
pkg/alias/resolver_test.go | 143 +++
pkg/docs/docs.json | 14 +-
pkg/logging/logutil/finder.go | 87 ++
pkg/models/session.go | 5 +
pkg/process/process.go | 31 +
pkg/profiling/cobra.go | 79 ++
pkg/profiling/timer.go | 142 +++
pkg/repo/manager.go | 440 +++++++--
pkg/sessions/metadata.go | 22 +
pkg/sessions/registry.go | 132 +++
pkg/tmux/client.go | 47 +
pkg/tmux/launch.go | 42 +
pkg/tmux/session.go | 284 +++++-
pkg/tmux/tui.go | 258 ++++++
pkg/tmux/types.go | 21 +
pkg/workspace/discover.go | 582 ++++++++----
pkg/workspace/discover_test.go | 8 +-
pkg/workspace/enrich.go | 222 -----
pkg/workspace/filter/filter.go | 115 ++-
pkg/workspace/history.go | 127 +++
pkg/workspace/identifier.go | 73 +-
pkg/workspace/identifier_test.go | 72 +-
pkg/workspace/lookup.go | 448 +++++++--
pkg/workspace/lookup_test.go | 323 ++++++-
pkg/workspace/notebook_locator.go | 777 ++++++++++++++++
pkg/workspace/notebook_locator_test.go | 116 +++
pkg/workspace/notebook_resolver.go | 316 +++++++
pkg/workspace/prepare.go | 83 +-
pkg/workspace/prepare_test.go | 51 +-
pkg/workspace/provider.go | 245 +++++
pkg/workspace/provider_test.go | 183 ++++
pkg/workspace/submodules.go | 142 +--
pkg/workspace/submodules_test.go | 95 +-
pkg/workspace/transform.go | 484 ++++++++--
pkg/workspace/transform_test.go | 291 ++++++
pkg/workspace/types.go | 322 ++++++-
pkg/workspace/utils.go | 19 +
pkg/workspace/zombie.go | 68 ++
schema/definitions/base.schema.json | 113 +++
schema/grove.embedded.schema.json | 113 +++
schema/manifest.go | 18 +
schema/validator.go | 71 ++
starship/command.go | 158 ++++
starship/provider.go | 30 +
state/state.go | 158 ++++
state/state_test.go | 167 ++++
tests/e2e/main.go | 82 ++
tests/e2e/scenarios_basic.go | 42 +
tests/e2e/scenarios_config.go | 503 ++++++++++
tests/e2e/scenarios_log_creation.go | 526 +++++++++++
tests/e2e/scenarios_logging.go | 1031 +++++++++++++++++++++
tests/e2e/scenarios_logs_filtering.go | 240 +++++
tests/e2e/scenarios_logs_tui.go | 1000 ++++++++++++++++++++
tests/e2e/scenarios_logs_tui_filtering.go | 186 ++++
tests/e2e/scenarios_logs_tui_sorting.go | 508 ++++++++++
tests/e2e/scenarios_notebooks_debug.go | 272 ++++++
tests/e2e/scenarios_workspace.go | 226 +++++
tests/e2e/scenarios_workspace_advanced.go | 481 ++++++++++
tests/e2e/scenarios_workspace_edge_cases.go | 513 ++++++++++
tests/e2e/scenarios_zombie_worktrees.go | 202 ++++
tests/e2e/test_utils.go | 25 +
tools/logging-schema-generator/main.go | 37 +
tools/notebook-schema-generator/main.go | 37 +
tools/schema-composer/main.go | 163 ++++
tools/schema-generator/main.go | 30 +
tui/components/components.go | 2 +-
tui/components/help/help.go | 264 ++++--
tui/components/jsontree/keymap.go | 113 +++
tui/components/jsontree/model.go | 969 +++++++++++++++++++
tui/components/logviewer/logviewer.go | 311 +++++++
tui/components/logviewer/writer.go | 62 ++
tui/components/navigator/io.go | 9 +-
tui/components/navigator/keymap.go | 6 +-
tui/components/navigator/model.go | 105 ++-
tui/components/nvim/model.go | 303 ++++++
tui/components/nvim/nvim.go | 538 +++++++++++
tui/components/table/table.go | 87 +-
tui/keymap/keymap.go | 1 -
tui/theme/icons.go | 777 ++++++++++++++++
tui/theme/theme.go | 553 ++++++++---
tui/utils/scrollbar/scrollbar.go | 100 ++
tui/wsnav/io.go | 14 +
tui/wsnav/model.go | 68 ++
tui/wsnav/update.go | 42 +
tui/wsnav/util.go | 39 +
tui/wsnav/view.go | 241 +++++
tui/wsnav/wsnav.go | 60 ++
util/pathutil/normalize.go | 119 +++
145 files changed, 24669 insertions(+), 1884 deletions(-)v0.4.2 (2026-01-14)
This release introduces a complete overhaul of the logging system, a new interactive logs TUI, a reusable embedded Neovim component, and major improvements to the workspace discovery and path resolution systems. The new unified logging API provides a chainable builder pattern for creating both structured and pretty-printed log output from a single call, with extensive configuration options for component-based filtering (dbc1670, c455796). The new core logs command leverages this system to provide a powerful tool for viewing logs across an entire ecosystem, complete with a full-featured TUI for interactive browsing, searching, and filtering (ce02c65, 769ec18).
Workspace management has been significantly enhanced with the introduction of a centralized NotebookLocator for consistent, configuration-driven path resolution for notes, plans, and chats across both local and centralized notebook structures (f6ded98, d9a4582). Path handling is now more robust with new utilities that correctly normalize for case-sensitivity on different operating systems (6ea4031, dfed5b8), and a new a new utility prevents bugs related to deleted worktrees (210604e, ed647c8). The alias resolution system has also been centralized into grove-core and expanded to natively support notebook resources (9c81658, 8574644).
For developers, this release adds a build_after field to grove.yml for defining build dependencies (b77e7bb), a reusable/experimental embedded Neovim TUI component (3a07cca), and a comprehensive set of over 100 theme icons with Nerd Font and ASCII fallbacks to create richer and more informative TUIs across the ecosystem (bccd627, 081b068, 667bf5a).
Features
- Add unified logging API with a chainable builder pattern for structured and pretty output (dbc1670)
- Implement
core logscommand with text, JSON, and interactive TUI modes (ce02c65) - Add extensive component-based log filtering with CLI overrides and filter statistics (c455796)
- Add reusable embedded Neovim TUI component with a demo command (3a07cca)
- Add centralized
NotebookLocatorfor consistent notebook, plan, and chat path resolution (f6ded98) - Add
IsZombieWorktreeutility to prevent bugs from deleted worktrees (210604e) - Add
CanonicalPathfunction for case-correct path normalization on macOS (6ea4031) - Move and enhance alias resolver from
grove-contexttogrove-corefor shared use (9c81658) - Add native support for notebook resource aliases (e.g.,
@a:nb:notebook:path) (8574644) - Add
build_afterfield togrove.ymlfor defining build dependency order (b77e7bb) - Add comprehensive set of over 100 theme icons with Nerd Font and ASCII fallbacks (bccd627)
- Add support for user-configurable note types with TUI metadata (d9a4582)
- Add global writer for dynamic TUI output redirection, fixing output mangling (0dce554)
- Add workspace-aware path resolution for log files (63767f9)
- Add reusable scrollbar utility package for TUI components (d506f4a)
- Add
StreamWriterutility for streaming command output to TUIs without splitting lines (abeacbe) - Add support for global override configuration file (
~/.config/grove/grove.override.yml) (8b2bb9d) - Add
core config-layerscommand to diagnose configuration merging (0c3e40f) - Add session registry for tracking live agent sessions from
grove-hooks(13d2214)
Bug Fixes
- Fix path normalization to correctly handle filesystem case on macOS (dfed5b8)
- Prevent recreation of “zombie” worktree directories by long-running loggers (ed647c8, de8429f)
- Fix
FindEcosystemConfigto correctly recognize ecosystem worktrees (7489d3d) - Prevent logviewer deadlock when using
StreamWriterfor TUI output (b89a451) - Require
nb:prefix for notebook aliases to resolve ambiguity with project paths (bf00107) - Fix TUI log filtering to respect CLI override flags (3cf7532)
- Fix logviewer scrollbar calculation to account for text wrapping (e52a77b)
- Make default log filtering show all logs unless explicitly configured (466153c)
- Fix
tmuxcommands to use exact session name matching to prevent ambiguity (8651e9b) - Fix
core ws listto correctly handle ecosystem worktree contents in focus mode (4b7b0db)
Miscellaneous
- Standardize CI release workflows and disable CI runs on branches to reduce cost (bba4be4)
- Migrate
docgenprompts to the notebook workspace (a61df2d)
File Changes
.cx/core.rules | 3 +
.cx/dev-no-tests.rules | 19 +
.cx/dev-with-tests.rules | 16 +
.cx/docs-only.rules | 8 +
.cx/pkg-only.rules | 1 +
.cx/workspace-only.rules | 1 +
.github/workflows/ci.yml | 52 ++
.github/workflows/release.yml | 38 +-
.gitignore | 56 +-
CLAUDE.md | 30 +
Makefile | 102 +-
README.md | 4 +-
cmd/config.go | 60 ++
cmd/core/main.go | 29 +
cmd/editor.go | 78 ++
cmd/logs.go | 732 +++++++++++++++
cmd/logs_tui.go | 1334 +++++++++++++++++++++++++++
cmd/nvim_demo.go | 342 +++++++
cmd/open_in_window.go | 51 +
cmd/tmux.go | 18 +
cmd/tmux_editor.go | 147 +++
cmd/version.go | 36 +
cmd/ws.go | 122 +++
command/builder.go | 29 +-
command/executor.go | 31 +
config/config.go | 340 ++++---
config/config_test.go | 77 ++
config/merge.go | 108 ++-
config/schema.go | 72 +-
config/schema/definitions/base.schema.json | 211 +++++
config/types.go | 271 +++++-
config/validator.go | 207 ----
docs/01-overview.md | 170 +++-
docs/docgen.config.yml | 35 +-
docs/prompts/01-overview.md | 30 -
fs/utils.go | 63 +-
git/extended_status.go | 91 ++
git/status.go | 54 +-
git/utils.go | 24 +-
git/worktree.go | 27 +-
go.mod | 25 +-
go.sum | 53 +-
grove.yml | 12 +-
logging.schema.json | 109 +++
logging/config.go | 90 +-
logging/context_writer.go | 24 +
logging/formatter.go | 8 +-
logging/global_writer.go | 43 +
logging/logger.go | 268 +++++-
logging/logger_test.go | 635 ++++++++++++-
logging/pretty.go | 188 ++--
logging/unified.go | 318 +++++++
logging/unified_test.go | 414 +++++++++
logging/zombie_writer.go | 110 +++
notebook.schema.json | 71 ++
pkg/alias/notebook.go | 17 +
pkg/alias/resolver.go | 425 +++++++++
pkg/alias/resolver_test.go | 143 +++
pkg/docs/docs.json | 14 +-
pkg/logging/logutil/finder.go | 87 ++
pkg/models/session.go | 5 +
pkg/process/process.go | 31 +
pkg/profiling/cobra.go | 79 ++
pkg/profiling/timer.go | 142 +++
pkg/repo/manager.go | 440 +++++++--
pkg/sessions/metadata.go | 22 +
pkg/sessions/registry.go | 132 +++
pkg/tmux/client.go | 47 +
pkg/tmux/launch.go | 42 +
pkg/tmux/session.go | 284 +++++-
pkg/tmux/tui.go | 258 ++++++
pkg/tmux/types.go | 21 +
pkg/workspace/discover.go | 582 ++++++++----
pkg/workspace/discover_test.go | 8 +-
pkg/workspace/enrich.go | 222 -----
pkg/workspace/filter/filter.go | 115 ++-
pkg/workspace/history.go | 127 +++
pkg/workspace/identifier.go | 73 +-
pkg/workspace/identifier_test.go | 72 +-
pkg/workspace/lookup.go | 448 +++++++--
pkg/workspace/lookup_test.go | 323 ++++++-
pkg/workspace/notebook_locator.go | 777 ++++++++++++++++
pkg/workspace/notebook_locator_test.go | 116 +++
pkg/workspace/notebook_resolver.go | 316 +++++++
pkg/workspace/prepare.go | 83 +-
pkg/workspace/prepare_test.go | 51 +-
pkg/workspace/provider.go | 245 +++++
pkg/workspace/provider_test.go | 183 ++++
pkg/workspace/submodules.go | 142 +--
pkg/workspace/submodules_test.go | 95 +-
pkg/workspace/transform.go | 484 ++++++++--
pkg/workspace/transform_test.go | 291 ++++++
pkg/workspace/types.go | 322 ++++++-
pkg/workspace/utils.go | 19 +
pkg/workspace/zombie.go | 68 ++
schema/definitions/base.schema.json | 113 +++
schema/grove.embedded.schema.json | 113 +++
schema/manifest.go | 18 +
schema/validator.go | 71 ++
starship/command.go | 158 ++++
starship/provider.go | 30 +
state/state.go | 158 ++++
state/state_test.go | 167 ++++
tests/e2e/main.go | 82 ++
tests/e2e/scenarios_basic.go | 42 +
tests/e2e/scenarios_config.go | 503 ++++++++++
tests/e2e/scenarios_log_creation.go | 526 +++++++++++
tests/e2e/scenarios_logging.go | 1031 +++++++++++++++++++++
tests/e2e/scenarios_logs_filtering.go | 240 +++++
tests/e2e/scenarios_logs_tui.go | 1000 ++++++++++++++++++++
tests/e2e/scenarios_logs_tui_filtering.go | 186 ++++
tests/e2e/scenarios_logs_tui_sorting.go | 508 ++++++++++
tests/e2e/scenarios_notebooks_debug.go | 272 ++++++
tests/e2e/scenarios_workspace.go | 226 +++++
tests/e2e/scenarios_workspace_advanced.go | 481 ++++++++++
tests/e2e/scenarios_workspace_edge_cases.go | 513 ++++++++++
tests/e2e/scenarios_zombie_worktrees.go | 202 ++++
tests/e2e/test_utils.go | 25 +
tools/logging-schema-generator/main.go | 37 +
tools/notebook-schema-generator/main.go | 37 +
tools/schema-composer/main.go | 163 ++++
tools/schema-generator/main.go | 30 +
tui/components/components.go | 2 +-
tui/components/help/help.go | 264 ++++--
tui/components/jsontree/keymap.go | 113 +++
tui/components/jsontree/model.go | 969 +++++++++++++++++++
tui/components/logviewer/logviewer.go | 311 +++++++
tui/components/logviewer/writer.go | 62 ++
tui/components/navigator/io.go | 9 +-
tui/components/navigator/keymap.go | 6 +-
tui/components/navigator/model.go | 105 ++-
tui/components/nvim/model.go | 303 ++++++
tui/components/nvim/nvim.go | 538 +++++++++++
tui/components/table/table.go | 87 +-
tui/keymap/keymap.go | 1 -
tui/theme/icons.go | 777 ++++++++++++++++
tui/theme/theme.go | 553 ++++++++---
tui/utils/scrollbar/scrollbar.go | 100 ++
tui/wsnav/io.go | 14 +
tui/wsnav/model.go | 68 ++
tui/wsnav/update.go | 42 +
tui/wsnav/util.go | 39 +
tui/wsnav/view.go | 241 +++++
tui/wsnav/wsnav.go | 60 ++
util/pathutil/normalize.go | 119 +++
145 files changed, 24669 insertions(+), 1884 deletions(-)v0.4.1-nightly.516efdf (2025-10-03)
v0.4.0 (2025-10-01)
This release introduces a centralized TUI toolkit to create a consistent look and feel across all Grove command-line tools. The new tui package includes a foundational theme system based on the Kanagawa Dragon color palette (cccf82e, 45a4811), a standardized keymap with vim-style navigation (aec0078), and reusable components for rendering help menus (d71c14f), tables, and other UI elements (a8dc6e1). As part of this effort, existing help menus have been refactored to use the new centralized component, reducing code duplication and improving consistency.
Workspace management has been consolidated into a new pkg/workspace core library (4f846c0). This package provides primitives for preparing Git worktrees, managing submodules, and generating Go workspace files, creating a reusable foundation for tools like grove-flow.
Documentation generation has been improved with support for automatic Table of Contents creation and other configuration updates (920fff8, 3e7ce4e). The documentation content itself has also been made more succinct and focused (50e1c94, 9126d18, b5ae13a).
Features
- Add centralized TUI foundation for consistent ecosystem styling (aec0078)
- Implement centralized TUI toolkit for ecosystem consistency (a8dc6e1)
- Enhance theme package with Colors struct for easier access (45a4811)
- Update theme to use Kanagawa Dragon color palette (cccf82e)
- Implement consistent help menus across Grove TUI ecosystem (d71c14f)
- Consolidate workspace management primitives into a new
pkg/workspace(4f846c0) - Add Table of Contents generation and other docgen configuration updates (920fff8)
- Update and improve documentation content for brevity and clarity (50e1c94, 9126d18, 4dcf49e)
Bug Fixes
- Add changelog parsing to the release workflow (d20e6e3)
Refactoring
- Standardize docgen.config.yml key order and settings (0d0ceb9)
Documentation
- Add initial documentation structure and templates (d0e1e3b, 3e7ce4e)
- Rename Introduction sections to Overview for consistency (5855b14)
- Simplify grove-core documentation to a single overview page (b5ae13a)
- Update docgen configuration and overview prompt (fb31a10)
File Changes
.github/workflows/release.yml | 20 +-
Makefile | 8 +-
README.md | 90 ++++++--
docs/01-overview.md | 76 +++++++
docs/README.md.tpl | 7 +
docs/docgen.config.yml | 23 ++
docs/docs.rules | 1 +
docs/prompts/01-overview.md | 30 +++
git/worktree.go | 9 +-
go.mod | 17 +-
go.sum | 27 ++-
logging/pretty.go | 98 +++++++-
pkg/docs/docs.json | 26 +++
pkg/workspace/go_workspace.go | 179 +++++++++++++++
pkg/workspace/go_workspace_test.go | 202 +++++++++++++++++
pkg/workspace/prepare.go | 38 ++++
pkg/workspace/prepare_test.go | 214 ++++++++++++++++++
pkg/workspace/submodules.go | 223 ++++++++++++++++++
pkg/workspace/submodules_test.go | 447 +++++++++++++++++++++++++++++++++++++
pkg/workspace/types.go | 24 ++
tui/components/components.go | 264 ++++++++++++++++++++++
tui/components/help/help.go | 280 +++++++++++++++++++++++
tui/components/table/table.go | 258 +++++++++++++++++++++
tui/keymap/keymap.go | 285 +++++++++++++++++++++++
tui/theme/theme.go | 270 ++++++++++++++++++++++
25 files changed, 3075 insertions(+), 41 deletions(-)v0.3.0 (2025-09-26)
This release introduces a major overhaul of the logging system across the Grove ecosystem. A new centralized logging package provides configurable, structured logging with support for both console and file outputs (5d3178d). This is complemented by a pretty logging wrapper that enables simultaneous user-friendly terminal output and machine-readable file logging (721fcca, fc3a772). Logging has been enhanced to support commands like grove logs with improved caller information, version metadata, and JSON file output capabilities (fe09ca4). As part of this effort, CLI logging was updated to use this new core system (4d23dcd), and terminal output now features magenta highlighting for component names for better readability (064a845).
Another significant addition is a new, centralized tmux client package designed for programmatic session management (09372bf). This client includes utilities for consistent session naming, improved error handling (0150b36), and the ability to query the cursor position to support advanced TUI testing (e711670).
To improve developer experience and standardization, a reusable docs command has been added, allowing any Grove tool to easily serve its documentation in a standard JSON format (a5ba628). Finally, a new GitHub Action workflow has been implemented to automate the release process (297490b).
Features
- Add GitHub Action workflow for automated releases (297490b)
- Add magenta highlighting for component names in terminal output (064a845)
- Enhance logging with structured file output and improved caller info (fe09ca4)
- Add a pretty logging wrapper for simultaneous structured and user-friendly console output (721fcca)
- Add a centralized, configurable logging package for the Grove ecosystem (5d3178d)
- Add a reusable ‘docs’ command for standardized JSON documentation output (a5ba628)
- Add GetCursorPosition method to the tmux client for TUI testing (e711670)
- Add centralized tmux utilities and improve error handling (0150b36)
- Add a comprehensive, centralized client package for managing tmux sessions (09372bf)
Bug Fixes
- Improve CLI logging to use the new centralized structured logging system (4d23dcd)
Code Refactoring
- Decouple pretty and structured logging with intelligent terminal output control (fc3a772)
Chores
- Update .gitignore to track CLAUDE.md and ignore go.work files (6964d36)
File Changes
.github/workflows/release.yml | 39 ++++++
.gitignore | 7 ++
cli/command.go | 7 +-
cli/docs.go | 22 ++++
examples/logging-demo/main.go | 62 ++++++++++
go.mod | 14 +++
go.sum | 34 ++++++
logging/README.md | 156 ++++++++++++++++++++++++
logging/config.go | 39 ++++++
logging/example_test.go | 69 +++++++++++
logging/formatter.go | 60 ++++++++++
logging/logger.go | 273 ++++++++++++++++++++++++++++++++++++++++++
logging/logger_test.go | 210 ++++++++++++++++++++++++++++++++
logging/pretty.go | 130 ++++++++++++++++++++
pkg/tmux/client.go | 41 +++++++
pkg/tmux/doc.go | 30 +++++
pkg/tmux/launch.go | 79 ++++++++++++
pkg/tmux/launch_test.go | 159 ++++++++++++++++++++++++
pkg/tmux/monitor.go | 26 ++++
pkg/tmux/monitor_test.go | 137 +++++++++++++++++++++
pkg/tmux/session.go | 118 ++++++++++++++++++
pkg/tmux/session_test.go | 127 ++++++++++++++++++++
pkg/tmux/types.go | 14 +++
pkg/tmux/util.go | 40 +++++++
24 files changed, 1892 insertions(+), 1 deletion(-)v0.2.13 (2025-09-12)
Code Refactoring
- remove Docker dependencies from grove-core
v0.2.12 (2025-08-25)
Bug Fixes
- checks if branchPrefix is empty before constructing the branch name, avoiding the creation of branch names with leading slashes
v0.2.11 (2025-08-15)
Features
- support flow jobs in Session model
Bug Fixes
- use claude as home dir in agent docker image
v0.2.10 (2025-08-12)
Features
- add canopy models to pkg
v0.2.9 (2025-08-08)
Chores
- update Docker image references from grovepm to mattsolo1
v0.2.8 (2025-08-08)
Features
- conventional: add conventional commit parsing and changelog generation