@polderlabs/bizar 10.23.19 → 10.23.20

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.
@@ -368,10 +368,7 @@ Background (async, returns immediately):
368
368
 
369
369
  ### Coordinating multiple background agents
370
370
 
371
- When fanning out several research or exploration tasks, issue multiple `Agent` calls in the **same message** with `run_in_background: true`. Each runs in parallel. Collect results by either:
372
-
373
- - Waiting for the user to ask, then re-dispatching sync `Agent` calls that summarize the background work.
374
- - Reading the background agent's final summary when it completes.
371
+ When fanning out several research or exploration tasks, issue multiple `Agent` calls in the **same message** with `run_in_background: true`. Each runs in parallel. Collect the original final summary/result when the task completes. Do not re-dispatch a completed background agent to summarize its work: that creates a new, context-poor task and its acknowledgement is not a replacement for the original deliverable.
375
372
 
376
373
  ---
377
374
 
@@ -94,8 +94,10 @@ Worktree branches use `wt/<agent_type>-<short-task-id>`.
94
94
  - Inspect an idle task after its second idle notification. Stop and reassign a
95
95
  task that has no progress/evidence; do not model-cycle it.
96
96
  - A `TaskCompleted`, `SubagentStop`, or `<task-notification>` is terminal. Read
97
- its `<result>`, mark the worker done/failed, merge queued work, and continue
98
- the active objective. Never route a completion notification as a new prompt.
97
+ its original `<result>` once, mark the worker done/failed, merge queued work,
98
+ and continue the active objective. Never route a completion notification as
99
+ a new prompt, send it back to the worker, or replace its deliverable with a
100
+ later acknowledgement/status reply.
99
101
 
100
102
  ## Learning and completion
101
103
 
