# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [2.7.0] - 2026-04-21

### Added

- **Meta-Harness autoresearch loop** (`research/` subsystem). Opus-driven
  search over a bounded mutation surface. Fixed 5-minute kernel,
  append-only results log, contrastive proposer with access to source +
  top/bottom traces. See `research/domain_spec.md` for the design.
- **Admiral actuator**: `scripts/stress_watcher.py` sends SIGUSR1 to the
  stress harness on unrecoverable TUI wedges; the harness respawns its
  drydock child at the next iteration boundary. Rate-limited. First loop
  where admiral *acts* on its observations.
- **Env override surface** for experiments:
  `DRYDOCK_AUTO_CONTINUE_DISABLE`,
  `DRYDOCK_STRESS_{SESSION_RESET_EVERY,MAX_CONSECUTIVE_SKIPS_BEFORE_RESET,SEND_PROMPT_RETRY_COUNT,SEND_PROMPT_WAIT_PER_RETRY_SEC}`,
  `DRYDOCK_ADMIRAL_{REPEAT_WARNING_THRESHOLD,REPEAT_FORCE_STOP_THRESHOLD,EMPTY_RESULT_THRESHOLD,SAME_TOOL_NAME_REPEAT_LIMIT_{BASH,READ}}`,
  `DRYDOCK_PROMPTS_DIR`. All default to the prior hardcoded values;
  production behavior unchanged.
- **`DEPLOYMENT.md`**: known-working hardware + vLLM Docker flags +
  `~/.drydock/config.toml` template + env var table + diagnostic
  checklist. Answers the "works on your machine, not mine" question.
- **`scripts/stress_babysitter.sh`**: hourly monitor cron that
  auto-restarts long stress runs from the last successful step. Silent
  when healthy; Telegrams only on state change.
- **Check 0 empty-result loop detector** in `agent_loop.py`. Fires
  FORCE_STOP at 3 identical tool calls when the result matches an
  empty pattern (`total_count: 0`, `no todos`, `no tasks`,
  `no matches`, blank). Catches todo / task / grep-empty loops that
  Check 1's threshold-of-8 is too lax for.
- **Proactive write-oscillation prune** in
  `_sanitize_message_ordering`. Any path with ≥3 `write_file` history
  entries gets its older copies pruned before the next LLM call, so
  context stays below Gemma 4's 131K ceiling instead of waiting for
  a 400.
- **Raw-markdown leakage detector** in stress harness + admiral.
  Surfaces TUI rendering regressions as `stress-alert/raw-markdown-
  leakage` on the admiral dashboard.
- **`OVERNIGHT_PROGRESS.md`** session-continuity doc template.

### Changed

- **`should_break_loop`** in `agent_loop.py:876` — the condition
  `tool_turns == 0` was unreachable since the file's current structure
  landed. Text-only assistant responses now cleanly close the user
  turn instead of regenerating until `PER_PROMPT_BUDGET_SEC` times
  out. **This is a behavior fix users will notice immediately** —
  questions the model asks now wait for input.
- **Continue-loop**: env-gated via `DRYDOCK_AUTO_CONTINUE_DISABLE=1`
  so stress runs (and any workflow hitting text-only prompt loops)
  can opt out.
- **`SESSION_ROOT` resolution** in `scripts/shakedown_interactive.py`:
  now reads the path from `~/.drydock/config.toml`'s
  `[session_logging].save_dir` instead of hardcoding
  `~/.drydock/logs/session/`. Fixes false-SKIP reporting on any
  machine whose drydock config has the newer default
  `~/.vibe/logs/session/`.
- **Todo tool** (`todo.py`): empty-read response now escalates.
  First empty: *"No todos yet. Write one or proceed with the task."*
  Second+: *"Still no todos. Stop calling read. Empty state will
  not change on its own."* Closes GitHub #10.
- **Fresh-start wipe** in stress harness: wipes cwd to fixtures
  (PRD/AGENTS/functional_tests) instead of accumulating prior
  runs' half-written artifacts.
- **Raw-markdown detector** patterns tightened (`**bold**`,
  `##heading`, `[link](url)` only — dropped bullet + numbered-list
  patterns that matched rendered lists and generated 45 % false
  positives).

