diff --git a/CHANGELOG.md b/CHANGELOG.md
index 27b8e642ed..f65d464bff 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,8 +2,37 @@
Docs: https://docs.openclaw.ai
+## 2026.1.30
+
+### Changes
+- CLI: add `completion` command (Zsh/Bash/PowerShell/Fish) and auto-setup during postinstall/onboarding.
+- CLI: add per-agent `models status` (`--agent` filter). (#4780) Thanks @jlowin.
+- Agents: add Kimi K2.5 to the synthetic model catalog. (#4407) Thanks @manikv12.
+- Auth: switch Kimi Coding to built-in provider; normalize OAuth profile email.
+- Agents: update pi SDK/API usage and dependencies.
+- Web UI: refresh sessions after chat commands and improve session display names.
+- Build: move TypeScript builds to `tsdown` + `tsgo` (faster builds, CI typechecks), update tsconfig target, and clean up lint rules.
+- Docs: add pi/pi-dev docs and update OpenClaw branding + install links.
+
+### Fixes
+- Security: restrict local path extraction in media parser to prevent LFI. (#4880)
+- Gateway: prevent token defaults from becoming the literal "undefined". (#4873) Thanks @Hisleren.
+- Control UI: fix assets resolution for npm global installs. (#4909) Thanks @YuriNachos.
+- Telegram: normalize account token lookup for non-normalized IDs. (#5055) Thanks @jasonsschin.
+- Telegram: preserve delivery thread fallback and fix threadId handling in delivery context.
+- Telegram: fix HTML nesting for overlapping styles/links. (#4578) Thanks @ThanhNguyxn.
+- Telegram: accept numeric messageId/chatId in react actions. (#4533) Thanks @Ayush10.
+- Telegram: honor per-account proxy dispatcher via undici fetch. (#4456) Thanks @spiceoogway.
+- Telegram: scope skill commands to bound agent per bot. (#4360) Thanks @robhparker.
+- BlueBubbles: debounce by messageId to preserve attachments in text+image messages. (#4984)
+- Routing: prefer requesterOrigin over stale session entries for sub-agent announce delivery. (#4957)
+- Extensions: restore embedded extension discovery typings.
+- CLI: fix `tui:dev` port resolution.
+- LINE: fix status command TypeError. (#4651)
+- OAuth: skip expired-token warnings when refresh tokens are still valid. (#4593)
+- Build: skip redundant UI install step in Dockerfile. (#4584) Thanks @obviyus.
+
## 2026.1.29
-Status: stable.
### Changes
- Rebrand: rename the npm package/CLI to `openclaw`, add a `openclaw` compatibility shim, and move extensions to the `@openclaw/*` scope.
@@ -41,9 +70,7 @@ Status: stable.
- Routing: add per-account DM session scope and document multi-account isolation. (#3095) Thanks @jarvis-sam.
- Routing: precompile session key regexes. (#1697) Thanks @Ray0907.
- CLI: use Node's module compile cache for faster startup. (#2808) Thanks @pi0.
-- CLI: add per-agent model status and auth order scoping. (#4780) Thanks @jlowin.
- Auth: show copyable Google auth URL after ASCII prompt. (#1787) Thanks @robbyczgw-cla.
-- Agents: add Kimi K2.5 to the synthetic model catalog. (#4407) Thanks @manikv12.
- TUI: avoid width overflow when rendering selection lists. (#1686) Thanks @mossein.
- macOS: finish OpenClaw app rename for macOS sources, bundle identifiers, and shared kit paths. (#2844) Thanks @fal3.
- Branding: update launchd labels, mobile bundle IDs, and logging subsystems to bot.molt (legacy bundle ID migrations). Thanks @thewilloftheshadow.
@@ -69,20 +96,11 @@ Status: stable.
- Docs: credit both contributors for Control UI refresh. (#1852) Thanks @EnzeD.
- Docs: keep docs header sticky so navbar stays visible while scrolling. (#2445) Thanks @chenyuan99.
- Docs: update exe.dev install instructions. (#https://github.com/openclaw/openclaw/pull/3047) Thanks @zackerthescar.
-- Build: skip redundant UI install step in the Dockerfile. (#4584) Thanks @obviyus.
### Breaking
- **BREAKING:** Gateway auth mode "none" is removed; gateway now requires token/password (Tailscale Serve identity still allowed).
### Fixes
-- Infra: resolve Control UI assets for npm global installs. (#4909) Thanks @YuriNachos.
-- Gateway: prevent blank token prompts from storing "undefined". (#4873) Thanks @Hisleren.
-- Telegram: use undici fetch for per-account proxy dispatcher. (#4456) Thanks @spiceoogway.
-- Telegram: fix HTML nesting for overlapping styles and links. (#4578) Thanks @ThanhNguyxn.
-- Telegram: resolve per-account bot token configs with normalized account IDs. (#5055) Thanks @jasonsschin.
- Telegram: avoid silent empty replies by tracking normalization skips before fallback. (#3796)
-- Telegram: accept numeric messageId/chatId in react action and honor channelId fallback. (#4533) Thanks @Ayush10.
-- Telegram: scope native skill commands to bound agent per bot. (#4360) Thanks @robhparker.
-- Telegram: fall back to session origin thread id for delivery context when missing. (#4911) Thanks @yevhen.
- Mentions: honor mentionPatterns even when explicit mentions are present. (#3303) Thanks @HirokiKobayashi-R.
- Discord: restore username directory lookup in target resolution. (#3131) Thanks @bonald.
- Agents: align MiniMax base URL test expectation with default provider config. (#3131) Thanks @bonald.
@@ -94,7 +112,6 @@ Status: stable.
- TTS: read OPENAI_TTS_BASE_URL at runtime instead of module load to honor config.env. (#3341) Thanks @hclsys.
- macOS: auto-scroll to bottom when sending a new message while scrolled up. (#2471) Thanks @kennyklee.
- Web UI: auto-expand the chat compose textarea while typing (with sensible max height). (#2950) Thanks @shivamraut101.
-- Web UI: refresh sessions after queued /new or /reset commands once the run completes.
- Gateway: prevent crashes on transient network errors (fetch failures, timeouts, DNS). Added fatal error detection to only exit on truly critical errors. Fixes #2895, #2879, #2873. (#2980) Thanks @elliotsecops.
- Agents: guard channel tool listActions to avoid plugin crashes. (#2859) Thanks @mbelinky.
- Discord: stop resolveDiscordTarget from passing directory params into messaging target parsers. Fixes #3167. Thanks @thewilloftheshadow.
diff --git a/apps/android/app/build.gradle.kts b/apps/android/app/build.gradle.kts
index 31323942e0..8279b6bd97 100644
--- a/apps/android/app/build.gradle.kts
+++ b/apps/android/app/build.gradle.kts
@@ -22,7 +22,7 @@ android {
minSdk = 31
targetSdk = 36
versionCode = 202601290
- versionName = "2026.1.29"
+ versionName = "2026.1.30"
}
buildTypes {
diff --git a/apps/ios/Sources/Info.plist b/apps/ios/Sources/Info.plist
index ef5af04bfa..cf892f4ef9 100644
--- a/apps/ios/Sources/Info.plist
+++ b/apps/ios/Sources/Info.plist
@@ -19,7 +19,7 @@
CFBundlePackageType
APPL
CFBundleShortVersionString
- 2026.1.29
+ 2026.1.30
CFBundleVersion
20260129
NSAppTransportSecurity
diff --git a/apps/ios/Tests/Info.plist b/apps/ios/Tests/Info.plist
index a3451d9eb3..8a57da2916 100644
--- a/apps/ios/Tests/Info.plist
+++ b/apps/ios/Tests/Info.plist
@@ -17,7 +17,7 @@
CFBundlePackageType
BNDL
CFBundleShortVersionString
- 2026.1.29
+ 2026.1.30
CFBundleVersion
20260129
diff --git a/apps/macos/Sources/OpenClaw/Resources/Info.plist b/apps/macos/Sources/OpenClaw/Resources/Info.plist
index 54e324b679..43854bcb12 100644
--- a/apps/macos/Sources/OpenClaw/Resources/Info.plist
+++ b/apps/macos/Sources/OpenClaw/Resources/Info.plist
@@ -15,7 +15,7 @@
CFBundlePackageType
APPL
CFBundleShortVersionString
- 2026.1.29
+ 2026.1.30
CFBundleVersion
202601290
CFBundleIconFile
diff --git a/extensions/bluebubbles/package.json b/extensions/bluebubbles/package.json
index e76fa7700f..dc9e299eb5 100644
--- a/extensions/bluebubbles/package.json
+++ b/extensions/bluebubbles/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/bluebubbles",
- "version": "2026.1.29",
+ "version": "2026.1.30",
"type": "module",
"description": "OpenClaw BlueBubbles channel plugin",
"openclaw": {
diff --git a/extensions/copilot-proxy/package.json b/extensions/copilot-proxy/package.json
index 60ca9dbbde..e3d4a4c864 100644
--- a/extensions/copilot-proxy/package.json
+++ b/extensions/copilot-proxy/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/copilot-proxy",
- "version": "2026.1.29",
+ "version": "2026.1.30",
"type": "module",
"description": "OpenClaw Copilot Proxy provider plugin",
"openclaw": {
diff --git a/extensions/diagnostics-otel/package.json b/extensions/diagnostics-otel/package.json
index 996bebb065..61a2002166 100644
--- a/extensions/diagnostics-otel/package.json
+++ b/extensions/diagnostics-otel/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/diagnostics-otel",
- "version": "2026.1.29",
+ "version": "2026.1.30",
"type": "module",
"description": "OpenClaw diagnostics OpenTelemetry exporter",
"openclaw": {
diff --git a/extensions/discord/package.json b/extensions/discord/package.json
index 76e32dd7c0..3f02805c9c 100644
--- a/extensions/discord/package.json
+++ b/extensions/discord/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/discord",
- "version": "2026.1.29",
+ "version": "2026.1.30",
"type": "module",
"description": "OpenClaw Discord channel plugin",
"openclaw": {
diff --git a/extensions/google-antigravity-auth/package.json b/extensions/google-antigravity-auth/package.json
index 93a764378c..8f414d739b 100644
--- a/extensions/google-antigravity-auth/package.json
+++ b/extensions/google-antigravity-auth/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/google-antigravity-auth",
- "version": "2026.1.29",
+ "version": "2026.1.30",
"type": "module",
"description": "OpenClaw Google Antigravity OAuth provider plugin",
"openclaw": {
diff --git a/extensions/google-gemini-cli-auth/package.json b/extensions/google-gemini-cli-auth/package.json
index 8b799aa749..bd5020804b 100644
--- a/extensions/google-gemini-cli-auth/package.json
+++ b/extensions/google-gemini-cli-auth/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/google-gemini-cli-auth",
- "version": "2026.1.29",
+ "version": "2026.1.30",
"type": "module",
"description": "OpenClaw Gemini CLI OAuth provider plugin",
"openclaw": {
diff --git a/extensions/googlechat/package.json b/extensions/googlechat/package.json
index 31f6905d34..217fb652d6 100644
--- a/extensions/googlechat/package.json
+++ b/extensions/googlechat/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/googlechat",
- "version": "2026.1.29",
+ "version": "2026.1.30",
"type": "module",
"description": "OpenClaw Google Chat channel plugin",
"openclaw": {
diff --git a/extensions/imessage/package.json b/extensions/imessage/package.json
index 147408bc54..81884d5dbc 100644
--- a/extensions/imessage/package.json
+++ b/extensions/imessage/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/imessage",
- "version": "2026.1.29",
+ "version": "2026.1.30",
"type": "module",
"description": "OpenClaw iMessage channel plugin",
"openclaw": {
diff --git a/extensions/line/package.json b/extensions/line/package.json
index d9e880d19e..ef8b135f47 100644
--- a/extensions/line/package.json
+++ b/extensions/line/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/line",
- "version": "2026.1.29",
+ "version": "2026.1.30",
"type": "module",
"description": "OpenClaw LINE channel plugin",
"openclaw": {
diff --git a/extensions/llm-task/package.json b/extensions/llm-task/package.json
index 68abe209cc..8674a51cd1 100644
--- a/extensions/llm-task/package.json
+++ b/extensions/llm-task/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/llm-task",
- "version": "2026.1.29",
+ "version": "2026.1.30",
"type": "module",
"description": "OpenClaw JSON-only LLM task plugin",
"openclaw": {
diff --git a/extensions/lobster/package.json b/extensions/lobster/package.json
index 07be493b1f..054e6d5205 100644
--- a/extensions/lobster/package.json
+++ b/extensions/lobster/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/lobster",
- "version": "2026.1.29",
+ "version": "2026.1.30",
"type": "module",
"description": "Lobster workflow tool plugin (typed pipelines + resumable approvals)",
"openclaw": {
diff --git a/extensions/matrix/CHANGELOG.md b/extensions/matrix/CHANGELOG.md
index 7d7e0e8351..065e20f5c5 100644
--- a/extensions/matrix/CHANGELOG.md
+++ b/extensions/matrix/CHANGELOG.md
@@ -1,5 +1,10 @@
# Changelog
+## 2026.1.30
+
+### Changes
+- Version alignment with core OpenClaw release numbers.
+
## 2026.1.29
### Changes
diff --git a/extensions/matrix/package.json b/extensions/matrix/package.json
index 1b5b1c6dce..0b8ac1cecd 100644
--- a/extensions/matrix/package.json
+++ b/extensions/matrix/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/matrix",
- "version": "2026.1.29",
+ "version": "2026.1.30",
"type": "module",
"description": "OpenClaw Matrix channel plugin",
"openclaw": {
diff --git a/extensions/mattermost/package.json b/extensions/mattermost/package.json
index 6b100cf275..3ddd0378cc 100644
--- a/extensions/mattermost/package.json
+++ b/extensions/mattermost/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/mattermost",
- "version": "2026.1.29",
+ "version": "2026.1.30",
"type": "module",
"description": "OpenClaw Mattermost channel plugin",
"openclaw": {
diff --git a/extensions/memory-core/package.json b/extensions/memory-core/package.json
index 947b217bdc..9c406d9069 100644
--- a/extensions/memory-core/package.json
+++ b/extensions/memory-core/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/memory-core",
- "version": "2026.1.29",
+ "version": "2026.1.30",
"type": "module",
"description": "OpenClaw core memory search plugin",
"openclaw": {
diff --git a/extensions/memory-lancedb/package.json b/extensions/memory-lancedb/package.json
index 421e49a8c6..268b414e76 100644
--- a/extensions/memory-lancedb/package.json
+++ b/extensions/memory-lancedb/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/memory-lancedb",
- "version": "2026.1.29",
+ "version": "2026.1.30",
"type": "module",
"description": "OpenClaw LanceDB-backed long-term memory plugin with auto-recall/capture",
"dependencies": {
diff --git a/extensions/msteams/CHANGELOG.md b/extensions/msteams/CHANGELOG.md
index 0a06ab4a6a..5aab4ffceb 100644
--- a/extensions/msteams/CHANGELOG.md
+++ b/extensions/msteams/CHANGELOG.md
@@ -1,5 +1,10 @@
# Changelog
+## 2026.1.30
+
+### Changes
+- Version alignment with core OpenClaw release numbers.
+
## 2026.1.29
### Changes
diff --git a/extensions/msteams/package.json b/extensions/msteams/package.json
index 270cf4fbe5..92952ad8ce 100644
--- a/extensions/msteams/package.json
+++ b/extensions/msteams/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/msteams",
- "version": "2026.1.29",
+ "version": "2026.1.30",
"type": "module",
"description": "OpenClaw Microsoft Teams channel plugin",
"openclaw": {
diff --git a/extensions/nextcloud-talk/package.json b/extensions/nextcloud-talk/package.json
index 0a2657f4af..6e78fb3b95 100644
--- a/extensions/nextcloud-talk/package.json
+++ b/extensions/nextcloud-talk/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/nextcloud-talk",
- "version": "2026.1.29",
+ "version": "2026.1.30",
"type": "module",
"description": "OpenClaw Nextcloud Talk channel plugin",
"openclaw": {
diff --git a/extensions/nostr/CHANGELOG.md b/extensions/nostr/CHANGELOG.md
index bffd83e5ac..040fd6d5d4 100644
--- a/extensions/nostr/CHANGELOG.md
+++ b/extensions/nostr/CHANGELOG.md
@@ -1,5 +1,10 @@
# Changelog
+## 2026.1.30
+
+### Changes
+- Version alignment with core OpenClaw release numbers.
+
## 2026.1.29
### Changes
diff --git a/extensions/nostr/package.json b/extensions/nostr/package.json
index 2515ff7edd..1bd568387b 100644
--- a/extensions/nostr/package.json
+++ b/extensions/nostr/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/nostr",
- "version": "2026.1.29",
+ "version": "2026.1.30",
"type": "module",
"description": "OpenClaw Nostr channel plugin for NIP-04 encrypted DMs",
"openclaw": {
diff --git a/extensions/open-prose/package.json b/extensions/open-prose/package.json
index c6ef69d9f2..efe80675a6 100644
--- a/extensions/open-prose/package.json
+++ b/extensions/open-prose/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/open-prose",
- "version": "2026.1.29",
+ "version": "2026.1.30",
"type": "module",
"description": "OpenProse VM skill pack plugin (slash command + telemetry).",
"openclaw": {
diff --git a/extensions/signal/package.json b/extensions/signal/package.json
index a23d501b5e..0311e99d16 100644
--- a/extensions/signal/package.json
+++ b/extensions/signal/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/signal",
- "version": "2026.1.29",
+ "version": "2026.1.30",
"type": "module",
"description": "OpenClaw Signal channel plugin",
"openclaw": {
diff --git a/extensions/slack/package.json b/extensions/slack/package.json
index 1b447ff853..537dc398b5 100644
--- a/extensions/slack/package.json
+++ b/extensions/slack/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/slack",
- "version": "2026.1.29",
+ "version": "2026.1.30",
"type": "module",
"description": "OpenClaw Slack channel plugin",
"openclaw": {
diff --git a/extensions/telegram/package.json b/extensions/telegram/package.json
index 3263238aff..ed91fefea6 100644
--- a/extensions/telegram/package.json
+++ b/extensions/telegram/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/telegram",
- "version": "2026.1.29",
+ "version": "2026.1.30",
"type": "module",
"description": "OpenClaw Telegram channel plugin",
"openclaw": {
diff --git a/extensions/tlon/package.json b/extensions/tlon/package.json
index eb68d75b10..3e0b52256c 100644
--- a/extensions/tlon/package.json
+++ b/extensions/tlon/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/tlon",
- "version": "2026.1.29",
+ "version": "2026.1.30",
"type": "module",
"description": "OpenClaw Tlon/Urbit channel plugin",
"openclaw": {
diff --git a/extensions/twitch/CHANGELOG.md b/extensions/twitch/CHANGELOG.md
index 0cae7737bf..100c86b991 100644
--- a/extensions/twitch/CHANGELOG.md
+++ b/extensions/twitch/CHANGELOG.md
@@ -1,5 +1,10 @@
# Changelog
+## 2026.1.30
+
+### Changes
+- Version alignment with core OpenClaw release numbers.
+
## 2026.1.29
### Changes
diff --git a/extensions/twitch/package.json b/extensions/twitch/package.json
index 12901372d0..1c105e15c5 100644
--- a/extensions/twitch/package.json
+++ b/extensions/twitch/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/twitch",
- "version": "2026.1.29",
+ "version": "2026.1.30",
"description": "OpenClaw Twitch channel plugin",
"type": "module",
"dependencies": {
diff --git a/extensions/voice-call/CHANGELOG.md b/extensions/voice-call/CHANGELOG.md
index 30c2fa7584..d804834be7 100644
--- a/extensions/voice-call/CHANGELOG.md
+++ b/extensions/voice-call/CHANGELOG.md
@@ -1,5 +1,10 @@
# Changelog
+## 2026.1.30
+
+### Changes
+- Version alignment with core OpenClaw release numbers.
+
## 2026.1.29
### Changes
diff --git a/extensions/voice-call/package.json b/extensions/voice-call/package.json
index 8d238eb99e..e2a99579a1 100644
--- a/extensions/voice-call/package.json
+++ b/extensions/voice-call/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/voice-call",
- "version": "2026.1.29",
+ "version": "2026.1.30",
"type": "module",
"description": "OpenClaw voice-call plugin",
"dependencies": {
diff --git a/extensions/whatsapp/package.json b/extensions/whatsapp/package.json
index 2c783e146c..cd1b849bf6 100644
--- a/extensions/whatsapp/package.json
+++ b/extensions/whatsapp/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/whatsapp",
- "version": "2026.1.29",
+ "version": "2026.1.30",
"type": "module",
"description": "OpenClaw WhatsApp channel plugin",
"openclaw": {
diff --git a/extensions/zalo/CHANGELOG.md b/extensions/zalo/CHANGELOG.md
index 9ef8b8cd72..472dd5e0ae 100644
--- a/extensions/zalo/CHANGELOG.md
+++ b/extensions/zalo/CHANGELOG.md
@@ -1,5 +1,10 @@
# Changelog
+## 2026.1.30
+
+### Changes
+- Version alignment with core OpenClaw release numbers.
+
## 2026.1.29
### Changes
diff --git a/extensions/zalo/package.json b/extensions/zalo/package.json
index 1790e8deac..83aa4b8c3a 100644
--- a/extensions/zalo/package.json
+++ b/extensions/zalo/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/zalo",
- "version": "2026.1.29",
+ "version": "2026.1.30",
"type": "module",
"description": "OpenClaw Zalo channel plugin",
"openclaw": {
diff --git a/extensions/zalouser/CHANGELOG.md b/extensions/zalouser/CHANGELOG.md
index 925723d2ac..d3c19ee170 100644
--- a/extensions/zalouser/CHANGELOG.md
+++ b/extensions/zalouser/CHANGELOG.md
@@ -1,5 +1,10 @@
# Changelog
+## 2026.1.30
+
+### Changes
+- Version alignment with core OpenClaw release numbers.
+
## 2026.1.29
### Changes
diff --git a/extensions/zalouser/package.json b/extensions/zalouser/package.json
index c2cd11a349..83daf20c34 100644
--- a/extensions/zalouser/package.json
+++ b/extensions/zalouser/package.json
@@ -1,6 +1,6 @@
{
"name": "@openclaw/zalouser",
- "version": "2026.1.29",
+ "version": "2026.1.30",
"type": "module",
"description": "OpenClaw Zalo Personal Account plugin via zca-cli",
"dependencies": {
diff --git a/package.json b/package.json
index 559104994a..c15522c0d2 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "openclaw",
- "version": "2026.1.29",
+ "version": "2026.1.30",
"description": "WhatsApp gateway CLI (Baileys web) with Pi RPC agent",
"type": "module",
"main": "dist/index.js",