npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

multiarena

v0.1.4

Published

Terminal-native multi-model content generation — N models collaborate to produce the best document, analysis, script, or strategy

Downloads

575

Readme

multiarena

终端原生多模型 AI 协作工具。一键提问,多个大模型同时回答;多模型接力审议,产出经过多重打磨的文档。

模式系统

multiarena 有两个顶层模式,各自包含总览和模型私聊两种视图:

广播模式 (Broadcast)               团队模式 (Team)
  ├── 总览:多模型并排面板             ├── 总览:审议入口 / 审议结果
  └── 定向:单个模型全宽详情           └── 定向:与单个模型私聊

输入栏前缀

前缀告诉你当前处于哪个模式和视图:

| 前缀 | 所处位置 | |------|---------| | [all] | 广播总览 — 消息发给所有模型 | | [模型名] | 广播定向 — 只跟该模型对话 | | [team] | 团队总览 — 输入任务启动审议 | | [team:模型名] | 团队定向 — 审议后与该模型私聊 |

模式切换规则

          Shift+Tab (仅在总览时)          Shift+Tab (仅在总览时)
广播总览 ←────────────────────→ 团队总览
   ↑  ↓ Tab                        ↑  ↓ Tab
广播定向                         团队定向
   ↑                              ↑
   └── Esc ───────────────────────┘── Esc

Tab — 在当前模式内循环切换目标。从总览进入第一个模型,再按切到下一个,循环回总览。Tab 永远不会切换模式(不会在广播 ↔ 团队之间跳)。

Shift+Tab — 在广播和团队之间切换。只在总览时生效,且切换后总是落在目标模式的总览。如果你在私聊中,需要先按 Esc 回总览,再按 Shift+Tab。

Esc — 返回当前模式的总览。无论你在私聊、对比视图、还是审议进行中,Esc 都会带你回到当前模式的总览。Esc 永远不会切换模式。

d — 对比模式。输入栏为空时,按 d 将当前模型与另一个模型的回答并排展示,再按 d 退出。在总览中按 d 会将第一个模型作为主视图、第二个作为对比。


广播模式(启动默认)

消息同时发给所有非静音模型,分栏并排查看回答。

广播总览

┌─ claude ──────────────────────┐ ┌─ gpt ─────────────────────────┐
│                               │ │                               │
│  可以使用 ls 列出当前目录文件: │ │  你可以用 ls 或 dir 命令查看目 │
│  $ ls -la                     │ │  录内容:                      │
│  total 48                     │ │  $ ls                          │
│  drwxr-xr-x  12 user  staff   │ │  src/  test/  package.json     │
│                               │ │                               │
│  3 lines · 1K/200K · done     │ │  3 lines · 1K/128K · done     │
└───────────────────────────────┘ └───────────────────────────────┘
────────────────────────────────────────────────────────────────────
 claude ●  gpt ●   — Tab:model d:compare m:mute r:reset q:quit ↑↓:scroll
[all] > ▊

提交消息后,所有非静音模型同时接收并回答。每个面板底部显示行数、token 用量和状态。

广播定向(Tab 进入)

Tab 进入某个模型的私聊视图。消息只发给该模型,输出区变为全宽详情。

┌─ claude ──────────────────────────────────────────────────────────┐
│                                                                    │
│  我来详细分析这个方案的优缺点:                                       │
│                                                                    │
│  **优点:**                                                         │
│  1. 四层架构清晰,每层职责单一,易于测试和维护                          │
│  2. Provider 接口设计简洁,新增模型只需实现 chat() 方法                │
│                                                                    │
│  2K/200K · 15 lines · done                                         │
└────────────────────────────────────────────────────────────────────┘
────────────────────────────────────────────────────────────────────
 claude ●  gpt    — Tab:model d:compare m:mute r:reset q:quit ↑↓:scroll
[claude] > ▊

再按 Tab 切换到下一个模型(跳过静音模型),循环回到总览。按 Esc 返回总览。

