✨ Added
Architecture
- Multi-Agent / Multi-Workspace Architecture: Support running multiple agents simultaneously, each with its own isolated workspace containing independent config, memory, skills, and tools. Includes a console agent selector for easy switching between agents (#1375, #1625, #1670, #1714, #1664, #1614)
- Context Management: Added token counting,
/dump_historyand/load_historycommands, configurable history length limits, and progress indicators during memory compaction (#1628, #1754, #1689)
Security
- Skill Security Scanner: Skills are now scanned for security risks (prompt injection, command injection, hardcoded secrets, data exfiltration) before installation using static analysis (#564)
- Destructive Shell Command Detection: Added security rules to detect dangerous shell commands such as disk formatting, fork bombs, reverse shells, and privilege escalation attempts (#1484, #1529)
- Web Authentication: Added optional web authentication with single-user registration, token-based login, localhost bypass, and CLI command (#1329, #1666, #1719)
Channels
- WeCom Channel: Added WeCom as a messaging channel with media support, QR code access, console configuration UI (#1407, #1706, #1725, #1728, #1681, #1747, #1766, #1618, #1631, #1860, #1856)
- XiaoYi Channel: Added XiaoYi as a messaging channel (#1213)
- DingTalk AI Card Reply: DingTalk now supports AI Card-based replies with incremental streaming, falling back to webhook/markdown when unavailable (#1118)
Skills & Tools
- LobeHub Skill Import: Skills can now be imported directly from LobeHub (#1350)
- ModelScope Skill Hub: Skills can now be imported from ModelScope Skill Hub (#1673)
- Version-Aware Builtin Skill Sync: Built-in skills now track versions and automatically sync updates while preserving user customizations (#1674, #1716, #1749)
- Guidance Skill: Added a built-in skill that answers CoPaw installation and configuration questions using local docs and the official website (#1522)
- Zip Archive Skill Import: Skills can now be imported by uploading zip archives directly from the console (#1840)
- Built-in Tools: Added
glob_searchandgrep_searchas built-in tools for file discovery and content search within the agent workspace (#1852) - MCP Header Environment Variables: Support MCP HTTP client headers expanding
${ENV_VAR}placeholders (#1629)
Multimodal
- Console Multimodal Chat: The console chat now supports sending images and files alongside text messages (#1772)
- View Image Tool: Added a
view_imagetool that lets the LLM analyze local images for multimodal conversations (#1526) - Non-Multimodal LLM Media Fallback: When a non-multimodal LLM receives image/audio/video content, the system now automatically strips media blocks and retries the request (#1676)
- Audio Transcription: Added voice message transcription via Whisper API or local Whisper model, with audio format conversion and a Voice Transcription settings page in the console (#1476, #1726)
Providers
- Gemini Provider: Added Google Gemini as a built-in LLM provider (#1507)
- DeepSeek Provider: Added DeepSeek as a built-in LLM provider (#1498)
- MiniMax Provider: Added MiniMax as a built-in LLM provider with separate International and China endpoints (#1376, #1735)
- Kimi Provider: Added Kimi as a built-in LLM provider with separate China and International endpoints (#1832)
CLI & Deployment
copaw updateCommand: Addedcopaw updateandcopaw shutdownCLI commands.copaw updateautomatically detects the environment and upgrades CoPaw from PyPI (#1278)- Docker Compose: Docker deployment now uses
docker-compose.ymlfor easier setup and volume management (#1320) - Docker Image: Included additional channel dependencies in the Docker image (#1761)
Console & UI
- Console Dark Mode: Added full dark mode support to the console with a theme toggle (light / dark / follow system) covering all pages (#1566, #1637, #1662)
- Console Chat Streaming: Agent responses in the console are now streamed via SSE, with support for reconnection and stopping mid-response (#1571, #1672)
CLI, Deployment & Others
- Timezone Configuration: Added a timezone selector in the console; timezone is used across system prompts, cron scheduling, and heartbeat. Supports auto-detection on multiple platforms (#1535, #1746)
- OS Information in System Prompt: The system prompt now includes OS information for more platform-aware responses (#1660)
🔄 Changed
Core & Lifecycle
- Graceful Lifecycle Management: Desktop subprocess, agent reload, and shutdown are now handled gracefully — subprocesses terminate cleanly on close, agents reload with zero downtime, and active tasks are awaited before shutdown (#1646, #1664, #1714)
- Custom Working Directory: Replaced hardcoded
~/.copawpaths throughout the codebase so custom working directories (COPAW_WORKING_DIR) work correctly (#1652) - Dynamic Token Counting: Token counting now uses agent-specific configuration instead of a hardcoded global tokenizer, enabling per-agent token counting settings (#1819)
- Config Loading Protection: Config loading is now wrapped with error handling so path normalization or heartbeat config failures do not crash the application (#1865)
Providers & Models
- Provider / Model Consistency: The console now re-fetches active models on navigation so the displayed provider and model stay in sync (#1420)
- Ollama Default Address: Changed Ollama default address from
localhostto127.0.0.1for more reliable connections (#1480) - Provider Request Headers: Improved provider-specific HTTP header handling with exact URL matching for DashScope (#1757)
Console, UI & Platform
- Console Internationalization: Improved multi-language support in the console, including synced locale settings, localized document navigation, and localized chat prompts / greeting text (#1409, #1686, #1707, #1858)
- Workspace Path: Workspace path is now read-only when editing an existing agent to prevent accidental changes (#1624, #1764)
- Windows Desktop Startup: Pre-compiled Python bytecode for faster Windows desktop startup (#1639)
- QQ Channel Reply Logic: Improved reply logic with DM support and better handling of blocked URLs (#1650)
🐛 Fixed
Channels
- Telegram: Fixed thread replies, media handling, and error reporting. Polling now auto-reconnects with exponential backoff on network failure (#1210, #1475)
- Discord: Fixed messages from different channels being incorrectly merged; normalized Discord IDs for cron dispatch. The debounce fix was also generalized to all channels (#300, #1002, #1583)
- DingTalk: Fixed incorrect message skipping when sender info is partially missing; skipped empty text blocks in rich text parsing (#851, #1554)
- Feishu: Fixed card tables exceeding the per-card element limit; added voice message support; fixed channel reload failure caused by WebSocket event loop conflicts (#1627, #1726, #1817)
Providers & Models
- Ollama / LM Studio: Fixed context length settings not taking effect; connection and model-fetch errors now show the actual error message (#1427, #1745)
- Streaming Response: Fixed a crash when streaming response chunks have no choices (#1524)
- Reasoning Content: Fixed reasoning content being lost when the message formatter changes the assistant message count (#1557)
- Tool Choice: Fixed
tool_choicebeing incorrectly forced toauto; it is now passed through as-is (#1570)
Skills
- Cron Jobs: Fixed weekday name mismatch causing cron jobs to fire on wrong days; added UTC time context to prevent timezone drift; custom cron expressions now survive editing in the UI; invalid cron jobs are gracefully skipped; agents can now create cron jobs in the correct workspace (#1269, #1432, #1257, #1734, #1768, #1839)
- Skills: Fixed import failures when skill names contain
/; removed duplicate built-in skill listings; fixed incomplete file imports from bundles; restored skill enable/disable after sync refactor; added cancel option and timeout reminder for slow imports; skill descriptions now display correctly in the console; added user-friendly error messages with security scan details when import fails (#1369, #1396, #1576, #1716, #1720, #1626, #1862)
Console, UI & Platform
- Memory Compaction: Fixed a crash when the system prompt is empty during memory compaction (#1608)
- Console Chat: Fixed unwanted page redirect on refresh; copy now extracts text content instead of raw JSON; session list refreshes correctly when switching agents; chat sessions now persist across page navigation (#1373, #1471, #1662, #1722)
- Console UI: Fixed static resource loading failures, workspace list refresh, workspace path display, version notification filtering, and miscellaneous TypeScript errors (#1402, #1737, #1764, #1769, #1822)
- Windows Compatibility: Fixed cross-disk file moves, suppressed spurious AutoRun stderr in shell commands, and fixed emoji/Unicode logging on GBK consoles (#1483, #1556, #1601, #1495)
📚 Documentation
- Ollama Context Length: Added a warning about Ollama and LM Studio context length configuration (#1433)
- Chinese Docs: Fixed formatting and consistency issues across Chinese documentation (#1300)
- Docker QuickStart: Aligned Docker secrets documentation on the QuickStart page (#1584)
- Cron Skill: Updated
--channeloptions in cron skill docs to list all supported channels (#1541) - Channel Allowlist: Added documentation for channel allowlist configuration, mentions, and ID hints (#1760)
- Developer Community: Added developer community group information (#1678)
- Console: Updated the release note link in the console UI (#1622)
- WeCom SDK: Added instructions for using the official WeCom AI Bot SDK for channel setup (#1843)
New Contributors
- @dipeshbabu made their first contribution in #851
- @sljeff made their first contribution in #1269
- @octo-patch made their first contribution in #1376
- @Alexxigang made their first contribution in #1396
- @howyoungchen made their first contribution in #1432
- @nphenix made their first contribution in #1495
- @skyfaker made their first contribution in #1498
- @hh0592821 made their first contribution in #1210
- @futuremeng made their first contribution in #1480
- @toby1123yjh made their first contribution in #1541
- @hiyuchang made their first contribution in #1522
- @hanson-hex made their first contribution in #1300
- @JackyMao1999 made their first contribution in #1320
- @mvanhorn made their first contribution in #1556
- @yuanxs21 made their first contribution in #1584
- @aissac made their first contribution in #1608
- @lcq225 made their first contribution in #1601
- @Justin-lu made their first contribution in #1118
- @rowanchen-com made their first contribution in #1329
- @pzlav made their first contribution in #1484
- @mautops made their first contribution in #1725
- @hikariming made their first contribution in #1832
- @Vanlee0129 made their first contribution in #1830
- @JiwaniZakir made their first contribution in #1629
- @EuanTop made their first contribution in #1722
Full Changelog: v0.0.7...v0.1.0