Skip to content
Open
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
2 changes: 1 addition & 1 deletion plugins/minimax-ai/minimax-bot/.minimax-plugin/plugin.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"schemaVersion": 1,
"name": "minimax-bot",
"displayName": "MiniMax Bot",
"version": "0.7.8",
"version": "0.7.9",
"description": "Turn MiniMax Code into an always-on team of Bots. A Chief Bot helps you build the team; in group chats the admin answers and @mentions hand work to other members. Every Bot has its own octopus avatar and memory, with scheduled tasks and usage stats.",
"author": "MiniMax Code",
"icon": "icon.png",
Expand Down
13 changes: 10 additions & 3 deletions plugins/minimax-ai/minimax-bot/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ Copy this directory, including the hidden `.minimax-plugin/` directory, into the

- **Long-lived Bots**: every Bot has a name, a role, instructions and its own Agent session. When its setup, the team roster or its memory changes, the next turn automatically carries the latest context.
- **Chief Bot**: created on first launch to help you build your team. Chief can create, edit and delete Bots and groups; other Bots are refused when they try to do so.
- **Group chats**: the group admin answers by default. `@Name` calls on a specific member, and a Bot that `@`-mentions another member in its reply hands the turn over. Members with nothing to add reply `[PASS]` and are skipped. Each member keeps a separate session per group, and groups cannot see private chats. There is no fixed reply cap. Discussions finish naturally, or wait for more instructions after repeated handoffs without tool progress.
- **Group chats**: the group admin answers by default. `@Name` calls on a specific member, and a Bot that `@`-mentions another member in its reply hands the turn over. Members with nothing to add reply `[PASS]` and are skipped. Each member keeps a separate session per group, and groups cannot see private chats. There is no fixed reply cap by default; a group can set one in the group settings. Discussions finish naturally, or wait for more instructions after repeated handoffs without tool progress.
- **Hand-offs between Bots**: `message_bot` hands work to another Bot and immediately returns an admission receipt; the completed result returns to the source chat. `post_group` is **private chat only**: it posts to a group and returns immediately while the discussion continues according to the group's reply mode. From a private chat, Chief can post to any group without joining it; other Bots can only post to groups they belong to. During a group turn, `post_group` is disabled for everyone, including Chief and admins, for both same-group and cross-group posts. Use `@Name` in a reply to hand off within the group; start cross-group work from a private chat.
- **Background work**: when an isolated execution context is useful, a Bot calls `start_helper` to run it in the background in a fresh, separate session; the Bot's turn ends at once and you can keep chatting. The Bot simply says something like "let me look into it" without internal jargon or IDs. When the job finishes, its report comes back to the Bot as a new turn, and the Bot reviews it and passes it on in its own words (in groups too, where it can keep handing off with `@`). At most 2 background jobs run at once (one slot is always kept free for chat) and the rest queue; each Bot can have at most 4 queued or running. Running jobs are shown above the chat input and can be stopped at any time; the strip orders them by how far along they are, the ones already working first, then the ones waiting for another job, then the queued ones; when more than three jobs are listed, it keeps the first three in the open and folds the rest into one line that says how many are left, and one button below the rows opens the whole queue; tool approvals from a background job appear in its chat; jobs still running when the Mini App restarts are marked interrupted. Bots can also manage jobs with `list_helpers` / `stop_helper`. "Allow background helpers automatically" is on by default in Bot settings; when off, a Bot only does so when you explicitly ask.
- **Per-Bot model and reasoning effort**: pick a model and reasoning effort in Bot settings (only the levels the model supports are listed, and thinking can be turned off where supported; Bots that follow the default model can still set their own effort). Chief can also set them with the `model` (a model ID, `provider/model` or display name; `default` follows the default) and `effort` (`low`, `high`, `off`, ...) parameters of `create_bot` / `update_bot`. Requires a MiniMax Code version with `agent.models()` / `run({ model })`; older versions prompt you to upgrade.
Expand All @@ -30,6 +30,13 @@ Copy this directory, including the hidden `.minimax-plugin/` directory, into the
- **Reply actions**: the reaction, copy, quote-reply and open-session buttons sit at the bottom-left of a reply, under its last line. A long reply therefore keeps its actions within reach at the end of the text instead of pushing them off the top of the message. The reaction indicator sits directly above that row and is painted with the app's own tag colours, so it follows the light and dark themes.
- **Working messages of one reply**: the Host records a text part for every turn a Bot takes between two tool calls, so a reply that worked for a while arrives with many parts, and the page draws one bubble per part. The bubbles keep the official shape and order, and a small gap between them tells them apart instead of letting them read as one block of text.

## 0.7.9 Optional relay guardrails for groups

- A group can set a hop limit in the group settings: how many Bots may speak in one relay chain. `0` (the default) means no limit, exactly as before.
- When the limit is reached the chain stops there. The group gets a notice saying so, and the Bot that just spoke is asked to summarise instead of calling the next one. The wrap-up replaces the blocked hand-off, so it costs one turn, not two.
- A group can also hand the previous conclusion over to the next Bot: the next prompt carries the conclusion of the previous reply, so the next Bot does not have to dig the same ground out of the tools again. The hand-over is prompt text — no extra turn, no extra tool call, no memory write.
- Both settings belong to the group and only you can set them. A Bot cannot change them: the MCP catalogue does not offer them, and a call that smuggles them in is ignored.

