Revision history for Claude-Agent 0.15 2026-10-17 - Match a hook pattern without regex metacharacters exactly, as the CLI does - Encode a status line to UTF-8 when STDOUT has no encoding layer 0.14 2026-10-16 - Refactor to use Object::Proto - Speak the Claude Code SDK control protocol - Run hooks through the CLI - Answer can_use_tool permission requests through --permission-prompt-tool stdio. - Serve SDK MCP servers in-process over mcp_message; remove SDKServer and SDKRunner. - Add options: effort, tools, betas, max_budget_usd, add_dirs, settings, session_id, fallback_model, thinking, include_hook_events, forward_subagent_text, strict_mcp_config, plugins, extra_args, env, stderr, cli_path, enable_file_checkpointing. - Honour cwd, continue_conversation, include_partial_messages, sandbox and agents. - Add permission modes auto and manual; drop delegate. - Parse every stream-json message type; keep the raw hash on each message; add StreamEvent, RateLimitEvent, ToolProgress and HookEvent. - Client keeps one CLI process per session. - Add Query methods set_model, set_max_thinking_tokens, mcp_status, get_context_usage, server_info, close and the _async forms. 0.13 2026-01-11 - fix progress spinner 0.12 2026-01-11 - fix utf8 print bug 0.11 2026-01-11 [Session Support] - Added session() export for multi-turn conversations - Client::send() now properly resumes sessions (creates new Query with --resume) - Fixed multi-turn async sessions (CLI exits after each turn, resume required) - Added loop parameter documentation to session() - New examples/14-session.pl demonstrating async multi-turn sessions - New t/14-session.t test file [CLI Utilities] - New Claude::Agent::CLI module for interactive terminal UI - Spinners: with_spinner, start_spinner, stop_spinner (IO::Async support) - Prompts: prompt, ask_yn, menu, select_option, choose_from, choose_multiple - Display: header, divider, status (colored output) - Terminal control: clear_line, move_up - Uses Term::Choose for keyboard-navigable menus - Uses Term::ProgressSpinner for async-compatible spinners 0.10 2026-01-11 [Socket Lifecycle] - Added cleanup() method to Query for explicit socket cleanup - Fixes socket accumulation in iteration loops (e.g., refactor_until_clean) - SDK server sockets now cleaned up after each query iteration - _resolve_pending_futures_on_finish now delegates to cleanup() 0.08 2026-01-11 [Async Support] - Async tool handlers: return Futures for non-blocking I/O - Async hooks: callbacks can return Futures for async validation - IO::Async::Loop passed to handlers/hooks for event-driven operations - Backward compatible: sync handlers/hooks still work unchanged [Debug Logging] - Comprehensive operational logging (set CLAUDE_AGENT_DEBUG=1) - Message lifecycle: receive, queue, deliver, process - Socket lifecycle: connect, accept, close - Tool execution: start, complete, results - Hook execution: matchers, decisions, blocked tools [Examples] - examples/12-async-tool.pl: async tool patterns - examples/13-async-hook.pl: async hook patterns 0.07 2026-01-11 - Added configurable logging system via Log::Any - New Claude::Agent::Logger module for default adapter setup - Environment variables: CLAUDE_AGENT_LOG_LEVEL, CLAUDE_AGENT_LOG_OUTPUT - Backward compatible with CLAUDE_AGENT_DEBUG (1=debug, 2=trace) - Users can configure their own Log::Any adapter for custom formatting - Migrated all debug statements from warn to $log->debug/trace/info 0.06 2026-01-10 - Added Perl hook execution via Claude::Agent::Hook::Executor - Hooks now execute in-process (PreToolUse, PostToolUse, PostToolUseFailure) - Added dry-run mode (dry_run option) to preview changes without executing - New Claude::Agent::DryRun module for write-tool interception - on_dry_run callback for custom dry-run handling - Improved hook system integration in Query.pm - Updated examples/03-hooks.pl to demonstrate working Perl hooks - New examples/04-dry-run.pl for dry-run mode demonstration 0.05 2026-01-10 - Added Claude::Agent::Code::Review module for AI-powered code review - Perl::Critic integration for deterministic static analysis - False positive filtering with custom filter support - Structured output with Issue and Report objects 0.04 2026-01-10 - Fixed JSON::Lines encode() calls to properly wrap hashrefs in arrays - Added comprehensive MCP documentation with architecture diagram - Added step-by-step tool creation guide and complete examples - Fixed SDKRunner, SDKServer, and Query to use correct encode() API 0.03 2026-01-10 - SDK MCP tools now execute locally via Unix socket IPC - Added Claude::Agent::MCP::SDKServer for socket-based tool execution - Added Claude::Agent::MCP::SDKRunner as the MCP protocol handler - SDK servers are automatically converted to stdio MCP servers - Tool handlers can now access application state, databases, and APIs - Updated POD documentation for SDK MCP functionality - Updated examples/02-custom-tools.pl and examples/10-mcp-servers.pl 0.02 2026-01-10 - Async improvements: truly event-driven next_async() instead of polling - Added 'loop' parameter to query(), Client, and Query for shared event loops - Futures now resolve when messages arrive, not via delay_future polling - Added _pending_futures queue for proper async message delivery - Updated documentation and examples for proper async usage - Added structured_output field normalization for Result messages 0.01 2026-01-09 First version, released on an unsuspecting world.