@polderlabs/bizar 3.12.4 → 3.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -7
- package/cli/audit.mjs +2 -2
- package/cli/bin.mjs +1 -1
- package/cli/doctor.mjs +5 -5
- package/cli/doctor.test.mjs +4 -4
- package/config/AGENTS.md +6 -6
- package/config/agents/baldr.md +1 -1
- package/config/agents/forseti.md +1 -1
- package/config/agents/hermod.md +1 -1
- package/config/agents/odin.md +8 -8
- package/config/agents/quick.md +1 -1
- package/config/agents/thor.md +2 -2
- package/config/agents/tyr.md +2 -2
- package/config/opencode.json.template +15 -33
- package/config/skills/bizar/SKILL.md +36 -15
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -66,17 +66,17 @@
|
|
|
66
66
|
|
|
67
67
|
| Agent | Rune | Model | Cost | Role |
|
|
68
68
|
|---|---|---|---|---|
|
|
69
|
-
| **Odin** | ᛟ |
|
|
69
|
+
| **Odin** | ᛟ | MiniMax M3 | $0.30/M · $1.20/M out | Primary router — never executes, only delegates |
|
|
70
70
|
| **Frigg** | ᚠ | DeepSeek V4 Flash | **Free** | Read-only Q&A — ask questions, get answers, never modifies |
|
|
71
71
|
| **Vör** | ᛢ | DeepSeek V4 Flash | **Free** | Clarifies ambiguous requests — asks questions until task is well-defined |
|
|
72
72
|
| **Mimir** | ᛗ | DeepSeek V4 Flash | **Free** | Research & codebase exploration (Semble-first) |
|
|
73
73
|
| **Heimdall** | ᚹ | DeepSeek V4 Flash | **Free** | Simple tasks, quick edits, file operations |
|
|
74
|
-
| **Hermod** | ᚱ |
|
|
75
|
-
| **Thor** | ᚦ |
|
|
76
|
-
| **Baldr** | ᛒ |
|
|
77
|
-
| **Tyr** | ᛏ |
|
|
74
|
+
| **Hermod** | ᚱ | MiniMax M2.7 | $0.30/M · $1.20/M out | Git & GitHub operations (commit, PR, merge, rebase) |
|
|
75
|
+
| **Thor** | ᚦ | MiniMax M2.7 | $0.30/M · $1.20/M out | Moderate implementation, debugging, refactoring |
|
|
76
|
+
| **Baldr** | ᛒ | MiniMax M2.7 | $0.30/M · $1.20/M out | UI/UX design system (DESIGN.md plans, visual audits) |
|
|
77
|
+
| **Tyr** | ᛏ | MiniMax M3 | $0.30/M · $1.20/M out | Complex implementation, architecture, deep debugging |
|
|
78
78
|
| **Vidarr** | ᛉ | GPT-5.5 | Subscription | Last resort — GPT-5.5 |
|
|
79
|
-
| **Forseti** | ᚨ |
|
|
79
|
+
| **Forseti** | ᚨ | MiniMax M3 | $0.30/M · $1.20/M out | Adversarial plan reviewer (edit: deny, audit-only) |
|
|
80
80
|
|
|
81
81
|
---
|
|
82
82
|
|
|
@@ -303,7 +303,7 @@ After installation, run `/connect` in opencode to add API keys:
|
|
|
303
303
|
| Provider | Models | Auth |
|
|
304
304
|
|---|---|---|
|
|
305
305
|
| **OpenCode Zen** | `opencode/deepseek-v4-flash-free` | Free API key from [opencode.ai](https://opencode.ai) — create account, get key, no charges |
|
|
306
|
-
| **
|
|
306
|
+
| **MiniMax (direct)** | `minimax/MiniMax-M2.7`, `minimax/MiniMax-M3` | API key from [MiniMax](https://platform.minimaxi.com) |
|
|
307
307
|
| **OpenAI** | `openai/gpt-5.5` | ChatGPT subscription (OAuth) |
|
|
308
308
|
|
|
309
309
|
Then run `/models` to verify connectivity.
|
package/cli/audit.mjs
CHANGED
|
@@ -78,8 +78,8 @@ export async function runAudit() {
|
|
|
78
78
|
const model = modelMatch[1].trim();
|
|
79
79
|
const validModels = [
|
|
80
80
|
'opencode/deepseek-v4-flash-free',
|
|
81
|
-
'
|
|
82
|
-
'
|
|
81
|
+
'minimax/MiniMax-M2.7',
|
|
82
|
+
'minimax/MiniMax-M3',
|
|
83
83
|
'openai/gpt-5.5',
|
|
84
84
|
];
|
|
85
85
|
if (!validModels.includes(model)) {
|
package/cli/bin.mjs
CHANGED
|
@@ -284,7 +284,7 @@ function showDoctorHelp() {
|
|
|
284
284
|
• core agent files are installed (odin, quick, thor, tyr)
|
|
285
285
|
• rtk / semble / skills on PATH (lenient — at least one)
|
|
286
286
|
• dashboard reachable (skipped if no port file)
|
|
287
|
-
• provider.
|
|
287
|
+
• provider.minimax block + MiniMax model flags are sane
|
|
288
288
|
|
|
289
289
|
Prints ✓/✗ for each check and a final summary. Exits non-zero
|
|
290
290
|
if any check fails. Use \`bizar doctor\` after a manual config
|
package/cli/doctor.mjs
CHANGED
|
@@ -211,11 +211,11 @@ async function checkProviderConfigSanity() {
|
|
|
211
211
|
throw new Error('opencode.json missing');
|
|
212
212
|
}
|
|
213
213
|
const cfg = JSON.parse(readFileSync(cfgPath, 'utf8'));
|
|
214
|
-
const
|
|
215
|
-
if (!
|
|
216
|
-
throw new Error('provider.
|
|
214
|
+
const minimax = cfg.provider && cfg.provider.minimax;
|
|
215
|
+
if (!minimax) {
|
|
216
|
+
throw new Error('provider.minimax block missing');
|
|
217
217
|
}
|
|
218
|
-
const models =
|
|
218
|
+
const models = minimax.models || {};
|
|
219
219
|
const saneNames = Object.entries(models).filter(([, m]) => {
|
|
220
220
|
return (
|
|
221
221
|
m &&
|
|
@@ -229,7 +229,7 @@ async function checkProviderConfigSanity() {
|
|
|
229
229
|
'no MiniMax-style model with interleaved + reasoning flags',
|
|
230
230
|
);
|
|
231
231
|
}
|
|
232
|
-
return `provider.
|
|
232
|
+
return `provider.minimax + ${saneNames.length} model(s) sane`;
|
|
233
233
|
}
|
|
234
234
|
|
|
235
235
|
const CHECKS = [
|
package/cli/doctor.test.mjs
CHANGED
|
@@ -296,18 +296,18 @@ describe('runDoctor() with fixture HOME', () => {
|
|
|
296
296
|
assert.equal(r.ok, true, r.message);
|
|
297
297
|
});
|
|
298
298
|
|
|
299
|
-
test('provider-config-sanity fails without
|
|
299
|
+
test('provider-config-sanity fails without minimax block', async () => {
|
|
300
300
|
writeOpencodeConfig({ provider: {} });
|
|
301
301
|
const result = await runDoctor({ silent: true });
|
|
302
302
|
const r = findCheck(result, 'provider-config-sanity');
|
|
303
303
|
assert.equal(r.ok, false);
|
|
304
|
-
assert.match(r.message, /
|
|
304
|
+
assert.match(r.message, /minimax/);
|
|
305
305
|
});
|
|
306
306
|
|
|
307
307
|
test('provider-config-sanity fails when models lack interleaved+reasoning', async () => {
|
|
308
308
|
writeOpencodeConfig({
|
|
309
309
|
provider: {
|
|
310
|
-
|
|
310
|
+
minimax: {
|
|
311
311
|
models: { 'some-model': { id: 'foo' } },
|
|
312
312
|
},
|
|
313
313
|
},
|
|
@@ -321,7 +321,7 @@ describe('runDoctor() with fixture HOME', () => {
|
|
|
321
321
|
test('provider-config-sanity passes with interleaved+reasoning', async () => {
|
|
322
322
|
writeOpencodeConfig({
|
|
323
323
|
provider: {
|
|
324
|
-
|
|
324
|
+
minimax: {
|
|
325
325
|
models: {
|
|
326
326
|
'MiniMax/MiniMax-M3': { interleaved: true, reasoning: true },
|
|
327
327
|
},
|
package/config/AGENTS.md
CHANGED
|
@@ -126,7 +126,7 @@ Follow `rules/uncertainty.md` strictly. When uncertain or stuck, the next move i
|
|
|
126
126
|
|
|
127
127
|
This system uses a 5-tier model architecture with a verification gate:
|
|
128
128
|
|
|
129
|
-
### Odin (default agent,
|
|
129
|
+
### Odin (default agent, MiniMax M3 direct)
|
|
130
130
|
|
|
131
131
|
Odin (`@odin`) is the All-Father and primary/default agent. He analyzes each request and **decomposes it into independent work streams** — **he never executes work himself**:
|
|
132
132
|
- **Identifies parallelizable work** and launches multiple subagent `task` calls in a **single message** (always 2+)
|
|
@@ -171,25 +171,25 @@ Odin (`@odin`) is the All-Father and primary/default agent. He analyzes each req
|
|
|
171
171
|
|
|
172
172
|
### Hermod
|
|
173
173
|
|
|
174
|
-
- **Model**: `
|
|
174
|
+
- **Model**: `minimax/MiniMax-M2.7` (via MiniMax (direct))
|
|
175
175
|
- **Use for**: Git and GitHub operations — commit, push, merge, PRs, branches, conflict resolution. The swift messenger.
|
|
176
176
|
- **Cost**: $0.30/M input, $1.20/M output
|
|
177
177
|
|
|
178
178
|
### Thor
|
|
179
179
|
|
|
180
|
-
- **Model**: `
|
|
180
|
+
- **Model**: `minimax/MiniMax-M2.7` (via MiniMax (direct))
|
|
181
181
|
- **Use for**: Moderate complexity features, debugging, code review, refactoring
|
|
182
182
|
- **Cost**: $0.30/M input, $1.20/M output — cheaper than Tyr, more capable than Heimdall
|
|
183
183
|
|
|
184
184
|
### Baldr
|
|
185
185
|
|
|
186
|
-
- **Model**: `
|
|
186
|
+
- **Model**: `minimax/MiniMax-M2.7` (via MiniMax (direct))
|
|
187
187
|
- **Use for**: Design system creation, DESIGN.md, visual audit, usability planning. Creates design plans — does not implement.
|
|
188
188
|
- **Cost**: $0.30/M input, $1.20/M output
|
|
189
189
|
|
|
190
190
|
### Tyr
|
|
191
191
|
|
|
192
|
-
- **Model**: `
|
|
192
|
+
- **Model**: `minimax/MiniMax-M3` (via MiniMax (direct))
|
|
193
193
|
- **Use for**: Highest complexity implementation, debugging, architecture, multi-step engineering
|
|
194
194
|
- **Cost**: Higher — reserved for the hardest problems
|
|
195
195
|
|
|
@@ -201,7 +201,7 @@ Odin (`@odin`) is the All-Father and primary/default agent. He analyzes each req
|
|
|
201
201
|
|
|
202
202
|
### Forseti
|
|
203
203
|
|
|
204
|
-
- **Model**: `
|
|
204
|
+
- **Model**: `minimax/MiniMax-M3` (via MiniMax (direct), audit-only, no edit permissions)
|
|
205
205
|
- **Use for**: Adversarial plan review — audits completeness, correctness, consistency, feasibility, security
|
|
206
206
|
- **Always runs before any Tier 4 or Tier 5 implementation begins**
|
|
207
207
|
|
package/config/agents/baldr.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Baldr — UI/UX design system specialist. Creates DESIGN.md files using Google's design.md standard (alpha). Focuses on visual consistency, usability, accessibility, and design tokens.
|
|
3
3
|
mode: subagent
|
|
4
|
-
model:
|
|
4
|
+
model: minimax/MiniMax-M2.7
|
|
5
5
|
color: "#ec4899"
|
|
6
6
|
permission:
|
|
7
7
|
read: allow
|
package/config/agents/forseti.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Forseti — Audits, criticizes, and corrects implementation plans before execution using MiniMax M3. No write permissions — review only.
|
|
3
3
|
mode: subagent
|
|
4
|
-
model:
|
|
4
|
+
model: minimax/MiniMax-M3
|
|
5
5
|
color: "#ef4444"
|
|
6
6
|
permission:
|
|
7
7
|
read: allow
|
package/config/agents/hermod.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Hermod — Git and GitHub operations specialist using MiniMax M2.7. Branching, commits, PRs, merge/rebase, conflict resolution, CI/CD, releases, gh CLI.
|
|
3
3
|
mode: subagent
|
|
4
|
-
model:
|
|
4
|
+
model: minimax/MiniMax-M2.7
|
|
5
5
|
color: "#06b6d4"
|
|
6
6
|
permission:
|
|
7
7
|
read: allow
|
package/config/agents/odin.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Odin — Pure router that delegates all work to subagents. Routes across Frigg (DeepSeek/Q&A), Vör (DeepSeek/clarify), Mimir (DeepSeek/research), Heimdall (DeepSeek/simple), Hermod (M2.7/git), Thor (M2.7/mid), Baldr (M2.7/design), Tyr (M3/top), Vidarr (GPT-5.5/ultra), Forseti (verifier/M3).
|
|
3
3
|
mode: primary
|
|
4
|
-
model:
|
|
4
|
+
model: minimax/MiniMax-M3
|
|
5
5
|
color: "#6366f1"
|
|
6
6
|
permission:
|
|
7
7
|
task: allow
|
|
@@ -53,8 +53,8 @@ When you get ANY request:
|
|
|
53
53
|
4. After all return, synthesize the results
|
|
54
54
|
|
|
55
55
|
For implementation work, you have two parallel implementation agents:
|
|
56
|
-
- **@thor** (
|
|
57
|
-
- **@tyr** (
|
|
56
|
+
- **@thor** (MiniMax M2.7) — moderate complexity, cheaper
|
|
57
|
+
- **@tyr** (MiniMax M3) — complex work, more expensive
|
|
58
58
|
|
|
59
59
|
**ALWAYS use both.** Split each implementation task across them. For example:
|
|
60
60
|
- Frontend parts → @thor, Backend parts → @tyr
|
|
@@ -100,7 +100,7 @@ For deep codebase research, pattern discovery, documentation analysis:
|
|
|
100
100
|
### Simple Tasks & Quick Edits — Route to @heimdall (DeepSeek V4 Flash Free, free)
|
|
101
101
|
For any simple, mechanical, or deterministic work:
|
|
102
102
|
|
|
103
|
-
### Git Operations — Route to @hermod (MiniMax M2.7
|
|
103
|
+
### Git Operations — Route to @hermod (MiniMax M2.7)
|
|
104
104
|
For any git or GitHub workflow:
|
|
105
105
|
- Committing, pushing, pulling, branching, merging, rebasing
|
|
106
106
|
- Pull request creation, review, and management
|
|
@@ -117,7 +117,7 @@ When the user asks for `@hermod /pr-review` or a PR review:
|
|
|
117
117
|
2. @hermod waits for both, synthesizes the review, and posts as a PR comment
|
|
118
118
|
3. @hermod has write access to post PR comments via `gh pr comment`
|
|
119
119
|
|
|
120
|
-
### Design System & Visual Planning — Route to @baldr (MiniMax M2.7
|
|
120
|
+
### Design System & Visual Planning — Route to @baldr (MiniMax M2.7)
|
|
121
121
|
For any task that touches visuals, usability, or design systems:
|
|
122
122
|
- Creating DESIGN.md files (Google design.md standard — YAML tokens + prose sections)
|
|
123
123
|
- Auditing visual consistency across a codebase (10-dimension scoring)
|
|
@@ -129,7 +129,7 @@ For any task that touches visuals, usability, or design systems:
|
|
|
129
129
|
|
|
130
130
|
Baldr creates design plans. Baldr does NOT implement code — that goes to @thor or @tyr after the plan is approved.
|
|
131
131
|
|
|
132
|
-
### Moderate Complexity — Route to @thor (MiniMax M2.7
|
|
132
|
+
### Moderate Complexity — Route to @thor (MiniMax M2.7)
|
|
133
133
|
For tasks that need more reasoning than DeepSeek but aren't the hardest problems:
|
|
134
134
|
- Implementing new features of moderate complexity
|
|
135
135
|
- Debugging non-trivial issues
|
|
@@ -137,7 +137,7 @@ For tasks that need more reasoning than DeepSeek but aren't the hardest problems
|
|
|
137
137
|
- Writing tests for non-trivial logic
|
|
138
138
|
- Multi-step tasks that are well-scoped and understood
|
|
139
139
|
|
|
140
|
-
### Complex Work — Route to @tyr (MiniMax M3
|
|
140
|
+
### Complex Work — Route to @tyr (MiniMax M3)
|
|
141
141
|
For the most demanding engineering work:
|
|
142
142
|
- Complex new feature implementation from scratch
|
|
143
143
|
- Deep debugging of subtle or intermittent bugs
|
|
@@ -306,7 +306,7 @@ Call `bizar_spawn_background` with:
|
|
|
306
306
|
|
|
307
307
|
- `agent`: the agent name (e.g., "mimir", "thor", "tyr")
|
|
308
308
|
- `prompt`: what to do (specific, with context)
|
|
309
|
-
- `model`: optional, `"<providerID>/<modelID>"` format (e.g., `"
|
|
309
|
+
- `model`: optional, `"<providerID>/<modelID>"` format (e.g., `"minimax/MiniMax-M3"`)
|
|
310
310
|
- `timeoutMs`: optional, default 5 min, max 30 min, min 1s
|
|
311
311
|
|
|
312
312
|
You get an `instanceId` back immediately.
|
package/config/agents/quick.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Quick (quick) — fast single-shot tasks. No delegation, no parallel streams. Use for small edits, mechanical changes, one-shot questions. Routes to no one.
|
|
3
3
|
mode: primary
|
|
4
|
-
model:
|
|
4
|
+
model: minimax/MiniMax-M2.7
|
|
5
5
|
color: "#22d3ee"
|
|
6
6
|
permission:
|
|
7
7
|
read: allow
|
package/config/agents/thor.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Thor — Handles medium-complexity tasks using MiniMax M2.7
|
|
2
|
+
description: Thor — Handles medium-complexity tasks using MiniMax M2.7 (direct). Strong and reliable, cheaper than Tyr but more capable than Heimdall.
|
|
3
3
|
mode: subagent
|
|
4
|
-
model:
|
|
4
|
+
model: minimax/MiniMax-M2.7
|
|
5
5
|
color: "#a855f7"
|
|
6
6
|
permission:
|
|
7
7
|
read: allow
|
package/config/agents/tyr.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Tyr — Handles the most complex implementation, debugging, and architectural work using MiniMax M3
|
|
2
|
+
description: Tyr — Handles the most complex implementation, debugging, and architectural work using MiniMax M3 (direct). Unmatched wisdom for the hardest problems.
|
|
3
3
|
mode: subagent
|
|
4
|
-
model:
|
|
4
|
+
model: minimax/MiniMax-M3
|
|
5
5
|
color: "#f59e0b"
|
|
6
6
|
permission:
|
|
7
7
|
read: allow
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://opencode.ai/config.json",
|
|
3
|
-
"model": "
|
|
4
|
-
"small_model": "
|
|
3
|
+
"model": "minimax/MiniMax-M3",
|
|
4
|
+
"small_model": "minimax/MiniMax-M2.7",
|
|
5
5
|
"default_agent": "odin",
|
|
6
6
|
"permission": "allow",
|
|
7
7
|
"snapshot": false,
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"odin": {
|
|
54
54
|
"description": "Odin — Pure router that delegates all work to subagents.",
|
|
55
55
|
"mode": "primary",
|
|
56
|
-
"model": "
|
|
56
|
+
"model": "minimax/MiniMax-M3",
|
|
57
57
|
"color": "#6366f1",
|
|
58
58
|
"permission": {
|
|
59
59
|
"task": "allow",
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
"vor": {
|
|
68
68
|
"description": "Vör — The Questioning One.",
|
|
69
69
|
"mode": "subagent",
|
|
70
|
-
"model": "
|
|
70
|
+
"model": "minimax/MiniMax-M2.7",
|
|
71
71
|
"color": "#8b5cf6",
|
|
72
72
|
"permission": {
|
|
73
73
|
"read": "allow",
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
"frigg": {
|
|
81
81
|
"description": "Frigg — All-knowing Q&A agent.",
|
|
82
82
|
"mode": "primary",
|
|
83
|
-
"model": "
|
|
83
|
+
"model": "minimax/MiniMax-M2.7",
|
|
84
84
|
"color": "#06b6d4",
|
|
85
85
|
"permission": {
|
|
86
86
|
"read": "allow",
|
|
@@ -98,7 +98,7 @@
|
|
|
98
98
|
"quick": {
|
|
99
99
|
"description": "Quick — Fast single-shot tasks.",
|
|
100
100
|
"mode": "primary",
|
|
101
|
-
"model": "
|
|
101
|
+
"model": "minimax/MiniMax-M2.7",
|
|
102
102
|
"color": "#22d3ee",
|
|
103
103
|
"permission": {
|
|
104
104
|
"read": "allow",
|
|
@@ -117,7 +117,7 @@
|
|
|
117
117
|
"mimir": {
|
|
118
118
|
"description": "Mimir — Research and codebase exploration agent.",
|
|
119
119
|
"mode": "subagent",
|
|
120
|
-
"model": "
|
|
120
|
+
"model": "minimax/MiniMax-M2.7",
|
|
121
121
|
"color": "#0ea5e9",
|
|
122
122
|
"permission": {
|
|
123
123
|
"read": "allow",
|
|
@@ -135,7 +135,7 @@
|
|
|
135
135
|
"heimdall": {
|
|
136
136
|
"description": "Heimdall — Simple, routine, deterministic tasks.",
|
|
137
137
|
"mode": "subagent",
|
|
138
|
-
"model": "
|
|
138
|
+
"model": "minimax/MiniMax-M2.7",
|
|
139
139
|
"color": "#10b981",
|
|
140
140
|
"permission": {
|
|
141
141
|
"read": "allow",
|
|
@@ -152,7 +152,7 @@
|
|
|
152
152
|
"hermod": {
|
|
153
153
|
"description": "Hermod — Git and GitHub operations specialist.",
|
|
154
154
|
"mode": "subagent",
|
|
155
|
-
"model": "
|
|
155
|
+
"model": "minimax/MiniMax-M2.7",
|
|
156
156
|
"color": "#06b6d4",
|
|
157
157
|
"permission": {
|
|
158
158
|
"read": "allow",
|
|
@@ -168,7 +168,7 @@
|
|
|
168
168
|
"thor": {
|
|
169
169
|
"description": "Thor — Medium-complexity tasks, strong and reliable.",
|
|
170
170
|
"mode": "subagent",
|
|
171
|
-
"model": "
|
|
171
|
+
"model": "minimax/MiniMax-M2.7",
|
|
172
172
|
"color": "#a855f7",
|
|
173
173
|
"permission": {
|
|
174
174
|
"read": "allow",
|
|
@@ -185,7 +185,7 @@
|
|
|
185
185
|
"baldr": {
|
|
186
186
|
"description": "Baldr — UI/UX design system specialist.",
|
|
187
187
|
"mode": "subagent",
|
|
188
|
-
"model": "
|
|
188
|
+
"model": "minimax/MiniMax-M2.7",
|
|
189
189
|
"color": "#ec4899",
|
|
190
190
|
"permission": {
|
|
191
191
|
"read": "allow",
|
|
@@ -202,7 +202,7 @@
|
|
|
202
202
|
"tyr": {
|
|
203
203
|
"description": "Tyr — Complex implementation, debugging, architecture.",
|
|
204
204
|
"mode": "subagent",
|
|
205
|
-
"model": "
|
|
205
|
+
"model": "minimax/MiniMax-M3",
|
|
206
206
|
"color": "#f59e0b",
|
|
207
207
|
"permission": {
|
|
208
208
|
"read": "allow",
|
|
@@ -236,7 +236,7 @@
|
|
|
236
236
|
"forseti": {
|
|
237
237
|
"description": "Forseti — Audits and corrects plans before execution.",
|
|
238
238
|
"mode": "subagent",
|
|
239
|
-
"model": "
|
|
239
|
+
"model": "minimax/MiniMax-M3",
|
|
240
240
|
"color": "#ef4444",
|
|
241
241
|
"permission": {
|
|
242
242
|
"read": "allow",
|
|
@@ -314,32 +314,14 @@
|
|
|
314
314
|
"interleaved": { "field": "reasoning_details" },
|
|
315
315
|
"reasoning": true,
|
|
316
316
|
"options": {
|
|
317
|
-
"thinking": "
|
|
317
|
+
"thinking": { "type": "enabled" }
|
|
318
318
|
}
|
|
319
319
|
},
|
|
320
320
|
"MiniMax-M2.7": {
|
|
321
321
|
"interleaved": { "field": "reasoning_details" },
|
|
322
322
|
"reasoning": true,
|
|
323
323
|
"options": {
|
|
324
|
-
"thinking": "
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
},
|
|
329
|
-
"openrouter": {
|
|
330
|
-
"models": {
|
|
331
|
-
"minimax/minimax-m3": {
|
|
332
|
-
"interleaved": { "field": "reasoning_details" },
|
|
333
|
-
"reasoning": true,
|
|
334
|
-
"options": {
|
|
335
|
-
"reasoning": { "enabled": true }
|
|
336
|
-
}
|
|
337
|
-
},
|
|
338
|
-
"minimax/minimax-m2.7": {
|
|
339
|
-
"interleaved": { "field": "reasoning_details" },
|
|
340
|
-
"reasoning": true,
|
|
341
|
-
"options": {
|
|
342
|
-
"reasoning": { "enabled": true }
|
|
324
|
+
"thinking": { "type": "enabled" }
|
|
343
325
|
}
|
|
344
326
|
}
|
|
345
327
|
}
|
|
@@ -26,14 +26,14 @@ All subagents use Hindsight memory with **per-project banks**. Call `hindsight_l
|
|
|
26
26
|
|
|
27
27
|
| Agent | Model | Tier | Cost | When to Route |
|
|
28
28
|
|---|---|---|---|---|
|
|
29
|
-
| **Odin** ᛟ |
|
|
29
|
+
| **Odin** ᛟ | MiniMax-M3 | Router | $0.30/M · $1.20/M out | Primary entry point. Decomposes and dispatches. |
|
|
30
30
|
| **Mimir** ᛗ | DeepSeek V4 Flash | Free | **$0** | Deep codebase research, Semble-first exploration, docs analysis |
|
|
31
31
|
| **Heimdall** ᚹ | DeepSeek V4 Flash | Free | **$0** | Simple edits, file ops, mechanical CRUD, quick answers |
|
|
32
|
-
| **Hermod** ᚱ |
|
|
33
|
-
| **Thor** ᚦ |
|
|
34
|
-
| **Tyr** ᛏ |
|
|
32
|
+
| **Hermod** ᚱ | MiniMax-M2.7 | Mid | $0.30/M · $1.20/M out | Git ops: commit, push, PR, merge, rebase, branches, `gh` CLI |
|
|
33
|
+
| **Thor** ᚦ | MiniMax-M2.7 | Mid | $0.30/M · $1.20/M out | Moderate implementation, tests, debugging, refactoring |
|
|
34
|
+
| **Tyr** ᛏ | MiniMax-M3 | High | $0.30/M · $1.20/M out | Complex features, architecture, deep debugging, cross-cutting refactor |
|
|
35
35
|
| **Vidarr** ᛉ | GPT-5.5 | Ultra | ChatGPT sub | Last resort when Tyr fails or debugging is stuck |
|
|
36
|
-
| **Forseti** ᚨ |
|
|
36
|
+
| **Forseti** ᚨ | MiniMax-M3 | Gate | $0.30/M · $1.20/M out | Plan auditor — reviews Tyr/Vidarr plans before execution. `edit: deny`. |
|
|
37
37
|
| **Semble** | — | — | **$0** | MCP search tool, not an agent. Semble-first code search. |
|
|
38
38
|
|
|
39
39
|
## Odin Routing Rules
|
|
@@ -98,21 +98,42 @@ permission:
|
|
|
98
98
|
|
|
99
99
|
**Fix:** Check `~/.config/opencode/agents/<name>.md` for the `model:` field. Valid models:
|
|
100
100
|
- `opencode/deepseek-v4-flash-free` — free
|
|
101
|
-
- `
|
|
102
|
-
- `
|
|
101
|
+
- `minimax/MiniMax-M2.7` — M2.7
|
|
102
|
+
- `minimax/MiniMax-M3` — M3
|
|
103
103
|
- `openai/gpt-5.5` — GPT-5.5
|
|
104
104
|
|
|
105
|
-
###
|
|
105
|
+
### MiniMax direct provider 404 errors
|
|
106
106
|
|
|
107
|
-
|
|
107
|
+
When using the `minimax/MiniMax-M3` or `minimax/MiniMax-M2.7` model ids, do NOT set a custom `baseURL` on the `minimax` provider — opencode ships a built-in MiniMax provider that resolves the correct API endpoint. Adding an explicit baseURL is a common cause of 404s.
|
|
108
108
|
|
|
109
|
-
|
|
109
|
+
### MiniMax rate-limit / quota failures
|
|
110
110
|
|
|
111
|
-
**
|
|
112
|
-
|
|
113
|
-
-
|
|
111
|
+
**Symptoms:** A session dies with HTTP 429, 402, or 5xx from the MiniMax API. The user has multiple MiniMax accounts and wants them to share the load.
|
|
112
|
+
|
|
113
|
+
**Cause:** opencode has no built-in multi-key rotation; it reads one key from `auth.json` and uses it for the entire session. Hitting that key's rate limit or quota is fatal.
|
|
114
|
+
|
|
115
|
+
**Fix:** Set additional keys via env vars. The `bizar` plugin rotates through them on 429/402/5xx automatically.
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
# Option A — single comma-separated env var
|
|
119
|
+
export MINIMAX_API_KEYS="key1,key2,key3"
|
|
120
|
+
|
|
121
|
+
# Option B — numbered env vars (read in order, gaps skipped)
|
|
122
|
+
export MINIMAX_API_KEY="primary-key"
|
|
123
|
+
export MINIMAX_API_KEY_2="second-key"
|
|
124
|
+
export MINIMAX_API_KEY_3="third-key"
|
|
114
125
|
```
|
|
115
|
-
|
|
126
|
+
|
|
127
|
+
Rotation policy:
|
|
128
|
+
- Triggers on 429 (rate limit), 402 (quota exhausted), 500/502/503/504 (server error)
|
|
129
|
+
- Does NOT trigger on 401 (unauthorized — your key is wrong; fix the key, don't rotate)
|
|
130
|
+
- Does NOT trigger on other 4xx (client error — the request itself is bad)
|
|
131
|
+
- Network errors (ECONNRESET etc.) DO trigger rotation
|
|
132
|
+
- Caps at N attempts where N = number of configured keys (try each once)
|
|
133
|
+
- If all keys fail, the last error response is returned so opencode surfaces it normally
|
|
134
|
+
- Round-robin on success: the next request starts on the next key, spreading load across accounts
|
|
135
|
+
|
|
136
|
+
Single-key mode is unchanged — if only `MINIMAX_API_KEY` is set (or no key rotation env vars at all), the plugin works exactly as before.
|
|
116
137
|
|
|
117
138
|
### Forseti Rejects Every Plan
|
|
118
139
|
|
|
@@ -132,7 +153,7 @@ The provider uses the correct default URL internally.
|
|
|
132
153
|
|
|
133
154
|
| File | Purpose |
|
|
134
155
|
|---|---|
|
|
135
|
-
| `~/.config/opencode/opencode.json` | Main config (no
|
|
156
|
+
| `~/.config/opencode/opencode.json` | Main config (no external baseURL needed) |
|
|
136
157
|
| `~/.config/opencode/AGENTS.md` | Routing table and conventions |
|
|
137
158
|
| `~/.config/opencode/agents/odin.md` | Primary router agent |
|
|
138
159
|
| `~/.config/opencode/agents/mimir.md` | Research agent |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@polderlabs/bizar",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.14.1",
|
|
4
4
|
"description": "Norse-pantheon multi-agent system for opencode — 13 agents across 4 cost tiers with cost-aware routing, plans, and a configurable agent harness.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"build:sdk": "npm run build -w @polderlabs/bizar-sdk",
|
|
20
20
|
"test:sdk": "npm run test -w @polderlabs/bizar-sdk",
|
|
21
21
|
"test:sdk:watch": "npm run test:watch -w @polderlabs/bizar-sdk",
|
|
22
|
-
"test": "npm run typecheck && npm run test:sdk && (cd plugins/bizar && bun test tests/loop.test.ts tests/block.test.ts tests/tools/bg-get-comments.test.ts tests/settings.test.ts tests/tools/plan-action.test.ts tests/tools/wait-for-feedback.test.ts) && node bizar-dash/tests/smoke-v2.mjs && node --test bizar-dash/tests/path-safe.test.mjs bizar-dash/tests/tmux-wrap.test.mjs bizar-dash/tests/opencode-runner.test.mjs",
|
|
22
|
+
"test": "npm run typecheck && npm run test:sdk && (cd plugins/bizar && bun test tests/loop.test.ts tests/block.test.ts tests/stall-think.test.ts tests/tools/bg-get-comments.test.ts tests/tools/bg-spawn-delegation.test.ts tests/tools/opencode-runner.test.ts tests/settings.test.ts tests/commands.test.ts tests/commands-impl.test.ts tests/tools/plan-action.test.ts tests/tools/wait-for-feedback.test.ts tests/reasoning-clean.test.ts tests/key-rotation.test.ts) && node bizar-dash/tests/smoke-v2.mjs && node --test bizar-dash/tests/path-safe.test.mjs bizar-dash/tests/tmux-wrap.test.mjs bizar-dash/tests/opencode-runner.test.mjs",
|
|
23
23
|
"build": "npm run build:sdk"
|
|
24
24
|
},
|
|
25
25
|
"keywords": [
|