Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 61 additions & 0 deletions en/changelog/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,67 @@ description: Feature updates, fixes, and configuration changes across MaiBot rel

# Changelog

::: timeline 2026-10-23
### Main program [1.3.15]
* Context compaction now keeps a rolling state summary generated by the utils model and always sent with the Planner context; its length is controlled by `context_compaction_summary_max_chars`.
* Web search adds three new services: AnySearch, Exa, and Firecrawl.
* Plugin management adds `/pm cmd [plugin ID or unique short name] [pic]` to list registered commands per plugin, optionally rendered as an image.
* Private chats support pausing replies: globally, or per platform and user, replacing the old private-chat frequency setting.
* Expression selection now has Fast and Fine modes: Fast is the default and injects a weighted random pick directly; Fine uses expression intent and embedding recall followed by LLM filtering, and requires an embedding model.
* Image quality now offers Normal and High modes; images sent to the Planner and Replyer are compressed to a longest edge of 512 / 1024 pixels respectively.
* Fixed replies not triggering for messages from old bot accounts, send failures caused by wrong quotes, and the retro reply mode being enabled unintentionally.
* In normal and Focus modes, consecutive waiting no longer forcibly ends the conversation; MaiBot is instead reminded to extend the wait or end it.

### WebUI [1.9.9]
* Learning: expressions and jargon support manual entry and long-text auto learning, with editing, selection, and import to a specific chat or globally; progress viewing, retry on failure, and batch imports are supported.
* Learning: expression and jargon lists can be sorted by activity or creation time and show the group or private-user ID.
* When plugins are downloaded via the CNB mirror, plugin icons load from the mirror too.
* Prompt templates that need an update or fix now show a reminder at the entry point and on the template.
* Agent sessions merge consecutive thinking and reply content and fix lost spaces and line breaks.
* Smoother page-switch animation; fixed clipped home statistics, misaligned layouts, and inconsistent language-menu styling.
:::

::: timeline 2026-10-22
### Main program [1.3.14]
* Quick reaction mode is now a formal feature, with improved reply frequency and wait timing for more timely, natural responses.
* Improved default settings and prompts.

### WebUI [1.9.8]
* First-run onboarding can fill in persona, behavior style, and reply style from a standalone preset list.
:::

::: timeline 2026-10-21
### Main program [1.3.13]
* Agent connection (experimental): connect to dsh and dsh Desktop over ACP; models and credentials come from the external Agent's own configuration.
* Plugins can generate long posts in MaiBot's persona and reply with text and stickers to a chosen post, comment, or nested reply.
* Plugin installation failures report clearer causes, with direct download-source switching and retry.
* Added memory diagnostics to help investigate memory growth in long-running instances.
* Reduced memory usage from large image histories; fixed retro reply mode failing on image handling.

### WebUI [1.9.7]
* The top bar shows an update reminder when a new version is available.
* Fixed a chat-page scroll area that could crash the page.
:::

::: timeline 2026-10-19
### Main program [1.3.12]
* Added a standalone computer-operating agent: image-text relay in chats, tasks that survive restarts, and a WebUI view of the desktop, run history, and manual takeover.
* Focus chats in the same group now share one continuous thinking process, with cross-session collaboration, unified waiting, and early wake-up on @ mentions.
* Improved thinking and tool usage; subagent tasks and long tool-result condensation are configured in the `[capabilities]` section.
* Expression and jargon learning can accumulate multiple batches of chat material, so even quiet chats gradually meet the learning threshold.
* Unified the plugin market browsing and usage experience, with better install, update, and enable flows; disabled plugins no longer slow startup, and failed installs no longer damage existing dependencies.
* `/offline` now stops chat activity so MaiBot no longer thinks or wakes up while offline.
* Removed the reply-effect evaluation feature.

### WebUI [1.9.6]
* Model configuration adds a "MaiBot-tuned reply" template that fills in the required models and reply settings, with a direct reply test.
* Settings adds a "General" section, unifying the language entry for desktop and mobile.
* The learning page merges expressions, jargon, and stickers, clearly showing learning progress and why a task is incomplete.
* Reasoning replay fixed image messages not previewing.
* Mobile improves the bottom-bar transition animation, which can follow the global animation setting.
* Chat observation shows tool execution status even when rounds are collapsed; detailed statistics support spending and token breakdowns by dimension.
:::

