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
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ The MiniMax Code Agent communicates through the host MCP client. Business reques
| [OpenFilm](plugins/cristinamadureira353-svg/openfilm/) | Run OpenFilm inside MiniMax Code with the desktop interface: Studio editor, chat column and local agents, with a web-Studio fallback | [最爱双皮奶](https://github.com/cristinamadureira353-svg) |
| [Dynamic Workflow Console](plugins/stevenjj33/workflow-console/) | Run and supervise MiniMax Code dynamic workflows from one page: live status, a stage-and-dependency flow graph, per-node output, approval and control, templates, and report export | [stevenjj33](https://github.com/stevenjj33) |
| [MiniMax Photo](plugins/webguhui/minimax-photo/) | Layered image editing with an in-app AI assistant, local recovery and programmatic editing tools | [WebGuHui](https://github.com/WebGuHui) |
| [MMX Octopus](plugins/antianqi/mmx-octopus/) | A desktop companion that mirrors what your Agent is doing, chats with you in her own session, and can be driven by the Agent through four MCP tools | [antianqi](https://github.com/antianqi) |
| [Cutline](plugins/klarkxy/cutline/) | Browser-based video editor: timeline cuts, captions, motion graphics, grading and export, cut from chat by the Agent | [klarkxy](https://github.com/klarkxy) |
| [MiniMax Video](plugins/webguhui/minimax-video/) | Local video editing with captions, a host Agent assistant, reviewable timeline edits, and MP4/MP3 export | [WebGuHui](https://github.com/WebGuHui) |
| [AI Office](plugins/cristinamadureira353-svg/ai-office/) | Manage five model-powered employees in a pixel office: client tasks, chats, breaks, meetings and quota-aware offline states; uses your own API keys | [最爱双皮奶](https://github.com/cristinamadureira353-svg) |
Expand Down
1 change: 1 addition & 0 deletions README.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ MiniMax Code Agent 通过宿主 MCP 客户端与 MiniApp 协作。业务请求
| [OpenFilm](plugins/cristinamadureira353-svg/openfilm/) | 把 OpenFilm 装进 MiniMax Code:桌面版界面(Studio 编辑器 + 聊天栏 + 本地 agent),桌面模式不可用时回落网页版 | [最爱双皮奶](https://github.com/cristinamadureira353-svg) |
| [动态工作流控制台](plugins/stevenjj33/workflow-console/README.zh-CN.md) | 在一个页面里运行并盯住 MiniMax Code 动态工作流:实时状态、按阶段与依赖画出的流程图、节点输出、审核与控制、模板与报告导出 | [stevenjj33](https://github.com/stevenjj33) |
| [MiniMax Photo](plugins/webguhui/minimax-photo/) | 图层图片编辑、应用内 AI 助手、本地恢复与程序化编辑工具 | [WebGuHui](https://github.com/WebGuHui) |
| [MMX 章鱼娘](plugins/antianqi/mmx-octopus/) | 桌面上的小章鱼:跟着 Agent 的状态换表情、用自己的会话跟你聊天,也能被 Agent 用 4 个 MCP 工具指挥 | [antianqi](https://github.com/antianqi) |
| [Cutline](plugins/klarkxy/cutline/) | 浏览器里的视频剪辑台:时间线剪切、字幕、动效、调色与导出,聊天里一句话就能剪片 | [klarkxy](https://github.com/klarkxy) |
| [MiniMax Video](plugins/webguhui/minimax-video/) | 本地视频剪辑、字幕、宿主 Agent 助手、可预览的时间线修改与 MP4/MP3 导出 | [WebGuHui](https://github.com/WebGuHui) |
| [AI 事务所](plugins/cristinamadureira353-svg/ai-office/README.zh-CN.md) | 五位真实模型员工的像素事务所:接单、聊天、休息和开会,额度耗尽时角色暂停;使用玩家自己的 API Key | [最爱双皮奶](https://github.com/cristinamadureira353-svg) |
Expand Down
19 changes: 19 additions & 0 deletions plugins/antianqi/mmx-octopus/.minimax-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"schemaVersion": 1,
"name": "mmx-octopus",
"displayName": "MMX 章鱼娘",
"version": "1.6.0",
"description": "桌面上的 MMX 章鱼娘 —— MMX Agent 的可视化身体,也是你自己的专属聊天对象。她会反映 Agent 正在思考还是正在干活,还能被 Agent 和技能通过托管 MCP 直接指挥说话、换表情、挪位置。权限说明:本插件会读取你每个对话每轮的最终回复、标题与运行状态,用来判断 Agent 正在思考还是已经完成,并在你主动问她时用她自己的固定会话跑一轮 Agent,把回答直接说出来;她的对话历史只存在本机。",
"author": "antianqi",
"icon": "icon.png",
"category": "Productivity",
"exampleQueries": [
"跟章鱼娘聊两句",
"让章鱼娘说句话",
"把章鱼娘浮到桌面右下角",
"看看章鱼娘现在什么状态"
],
"apps": [],
"mcpServers": ["servers.mcp.json"],
"skills": []
}
21 changes: 21 additions & 0 deletions plugins/antianqi/mmx-octopus/LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2026 antianqi

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
197 changes: 197 additions & 0 deletions plugins/antianqi/mmx-octopus/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,197 @@
# MMX Octopus

*A small octopus girl who lives on your desktop: she shows what your Agent is
doing, and the Agent can tell her what to say.*

English | [简体中文](README.zh-CN.md)

Author: [antianqi](https://github.com/antianqi) · Version: `1.6.0` ·
Plugin ID: `mmx-octopus` · Category: `Productivity`

*The app interface is in Chinese.*

## What it does

- **She mirrors the Agent.** She subscribes to the Host Agent's turn events
(`turn.started`, `message.committed`, `turn.finished`) and switches her
expression: `thinking` when a turn starts, `working` while a task runs,
`celebrate` when a turn finishes with a real answer.
- **She reports the end of a turn.** When a turn finishes she says one short
line about what came out of it — a summary of the final reply, or a
fallback line naming the session.
- **She has a chat of her own.** The panel has a chat area. A message to her
runs **one Agent turn in her own session**, and she answers in her own voice:
short sentences, split into several bubbles as they arrive.
- **She keeps a diary.** The panel's diary holds her own monologues. It is a
separate file from the chat history, and she writes it on her own.
- **The Agent can drive her.** This package hosts an MCP server with four
tools (below), so the Agent can make her speak, change her expression, move
her, or read her state.
- **She stays out of the way.** The floating window is frameless, transparent,
always on top and click-through, so it never blocks the desktop. It is
220 × 460 and can be dragged anywhere on the screen; the Agent can park it in
one of four fixed spots (three corners and the centre).
- **Finding her again.** The floating window is click-through, so it never
swallows your clicks: move the pointer onto her and click-through switches off
there — click her for a reaction, press and drag to move her. You can also park
her in one of the four fixed spots from the panel (Settings → 「停靠位置」); that
only takes effect once she is floating. The floating window is a separate
window the Host opened — close it the way you close any Host window; the panel
keeps running, and you can float her out again at any time.

## Install

Copy the whole `mmx-octopus` directory, including the hidden `.minimax-plugin`
directory, into your MiniMax Code data directory:

```text
Repository: mmx-octopus/
Install to: <dataDir>/plugins/mmx-octopus/
Manifest: <dataDir>/plugins/mmx-octopus/.minimax-plugin/plugin.json
```

The default data directory is `~/.minimax`, so the destination is normally
`~/.minimax/plugins/mmx-octopus/`.

Restart MiniMax Code, confirm the plugin is recognised and enabled, and open
**MMX 章鱼娘** from the plugin list. The floating window appears on the
desktop; the panel holds her status, the chat area and the diary.

Nothing else is needed: no API key, no account, no dependency to install.

## Usage

1. Open the plugin from the plugin list. The floating window appears.
2. Drag it to a corner, or let the Agent move it with `mmx_move`.
3. Talk to the Agent as usual and watch her expression follow along.
4. Open the panel and write to her — she answers in her own session.

### The Agent's four tools

The package hosts one Streamable HTTP MCP server (`mmx`), mounted by
`miniapp.json` at `/mcp/mmx`. The Host rewrites its address and authenticates
it like the rest of the port.

| Tool | What it does |
| --- | --- |
| `mmx_say` | Pop a bubble with one or two sentences — the tool asks for no more than 120 characters, and the runtime refuses anything over 300. Good for a "task finished" notice. |
| `mmx_mood` | Switch her expression: `idle`, `thinking`, `working` or `celebrate`. |
| `mmx_move` | Move the floating window to one of four spots: `bottom-right`, `bottom-left`, `top-right` or `center`. |
| `mmx_status` | Read her expression, her current bubble, and whether the Agent is running. |

## How her body works

- **94 short clips with an alpha channel** live in
`miniapp/client/assets/webm/`, listed by
`miniapp/client/assets/webm/manifest.json`. They are the main body
animation, not a fallback.
- A clip is taken from a **pool**, the pool follows a **track**, and two
`<video>` elements act as **double buffers**: the front one plays while the
back one loads the next clip, so two clips never leave a gap between them.
- **The fallback is real.** A CSS-transform `pose` track (breathing, nodding, a
small hop) takes over when the pool has nothing to play, when a clip fails
to load three times in a row, or when a clip does not arrive in time. It is
what you see while the clips are still loading.
- **There is no lip-sync.** The clips are still pictures of her, so her mouth
does not follow the words. That is a deliberate limit, not a bug.

## Tested environment

- MiniMax Code 3.1.7 on Windows 11 (x64).
- The package needs **MiniMax Code 3.1.5 or later**: it declares
`agentAccess: ["session.read", "session.run"]`, and a client older than
3.1.5 rejects the whole package rather than installing half of it.
- A desktop client that supports MiniApps and Agent turns.
- The bundled self-check script needs Node 22 or later.

## Data & access

- **What it reads** — this package's own files, read from
`context.pluginRoot`: `miniapp/node/identity/AGENTS.md` and
`miniapp/node/identity/STORY.md` (who she is), plus the page assets under
`miniapp/client/`.
- **And one file of the Host's** — to keep the name in the Host's agent list in sync
with the name set in the panel, the runtime rewrites the `displayName:` line in the
frontmatter of the `agent.md` of **the agent that has this Mini App installed** —
the one whose folder contains `miniapps/<plugin-id>`. It never goes looking for
other agents' files: it does not walk up the directory tree for an `agent.md`, and
it leaves every other agent's file alone. The `agents` folder is derived from this
package's own data directory rather than a hard-coded home path. **This still
relies on the Host's on-disk layout, which is not a documented API.**
- **What it writes** — four JSON files under `context.dataDir`, the private
directory the Host creates for this plugin: `context.dataDir/state.json` (her
expression, position, bubble and the Agent's busy state),
`context.dataDir/chat.json` (your chat with her),
`context.dataDir/diary.json` (her diary) and `context.dataDir/style.json`
(how she has learned to write). Every write is atomic — a temporary file in
the same directory, then a rename — so a crash cannot leave a half-written
file behind.
- **The two writes outside that folder** —
- **`AGENTS.md` in the workspace directory of her own Agent session.** She keeps
her identity there. The Host re-reads that file every turn and puts it into the
system prompt, which is why her identity survives context compaction. It is
written atomically (a temporary file in the same directory, then a rename) and
only when its content differs from the template shipped in this package — so **a
hand edit to it is lost on the next turn**. It belongs to this Mini App's own
agent workspace. It is written **only when that workspace is this package's own
`miniapps/<plugin-id>` folder**; if the Host resolves some other agent for her
and the workspace turns out to be a real project, the file is **not** written and
her identity is passed in the message instead — so a project's own `AGENTS.md`
is never overwritten.
- **The `displayName:` line in the frontmatter of that agent's `agent.md`**, so the
name in the Host's agent list follows the name set in the panel. Only that one
line is rewritten — the rest of the file is kept verbatim, and nothing is
written when the file has no frontmatter. It is written when the name changes;
the candidate files are tried in order and the runtime stops at the first one it
can use.
- **Sessions read** — the package declares `session.read`. It reads the title,
the running state and the final reply of a turn, to tell whether the Agent is
thinking or has finished, and to summarise the turn. The board in the panel
lists the running sessions and refreshes every 30 seconds.
- **Agent turns it runs** — it declares `session.run`, and it runs **one Agent
turn per message you send her in the chat area**, in her own session. The
turn runs through the Host Agent, so it carries the capabilities the Host
grants that agent; it reads the Host's agent list once to look for an agent
dedicated to the Mini App, and falls back to the default agent when there is
none. It never runs turns on your own sessions.
- **Agent turns it starts on its own** — besides your messages, the runtime starts
a few turns by itself, and **each of them uses your model quota**:
- **Idle talk** — after 20 minutes of quiet she may start a conversation of her
own; at most 2 turns an hour, and at least 45 minutes apart. **Turn it off in
the panel**: Settings → 「她没人的时候自己说话」 ("She talks when you are away").
- **A diary entry** — after a chat, if today has no entry yet, she writes one.
- **Style learning** — after a chat, your recent chat lines are sent to the model
so she can pick up how you write.
- **A reply to your diary comment** — one more turn for each comment you leave
on a diary entry.

Her static lines (a greeting, "you have been quiet", "you ignored me") are **not**
model turns and cost nothing — turning idle talk off only stops the model ones.
- **Other sessions' titles** — with 「她知道我在忙什么」 ("She knows what I am
busy with") **on (the default)**, the titles and running state of your **other**
sessions are put into her prompt, so she can tell what you are busy with. **Turn
it off in the panel**: Settings → 「她知道我在忙什么」.
- **Tools it calls** — only its own four MCP tools, on its own port. It calls no
connector, no provider and no third-party service.
- **Processes spawned** — none. This package starts no child process and runs no
external binary.
- **Network** — the loopback address of this Mini App only. The page talks to
the runtime over the Host's authenticated loopback port, and the runtime
talks to the Host over the same port. There is no outbound request to any
other host, and no credential of any kind is read, stored or forwarded.
- **The microphone** — never. This package declares no `deviceAccess` and asks
for no browser permission.
- **State location** — `context.dataDir`. Treat it as opaque: it may move
between versions, so do not hard-code it.

## Known limits

- The interface is Chinese only.
- There is no voice: a bubble is text.
- Her body animation only covers the moments the clips cover; between clips the
`pose` fallback runs.
- She answers in whatever agent the Host resolves for her.

## License

MIT — see [LICENSE](LICENSE).
Loading
Loading