对比模式(按 d

输入栏为空时按 d,将当前模型与下一个模型的回答并排对比。

┌─ claude ──────────────────────┐ ┌─ gpt ─────────────────────────┐
│                               │ │                               │
│  推荐使用策略模式,将每种算法封 │ │  建议用工厂模式配合依赖注入来解 │
│  装为独立的策略类。            │ │  耦。                          │
│                               │ │                               │
│  2K/200K · 12 lines · done    │ │  1K/128K · 14 lines · done   │
└───────────────────────────────┘ └───────────────────────────────┘
────────────────────────────────────────────────────────────────────
 claude ●  gpt ●   — Tab:model d:exit-compare m:mute r:reset q:quit
[claude] > ▊

再按 d 退出对比,按 Esc 也能退出并回到总览。


团队模式(Shift+Tab 进入)

多个模型接力协作,起草 → 修订 → 终审,产出一份经过多视角打磨的文档。

启动审议

在广播总览按 Shift+Tab 进入团队总览,输入任务描述后回车:

────────────────────────────────────────────────────────────────────
团队模式

输入任务描述即可启动多模型接力审议。
Tab 可切换到特定模型私聊。Shift+Tab 返回广播模式。
────────────────────────────────────────────────────────────────────
 minimax  deepseek ●  — Tab:model d:compare m:mute r:reset q:quit
[team] > 写一篇关于兰州拉面的美食日记▊

审议进行中

模型按顺序接力:起草(模型 A)→ 修订(模型 B)→ 终审(模型 C)。每轮在上一轮的基础上改进。

┌─ 团队审议 ─────────────────────────────────────────────────────────┐
│                                                                    │
│ 第 2/3 轮:deepseek (修订)                                          │
│                                                                    │
│ ✓ 起草     ● 修订     ○ 终审                                        │
│ minimax    deepseek  minimax                                       │
│                                                                    │
│ 修订中 — deepseek — 正在生成…                                       │
│                                                                    │
│ ## 今天吃了兰州拉面,我很开心                                        │
│                                                                    │
│ 今天中午去楼下那家兰州拉面馆…                                        │
│                                                                    │
└────────────────────────────────────────────────────────────────────┘
────────────────────────────────────────────────────────────────────
 minimax  deepseek ●  — Tab:model d:compare m:mute r:reset q:quit Esc:cancel
[team] > ▊

审议进行中按 Esc 中止。

审议完成

审议结束后,显示审议过程和最终文档。每轮显示模型名称、角色、修改处数,以及代表性修改内容:

┌─ 团队审议 ─────────────────────────────────────────────────────────┐
│                                                                    │
│ 审议完成 · 3 轮 · 4 处修改                                          │
│                                                                    │
│ ✓ 起草    ✓ 修订     ✓ 终审                                         │
│ minimax  deepseek  minimax                                         │
│                                                                    │
│ ── 审议过程 ──                                                      │
│                                                                    │
│ 1. minimax(起草)                                                   │
│ 2. deepseek(修订) — 4 处修改                                       │
│      明天还想去! → 我决定下次再来。                                   │
│      這個味道吧。 → 这个味道吧。                                      │
│      明天还想再来一碗。 → 计划下次再品尝一次。                          │
│ 3. minimax(终审) — 无修改                                          │
│                                                                    │
│ ── 最终文档 ──                                                      │
│                                                                    │
│ # 今天吃了兰州拉面,我很开心                                          │
│ 今天中午去楼下那家兰州拉面馆…                                         │
│                                                                    │
└────────────────────────────────────────────────────────────────────┘
────────────────────────────────────────────────────────────────────
 minimax ●  deepseek ●  — Tab:model d:compare m:mute r:reset q:quit
[team] > ▊

审议后与模型私聊

审议完成后,按 Tab 切换到任一模型,可以就该模型在审议中的表现、最终文档的内容进行讨论。每个模型的对话历史中已自动注入审议结果上下文,模型知道自己参与了审议并了解最终成果。

按 Tab → [team:minimax] > 你觉得终审时deepseek的修改是否合理?

合并已有回答(/merge

先在广播模式下让各模型各自回答一个问题,然后在团队模式下输入 /merge,选一个模型把所有回答合并为综合文档,标注共识和分歧。


安装

npm install -g multiarena

快速开始

# 创建配置文件
cat > .multiarenarc << 'EOF'
[models.claude]
provider = "anthropic"
model = "claude-sonnet-4-6"
api_key = "${ANTHROPIC_API_KEY}"

[models.gpt]
provider = "openai"
model = "gpt-4o"
api_key = "${OPENAI_API_KEY}"

[defaults]
active = ["claude", "gpt"]
EOF

# 启动
multiarena

配置

配置文件 .multiarenarc(TOML 格式),放在当前目录或 ~/.multiarenarc

[models.<名称>]
provider = "anthropic"       # anthropic | openai | google | deepseek | minimax | ollama
model = "claude-sonnet-4-6"  # API 模型名
api_key = "${ENV_VAR}"       # API key,支持环境变量
endpoint = "..."             # 自定义端点(可选)
context_limit = 200000       # 上下文窗口大小(可选)

[defaults]
active = ["claude", "gpt"]   # 启动时加载的模型

[deliberation]
constraint_file = "rules.md" # 审议约束文件(可选)

会话保存至 ~/.multiarena/sessions/。使用 multiarena --resume <id> 恢复历史会话。

支持的模型

| 厂商 | 模型 | |------|------| | Anthropic | Claude Sonnet 4.6、Opus 4.7、Haiku 4.5 | | OpenAI | GPT-4o、GPT-4.1 | | Google | Gemini 2.5 Flash、Gemini 2.5 Pro | | DeepSeek | DeepSeek-V4、DeepSeek-R1 | | MiniMax | MiniMax-M2.1 | | Ollama | 任意本地模型 |

快捷键速查

| 按键 | 功能 | 约束 | |------|------|------| | Tab | 当前模式内循环切换目标(总览 → 模型1 → 模型2 → 总览) | 不切换模式,跳过静音模型 | | Shift+Tab | 广播 ↔ 团队模式切换 | 仅在总览时生效,切换后落在目标模式总览 | | Esc | 返回当前模式总览 / 退出对比 / 中止审议 | 不切换模式 | | d | 对比两个模型的回答(输入栏为空时) | 需要至少 2 个非静音模型 | | m | 静音/取消静音当前模型 | 定向模式下生效 | | r | 重置当前模型对话历史 | 定向模式下生效 | | ↑ ↓ | 输入为空:浏览历史输入;输入非空:滚动输出 | 团队总览下审议内容也可滚动 | | /team | 等同于 Shift+Tab | | | /merge | 合并各模型最近的回答 | 需要至少 2 个模型有回复 | | q | 退出(自动保存会话) | |

License

MIT