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.
- Startup box formatting consistency — unified checkmarks (
✅→✓), indented💡recommendations as sub-items under⚠warnings, broke sibling project names and skill names onto individual•bullet lines matching the Global Context section style, added○marker to the/plugin to browseline, and corrected a 4→3 space indent on that line.
- Coverage floor raised from 75%/80% to 84% — added ~30 fixture- and table-based tests covering
session-config permission branches, session-stats edge cases, formatter private methods
(
_format_git_section,_format_session_section,_format_rich_header), and selector edge cases (action items,__SPACE__separators, directory headers, env-var population, generic exception handler).selector.py75% → 95%,startup_report.py91% → 97%,formatter.py85% → 90%.
- Permission transparency report — new
ai-launcher permissionscommand and launch-box section that audits Claude Code's effective permissions, flags accumulated narrowBash()patterns, detects redundancy against globalBash(*), and emits actionable fix recommendations. Seedocs/permission-transparency.md. .vscode/extensions.jsonand.vscode/settings.json— shared workspace config so every contributor sees the same ruff/mypy warnings as CI.CONTRIBUTING.md— development setup, code style, testing, and local hook installation.docs/releasing.md— full release procedure including pre-release wheel test, dry-run, and failure recovery.Makefile— wraps the common dev commands (test,lint,validate-ci,install-hooks);validate-cidelegates toscripts/ci-local.shfor single-source truth with the pre-push hook..github/workflows/commit-lint.yml— PR-title gate enforcing Conventional Commits so squash-merge commits onmainstay parseable.- Markdown linting via
.markdownlint.jsoncwith prettier + markdownlint-cli2 pre-commit hooks. Prettier hard-wraps prose to 100 chars and aligns tables; markdownlint catches the rest. Every linter exception in the config carries an inline// whycomment.
- Launch box overflow on long paths and file lists — the 85-column box no longer breaks when paths or memory file lists exceed its width. Memory display lists files when ≤5 or shows count + wrapped directory path otherwise; recommendation lines use project-relative paths instead of absolute.
- Three unused-argument and one unused-variable lint issues in
_analyze_permissionsand the memory-list wrapper. - Dead parameters removed from
_analyze_permissions—global_deny,global_ask, andconfig_file_pathwere accepted but never read. Caller and tests updated. Docstring documents why deny/ask are tracked elsewhere.
- CLAUDE.md rewrite (322 → 57 lines) — restructured from a project overview into a behavior
contract with numbered Core Principles (Process, Project Invariants, Secrets), a Where Things Live
table, and Verification / Shell & Commits sections. Dev workflow content moved to
CONTRIBUTING.md; release content moved todocs/releasing.md. .gitignore— removed the overly defensive.vscode/*exclusion..vscode/is shared workspace config and now tracks all files.
- Rename "Boundary Protection" to "Sibling Projects" — the old name implied enforcement that doesn't exist. The feature only shows nearby projects for awareness, so the labeling now reflects that honestly. "Forbidden"/"Allowed" replaced with "Other"/"Selected".
- Dead code cleanup — removed
ConfigManager(core/config.py),settings.py, andshared_context.pywhich were never called by the CLI - Removed
HistoryConfigdataclass fromcore/models.py(only used by deleted ConfigManager) - Removed
docs/terminal-title.md— folded troubleshooting content intodocs/troubleshooting.md - Removed
docs/CONTEXT_TRANSPARENCY_IMPLEMENTATION.mdanddocs/REFACTORING_2026_02.md(completed checklists, archived to journal) - Removed tests for deleted code (
test_config.py,test_integration.py,test_settings_menu.py,test_shared_context.py)
- CLAUDE.md rewrite — trimmed from 698 to ~320 lines by removing duplication and linking to canonical docs
- Documentation accuracy pass — fixed all CLI syntax (
ai-launcher ~/projects→ai-launcher claude ~/projects), removed references to non-existent flags (--providers,--startup-report,--context-health) - README.md — converted relative doc links to full GitHub URLs for PyPI compatibility, added PyPI downloads badge
- docs/configuration.md — complete rewrite from config.toml reference to CLI flags reference
- docs/troubleshooting.md — removed stale config.toml references, added terminal title troubleshooting section
- docs/adding-providers.md — updated provider status table, replaced manual registration with auto-discovery
- docs/context-transparency.md — removed proposed/unimplemented CLI commands
- Renamed docs to lowercase kebab-case for consistency (
ARCHITECTURE.md→architecture.md, etc.) - Added
docs/README.mdindex for documentation navigation
- Quote
sys.executableand helper script paths in all fzf--previewcommands — fixes'C:\Program' is not recognizederrors on Windows when Python is installed underC:\Program Files\...
- Added
quote_for_fzfandfzf_preview_cmdhelpers toutils/paths.pyto centralise fzf command quoting - Removed redundant
import sysfrom UI modules that no longer reference it directly
- Auto-download fzf when missing — prompts user and fetches from GitHub releases
- Cross-platform Python helpers for fzf preview commands (
_browser_preview.py,_file_preview.py)
- Cross-platform encoding: all fzf subprocess calls use binary mode with explicit UTF-8 encode/decode, fixing Windows cp1252 mangling
- Delimiter escaping: consistent
\\t\\tin all fzf--delimiterargs (raw tab chars were mangled by Windows command-line processing) - Project discovery on native Windows — follow NTFS junctions and symlinks (Python 3.12+ treats
junctions as symlinks, causing
os.walkto silently skip them) - Circular symlink protection during project scanning via real-path cycle detection
- Detect
.gitfiles (Git submodules) in addition to.gitdirectories - Replace hardcoded
:path separators withos.pathsepfor Windows - Fix root path detection to work on Windows (no hardcoded
/) - Cross-platform test compatibility (macOS symlink resolution, Windows subprocess handling)
- Removed references to non-existent
--setupCLI flag - Codecov integration (tokenless org-level auth)
- All fzf callers (settings, shared context, browser, context viewer) use consistent binary-mode pattern
- Release script (
scripts/release.py) extended with full lifecycle automation: PR merge, CI wait, tag, and GitHub release creation - Tag protection and publish workflows hardened for CI reliability
Note: Versions 0.1.1–0.1.3 were incremental debugging releases and have been yanked from PyPI. All their fixes are included in 0.2.0.
- Provider abstraction layer - Extensible system for multiple AI tools
- ClaudeProvider - Full Claude Code integration
- GeminiProvider - Google Gemini CLI support
- CursorProvider - Cursor IDE integration
- AiderProvider - Aider pair programmer integration
- CopilotProvider - GitHub Copilot CLI integration
- Provider registry - Centralized provider management
- Discovery mode (
--discover) - Shows installed providers and context - Context viewer (
--context) - Interactive visualization of AI context files - Provider listing (via
--discover) - Quick overview of available tools - Per-project provider override - Different AI tools per project
- Context analysis - Categorizes and analyzes provider context files
- Provider metadata - Version detection, installation status, context stats
- Session Configuration - Shows all session-affecting settings
- Auto-approved commands count (from
.claude/settings.local.json) - MCP servers status (from
~/.claude/mcp.json) - Hooks configuration (from
~/.claude/hooks.json) - Model selection (from
~/.claude/settings.json)
- Auto-approved commands count (from
- Claude Memory - Personal and project memory files with line counts
- Claude Skills - Installed skills count and names
- Global Context - Complete breakdown of all loaded context files
- Cache files (changelog, etc.)
- Plan files (active plans)
- Plugin READMEs
- Project memories and journals from other projects
- Sibling Projects - Sibling project awareness
- Shows nearby projects in the same parent directory
- Highlights which project is selected
- Complete transparency - Every file loaded into context is now visible
- Available in both Python and bash implementations
- Automatic title setting - Terminal title shows project and provider
- Customizable format - Configure via
terminal_title_formatin config - Format variables -
{project},{provider},{path},{parent} - Smart terminal detection - Works with xterm, iTerm2, GNOME Terminal, Windows Terminal, tmux, etc.
- tmux support - Special handling for tmux sessions
- Enable/disable - Control via
set_terminal_titleconfig option - Example formats:
"{project} → {provider}"→ "my-app → Claude Code" (default)"🤖 {project} | {provider}"→ "🤖 my-app | Claude Code""{parent}/{project}"→ "projects/my-app"
- Interactive project selector with tree-structured navigation
- fzf-powered fuzzy search interface
- Automatic git repository discovery with configurable scan paths
- Manual project management (add/remove paths)
- Rich preview pane showing:
- CLAUDE.md and other context files (first 20 lines)
- Git status (up to 15 changed files)
- Directory contents (20 items, folders first) - always shown
- Tree view with hierarchical folder structure
- Smart cursor positioning (starts on last opened project)
- Symlink support for manual paths
- Exact substring matching for project filtering
- Action menu (Rescan, Add path, Remove path)
- Cross-platform support (Linux, macOS, Windows/WSL)
- Pre-commit hooks for code quality
- Comprehensive test suite with pytest
- Solent Labs™ branding in UI headers
- Claude CLI auto-install with platform detection
- Platform-specific installation instructions and prompts
- Automatic config directory creation
- Complete rebranding from claude-launcher to ai-launcher (23 files)
- Replaced hardcoded Claude logic with provider abstraction system
launch_claude()→launch_ai()with provider parameter- Updated all module docstrings and references
- Config paths now use
~/.config/ai-launcher/instead of~/.claude/ - Config now includes
[provider]section for multi-tool support - Preview pane now always shows contents (not either/or with git)
- Directory listings now show folders first, then files
- Simplified menu header text to avoid truncation
- Enhanced bash script with 665 lines of functionality
- CLI help text updated to reflect multi-provider support
- Config directory creation errors (mkdir -p before writes)
- Preview pane folders-first sorting logic
- Text truncation in fzf headers
- Manual path directory creation bug
- Python 3.8+ compatibility
- SQLite storage for manual paths and history
- Platform-specific config and data directories (
~/.config/ai-launcher/) - Robust error recovery (database corruption, missing paths)
- TOML-based configuration
- First-run setup wizard
- Dual implementation: Bash prototype + Python package