Complete redesign of agent spawning. Full-screen overlay with two-panel layout: configuration on the left (role, directory, permissions, effort, integrations, skills, schedule), and a full-height prompt editor or AI planning chat on the right. Plan with AI lets you discuss and refine tasks before spawning — responses are Groove-aware with system context. "Generate Prompt" synthesizes the conversation into a clean, actionable agent prompt.
Planners now generate teams with phase 1 (builders) and phase 2 (QC/finisher). Builder agents spawn immediately and work in parallel. When all builders complete, the QC Senior Dev agent auto-spawns to audit, integrate, test, commit, and launch. Safety net: if the planner omits the QC agent, one is auto-added. Nudge for manual users when agents finish without QC.
Cleaner header: navigation aligned left, Integrations/Skills/Schedules/Journalist collapsed into a dropdown menu. Agent count removed. Active state uses text color only — no bottom borders.
Agent nodes now support smooth drag and drop with positions persisted to localStorage. Nodes stay where you put them across refreshes. Positions keyed by agent name so they survive respawns. Smart edge routing: connections snap to the nearest side (top/bottom/left/right) as you move nodes. Default zoom pulled back for breathing room.
Optional name field when spawning agents (e.g., 'Skills Developer' instead of 'fullstack-3'). Rename agents anytime from the Actions tab. Effort level selector: Low, Medium, High, Max — maps directly to Claude's --effort flag.
Toggle 'Recurring schedule' when spawning to auto-respawn agents on a cron. Frequency presets from every 30 minutes to monthly. Agent spawns once immediately and creates the schedule.
Set a default working directory that applies to all new agents. System-level directory browser lets you navigate anywhere on disk. 'Set as default for all agents' button. Per-agent override still available.
Enter an Anthropic API key in the spawn panel for sub-second plan chat responses via direct API call. Falls back to CLI for subscription auth. Key encrypted and stored locally.
Agent chat history and activity logs persist to localStorage across page refreshes. Chat carries over when agents are resumed or rotated. Clear button to reset conversations.
Fixed dead 'Connect with Google' button. Error handling on all integration operations. Bundled Google OAuth credential support. Removed redundant Filesystem and SQLite integrations.
Directory bar at the top of the file editor — click to type any absolute path and the file tree reloads to that directory. Browse any project without restarting the daemon.
Automatic cleanup runs daily: deletes log files older than 7 days, prunes stale plan artifacts after 24 hours, trims audit log to last 1000 entries. Stale recommended-team.json files auto-cleaned when a new planner spawns.
Port retry on startup — waits up to 5 seconds for the port to release before falling back to another. Fixes port-hopping after groove stop && groove start.
VS Code-style file editor embedded in the GUI. CodeMirror 6 with One Dark theme, language detection for 20+ languages, line numbers, bracket matching, search, and auto-indent. Cmd+S saves to disk. New Editor tab in the header (second position after Agents). File tree sidebar (240px, expandable, lazy-loaded) with colored dots by language.
Right-click any file or folder in the tree for a context menu: New File, New Folder, Rename, Delete. Inline text input for naming — press Enter to confirm, Escape to cancel. Toolbar with SVG file and folder icons for quick creation at root level. All operations audit-logged.
Click an image (PNG, JPG, GIF, SVG, WebP, AVIF) to see it rendered on a checkerboard background. Click a video (MP4, WebM, MOV) to play with native controls. "Open in new tab" link for full-size viewing. Served via GET /api/files/raw with correct Content-Type headers (50MB limit).
Click the Terminal bar at the bottom of the editor to open an interactive shell. Uses Python's pty module to allocate a real pseudo-terminal — full prompt, colors, line editing, tab completion, Ctrl+C. xterm.js frontend with One Dark colors. Drag the resize handle to adjust height. Sessions auto-clean on disconnect. Requires Python 3.
When you have a file open in the editor and an agent modifies it, an amber banner appears: "File modified externally" with Reload and Dismiss buttons. Uses Node.js fs.watch with 300ms debounce. Self-saves are suppressed (no false alerts when you Cmd+S).
Open multiple files in tabs. Active tab has a 1px accent border and dark background. Dirty files show an amber dot. Close button on each tab. Tooltip shows full path. Tab state preserved while switching between files.
Backend endpoints for the editor: GET /api/files/tree, GET /api/files/read, POST /api/files/write, POST /api/files/create, POST /api/files/mkdir, DELETE /api/files/delete, POST /api/files/rename, GET /api/files/raw. All reuse path validation (no traversal, no absolute paths, project-scoped). Binary detection on read. 5MB limit on text, 50MB on raw.
Complete redesign of the skills marketplace into an app-store experience. Featured banner with curated skills, 3-column card grid, full detail modal with author profiles, ratings, download counts, and install/uninstall. Browse and My Skills tabs. Sort by popularity, rating, newest, or A-Z. Search across names, descriptions, and tags. Category filters with icons.
Installed skills can be attached to agents. Select skills in the spawn panel before launching, or attach/detach from the Actions tab on running agents. Attached skills are injected into the agent's context via the introducer — the agent receives the full SKILL.md instructions automatically. Clone and restart preserve attached skills.
Rate skills 1-5 stars directly from the detail modal. Interactive hover effects on stars, immediate UI feedback. Ratings are proxied through the daemon to the skills server. Aggregate scores and rating counts displayed on cards and in the detail view.
Three verification tiers: Anthropic (gold), Groove (teal), and Verified (green) for community creators who complete verification. Badges displayed on skill cards, featured cards, and prominently in the detail modal. Builds trust in the marketplace.
The daemon now fetches skills from the live API at docs.groovedev.ai/api/v1/skills instead of a static JSON file. Skill content downloaded from /api/v1/skills/:id/content. Install tracking via POST /api/v1/skills/:id/install. Offline fallback to bundled registry. No API key needed — the daemon is a read-only consumer.
Skills now include downloads, rating, ratingCount, price, featured, verified, and authorProfile (avatar, website, GitHub, Twitter/X). Ready for paid skills and community submissions.
groove connect user@host creates an encrypted SSH tunnel to a remote GROOVE daemon and opens the GUI in your browser. groove disconnect closes it. SSH config aliases work (groove connect my-vps). Preflight checks verify the daemon is running. Port collision detection auto-picks an open port. PID verification prevents killing unrelated processes.
groove start --host tailscale auto-detects your Tailscale IP and binds the daemon to it. --host <ip> for explicit IPs. --host 0.0.0.0 is rejected by design — direct internet exposure is not supported. CORS and WebSocket origins updated to allow the bound interface.
Append-only .groove/audit.log with 0600 permissions. 14 audited actions: agent spawn/kill/rotate/instruct, team save/load/delete/import/launch, credential set/delete, config changes, approval decisions. groove audit CLI with color-coded output. GET /api/audit endpoint. Auto-rotates at 5MB.
Connect GROOVE daemons with groove federation pair <host>. Each daemon generates an Ed25519 keypair. Cross-server contracts are signed and verified. Replay protection (5-minute window). Invalid keys rejected at pairing time. Peer IDs restricted to hex (path traversal prevention). Full audit trail on both sides.
GROOVE detects VS Code Remote, plain SSH, and headless servers. VS Code users see "VS Code forwards this port automatically." SSH users see the exact groove connect command with their server IP. Local users see the GUI URL. No more confusing localhost links on remote servers.
SSH tunnels use different ports (31416, 31417). The previous exact-port check rejected WebSocket connections through tunnels, showing "offline" in the GUI. Now allows any localhost origin regardless of port.
The bottom-left status pill now detects when the GUI is accessed through a tunnel (port mismatch with daemon) and shows the connection type. Host badge appears in the header for Tailscale/LAN connections.
When you send a message to any agent, GROOVE now uses --resume SESSION_ID instead of killing and respawning with a handoff brief. Full conversation history preserved, zero token waste. Rotation with handoff brief only happens on degradation signals (the intended behavior).
All three providers now spawn, execute, and complete correctly. Codex uses codex exec --dangerously-bypass-approvals-and-sandbox. Gemini uses --yolo for tool auto-approval. API keys injected from credential store into agent environment. Smoke tested end-to-end: Gemini planner → Codex backend → Claude Code fullstack.
Codex and Gemini output plain text (not stream-json), so token counts were always zero. Now estimates tokens from output length (~4 chars/token). Dashboard, node heartbeats, and telemetry charts show data for all providers.
If port 31415 is taken (VS Code, other apps), the daemon tries the next 10 ports automatically. Writes .groove/daemon.port so CLI commands find the right port. Users never see port errors.
Gemini: 3.1 Pro, 3 Flash, 3.1 Flash Lite, 2.5 Pro, 2.5 Flash. Codex: o3, o4-mini, GPT-4.1 family. Removed non-existent models.
Running agent nodes show a live mini line chart of token usage (last 40 data points) instead of the old neural flow animation. Shows actual intelligent activity.
Connected stat bar (5 cards, no gaps), large area chart + donut ring for model routing, horizontal bars for savings and agent fleet. Savings methodology shown so users understand how estimates are calculated.
Gemini CLI in headless mode needed --yolo to auto-approve tool calls. Without it, agents would output code as text instead of creating files.
Codex changed from --approval-mode full-auto to codex exec --dangerously-bypass-approvals-and-sandbox. Also requires exec subcommand for headless operation.
Aider wraps the same APIs that Claude Code, Codex, Gemini, and Ollama access directly. Removed to simplify the provider set. Four providers remain.
Agent messages now stream in character by character with a pulsing cursor, like a live AI chat interface. Historical messages render instantly. Only the latest message animates.
The TokenTracker's record(), recordRotation(), and recordColdStartSkipped() methods are now called from the process manager and rotator. Savings data (rotation, conflict prevention, cold-start) is real, persisted to .groove/tokens.json, and displayed in the Command Center gauges.
Telemetry data moved from React component state to the Zustand store. Switching between Agents and Stats tabs no longer wipes the chart. Historical data for completed agents is preserved.
The Avg Context gauge showed 0 when all agents finished (only measured running agents). Replaced with Peak Context — shows the highest context usage reached across all agents, giving a meaningful metric even after a session ends.
The planner's recommended fullstack agent now includes instructions to audit all agents' work, fix issues, build the project, launch the dev server, and output the localhost URL. No more manually asking where the app is.
The WebSocket rotation:complete event was switching the panel to the new agent before the HTTP response could copy chat history. Now chat and timeline are copied atomically in the WebSocket handler before the panel switches.
Previously all zeros because the TokenTracker was never fed. With token tracking wired, the Efficiency gauge, Savings breakdown, Estimated Savings dollar amount, and Routing data all display actual values.
After the planner finishes, it writes a structured team config to .groove/recommended-team.json. A Launch Team button appears in the chat showing each recommended agent with its task. One click spawns the entire team with proper roles, scopes, and prompts. Non-technical users just describe what they want, and the planner handles the rest.
Nodes redesigned with rounded corners, colored role badges (planner=purple, backend=teal, frontend=amber, fullstack=green), circular connection ports, and minimal clean layout. Edges are now smooth Bezier curves (splines) instead of angular steps — the spline is the brand. Matching the visual style of Unity and n8n node editors.
The hero row now features SVG semicircle arc gauges for Efficiency %, Average Context, Agents, and Rotations — inspired by Grafana dashboards. Gauges animate smoothly on value changes. All dashboard panels have rounded corners.
Agent messages in the chat now render markdown properly — bold text, inline code, headers, lists, numbered lists, and horizontal rules. No more raw ** and ### in the output.
The planner prompt now instructs it to suggest specific agents with roles, scopes, and tasks. It notes that a fullstack agent is needed for root-level setup in Auto permission mode. Output uses clean plain text formatting.
Planning was routed to Haiku (light tier) which produced shallow one-line responses. Now routes to the heavy tier since planning is foundational work that needs deep reasoning and thorough codebase research.
The telemetry chart now builds its timeline from dashboard API polls (every 4s) instead of the WebSocket store. Per-agent area chart with thin flat lines, subtle gradient fills, time axis, and y-axis labels. Agent legend shows real-time token counts.
Removed all glow effects, text shadows, and neon styling across the entire UI. All lines 1px thin, colors flat, gradients subtle. Matches the dark terminal aesthetic of the GROOVE website.
Chat messages and token timeline now carry from the old agent to the new agent when rotating or continuing. No more cleared chat when sending a message to a completed agent.
The validateAgentConfig() function stripped the permission field from the config, so the PM review instructions never reached agents. Now preserved through validation, registry, and rotation.
The TokenTracker was never fed data from the process manager. The dashboard now uses the registry's actual tokensUsed values as the source of truth. TOKENS USED, TOKENS SAVED, and dollar amounts now display correctly.
When a stdout chunk contained multiple JSON events (assistant + usage), only the last event was returned, losing token counts. Now merges token totals across all events in a chunk.
The welcome message now displays on every groove start, not just first run. Shows provider scan, GUI URL, docs link, and GitHub. Box alignment fixed. CLI quick start commands removed (GUI is primary).
GROOVE now has a built-in AI Project Manager that reviews risky agent operations before they happen. When agents run in Auto mode, they call the PM before creating new files, deleting files, or modifying config. The PM checks scope, plan alignment, and team conflicts — then approves or rejects with reasoning. All reviews are logged in the new PM Review Log (formerly Approvals tab). This turns permission levels from decorative to functional.
Replaced the three-tier permission system (Always Ask / Auto / Full Access) with two practical modes. Auto: AI PM reviews risky operations (~10-15s overhead per review). Full Send: no reviews, maximum speed. No more false promises of interactive approval in a headless system.
The stats dashboard is completely rebuilt. Thin vertical bar charts for token burn rate and savings accumulation. Hero row with glowing dollar savings display. Agent fleet cards with context gauges. Adaptive threshold sparklines with session quality scores and signal breakdown (errors, repetitions, file churn). Journalist panel shows live AI synthesis summary. Routing viz now shows cost-per-tier. Feels like mission control, not a spreadsheet.
Pressing Enter in the chat input was firing both the keydown handler and an implicit form submission, causing double-fire. Fixed with type="button" on the Send button and stopPropagation on the Enter handler.
Previously, when an agent was rotated or continued, the new agent started with tokensUsed: 0. Now the rotator carries cumulative token stats to the new agent, so the dashboard shows lifetime totals.
The Gemini provider was showing Claude Code's install command. Fixed to show the correct npm i -g @google/gemini-cli.
Agents that have completed their task can now be continued from the chat. Type a reply, hit Send, and GROOVE generates a handoff brief from the agent's work, appends your message, and spawns a fresh session with full context. No more "Respawn" button creating disconnected agents. The conversation is seamless.
When you spawn a backend agent after a planner finishes, the backend now sees: what files the planner created, the planner's final output summary, and an explicit instruction to read relevant files before starting work. Completed agents are no longer invisible — they stay in the team context with their files and results.
Spawning a second backend? GROOVE now queries the existing backend's work via a headless Claude call, then gives the new agent a clear task assignment: what to work on, what files to avoid. The Task Assignment section in the intro context keeps duplicate-role agents from stepping on each other.
Before restarting the server, running npm install, or modifying shared config, agents now check .groove/coordination.md for active operations. They write their intent, check for conflicts, then proceed. File-based coordination that works with any CLI tool.
Claude Code's auto-memory system can bleed context from previous sessions into GROOVE agents. Now every agent gets explicit instructions to ignore auto-memory and rely only on GROOVE-provided context (handoff briefs, project map, registry). Two-layer enforcement: agent intro context + CLAUDE.md injection.
The planner's "do NOT implement code" constraint was only applied in the GUI spawn panel. Now ROLE_PROMPTS are applied in the process manager during spawn — consistent regardless of whether agents are spawned from GUI, CLI, API, or chat continuation.
The Journalist now triggers a synthesis cycle immediately when any agent completes — no more waiting up to 120 seconds for a stale project map. Synthesis input budget doubled to 40K chars. Text truncation increased from 500 to 2,000 chars. Result preservation increased from 500 to 3,000 chars. Handoff brief project map limit increased from 3K to 10K chars. Explicit Haiku model for predictable cost.
The rotation scoring system now detects file churn (same file written 3+ times = circular refactoring), error trends (increasing errors in the second half of a session = degradation signal), and tool failures (previously tracked but never extracted). Classifier window increased from 10 to 50 events for better signal quality.
Context usage was hardcoded to 200K for all models. Now uses actual model metadata: Opus has a 1M context window, Sonnet and Haiku have 200K. Rotation thresholds are now meaningful across different models.
Port 3141 conflicted with VS Code dev servers and other common tools. Moved to 31415 — still pi, but in the ephemeral range where nothing else lives.
A full-screen analytics dashboard showing token usage, savings breakdown, rotation timeline, model routing distribution, adaptive threshold profiles, and journalist status. The stats tab in the GUI now shows real-time operational data.
The model routing system is now fully connected. Agents spawned with model: 'auto' get routed to the right tier (Opus for heavy tasks, Sonnet for medium, Haiku for light) based on role hints and classifier signals. Cost tracking logs every routing decision.
Major cleanup pass across the codebase. All 14 test suites (137 tests) passing. Security audit complete: AES-256-GCM credentials, CORS localhost-only, input validation on all endpoints, prototype pollution protection.
Complete GUI redesign with One Dark Pro theme, JetBrains Mono font, and a terminal-native aesthetic. The GUI is served by the daemon — open http://localhost:31415 in any browser.
Click any agent to open a 45% sidebar with three tabs. Chat: instruct agents or query them without disrupting their work. Stats: live token heartbeat chart, context usage gauge, activity sparkline. Actions: rotate, stop, delete, clone, change model, modify prompt.
The spawn panel offers role presets (Backend, Frontend, Fullstack, Planner, Testing, DevOps, Docs), permission levels, provider selection with inline API key entry, and model selector. One-click spawning with intelligent defaults.
Send instructions to running agents via POST /api/agents/:id/instruct (rotates with new context) or ask questions via POST /api/agents/:id/query (headless one-shot, agent keeps running). Chat tab in the GUI uses both.
Agents are displayed as nodes in a React Flow graph with animated edges for running agents. Click to select, drag to rearrange. NASA-style terminal readouts with status bars, heartbeat indicators, and compact metrics.
GROOVE ships with a persistent daemon that manages all agent coordination. It holds the registry, broadcasts state over WebSocket, and exposes a REST API. State persists to disk, so if the daemon restarts, your agents don't vanish.
The full command set: groove start, groove stop, groove spawn, groove kill, groove agents, groove status, groove nuke, groove rotate, team management (save/load/list/delete/export/import), groove providers, groove set-key, and config commands.
When you spawn agent #2, the daemon writes AGENTS_REGISTRY.md and gives every agent context about its peers — who they are, what files they own, what they're working on. No more two agents silently editing the same file.
Spawn with a scope pattern and that agent owns those files. Other agents are told to stay out. Advisory locks for v0.1 — agents are informed, not blocked.
A background synthesis engine that watches all agent activity, filters noise, and generates GROOVE_PROJECT_MAP.md — a living snapshot of the entire project. New agents read one file and know everything. No more wasting thousands of tokens re-explaining your codebase.
Day 1 support for Claude Code (subscription), Codex (API key), Gemini CLI (API key), and Ollama (local). The provider abstraction makes adding new tools straightforward.