What's Changed
- fix(security): enforce HTTPS for sensitive data transmission by @agorevski in #881
- fix(security): replace hard-coded crypto test values with runtime-generate secrets by @agorevski in #882
- fix(security): prevent cleartext logging of sensitive data by @agorevski in #883
- fix(tools): remove non-string enum from pushover priority for Gemini compat by @kunwl123456 in #846
- feat(channel): make message timeout configurable by @gundemirbas in #840
- fix(provider): enable native tool calling for OllamaProvider by @reidliu41 in #825
- docs(readme): add multilingual announcement board + OAuth warning by @chumyin in #890
- Add Linq channel for cross-platform iMessage/RCS/SMS by @ghsmc in #836
- chore: Remove blocking read strings by @jaysonsantos in #838
- Add missing mattermost/dingtalk/qq checking by @InuDial in #835
- fix(providers): implement chat_with_tools for OpenAiProvider by @Marlinski in #827
- feat(cron): add
cron updateCLI subcommand by @ecschoye in #808 - fix(channel/signal): route UUID senders as direct recipients by @ibhagwan in #858
- fix(agent): include workspace files when AIEOS identity is configured by @pappacorleone in #860
- fix(provider): fallback to responses on chat transport errors by @chumyin in #896
- chore: add nix files for easy onboarding on the project by @jaysonsantos in #897
- feat: add
zeroclaw config schemafor JSON Schema export by @s04 in #849 - fix(provider): strip tags and merge system messages for MiniMax by @YubinghanBai in #863
- feat(onboard): add optional --model flag to quick setup by @cbigger in #866
- fix(agent): inject full datetime into system prompt and allow date command by @YubinghanBai in #864
- fix(config): preserve explicit custom provider when legacy PROVIDER is set by @chumyin in #908
- feat(channels): implement WhatsApp Web channel with wa-rs integration by @mmacedoeu in #859
- Remove more blocking io by @jaysonsantos in #891
- fix(provider): resolve fallback provider credentials independently by @vernonstinebaker in #911
- fix(channel): update last_recv on WS Ping/Pong frames in Lark channel by @kunwl123456 in #904
- feat(channels): add threading support to message channels by @dwillitzer in #905
- fix(config): log resolved config path and source at startup by @chumyin in #909
- feat(provider): add dedicated AWS Bedrock Converse API provider by @KevinZhao in #869
- fix(security): respect quoted shell separators in policy checks by @chumyin in #902
- fix(provider): correct assistant content type in Codex chat history by @zverozabr in #915
- fix(tests): make issue #868 model-refresh regression deterministic by @chumyin in #919
- fix(ci): publish multi-arch Docker images and stabilize release tags by @chumyin in #921
- docs(readme): add multilingual impersonation warning for openagen fork/domain by @chumyin in #922
- fix: fail fast on context-window overflow and reset sender history by @chumyin in #924
- fix(channels): compact history on overflow and bound memory-context injection by @chumyin in #928
- feat(gateway): add system prompt to webhook and WhatsApp handlers by @valmy in #878
- feat(memory): add embedding hint routes and upgrade docs (fix #791) by @chumyin in #914
- feat(provider): add qwen-code OAuth support by @chumyin in #917
- feat: add runtime reasoning toggle for Ollama by @chumyin in #906
- fix(provider): keep multi-turn context in responses fallback by @chumyin in #933
- feat: add multimodal image marker pipeline and Ollama vision support by @chumyin in #929
- perf(build): gate Matrix channel for faster iteration by @chumyin in #931
- fix(provider): align qwen oauth alias with qwen base-url mapping by @chumyin in #936
- legal: add dual MIT+Apache 2.0 license, trademark policy, and CLA by @theonlyhennygod in #941
- perf(ci): reduce GitHub Actions costs ~60-65% across all workflows by @agorevski in #847
- chore: ignore macOS AppleDouble files (._*) by @reidliu41 in #889
- test: add systematic test coverage for 7 bug pattern groups (#852) by @agorevski in #865
- perf: eliminate unnecessary heap allocations across agent loop, memory and channels by @agorevski in #872
- fix(onboard): correct channel selector default to 'Done' item by @agorevski in #948
- fix: gate nusb/hardware discovery to Linux/macOS/Windows only (fixes #880) by @theonlyhennygod in #885
- fix: restore Composio OAuth execution path after connect by @chumyin in #953
- fix(memory): prevent auto-save hallucination feedback loop by @chumyin in #958
- fix(composio): recover connected account selection after OAuth by @chumyin in #963
- fix(skills): inject skill prompts and tools into agent system prompt by @ecschoye in #879
- fix(channels): interrupt in-flight Telegram request on newer same-sender message by @chumyin in #964
- fix: eliminate fragile channel index dispatch and fix OpenAI tool-spec parsing by @chumyin in #956
- fix(channel): normalize Telegram history role ordering for MiniMax by @chumyin in #960
- Fix skill prompts/tools injection into system prompt (#877) by @chumyin in #962
- fix(security): change pairing lockout to per-client accounting by @agorevski in #951
- fix(cli): add range validation for temperature argument by @agorevski in #979
- docs(config): add missing config sections to config-reference.md by @agorevski in #980
- fix(config): add startup validation to catch invalid config values early by @agorevski in #981
- docs(cli): add detailed help text and examples to complex subcommands by @agorevski in #982
- docs(env): add missing environment variables to .env.example by @agorevski in #983
- fix(errors): improve config error messages with section paths and remediation hints by @agorevski in #984
- fix(memory): add openrouter as recognized embedding provider by @ecschoye in #987
- docs(readme): add Homebrew install instructions by @vyahhi in #969
- docs(readme): add Telegram CN/RU channels to media matrix by @chumyin in #971
- fix: resolve merge conflict in pull request template by @agorevski in #994
- fix(composio): pick first usable account when multiple exist, add connected_accounts alias by @theonlyhennygod in #1003
- docs(code): add module-level doc blocks to providers, channels, tools, and security by @agorevski in #1008
- docs: add architecture, subscription auth, and memory system sections to multilingual READMEs by @agorevski in #1009
- docs(code): expand doc comments on security, observability, runtime, and peripheral traits by @agorevski in #1010
- docs(code): add comprehensive doc comments to config schema public fields by @agorevski in #1011
- docs: enhance getting-started, hardware, and project collection indexes by @agorevski in #1012
- docs(code): add decision-point comments to agent loop, security policy, and reliable provider by @agorevski in #1013
- test(gateway): add edge-case idempotency store tests by @agorevski in #1015
- test(quality): replace bare .unwrap() with .expect() in agent and shell tests by @agorevski in #1016
- test(peripherals): add unit tests for peripheral module configuration and listing by @agorevski in #1017
- test(fuzz): add webhook, provider response, and command validation fuzz targets by @agorevski in #1018
- fix(security): address CodeQL code-scanning alerts by @agorevski in #1020
- Codex/chore/bootstrap docker by @ttulttul in #991
- fix(channel): replace hardcoded Discord bot text with generic channel text by @ecschoye in #995
- fix(channel): remove duplicated tool protocol from system prompt by @ecschoye in #996
- fix(memory): add minimum-length filter for auto-save messages by @ecschoye in #989
- fix(channel): save original user text to conversation history by @ecschoye in #988
- fix(channel): preserve tool context in conversation history by @ecschoye in #992
- fix(channel): hot-apply config.toml updates in running channel runtime by @chumyin in #968
- fix(build): unblock low-resource installs and release binaries by @chumyin in #1041
- fix(skills): support SSH git remotes for skills install by @chumyin in #1035
- fix(gemini): correct Gemini CLI OAuth cloudcode payload/response handling by @chumyin in #1040
- fix(channel): avoid false 300s timeout during multi-turn tool loops by @chumyin in #1037
- fix(composio): request latest tool versions for list and execute by @chumyin in #1039
- fix(channel): use native tool calling to preserve conversation context by @gh-xj in #787
- fix(observability): avoid OTel reactor panic in batch exporter by @chumyin in #1054
- fix(channel): preserve interrupted sender context in cached turn normalization by @chumyin in #1057
- fix: prevent postgres memory init panic inside tokio runtime by @chumyin in #1055
- fix(config): prevent cfg signature drift in sync_directory by @chumyin in #1052
- test(onboard): add regression coverage for quick setup model override by @chumyin in #1058
- fix(channels): harden WhatsApp Web mode and align docs/onboarding by @chumyin in #1059
- fix: make open-skills opt-in by default with config support by @chumyin in #1060
- feat(installer): add guided zeroclaw installer and distro hardening by @willsarg in #887
- chore(deps): bump sigstore/cosign-installer from 3.8.2 to 4.0.0 by @dependabot[bot] in #1067
- chore(deps): bump the rust-all group with 3 updates by @dependabot[bot] in #1068
- chore(deps): bump directories from 5.0.1 to 6.0.0 by @dependabot[bot] in #1069
- chore(deps): bump criterion from 0.5.1 to 0.8.2 by @dependabot[bot] in #1070
- chore: Fix pull request template's merge conflict by @jaysonsantos in #892
- fix(config): change web_search.enabled default to false for explicit opt-in by @agorevski in #986
- fix(provider): surface API key rotation as ineffective warning by @ecschoye in #1000
- fix(channel): use per-recipient typing handles in Discord by @ecschoye in #1005
- fix(agent): implement actual concurrent tool execution by @ecschoye in #1001
- refactor(lib): restrict internal module visibility to pub(crate) by @agorevski in #985
- fix(observability): avoid OTEL reactor panic with blocking exporter client by @xiaotianxt in #1032
- fix(security): deny unapproved tool calls on non-CLI channels by @ecschoye in #998
- fix(security): enforce cron agent autonomy and rate gates by @fettpl in #626
- chore(deps): bump probe-rs from 0.30.0 to 0.31.0 by @dependabot[bot] in #1076
- chore(deps): bump toml from 0.8.23 to 1.0.1+spec-1.1.0 by @dependabot[bot] in #1074
- chore(deps): bump actions/download-artifact from 4.3.0 to 7.0.0 by @dependabot[bot] in #1073
- chore(deps): bump rand from 0.9.2 to 0.10.0 by @dependabot[bot] in #1075
- docs(i18n): add Vietnamese README translation by @pluginmd in #1078
- feat: add stdout-safe shell completions command by @chumyin in #1082
- fix(doctor): keep scheduler/channel health fresh in daemon doctor by @chumyin in #1077
- feat(agent): run independent tool calls concurrently in runtime loop by @chumyin in #1081
- feat(delegate): agentic delegate mode with safe tool-loop wiring by @chumyin in #1085
- fix(ci): sync release publishing with GHCR and add runbook by @willsarg in #1087
- fix(lark): refresh tenant token on Feishu 99991663 responses by @chumyin in #1086
- feat(provider): add first-class llama.cpp provider flow by @chumyin in #1089
- fix(ci): restore containerized validation on main by @willsarg in #1096
- fix(scheduler): harden idle health heartbeat coverage by @chumyin in #1111
- fix(security): make schedule tool honor cron.enabled and command policy by @chumyin in #1114
- fix(security): enforce cron tool policy gates by @chumyin in #1117
- feat(channel): add native Nextcloud Talk integration by @chumyin in #1118
- feat(service): add OpenRC support for Alpine Linux by @Baz00k in #716
- fix: hide leaked raw tool JSON in channel replies by @chumyin in #1119
- feat(skills): add compact prompt injection mode for low-context models by @chumyin in #1115
- fix(ollama): make cloud routing deterministic in onboarding and config by @chumyin in #1122
- feat(provider): add Doubao (Volcengine Ark) provider support by @reidliu41 in #903
- fix(provider): add chat() override to ReliableProvider for native tool calling by @vernonstinebaker in #894
- fix: tool calling compatibility for DeepSeek/GLM/Kimi by @HHRAYLAM in #899
- fix(ci): correct first-interaction input keys by @chumyin in #810
- feat(ci): build with release-fast by @agorevski in #1128
- fix(ci): use grouped redirect for GITHUB_OUTPUT writes in pub-release by @agorevski in #1129
- feat(tools): add pdf_read tool for workspace PDF text extraction by @reidliu41 in #893
- docs(vi): comprehensive Vietnamese localization under docs/vi/ by @pluginmd in #1099
- Remove pin rust version with a minimum rust version by @Paulo-21 in #935
- feat(lark): add immediate ack emoji reaction on message receive by @AllenHyang in #1042
- feat(memory): add zeroclaw memory CLI management commands by @reidliu41 in #1051
- perf(channel): offload provider initialization from async workers by @xiaotianxt in #1023
- feat(tool): add line numbers and partial reading to file_read by @reidliu41 in #1038
- fix(provider): add chat() override for Ollama and ReliableProvider to… by @reidliu41 in #1036
- docs(i18n): add Vietnamese links to all locale READMEs and docs navigation by @pluginmd in #1091
- Feat/add podman support by @b4iterdev in #1094
- feat: reduce release binary size with opt-in heavy features by @chumyin in #1064
- fix(onboard): require explicit confirmation before overwriting existing config by @chumyin in #1084
- refactor(auth): make auth profile store async by @jaysonsantos in #930
- docs: update stale binary size claim from 3.4 MB to ~8.8 MB (#957) by @yashmahe2020 in #967
- fix(telegram): prevent message overflow from continuation markers and strip function_calls tags by @ecschoye in #1102
- feat(tool): add glob_search for workspace file pattern search by @reidliu41 in #1123
- fix(provider): correct Gemini CLI internal payload for OAuth flow by @xiaotianxt in #1031
- docs(i18n): add Vietnamese translations for docs hub and key references by @pluginmd in #1092
- fix(ci): restore containerized validation on main by @willsarg in #1097
- fix(providers): update synthetic provider base URL by @cesdperez in #1101
- fix(cron): jobtype conversion by @781226451 in #910
- feat: add vision/multimodal support for Telegram + Bedrock by @hustshawn in #1126
- feat(ci): block workflows if binary increases beyond 20mb by @agorevski in #1135
- add french docs by @lamachina in #1079
- fix: resolve three compilation errors breaking release-fast build by @agorevski in #1138
- docs(policy): require i18n follow-through for supported locales by @chumyin in #1166
- fix(gemini): handle thinking model response parts correctly by @mackenzieclark in #1140
- feat: Telegram vision support + EC2 IMDSv2 credential fallback for Bedrock by @hustshawn in #1161
- docs(channel): add Linq to documentation and feature matrix by @heaveless in #1163
- fix(build): remove stale rust-toolchain.toml reference from Dockerfile by @vernonstinebaker in #1164
- fix(gateway): enable tool execution for WhatsApp, Linq, Nextcloud Talk channels by @valmy in #1165
- fix(channel): unify configured channel construction for doctor and startup by @xiaotianxt in #1022
- refactor(cli): reuse shared command enums from lib by @xiaotianxt in #1027
- fix(tests): increase lucid memory test timeouts to prevent flakiness by @AllenHyang in #1108
- fix: resolve compilation, test, fmt, and CI errors on main [MERGE FIRST] by @zverozabr in #1139
- docs(i18n): extract canonical vi tree under docs/i18n and sync locale nav by @chumyin in #1167
- fix(gemini): fix OAuth provider for cloudcode-pa internal API by @AllenHyang in #1065
- feat: capture token usage from LLM provider responses by @s04 in #1024
- feat(provider): add first-class vLLM provider flow by @reidliu41 in #1095
- fix(telegram): fall back to text link when send-media-by-URL fails by @s04 in #1125
- fix(agent): parse MiniMax tool call formats for execution by @klampatech in #1131
- chore: resolve clippy warnings and rustfmt [depends on #1139] by @zverozabr in #1141
- fix(channel): merge consecutive user turns [depends on #1139] by @zverozabr in #1142
- feat(channels): add emoji reaction support to Channel trait and Discord by @NorbertBodziony in #949
- feat(providers): support provider:profile syntax [depends on #1139] by @zverozabr in #1145
- feat(channel): add voice transcription via Whisper API [depends on #1139] by @zverozabr in #1144
- feat(providers): Gemini OAuth credential rotation [depends on #1139] by @zverozabr in #1146
- feat(channel): Telegram enhancements — reply, photo, e2e [depends on #1139, #1144, #1142] by @zverozabr in #1148
- fix(channel): strip tool_call XML tags from Discord outgoing messages by @ecschoye in #1004
- Add warning about zeroclaw.net domain by @sammcj in #1171
- docs(i18n): follow up vi nav alignment and fr readme link fixes by @chumyin in #1174
- feat(channel): inline text attachments from Discord messages by @xero7689 in #1172
- refactor(onboard): make model refresh and doctor model checks async-safe by @jaysonsantos in #943
- feat(tools): file_read binary/PDF support [depends on #1139] by @zverozabr in #1147
- feat(channel): add Nostr channel with NIP-04 and NIP-17 support by @v0l in #925
- docs: announce zeroclawlabs.ai launch in all README locales by @chumyin in #1177
- docs(readme): link official repository in all locale announcements by @chumyin in #1178
- feat(tools): add file_edit tool for precise in-place text replacement by @reidliu41 in #1045
- feat(hooks): add plugin hooks system with HookHandler trait and HookRunner dispatcher by @gh-xj in #918
- fix(security): remove sensitive fields from Debug impls by @agorevski in #1182
- docs: improve i18n parity, contributor onboarding, and identity clarity by @agorevski in #1183
- test: add unit tests for audit-07 coverage gaps by @agorevski in #1186
- fix(tests): update test structs for new usage and hooks fields by @agorevski in #1187
- feat(telegram): convert Markdown to Telegram HTML for proper formatting by @hustshawn in #1176
- fix(channel): close orphan user turn on error and timeout by @AllenHyang in #1180
- fix(config): add missing "date" to AutonomyConfig default allowed_commands by @vernonstinebaker in #1184
- fix(channels): include date and time in system prompt datetime section by @bowans in #1185
- Remove PROVIDER environment variable from Dockerfile by @yookoala in #1188
- fix(agent): skip interactive approval in daemon/cron context by @AllenHyang in #1190
- feat(provider): add Osaurus as first-class local provider by @vernonstinebaker in #1181
- feat(security): add allowed_roots for file access by @zverozabr in #1143
- fix(slack): support wildcard/all-channel listen when channel_id is unset by @chumyin in #1191
- fix: resolve post-1083 reliability regressions across providers/channels/tools by @chumyin in #1189
- fix(gateway): switch default port to 42617 across runtime and docs by @willsarg in #1179
New Contributors
- @kunwl123456 made their first contribution in #846
- @ghsmc made their first contribution in #836
- @InuDial made their first contribution in #835
- @pappacorleone made their first contribution in #860
- @s04 made their first contribution in #849
- @cbigger made their first contribution in #866
- @mmacedoeu made their first contribution in #859
- @KevinZhao made their first contribution in #869
- @zverozabr made their first contribution in #915
- @valmy made their first contribution in #878
- @vyahhi made their first contribution in #969
- @ttulttul made their first contribution in #991
- @xiaotianxt made their first contribution in #1032
- @pluginmd made their first contribution in #1078
- @Baz00k made their first contribution in #716
- @HHRAYLAM made their first contribution in #899
- @Paulo-21 made their first contribution in #935
- @AllenHyang made their first contribution in #1042
- @b4iterdev made their first contribution in #1094
- @yashmahe2020 made their first contribution in #967
- @cesdperez made their first contribution in #1101
- @781226451 made their first contribution in #910
- @hustshawn made their first contribution in #1126
- @lamachina made their first contribution in #1079
- @mackenzieclark made their first contribution in #1140
- @heaveless made their first contribution in #1163
- @klampatech made their first contribution in #1131
- @NorbertBodziony made their first contribution in #949
- @sammcj made their first contribution in #1171
- @bowans made their first contribution in #1185
- @yookoala made their first contribution in #1188
Full Changelog: v0.1.0...v0.1.1