@bastani/atomic 0.9.43 → 0.9.44-alpha.2
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/CHANGELOG.md +42 -0
- package/dist/builtin/intercom/CHANGELOG.md +22 -0
- package/dist/builtin/intercom/broker/broker.ts +31 -7
- package/dist/builtin/intercom/broker/client-message-validation.ts +6 -0
- package/dist/builtin/intercom/broker/client.ts +69 -0
- package/dist/builtin/intercom/broker/send-signature.ts +4 -1
- package/dist/builtin/intercom/index.bundle.mjs +309 -109
- package/dist/builtin/intercom/live-route-refusal.ts +20 -0
- package/dist/builtin/intercom/package.json +1 -1
- package/dist/builtin/intercom/skills/intercom/SKILL.md +11 -6
- package/dist/builtin/intercom/types.ts +28 -1
- package/dist/builtin/mcp/CHANGELOG.md +7 -0
- package/dist/builtin/mcp/package.json +1 -1
- package/dist/builtin/subagents/CHANGELOG.md +9 -0
- package/dist/builtin/subagents/README.md +8 -8
- package/dist/builtin/subagents/agents/worker.md +1 -1
- package/dist/builtin/subagents/package.json +1 -1
- package/dist/builtin/subagents/skills/agent-browser/SKILL.md +1 -1
- package/dist/builtin/subagents/skills/cua-driver/EMBEDDING.md +21 -2
- package/dist/builtin/subagents/skills/cua-driver/LINUX.md +2 -2
- package/dist/builtin/subagents/skills/cua-driver/MACOS.md +342 -10
- package/dist/builtin/subagents/skills/cua-driver/README.md +4 -3
- package/dist/builtin/subagents/skills/cua-driver/RUNTIME.md +3 -1
- package/dist/builtin/subagents/skills/cua-driver/SKILL.md +7 -4
- package/dist/builtin/subagents/skills/cua-driver/WINDOWS.md +6 -5
- package/dist/builtin/subagents/skills/cua-driver/WORKFLOW.md +15 -0
- package/dist/builtin/subagents/skills/herdr/SKILL.md +22 -10
- package/dist/builtin/subagents/skills/subagent/SKILL.md +8 -5
- package/dist/builtin/subagents/src/extension/index.bundle.mjs +6 -6
- package/dist/builtin/web-access/package.json +1 -1
- package/dist/builtin/workflows/CHANGELOG.md +20 -0
- package/dist/builtin/workflows/README.md +1 -1
- package/dist/builtin/workflows/builtin/{chunk-frqxd4d1.js → chunk-k8d7ehjx.js} +22 -0
- package/dist/builtin/workflows/builtin/{chunk-3s95f7ry.js → chunk-qxpymnaf.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-edhf30ef.js → chunk-zjecnjxx.js} +1 -1
- package/dist/builtin/workflows/builtin/goal.js +2 -2
- package/dist/builtin/workflows/builtin/index.js +3 -3
- package/dist/builtin/workflows/builtin/ralph.js +2 -2
- package/dist/builtin/workflows/package.json +1 -1
- package/dist/builtin/workflows/src/extension/index.bundle.mjs +1844 -603
- package/dist/builtin/workflows/src/extension/local-worker-entry.mjs +1880 -605
- package/dist/builtin/workflows/src/index.js +1896 -655
- package/dist/builtin/workflows/src/local-worker-entry.mjs +1880 -605
- package/dist/cli/args.js +1 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/core/agent-session-custom-message-commit.d.ts.map +1 -1
- package/dist/core/agent-session-custom-message-commit.js +59 -0
- package/dist/core/agent-session-custom-message-commit.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +1 -0
- package/dist/core/agent-session-methods.d.ts.map +1 -1
- package/dist/core/agent-session-methods.js.map +1 -1
- package/dist/core/agent-session-prompt.d.ts +4 -0
- package/dist/core/agent-session-prompt.d.ts.map +1 -1
- package/dist/core/agent-session-prompt.js +10 -2
- package/dist/core/agent-session-prompt.js.map +1 -1
- package/dist/core/agent-session.d.ts +2 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +9 -0
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/builtin-packages.d.ts.map +1 -1
- package/dist/core/builtin-packages.js +13 -13
- package/dist/core/builtin-packages.js.map +1 -1
- package/dist/core/exec.d.ts.map +1 -1
- package/dist/core/exec.js +11 -2
- package/dist/core/exec.js.map +1 -1
- package/dist/core/package-manager-resolver.d.ts.map +1 -1
- package/dist/core/package-manager-resolver.js +25 -14
- package/dist/core/package-manager-resolver.js.map +1 -1
- package/dist/core/package-manager-types.d.ts +8 -0
- package/dist/core/package-manager-types.d.ts.map +1 -1
- package/dist/core/package-manager-types.js.map +1 -1
- package/dist/core/package-manager.d.ts +1 -1
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/resource-loader-extension-warnings.d.ts +4 -1
- package/dist/core/resource-loader-extension-warnings.d.ts.map +1 -1
- package/dist/core/resource-loader-extension-warnings.js +15 -0
- package/dist/core/resource-loader-extension-warnings.js.map +1 -1
- package/dist/core/resource-loader-package-resources.d.ts.map +1 -1
- package/dist/core/resource-loader-package-resources.js +1 -0
- package/dist/core/resource-loader-package-resources.js.map +1 -1
- package/dist/core/resource-loader-reload.d.ts.map +1 -1
- package/dist/core/resource-loader-reload.js +5 -3
- package/dist/core/resource-loader-reload.js.map +1 -1
- package/dist/extensions/mcp/client/oauth/flow.d.ts.map +1 -1
- package/dist/extensions/mcp/client/oauth/flow.js +4 -1
- package/dist/extensions/mcp/client/oauth/flow.js.map +1 -1
- package/dist/extensions/mcp/client/oauth/types.d.ts +1 -0
- package/dist/extensions/mcp/client/oauth/types.d.ts.map +1 -1
- package/dist/extensions/mcp/client/oauth/types.js +8 -4
- package/dist/extensions/mcp/client/oauth/types.js.map +1 -1
- package/dist/extensions/mcp/client/transports/streamable-http.d.ts.map +1 -1
- package/dist/extensions/mcp/client/transports/streamable-http.js +2 -1
- package/dist/extensions/mcp/client/transports/streamable-http.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +20 -10
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +4 -2
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js +4 -2
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts +6 -0
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +11 -1
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/model-search.d.ts +10 -0
- package/dist/modes/interactive/model-search.d.ts.map +1 -1
- package/dist/modes/interactive/model-search.js +21 -0
- package/dist/modes/interactive/model-search.js.map +1 -1
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +5 -0
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js +30 -35
- package/dist/utils/tools-manager.js.map +1 -1
- package/docs/computer-use.md +5 -5
- package/docs/custom-provider/streaming.md +9 -14
- package/docs/environment-variables.md +1 -0
- package/docs/intercom/operations.md +1 -1
- package/docs/intercom.md +16 -2
- package/docs/packages.md +2 -0
- package/docs/settings.md +2 -2
- package/docs/skills.md +2 -2
- package/docs/subagents.md +47 -10
- package/docs/workflows/api-reference.md +1 -1
- package/docs/workflows/authoring.md +1 -1
- package/docs/workflows/operations.md +8 -6
- package/docs/workflows/reliable-design.md +23 -5
- package/examples/extensions/custom-provider-anthropic/index.ts +31 -31
- package/examples/extensions/todo.ts +7 -0
- package/npm-shrinkwrap.json +32 -32
- package/package.json +3 -3
|
@@ -67,3 +67,23 @@ export class IntercomLiveRouteRefusedError extends Error {
|
|
|
67
67
|
this.transient = isTransientLiveWorkflowStageRouteRefusal(code);
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* How long a starting stage keeps waiting out an `owner_missing` refusal. The run's owner
|
|
73
|
+
* registers its route over its own broker connection, which may still be connecting, backing
|
|
74
|
+
* off (up to 30 s) or waiting out 10 s connect and acknowledgement timeouts when the stage
|
|
75
|
+
* starts, so a few quick retries would turn ordinary registration latency into a failed stage
|
|
76
|
+
* (#3904). Past this bound the refusal surfaces as before.
|
|
77
|
+
*/
|
|
78
|
+
export const LIVE_ROUTE_OWNER_WAIT_MS = 120_000;
|
|
79
|
+
const LIVE_ROUTE_OWNER_RETRY_FIRST_MS = 250;
|
|
80
|
+
const LIVE_ROUTE_OWNER_RETRY_MAX_MS = 2_000;
|
|
81
|
+
|
|
82
|
+
/** Delay before the next registration attempt while the owner is missing: doubling, capped at 2 s. */
|
|
83
|
+
export function liveRouteOwnerRetryDelayMs(attempt: number): number {
|
|
84
|
+
return Math.min(LIVE_ROUTE_OWNER_RETRY_FIRST_MS * 2 ** attempt, LIVE_ROUTE_OWNER_RETRY_MAX_MS);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export function isOwnerMissingRefusal(error: unknown): boolean {
|
|
88
|
+
return error instanceof IntercomLiveRouteRefusedError && error.code === "owner_missing";
|
|
89
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastani/intercom",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.44-alpha.2",
|
|
4
4
|
"private": true,
|
|
5
5
|
"description": "Atomic extension providing a private coordination channel between parent and child agent sessions. Fork of: https://github.com/nicobailon/pi-intercom",
|
|
6
6
|
"contributors": [
|
|
@@ -247,12 +247,15 @@ In Atomic workflows, each invocation has its own Intercom group, and parallel st
|
|
|
247
247
|
|
|
248
248
|
### Pattern 8: Peer Coordination Between Subagents and Workflow Stages
|
|
249
249
|
|
|
250
|
-
|
|
250
|
+
Peer-to-peer (swarm) is the default topology inside a delegation. There are no limits on communication between agents; it is encouraged whenever you need to. The supervisor is not a message relay: relaying adds latency, loses detail, and fills the supervisor's context, so siblings exchange evidence directly and self-organize. Children launched in one parallel set (or one explicit `group`) share an Intercom group, and workflow stages share their invocation group `workflow:<rootRunId>`; delegated subagents inside a stage inherit it. Any of them can list live siblings and message them directly. `contact_supervisor` is reserved for the supervisor; peer traffic uses ordinary `intercom`.
|
|
251
251
|
|
|
252
252
|
```typescript
|
|
253
253
|
// Any child or stage: discover who is live in your group
|
|
254
254
|
intercom({ action: "list" })
|
|
255
255
|
|
|
256
|
+
// Broadcast: share a finding with every live sibling in the workflow
|
|
257
|
+
intercom({ action: "send", to: "workflow:<rootRunId>/**", message: "Root cause confirmed: cache key omits tenant id (src/cache.ts:52). Adjust your angle." })
|
|
258
|
+
|
|
256
259
|
// Connect: pass what you found to the sibling who needs it
|
|
257
260
|
intercom({ action: "send", to: "codebase-analyzer-2", message: "Null handling lives in src/auth/session.ts:40-118 and src/auth/refresh.ts:12-60. Start there." })
|
|
258
261
|
|
|
@@ -266,14 +269,16 @@ intercom({ action: "ask", to: "debugger-1", message: "What exact command and env
|
|
|
266
269
|
intercom({ action: "ask", to: "reviewer-2", message: "You called the retry loop unbounded. client.ts:88 caps attempts at 5 — which path bypasses it?" })
|
|
267
270
|
```
|
|
268
271
|
|
|
269
|
-
|
|
272
|
+
How a swarm works:
|
|
270
273
|
|
|
271
|
-
-
|
|
272
|
-
-
|
|
273
|
-
- Decide on evidence, not deference. A peer's approval, rejection, or claim is input to inspect, not a verdict to copy.
|
|
274
|
-
-
|
|
274
|
+
- Coordinate proactively. Discover peers with `list` as soon as you start and again whenever new siblings may have joined, without waiting for the launcher to name them.
|
|
275
|
+
- Broadcast findings, claim files or expensive steps, hand work along a chain, ask and answer each other, and debate disagreements for as long as it is useful.
|
|
276
|
+
- Decide on evidence, not deference. A peer's approval, rejection, or claim is input to inspect, not a verdict to copy, and each agent still returns its own result.
|
|
277
|
+
- `contact_supervisor` is for supervisor decisions; explicit user approval gates and authorization for destructive or external actions still apply.
|
|
275
278
|
- Inside a workflow, `send` to a known pending sibling queues until it starts, and `ask` to a completed sibling that retains a valid conversation reopens it for a post-mortem turn. Named stage subgroups isolate their members from sibling subgroups.
|
|
279
|
+
- Choose `delivery` per `send`/`ask` by urgency. The default `"steer"` arrives after the recipient's current tool calls finish and never cancels its work. Use `"interrupt"` when it must stop now (an urgent correction or a stop order), and `"followUp"` when the message can wait until it finishes (low priority, "after you're done").
|
|
276
280
|
- Peer asks and one blocking supervisor request may wait concurrently in the same child; mutual asks work when both sides process inbound work.
|
|
281
|
+
- Scale with the task. For very complex work or requested heavy parallelism, hundreds or thousands of agents self-organize into teams (named groups, per-stage subagent sets, child workflows) and coordinate peer-to-peer like an organization. Groups have no member limit; team members reach their lead with `contact_supervisor`, and leads talk to each other in their shared group.
|
|
277
282
|
|
|
278
283
|
## Key Differences
|
|
279
284
|
|
|
@@ -115,11 +115,19 @@ export interface BrokerStatusReport {
|
|
|
115
115
|
multiNode: BrokerMultiNodeStatus;
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
+
export type IntercomDeliveryMode = "steer" | "followUp" | "interrupt";
|
|
119
|
+
|
|
118
120
|
export interface Message {
|
|
119
121
|
id: string;
|
|
120
122
|
timestamp: number;
|
|
121
123
|
replyTo?: string;
|
|
122
124
|
expectsReply?: boolean;
|
|
125
|
+
/**
|
|
126
|
+
* How a busy recipient receives this message. `steer` (default when absent) queues it until the current turn's tool
|
|
127
|
+
* calls finish, never cancelling in-flight work. `followUp` waits until the recipient's agent finishes and stops.
|
|
128
|
+
* `interrupt` cancels the current model call or cancellable tool call and handles the message next.
|
|
129
|
+
*/
|
|
130
|
+
delivery?: IntercomDeliveryMode;
|
|
123
131
|
/** Correlated delivery refusal: settles a waiting ask, otherwise surfaces as send feedback. */
|
|
124
132
|
replyError?: string;
|
|
125
133
|
source?: {
|
|
@@ -221,6 +229,12 @@ export type ClientMessage =
|
|
|
221
229
|
parent?: WorkflowRunParentAnnouncement;
|
|
222
230
|
/** Interrupted run queued by its restarted owner before resume; yields to the process that resumes it (#3760). */
|
|
223
231
|
dormant?: true;
|
|
232
|
+
/**
|
|
233
|
+
* #3906: the connection carries the routes of many runs, so a refusal of this one is answered with
|
|
234
|
+
* `pending_stage_route_refused` and leaves the connection open. Honoured only with a `requestId`, and sent only to
|
|
235
|
+
* a broker that advertised `refusesPendingStageRoutesInPlace`; an older broker ignores it and ends the connection.
|
|
236
|
+
*/
|
|
237
|
+
refusalKeepsConnection?: true;
|
|
224
238
|
}
|
|
225
239
|
| {
|
|
226
240
|
type: "register_live_workflow_stage_route";
|
|
@@ -254,6 +268,9 @@ export type ClientMessage =
|
|
|
254
268
|
/** Allowed before `register`: shut the broker down; its sessions reconnect to a new broker. */
|
|
255
269
|
| { type: "shutdown"; requestId: string };
|
|
256
270
|
|
|
271
|
+
/** Why the broker refused a pending-stage route registration (#3906). Authorization decides these, not the client. */
|
|
272
|
+
export type PendingStageRouteRefusalCode = "not_authorized" | "invalid_stage_roster" | "invalid_possible_stage_roster";
|
|
273
|
+
|
|
257
274
|
export type BrokerMessage =
|
|
258
275
|
| { type: "health"; requestId: string; instanceId: string }
|
|
259
276
|
| {
|
|
@@ -264,10 +281,12 @@ export type BrokerMessage =
|
|
|
264
281
|
acknowledgesReceipt?: true;
|
|
265
282
|
/** This broker acknowledges a `register_pending_stage_route` that carries a `requestId`; absent on older brokers. */
|
|
266
283
|
acknowledgesPendingStageRoutes?: true;
|
|
284
|
+
/** #3906: this broker honours `refusalKeepsConnection`; absent on older brokers, which end the connection. */
|
|
285
|
+
refusesPendingStageRoutesInPlace?: true;
|
|
267
286
|
/** This broker answers `broker_status`; absent on older brokers, which drop a client that sends it. */
|
|
268
287
|
brokerStatus?: true;
|
|
269
288
|
}
|
|
270
|
-
| { type: "registration_failed"; reason: string; code?: LiveWorkflowStageRouteRefusalCode }
|
|
289
|
+
| { type: "registration_failed"; reason: string; code?: LiveWorkflowStageRouteRefusalCode; requestId?: string }
|
|
271
290
|
| { type: "question_target"; messageId: string; attemptId: string; sessionId: string }
|
|
272
291
|
| { type: "sessions"; requestId: string; sessions: SessionInfo[]; workflowStages?: WorkflowStageRosterEntry[]; workflowFutureStages?: WorkflowFutureStageRosterEntry[]; restricted?: true }
|
|
273
292
|
| { type: "groups"; requestId: string; groups: GroupSummary[] }
|
|
@@ -288,6 +307,14 @@ export type BrokerMessage =
|
|
|
288
307
|
}
|
|
289
308
|
| { type: "live_workflow_stage_route_registered"; requestId: string }
|
|
290
309
|
| { type: "pending_stage_route_registered"; requestId: string }
|
|
310
|
+
/** #3906: the registration `requestId` of run `runId` was refused; the connection and its other routes are kept. */
|
|
311
|
+
| {
|
|
312
|
+
type: "pending_stage_route_refused";
|
|
313
|
+
requestId: string;
|
|
314
|
+
runId: string;
|
|
315
|
+
code: PendingStageRouteRefusalCode;
|
|
316
|
+
reason: string;
|
|
317
|
+
}
|
|
291
318
|
/** A dormant route's run was resumed by another process, which now owns the run's routes (#3760). */
|
|
292
319
|
| { type: "pending_stage_route_revoked"; runId: string }
|
|
293
320
|
| { type: "presence_update"; session: SessionInfo }
|
|
@@ -7,6 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.9.44-alpha.1] - 2026-10-24
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- MCP sign-in now accepts only `http:` and `https:` authorization endpoints and other OAuth metadata URLs. Before, a malicious MCP server could supply a `file:` or custom protocol authorization endpoint (for example `search-ms:`), which the platform URL handler would launch on sign-in ([pi 9ffd27cf](https://github.com/earendil-works/pi/commit/9ffd27cfaaeed5c1ecf9369f393c3222975729b4))
|
|
15
|
+
- The excerpt of an HTTP error body in Streamable HTTP errors no longer keeps the whole response body alive ([pi #9265](https://github.com/earendil-works/pi/issues/9265))
|
|
16
|
+
|
|
10
17
|
## [0.9.35] - 2026-10-13
|
|
11
18
|
|
|
12
19
|
### Fixed
|
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.9.44-alpha.1] - 2026-10-24
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- **Security policy change:** on macOS, the agent now approves Cua Driver's own Accessibility and Screen Recording permission prompts itself by default, without asking, by clicking them through the host's VNC or Screen Sharing server when credentials for it are available (for example `CUA_VNC_SERVER` and `CUA_VNC_PASSWORD`). It reports each approval and when it happened, never approves any other permission or another app's dialog, and types a password only when you supplied one. Set `ATOMIC_CUA_AUTO_APPROVE=0` to turn this off and have the agent ask you to grant the permissions, as before.
|
|
10
|
+
- Updated the bundled Cua Driver skill to upstream `cua-driver-rs-v0.38.0`. Refusals, `unverifiable` actions and `suspected_noop` results now come with a `hint` and a safe `next_call` to try, and three single actions in a row suggest batching with `run_steps`. Steps inside `run_steps` and `run_script` skip most of the cursor glide and window watch on macOS. The macOS guide adds installing and updating the driver and granting its permissions with an MDM profile on managed Macs. It also covers `invoke_menu` refusing unless the requested window is key, background `<select>` menus in Chrome and Electron via `set_value`, Electron drags, and handing a URL to a specific Windows browser with `additional_arguments`.
|
|
11
|
+
- Updated the bundled Herdr skill to upstream `v0.9.5`. It can now control agents and panes on a saved SSH machine with `herdr --machine <label-or-id>`, and it explains that an agent suspended with Ctrl+Z keeps its identity, that Antigravity and Grok can look idle while background work continues, that `pane run` only acknowledges admission (and rejects over-long lines on macOS), and that CLI closes skip the TUI's last-pane confirmation. The explicit-request trigger and the `HERDR_ENV=1` requirement are unchanged.
|
|
12
|
+
- Subagents now default to peer-to-peer (swarm) coordination with no limits on communication between agents: children discover siblings with `intercom list` and broadcast, debate, claim, hand off, and ask each other directly instead of relaying through the supervisor. Explicit user approval and authorization gates still apply. Swarms scale with the task: for very complex work or requested heavy parallelism, hundreds or thousands of agents self-organize into teams, and the subagents guide documents the settings that bound swarm size. The `parallel.maxTasks`, `parallel.concurrency` and `parallel.runningCapacity` defaults rise from 50, 3 and 4 to 1000, so one parent can run up to 1000 children at once without configuration; set them lower in `~/.atomic/agent/extensions/subagent/config.json` to throttle, or higher for larger swarms.
|
|
13
|
+
|
|
5
14
|
## [0.9.41] - 2026-10-22
|
|
6
15
|
|
|
7
16
|
### Added
|
|
@@ -234,7 +234,7 @@ The child can use one dedicated coordination tool:
|
|
|
234
234
|
|
|
235
235
|
Child-side routine completion handoffs are still not expected. In parallel runs, blocking `contact_supervisor` decisions/interviews and parent-targeted `intercom.ask` wait only in the requesting child. The supervisor replies through Intercom to the exact question; the same child continues with its original context and run identity. Sends and progress updates return without a reply.
|
|
236
236
|
|
|
237
|
-
Children can also talk to each other. Children launched in one parallel set (or with the same explicit `group`) share an Intercom group, and children launched from a workflow stage inherit that stage's invocation group. `intercom({ action: "list" })` shows live siblings, and ordinary `send`/`ask` reaches them directly: a locator hands paths to an analyzer, writers agree on file ownership or who runs a shared suite, a debugger reuses a sibling's reproduction, or one reviewer challenges another's finding before each returns its own verdict. `contact_supervisor` stays reserved for the supervisor.
|
|
237
|
+
Children can also talk to each other. Children launched in one parallel set (or with the same explicit `group`) share an Intercom group, and children launched from a workflow stage inherit that stage's invocation group. `intercom({ action: "list" })` shows live siblings, and ordinary `send`/`ask` reaches them directly: a locator hands paths to an analyzer, writers agree on file ownership or who runs a shared suite, a debugger reuses a sibling's reproduction, or one reviewer challenges another's finding before each returns its own verdict. `contact_supervisor` stays reserved for the supervisor. Peer-to-peer (swarm) exchange is the default, and the supervisor is not a message relay. There are no limits on communication between agents; it is encouraged whenever you need to. Children coordinate spontaneously and each still returns its own result. For very complex work or requested heavy parallelism, swarms scale to hundreds or thousands of agents organized into teams; see [Scaling a swarm](../coding-agent/docs/subagents.md#scaling-a-swarm) for the limits. Peer asks and one blocking supervisor request may wait concurrently in the same child.
|
|
238
238
|
|
|
239
239
|
An exact-child probe/commit handshake may release parallel foreground observations, including queued slots, so the parent can respond. It does not end any execution or spend a running concurrency slot. Active siblings keep working, queued siblings start once capacity becomes available, and worktrees remain until their owners finish. Do not relaunch children to answer an ask. Targeted `pause`/`quit`, explicit batch cancellation, and owner closure remain separate controls.
|
|
240
240
|
|
|
@@ -542,7 +542,7 @@ Agent definitions are not loaded into context by default. Management actions let
|
|
|
542
542
|
| `skill` | `string \| string[] \| false` | agent default | Override skills or disable all. |
|
|
543
543
|
| `model` | string | agent default | Override model. |
|
|
544
544
|
| `tasks` | array | - | Top-level parallel tasks. Supports `agent`, `task`, `cwd`, `count`, `output`, `outputMode`, `reads`, `progress`, `skill`, and `model`. |
|
|
545
|
-
| `concurrency` | number | config or `
|
|
545
|
+
| `concurrency` | number | config or `1000` | Top-level parallel concurrency. |
|
|
546
546
|
| `worktree` | boolean | false | Create isolated git worktrees for parallel tasks. |
|
|
547
547
|
| `context` | `fresh \| fork` | agent default or `fresh` | `fork` creates real branched sessions from the parent leaf. Packaged `worker` defaults to `fork`; every other builtin runs fresh. |
|
|
548
548
|
| `agentScope` | `user \| project \| both` | `both` | Agent discovery scope. Project wins on collisions. |
|
|
@@ -607,16 +607,16 @@ Subagent configuration controls discovery, parallel limits, session storage, con
|
|
|
607
607
|
```json
|
|
608
608
|
{
|
|
609
609
|
"parallel": {
|
|
610
|
-
"maxTasks":
|
|
611
|
-
"concurrency":
|
|
612
|
-
"runningCapacity":
|
|
610
|
+
"maxTasks": 2000,
|
|
611
|
+
"concurrency": 2000,
|
|
612
|
+
"runningCapacity": 2000
|
|
613
613
|
}
|
|
614
614
|
}
|
|
615
615
|
```
|
|
616
616
|
|
|
617
|
-
- `maxTasks` defaults to `
|
|
618
|
-
- `concurrency` defaults to `
|
|
619
|
-
- `runningCapacity` defaults to `
|
|
617
|
+
- `maxTasks` defaults to `1000` and limits tasks per parallel set after `count` expansion. There is no hard upper cap.
|
|
618
|
+
- `concurrency` defaults to `1000` and limits how many children are dispatched at once. Per-call `concurrency` takes precedence.
|
|
619
|
+
- `runningCapacity` defaults to `1000` and limits simultaneously running child turns per parent. To run more than 1000 children at once, raise `concurrency`, `runningCapacity` and `maxTasks` together.
|
|
620
620
|
|
|
621
621
|
Running capacity is selected when a parent's first child is created. Restart Atomic after changing this setting to apply the new capacity.
|
|
622
622
|
|
|
@@ -21,7 +21,7 @@ Treat an approved handoff or execution plan as the contract. Inspect inherited c
|
|
|
21
21
|
|
|
22
22
|
Do not silently make a new product, architecture, or scope decision. When implementation reveals an unapproved decision required to continue safely, use the live coordination route supplied at runtime. Use `contact_supervisor` with `reason: "need_decision"`; a claimed request ends this child and gives the supervisor a fresh-subagent handoff, so do not wait for a reply in this run. Use `reason: "progress_update"` only for a concise, non-blocking update when helpful or explicitly requested. Fall back to `intercom` for the supervisor only when `contact_supervisor` is unavailable.
|
|
23
23
|
|
|
24
|
-
Peers are a different route. Sibling agents launched with you share your Intercom group; `intercom({ action: "list" })` shows them. Use ordinary `intercom` `send`/`ask` with
|
|
24
|
+
Peers are a different route. Sibling agents launched with you share your Intercom group; `intercom({ action: "list" })` shows them. There are no limits on communication between agents; it is encouraged whenever you need to. Use ordinary `intercom` `send`/`ask` with peers proactively to divide file ownership, serialize a shared suite or build, pass on a reproduction or file location, or challenge a finding with evidence. Peer exchanges never settle scope, product, or architecture questions.
|
|
25
25
|
|
|
26
26
|
Do not end with a question requiring the supervisor to choose before work can continue. Do not send routine completion handoffs; return the normal task result when coordination is unnecessary. If you sent a progress update through `contact_supervisor`, keep it short and still provide the full structured result.
|
|
27
27
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastani/subagents",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.44-alpha.2",
|
|
4
4
|
"private": true,
|
|
5
5
|
"description": "Atomic extension for delegating tasks to subagents with parallel execution. Fork of: https://github.com/nicobailon/pi-subagents",
|
|
6
6
|
"contributors": [
|
|
@@ -4,7 +4,7 @@ description: Browser automation CLI for AI agents. Use when the user needs to in
|
|
|
4
4
|
hidden: true
|
|
5
5
|
metadata:
|
|
6
6
|
github-path: skills/agent-browser
|
|
7
|
-
github-ref: refs/tags/v0.39.
|
|
7
|
+
github-ref: refs/tags/v0.39.2
|
|
8
8
|
github-repo: https://github.com/vercel-labs/agent-browser
|
|
9
9
|
github-tree-sha: 82def67855a0d2aad7794207951820fa5422fdb0
|
|
10
10
|
name: agent-browser
|
|
@@ -262,6 +262,25 @@ Measured on macOS with Calculator in the background and Terminal frontmost, a
|
|
|
262
262
|
background AX click took 1153 ms with the default, 325 ms with `200`, and 78 ms
|
|
263
263
|
with `0`.
|
|
264
264
|
|
|
265
|
+
### Steps inside `run_steps` and `run_script` (macOS)
|
|
266
|
+
|
|
267
|
+
Two waits make up most of a macOS action's latency: the agent cursor's glide to
|
|
268
|
+
the target (600 ms or more with the default `steady` timing) and the first 300 ms
|
|
269
|
+
of the window watch above. A call that is one step of a `run_steps` batch or a
|
|
270
|
+
`run_script` program is followed at once by another step, so the driver shortens
|
|
271
|
+
both for it: the step waits at most 120 ms for the cursor to arrive and 100 ms
|
|
272
|
+
for a window change. The cursor keeps gliding and the watch keeps running
|
|
273
|
+
detached, as above, so a window that opens late is still reported on the next
|
|
274
|
+
action's result. The last step of a `run_steps` batch, and every direct call,
|
|
275
|
+
keep the full waits, so the batch's final result still reports what it left
|
|
276
|
+
open. A script has no last step the driver can know in advance; read the window
|
|
277
|
+
with `getState()` or `waitFor()` after the action that opens something.
|
|
278
|
+
|
|
279
|
+
An embedding host that wants every step to play the full glide and watch, for
|
|
280
|
+
example to record a demo, sets `CUA_DRIVER_BATCH_PACING=full` in the same
|
|
281
|
+
environment as the variables above. Any other value, or none, applies the
|
|
282
|
+
shortened waits. No tool argument can change it.
|
|
283
|
+
|
|
265
284
|
## Pacing synthesized keystrokes (macOS)
|
|
266
285
|
|
|
267
286
|
The macOS keyboard adapter waits a fixed gap between each key down and up and
|
|
@@ -294,7 +313,7 @@ and about 980 ms at `2`. All ten read-backs (five per value) matched exactly.
|
|
|
294
313
|
| --------------------------------------------- | ----------------------------- | -------------------------------------- |
|
|
295
314
|
| Responsibility disclaim re-exec | ON (owns its TCC identity) | OFF (stays in the host's chain) |
|
|
296
315
|
| Tool execution process | `serve` daemon | host-spawned `serve --embedded` daemon |
|
|
297
|
-
| Daemon auto-relaunch
|
|
316
|
+
| Daemon auto-relaunch of the installed app | Yes, when installed | Never (would leave the host's chain) |
|
|
298
317
|
| TCC identity | `com.trycua.driver` | the host app |
|
|
299
318
|
| Permission prompts / startup gate | May prompt once | **Never prompts** |
|
|
300
319
|
| Settings → Privacy & Security entries | CuaDriver | your app only |
|
|
@@ -315,7 +334,7 @@ would treat it as its own responsible process: your user would get a _second_ pr
|
|
|
315
334
|
attributed to the driver binary, a second Settings entry, and capture/AX
|
|
316
335
|
would fail until that second grant. That is the exact experience embedding exists
|
|
317
336
|
to eliminate. Embedded mode short-circuits the disclaim re-exec
|
|
318
|
-
(`responsibility.rs`) and the
|
|
337
|
+
(`responsibility.rs`) and the installed-app daemon relaunch. MCP is
|
|
319
338
|
always a proxy, so the embedded daemon remains the single process that checks
|
|
320
339
|
TCC and executes tools.
|
|
321
340
|
|
|
@@ -360,10 +360,10 @@ uninstrumented module hash are unchanged at
|
|
|
360
360
|
`1133a06e4f205cf80188a7ac9e41102f37611fea`. The proof covers recorded actions
|
|
361
361
|
and observation intervals, not every application operation or release package.
|
|
362
362
|
Portable tests and historical experiments do not replace complete native
|
|
363
|
-
harness acceptance. Compatible release artifacts and final
|
|
363
|
+
harness acceptance. Compatible release artifacts and final image
|
|
364
364
|
packaging and lifecycle validation require separate evidence. Physical Omarchy
|
|
365
365
|
parity requires separate acceptance; it is not a gate for publishing a validated
|
|
366
|
-
|
|
366
|
+
image.
|
|
367
367
|
|
|
368
368
|
## Quick triage
|
|
369
369
|
|