@polderlabs/bizar 3.17.0 → 3.20.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/cli/{plan-templates.mjs → artifact-templates.mjs} +26 -26
- package/cli/{plan.mjs → artifact.mjs} +134 -134
- package/cli/{plan.test.mjs → artifact.test.mjs} +108 -108
- package/cli/banner.mjs +1 -1
- package/cli/bin.mjs +5 -5
- package/cli/install.mjs +1 -1
- package/cli/prompts.mjs +2 -2
- package/config/AGENTS.md +9 -51
- package/config/agents/_shared/AGENT_BASELINE.md +618 -0
- package/config/agents/baldr.md +29 -169
- package/config/agents/browser-harness.md +58 -0
- package/config/agents/forseti.md +31 -120
- package/config/agents/frigg.md +26 -102
- package/config/agents/heimdall.md +7 -172
- package/config/agents/hermod.md +34 -162
- package/config/agents/mimir.md +33 -140
- package/config/agents/odin.md +128 -232
- package/config/agents/quick.md +17 -77
- package/config/agents/semble-search.md +35 -40
- package/config/agents/thor.md +28 -113
- package/config/agents/tyr.md +35 -116
- package/config/agents/vidarr.md +32 -119
- package/config/agents/vor.md +37 -141
- package/config/opencode.json.template +2 -16
- package/config/rules/uncertainty.md +1 -1
- package/config/skills/bizar/SKILL.md +1 -1
- package/package.json +1 -1
package/cli/banner.mjs
CHANGED
|
@@ -25,7 +25,7 @@ export function showBanner() {
|
|
|
25
25
|
console.log(chalk.hex('#6366f1').bold(RUNE_HELM));
|
|
26
26
|
console.log(chalk.hex('#a855f7')(' Norse Pantheon Agent System for opencode'));
|
|
27
27
|
console.log();
|
|
28
|
-
console.log(chalk.dim(' 13 agents · 4 cost tiers ·
|
|
28
|
+
console.log(chalk.dim(' 13 agents · 4 cost tiers · Obsidian vault long-term memory · RTK · Semble · Skills CLI · Mods'));
|
|
29
29
|
console.log();
|
|
30
30
|
}
|
|
31
31
|
|
package/cli/bin.mjs
CHANGED
|
@@ -5,14 +5,14 @@
|
|
|
5
5
|
* v3.10.0 — `bizar` runtime CLI.
|
|
6
6
|
*
|
|
7
7
|
* Architecture:
|
|
8
|
-
* - `bizar` is the core runtime + installer + audit/init/export/update/
|
|
8
|
+
* - `bizar` is the core runtime + installer + audit/init/export/update/artifact
|
|
9
9
|
* + service + dash commands.
|
|
10
10
|
* - The dashboard lives in `@polderlabs/bizar-dash` as a library.
|
|
11
11
|
* Commands live under `bizar dash <subcommand>` (new canonical form).
|
|
12
12
|
* `bizar dashboard` is a deprecated alias (still works, prints warning).
|
|
13
13
|
*
|
|
14
14
|
* Subcommands:
|
|
15
|
-
* install, audit, init, export,
|
|
15
|
+
* install, audit, init, export, artifact, update, test-gate, service, dash
|
|
16
16
|
*/
|
|
17
17
|
import { existsSync } from 'node:fs';
|
|
18
18
|
import { readFileSync } from 'node:fs';
|
|
@@ -23,7 +23,7 @@ import { runInstaller } from './install.mjs';
|
|
|
23
23
|
import { runAudit } from './audit.mjs';
|
|
24
24
|
import { runInit } from './init.mjs';
|
|
25
25
|
import { runExport } from './export.mjs';
|
|
26
|
-
import
|
|
26
|
+
import runArtifact from './artifact.mjs';
|
|
27
27
|
import { runUpdate } from './update.mjs';
|
|
28
28
|
import { ensureSetup, checkSetupStatus } from './bootstrap.mjs';
|
|
29
29
|
|
|
@@ -80,7 +80,7 @@ function showHelp() {
|
|
|
80
80
|
audit Run security audit on agent configuration
|
|
81
81
|
init Initialize .bizar/ in current project
|
|
82
82
|
export [target] Export agents/rules to another harness
|
|
83
|
-
|
|
83
|
+
artifact <subcommand> Manage visual artifacts
|
|
84
84
|
test-gate Detect & run the project's test suite
|
|
85
85
|
update Auto-update everything (opencode + bizar + dash + plugin)
|
|
86
86
|
service Manage the background service daemon
|
|
@@ -500,7 +500,7 @@ async function main() {
|
|
|
500
500
|
if (result.failed > 0) process.exit(1);
|
|
501
501
|
}
|
|
502
502
|
} else if (args[0] === 'plan') {
|
|
503
|
-
await
|
|
503
|
+
await runArtifact(args.slice(1), {});
|
|
504
504
|
} else if (args[0] === 'install') {
|
|
505
505
|
if (isHelpRequest) showInstallHelp();
|
|
506
506
|
else await runInstaller();
|
package/cli/install.mjs
CHANGED
|
@@ -375,7 +375,7 @@ export async function runInstaller() {
|
|
|
375
375
|
console.log(chalk.dim(' You can configure API keys now or later via /connect in opencode.'));
|
|
376
376
|
const keys = await promptApiKeys();
|
|
377
377
|
|
|
378
|
-
if (keys.opencodeZen || keys.minimax || keys.openai
|
|
378
|
+
if (keys.opencodeZen || keys.minimax || keys.openai |) {
|
|
379
379
|
console.log(chalk.dim('\n Keys noted. Add them to your opencode.json or run /connect in opencode.\n'));
|
|
380
380
|
}
|
|
381
381
|
|
package/cli/prompts.mjs
CHANGED
|
@@ -107,8 +107,8 @@ export async function promptApiKeys() {
|
|
|
107
107
|
},
|
|
108
108
|
{
|
|
109
109
|
type: 'password',
|
|
110
|
-
name: '
|
|
111
|
-
message: '
|
|
110
|
+
name: 'obsidian_vault',
|
|
111
|
+
message: 'Obsidian vault path (memory persistence):',
|
|
112
112
|
mask: '*',
|
|
113
113
|
validate: v => v.length > 0 || 'Required for cross-session memory',
|
|
114
114
|
},
|
package/config/AGENTS.md
CHANGED
|
@@ -118,7 +118,7 @@ For agents with `reasoning: true` + `variant: "high"`, follow `rules/thinking.md
|
|
|
118
118
|
|
|
119
119
|
### Research-Loop Rule
|
|
120
120
|
|
|
121
|
-
Follow `rules/uncertainty.md` strictly. When uncertain or stuck, the next move is a research tool call (`websearch` for outside-the-repo facts, `webfetch` for official docs, `semble search` for codebase patterns, `
|
|
121
|
+
Follow `rules/uncertainty.md` strictly. When uncertain or stuck, the next move is a research tool call (`websearch` for outside-the-repo facts, `webfetch` for official docs, `semble search` for codebase patterns, `obsidian_*` for project memory) — not a third variation of the same edit. If you catch yourself about to retry the same failed command with slightly different arguments, stop and search first. The plugin's loop-guard (`loopThresholdWarn: 5`) is the safety net; self-correct at attempt 2.
|
|
122
122
|
|
|
123
123
|
---
|
|
124
124
|
|
|
@@ -154,7 +154,7 @@ Odin (`@odin`) is the All-Father and primary/default agent. He analyzes each req
|
|
|
154
154
|
### Vör
|
|
155
155
|
|
|
156
156
|
- **Model**: `opencode/deepseek-v4-flash-free` (via OpenCode Zen — free tier)
|
|
157
|
-
- **Use for**: Clarifying ambiguous or incomplete requests. First reads project context (`.bizar/PROJECT.md`,
|
|
157
|
+
- **Use for**: Clarifying ambiguous or incomplete requests. First reads project context (`.bizar/PROJECT.md`, obsidian, project files), then only asks targeted, project-specific questions if still unclear. Never asks generic questions.
|
|
158
158
|
- **Cost**: Free
|
|
159
159
|
|
|
160
160
|
### Heimdall
|
|
@@ -209,7 +209,7 @@ Odin (`@odin`) is the All-Father and primary/default agent. He analyzes each req
|
|
|
209
209
|
|
|
210
210
|
Odin dispatches all tasks to subagents via the `task` tool. When work items are **independent**, he launches them as **parallel `task` calls in a single message**.
|
|
211
211
|
|
|
212
|
-
**Before dispatching any task, Odin determines the project name and sets the correct
|
|
212
|
+
**Before dispatching any task, Odin determines the project name and sets the correct obsidian bank.** See obsidian Memory Protocol below for bank selection rules.
|
|
213
213
|
|
|
214
214
|
| Task Type | Route To |
|
|
215
215
|
|-----------|----------|
|
|
@@ -250,48 +250,6 @@ Odin dispatches all tasks to subagents via the `task` tool. When work items are
|
|
|
250
250
|
|
|
251
251
|
---
|
|
252
252
|
|
|
253
|
-
## Hindsight Memory Protocol
|
|
254
|
-
|
|
255
|
-
A Hindsight memory MCP server is available. All agents **must** use **per-project banks** — the default bank is for general/cross-project knowledge only.
|
|
256
|
-
|
|
257
|
-
### Bank Selection Rules
|
|
258
|
-
|
|
259
|
-
1. **At session start**, call `hindsight_list_banks` to see what banks exist
|
|
260
|
-
2. Determine the project name from your working directory or the task context
|
|
261
|
-
3. Use the project-specific bank by passing `bank_id: "<project-name>"` in all Hindsight calls
|
|
262
|
-
4. If no bank exists for the project, create one with `hindsight_create_bank(bank_id: "<project-name>")`
|
|
263
|
-
5. The **default** bank is reserved for:
|
|
264
|
-
- General AI-agent system knowledge (model configs, agent definitions, infrastructure)
|
|
265
|
-
- Cross-project preferences and personal facts about the user
|
|
266
|
-
- Knowledge that applies regardless of which project
|
|
267
|
-
|
|
268
|
-
### Available Hindsight Tools
|
|
269
|
-
|
|
270
|
-
| Tool | Purpose |
|
|
271
|
-
|------|---------|
|
|
272
|
-
| `hindsight_list_banks` | List all available banks — call this first |
|
|
273
|
-
| `hindsight_create_bank` | Create a new project bank if one doesn't exist |
|
|
274
|
-
| `hindsight_recall` | Search stored memories for relevant context |
|
|
275
|
-
| `hindsight_retain` | Store new information to memory |
|
|
276
|
-
| `hindsight_sync_retain` | Store and block until complete |
|
|
277
|
-
| `hindsight_reflect` | Synthesize insights across stored memories |
|
|
278
|
-
| `hindsight_list_mental_models` | Check existing mental models |
|
|
279
|
-
| `hindsight_get_mental_model` | Read a mental model's content |
|
|
280
|
-
| `hindsight_create_mental_model` | Create a persistent knowledge summary |
|
|
281
|
-
| `hindsight_update_bank` | Update a bank's name/mission/configuration |
|
|
282
|
-
|
|
283
|
-
### Required Workflow
|
|
284
|
-
|
|
285
|
-
1. **Session start**: `hindsight_list_banks` + `hindsight_recall` (with correct `bank_id`) + read `.bizar/AGENTS_SELF_IMPROVEMENT.md`
|
|
286
|
-
2. **During work**: `hindsight_retain` with correct `bank_id` for all project knowledge
|
|
287
|
-
3. **Task completion**: `hindsight_retain` summary into the project bank + record entry in `.bizar/AGENTS_SELF_IMPROVEMENT.md`
|
|
288
|
-
4. **Project knowledge**: Create mental models for sustained project context
|
|
289
|
-
|
|
290
|
-
### Hindsight MCP Server
|
|
291
|
-
|
|
292
|
-
The Hindsight MCP server is already configured. All agents interact with it through MCP tools. Always pass `bank_id` — do not rely on the default bank for project-specific work.
|
|
293
|
-
|
|
294
|
-
---
|
|
295
253
|
|
|
296
254
|
## Graph Query (bizar graph)
|
|
297
255
|
|
|
@@ -327,7 +285,7 @@ From the project root, the user (or heimdall via `/init` or any other agent prom
|
|
|
327
285
|
|
|
328
286
|
## General Agent Baseline — Always-On Behavior
|
|
329
287
|
|
|
330
|
-
This section is the single source of truth for every Bizar agent's behavior. It is **adapted from the upstream system prompt and translated to Bizar**. Every Claude-specific reference has been mapped to the Bizar equivalent (BizarHarness, opencode,
|
|
288
|
+
This section is the single source of truth for every Bizar agent's behavior. It is **adapted from the upstream system prompt and translated to Bizar**. Every Claude-specific reference has been mapped to the Bizar equivalent (BizarHarness, opencode, obsidian, Semble, Skills CLI, agent-browser, the opencode tool set). All agents **MUST** follow these rules at all times.
|
|
331
289
|
|
|
332
290
|
> **Tool name translation table** (used throughout this baseline):
|
|
333
291
|
>
|
|
@@ -345,7 +303,7 @@ This section is the single source of truth for every Bizar agent's behavior. It
|
|
|
345
303
|
> | `ask_user_input_v0` | Bizar has a `question` tool — same shape, single high-value question |
|
|
346
304
|
> | `skill` | `skill` — load a SKILL.md from `~/.opencode/skills/<name>/` or installed equivalent |
|
|
347
305
|
> | `task` (subagent dispatch) | `task` — same — used by Odin to dispatch subagents |
|
|
348
|
-
> | MCP servers | `semble` (codebase search), `
|
|
306
|
+
> | MCP servers | `semble` (codebase search), `obsidian` (memory), and any user-added servers in `config/opencode.json` |
|
|
349
307
|
|
|
350
308
|
### Simplicity Rule — do not overcomplicate
|
|
351
309
|
|
|
@@ -429,7 +387,7 @@ This section is the single source of truth for every Bizar agent's behavior. It
|
|
|
429
387
|
- Bizar does not have a single knowledge cutoff shared by all models. Subagents may run on DeepSeek V4 Flash, MiniMax M2.7 / M3, or GPT-5.5, each with their own training window.
|
|
430
388
|
- For facts that change quickly (current positions, prices, breaking news) or anything that could have changed recently, **search before answering**: use `websearch` and `webfetch` or delegate to `@mimir` for deep research.
|
|
431
389
|
- For stable technical knowledge (language semantics, well-established APIs, mathematical truths), answer directly without search.
|
|
432
|
-
- Default to using `
|
|
390
|
+
- Default to using `obsidian_*` with the project's `bank_id` at session start to retrieve prior project context before answering anything project-specific.
|
|
433
391
|
- When formulating date-sensitive queries, use the actual current date (Bizar's opencode environment provides this). Do not hardcode years.
|
|
434
392
|
- Do not over-rely on memory; if uncertain, search. Confabulating costs the user more than searching.
|
|
435
393
|
|
|
@@ -440,7 +398,7 @@ Bizar can connect to external tools via MCP servers. Always check what's connect
|
|
|
440
398
|
#### Always-on MCP servers
|
|
441
399
|
|
|
442
400
|
- `semble` — local codebase search. Use `semble search "<query>"` for natural-language and keyword queries against the active repo. Faster and more token-efficient than `grep` / `read`.
|
|
443
|
-
- `
|
|
401
|
+
- `obsidian` — persistent memory with per-project banks. Use `obsidian_*` with `bank_id: "<project-name>"` to retrieve prior context; `obsidian_*` to store new findings.
|
|
444
402
|
|
|
445
403
|
#### Domain skills
|
|
446
404
|
|
|
@@ -514,7 +472,7 @@ Use `websearch` and `webfetch` for current information you don't have or that ma
|
|
|
514
472
|
**Core search behaviors:**
|
|
515
473
|
1. Search for fast-changing info (stock prices, breaking news, current holders of public positions). Don't search for timeless technical facts.
|
|
516
474
|
2. Scale tool calls to query complexity: 1 for single facts; 3–5 for medium; 5–10 for deeper research; 20+ should be delegated to `@mimir`.
|
|
517
|
-
3. Use internal data tools (
|
|
475
|
+
3. Use internal data tools (obsidian for project memory, Semble for code) **before** `websearch` when working on the user's own projects.
|
|
518
476
|
|
|
519
477
|
**How to search:**
|
|
520
478
|
- Keep queries concise (1–6 words) and start broad.
|
|
@@ -564,7 +522,7 @@ For Bizar-internal claims (citing files, lines, tool results), use file:line ref
|
|
|
564
522
|
|
|
565
523
|
### memory_privacy_and_user_data
|
|
566
524
|
|
|
567
|
-
- Use persistent memory (`
|
|
525
|
+
- Use persistent memory (`obsidian_*`) only when the information is stable, useful, and not sensitive unless explicitly requested.
|
|
568
526
|
- Do not store trivial, short-lived, or unnecessarily personal information.
|
|
569
527
|
- Handle user data conservatively.
|
|
570
528
|
- Do not expose private emails, files, contacts, credentials, tokens, or internal documents unless requested and permitted.
|