## 0.7.8 Safer automatic retries

- A failed turn is still retried automatically at most twice, after 8 s and 20 s.
Expand Down Expand Up @@ -91,11 +98,11 @@ Avatars are stored in the Mini App's `dataDir/avatars/`. `GET /api/avatars` list

## Tested environment

- MiniMax Code 3.1.2 on macOS and Windows. Earlier versions cannot install this package, because it declares `agentAccess` and `surface.window`.
- MiniMax Code 3.1.2 on macOS and Windows, and MiniMax Code 3.1.4 on Linux. Earlier versions cannot install this package, because it declares `agentAccess` and `surface.window`.

## Data & access

- **Agent turns**: every Bot reply, scheduled task and background job is an Agent turn run through `context.agent`, with the Agent's full capabilities (files, shell, Skills and MCP, including this plugin's own MCP tools). A tool call that needs approval is shown in the page or in the session's sidebar tab; it runs only after you choose **Allow once**. Nothing is approved automatically.
- **Agent turns**: every Bot reply, scheduled task and background job is an Agent turn run through `context.agent`, with the Agent's full capabilities (files, shell, Skills and MCP, including this plugin's own MCP tools). A tool call that needs approval is shown in the page or in the session's sidebar tab; it runs only after you choose **Allow once**. Nothing is approved automatically. A group with a relay limit spends one extra Agent turn on the round that reaches the limit: the wrap-up that replaces the blocked hand-off.
- **Files written**: only inside the Mini App's `dataDir`: `state.json`, `messages/`, `usage.jsonl`, `memory/` (including its journal, archive and backups), `uploads/` (your attachments) and `avatars/`.
- **Files read outside `dataDir`**:
- `/api/media` serves a local file (up to 1 GiB) only when its absolute path appears in a Bot message of that same chat.
Expand Down
38 changes: 38 additions & 0 deletions plugins/minimax-ai/minimax-bot/miniapp/client/panels.js
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,44 @@ function groupOverview(group) {
),
h('p', { class: 'hint', style: { marginTop: '8px' } }, group.replyMode === 'all' ? t('panels.group.replyAllHint') : t('panels.group.replyAdminHint')),
),
h(
'section',
null,
h('h3', { class: 'section-title' }, t('panels.group.relayGuard')),
h(
'label',
{ class: 'field' },
h('span', null, t('panels.group.relayLimit')),
h('input', {
class: 'input',
type: 'number',
name: 'maxHops',
min: 0,
max: 20,
value: Number(group.maxHops ?? 0),
style: { width: '120px' },
onchange: (event) => {
const raw = Number(event.target.value);
const maxHops = Number.isFinite(raw) && raw > 0 ? Math.floor(raw) : 0;
patch({ maxHops });
},
}),
),
h('p', { class: 'hint', style: { marginTop: '8px' } }, t('panels.group.relayLimitHint')),
h(
'label',
{ class: 'check' },
h('input', {
type: 'checkbox',
class: 'switch',
name: 'handover',
checked: group.handover === true,
onchange: (event) => patch({ handover: event.target.checked === true }),
}),
h('span', null, t('panels.group.handover')),
),
h('p', { class: 'hint', style: { marginTop: '8px' } }, t('panels.group.handoverHint')),
),
h(
'section',
null,
Expand Down
10 changes: 10 additions & 0 deletions plugins/minimax-ai/minimax-bot/miniapp/client/strings-panels.js
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,11 @@ export default {
'panels.group.replyAdminHint': '管理员先接话,需要时 @ 其他成员接力。',
'panels.group.replyAdminOption': '管理员(省额度)',
'panels.group.replyAllOption': '所有成员依次回复',
'panels.group.relayGuard': '接力护栏',
'panels.group.relayLimit': '接力跳数上限',
'panels.group.relayLimitHint': '0 表示不限:接力链可以一直跑下去。填上数字后,这个群里一轮接力最多几个 Bot 说话;到上限时群里会说明本轮收口。',
'panels.group.handover': '把上一位的结论交给下一位',
'panels.group.handoverHint': '下一位的提示词里会带上上一位回复的结论,省得它再去翻一遍工具。只多一段提示词,不多花回合。',
'panels.group.settingsKept': '成员设置保留',
'panels.group.needMember': '至少选一个成员',
'panels.group.name': '群名',
Expand Down Expand Up @@ -526,6 +531,11 @@ export default {
'panels.group.replyAdminHint': 'The admin replies first and @ mentions other members to take over when needed.',
'panels.group.replyAdminOption': 'Admin (saves quota)',
'panels.group.replyAllOption': 'All members reply in turn',
'panels.group.relayGuard': 'Relay guardrails',
'panels.group.relayLimit': 'Relay hop limit',
'panels.group.relayLimitHint': '0 means no limit: the relay chain can keep going. With a number, at most that many Bots speak in one chain in this group; when the limit is reached the group says so and the round wraps up.',
'panels.group.handover': 'Hand the previous conclusion to the next Bot',
'panels.group.handoverHint': "The next Bot's prompt carries the previous reply's conclusion, so it does not have to dig the same ground out of the tools again. It is prompt text only — no extra turn.",
'panels.group.settingsKept': 'Member settings are kept',
'panels.group.needMember': 'Pick at least one member',
'panels.group.name': 'Group name',
Expand Down
Loading