### Infrastructure

- First clean 1658-prompt stress run completed 2026-04-21.
  ~1622 successful prompts (run + babysitter auto-restart),
  35 SKIPs, 0 TIMEOUTs, ~60 admiral-initiated TUI recycles.
  ~46-hour wall-clock. Reference baseline for future experiments.
- `scripts/auto_release.sh` supports `DRYDOCK_FORCE_VERSION` for
  MINOR / MAJOR bumps (the ordinary PATCH-bumper would have taken
  us to 2.6.149, not 2.7.0).

### Known follow-ups

- Meta-Harness median-of-3 replication before promotion (currently
  single-sample).
- TUI Markdown widget regression surfaced by admiral but not yet
  fixed.

## [2.4.2] - 2026-03-12

### Added

- Session ID included in telemetry events for better tracing

### Changed

- Skills now extract arguments when invoked, improving parameter handling
- Auto-compact threshold falls back to global setting when not defined at model level
- Update notification toast no longer times out, ensuring the user sees the restart prompt
- Removed `file_content_before` from Vibe Code, reducing payload size


## [2.4.1] - 2026-03-10

### Added

- `HarnessFilesManager` for selective loading of harness files, enabling SDK usage without accessing the file system.

### Changed

- Web search tool infers server URL from provider config instead of hardcoded production API
- `ask_user_questions` tool disabled in prompt mode

### Fixed

- Space key fix extended to all `Input` widgets (question prompts, proxy setup) in VS Code terminal
- Ruff isort/formatter config conflict resolved (`split-on-trailing-comma` set to `false`)


## [2.4.0] - 2026-03-09

### Added

- User plan displayed in the CLI banner
- Reasoning effort configuration and thinking blocks adapter

### Changed

- Auto-compact threshold is now per-model
- Removed expensive file scan from system prompt; cached git operations for faster agent switching
- Improved plan mode
- Updated `whoami` response handling with new plan type and name fields

### Fixed

- Space key works again in VSCode 1.110+
- Arrow-key history navigation at wrapped-line boundaries in chat input
- UTF-8 encoding enforced when reading metadata files
- Update notifier no longer crashes on unexpected response fields


## [2.3.0] - 2026-02-27

### Added

- /resume command to choose which session to resume
- Web search and web fetch tools for retrieving and searching web content
- MCP sampling support: MCP servers can request LLM completions via the sampling protocol
- MCP server discovery cache (`MCPRegistry`): survives agent switches without re-discovering unchanged servers
- Chat mode for ACP (`session/set_config_options` with `mode=chat`)
- ACP `session/set_config_options` support for switching mode and model
- Tool call streaming: tool call arguments are now streamed incrementally in the UI
- Notification indicator in CLI: terminal bell and window title change on action required or completion
- Subagent traces saved in `agents/` subfolder of parent session directory
- IDE detection in `new_session` telemetry
- Discover agents, tools, and skills in subfolders of trusted directories (monorepo support)
- E2E test infrastructure for CLI TUI

### Changed

- System prompts rewritten for improved model behavior (3-phase Orient/Plan/Execute workflow, brevity rules)
- Tool call display refactored with `ToolCallDisplay`/`ToolResultDisplay` models and per-tool UI customization
- Middleware pipeline replaces observer pattern for system message injections
- Improved permission handling for `write_file`, `read_file`, `search_replace` (allowlist/denylist globs, out-of-cwd detection)
- Proxy setup UI updated with guided bottom-panel wizard
- Smoother color transitions in CLI loader animation
- Dead tool state classes removed (`Grep`, `ReadFile`, `WriteFile` state)

### Fixed

- Agent switch (Shift+Tab) no longer freezes the UI (moved to thread worker)
- Empty assistant messages are no longer displayed
- Tool results returned to LLM in correct order matching tool calls
- Auto-scroll suspended when user has scrolled up; resumes at bottom
- Retry and timeout handling in Mistral backend (backoff strategy, configurable timeout)

### Removed


## [2.2.1] - 2026-02-18

### Added

- Multiple clipboard copy strategies: OSC52 first, then pyperclip fallback when system clipboard is available (e.g. local GUI, SSH without OSC52)
- Ctrl+Z to put Vibe in background

