- UI Separation migration complete: Agent layer is purely event-driven, UI layer owns all presentation
- Added
UIHandlerprotocol and built-inInteractiveUIHandlerandBatchUIHandler - Added
UIBridgeto dispatch agent events to UI handlers without terminal logic in the agent - Added package plugin system: load tools, skills, and agents from Python packages via
--with <package> - Added
__YOKER_MANIFEST__plugin declaration format - Added content type detection utility (
yoker.content_type) - Tools now emit
ToolContentEventwith appropriate MIME types (text/plain, text/x-diff, application/json) - Added slash commands:
/skills,/context,/tools,/agents - Migrated configuration system to Clevis with auto-generated CLI arguments and environment variable support
- Removed
Agent.begin_session()andAgent.end_session(); agent lifecycle is now create → use → discard - Removed
ConsoleEventHandler; all terminal output is handled byUIHandlerimplementations - Refactored
Agentintoyoker.agentpackage withAgentCore,Agent,processing, andtoolsmodules ContextManageris now list-like and extendsUserList
- Graceful handling of non-recoverable
NetworkErrorin the CLI session loop - Fixed content type detection fallbacks for unknown file types
- Fixed tool parsing: tools are now parsed into
ToolSpecduring plugin load for consistent architecture - Fixed error handling:
clevis.SecurityErroris now caught and displays a clean error message
- Added
Config.discover()class method for auto-discovering configuration - Added environment variable configuration support (
YOKER_*or{PREFIX}_YOKER_*) - Added agent definition path in configuration (
agents.definition) - Config now auto-discovers from
./yoker.toml,~/.yoker.toml, and environment variables
- Fixed config file discovery to properly locate agent definitions
- Fixed TOML path handling for Windows compatibility (forward slashes)
- Configuration resolution order: environment variables → explicit config → explicit path → discovered config → defaults
- Added async event handler support (handlers can be sync or async)
- Async handlers can directly
awaitI/O operations - Added proper async
__call__method detection on handler instances
- Fixed async event handler invocation
- Fixed spinner issues in async context
- Fixed storage path expansion for
~(home directory) - Fixed hatch build configuration for wheel packaging
- All Agent methods are now async:
begin_session(),process(),end_session() - CLI uses async prompt input for consistency
- Removed conflicting hatch sources configuration
- Event-driven architecture with session, turn, thinking, content, and tool events
- Tool system with guardrails: read, list, write, update, search, existence, mkdir, git, agent
- Web tools: web_search, web_fetch with SSRF protection
- Agent definitions from Markdown files with YAML frontmatter
- Context persistence (JSONL) for session resumption
- Thinking mode (LLM reasoning trace)
- Configuration system with frozen dataclasses
- Slash commands: /help, /think, /context
- Demo session scripts for documentation
- Library-first design (Agent emits events, handlers subscribe)
- Async-first implementation
- Guardrails for filesystem tools (defense-in-depth validation)
- Static permissions defined in configuration
See GitHub Releases for detailed release notes.