@@ -188,7 +188,7 @@ function startupBriefing(cwd, featureBrief, recentCommits, projectLine, progress
188
188
  if (progressLast) lines.push(`- Progress: ${progressLast}.`);
189
189
  lines.push('- You are @mike. For non-tiny work, do bounded read-only orientation, ask one clarification checkpoint, then choose a single isolated worker, native workflow, parallel workers, or an Agent team by actual dependency. Use worktrees for editors and explicit Bizar models for every Agent.');
190
190
  lines.push('- External/version-sensitive work requires current official docs via WebSearch/WebFetch. Use relevant installed skills; apply i-have-adhd to user output. WIP=1.');
191
- lines.push('- TaskCompleted/SubagentStop/<task-notification> is terminal: consume <result>, mark done/failed, merge queued work, continue the objective.');
191
+ lines.push('- TaskCompleted/SubagentStop/<task-notification> is terminal: consume its original <result> once, mark done/failed, merge queued work, and continue the objective. Never turn a terminal notification into a worker follow-up or replace that result with a later status reply.');
192
192
  // Default-first-stop hint when nothing is active yet.
193
193
  if (featureBrief && featureBrief.active.length === 0) {
194
194
  lines.push(
@@ -56,7 +56,11 @@ export function handleTeamLifecycle(input, options = {}) {
56
56
  task.updatedAt = now;
57
57
  if (event === 'TaskCompleted' || event === 'SubagentStop') {
58
58
  task.state = /fail|error/i.test(record.status) ? 'failed' : 'completed';
59
- context = `Agent task ${taskId} is terminal (${task.state}). Consume its result, reconcile/merge its worktree, and continue the active objective.`;
59
+ // Claude Code already delivers the terminal result to the parent. Do
60
+ // not add another instruction here: lifecycle hook output can be
61
+ // surfaced in an agent context and turn a completed task into a bogus
62
+ // follow-up conversation ("Ready", "No action needed", etc.).
63
+ // This hook owns durable liveness telemetry only.
60
64
  } else if (event === 'TeammateIdle') {
61
65
  task.idleCount = Number(task.idleCount || 0) + 1;
62
66
  if (task.idleCount >= 2) context = `Agent task ${taskId} has been idle ${task.idleCount} times. Inspect its evidence now; stop and reassign if it made no progress. Do not model-cycle.`;
@@ -61,7 +61,7 @@ const ROUTE_POLICY = [
61
61
  '- If this is the primary session, you ARE @mike. First do only bounded read-only orientation. Then ask one concise clarification question describing the inferred outcome, the material choice/risk, and your proposed coordination mode. Wait for the answer before edits, branches, tests, or editor dispatch. If the user explicitly waives questions, continue autonomously.',
62
62
  '- After clarification, choose the lightest coordination mode: a direct tiny edit, one isolated Agent for a bounded change, a native Bizar Workflow for repeatable phased work, parallel Agents for disjoint scopes, or an Agent team only when 3+ sustained roles need cross-talk. Do not force a workflow or team when it adds no value.',
63
63
  '- For every Agent, workflow worker, or agent-team teammate, choose one exact ID from the enabled `bizar models` user selection, then obtain its role-specific generated definition name from `bizar models --agent-types --json` (for example greg or todd). Pass that name as `subagent_type` and OMIT the native `model` field. The definition frontmatter owns the exact gateway ID. Never put a raw gateway ID or a Claude family alias in the native model field; aliases are compatibility-only. For teams, do not name a competing model in the spawn prompt. If the map or definition is missing, run `bizar models`; do not retry by cycling providers or tiers. Every editing worker uses call-level `isolation: "worktree"`. For genuinely disjoint writable scopes, dispatch concurrently; otherwise use one owner.',
64
- '- Consume terminal agent results, merge queued worktrees with bizar worktree-merge, and run integration checks in the primary session. A subagent may not recursively dispatch itself.',
64
+ '- Consume each terminal agent result exactly once from its original `<result>`/final summary, merge queued worktrees with bizar worktree-merge, and run integration checks in the primary session. Never send a terminal notification, idle ping, or completed task back to that agent as a follow-up and never re-dispatch a completed background agent merely to summarize its result. A subagent may not recursively dispatch itself.',
65
65
  '- Do NOT execute any tool you do not have. If a tool you need is missing from your tools list, dispatch to a subagent that has it — do not pretend you have it.',
66
66
  '- If you are already running as a Bizar custom agent, follow your assigned role and do not recursively dispatch yourself.',
67
67
  ].join('\n');
@@ -83,7 +83,7 @@ process.stdin.on('end', async () => {
83
83
  process.stdout.write(JSON.stringify({
84
84
  hookSpecificOutput: {
85
85
  hookEventName: 'UserPromptSubmit',
86
- additionalContext: 'Bizar terminal task update: consume the structured status and <result> now. Mark the agent terminal, merge any queued worktree, continue the active objective, and do not route this notification as a new request.',
86
+ additionalContext: 'Bizar terminal task update: consume this original structured <result> exactly once. Mark the agent terminal and merge any queued worktree. Do not send this notification back to the agent, do not request a follow-up acknowledgement, and do not replace its result with a later idle/status reply.',
87
87
  },
88
88
  }) + '\n');
89
89
  return;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polderlabs/bizar",
3
- "version": "10.23.19",
3
+ "version": "10.23.20",
4
4
  "description": "Autonomous, human-in-the-loop multi-agent harness for Claude Code with guarded workflows, typed SDK primitives, and MCP tools.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,5 +1,5 @@
1
1
  /**
2
2
  * SDK version constant. Keep synchronized with the workspace package versions.
3
3
  */
4
- export declare const SDK_VERSION: "10.23.13";
4
+ export declare const SDK_VERSION: "10.23.20";
5
5
  //# sourceMappingURL=version.d.ts.map
@@ -1,5 +1,5 @@
1
1
  /**
2
2
  * SDK version constant. Keep synchronized with the workspace package versions.
3
3
  */
4
- export const SDK_VERSION = "10.23.13";
4
+ export const SDK_VERSION = "10.23.20";
5
5
  //# sourceMappingURL=version.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polderlabs/bizar-sdk",
3
- "version": "10.23.13",
3
+ "version": "10.23.20",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",