### Changed

- Improve performance around streaming and scrolling
- File watcher is now opt-out by default; opt-in via config
- Bump Textual version in dependencies
- Inline code styling: yellow bold with transparent background for better readability

### Fixed

- Banner: sync skills count after initial app mount (fixes wrong count in some cases)
- Collapsed tool results: strip newlines in truncation to remove extra blank line
- Context token widget: preserve stats listeners across `/clear` so token percentage updates correctly
- Vertex AI: cache credentials to avoid blocking the event loop on every LLM request
- Bash tool: remove `NO_COLOR` from subprocess env to fix snapshot tests and colored output


## [2.2.0] - 2026-02-17

### Added

- Google Vertex AI support
- Telemetry: user interaction and tool usage events sent to datalake (configurable via `enable_telemetry`)
- Skill discovery from `.agents/skills/` (Agent Skills standard) in addition to `.vibe/skills/`
- ACP: `session/load` and `session/list` for loading and listing sessions
- New model behavior prompts (CLI and explore)
- Proxy Wizard (PoC) for CLI and for ACP
- Proxy setup documentation
- Documentation for JetBrains ACP registry

### Changed

- Trusted folders: presence of `.agents` is now considered trustable content
- Logging handling updated
- Pin `cryptography` to >=44.0.0,<=46.0.3; uv sync for cryptography

### Fixed

- Auto scroll when switching to input
- MCP stdio: redirect stderr to logger to avoid unwanted console output
- Align `pyproject.toml` minimum versions with `uv.lock` for pip installs
- Middleware injection: use standalone user messages instead of mutating flushed messages
- Revert cryptography 46.0.5 bump for compatibility
- Pin banner version in UI snapshot tests for stability


## [2.1.0] - 2026-02-11

### Added

- Incremental load of long sessions: windowing (20 messages), "Load more" to fetch older messages, scroll to bottom when resuming
- ACP support for thinking (agent-client-protocol 0.8.0)
- Support for FIFO path for env file

### Changed

- **UI redesign**: new look and layout for the CLI
- Textual UI optimizations: ChatScroll to reduce style recalculations, VerticalGroup for messages, stream layout for streaming blocks, cached DOM queries
- Bumped agent-client-protocol to 0.8.0
- Use UTC date for timestamps
- Clipboard behavior improvements
- Docs updated for GitHub discussions
- Made the Upgrade to Pro banner less prominent

### Fixed

- Fixed inaccurate token count in UI in some cases
- Fixed agent prompt overrides being ignored
- Terminal setup: avoid overwriting Wezterm config

### Removed

- Legacy terminal theme module and agent indicator widget
- Standalone onboarding theme selection screen (replaced by redesign)


## [2.0.2] - 2026-01-30

### Added

- Allow environment variables to be overridden by dotenv files
- Display custom rate limit messages depending on plan type

### Changed

- Made plan offer message more discreet in UI
- Speed up latest session scan and harden validation
- Updated pytest-xdist configuration to schedule single test chunks

### Fixed

- Prevent duplicate messages in persisted sessions
- Fix ACP bash tool to pass full command string for chained commands
- Fix global agent prompt not being loaded correctly
- Do not propose to "resume" when there is nothing to resume


## [2.0.1] - 2026-01-28

### Fixed

- Fix encoding issues in Windows


## [2.0.0] - 2026-01-27

### Added

- Subagent support
- AskUserQuestion tool for interactive user input
- User-defined slash commands through skills
- What's new message display on version update
- Auto-update feature
- Environment variables and timeout support for MCP servers
- Editor shortcut support
- Shift+enter support for VS Code Insiders
- Message ID property for messages
- Client notification of compaction events
- debugpy support for macOS debugging

### Changed

- Mode system refactored to Agents
- Standardized managers
- Improved system prompt
- Updated session storage to separate metadata from messages
- Use shell environment to determine shell in bash tool
- Expanded user input handling
- Bumped agent-client-protocol to 0.7.1
- Refactored UI to require AgentLoop at VibeApp construction
- Updated README with new MCP server config
- Improved readability of the AskUserQuerstion tool output

### Fixed

