@datalayer/agent-runtimes 1.5.41 → 1.5.43
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/dist-embed/datalayer-app-main.js +2 -2
- package/lib/apps/apps/sessionRules.d.ts +14 -1
- package/lib/apps/apps/sessionRules.js +68 -2
- package/lib/apps/core/canvasParts.d.ts +7 -1
- package/lib/apps/plugins/app-rules/AppRulesCard.js +2 -2
- package/lib/apps/plugins/canvas-parts/index.d.ts +9 -1
- package/lib/apps/plugins/canvas-parts/index.js +28 -0
- package/lib/examples/ShieldHarnessExample.d.ts +26 -0
- package/lib/examples/ShieldHarnessExample.js +51 -0
- package/lib/examples/ShieldPolicyExample.d.ts +18 -0
- package/lib/examples/ShieldPolicyExample.js +50 -0
- package/lib/examples/example-selector.js +3 -0
- package/lib/examples/exampleGroups.d.ts +1 -1
- package/lib/examples/exampleGroups.js +4 -0
- package/lib/examples/shield/shieldHarness.d.ts +14 -0
- package/lib/examples/shield/shieldHarness.js +21 -0
- package/lib/examples/shield/shieldPolicyDemo.d.ts +85 -0
- package/lib/examples/shield/shieldPolicyDemo.js +112 -0
- package/lib/specs/harnesses.d.ts +9 -1
- package/lib/specs/harnesses.js +513 -0
- package/lib/specs/policies.js +2 -1
- package/lib/specs/teams/teams.d.ts +5 -4
- package/lib/specs/teams/teams.js +84 -12
- package/lib/types/agentspecs.d.ts +47 -1
- package/lib/types/teams.d.ts +7 -1
- package/package.json +1 -1
- package/scripts/codegen/generate_harnesses.py +41 -3
- package/scripts/codegen/generate_teams.py +3 -0
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
/// <reference types="vite/client" />
|
|
6
|
+
/** The sibling checkout's module, when it is there. */
|
|
7
|
+
const SIBLING = import.meta.glob('../../../../agent-shield/src/policy.ts');
|
|
8
|
+
/** What the page says when the sibling checkout is not beside this one. */
|
|
9
|
+
export const AGENT_SHIELD_MISSING = 'This page reads @datalayer/agent-shield from the sibling checkout ai/agent-shield, which is not beside this one: clone github.com/datalayer/agent-shield next to agent-runtimes (the package is not on npm yet).';
|
|
10
|
+
/** `@datalayer/agent-shield`'s policy module, or `null` without the sibling checkout. */
|
|
11
|
+
export async function loadAgentShield() {
|
|
12
|
+
const load = Object.values(SIBLING)[0];
|
|
13
|
+
return load ? load() : null;
|
|
14
|
+
}
|
|
15
|
+
/** An organization's document, in the package's shape: what an administrator writes. */
|
|
16
|
+
export const ORGANIZATION_POLICY = {
|
|
17
|
+
scope: 'organization',
|
|
18
|
+
rules: [
|
|
19
|
+
{
|
|
20
|
+
name: 'commands ask',
|
|
21
|
+
decision: 'ask',
|
|
22
|
+
classes: ['execute'],
|
|
23
|
+
reason: 'a person sees every command first',
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
name: 'nothing deleted outside',
|
|
27
|
+
decision: 'deny',
|
|
28
|
+
classes: ['delete'],
|
|
29
|
+
where: 'outside',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
name: 'no pushes',
|
|
33
|
+
decision: 'deny',
|
|
34
|
+
commands: ['git push*'],
|
|
35
|
+
},
|
|
36
|
+
],
|
|
37
|
+
limits: {
|
|
38
|
+
tool_calls: { soft: 200, hard: 400 },
|
|
39
|
+
model_tokens: { soft: 200000, hard: 500000 },
|
|
40
|
+
spend: { soft: 500, hard: 1000 },
|
|
41
|
+
},
|
|
42
|
+
harnesses: { admit: ['claude-code', 'codex'], credentials: 'account' },
|
|
43
|
+
};
|
|
44
|
+
/** One row per class: what the organization's document decides for it, in words. */
|
|
45
|
+
export function classRows(shield, policy = ORGANIZATION_POLICY) {
|
|
46
|
+
return shield.ACTION_CLASSES.map(actionClass => {
|
|
47
|
+
const rule = (policy.rules ?? []).find(item => (item.classes ?? []).includes(actionClass));
|
|
48
|
+
return {
|
|
49
|
+
actionClass,
|
|
50
|
+
says: rule
|
|
51
|
+
? `${shield.VERDICT_WORDS[rule.decision]} — '${rule.name}'${rule.where && rule.where !== 'any' ? ` (${rule.where} the workspace)` : ''}`
|
|
52
|
+
: 'nothing said: the next level decides',
|
|
53
|
+
};
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
/** ACP's tool kinds and the class each is decided as (§4.5). */
|
|
57
|
+
export function kindRows(shield) {
|
|
58
|
+
return shield.TOOL_KINDS.map(kind => ({
|
|
59
|
+
kind,
|
|
60
|
+
actionClass: shield.KIND_CLASS[kind] ?? 'nothing to decide',
|
|
61
|
+
}));
|
|
62
|
+
}
|
|
63
|
+
/** The limits a document sets, soft then hard, in the sentences' words. */
|
|
64
|
+
export function limitRows(shield, policy = ORGANIZATION_POLICY) {
|
|
65
|
+
return shield.LIMIT_NAMES.flatMap(name => {
|
|
66
|
+
const threshold = policy.limits?.[name];
|
|
67
|
+
return threshold
|
|
68
|
+
? [
|
|
69
|
+
{
|
|
70
|
+
limit: shield.LIMIT_WORDS[name],
|
|
71
|
+
soft: String(threshold.soft),
|
|
72
|
+
hard: String(threshold.hard),
|
|
73
|
+
},
|
|
74
|
+
]
|
|
75
|
+
: [];
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/** Decisions as the Shield returns them. */
|
|
79
|
+
export const DECISIONS = [
|
|
80
|
+
{
|
|
81
|
+
verdict: 'allow',
|
|
82
|
+
sentence: 'Edit main.py: do it',
|
|
83
|
+
scope: 'session',
|
|
84
|
+
rule: 'edit and move inside the workspace',
|
|
85
|
+
decided_by: 'rule',
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
verdict: 'ask',
|
|
89
|
+
sentence: 'Run `pytest`: ask me first',
|
|
90
|
+
scope: 'organization',
|
|
91
|
+
rule: 'commands ask',
|
|
92
|
+
decided_by: 'rule',
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
verdict: 'deny',
|
|
96
|
+
sentence: 'a model request: refused',
|
|
97
|
+
scope: 'organization',
|
|
98
|
+
decided_by: 'limit',
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
verdict: 'ask',
|
|
102
|
+
sentence: 'Fetch https://example.com/: ask me first',
|
|
103
|
+
decided_by: 'default',
|
|
104
|
+
},
|
|
105
|
+
];
|
|
106
|
+
/** Each decision and its words through `describeDecision`. */
|
|
107
|
+
export function decisionRows(shield) {
|
|
108
|
+
return DECISIONS.map(decision => ({
|
|
109
|
+
sentence: decision.sentence,
|
|
110
|
+
words: shield.describeDecision(decision),
|
|
111
|
+
}));
|
|
112
|
+
}
|
package/lib/specs/harnesses.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* This file is AUTO-GENERATED from YAML specifications.
|
|
7
7
|
* DO NOT EDIT MANUALLY - run 'make specs' to regenerate.
|
|
8
8
|
*/
|
|
9
|
-
import type { HarnessSpec } from '../types/agentspecs';
|
|
9
|
+
import type { HarnessSpec, ListedHarness } from '../types/agentspecs';
|
|
10
10
|
export declare const CLAUDE_CODE_HARNESS_0_0_1: HarnessSpec;
|
|
11
11
|
export declare const CODEX_HARNESS_0_0_1: HarnessSpec;
|
|
12
12
|
export declare const CUSTOM_HARNESS_0_0_1: HarnessSpec;
|
|
@@ -20,3 +20,11 @@ export declare const HARNESS_CATALOGUE: Record<string, HarnessSpec>;
|
|
|
20
20
|
export declare function getHarness(harnessId: string): HarnessSpec | undefined;
|
|
21
21
|
/** Every harness of the catalogue. */
|
|
22
22
|
export declare function listHarnesses(): HarnessSpec[];
|
|
23
|
+
/**
|
|
24
|
+
* The register's listed tier (SH-57): agents known to speak ACP, registered
|
|
25
|
+
* with their documented command and their terms, not drilled — offered by
|
|
26
|
+
* nothing until moved to the catalogue.
|
|
27
|
+
*/
|
|
28
|
+
export declare const LISTED_HARNESSES: ListedHarness[];
|
|
29
|
+
/** The sentence a listed harness is refused in (agentspecs' LISTED_NOT_DRILLED). */
|
|
30
|
+
export declare const LISTED_NOT_DRILLED = "listed, not drilled yet";
|
package/lib/specs/harnesses.js
CHANGED
|
@@ -370,3 +370,516 @@ export function getHarness(harnessId) {
|
|
|
370
370
|
export function listHarnesses() {
|
|
371
371
|
return Object.values(HARNESS_CATALOGUE);
|
|
372
372
|
}
|
|
373
|
+
/**
|
|
374
|
+
* The register's listed tier (SH-57): agents known to speak ACP, registered
|
|
375
|
+
* with their documented command and their terms, not drilled — offered by
|
|
376
|
+
* nothing until moved to the catalogue.
|
|
377
|
+
*/
|
|
378
|
+
export const LISTED_HARNESSES = [
|
|
379
|
+
{
|
|
380
|
+
id: 'agentpool',
|
|
381
|
+
name: 'AgentPool',
|
|
382
|
+
docs: 'https://phil65.github.io/agentpool/advanced/acp-integration/',
|
|
383
|
+
adapter: 'agentpool',
|
|
384
|
+
version: '2.9.18',
|
|
385
|
+
command: 'agentpool serve-acp agents.yml',
|
|
386
|
+
licence: 'MIT',
|
|
387
|
+
licenceSource: 'https://github.com/phil65/agentpool/blob/main/LICENSE',
|
|
388
|
+
termsSource: 'https://github.com/phil65/agentpool/blob/main/LICENSE',
|
|
389
|
+
credential: "The configured provider's key (e.g. OPENAI_API_KEY in the agents YAML or the environment)",
|
|
390
|
+
servedToThirdParties: 'permitted',
|
|
391
|
+
note: "The ACP integration page documents agentpool serve-acp agents.yml (and uvx agentpool serve-acp for Zed). A multi-agent bridge that can wrap other ACP agents, which keep their own vendors' terms.",
|
|
392
|
+
},
|
|
393
|
+
{
|
|
394
|
+
id: 'augment-code',
|
|
395
|
+
name: 'Auggie CLI (Augment Code)',
|
|
396
|
+
docs: 'https://docs.augmentcode.com/cli/acp',
|
|
397
|
+
adapter: '@augmentcode/auggie',
|
|
398
|
+
version: '0.36.0',
|
|
399
|
+
command: 'auggie --acp',
|
|
400
|
+
licence: 'Proprietary (Augment CLI licence)',
|
|
401
|
+
licenceSource: 'https://github.com/augmentcode/auggie/blob/main/LICENSE.md',
|
|
402
|
+
termsSource: 'https://www.augmentcode.com/terms-of-service',
|
|
403
|
+
credential: 'An Augment Code account with an active subscription (auggie login)',
|
|
404
|
+
servedToThirdParties: 'refused',
|
|
405
|
+
note: 'LICENSE.md grants use only subject to an active subscription and says the CLI may not be embedded or integrated into commercially sold or distributed services without explicit permission.',
|
|
406
|
+
},
|
|
407
|
+
{
|
|
408
|
+
id: 'autodev',
|
|
409
|
+
name: 'AutoDev (Xiuper)',
|
|
410
|
+
docs: 'https://github.com/phodal/auto-dev',
|
|
411
|
+
adapter: '@xiuper/cli',
|
|
412
|
+
version: '1.0.2',
|
|
413
|
+
command: 'xiuper acp',
|
|
414
|
+
licence: 'MPL-2.0',
|
|
415
|
+
licenceSource: 'https://github.com/phodal/auto-dev/blob/master/LICENSE',
|
|
416
|
+
termsSource: 'https://github.com/phodal/auto-dev/blob/master/LICENSE',
|
|
417
|
+
credential: "The configured LLM provider's key (AutoDev's configuration)",
|
|
418
|
+
servedToThirdParties: 'permitted',
|
|
419
|
+
note: 'The README never mentions ACP; the command is the usage line of AcpAgentServer.ts, documented only in source. Whether npm 1.0.2 ships the ACP server was not confirmed.',
|
|
420
|
+
},
|
|
421
|
+
{
|
|
422
|
+
id: 'blackbox-ai',
|
|
423
|
+
name: 'BLACKBOX AI CLI',
|
|
424
|
+
docs: 'https://docs.blackbox.ai/features/blackbox-cli/acp-integration',
|
|
425
|
+
adapter: 'blackbox (installed by blackbox.ai/install.sh)',
|
|
426
|
+
version: '',
|
|
427
|
+
command: 'blackbox --experimental-acp',
|
|
428
|
+
licence: 'Proprietary (Blackbox terms of service)',
|
|
429
|
+
licenceSource: 'https://www.blackbox.ai/terms-of-service',
|
|
430
|
+
termsSource: 'https://www.blackbox.ai/terms-of-service',
|
|
431
|
+
credential: 'A Blackbox AI API key (BLACKBOX_API_KEY)',
|
|
432
|
+
servedToThirdParties: 'refused',
|
|
433
|
+
note: 'The terms forbid making the Services available to any third party or commercially exploiting them. No official package version confirmed.',
|
|
434
|
+
},
|
|
435
|
+
{
|
|
436
|
+
id: 'bub',
|
|
437
|
+
name: 'Bub',
|
|
438
|
+
docs: 'https://github.com/bubbuild/bub-contrib/tree/main/packages/bub-acp-server',
|
|
439
|
+
adapter: 'bub-acp-server',
|
|
440
|
+
version: '0.1.1',
|
|
441
|
+
command: 'bub acp',
|
|
442
|
+
licence: 'Apache-2.0',
|
|
443
|
+
licenceSource: 'https://github.com/bubbuild/bub-contrib/blob/main/LICENSE',
|
|
444
|
+
termsSource: 'https://github.com/bubbuild/bub/blob/main/LICENSE',
|
|
445
|
+
credential: 'A provider key (BUB_API_KEY); its OpenAI Codex login is a subscription credential, refused for third parties',
|
|
446
|
+
servedToThirdParties: 'permitted',
|
|
447
|
+
note: 'The bub-acp-server README documents bub acp (bub acp serve is deprecated); bub itself is 0.5.1 on PyPI.',
|
|
448
|
+
},
|
|
449
|
+
{
|
|
450
|
+
id: 'claw-orchestrator',
|
|
451
|
+
name: 'Claw Orchestrator',
|
|
452
|
+
docs: 'https://github.com/Enderfga/claw-orchestrator/blob/main/skills/references/acp.md',
|
|
453
|
+
adapter: '@enderfga/claw-orchestrator',
|
|
454
|
+
version: '7.11.0',
|
|
455
|
+
command: 'clawo acp',
|
|
456
|
+
licence: 'MIT',
|
|
457
|
+
licenceSource: 'https://github.com/Enderfga/claw-orchestrator/blob/main/LICENSE',
|
|
458
|
+
termsSource: 'https://github.com/Enderfga/claw-orchestrator/blob/main/LICENSE',
|
|
459
|
+
credential: 'The logins or keys of the engines it drives (Claude Code, Codex, OpenCode, …)',
|
|
460
|
+
servedToThirdParties: 'permitted',
|
|
461
|
+
note: "It orchestrates other vendors' CLIs, whose own terms still apply (Claude Code and Codex take an API key only).",
|
|
462
|
+
},
|
|
463
|
+
{
|
|
464
|
+
id: 'cline',
|
|
465
|
+
name: 'Cline',
|
|
466
|
+
docs: 'https://docs.cline.bot/usage/acp',
|
|
467
|
+
adapter: 'cline',
|
|
468
|
+
version: '3.0.71',
|
|
469
|
+
command: 'cline --acp',
|
|
470
|
+
licence: 'Apache-2.0',
|
|
471
|
+
licenceSource: 'https://github.com/cline/cline/blob/main/LICENSE',
|
|
472
|
+
termsSource: 'https://cline.bot/tos',
|
|
473
|
+
credential: "The person's own provider API key (a Cline account's keys may not be transferred or resold)",
|
|
474
|
+
servedToThirdParties: 'permitted',
|
|
475
|
+
note: "Cline's terms cover its hosted account and Cline-provided keys, forbidding their transfer or resale; served to third parties with each person's own provider key.",
|
|
476
|
+
},
|
|
477
|
+
{
|
|
478
|
+
id: 'code-assistant',
|
|
479
|
+
name: 'Code Assistant',
|
|
480
|
+
docs: 'https://github.com/stippi/code-assistant?tab=readme-ov-file#configuration',
|
|
481
|
+
adapter: 'code-assistant (GitHub release binary)',
|
|
482
|
+
version: '0.2.16',
|
|
483
|
+
command: 'code-assistant acp',
|
|
484
|
+
licence: 'MIT',
|
|
485
|
+
licenceSource: 'https://github.com/stippi/code-assistant/blob/main/LICENSE',
|
|
486
|
+
termsSource: 'https://github.com/stippi/code-assistant/blob/main/LICENSE',
|
|
487
|
+
credential: "The configured provider's key (e.g. ANTHROPIC_API_KEY)",
|
|
488
|
+
servedToThirdParties: 'permitted',
|
|
489
|
+
note: 'The README documents code-assistant acp; prebuilt downloads or cargo build, not on crates.io.',
|
|
490
|
+
},
|
|
491
|
+
{
|
|
492
|
+
id: 'construct',
|
|
493
|
+
name: 'construct',
|
|
494
|
+
docs: 'https://github.com/construct-worlds/construct#acp-agent-client-protocol-server',
|
|
495
|
+
adapter: 'construct (install.sh or GitHub release)',
|
|
496
|
+
version: '0.17.13',
|
|
497
|
+
command: 'construct acp',
|
|
498
|
+
licence: 'MIT',
|
|
499
|
+
licenceSource: 'https://github.com/construct-worlds/construct/blob/main/LICENSE',
|
|
500
|
+
termsSource: 'https://github.com/construct-worlds/construct/blob/main/LICENSE',
|
|
501
|
+
credential: "Provider API keys, or the logins of the harnesses it drives (whose vendors' terms apply)",
|
|
502
|
+
servedToThirdParties: 'permitted',
|
|
503
|
+
note: "An ACP stdio server over its daemon, driving other CLIs; their vendors' terms govern those logins.",
|
|
504
|
+
},
|
|
505
|
+
{
|
|
506
|
+
id: 'crow-cli',
|
|
507
|
+
name: 'crow-cli',
|
|
508
|
+
docs: 'https://github.com/crow-cli/crow-cli',
|
|
509
|
+
adapter: 'crow-cli',
|
|
510
|
+
version: '0.1.48',
|
|
511
|
+
command: 'crow-cli acp',
|
|
512
|
+
licence: 'MIT',
|
|
513
|
+
licenceSource: 'https://github.com/crow-cli/crow-cli/blob/main/LICENSE.md',
|
|
514
|
+
termsSource: 'https://github.com/crow-cli/crow-cli/blob/main/LICENSE.md',
|
|
515
|
+
credential: 'An API key for an OpenAI-compatible provider',
|
|
516
|
+
servedToThirdParties: 'permitted',
|
|
517
|
+
note: 'GitHub and PyPI say MIT, the ACP registry Apache-2.0; the LICENSE file is read here.',
|
|
518
|
+
},
|
|
519
|
+
{
|
|
520
|
+
id: 'cuga',
|
|
521
|
+
name: 'CUGA',
|
|
522
|
+
docs: 'https://github.com/cuga-project/cuga-agent/tree/main/docs/examples/acp_stdio',
|
|
523
|
+
adapter: 'cuga[acp]',
|
|
524
|
+
version: '0.4.1',
|
|
525
|
+
command: 'cuga-acp',
|
|
526
|
+
licence: 'Apache-2.0',
|
|
527
|
+
licenceSource: 'https://github.com/cuga-project/cuga-agent/blob/main/LICENSE',
|
|
528
|
+
termsSource: 'https://github.com/cuga-project/cuga-agent/blob/main/LICENSE',
|
|
529
|
+
credential: "The configured provider's key (e.g. OPENAI_API_KEY)",
|
|
530
|
+
servedToThirdParties: 'permitted',
|
|
531
|
+
note: "IBM's Configurable Generalist Agent; the acp_stdio example documents pip install cuga[acp] and cuga-acp.",
|
|
532
|
+
},
|
|
533
|
+
{
|
|
534
|
+
id: 'cursor',
|
|
535
|
+
name: 'Cursor CLI',
|
|
536
|
+
docs: 'https://cursor.com/docs/cli/acp',
|
|
537
|
+
adapter: 'agent (Cursor CLI, installed from cursor.com)',
|
|
538
|
+
version: '2026.10.14',
|
|
539
|
+
command: 'agent acp',
|
|
540
|
+
licence: 'Proprietary (Cursor terms of service)',
|
|
541
|
+
licenceSource: 'https://cursor.com/terms-of-service',
|
|
542
|
+
termsSource: 'https://cursor.com/terms-of-service',
|
|
543
|
+
credential: 'A Cursor login or a Cursor API key (CURSOR_API_KEY)',
|
|
544
|
+
servedToThirdParties: 'unknown',
|
|
545
|
+
note: "The terms forbid renting, leasing, lending or selling the Service and say nothing of a platform running the CLI on each person's own credential.",
|
|
546
|
+
},
|
|
547
|
+
{
|
|
548
|
+
id: 'docker-agent',
|
|
549
|
+
name: 'Docker Agent (formerly cagent)',
|
|
550
|
+
docs: 'https://docker.github.io/docker-agent/features/acp/',
|
|
551
|
+
adapter: 'docker-agent (Docker CLI plugin)',
|
|
552
|
+
version: '1.150.0',
|
|
553
|
+
command: 'docker agent serve acp ./agent.yaml',
|
|
554
|
+
licence: 'Apache-2.0',
|
|
555
|
+
licenceSource: 'https://github.com/docker/docker-agent/blob/main/LICENSE',
|
|
556
|
+
termsSource: 'https://github.com/docker/docker-agent/blob/main/LICENSE',
|
|
557
|
+
credential: "The configured provider's key (OPENAI_API_KEY, ANTHROPIC_API_KEY, …) or Docker Model Runner",
|
|
558
|
+
servedToThirdParties: 'permitted',
|
|
559
|
+
note: 'github.com/docker/cagent redirects to docker/docker-agent.',
|
|
560
|
+
},
|
|
561
|
+
{
|
|
562
|
+
id: 'factory-droid',
|
|
563
|
+
name: 'Factory Droid',
|
|
564
|
+
docs: 'https://docs.factory.com/ide-integrations.md',
|
|
565
|
+
adapter: 'droid',
|
|
566
|
+
version: '0.242.1',
|
|
567
|
+
command: 'droid exec --output-format acp',
|
|
568
|
+
licence: 'Proprietary (Factory terms of service)',
|
|
569
|
+
licenceSource: 'https://www.npmjs.com/package/droid',
|
|
570
|
+
termsSource: 'https://factory.ai/legal/terms-of-service',
|
|
571
|
+
credential: 'A Factory login or a Factory API key (FACTORY_API_KEY)',
|
|
572
|
+
servedToThirdParties: 'refused',
|
|
573
|
+
note: 'The terms forbid using the Services for timesharing or service bureau purposes or otherwise for the benefit of a third party. The ACP registry launches acp-daemon instead.',
|
|
574
|
+
},
|
|
575
|
+
{
|
|
576
|
+
id: 'fount',
|
|
577
|
+
name: 'fount',
|
|
578
|
+
docs: 'https://github.com/steve02081504/fount',
|
|
579
|
+
adapter: 'fount (ideIntegration shell, a deno bridge)',
|
|
580
|
+
version: '',
|
|
581
|
+
command: null,
|
|
582
|
+
licence: 'unknown',
|
|
583
|
+
licenceSource: 'https://github.com/steve02081504/fount/blob/master/LICENSE',
|
|
584
|
+
termsSource: 'https://github.com/steve02081504/fount',
|
|
585
|
+
credential: 'A fount API key plus the model sources configured in fount',
|
|
586
|
+
servedToThirdParties: 'unknown',
|
|
587
|
+
note: "Launch command undocumented: a deno bridge to fount's ACP WebSocket is named only in a source comment, with the key in its URL. The LICENSE file is an image; no licence is declared.",
|
|
588
|
+
},
|
|
589
|
+
{
|
|
590
|
+
id: 'github-copilot',
|
|
591
|
+
name: 'GitHub Copilot CLI',
|
|
592
|
+
docs: 'https://docs.github.com/en/copilot/reference/copilot-cli-reference/acp-server',
|
|
593
|
+
adapter: '@github/copilot',
|
|
594
|
+
version: '1.0.98',
|
|
595
|
+
command: 'copilot --acp --stdio',
|
|
596
|
+
licence: 'Proprietary (GitHub Copilot CLI License)',
|
|
597
|
+
licenceSource: 'https://github.com/github/copilot-cli/blob/main/LICENSE.md',
|
|
598
|
+
termsSource: 'https://docs.github.com/en/site-policy/github-terms/github-terms-for-additional-products-and-features',
|
|
599
|
+
credential: "A GitHub Copilot subscription login, or a provider of one's own (COPILOT_PROVIDER_*)",
|
|
600
|
+
servedToThirdParties: 'unknown',
|
|
601
|
+
note: "ACP in public preview. The CLI licence allows redistributing it inside a service adding material functionality; nothing read says whether a platform may run it on each person's Copilot login.",
|
|
602
|
+
},
|
|
603
|
+
{
|
|
604
|
+
id: 'hermes-agent',
|
|
605
|
+
name: 'Hermes Agent',
|
|
606
|
+
docs: 'https://hermes-agent.nousresearch.com/docs/user-guide/features/acp',
|
|
607
|
+
adapter: 'hermes-agent (with the acp extra)',
|
|
608
|
+
version: '0.22.2',
|
|
609
|
+
command: 'hermes acp',
|
|
610
|
+
licence: 'MIT',
|
|
611
|
+
licenceSource: 'https://github.com/NousResearch/hermes-agent/blob/main/LICENSE',
|
|
612
|
+
termsSource: 'https://github.com/NousResearch/hermes-agent/blob/main/LICENSE',
|
|
613
|
+
credential: "The configured provider's key, or a Nous Portal login",
|
|
614
|
+
servedToThirdParties: 'permitted',
|
|
615
|
+
note: 'Version from the GitHub release; PyPI lags at 0.19.0.',
|
|
616
|
+
},
|
|
617
|
+
{
|
|
618
|
+
id: 'junie',
|
|
619
|
+
name: 'Junie by JetBrains',
|
|
620
|
+
docs: 'https://junie.jetbrains.com/docs/junie-cli-acp.html',
|
|
621
|
+
adapter: 'junie (JetBrains/junie-acp-release)',
|
|
622
|
+
version: '3659.4',
|
|
623
|
+
command: 'junie --acp true',
|
|
624
|
+
licence: 'Proprietary (JetBrains AI Service terms)',
|
|
625
|
+
licenceSource: 'https://github.com/JetBrains/junie-acp-release',
|
|
626
|
+
termsSource: 'https://www.jetbrains.com/legal/docs/terms/jetbrains-ai-service/',
|
|
627
|
+
credential: "A JetBrains account entitled to JetBrains AI (models of one's own also taken)",
|
|
628
|
+
servedToThirdParties: 'refused',
|
|
629
|
+
note: "The terms forbid reselling or otherwise providing JetBrains AI or access to it to any third party without JetBrains' express permission.",
|
|
630
|
+
},
|
|
631
|
+
{
|
|
632
|
+
id: 'kaagum',
|
|
633
|
+
name: 'kaagum',
|
|
634
|
+
docs: 'https://git.systemreboot.net/kaagum/about/',
|
|
635
|
+
adapter: 'kaagum (Guix package)',
|
|
636
|
+
version: '0.1.0',
|
|
637
|
+
command: null,
|
|
638
|
+
licence: 'GPL-3.0-or-later',
|
|
639
|
+
licenceSource: 'https://git.systemreboot.net/kaagum/plain/COPYING',
|
|
640
|
+
termsSource: 'https://git.systemreboot.net/kaagum/plain/COPYING',
|
|
641
|
+
credential: 'An API key for an OpenAI-compatible provider (fetched through --api-key-command)',
|
|
642
|
+
servedToThirdParties: 'permitted',
|
|
643
|
+
note: 'Launch command undocumented as a command line: the page shows kaagum launched by Emacs agent-shell with --api-key-command and --model parameters.',
|
|
644
|
+
},
|
|
645
|
+
{
|
|
646
|
+
id: 'kimi-cli',
|
|
647
|
+
name: 'Kimi Code CLI',
|
|
648
|
+
docs: 'https://github.com/MoonshotAI/kimi-code#use-it-in-your-editor-acp',
|
|
649
|
+
adapter: '@moonshot-ai/kimi-code',
|
|
650
|
+
version: '2.2.0',
|
|
651
|
+
command: 'kimi acp',
|
|
652
|
+
licence: 'MIT',
|
|
653
|
+
licenceSource: 'https://github.com/MoonshotAI/kimi-code/blob/main/LICENSE',
|
|
654
|
+
termsSource: 'https://github.com/MoonshotAI/kimi-code/blob/main/LICENSE',
|
|
655
|
+
credential: 'A Kimi Code login or a Moonshot AI Open Platform API key',
|
|
656
|
+
servedToThirdParties: 'unknown',
|
|
657
|
+
note: "The ACP page links MoonshotAI/kimi-cli, archived; its successor Kimi Code keeps kimi acp. Moonshot's terms for the Kimi Code login were not read.",
|
|
658
|
+
},
|
|
659
|
+
{
|
|
660
|
+
id: 'kiro-cli',
|
|
661
|
+
name: 'Kiro CLI',
|
|
662
|
+
docs: 'https://kiro.dev/docs/cli/acp/',
|
|
663
|
+
adapter: 'kiro-cli (installed from kiro.dev)',
|
|
664
|
+
version: '',
|
|
665
|
+
command: 'kiro-cli acp',
|
|
666
|
+
licence: 'Proprietary (AWS Customer Agreement and AWS IP License)',
|
|
667
|
+
licenceSource: 'https://kiro.dev/license/',
|
|
668
|
+
termsSource: 'https://kiro.dev/license/',
|
|
669
|
+
credential: 'A Kiro login (GitHub, Google, AWS Builder ID, IAM Identity Center) or an API key',
|
|
670
|
+
servedToThirdParties: 'unknown',
|
|
671
|
+
note: 'No published version found; the AWS Customer Agreement was not read for serving to third parties.',
|
|
672
|
+
},
|
|
673
|
+
{
|
|
674
|
+
id: 'localharness',
|
|
675
|
+
name: 'localharness',
|
|
676
|
+
docs: 'https://github.com/compusophy/localharness#quickstart',
|
|
677
|
+
adapter: 'localharness (crates.io)',
|
|
678
|
+
version: '0.82.0',
|
|
679
|
+
command: 'localharness acp --as <name>',
|
|
680
|
+
licence: 'Apache-2.0',
|
|
681
|
+
licenceSource: 'https://github.com/compusophy/localharness/blob/main/LICENSE',
|
|
682
|
+
termsSource: 'https://github.com/compusophy/localharness/blob/main/LICENSE',
|
|
683
|
+
credential: "An on-chain agent identity (turns metered in its token) and a model provider's key",
|
|
684
|
+
servedToThirdParties: 'permitted',
|
|
685
|
+
note: 'Each prompt is a metered turn under the named on-chain persona.',
|
|
686
|
+
},
|
|
687
|
+
{
|
|
688
|
+
id: 'minion-code',
|
|
689
|
+
name: 'Minion Code',
|
|
690
|
+
docs: 'https://github.com/femto/minion-code',
|
|
691
|
+
adapter: 'minion-code',
|
|
692
|
+
version: '0.1.45',
|
|
693
|
+
command: 'mcode acp',
|
|
694
|
+
licence: 'AGPL-3.0',
|
|
695
|
+
licenceSource: 'https://github.com/femto/minion-code/blob/main/LICENSE',
|
|
696
|
+
termsSource: 'https://github.com/femto/minion-code/blob/main/LICENSE',
|
|
697
|
+
credential: "The configured provider's key",
|
|
698
|
+
servedToThirdParties: 'permitted',
|
|
699
|
+
note: "The LICENSE file says AGPL-3.0 while the README says MIT; the file is read here. AGPL's network clause applies if modified.",
|
|
700
|
+
},
|
|
701
|
+
{
|
|
702
|
+
id: 'mistral-vibe',
|
|
703
|
+
name: 'Mistral Vibe',
|
|
704
|
+
docs: 'https://github.com/mistralai/mistral-vibe/blob/main/docs/acp-setup.md',
|
|
705
|
+
adapter: 'mistral-vibe',
|
|
706
|
+
version: '2.26.1',
|
|
707
|
+
command: 'vibe-acp',
|
|
708
|
+
licence: 'Apache-2.0',
|
|
709
|
+
licenceSource: 'https://github.com/mistralai/mistral-vibe/blob/main/LICENSE',
|
|
710
|
+
termsSource: 'https://github.com/mistralai/mistral-vibe/blob/main/LICENSE',
|
|
711
|
+
credential: 'A Mistral API key (MISTRAL_API_KEY)',
|
|
712
|
+
servedToThirdParties: 'permitted',
|
|
713
|
+
note: "Mistral's API terms govern the key itself.",
|
|
714
|
+
},
|
|
715
|
+
{
|
|
716
|
+
id: 'muse-spark-code',
|
|
717
|
+
name: 'Muse Spark Code',
|
|
718
|
+
docs: 'https://github.com/RandyNorthrup/muse-spark-code/blob/main/docs/acp.md',
|
|
719
|
+
adapter: 'muse-spark-code-acp',
|
|
720
|
+
version: '0.18.2',
|
|
721
|
+
command: 'muse-spark-code-acp',
|
|
722
|
+
licence: 'MIT',
|
|
723
|
+
licenceSource: 'https://github.com/RandyNorthrup/muse-spark-code/blob/main/LICENSE',
|
|
724
|
+
termsSource: 'https://github.com/RandyNorthrup/muse-spark-code/blob/main/LICENSE',
|
|
725
|
+
credential: 'A Muse Code subscription, or a Meta Model API key (--backend modelApi)',
|
|
726
|
+
servedToThirdParties: 'unknown',
|
|
727
|
+
note: "Unofficial, not endorsed by Meta; Meta's Muse terms were not read.",
|
|
728
|
+
},
|
|
729
|
+
{
|
|
730
|
+
id: 'openclaw',
|
|
731
|
+
name: 'OpenClaw',
|
|
732
|
+
docs: 'https://docs.openclaw.ai/cli/acp',
|
|
733
|
+
adapter: 'openclaw',
|
|
734
|
+
version: '2026.10.3',
|
|
735
|
+
command: 'openclaw acp',
|
|
736
|
+
licence: 'MIT',
|
|
737
|
+
licenceSource: 'https://github.com/openclaw/openclaw/blob/main/LICENSE',
|
|
738
|
+
termsSource: 'https://github.com/openclaw/openclaw/blob/main/LICENSE',
|
|
739
|
+
credential: "An OpenClaw Gateway token, with the Gateway's configured model providers",
|
|
740
|
+
servedToThirdParties: 'permitted',
|
|
741
|
+
note: 'Bridges ACP to an OpenClaw Gateway, whose providers keep their own terms.',
|
|
742
|
+
},
|
|
743
|
+
{
|
|
744
|
+
id: 'pi',
|
|
745
|
+
name: 'pi (through pi-acp)',
|
|
746
|
+
docs: 'https://github.com/svkozak/pi-acp',
|
|
747
|
+
adapter: 'pi-acp',
|
|
748
|
+
version: '0.0.34',
|
|
749
|
+
command: 'npx -y pi-acp',
|
|
750
|
+
licence: 'MIT',
|
|
751
|
+
licenceSource: 'https://github.com/svkozak/pi-acp/blob/main/LICENSE',
|
|
752
|
+
termsSource: 'https://github.com/svkozak/pi-acp/blob/main/LICENSE',
|
|
753
|
+
credential: "pi's configured provider's API key (a subscription login carries its provider's terms)",
|
|
754
|
+
servedToThirdParties: 'permitted',
|
|
755
|
+
note: 'Spawns pi --mode rpc from @earendil-works/pi-coding-agent (MIT).',
|
|
756
|
+
},
|
|
757
|
+
{
|
|
758
|
+
id: 'poolside',
|
|
759
|
+
name: 'Poolside (pool)',
|
|
760
|
+
docs: 'https://github.com/poolsideai/pool',
|
|
761
|
+
adapter: 'pool (binary from downloads.poolside.ai)',
|
|
762
|
+
version: '1.0.16',
|
|
763
|
+
command: 'pool acp',
|
|
764
|
+
licence: 'Proprietary (Poolside End User License Agreement)',
|
|
765
|
+
licenceSource: 'https://github.com/poolsideai/pool/blob/main/LICENSE.md',
|
|
766
|
+
termsSource: 'https://poolside.ai/eula',
|
|
767
|
+
credential: 'A Poolside login or POOLSIDE_API_KEY',
|
|
768
|
+
servedToThirdParties: 'refused',
|
|
769
|
+
note: 'The EULA forbids making a Product available to third parties as a standalone offering, commercial time-sharing or service bureau use, and sharing account credentials.',
|
|
770
|
+
},
|
|
771
|
+
{
|
|
772
|
+
id: 'qoder-cli',
|
|
773
|
+
name: 'Qoder CLI',
|
|
774
|
+
docs: 'https://docs.qoder.com/cli/acp',
|
|
775
|
+
adapter: '@qoder-ai/qodercli',
|
|
776
|
+
version: '1.1.72',
|
|
777
|
+
command: 'qoder --acp',
|
|
778
|
+
licence: 'Proprietary (Qoder terms of service)',
|
|
779
|
+
licenceSource: 'https://qoder.com/product-service',
|
|
780
|
+
termsSource: 'https://qoder.com/product-service',
|
|
781
|
+
credential: 'A Qoder account login',
|
|
782
|
+
servedToThirdParties: 'refused',
|
|
783
|
+
note: "The terms say an account is solely for one's own individual use and forbid any third party's access to it.",
|
|
784
|
+
},
|
|
785
|
+
{
|
|
786
|
+
id: 'qwen-code',
|
|
787
|
+
name: 'Qwen Code',
|
|
788
|
+
docs: 'https://qwenlm.github.io/qwen-code-docs/en/users/integration-zed/',
|
|
789
|
+
adapter: '@qwen-code/qwen-code',
|
|
790
|
+
version: '0.25.2',
|
|
791
|
+
command: 'qwen --acp',
|
|
792
|
+
licence: 'Apache-2.0',
|
|
793
|
+
licenceSource: 'https://github.com/QwenLM/qwen-code/blob/main/LICENSE',
|
|
794
|
+
termsSource: 'https://github.com/QwenLM/qwen-code/blob/main/LICENSE',
|
|
795
|
+
credential: "The configured provider's key (set with /auth)",
|
|
796
|
+
servedToThirdParties: 'permitted',
|
|
797
|
+
note: 'The flag is now --acp, not --experimental-acp; the ACP registry adds --experimental-skills.',
|
|
798
|
+
},
|
|
799
|
+
{
|
|
800
|
+
id: 'raven',
|
|
801
|
+
name: 'Raven',
|
|
802
|
+
docs: 'https://evermind-ai.github.io/Raven/agent-protocols/',
|
|
803
|
+
adapter: 'raven (a release wheel installed as a uv tool)',
|
|
804
|
+
version: '0.2.4',
|
|
805
|
+
command: 'raven acp',
|
|
806
|
+
licence: 'Apache-2.0',
|
|
807
|
+
licenceSource: 'https://github.com/EverMind-AI/Raven/blob/main/LICENSE',
|
|
808
|
+
termsSource: 'https://github.com/EverMind-AI/Raven/blob/main/LICENSE',
|
|
809
|
+
credential: "The configured model provider's key",
|
|
810
|
+
servedToThirdParties: 'permitted',
|
|
811
|
+
note: 'Not on PyPI under its own name (raven-agent there is another project).',
|
|
812
|
+
},
|
|
813
|
+
{
|
|
814
|
+
id: 'raxol',
|
|
815
|
+
name: 'Raxol',
|
|
816
|
+
docs: 'https://github.com/DROOdotFOO/raxol/blob/master/docs/features/CODING_AGENT.md',
|
|
817
|
+
adapter: 'raxol (raxol-cli release)',
|
|
818
|
+
version: '2.7.0',
|
|
819
|
+
command: 'bin/raxol-acp',
|
|
820
|
+
licence: 'MIT',
|
|
821
|
+
licenceSource: 'https://github.com/DROOdotFOO/raxol/blob/master/LICENSE.md',
|
|
822
|
+
termsSource: 'https://github.com/DROOdotFOO/raxol/blob/master/LICENSE.md',
|
|
823
|
+
credential: "The configured provider's API key",
|
|
824
|
+
servedToThirdParties: 'permitted',
|
|
825
|
+
note: "The docs call ACP a repository-checkout feature (bin/raxol-acp or mix raxol.acp); the ACP page's raxol acp comes from the raxol-cli release, not the Hex package.",
|
|
826
|
+
},
|
|
827
|
+
{
|
|
828
|
+
id: 'sigit',
|
|
829
|
+
name: 'siGit Code',
|
|
830
|
+
docs: 'https://github.com/getsigit/sigit#acp-support',
|
|
831
|
+
adapter: '@getsigit/sigit',
|
|
832
|
+
version: '1.7.0',
|
|
833
|
+
command: 'sigit --acp',
|
|
834
|
+
licence: 'Apache-2.0',
|
|
835
|
+
licenceSource: 'https://github.com/getsigit/sigit/blob/main/LICENSE',
|
|
836
|
+
termsSource: 'https://github.com/getsigit/sigit/blob/main/LICENSE',
|
|
837
|
+
credential: 'None (an on-device model); cloud inference credentials optional',
|
|
838
|
+
servedToThirdParties: 'permitted',
|
|
839
|
+
note: 'Also on PyPI as sigit-code and crates.io as sigit; the ACP registry lists @smbcloud/sigit.',
|
|
840
|
+
},
|
|
841
|
+
{
|
|
842
|
+
id: 'stakpak',
|
|
843
|
+
name: 'Stakpak',
|
|
844
|
+
docs: 'https://github.com/stakpak/agent?tab=readme-ov-file#agent-client-protocol-acp',
|
|
845
|
+
adapter: 'stakpak (crates.io or GitHub release)',
|
|
846
|
+
version: '0.3.88',
|
|
847
|
+
command: 'stakpak acp',
|
|
848
|
+
licence: 'Apache-2.0',
|
|
849
|
+
licenceSource: 'https://github.com/stakpak/agent/blob/main/LICENSE',
|
|
850
|
+
termsSource: 'https://github.com/stakpak/agent/blob/main/LICENSE',
|
|
851
|
+
credential: "The person's own Anthropic or OpenAI key, or a Stakpak API key (STAKPAK_API_KEY)",
|
|
852
|
+
servedToThirdParties: 'permitted',
|
|
853
|
+
note: "Stakpak's hosted-key service terms were not read; the open-source client with one's own key is what is permitted.",
|
|
854
|
+
},
|
|
855
|
+
{
|
|
856
|
+
id: 'stdio-bus',
|
|
857
|
+
name: 'stdio Bus',
|
|
858
|
+
docs: 'https://github.com/stdiobus/stdiobus',
|
|
859
|
+
adapter: 'stdio_bus kernel and @stdiobus/workers-registry',
|
|
860
|
+
version: '2.0.3',
|
|
861
|
+
command: null,
|
|
862
|
+
licence: 'Apache-2.0',
|
|
863
|
+
licenceSource: 'https://github.com/stdiobus/stdiobus/blob/main/LICENSE',
|
|
864
|
+
termsSource: 'https://github.com/stdiobus/stdiobus/blob/main/LICENSE',
|
|
865
|
+
credential: "The routed worker's (an OpenAI-compatible key, or the ACP registry worker's keys)",
|
|
866
|
+
servedToThirdParties: 'permitted',
|
|
867
|
+
note: "Launch command undocumented: a routing kernel, not one agent; only its workers' launches are documented.",
|
|
868
|
+
},
|
|
869
|
+
{
|
|
870
|
+
id: 'vtcode',
|
|
871
|
+
name: 'VT Code',
|
|
872
|
+
docs: 'https://github.com/vinhnx/VTCode/blob/main/docs/guides/zed-acp.md',
|
|
873
|
+
adapter: 'vtcode (crates.io)',
|
|
874
|
+
version: '0.177.0',
|
|
875
|
+
command: 'vtcode acp',
|
|
876
|
+
licence: 'MIT OR Apache-2.0',
|
|
877
|
+
licenceSource: 'https://github.com/vinhnx/VTCode/blob/main/LICENSE',
|
|
878
|
+
termsSource: 'https://github.com/vinhnx/VTCode/blob/main/LICENSE',
|
|
879
|
+
credential: "The configured provider's key (an unofficial ChatGPT login path exists; refused here)",
|
|
880
|
+
servedToThirdParties: 'permitted',
|
|
881
|
+
note: "Its README warns its ChatGPT OAuth reuses the Codex CLI's identity unofficially and recommends one's own OpenAI key.",
|
|
882
|
+
},
|
|
883
|
+
];
|
|
884
|
+
/** The sentence a listed harness is refused in (agentspecs' LISTED_NOT_DRILLED). */
|
|
885
|
+
export const LISTED_NOT_DRILLED = 'listed, not drilled yet';
|