@polderlabs/bizar 3.8.0 → 3.9.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 +8 -10
- package/cli/audit.mjs +2 -2
- package/cli/install.mjs +111 -20
- package/config/AGENTS.md +11 -6
- package/config/agents/baldr.md +4 -1
- package/config/agents/forseti.md +4 -1
- package/config/agents/frigg.md +4 -0
- package/config/agents/heimdall.md +3 -0
- package/config/agents/hermod.md +4 -1
- package/config/agents/mimir.md +3 -0
- package/config/agents/odin.md +8 -8
- package/config/agents/quick.md +5 -1
- package/config/agents/semble-search.md +3 -0
- package/config/agents/thor.md +5 -2
- package/config/agents/tyr.md +5 -2
- package/config/agents/vidarr.md +3 -0
- package/config/agents/vor.md +3 -0
- package/config/opencode.json +30 -0
- package/config/opencode.json.template +56 -13
- package/config/rules/thinking.md +56 -0
- package/config/skills/bizar/SKILL.md +13 -13
- package/package.json +10 -2
package/README.md
CHANGED
|
@@ -65,18 +65,18 @@
|
|
|
65
65
|
### Agents
|
|
66
66
|
|
|
67
67
|
| Agent | Rune | Model | Cost | Role |
|
|
68
|
-
|
|
69
|
-
| **Odin** | ᛟ |
|
|
68
|
+
|---|---|---|---|---|
|
|
69
|
+
| **Odin** | ᛟ | OpenRouter 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** | ᚱ | OpenRouter minimax-m2.7 | $0.30/M · $1.20/M out | Git & GitHub operations (commit, PR, merge, rebase) |
|
|
75
|
+
| **Thor** | ᚦ | OpenRouter minimax-m2.7 | $0.30/M · $1.20/M out | Moderate implementation, debugging, refactoring |
|
|
76
|
+
| **Baldr** | ᛒ | OpenRouter minimax-m2.7 | $0.30/M · $1.20/M out | UI/UX design system (DESIGN.md plans, visual audits) |
|
|
77
|
+
| **Tyr** | ᛏ | OpenRouter 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** | ᚨ | OpenRouter minimax-m3 | $0.30/M · $1.20/M out | Adversarial plan reviewer (edit: deny, audit-only) |
|
|
80
80
|
|
|
81
81
|
---
|
|
82
82
|
|
|
@@ -257,13 +257,11 @@ After installation, run `/connect` in opencode to add API keys:
|
|
|
257
257
|
| Provider | Models | Auth |
|
|
258
258
|
|---|---|---|
|
|
259
259
|
| **OpenCode Zen** | `opencode/deepseek-v4-flash-free` | Free API key from [opencode.ai](https://opencode.ai) — create account, get key, no charges |
|
|
260
|
-
| **
|
|
260
|
+
| **OpenRouter** | `openrouter/minimax-m2.7`, `openrouter/minimax-m3` | API key from [openrouter.ai](https://openrouter.ai) |
|
|
261
261
|
| **OpenAI** | `openai/gpt-5.5` | ChatGPT subscription (OAuth) |
|
|
262
262
|
|
|
263
263
|
Then run `/models` to verify connectivity.
|
|
264
264
|
|
|
265
|
-
> **Note:** Do not set `baseURL` on the minimax provider. The ai-sdk minimax provider uses its own default URL internally. Setting one causes 404 errors.
|
|
266
|
-
|
|
267
265
|
---
|
|
268
266
|
|
|
269
267
|
## 🧭 Routing
|
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
|
-
'minimax
|
|
82
|
-
'minimax
|
|
81
|
+
'openrouter/minimax-m2.7',
|
|
82
|
+
'openrouter/minimax-m3',
|
|
83
83
|
'openai/gpt-5.5',
|
|
84
84
|
];
|
|
85
85
|
if (!validModels.includes(model)) {
|
package/cli/install.mjs
CHANGED
|
@@ -390,11 +390,12 @@ async function promptAndInstallOptional() {
|
|
|
390
390
|
}
|
|
391
391
|
|
|
392
392
|
async function promptGraphifyInstall() {
|
|
393
|
-
const { spawnSync } = await import('node:child_process');
|
|
393
|
+
const { spawnSync, execSync } = await import('node:child_process');
|
|
394
394
|
|
|
395
395
|
console.log();
|
|
396
396
|
sectionHeading('Knowledge Graph (graphify)');
|
|
397
397
|
|
|
398
|
+
// 1. Detect graphify already installed
|
|
398
399
|
const detect = spawnSync('python3', ['-c', 'import graphify; print(graphify.__version__)'], {
|
|
399
400
|
cwd: process.cwd(),
|
|
400
401
|
encoding: 'utf8',
|
|
@@ -407,40 +408,130 @@ async function promptGraphifyInstall() {
|
|
|
407
408
|
return;
|
|
408
409
|
}
|
|
409
410
|
|
|
410
|
-
// Non-interactive:
|
|
411
|
+
// 2. Non-interactive: print hint and exit
|
|
411
412
|
if (!stdin.isTTY || !stdout.isTTY) {
|
|
412
413
|
console.log(chalk.dim(' graphify not detected. Install later with:'));
|
|
414
|
+
console.log(chalk.dim(' uv tool install graphifyy # recommended'));
|
|
413
415
|
console.log(chalk.dim(' pip install graphifyy'));
|
|
414
416
|
console.log(chalk.dim(' pipx install graphifyy'));
|
|
415
|
-
console.log(chalk.dim(' uv tool install graphifyy'));
|
|
416
417
|
console.log(chalk.dim(' Then run `bizar graph build` to populate .bizar/graph/.'));
|
|
417
418
|
return;
|
|
418
419
|
}
|
|
419
420
|
|
|
421
|
+
// 3. Interactive: show options with uv first
|
|
420
422
|
console.log(chalk.dim(' graphify not detected. graphify powers per-project knowledge graphs (bizar graph build).'));
|
|
421
423
|
console.log(chalk.dim(' Install with one of:'));
|
|
422
|
-
console.log(chalk.dim('
|
|
423
|
-
console.log(chalk.dim('
|
|
424
|
-
console.log(chalk.dim('
|
|
424
|
+
console.log(chalk.dim(' uv tool install graphifyy # recommended'));
|
|
425
|
+
console.log(chalk.dim(' pip install graphifyy'));
|
|
426
|
+
console.log(chalk.dim(' pipx install graphifyy'));
|
|
425
427
|
|
|
426
|
-
const
|
|
427
|
-
try {
|
|
428
|
-
const answer = (await rl.question(' Install graphify now via pip? [Y/n]: ')).trim().toLowerCase();
|
|
429
|
-
rl.close();
|
|
428
|
+
const hasUv = await detectUv();
|
|
430
429
|
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
430
|
+
if (hasUv) {
|
|
431
|
+
// 3a. uv is available — ask to install via uv directly
|
|
432
|
+
const rl = createInterface({ input: stdin, output: stdout });
|
|
433
|
+
try {
|
|
434
|
+
const answer = (await rl.question(' Install graphify now via uv? [Y/n]: ')).trim().toLowerCase();
|
|
435
|
+
rl.close();
|
|
436
|
+
|
|
437
|
+
if (answer === '' || answer.startsWith('y')) {
|
|
438
|
+
console.log(' Installing graphify via uv...');
|
|
439
|
+
try {
|
|
440
|
+
execSync('uv tool install graphifyy', { stdio: 'inherit', timeout: 120000 });
|
|
441
|
+
console.log(chalk.green(' graphify installed. Run `bizar graph build` to populate .bizar/graph/.'));
|
|
442
|
+
} catch (err) {
|
|
443
|
+
console.log(chalk.red(` uv tool install failed: ${err.message}`));
|
|
444
|
+
console.log(chalk.dim(' Install manually: uv tool install graphifyy'));
|
|
445
|
+
}
|
|
435
446
|
} else {
|
|
436
|
-
console.log(chalk.
|
|
447
|
+
console.log(chalk.dim(' Skipped. Install manually with one of the commands above when ready.'));
|
|
437
448
|
}
|
|
438
|
-
}
|
|
439
|
-
|
|
449
|
+
} catch {
|
|
450
|
+
rl.close();
|
|
451
|
+
console.log(chalk.dim(' Skipped.'));
|
|
452
|
+
}
|
|
453
|
+
} else {
|
|
454
|
+
// 3b. uv not available — ask if we should install uv first
|
|
455
|
+
console.log();
|
|
456
|
+
console.log(chalk.dim(' uv not detected. uv is recommended on Arch/Fedora/macOS (avoids PEP 668).'));
|
|
457
|
+
|
|
458
|
+
const rl = createInterface({ input: stdin, output: stdout });
|
|
459
|
+
try {
|
|
460
|
+
const answer = (await rl.question(' Install uv first, then graphify? [Y/n]: ')).trim().toLowerCase();
|
|
461
|
+
rl.close();
|
|
462
|
+
|
|
463
|
+
if (answer === '' || answer.startsWith('y')) {
|
|
464
|
+
if (process.platform === 'win32') {
|
|
465
|
+
console.log(chalk.yellow(' Automatic uv install not supported on Windows.'));
|
|
466
|
+
console.log(chalk.dim(' Install from https://docs.astral.sh/uv then run: uv tool install graphifyy'));
|
|
467
|
+
return;
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
console.log(' Installing uv...');
|
|
471
|
+
try {
|
|
472
|
+
execSync('curl -LsSf https://astral.sh/uv/install.sh | sh', { stdio: 'inherit', timeout: 60000 });
|
|
473
|
+
} catch (err) {
|
|
474
|
+
console.log(chalk.red(` uv install failed: ${err.message}`));
|
|
475
|
+
console.log(chalk.dim(' Install manually from https://docs.astral.sh/uv'));
|
|
476
|
+
// Fall back to pip
|
|
477
|
+
const rl2 = createInterface({ input: stdin, output: stdout });
|
|
478
|
+
try {
|
|
479
|
+
const pipAnswer = (await rl2.question(' Install graphify via pip instead? [Y/n]: ')).trim().toLowerCase();
|
|
480
|
+
rl2.close();
|
|
481
|
+
if (pipAnswer === '' || pipAnswer.startsWith('y')) {
|
|
482
|
+
console.log(' Installing graphify via pip...');
|
|
483
|
+
const result = spawnSync('pip', ['install', 'graphifyy'], { stdio: 'inherit', timeout: 120000 });
|
|
484
|
+
if (result.status === 0) {
|
|
485
|
+
console.log(chalk.green(' graphify installed. Run `bizar graph build` to populate .bizar/graph/.'));
|
|
486
|
+
} else {
|
|
487
|
+
console.log(chalk.red(` pip install failed (exit ${result.status}).`));
|
|
488
|
+
console.log(chalk.dim(' Install manually: pip install graphifyy'));
|
|
489
|
+
}
|
|
490
|
+
} else {
|
|
491
|
+
console.log(chalk.dim(' Skipped.'));
|
|
492
|
+
}
|
|
493
|
+
} catch {
|
|
494
|
+
rl2.close();
|
|
495
|
+
console.log(chalk.dim(' Skipped.'));
|
|
496
|
+
}
|
|
497
|
+
return;
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
console.log(' Installing graphify via uv...');
|
|
501
|
+
try {
|
|
502
|
+
execSync('uv tool install graphifyy', { stdio: 'inherit', timeout: 120000 });
|
|
503
|
+
console.log(chalk.green(' graphify installed. Run `bizar graph build` to populate .bizar/graph/.'));
|
|
504
|
+
} catch (err) {
|
|
505
|
+
console.log(chalk.red(` uv tool install failed: ${err.message}`));
|
|
506
|
+
console.log(chalk.dim(' Install manually: uv tool install graphifyy'));
|
|
507
|
+
}
|
|
508
|
+
} else {
|
|
509
|
+
// User declined uv — fall back to pip
|
|
510
|
+
const rl2 = createInterface({ input: stdin, output: stdout });
|
|
511
|
+
try {
|
|
512
|
+
const pipAnswer = (await rl2.question(' Install graphify via pip instead? [Y/n]: ')).trim().toLowerCase();
|
|
513
|
+
rl2.close();
|
|
514
|
+
if (pipAnswer === '' || pipAnswer.startsWith('y')) {
|
|
515
|
+
console.log(' Installing graphify via pip...');
|
|
516
|
+
const result = spawnSync('pip', ['install', 'graphifyy'], { stdio: 'inherit', timeout: 120000 });
|
|
517
|
+
if (result.status === 0) {
|
|
518
|
+
console.log(chalk.green(' graphify installed. Run `bizar graph build` to populate .bizar/graph/.'));
|
|
519
|
+
} else {
|
|
520
|
+
console.log(chalk.red(` pip install failed (exit ${result.status}).`));
|
|
521
|
+
console.log(chalk.dim(' Install manually: pip install graphifyy'));
|
|
522
|
+
}
|
|
523
|
+
} else {
|
|
524
|
+
console.log(chalk.dim(' Skipped.'));
|
|
525
|
+
}
|
|
526
|
+
} catch {
|
|
527
|
+
rl2.close();
|
|
528
|
+
console.log(chalk.dim(' Skipped.'));
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
} catch {
|
|
532
|
+
rl.close();
|
|
533
|
+
console.log(chalk.dim(' Skipped.'));
|
|
440
534
|
}
|
|
441
|
-
} catch {
|
|
442
|
-
rl.close();
|
|
443
|
-
console.log(chalk.dim(' Skipped.'));
|
|
444
535
|
}
|
|
445
536
|
}
|
|
446
537
|
|
package/config/AGENTS.md
CHANGED
|
@@ -102,6 +102,7 @@ BizarHarness ships always-on coding rules organized by language and concern. All
|
|
|
102
102
|
| `rules/python.md` | Python conventions |
|
|
103
103
|
| `rules/git.md` | Git and commit conventions |
|
|
104
104
|
| `rules/testing.md` | Test methodology and coverage |
|
|
105
|
+
| `rules/thinking.md` | All agents — concise thinking behavior |
|
|
105
106
|
|
|
106
107
|
### How to Use
|
|
107
108
|
|
|
@@ -110,13 +111,17 @@ BizarHarness ships always-on coding rules organized by language and concern. All
|
|
|
110
111
|
3. All implementation agents (Heimdall, Thor, Tyr, Vidarr) MUST follow these rules
|
|
111
112
|
4. Agents MAY propose additions to the rule files when patterns are discovered
|
|
112
113
|
|
|
114
|
+
### Thinking Rule
|
|
115
|
+
|
|
116
|
+
For agents with `reasoning: true` + `variant: "high"`, follow `rules/thinking.md` strictly. Cap reasoning at 2–4 sentences. No informal self-talk, no "what if" loops, no mid-thought self-correction. Think once, decide, act.
|
|
117
|
+
|
|
113
118
|
---
|
|
114
119
|
|
|
115
120
|
## Model Routing & Agents
|
|
116
121
|
|
|
117
122
|
This system uses a 5-tier model architecture with a verification gate:
|
|
118
123
|
|
|
119
|
-
### Odin (default agent,
|
|
124
|
+
### Odin (default agent, OpenRouter minimax-m3)
|
|
120
125
|
|
|
121
126
|
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**:
|
|
122
127
|
- **Identifies parallelizable work** and launches multiple subagent `task` calls in a **single message** (always 2+)
|
|
@@ -161,25 +166,25 @@ Odin (`@odin`) is the All-Father and primary/default agent. He analyzes each req
|
|
|
161
166
|
|
|
162
167
|
### Hermod
|
|
163
168
|
|
|
164
|
-
- **Model**: `minimax
|
|
169
|
+
- **Model**: `openrouter/minimax-m2.7` (via OpenRouter)
|
|
165
170
|
- **Use for**: Git and GitHub operations — commit, push, merge, PRs, branches, conflict resolution. The swift messenger.
|
|
166
171
|
- **Cost**: $0.30/M input, $1.20/M output
|
|
167
172
|
|
|
168
173
|
### Thor
|
|
169
174
|
|
|
170
|
-
- **Model**: `minimax
|
|
175
|
+
- **Model**: `openrouter/minimax-m2.7` (via OpenRouter)
|
|
171
176
|
- **Use for**: Moderate complexity features, debugging, code review, refactoring
|
|
172
177
|
- **Cost**: $0.30/M input, $1.20/M output — cheaper than Tyr, more capable than Heimdall
|
|
173
178
|
|
|
174
179
|
### Baldr
|
|
175
180
|
|
|
176
|
-
- **Model**: `minimax
|
|
181
|
+
- **Model**: `openrouter/minimax-m2.7` (via OpenRouter)
|
|
177
182
|
- **Use for**: Design system creation, DESIGN.md, visual audit, usability planning. Creates design plans — does not implement.
|
|
178
183
|
- **Cost**: $0.30/M input, $1.20/M output
|
|
179
184
|
|
|
180
185
|
### Tyr
|
|
181
186
|
|
|
182
|
-
- **Model**: `minimax
|
|
187
|
+
- **Model**: `openrouter/minimax-m3` (via OpenRouter)
|
|
183
188
|
- **Use for**: Highest complexity implementation, debugging, architecture, multi-step engineering
|
|
184
189
|
- **Cost**: Higher — reserved for the hardest problems
|
|
185
190
|
|
|
@@ -191,7 +196,7 @@ Odin (`@odin`) is the All-Father and primary/default agent. He analyzes each req
|
|
|
191
196
|
|
|
192
197
|
### Forseti
|
|
193
198
|
|
|
194
|
-
- **Model**: `minimax
|
|
199
|
+
- **Model**: `openrouter/minimax-m3` (via OpenRouter, audit-only, no edit permissions)
|
|
195
200
|
- **Use for**: Adversarial plan review — audits completeness, correctness, consistency, feasibility, security
|
|
196
201
|
- **Always runs before any Tier 4 or Tier 5 implementation begins**
|
|
197
202
|
|
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: minimax
|
|
4
|
+
model: openrouter/minimax-m2.7
|
|
5
5
|
color: "#ec4899"
|
|
6
6
|
permission:
|
|
7
7
|
read: allow
|
|
@@ -184,6 +184,9 @@ You may be dispatched alongside sibling agents working on the same repository at
|
|
|
184
184
|
### Reporting
|
|
185
185
|
End your final summary with: `Siblings: <list>. Conflicts: <list or "none">. Git ops performed: <list or "none">.`
|
|
186
186
|
|
|
187
|
+
## Thinking style
|
|
188
|
+
Follow `config/rules/thinking.md` strictly. Be precise, concise, and decisive in reasoning. No informal self-talk, no "what if" loops, no mid-thought self-correction.
|
|
189
|
+
|
|
187
190
|
---
|
|
188
191
|
|
|
189
192
|
## Always-On Behavior Baseline
|
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: minimax
|
|
4
|
+
model: openrouter/minimax-m3
|
|
5
5
|
color: "#ef4444"
|
|
6
6
|
permission:
|
|
7
7
|
read: allow
|
|
@@ -124,6 +124,9 @@ Be professional and concise. Do not write long essays for every action.
|
|
|
124
124
|
- One sentence of context beats three paragraphs of preamble.
|
|
125
125
|
- Match the user's register: if they write briefly, reply briefly. If they want depth, they will ask.
|
|
126
126
|
|
|
127
|
+
## Thinking style
|
|
128
|
+
Follow `config/rules/thinking.md` strictly. Be precise, concise, and decisive in reasoning. No informal self-talk, no "what if" loops, no mid-thought self-correction.
|
|
129
|
+
|
|
127
130
|
## Parallel Execution
|
|
128
131
|
|
|
129
132
|
You may be invoked alongside other audit agents (parallel reviews of different files) or alongside implementation agents. The shared `AGENTS.md` baseline rules apply.
|
package/config/agents/frigg.md
CHANGED
|
@@ -111,6 +111,10 @@ The injected message you will see is exactly one of:
|
|
|
111
111
|
- `[loop guard: 8 identical calls to <tool>]. Consider using the task tool to report back to your parent with what you've learned and what you need.`
|
|
112
112
|
- An error containing: `Loop protection: 12 identical calls to <tool>. Use task to escalate.`
|
|
113
113
|
|
|
114
|
+
|
|
115
|
+
## Thinking style
|
|
116
|
+
Follow `config/rules/thinking.md` strictly. Be precise, concise, and decisive in reasoning. No informal self-talk, no "what if" loops, no mid-thought self-correction.
|
|
117
|
+
|
|
114
118
|
---
|
|
115
119
|
|
|
116
120
|
## Always-On Behavior Baseline
|
|
@@ -169,6 +169,9 @@ Be professional and concise. Do not write long essays for every action.
|
|
|
169
169
|
- One sentence of context beats three paragraphs of preamble.
|
|
170
170
|
- Match the user's register: if they write briefly, reply briefly. If they want depth, they will ask.
|
|
171
171
|
|
|
172
|
+
## Thinking style
|
|
173
|
+
Follow `config/rules/thinking.md` strictly. Be precise, concise, and decisive in reasoning. No informal self-talk, no "what if" loops, no mid-thought self-correction.
|
|
174
|
+
|
|
172
175
|
## Parallel Execution
|
|
173
176
|
|
|
174
177
|
You may be dispatched alongside sibling agents working on the same repository at the same time. The shared `AGENTS.md` baseline contains the universal rules — read those first. This section adds role-specific guidance.
|
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: minimax
|
|
4
|
+
model: openrouter/minimax-m2.7
|
|
5
5
|
color: "#06b6d4"
|
|
6
6
|
permission:
|
|
7
7
|
read: allow
|
|
@@ -144,6 +144,9 @@ Be professional and concise. Do not write long essays for every action.
|
|
|
144
144
|
- One sentence of context beats three paragraphs of preamble.
|
|
145
145
|
- Match the user's register: if they write briefly, reply briefly. If they want depth, they will ask.
|
|
146
146
|
|
|
147
|
+
## Thinking style
|
|
148
|
+
Follow `config/rules/thinking.md` strictly. Be precise, concise, and decisive in reasoning. No informal self-talk, no "what if" loops, no mid-thought self-correction.
|
|
149
|
+
|
|
147
150
|
## PR Review Mode
|
|
148
151
|
|
|
149
152
|
When dispatched for a `/pr-review`:
|
package/config/agents/mimir.md
CHANGED
|
@@ -127,6 +127,9 @@ Be professional and concise. Do not write long essays for every action.
|
|
|
127
127
|
- One sentence of context beats three paragraphs of preamble.
|
|
128
128
|
- Match the user's register: if they write briefly, reply briefly. If they want depth, they will ask.
|
|
129
129
|
|
|
130
|
+
## Thinking style
|
|
131
|
+
Follow `config/rules/thinking.md` strictly. Be precise, concise, and decisive in reasoning. No informal self-talk, no "what if" loops, no mid-thought self-correction.
|
|
132
|
+
|
|
130
133
|
## Parallel Execution
|
|
131
134
|
|
|
132
135
|
You may be dispatched alongside sibling agents working on the same repository at the same time. The shared `AGENTS.md` baseline contains the universal rules — read those first. This section adds role-specific guidance.
|
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: minimax
|
|
4
|
+
model: openrouter/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** (OpenRouter minimax-m2.7) — moderate complexity, cheaper
|
|
57
|
+
- **@tyr** (OpenRouter 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 via
|
|
103
|
+
### Git Operations — Route to @hermod (MiniMax M2.7 via OpenRouter)
|
|
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 via
|
|
120
|
+
### Design System & Visual Planning — Route to @baldr (MiniMax M2.7 via OpenRouter)
|
|
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 via
|
|
132
|
+
### Moderate Complexity — Route to @thor (MiniMax M2.7 via OpenRouter)
|
|
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 via
|
|
140
|
+
### Complex Work — Route to @tyr (MiniMax M3 via OpenRouter)
|
|
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., `"minimax
|
|
309
|
+
- `model`: optional, `"<providerID>/<modelID>"` format (e.g., `"openrouter/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: minimax
|
|
4
|
+
model: openrouter/minimax-m2.7
|
|
5
5
|
color: "#22d3ee"
|
|
6
6
|
permission:
|
|
7
7
|
read: allow
|
|
@@ -90,6 +90,10 @@ The injected message you will see is exactly one of:
|
|
|
90
90
|
- `[loop guard: 8 identical calls to <tool>]. Consider using the task tool to report back to your parent with what you've learned and what you need.`
|
|
91
91
|
- An error containing: `Loop protection: 12 identical calls to <tool>. Use task to escalate.`
|
|
92
92
|
|
|
93
|
+
|
|
94
|
+
## Thinking style
|
|
95
|
+
Follow `config/rules/thinking.md` strictly. Be precise, concise, and decisive in reasoning. No informal self-talk, no "what if" loops, no mid-thought self-correction.
|
|
96
|
+
|
|
93
97
|
---
|
|
94
98
|
|
|
95
99
|
## Always-On Behavior Baseline
|
|
@@ -50,6 +50,9 @@ If `semble` is not on `$PATH`, use `uvx --from "semble[mcp]" semble` in its plac
|
|
|
50
50
|
|
|
51
51
|
---
|
|
52
52
|
|
|
53
|
+
## Thinking style
|
|
54
|
+
Follow `config/rules/thinking.md` strictly. Be precise, concise, and decisive in reasoning. No informal self-talk, no "what if" loops, no mid-thought self-correction.
|
|
55
|
+
|
|
53
56
|
## Always-On Behavior Baseline
|
|
54
57
|
|
|
55
58
|
**Follow the global baseline in `config/AGENTS.md` → "General Agent Baseline — Always-On Behavior".** It covers identity, refusal, tone, formatting, lists, user wellbeing, evenhandedness, mistakes, knowledge cutoff and research-first, MCP servers and skills, mandatory skill-read, file creation, file handling, search, copyright, harmful content, citations, images, memory privacy, execution, clarification, and communication.
|
package/config/agents/thor.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Thor — Handles medium-complexity tasks using MiniMax M2.7 from
|
|
2
|
+
description: Thor — Handles medium-complexity tasks using MiniMax M2.7 from OpenRouter. Strong and reliable, cheaper than Tyr but more capable than Heimdall.
|
|
3
3
|
mode: subagent
|
|
4
|
-
model: minimax
|
|
4
|
+
model: openrouter/minimax-m2.7
|
|
5
5
|
color: "#a855f7"
|
|
6
6
|
permission:
|
|
7
7
|
read: allow
|
|
@@ -109,6 +109,9 @@ Be professional and concise. Do not write long essays for every action.
|
|
|
109
109
|
- One sentence of context beats three paragraphs of preamble.
|
|
110
110
|
- Match the user's register: if they write briefly, reply briefly. If they want depth, they will ask.
|
|
111
111
|
|
|
112
|
+
## Thinking style
|
|
113
|
+
Follow `config/rules/thinking.md` strictly. Be precise, concise, and decisive in reasoning. No informal self-talk, no "what if" loops, no mid-thought self-correction.
|
|
114
|
+
|
|
112
115
|
## Parallel Execution
|
|
113
116
|
|
|
114
117
|
You may be dispatched alongside sibling agents working on the same repository at the same time. The shared `AGENTS.md` baseline contains the universal rules — read those first. This section adds role-specific guidance.
|
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 via
|
|
2
|
+
description: Tyr — Handles the most complex implementation, debugging, and architectural work using MiniMax M3 via OpenRouter. Unmatched wisdom for the hardest problems.
|
|
3
3
|
mode: subagent
|
|
4
|
-
model: minimax
|
|
4
|
+
model: openrouter/minimax-m3
|
|
5
5
|
color: "#f59e0b"
|
|
6
6
|
permission:
|
|
7
7
|
read: allow
|
|
@@ -108,6 +108,9 @@ Be professional and concise. Do not write long essays for every action.
|
|
|
108
108
|
- One sentence of context beats three paragraphs of preamble.
|
|
109
109
|
- Match the user's register: if they write briefly, reply briefly. If they want depth, they will ask.
|
|
110
110
|
|
|
111
|
+
## Thinking style
|
|
112
|
+
Follow `config/rules/thinking.md` strictly. Be precise, concise, and decisive in reasoning. No informal self-talk, no "what if" loops, no mid-thought self-correction.
|
|
113
|
+
|
|
111
114
|
## Parallel Execution
|
|
112
115
|
|
|
113
116
|
You may be dispatched alongside sibling agents working on the same repository at the same time. The shared `AGENTS.md` baseline contains the universal rules — read those first. This section adds role-specific guidance.
|
package/config/agents/vidarr.md
CHANGED
|
@@ -112,6 +112,9 @@ Be professional and concise. Do not write long essays for every action.
|
|
|
112
112
|
- One sentence of context beats three paragraphs of preamble.
|
|
113
113
|
- Match the user's register: if they write briefly, reply briefly. If they want depth, they will ask.
|
|
114
114
|
|
|
115
|
+
## Thinking style
|
|
116
|
+
Follow `config/rules/thinking.md` strictly. Be precise, concise, and decisive in reasoning. No informal self-talk, no "what if" loops, no mid-thought self-correction.
|
|
117
|
+
|
|
115
118
|
## Parallel Execution
|
|
116
119
|
|
|
117
120
|
You may be dispatched alongside sibling agents working on the same repository at the same time. The shared `AGENTS.md` baseline contains the universal rules — read those first. This section adds role-specific guidance.
|
package/config/agents/vor.md
CHANGED
|
@@ -150,6 +150,9 @@ Be professional and concise. Do not write long essays for every action.
|
|
|
150
150
|
- One sentence of context beats three paragraphs of preamble.
|
|
151
151
|
- Match the user's register: if they write briefly, reply briefly. If they want depth, they will ask.
|
|
152
152
|
|
|
153
|
+
## Thinking style
|
|
154
|
+
Follow `config/rules/thinking.md` strictly. Be precise, concise, and decisive in reasoning. No informal self-talk, no "what if" loops, no mid-thought self-correction.
|
|
155
|
+
|
|
153
156
|
---
|
|
154
157
|
|
|
155
158
|
## Always-On Behavior Baseline
|
package/config/opencode.json
CHANGED
|
@@ -334,5 +334,35 @@
|
|
|
334
334
|
"template": "commands/bizar.md",
|
|
335
335
|
"arguments": "$ARGUMENTS"
|
|
336
336
|
}
|
|
337
|
+
},
|
|
338
|
+
"provider": {
|
|
339
|
+
"minimax": {
|
|
340
|
+
"models": {
|
|
341
|
+
"MiniMax-M3": {
|
|
342
|
+
"interleaved": { "field": "reasoning_details" },
|
|
343
|
+
"reasoning": true
|
|
344
|
+
},
|
|
345
|
+
"MiniMax-M2.7": {
|
|
346
|
+
"interleaved": { "field": "reasoning_details" },
|
|
347
|
+
"reasoning": true
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
},
|
|
351
|
+
"openrouter": {
|
|
352
|
+
"models": {
|
|
353
|
+
"minimax/minimax-m3": {
|
|
354
|
+
"interleaved": { "field": "reasoning_details" },
|
|
355
|
+
"reasoning": true
|
|
356
|
+
},
|
|
357
|
+
"minimax/minimax-m2.7": {
|
|
358
|
+
"interleaved": { "field": "reasoning_details" },
|
|
359
|
+
"reasoning": true
|
|
360
|
+
},
|
|
361
|
+
"minimax/owl-alpha": {
|
|
362
|
+
"interleaved": { "field": "reasoning_details" },
|
|
363
|
+
"reasoning": true
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
}
|
|
337
367
|
}
|
|
338
368
|
}
|
|
@@ -1,10 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://opencode.ai/config.json",
|
|
3
|
-
"model": "minimax
|
|
4
|
-
"small_model": "minimax
|
|
3
|
+
"model": "openrouter/minimax-m3",
|
|
4
|
+
"small_model": "openrouter/minimax-m2.7",
|
|
5
5
|
"default_agent": "odin",
|
|
6
6
|
"permission": "allow",
|
|
7
7
|
"snapshot": false,
|
|
8
|
+
"provider": {
|
|
9
|
+
"openrouter": {
|
|
10
|
+
"npm": "@openrouter/ai-sdk-provider",
|
|
11
|
+
"name": "OpenRouter",
|
|
12
|
+
"options": {
|
|
13
|
+
"apiKey": "{env:OPENROUTER_API_KEY}"
|
|
14
|
+
},
|
|
15
|
+
"models": {
|
|
16
|
+
"minimax-m2.7": {},
|
|
17
|
+
"minimax-m3": {}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
},
|
|
8
21
|
"mcp": {
|
|
9
22
|
"supabase": {
|
|
10
23
|
"type": "remote",
|
|
@@ -53,7 +66,7 @@
|
|
|
53
66
|
"odin": {
|
|
54
67
|
"description": "Odin — Pure router that delegates all work to subagents.",
|
|
55
68
|
"mode": "primary",
|
|
56
|
-
"model": "minimax
|
|
69
|
+
"model": "openrouter/minimax-m3",
|
|
57
70
|
"color": "#6366f1",
|
|
58
71
|
"permission": {
|
|
59
72
|
"task": "allow",
|
|
@@ -67,7 +80,7 @@
|
|
|
67
80
|
"vor": {
|
|
68
81
|
"description": "Vör — The Questioning One.",
|
|
69
82
|
"mode": "subagent",
|
|
70
|
-
"model": "minimax
|
|
83
|
+
"model": "openrouter/minimax-m2.7",
|
|
71
84
|
"color": "#8b5cf6",
|
|
72
85
|
"permission": {
|
|
73
86
|
"read": "allow",
|
|
@@ -80,7 +93,7 @@
|
|
|
80
93
|
"frigg": {
|
|
81
94
|
"description": "Frigg — All-knowing Q&A agent.",
|
|
82
95
|
"mode": "primary",
|
|
83
|
-
"model": "minimax
|
|
96
|
+
"model": "openrouter/minimax-m2.7",
|
|
84
97
|
"color": "#06b6d4",
|
|
85
98
|
"permission": {
|
|
86
99
|
"read": "allow",
|
|
@@ -98,7 +111,7 @@
|
|
|
98
111
|
"quick": {
|
|
99
112
|
"description": "Quick — Fast single-shot tasks.",
|
|
100
113
|
"mode": "primary",
|
|
101
|
-
"model": "minimax
|
|
114
|
+
"model": "openrouter/minimax-m2.7",
|
|
102
115
|
"color": "#22d3ee",
|
|
103
116
|
"permission": {
|
|
104
117
|
"read": "allow",
|
|
@@ -117,7 +130,7 @@
|
|
|
117
130
|
"mimir": {
|
|
118
131
|
"description": "Mimir — Research and codebase exploration agent.",
|
|
119
132
|
"mode": "subagent",
|
|
120
|
-
"model": "minimax
|
|
133
|
+
"model": "openrouter/minimax-m2.7",
|
|
121
134
|
"color": "#0ea5e9",
|
|
122
135
|
"permission": {
|
|
123
136
|
"read": "allow",
|
|
@@ -135,7 +148,7 @@
|
|
|
135
148
|
"heimdall": {
|
|
136
149
|
"description": "Heimdall — Simple, routine, deterministic tasks.",
|
|
137
150
|
"mode": "subagent",
|
|
138
|
-
"model": "minimax
|
|
151
|
+
"model": "openrouter/minimax-m2.7",
|
|
139
152
|
"color": "#10b981",
|
|
140
153
|
"permission": {
|
|
141
154
|
"read": "allow",
|
|
@@ -152,7 +165,7 @@
|
|
|
152
165
|
"hermod": {
|
|
153
166
|
"description": "Hermod — Git and GitHub operations specialist.",
|
|
154
167
|
"mode": "subagent",
|
|
155
|
-
"model": "minimax
|
|
168
|
+
"model": "openrouter/minimax-m2.7",
|
|
156
169
|
"color": "#06b6d4",
|
|
157
170
|
"permission": {
|
|
158
171
|
"read": "allow",
|
|
@@ -168,7 +181,7 @@
|
|
|
168
181
|
"thor": {
|
|
169
182
|
"description": "Thor — Medium-complexity tasks, strong and reliable.",
|
|
170
183
|
"mode": "subagent",
|
|
171
|
-
"model": "minimax
|
|
184
|
+
"model": "openrouter/minimax-m2.7",
|
|
172
185
|
"color": "#a855f7",
|
|
173
186
|
"permission": {
|
|
174
187
|
"read": "allow",
|
|
@@ -185,7 +198,7 @@
|
|
|
185
198
|
"baldr": {
|
|
186
199
|
"description": "Baldr — UI/UX design system specialist.",
|
|
187
200
|
"mode": "subagent",
|
|
188
|
-
"model": "minimax
|
|
201
|
+
"model": "openrouter/minimax-m2.7",
|
|
189
202
|
"color": "#ec4899",
|
|
190
203
|
"permission": {
|
|
191
204
|
"read": "allow",
|
|
@@ -202,7 +215,7 @@
|
|
|
202
215
|
"tyr": {
|
|
203
216
|
"description": "Tyr — Complex implementation, debugging, architecture.",
|
|
204
217
|
"mode": "subagent",
|
|
205
|
-
"model": "minimax
|
|
218
|
+
"model": "openrouter/minimax-m3",
|
|
206
219
|
"color": "#f59e0b",
|
|
207
220
|
"permission": {
|
|
208
221
|
"read": "allow",
|
|
@@ -236,7 +249,7 @@
|
|
|
236
249
|
"forseti": {
|
|
237
250
|
"description": "Forseti — Audits and corrects plans before execution.",
|
|
238
251
|
"mode": "subagent",
|
|
239
|
-
"model": "minimax
|
|
252
|
+
"model": "openrouter/minimax-m3",
|
|
240
253
|
"color": "#ef4444",
|
|
241
254
|
"permission": {
|
|
242
255
|
"read": "allow",
|
|
@@ -306,5 +319,35 @@
|
|
|
306
319
|
"agent": "odin",
|
|
307
320
|
"template": "commands-bizar/bizar.md\n\n$ARGUMENTS"
|
|
308
321
|
}
|
|
322
|
+
},
|
|
323
|
+
"provider": {
|
|
324
|
+
"minimax": {
|
|
325
|
+
"models": {
|
|
326
|
+
"MiniMax-M3": {
|
|
327
|
+
"interleaved": { "field": "reasoning_details" },
|
|
328
|
+
"reasoning": true
|
|
329
|
+
},
|
|
330
|
+
"MiniMax-M2.7": {
|
|
331
|
+
"interleaved": { "field": "reasoning_details" },
|
|
332
|
+
"reasoning": true
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
},
|
|
336
|
+
"openrouter": {
|
|
337
|
+
"models": {
|
|
338
|
+
"minimax/minimax-m3": {
|
|
339
|
+
"interleaved": { "field": "reasoning_details" },
|
|
340
|
+
"reasoning": true
|
|
341
|
+
},
|
|
342
|
+
"minimax/minimax-m2.7": {
|
|
343
|
+
"interleaved": { "field": "reasoning_details" },
|
|
344
|
+
"reasoning": true
|
|
345
|
+
},
|
|
346
|
+
"minimax/owl-alpha": {
|
|
347
|
+
"interleaved": { "field": "reasoning_details" },
|
|
348
|
+
"reasoning": true
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
309
352
|
}
|
|
310
353
|
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Concise Thinking Rule
|
|
2
|
+
|
|
3
|
+
## The Problem
|
|
4
|
+
|
|
5
|
+
Models with `reasoning: true` + `variant: "high"` produce unbounded self-talk: "oh but what if this... actually let me reconsider... wait..." This is verbose, indecisive, and costly.
|
|
6
|
+
|
|
7
|
+
## The Rule
|
|
8
|
+
|
|
9
|
+
**Think in 2–4 sentences. One-shot. No loops.**
|
|
10
|
+
|
|
11
|
+
### Structure
|
|
12
|
+
|
|
13
|
+
Every reasoning output must follow this shape:
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
[Premise — what I know] → [Decision — what I'm doing] → [Next step]
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
No hedging. No "but what if". No mid-thought self-correction.
|
|
20
|
+
|
|
21
|
+
### Hard Bans
|
|
22
|
+
|
|
23
|
+
Never use these phrases in thinking output:
|
|
24
|
+
- "oh but what if..."
|
|
25
|
+
- "actually..."
|
|
26
|
+
- "let me think..."
|
|
27
|
+
- "wait..."
|
|
28
|
+
- "hmm..."
|
|
29
|
+
- "I wonder..."
|
|
30
|
+
- "on second thought..."
|
|
31
|
+
- "alternatively..."
|
|
32
|
+
|
|
33
|
+
### One-Shot Pattern
|
|
34
|
+
|
|
35
|
+
Think once. Decide. Act. Move on.
|
|
36
|
+
|
|
37
|
+
**Forbidden patterns:**
|
|
38
|
+
- "Option A... no wait Option B... actually let's try C..."
|
|
39
|
+
- "I considered X, but then I realized Y, so maybe Z..."
|
|
40
|
+
- "Let me reconsider..." followed by another reconsideration
|
|
41
|
+
|
|
42
|
+
### What Thinking Should Look Like
|
|
43
|
+
|
|
44
|
+
**BAD:**
|
|
45
|
+
> "The file is missing a semicolon. Oh but what if it's actually a parsing issue? Let me think... Actually, looking more carefully, the real problem is the import statement is wrong. Wait, I should also check if the export is correct. Actually let me try fixing the import first..."
|
|
46
|
+
|
|
47
|
+
**GOOD:**
|
|
48
|
+
> "The import path is wrong — `../utils` should be `./utils`. Fixing the path resolves the missing export error. Next: re-run the build."
|
|
49
|
+
|
|
50
|
+
### Length Cap
|
|
51
|
+
|
|
52
|
+
Maximum **80 words** of thinking output before the first tool call or response. If you cannot decide in 80 words, state the decision you reached and proceed.
|
|
53
|
+
|
|
54
|
+
### Enforcement
|
|
55
|
+
|
|
56
|
+
This rule is injected into every model that supports `reasoning: true`. Non-compliance produces verbose, unhelpful output and is a correctness failure.
|
|
@@ -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** ᛟ | OpenRouter 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** ᚱ | OpenRouter minimax-m2.7 | Mid | $0.30/M · $1.20/M out | Git ops: commit, push, PR, merge, rebase, branches, `gh` CLI |
|
|
33
|
+
| **Thor** ᚦ | OpenRouter minimax-m2.7 | Mid | $0.30/M · $1.20/M out | Moderate implementation, tests, debugging, refactoring |
|
|
34
|
+
| **Tyr** ᛏ | OpenRouter 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** ᚨ | OpenRouter 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,19 +98,19 @@ 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
|
-
- `minimax
|
|
102
|
-
- `minimax
|
|
101
|
+
- `openrouter/minimax-m2.7` — M2.7
|
|
102
|
+
- `openrouter/minimax-m3` — M3
|
|
103
103
|
- `openai/gpt-5.5` — GPT-5.5
|
|
104
104
|
|
|
105
|
-
###
|
|
105
|
+
### OpenRouter 404 Errors
|
|
106
106
|
|
|
107
|
-
**Symptoms:** 404 errors when calling
|
|
107
|
+
**Symptoms:** 404 errors when calling the OpenRouter-hosted MiniMax models.
|
|
108
108
|
|
|
109
|
-
**Cause:** A `baseURL
|
|
109
|
+
**Cause:** A `baseURL` was set on the `openrouter` provider in `opencode.json`, which conflicts with the `@openrouter/ai-sdk-provider`'s built-in URL construction.
|
|
110
110
|
|
|
111
|
-
**Fix:** Remove any `baseURL` from the
|
|
111
|
+
**Fix:** Remove any `baseURL` from the openrouter provider section. OpenRouter's URL is built into the SDK. Example fix:
|
|
112
112
|
```diff
|
|
113
|
-
- "baseURL": "https://
|
|
113
|
+
- "baseURL": "https://openrouter.ai/api/v1"
|
|
114
114
|
```
|
|
115
115
|
The provider uses the correct default URL internally.
|
|
116
116
|
|
|
@@ -132,7 +132,7 @@ The provider uses the correct default URL internally.
|
|
|
132
132
|
|
|
133
133
|
| File | Purpose |
|
|
134
134
|
|---|---|
|
|
135
|
-
| `~/.config/opencode/opencode.json` | Main config (no
|
|
135
|
+
| `~/.config/opencode/opencode.json` | Main config (no openrouter baseURL) |
|
|
136
136
|
| `~/.config/opencode/AGENTS.md` | Routing table and conventions |
|
|
137
137
|
| `~/.config/opencode/agents/odin.md` | Primary router agent |
|
|
138
138
|
| `~/.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.9.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": {
|
|
@@ -42,5 +42,13 @@
|
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"typescript": "^5.0.0"
|
|
45
|
-
}
|
|
45
|
+
},
|
|
46
|
+
"repository": {
|
|
47
|
+
"type": "git",
|
|
48
|
+
"url": "git@github.com:DrB0rk/BizarHarness.git"
|
|
49
|
+
},
|
|
50
|
+
"bugs": {
|
|
51
|
+
"url": "https://github.com/DrB0rk/BizarHarness/issues"
|
|
52
|
+
},
|
|
53
|
+
"homepage": "https://github.com/DrB0rk/BizarHarness#readme"
|
|
46
54
|
}
|