@polderlabs/bizar 3.9.0 → 3.10.0
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 +47 -1
- package/cli/bin.mjs +175 -68
- package/cli/copy.mjs +13 -6
- package/cli/graph.mjs +54 -12
- package/cli/init.mjs +16 -6
- package/cli/install.mjs +58 -15
- package/cli/update.mjs +41 -21
- package/config/AGENTS.md +6 -1
- package/config/agents/baldr.md +3 -0
- package/config/agents/forseti.md +3 -0
- package/config/agents/frigg.md +4 -0
- package/config/agents/heimdall.md +3 -0
- package/config/agents/hermod.md +3 -0
- package/config/agents/mimir.md +3 -0
- package/config/agents/quick.md +4 -0
- package/config/agents/semble-search.md +3 -0
- package/config/agents/thor.md +3 -0
- package/config/agents/tyr.md +3 -0
- package/config/agents/vidarr.md +3 -0
- package/config/agents/vor.md +3 -0
- package/config/commands/bizar.md +2 -2
- package/config/opencode.json +368 -0
- package/config/opencode.json.template +30 -0
- package/config/rules/thinking.md +56 -0
- package/package.json +10 -2
package/cli/install.mjs
CHANGED
|
@@ -395,8 +395,12 @@ async function promptGraphifyInstall() {
|
|
|
395
395
|
console.log();
|
|
396
396
|
sectionHeading('Knowledge Graph (graphify)');
|
|
397
397
|
|
|
398
|
-
// 1. Detect graphify already installed
|
|
399
|
-
|
|
398
|
+
// 1. Detect graphify already installed. Windows users typically have
|
|
399
|
+
// `py` on PATH (the Python launcher) rather than `python3`, so probe
|
|
400
|
+
// the right binary per platform. A failed probe just means we will
|
|
401
|
+
// prompt to install below.
|
|
402
|
+
const pythonBin = process.platform === 'win32' ? 'py' : 'python3';
|
|
403
|
+
const detect = spawnSync(pythonBin, ['-c', 'import graphify; print(graphify.__version__)'], {
|
|
400
404
|
cwd: process.cwd(),
|
|
401
405
|
encoding: 'utf8',
|
|
402
406
|
timeout: 5000,
|
|
@@ -408,6 +412,26 @@ async function promptGraphifyInstall() {
|
|
|
408
412
|
return;
|
|
409
413
|
}
|
|
410
414
|
|
|
415
|
+
// Install graphify via pip as a fallback when uv is unavailable or the
|
|
416
|
+
// user declined the uv-based install. On Windows, `pip` is often not
|
|
417
|
+
// on PATH, so we invoke it as a `py -m pip` module instead. Returns
|
|
418
|
+
// the spawn result so the caller can log success/failure.
|
|
419
|
+
const installGraphifyWithPip = () => {
|
|
420
|
+
if (process.platform === 'win32') {
|
|
421
|
+
return spawnSync('py', ['-m', 'pip', 'install', 'graphifyy'], {
|
|
422
|
+
stdio: 'inherit',
|
|
423
|
+
timeout: 120000,
|
|
424
|
+
});
|
|
425
|
+
}
|
|
426
|
+
return spawnSync('pip', ['install', 'graphifyy'], {
|
|
427
|
+
stdio: 'inherit',
|
|
428
|
+
timeout: 120000,
|
|
429
|
+
});
|
|
430
|
+
};
|
|
431
|
+
const pipManualHint = process.platform === 'win32'
|
|
432
|
+
? 'py -m pip install graphifyy'
|
|
433
|
+
: 'pip install graphifyy';
|
|
434
|
+
|
|
411
435
|
// 2. Non-interactive: print hint and exit
|
|
412
436
|
if (!stdin.isTTY || !stdout.isTTY) {
|
|
413
437
|
console.log(chalk.dim(' graphify not detected. Install later with:'));
|
|
@@ -469,7 +493,12 @@ async function promptGraphifyInstall() {
|
|
|
469
493
|
|
|
470
494
|
console.log(' Installing uv...');
|
|
471
495
|
try {
|
|
472
|
-
|
|
496
|
+
if (process.platform === 'win32') {
|
|
497
|
+
// Windows: use the official PowerShell installer
|
|
498
|
+
execSync('powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"', { stdio: 'inherit', timeout: 60000 });
|
|
499
|
+
} else {
|
|
500
|
+
execSync('curl -LsSf https://astral.sh/uv/install.sh | sh', { stdio: 'inherit', timeout: 60000 });
|
|
501
|
+
}
|
|
473
502
|
} catch (err) {
|
|
474
503
|
console.log(chalk.red(` uv install failed: ${err.message}`));
|
|
475
504
|
console.log(chalk.dim(' Install manually from https://docs.astral.sh/uv'));
|
|
@@ -480,12 +509,12 @@ async function promptGraphifyInstall() {
|
|
|
480
509
|
rl2.close();
|
|
481
510
|
if (pipAnswer === '' || pipAnswer.startsWith('y')) {
|
|
482
511
|
console.log(' Installing graphify via pip...');
|
|
483
|
-
const result =
|
|
512
|
+
const result = installGraphifyWithPip();
|
|
484
513
|
if (result.status === 0) {
|
|
485
514
|
console.log(chalk.green(' graphify installed. Run `bizar graph build` to populate .bizar/graph/.'));
|
|
486
515
|
} else {
|
|
487
516
|
console.log(chalk.red(` pip install failed (exit ${result.status}).`));
|
|
488
|
-
console.log(chalk.dim(
|
|
517
|
+
console.log(chalk.dim(` Install manually: ${pipManualHint}`));
|
|
489
518
|
}
|
|
490
519
|
} else {
|
|
491
520
|
console.log(chalk.dim(' Skipped.'));
|
|
@@ -513,12 +542,12 @@ async function promptGraphifyInstall() {
|
|
|
513
542
|
rl2.close();
|
|
514
543
|
if (pipAnswer === '' || pipAnswer.startsWith('y')) {
|
|
515
544
|
console.log(' Installing graphify via pip...');
|
|
516
|
-
const result =
|
|
545
|
+
const result = installGraphifyWithPip();
|
|
517
546
|
if (result.status === 0) {
|
|
518
547
|
console.log(chalk.green(' graphify installed. Run `bizar graph build` to populate .bizar/graph/.'));
|
|
519
548
|
} else {
|
|
520
549
|
console.log(chalk.red(` pip install failed (exit ${result.status}).`));
|
|
521
|
-
console.log(chalk.dim(
|
|
550
|
+
console.log(chalk.dim(` Install manually: ${pipManualHint}`));
|
|
522
551
|
}
|
|
523
552
|
} else {
|
|
524
553
|
console.log(chalk.dim(' Skipped.'));
|
|
@@ -578,12 +607,18 @@ export async function runPostInstall() {
|
|
|
578
607
|
if (!rtkPresent) {
|
|
579
608
|
console.log('BizarHarness: installing RTK (token optimizer)...');
|
|
580
609
|
try {
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
610
|
+
if (process.platform === 'win32') {
|
|
611
|
+
// RTK ships a bash-only installer; on Windows the user installs it
|
|
612
|
+
// manually (e.g. `cargo install --git https://github.com/rtk-ai/rtk`).
|
|
613
|
+
console.log('BizarHarness: RTK bash installer does not run on Windows. Install manually from https://github.com/rtk-ai/rtk');
|
|
614
|
+
} else {
|
|
615
|
+
execSync(
|
|
616
|
+
'curl -fsSL https://raw.githubusercontent.com/rtk-ai/rtk/refs/heads/master/install.sh | sh',
|
|
617
|
+
{ stdio: 'pipe', timeout: 60000 },
|
|
618
|
+
);
|
|
619
|
+
execSync('rtk init -g --opencode', { stdio: 'pipe' });
|
|
620
|
+
console.log('BizarHarness: RTK installed and configured.');
|
|
621
|
+
}
|
|
587
622
|
} catch {
|
|
588
623
|
console.log('BizarHarness: RTK install failed. Install manually from https://github.com/rtk-ai/rtk');
|
|
589
624
|
}
|
|
@@ -601,13 +636,21 @@ export async function runPostInstall() {
|
|
|
601
636
|
if (!semblePresent) {
|
|
602
637
|
console.log('BizarHarness: installing Semble (code search)...');
|
|
603
638
|
try {
|
|
604
|
-
|
|
605
|
-
|
|
639
|
+
const hasUv = await detectUv();
|
|
640
|
+
if (!hasUv) {
|
|
641
|
+
if (process.platform === 'win32') {
|
|
642
|
+
// Windows: use the official PowerShell installer
|
|
643
|
+
execSync(
|
|
644
|
+
'powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"',
|
|
645
|
+
{ stdio: 'pipe', timeout: 60000 },
|
|
646
|
+
);
|
|
647
|
+
} else {
|
|
606
648
|
execSync(
|
|
607
649
|
'curl -LsSf https://astral.sh/uv/install.sh | sh',
|
|
608
650
|
{ stdio: 'pipe', timeout: 60000 },
|
|
609
651
|
);
|
|
610
652
|
}
|
|
653
|
+
}
|
|
611
654
|
execSync('uv tool install "semble[mcp]"', { stdio: 'pipe', timeout: 60000 });
|
|
612
655
|
console.log('BizarHarness: Semble installed.');
|
|
613
656
|
} catch {
|
package/cli/update.mjs
CHANGED
|
@@ -121,23 +121,30 @@ export function readLivePid(pidFile) {
|
|
|
121
121
|
* We treat any successful signal delivery as success; if SIGKILL is
|
|
122
122
|
* sent, the original process is certainly dead (uncatchable).
|
|
123
123
|
*
|
|
124
|
+
* Cross-platform note: Node.js 14+ maps `process.kill(pid)` without an
|
|
125
|
+
* explicit signal to the platform-appropriate default (`SIGTERM` on
|
|
126
|
+
* POSIX, `TerminateProcess` on Windows). We drop the signal argument so
|
|
127
|
+
* the same code works on both platforms. For the forced-kill phase on
|
|
128
|
+
* Windows we use `taskkill /F /PID <pid>` because `SIGKILL` is not
|
|
129
|
+
* delivered the same way there.
|
|
130
|
+
*
|
|
124
131
|
* Exported for testability.
|
|
125
132
|
*/
|
|
126
|
-
export function killAndWait(pid, { timeoutMs = 5000, label = 'process' } = {}) {
|
|
133
|
+
export async function killAndWait(pid, { timeoutMs = 5000, label = 'process' } = {}) {
|
|
127
134
|
if (!pid) return true;
|
|
128
135
|
|
|
129
|
-
// Phase 1: graceful SIGTERM
|
|
136
|
+
// Phase 1: graceful SIGTERM (or platform default on Windows)
|
|
130
137
|
let sigtermOk = false;
|
|
131
138
|
try {
|
|
132
|
-
process.kill(pid
|
|
139
|
+
process.kill(pid);
|
|
133
140
|
sigtermOk = true;
|
|
134
141
|
} catch (err) {
|
|
135
142
|
if (err.code === 'ESRCH') return true; // already dead
|
|
136
|
-
console.log(chalk.yellow(` ! could not
|
|
143
|
+
console.log(chalk.yellow(` ! could not signal ${label} (pid ${pid}): ${err.message}`));
|
|
137
144
|
return false;
|
|
138
145
|
}
|
|
139
146
|
|
|
140
|
-
// Best-effort poll for graceful exit. Note: a
|
|
147
|
+
// Best-effort poll for graceful exit. Note: a signal-handling process
|
|
141
148
|
// (Express dashboard, Node sleeper) usually exits within ~100ms. We
|
|
142
149
|
// poll for up to `timeoutMs`; if anything responds to kill -0 it may be
|
|
143
150
|
// a recycled PID, so we don't treat that as "still our process".
|
|
@@ -149,7 +156,7 @@ export function killAndWait(pid, { timeoutMs = 5000, label = 'process' } = {}) {
|
|
|
149
156
|
} catch (err) {
|
|
150
157
|
if (err.code === 'ESRCH') { sawExit = true; break; }
|
|
151
158
|
}
|
|
152
|
-
|
|
159
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
153
160
|
}
|
|
154
161
|
|
|
155
162
|
if (sawExit) {
|
|
@@ -157,20 +164,26 @@ export function killAndWait(pid, { timeoutMs = 5000, label = 'process' } = {}) {
|
|
|
157
164
|
return true;
|
|
158
165
|
}
|
|
159
166
|
|
|
160
|
-
// Phase 2: escalate to
|
|
161
|
-
// recycled or process truly stuck), SIGKILL is uncatchable and
|
|
162
|
-
// original process — if it was still our PID — is now dead.
|
|
167
|
+
// Phase 2: escalate to forced kill. Even if `kill -0` still succeeds
|
|
168
|
+
// (PID recycled or process truly stuck), SIGKILL is uncatchable and
|
|
169
|
+
// the original process — if it was still our PID — is now dead.
|
|
170
|
+
// On Windows, use `taskkill /F` because POSIX SIGKILL semantics don't
|
|
171
|
+
// exist there.
|
|
163
172
|
try {
|
|
164
|
-
process.
|
|
173
|
+
if (process.platform === 'win32') {
|
|
174
|
+
spawnSync('taskkill', ['/F', '/T', '/PID', String(pid)], { stdio: 'ignore' });
|
|
175
|
+
} else {
|
|
176
|
+
process.kill(pid, 'SIGKILL');
|
|
177
|
+
}
|
|
165
178
|
if (sigtermOk) {
|
|
166
|
-
console.log(chalk.yellow(` ! ${label} (pid ${pid}) did not exit gracefully; sent
|
|
179
|
+
console.log(chalk.yellow(` ! ${label} (pid ${pid}) did not exit gracefully; sent forced kill`));
|
|
167
180
|
}
|
|
168
181
|
// Brief settle for the kernel.
|
|
169
|
-
|
|
182
|
+
await new Promise((resolve) => setTimeout(resolve, 200));
|
|
170
183
|
return true;
|
|
171
184
|
} catch (err) {
|
|
172
185
|
if (err.code === 'ESRCH') return true;
|
|
173
|
-
console.log(chalk.red(` ✗ could not
|
|
186
|
+
console.log(chalk.red(` ✗ could not force-kill ${label} (pid ${pid}): ${err.message}`));
|
|
174
187
|
return false;
|
|
175
188
|
}
|
|
176
189
|
}
|
|
@@ -272,9 +285,16 @@ function rerunInstallScript() {
|
|
|
272
285
|
return { ok: false, message: 'setup rerun failed' };
|
|
273
286
|
}
|
|
274
287
|
const installSh = join(pkgRoot, 'install.sh');
|
|
275
|
-
if (
|
|
288
|
+
if (!existsSync(installSh)) {
|
|
276
289
|
return { ok: false, message: 'could not locate a compatible setup script to re-run' };
|
|
277
290
|
}
|
|
291
|
+
if (process.platform === 'win32') {
|
|
292
|
+
// On Windows, the bash install path doesn't apply. The plugin is
|
|
293
|
+
// already installed globally via the npm install
|
|
294
|
+
// (see cli/install.mjs:installPluginFromGlobal).
|
|
295
|
+
console.log(chalk.dim(' Skipping install.sh (Windows uses npm-based plugin install)'));
|
|
296
|
+
return { ok: true, message: 'install.sh skipped on Windows' };
|
|
297
|
+
}
|
|
278
298
|
console.log(chalk.dim(`\n Re-running install script at ${installSh}...`));
|
|
279
299
|
const r = spawnSync('bash', [installSh], { stdio: 'inherit' });
|
|
280
300
|
if (r.status !== 0) {
|
|
@@ -349,17 +369,17 @@ async function confirmKill(instances, { assumeYes } = {}) {
|
|
|
349
369
|
}
|
|
350
370
|
}
|
|
351
371
|
|
|
352
|
-
function killInstances(instances) {
|
|
372
|
+
async function killInstances(instances) {
|
|
353
373
|
const out = [];
|
|
354
374
|
if (instances.service) {
|
|
355
|
-
const ok = killAndWait(instances.service.pid, { label: 'bizar service' });
|
|
375
|
+
const ok = await killAndWait(instances.service.pid, { label: 'bizar service' });
|
|
356
376
|
out.push({ name: 'service', ok });
|
|
357
377
|
if (ok) {
|
|
358
378
|
try { rmSync(SERVICE_PID_FILE, { force: true }); } catch { /* ignore */ }
|
|
359
379
|
}
|
|
360
380
|
}
|
|
361
381
|
if (instances.dashboard) {
|
|
362
|
-
const ok = killAndWait(instances.dashboard.pid, { label: 'bizar-dash' });
|
|
382
|
+
const ok = await killAndWait(instances.dashboard.pid, { label: 'bizar-dash' });
|
|
363
383
|
out.push({ name: 'dashboard', ok });
|
|
364
384
|
if (ok) {
|
|
365
385
|
try { rmSync(DASHBOARD_PID_FILE, { force: true }); } catch { /* ignore */ }
|
|
@@ -428,7 +448,7 @@ async function promptForUpdates(forceAll) {
|
|
|
428
448
|
choices: [
|
|
429
449
|
{ name: 'opencode (the opencode CLI itself)', value: 'opencode', checked: true },
|
|
430
450
|
{ name: `bizar (${PKG_MAIN})`, value: 'bizar', checked: true },
|
|
431
|
-
{ name: `bizar
|
|
451
|
+
{ name: `bizar dash (${PKG_DASH}) — web dashboard`, value: 'dash', checked: true },
|
|
432
452
|
{ name: `plugin (${PKG_PLUGIN})`, value: 'plugin', checked: true },
|
|
433
453
|
],
|
|
434
454
|
},
|
|
@@ -460,14 +480,14 @@ export async function runUpdate(subargs = []) {
|
|
|
460
480
|
process.exit(1);
|
|
461
481
|
}
|
|
462
482
|
console.log(chalk.cyan('\n Stopping running instances...'));
|
|
463
|
-
const kills = killInstances(instances);
|
|
483
|
+
const kills = await killInstances(instances);
|
|
464
484
|
for (const k of kills) {
|
|
465
485
|
const marker = k.ok ? chalk.green('✓') : chalk.red('✗');
|
|
466
486
|
console.log(` ${marker} ${k.name} stopped`);
|
|
467
487
|
}
|
|
468
488
|
// Give the kernel a moment to release any open file handles on the
|
|
469
489
|
// npm-global directory before npm tries to replace files.
|
|
470
|
-
|
|
490
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
471
491
|
} else {
|
|
472
492
|
console.log(chalk.dim(' No running Bizar instances detected.'));
|
|
473
493
|
}
|
|
@@ -565,7 +585,7 @@ export async function runUpdate(subargs = []) {
|
|
|
565
585
|
console.log(chalk.green(` ✓ ${res.message}`));
|
|
566
586
|
} else {
|
|
567
587
|
console.log(chalk.yellow(` ⚠ ${res.message}`));
|
|
568
|
-
console.log(chalk.dim(' Start it manually with `bizar
|
|
588
|
+
console.log(chalk.dim(' Start it manually with `bizar dash start --bg`.'));
|
|
569
589
|
}
|
|
570
590
|
}
|
|
571
591
|
|
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,6 +111,10 @@ 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
|
|
@@ -329,7 +334,7 @@ This section is the single source of truth for every Bizar agent's behavior. It
|
|
|
329
334
|
> | `bash_tool` | `bash` |
|
|
330
335
|
> | `web_search` | `websearch` (opencode built-in) |
|
|
331
336
|
> | `web_fetch` | `webfetch` (opencode built-in) |
|
|
332
|
-
> | `present_files` | not applicable — Bizar delivers files via the dashboard (
|
|
337
|
+
> | `present_files` | not applicable — Bizar delivers files via the dashboard (`@polderlabs/bizar-dash/src/server/routes/artifacts.mjs`) or by writing to the workspace |
|
|
333
338
|
> | `image_search` / `places_*` / `weather_fetch` / `recipe_display_v0` / `fetch_sports_data` / `message_compose_v1` / `recommend_claude_apps` | not available in Bizar — do not assume these exist |
|
|
334
339
|
> | `search_mcp_registry` / `suggest_connectors` | use the `skills` CLI (`skills add <owner/repo> -s <name>`) to discover and install skills instead |
|
|
335
340
|
> | `ask_user_input_v0` | Bizar has a `question` tool — same shape, single high-value question |
|
package/config/agents/baldr.md
CHANGED
|
@@ -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
|
@@ -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
|
@@ -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/quick.md
CHANGED
|
@@ -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
|
@@ -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
|
@@ -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/commands/bizar.md
CHANGED
|
@@ -13,6 +13,6 @@ If the user invoked `/bizar` with arguments, treat them as a request and route a
|
|
|
13
13
|
- "dashboard" or "open dashboard" → `/bizar` (no args, will launch the dashboard)
|
|
14
14
|
- Otherwise: ask one clarifying question
|
|
15
15
|
|
|
16
|
-
If the user invoked `/bizar` with no arguments, the dashboard is launching in the background. Visit `http://localhost:<port>/` to access it. The plugin's `chat.message` hook spawns `bizar
|
|
16
|
+
If the user invoked `/bizar` with no arguments, the dashboard is launching in the background. Visit `http://localhost:<port>/` to access it. The plugin's `chat.message` hook spawns `bizar dash start` as a detached child process and surfaces the live URL in its response.
|
|
17
17
|
|
|
18
|
-
Common ports: 4321 is preferred; if it's taken, the launcher walks upward and picks the next free port. The PID and port are recorded under `~/.config/bizar/dashboard.{pid,port}` so `bizar
|
|
18
|
+
Common ports: 4321 is preferred; if it's taken, the launcher walks upward and picks the next free port. The PID and port are recorded under `~/.config/bizar/dashboard.{pid,port}` so `bizar dash stop` and `bizar dash status` can find the running instance.
|