- Use ensure_ascii=False for all JSON dumps
- Delete long-living temporary session files
- Ignore system prompt when saving/loading session messages
- Bash tool timeout handling
- Clipboard: no markup parsing of selected texts
- Canonical imports
- Remove last user message from compaction
- Pause tool timer while awaiting user action

### Removed

- instructions.md support
- workdir setting in config file


## [1.3.5] - 2026-01-12

### Fixed

- bash tool not discovered by vibe-acp

## [1.3.4] - 2026-01-07

### Fixed

- markup in blinking messages
- safety around Bash and AGENTS.md
- explicit permissions to GitHub Actions workflows
- improve render performance in long sessions

## [1.3.3] - 2025-12-26

### Fixed

- Fix config desyncing issues

## [1.3.2] - 2025-12-24

### Added

- User definable reasoning field

### Fixed

- Fix rendering issue with spinner

## [1.3.1] - 2025-12-24

### Fixed

- Fix crash when continuing conversation
- Fix Nix flake to not export python

## [1.3.0] - 2025-12-23

### Added

- agentskills.io support
- Reasoning support
- Native terminal theme support
- Issue templates for bug reports and feature requests
- Auto update zed extension on release creation

### Changed

- Improve ToolUI system with better rendering and organization
- Use pinned actions in CI workflows
- Remove 100k -> 200k tokens config migration

### Fixed

- Fix `-p` mode to auto-approve tool calls
- Fix crash when switching mode
- Fix some cases where clipboard copy didn't work

## [1.2.2] - 2025-12-22

### Fixed

- Remove dead code
- Fix artefacts automatically attached to the release
- Refactor agent post streaming

## [1.2.1] - 2025-12-18

### Fixed

- Improve error message when running in home dir
- Do not show trusted folder workflow in home dir

## [1.2.0] - 2025-12-18

### Added

- Modular mode system
- Trusted folder mechanism for local .vibe directories
- Document public setup for vibe-acp in zed, jetbrains and neovim
- `--version` flag

### Changed

- Improve UI based on feedback
- Remove unnecessary logging and flushing for better performance
- Update textual
- Update nix flake
- Automate binary attachment to GitHub releases

### Fixed

- Prevent segmentation fault on exit by shutting down thread pools
- Fix extra spacing with assistant message

## [1.1.3] - 2025-12-12

### Added

- Add more copy_to_clipboard methods to support all cases
- Add bindings to scroll chat history

### Changed

- Relax config to accept extra inputs
- Remove useless stats from assistant events
- Improve scroll actions while streaming
- Do not check for updates more than once a day
- Use PyPI in update notifier

### Fixed

- Fix tool permission handling for "allow always" option in ACP
- Fix security issue: prevent command injection in GitHub Action prompt handling
- Fix issues with vLLM

## [1.1.2] - 2025-12-11

### Changed

- add `terminal-auth` auth method to ACP agent only if the client supports it
- fix `user-agent` header when using Mistral backend, using SDK hook

## [1.1.1] - 2025-12-10

### Changed

- added `include_commit_signature` in `config.toml` to disable signing commits

## [1.1.0] - 2025-12-10

### Fixed

- fixed crash in some rare instances when copy-pasting

### Changed

- improved context length from 100k to 200k

## [1.0.6] - 2025-12-10

### Fixed

- add missing steps in bump_version script
- move `pytest-xdist` to dev dependencies
- take into account config for bash timeout

### Changed

- improve textual performance
- improve README:
  - improve windows installation instructions
  - update default system prompt reference
  - document MCP tool permission configuration

## [1.0.5] - 2025-12-10

### Fixed

- Fix streaming with OpenAI adapter

## [1.0.4] - 2025-12-09

### Changed

- Rename agent in distribution/zed/extension.toml to mistral-vibe

### Fixed

- Fix icon and description in distribution/zed/extension.toml

### Removed

- Remove .envrc file

## [1.0.3] - 2025-12-09

### Added

- Add LICENCE symlink in distribution/zed for compatibility with zed extension release process

## [1.0.2] - 2025-12-09

### Fixed

- Fix setup flow for vibe-acp builds

## [1.0.1] - 2025-12-09

### Fixed

- Fix update notification

## [1.0.0] - 2025-12-09

### Added

- Initial release
