Copied from the repo’s CHANGELOG.md, which is generated by just release using timbers draft changelog | claude -p --model opus.
Changelog All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.16.3 - 2026-03-28 Fixed Fixed doctor --fix targeting wrong settings scope when cleaning up stale Claude hooks — Detect() found stale hooks in global settings but Install(true) always wrote to project-local, so retired hooks in global settings survived --fix Changed Released v0.16.2 changelog, regenerated site examples, and cleaned leaked LLM commentary from prior release notes 0.16.2 - 2026-03-28 Fixed Fixed hook deadlock during rebase, merge, cherry-pick, and revert where agents were blocked by pending-commit checks and couldn’t log or continue Fixed --range silently dropping entries when only some anchor commits were stale; v0.15.3 fallback only triggered on zero anchor matches, missing the partial-stale case Technical Added git.IsInteractiveGitOp() that detects in-progress interactive git operations by checking .git state files; all hooks early-return during these operations Changed --range entry discovery to run both anchor-based and diff-based discovery unconditionally and union results by entry ID 0.16.0 - 2026-03-23 Fixed Fixed query --range returning empty results after squash merge, where entry anchor_commit SHAs from feature branches disappear from main history Added fallback discovery via git diff --name-only when commit-ancestry matching finds zero entries in a range Technical Added DiffNameOnly to GitOps interface to support file-based entry discovery in getEntriesByRange 0.15.3 - 2026-03-22 Fixed Fixed query --range returning empty results after squash merge by falling back to file-based entry discovery when anchor commit SHAs are no longer in main’s history 0.14.4 - 2026-03-05 Fixed Respected core.hooksPath git config for hook installation instead of hardcoding .git/hooks/, fixing compatibility with tools like beads that set a custom hooks directory Updated GeneratePreCommitHook to accept a dynamic hooksDir parameter for correct --chain backup paths 0.14.3 - 2026-03-05 Fixed Fixed chained pre-commit hook silently overriding timbers exit code, allowing commits to succeed even when pending entries should have blocked them 0.14.2 - 2026-03-05 Fixed Expanded stop hook reason to include full timbers log syntax with --why/--how flags so agents receive an actionable command instead of a bare timbers log that would fail 0.14.0 - 2026-03-04 Changed Simplified hook enforcement by dropping PreToolUse handler in favor of pre-commit blocking, which works universally across all git clients Kept Stop hook as a session-end backstop for agents that bypass pre-commit Updated hooks install help text from “warns” to “blocks” to reflect actual behavior Fixed Fixed uninstall leaving retired hooks (PostToolUse, PreToolUse) in settings by adding retiredEvents cleanup loop Removed Removed PreToolUse handler, dispatch case, and associated tests from hook enforcement 0.13.2 - 2026-03-03 Fixed Fixed timbers log hard-erroring on stale anchor after squash merge, now warns and proceeds with fallback commits Fixed timbers log --batch treating ErrStaleAnchor as fatal, matching the graceful degradation already used by pending, prime, and MCP 0.13.1 - 2026-03-03 Added Added quick health check to timbers prime output that surfaces missing hooks and integration issues at session start runQuickHealthCheck validates post-commit hook and agent environment, displaying a Health section with doctor --fix hint when issues are found 0.13.0 - 2026-03-02 Added Added timbers hook run post-commit command that prints a one-line reminder to run timbers log after commits Added timbers init --hooks flag to install the post-commit git hook Added timbers doctor check for post-commit hook presence, with --fix to auto-install it Fixed Fixed slice capacity mismatch (5→6) in post-commit hook setup Added missing IsRepo guard to prevent hook operations outside git repositories Technical Added unit tests for hook Generate, Check, and Install functions Added integration tests for init --hooks post-commit workflow 0.12.2 - 2026-03-02 Fixed Fixed timbers pending treating all pre-timbers commit history as undocumented work in new installations Fixed timbers doctor reporting false warnings about pending commits when no ledger entries exist yet Changed timbers pending and timbers doctor now detect first-use state (no entries) at the display layer and show a friendly onboarding message instead of listing every historical commit Added status field to timbers pending --json output to distinguish pending, clean, and no_entries states timbers init now suggests running timbers log --batch to document recent work as a catchup tip 0.12.1 - 2026-02-28 Added Added LLM output sanitization (SanitizeLLMOutput()) to strip thought-process leakage from --model output, plus “output discipline” prompting added to all 7 built-in templates Added notes field to site landing page marketing content Added static example generation for dense date ranges to avoid redundant LLM calls on every release Changed Replaced auth examples with cursor-based pagination examples across README and landing page Split site example generation into dynamic (per-release) and static (fixed date range) justfile recipes Parallelized site example generation Replaced declare -A with parallel arrays in example recipes for macOS bash 3.2 compatibility Updated standup examples to use --since 1d Bumped go-sdk to v1.3.1 for CVE-2026-27896 (case-insensitive JSON parsing) Fixed Removed leaked LLM commentary and duplicate sections from CHANGELOG.md and site examples 0.12.0 - 2026-02-28 Added Added --models flag to timbers draft to list supported LLM providers, model aliases, and required API keys Added --json support for timbers draft --models for agent consumption Added internal/llm package with provider metadata and alias resolution Changed Updated README, tutorial, and docs/llm-commands.md with verified piping syntax for all three supported LLM CLIs (claude, gemini, codex) Fixed Fixed Codex CLI flag placement in docs — -m belongs to codex exec, not the root codex command Fixed release dirty-tree check to exclude CHANGELOG.md and site/content/examples/ (outputs of the release process) Fixed release recipe to skip already-modified site examples, avoiding redundant LLM calls on partial reruns Fixed defensive alias copy in ProviderInfos() using maps.Copy to prevent callers from mutating package state 0.11.0 - 2026-02-27 Added Added govulncheck as a Go tool dependency with just vulncheck recipe for vulnerability scanning Added automatic landing page version update during just release Added generation capability check to timbers doctor with CLI/API key detection via llm.APIKeyEnvVars() Added just examples recipe to justfile Changed Renamed exec-summary template to standup for better discoverability Rewrote pr-description template (v4) to focus on intent and decisions rather than diff review Updated prime workflow coaching to recommend pipe-first generation defaults for subscription users Fixed Fixed devblog workflow generating empty “apology” posts when no entries exist by adding entry count check before LLM invocation Fixed terminal colors invisible on dark backgrounds (e.g., Solarized Dark) by replacing hardcoded lipgloss.Color with AdaptiveColor across all output formatting 0.10.2 - 2026-02-26 Fixed Fixed timbers prime treating stale anchor as fatal error after squash merges — now handles ErrStaleAnchor gracefully like pending and MCP already do Improved stale anchor warning messages in CLI and MCP to be actionable: explains that squash-merged branches with timbers entries are already documented, advises against catch-up logging, and notes that the anchor self-heals on next timbers log Synced MCP defaultWorkflowContent with CLI version — MCP had a stale 4-line checklist instead of the full coaching content Added Added <stale-anchor> coaching section to prime workflow, guiding agents through the correct response when anchor commits are missing from history after squash merges 0.10.1 - 2026-02-16 Changed Regenerated site examples and devblog from 69-entry ledger, replacing stale content from v0.9.0 Added provenance note to agent DX guide subtitle crediting pattern origins Updated landing page to v0.10.0 with terminal indentation fix Fixed Removed PostToolUse hook that fired but whose stdout was not surfaced by Claude Code — Stop hook already covers the same case via timbers pending at session end Technical Added retired event cleanup list for graceful hook removal on upgrade 0.10.0 - 2026-02-14 Added Added --color flag (never/auto/always) as a global persistent flag for terminal color control, fixing invisible text on Solarized Dark and other non-standard themes — all NewPrinter call sites plumbed through useColor(cmd) Added auto-commit in timbers log — entry files are now staged and committed atomically using git commit -m "timbers: document <id>" -- <path>, eliminating the gap where .timbers/*.json files were staged but never committed Added <content-safety> coaching section to prime workflow warning agents not to include PII, secrets, or sensitive data in ledger entries Added marketing landing page for Hugo site homepage with dark theme, terminal-styled code blocks, and GSAP ScrollTrigger animations Fixed Fixed PostToolUse hook to read JSON from stdin instead of empty $TOOL_INPUT environment variable, which was always empty and made the post-commit reminder a no-op since creation Fixed landing page terminal block alignment, continuation indentation, and quick start container width Technical Added legacy hook detection and upgrade logic via hasExactHookCommand and removeTimbersHooksFromEvent for replacing stale hooks automatically Added daily devblog automation at 9am UTC with workflow_dispatch chain to pages deploy 0.9.0 - 2026-02-13 Changed Rewrote agent coaching text with motivated rules — each instruction now explains why it exists, enabling models to generalize correctly instead of overtriggering on imperative language Replaced 11 instances of MUST/CRITICAL/MANDATORY with calm, motivated framing — when everything is critical, nothing is Replaced vague --notes guidance (“use when you made a real choice”) with concrete 5-point trigger criteria: 2+ approaches evaluated, obvious approach rejected, surprise encountered, future lock-in, non-obvious to teammates Structured coaching with XML section tags (<protocol>, <why-coaching>, <notes-coaching>, <commands>) for cleaner model parsing Deleted redundant “Core Rules (MANDATORY)” block that restated instructions already covered above Updated tutorial: added decision-log to template list, recommended install script over go install, updated model recommendations to recommend opus for quality content Fixed Fixed Hugo site baseURL from rbergman.github.io to gorewood.github.io after org migration Fixed devblog CI workflow failing on stale git fetch refs/notes/timbers — timbers uses .timbers/ directory storage, not git notes Fixed devblog posts not triggering site rebuild — GITHUB_TOKEN pushes don’t fire on:push workflows, added explicit workflow_dispatch chain from devblog to pages workflow Technical Switched devblog CI from weekly to daily schedule (9am UTC, --since 1d) Regenerated all site example artifacts from 55 real ledger entries with notes, replacing old 30-entry backfilled set 0.8.0 - 2026-02-13 Added Added --notes flag to timbers log for capturing deliberation context — the journey to a decision, distinct from --why which captures the verdict Added notes coaching to prime output with BAD/GOOD examples teaching “thinking out loud” style over mechanical summaries Added AgentEnv interface with registry pattern for agent-environment-neutral integrations, enabling single-file additions for new agent environments (Gemini, Cursor, Windsurf, Codex) Added ClaudeEnv as reference implementation of AgentEnv, wrapping existing Claude Code setup/teardown functions Changed Refactored init, doctor, setup, and uninstall commands to iterate AllAgentEnvs() instead of hardcoding Claude-specific logic Replaced --no-claude flag with generic --no-agent (deprecated alias preserved for backward compatibility) Tightened --why coaching to explicitly differentiate from --notes: why is the verdict, notes is the journey Preserved backward-compatible JSON keys (claude_installed, claude_removed) while generalizing step names and flags Fixed Fixed TestCommitFiles to use an isolated temp repo instead of live HEAD, which fails on merge commits where diff-tree returns empty Fixed TestRepoRoot to be worktree-compatible by replacing hardcoded directory name assertion with absolute path check Technical Extracted defaultWorkflowContent to prime_workflow.go to stay under 350-line file-length lint limit Extracted outputPrimeRecentWork from outputPrimeHuman to stay under cognitive complexity limit of 15 Added AgentEnvState slice pattern for uninstall to gather and remove all detected environments 0.7.0 - 2026-02-12 Added Added MCP server with 6 tools (pending, prime, query, show, status, log) over stdio transport via timbers serve subcommand, enabling integration with Claude Code, Cursor, Windsurf, Gemini CLI, and other MCP-compatible editors Added idempotentHint annotation to MCP read tools, allowing clients to optimize with caching and retry logic Changed Updated timbers onboard snippet with command -v guard and install URL for graceful degradation when timbers is not installed Replaced all git notes references across documentation with .timbers/ file-based storage Fixed Filtered ledger-only commits from GetPendingCommits to resolve chicken-and-egg problem where .timbers/ entry commits were always reported as undocumented Technical Moved filter functions to internal/ledger/ for sharing between CLI and MCP server Added git.CommitFiles() using diff-tree and expanded GitOps interface with isLedgerOnlyCommit helper Added validateLogInput to catch empty strings that the MCP SDK’s required-field check does not 0.6.0 - 2026-02-11 Changed Pivoted storage from git notes to flat directory files (.timbers/<id>.json), enabling atomic writes and eliminating merge conflicts in concurrent worktrees Simplified GitOps interface from 8 methods to 4 (HEAD, Log, CommitsReachableFrom, GetDiffstat) Adopted YYYY/MM/DD directory layout for .timbers/ entries to scale beyond flat-directory limits at high commit volumes Replaced ReadDir with WalkDir for recursive entry discovery across date-bucketed directories Rewrote uninstall command to clean up .timbers/ directory with recursive cleanup Removed Removed all git notes code and references (notes.go, notes_configured, remote_config fields, timbers notes push/fetch commands) Technical Migrated 37 existing ledger entries from git notes to .timbers/ flat files Extracted atomicWrite helper using temp-file-plus-rename pattern for crash-safe writes Added 14 integration tests proving file-per-entry storage is inherently merge-safe across branches 0.5.0 - 2026-02-11 Added Multi-event Claude Code hooks covering the full session lifecycle: SessionStart, PreCompact, Stop, and PostToolUse Upgrade path that preserves existing hooks when adding new reinforcement points Changed Expanded hook configuration from single SessionStart hook to four reinforcement points, addressing 0% compliance for undocumented commits with single-hook approach Generalized hook management via timbersHookConfig slice with addTimbersHooks/removeTimbersHooks functions 0.4.0 - 2026-02-10 Changed Rewrote Claude Code hook integration from shell scripts to JSON settings, fixing session-start context injection that previously had 0% adoption due to format mismatch Renamed internal/prompt package to internal/draft to match the draft command name Updated agent DX guide with v0.3+ learnings, JSON hook format documentation, and shell-script anti-pattern section Fixed Added graceful degradation when timbers is not installed — Claude Code hook now warns with install URL instead of erroring, unblocking adoption for team members without timbers Added isTimbersPrimeCommand() for backward-compatible detection of both legacy shell-script and new JSON hook formats Removed Removed legacy .claude/hooks/user_prompt_submit.sh shell script hook in favor of JSON settings Removed history/ artifacts from version control 0.3.0 - 2026-02-10 Added Added git.InitNotesRef() to create an empty notes namespace during init, so prime works immediately without requiring a manual first note Added tests for the prime guard silent-exit path and doctor --fix auto-install path Added TTY-aware lipgloss style sets to doctor and init output, following the existing uninstall pattern Added NotesRefExists guard to prime to prevent no-op runs in uninitialized repos Changed Switched Claude hooks from global to project-level by default; global install is now behind the --global flag Changed git hooks from default-on (--no-hooks to skip) to opt-in (--hooks to enable), avoiding conflicts with tools like beads that rely on pre-commit Renamed warn style to skip in init output styles for consistency Renamed gpt-5 model alias to gpt Updated agent-dx-guide documentation to reflect opt-in hooks and project-level defaults 0.2.0 - 2026-02-10 Added Added --tag filtering to timbers query command with OR semantics, supporting both repeated flags and comma-separated values Added timbers changelog command that generates markdown changelogs from ledger entries, grouped by tag Added timbers draft command (renamed from prompt) for document generation, with decision-log template in ADR format Added .env.local support for API keys via new internal/envfile package, loaded as fallback in root PersistentPreRunE Added cross-platform config directory support via new internal/config package with Dir() function, respecting TIMBERS_CONFIG_HOME, XDG_CONFIG_HOME, and Windows AppData Added CONFIG section to doctor command with checks for config dir, env files, API keys, and templates Added version check to doctor that queries GitHub releases API with graceful failure for dev builds and network errors Added draft status hint and stderr routing for errors/warnings when stdout is piped via output.Printer WithStderr() Added goreleaser configuration, GitHub Actions release workflow, and install.sh with checksum verification Added robustness for non-timbers git notes with ErrNotTimbersNote, schema validation, and ListEntriesWithStats() Added Configuration section to README documenting env file resolution, API key setup, and custom templates Added Installation section to README with curl|bash and go install methods Added MIT LICENSE, CONTRIBUTING.md, and CI workflow for test and lint Changed Renamed prompt command to draft and propagated rename across docs, justfile, and CI Surfaced draft command in prime output under a new Generating Documents section Rewrote README for open-source audience with badges and dogfood caveat Updated agent DX guide with v0.2 learnings Fixed org owner references from rbergman to gorewood in goreleaser and install script Fixed Fixed global state issue in status.go by switching to closure pattern Fixed amend.go output inconsistency Fixed uninstall.go icon usage Fixed ListTemplates override bug Fixed piped output corruption caused by errors and warnings being written to stdout instead of stderr 0.1.0 - 2026-02-10 Initial public release.
...