::: timeline 2026-10-19
### Main program [1.3.11]
* Message debouncing now has four fixed modes — Off, Fast, Natural, and Steady — with Natural as the default. Quiet and active chats, the same sender continuing, and a different sender each use their own wait time; a batch waits at most 8 seconds, and an @ mention or name mention enters processing within 1 second.
Expand Down
19 changes: 8 additions & 11 deletions en/faq/chat-and-reply.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,36 +4,33 @@ title: Chat and Replies

# Chat and Replies

## What is the difference between frequency and dynamic trigger?
## How does MaiBot decide whether to reply?

`[chat.reply_timing].reply_trigger_mode` decides when new messages enter the Planner:
New messages first go through debouncing, then the Planner decides whether to respond. The reply tendency is mainly tuned by the frequency settings `talk_value` and `talk_value_rules`: Mai tries to reply when @-mentioned and replies more easily when named. After several consecutive no-reply decisions, the check pace automatically slows down via `no_action_backoff_*`.

- **`frequency` (default)** — decides whether to think based on the number of new messages; simple and predictable
- **`dynamic`** — estimates the reply likelihood of each message batch, then uses a one-hour sliding window to pull the actual reply count back to the configured target. It **only applies to group chats; private chats are not gated**

After switching modes, observe for a while before deciding whether to fine-tune `talk_value`.
After changing the frequency, observe for a while before fine-tuning further.

## How do I make MaiBot speak more or less often?

Adjust group or private-chat frequency, then check dynamic frequency rules. When dynamic rules are enabled, a matching rule may override the base value. Personality and group prompts can also affect the Planner's decision to speak.
Adjust group or private-chat frequency, then check the per-chat and per-time rules (`talk_value_rules`). When rules are enabled, a matching rule may override the base value. Personality and group prompts can also affect the Planner's decision to speak.

Make small changes and observe the result.

## Why does the bot reply to its own messages?

Check whether the adapter feeds outgoing bot messages back into MaiBot and whether the configured bot account is correct. Then inspect plugin conflicts, message filtering, and dynamic frequency rules.
Check whether the adapter feeds outgoing bot messages back into MaiBot and whether the configured bot account is correct. Then inspect plugin conflicts, message filtering, and frequency rules.

If the message path is correct but the Planner still chooses repeated replies, adjust frequency or test another Planner model. The symptom alone does not prove a model-quality issue.

## Why is only the first of several consecutive messages handled?

Whether a new message restarts Planner reasoning depends on the trigger mode and consecutive-interrupt limit. Model latency, tool calls, and context size also affect responsiveness.
First check whether the messages were merged into one batch by debouncing; model latency, tool calls, and context size also slow down a single turn.

Review `planner_interrupt_max_consecutive_count`, but do not copy a fixed value blindly. More permissive interruption improves responsiveness but can increase model calls and context use.
To let new messages arriving during thinking, output, or waiting join immediately and restart reasoning, enable quick reaction mode (`[chat.reply_timing].planner_message_steering`).

## Why are replies slow?

Use logs to identify whether time is spent on model requests, tools, image recognition, adapter delivery, or Planner waiting. Then inspect network latency, model speed, context length, and unnecessary plugins. Also review interruption settings if new messages wait for the previous turn to finish.
Use logs to identify whether time is spent on model requests, tools, image recognition, adapter delivery, or Planner waiting. Then inspect network latency, model speed, context length, and unnecessary plugins. If new messages always wait for the previous turn to finish, enable quick reaction mode (`planner_message_steering`) so they join immediately.

## Why does a reply become a very short fallback phrase?

Expand Down
2 changes: 1 addition & 1 deletion en/faq/troubleshooting-runtime.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ enabled = true # Make sure the rule is enabled
# config/bot_config.toml
[chat.reply_timing]
talk_value = 1 # Group talk willingness (0-1); lower is quieter. Default 1
private_talk_value = 1 # Private chat talk willingness (0-1). Default 1
private_reply_paused = false # Private replies paused: make sure this is not true
```

:::
Expand Down
Loading
Loading