agents-united 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -17,7 +17,7 @@ Curated teams of orchestrators, sub-agents, skills, and workflows — installed
17
17
 
18
18
  - **ðŸŠķ Essentials-First & On-Demand Growth**: Every department installs as a lean **Essentials bundle** by default. When a task requires specialized capabilities, the Lead Orchestrator automatically detects the gap, recommends the exact addon, and can auto-install it directly into your project scope.
19
19
  - **🌐 One Library, Every Assistant**: Author in `.agents/` as your single source of truth. Agents United automatically projects and translates compatible configurations to **Google Antigravity 2.0 / Gemini**, **Anthropic Claude Code**, **Cursor**, **Cline**, **OpenCode**, and **Codex / AGENTS.md**.
20
- - **🚀 Cline Native Activation**: Launch specialized teams into Cline CLI sessions with `agents start`, featuring packaged native plugins with `package.json` manifests in `.agents/plugins/<bundle>/`, skill toolkits, coordinator rules, and declarative team manifests.
20
+ - **🚀 Cline Native Activation**: Bundles activate **automatically** in any Cline CLI session — skills discovered natively from `.agents/skills/`, configured-agent roles (`.cline/agents/*.yml`) exposed as spawnable `subagent_*` tools, coordinator rules (`.cline/rules/`), slash-command workflows (`.cline/workflows/`), and spec-conformant Agent Plugin packages (`plugin.json`, agent-plugins.org) in `.agents/plugins/<bundle>/`. No install step required; `agents start` remains available as an optional pre-seeded team-session launcher.
21
21
  - **🏛ïļ 8 Department Domains & 26 Bundles**: Complete coverage across Software Engineering, System Architecture, Product Design, Growth & Marketing, Security, Deep Research, Business Strategy, and Universal Meta-Skills.
22
22
  - **ðŸĪ– 58 Specialized Agents, 91 Skills & 69 Workflows**: 8 Lead Orchestrators coordinating 50 domain sub-agents, backed by 91 production-grade runbooks and 69 deterministic workflows.
23
23
  - **⚡ Modern Cloud & AI Tooling**: First-class runbooks for Modal.com, Replicate, RunPod, local LLMs/vLLM, LangChain, LlamaIndex, Qdrant, Vercel, Supabase, Turso, and Azure Bicep.
@@ -297,9 +297,13 @@ agents remove mobile-development -g -y
297
297
  ---
298
298
 
299
299
  ### `agents start <bundle> [prompt]`
300
- Starts an installed team bundle in its host runtime. **By design, this command currently targets the Cline CLI** because Cline provides an open, programmatic CLI (`cline "prompt"`) that allows us to inject a team context directly from the terminal (unlike other editors which do not yet expose this).
300
+ Launches an **optional pre-seeded team session** in the Cline CLI. Activation itself is automatic (ADR 0013 native discovery): after `agents add`, *any* `cline` session in the workspace already sees the bundle's skills, `subagent_*` agent tools, rules, and workflow commands. What `agents start` adds on top:
301
301
 
302
- It automatically resolves project vs. global installations, verifies that Cline projections are up-to-date, probes for the `cline` executable on your system, constructs safe non-shell evaluated arguments, and launches the session.
302
+ 1. **Coordinator persona bootstrap** — the session starts *as* the bundle's Lead Orchestrator (reads the Team Manifest and coordinator role prompt).
303
+ 2. **Persistent team state** — `--team-name au-<bundle>-<hash>` gives a resumable team board (`~/.cline/data/teams/`).
304
+ 3. **Addon pre-authorization** — `--allow-addons` skips per-addon consent prompts for the session.
305
+
306
+ **By design, this command currently targets the Cline CLI** because Cline provides an open, programmatic CLI (`cline "prompt"`) that allows us to inject a team context directly from the terminal (unlike other editors which do not yet expose this). It automatically resolves project vs. global installations, probes for the `cline` executable on your system (Windows node-wrapper, `cmd.exe` shim bridge, or POSIX binary), constructs safe non-shell evaluated arguments, and launches the session.
303
307
 
304
308
  ```bash
305
309
  # Start an installed team in Cline
@@ -363,7 +367,7 @@ Audits workspace agent directories, verifies frontmatter schema validity, valida
363
367
  # General workspace health audit
364
368
  agents doctor
365
369
 
366
- # Audit Cline runtime installation, capability probe, and compound projection integrity
370
+ # Audit Cline runtime installation, capability probe, and native discovery projection integrity
367
371
  agents doctor --host cline
368
372
  ```
369
373
 
package/dist/cli.js CHANGED
@@ -342,47 +342,115 @@ import path4 from "path";
342
342
  import fs2 from "fs-extra";
343
343
  var ClineProjector = class {
344
344
  /**
345
- * Render a Cline role definition from canonical agent markdown content.
345
+ * Managed marker inserted after YAML frontmatter in every rendered artifact.
346
346
  */
347
- static renderRole(canonicalContent, canonicalRelPath) {
347
+ static marker(canonicalRelPath) {
348
348
  const normCanonical = canonicalRelPath.replace(/\\/g, "/");
349
- const marker = `<!-- managed-by: agents-united | profile: cline | canonical: ${normCanonical} | do not edit -->`;
350
- const preamble = `## Cline runtime note
349
+ return `<!-- managed-by: agents-united | profile: cline | canonical: ${normCanonical} | do not edit -->`;
350
+ }
351
+ static runtimeNote = `## Cline runtime note
351
352
 
352
353
  Use the equivalent capabilities available in this Cline session. Canonical tool names describe
353
- intent and may differ from Cline's runtime tool names. For delegation, prefer Agent Teams when
354
- available, then session subagents; otherwise complete the role in the main session.`;
354
+ intent and may differ from Cline's runtime tool names. For delegation, prefer the configured
355
+ subagent_* agent tools (projected under .cline/agents/), then session subagents; otherwise
356
+ complete the role in the main session.`;
357
+ /**
358
+ * Strip the canonical `subagent-` prefix. Cline prefixes configured-agent tool
359
+ * names with `subagent_` itself, so keeping the prefix would produce names like
360
+ * `subagent_subagent_marketing_growth_strategist`.
361
+ */
362
+ static stripSubagentPrefix(name) {
363
+ return name.trim().replace(/^subagent-/, "");
364
+ }
365
+ /**
366
+ * Slugify a workflow display name into a usable slash-command name
367
+ * (e.g. "Digital Agency Full-Funnel Campaign Orchestration" -> "digital-agency-full-funnel-campaign-orchestration").
368
+ */
369
+ static slugifyWorkflowName(name) {
370
+ return name.trim().toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "");
371
+ }
372
+ /**
373
+ * Render a Cline Configured Agent definition (.cline/agents/<role>.yml) from
374
+ * canonical agent markdown content. Cline 3.x consumes YAML files with
375
+ * frontmatter (name, description) and treats the body as the agent system prompt.
376
+ */
377
+ static renderConfiguredAgent(canonicalContent, canonicalRelPath) {
355
378
  const match = canonicalContent.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n([\s\S]*)$/);
356
379
  if (!match) {
357
- return `${marker}
358
-
359
- ${preamble}
360
-
361
- ${canonicalContent.trim()}`;
380
+ throw new Error(`Canonical agent ${canonicalRelPath} is missing YAML frontmatter.`);
362
381
  }
363
- const rawYaml = match[1];
364
- const rawBody = match[2];
365
382
  let parsed = {};
366
383
  try {
367
- parsed = yaml.parse(rawYaml) || {};
384
+ parsed = yaml.parse(match[1]) || {};
368
385
  } catch {
369
386
  parsed = {};
370
387
  }
371
- const cleanFrontmatter = {};
372
- if (parsed.name) cleanFrontmatter.name = parsed.name;
373
- if (parsed.description) cleanFrontmatter.description = parsed.description;
374
- if (parsed.providerId) cleanFrontmatter.providerId = parsed.providerId;
375
- if (parsed.modelId) cleanFrontmatter.modelId = parsed.modelId;
376
- if (parsed.cwd) cleanFrontmatter.cwd = parsed.cwd;
377
- if (parsed.maxIterations) cleanFrontmatter.maxIterations = parsed.maxIterations;
388
+ const baseName = canonicalRelPath.replace(/\\/g, "/").split("/").pop() ?? "";
389
+ const rawName = typeof parsed.name === "string" && parsed.name.trim().length > 0 ? parsed.name.trim() : baseName.replace(/\.md$/i, "");
390
+ const cleanFrontmatter = {
391
+ name: this.stripSubagentPrefix(rawName)
392
+ };
393
+ if (typeof parsed.description === "string" && parsed.description.trim().length > 0) {
394
+ cleanFrontmatter.description = parsed.description.trim();
395
+ }
378
396
  const frontmatterStr = yaml.stringify(cleanFrontmatter).trim();
379
- const bodyStr = rawBody.trim();
397
+ const bodyStr = match[2].trim();
380
398
  return `---
381
399
  ${frontmatterStr}
382
400
  ---
383
- ${marker}
401
+ ${this.marker(canonicalRelPath)}
402
+
403
+ ${this.runtimeNote}
384
404
 
385
- ${preamble}
405
+ ${bodyStr}
406
+ `;
407
+ }
408
+ /**
409
+ * Derive the slash-command slug for a workflow from its frontmatter name,
410
+ * falling back to the canonical filename. Kept separate from the renderer so the
411
+ * projection filename and the frontmatter `name` are guaranteed to match.
412
+ */
413
+ static workflowSlug(canonicalContent, canonicalRelPath) {
414
+ const match = canonicalContent.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n([\s\S]*)$/);
415
+ let humanName;
416
+ if (match) {
417
+ try {
418
+ const parsed = yaml.parse(match[1]) || {};
419
+ if (typeof parsed.name === "string" && parsed.name.trim().length > 0) {
420
+ humanName = parsed.name.trim();
421
+ }
422
+ } catch {
423
+ }
424
+ }
425
+ const baseName = canonicalRelPath.replace(/\\/g, "/").split("/").pop() ?? "";
426
+ return this.slugifyWorkflowName(humanName ?? baseName.replace(/\.md$/i, ""));
427
+ }
428
+ /**
429
+ * Render a Cline workflow projection (.cline/workflows/<slug>.md). The frontmatter
430
+ * `name` is slugified so the workflow surfaces as a usable /<slug> command; the
431
+ * human-readable title stays in `description` and the untouched body.
432
+ */
433
+ static renderWorkflowProjection(canonicalContent, canonicalRelPath) {
434
+ const slug = this.workflowSlug(canonicalContent, canonicalRelPath);
435
+ const match = canonicalContent.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n([\s\S]*)$/);
436
+ let description;
437
+ if (match) {
438
+ try {
439
+ const parsed = yaml.parse(match[1]) || {};
440
+ if (typeof parsed.description === "string" && parsed.description.trim().length > 0) {
441
+ description = parsed.description.trim();
442
+ }
443
+ } catch {
444
+ }
445
+ }
446
+ const cleanFrontmatter = { name: slug };
447
+ if (description) cleanFrontmatter.description = description;
448
+ const frontmatterStr = yaml.stringify(cleanFrontmatter).trim();
449
+ const bodyStr = match ? match[2].trim() : canonicalContent.trim();
450
+ return `---
451
+ ${frontmatterStr}
452
+ ---
453
+ ${this.marker(canonicalRelPath)}
386
454
 
387
455
  ${bodyStr}
388
456
  `;
@@ -480,7 +548,7 @@ ${marker}
480
548
 
481
549
  ## Activation Protocol
482
550
  1. At session start, read the Team Manifest (\`${manifestRelPath}\`) and coordinator role prompt (\`.agents/${coordinatorCanonical}\`).
483
- 2. Delegate specialist tasks using **Agent Teams** (\`team_spawn_teammate\`, \`team_delegate_task\`) when available, assigning non-overlapping scopes.
551
+ 2. Delegate specialist tasks using the configured \`subagent_*\` agent tools (projected under \`.cline/agents/\`) when available, assigning non-overlapping scopes; fall back to Agent Teams (\`team_spawn_teammate\`) or session subagents as needed.
484
552
  3. For lightweight read-only research, use session subagents.
485
553
  4. Only specialist roles declared in the Team Manifest are active in this workspace.
486
554
  ${specialistLines.length > 0 ? `
@@ -497,23 +565,16 @@ ${addonSection}
497
565
  static async planCompoundProjection(bundle, scope, resolved, registryDir, excludeAddons = []) {
498
566
  const artifacts = [];
499
567
  const baseDir = `.agents/plugins/${bundle.name}`;
500
- const pluginManifest = {
501
- name: `agents-united-${bundle.name}`,
502
- version: "1.0.0",
503
- description: bundle.description || "",
504
- cline: {
505
- plugins: [
506
- {
507
- capabilities: ["skills", "tools", "workflows"],
508
- skills: ["./skills"]
509
- }
510
- ]
511
- }
568
+ const agentPluginManifest = {
569
+ $schema: "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
570
+ name: bundle.name,
571
+ version: bundle.version || "1.0.0",
572
+ description: bundle.description || ""
512
573
  };
513
574
  artifacts.push({
514
575
  kind: "plugin-manifest",
515
- relPath: `${baseDir}/package.json`.replace(/\\/g, "/"),
516
- content: JSON.stringify(pluginManifest, null, 2),
576
+ relPath: `${baseDir}/plugin.json`.replace(/\\/g, "/"),
577
+ content: JSON.stringify(agentPluginManifest, null, 2),
517
578
  managedMarker: false
518
579
  });
519
580
  for (const agentFile of resolved.agents) {
@@ -521,11 +582,12 @@ ${addonSection}
521
582
  const srcPath = path4.join(registryDir, "agents", agentFile);
522
583
  if (await fs2.pathExists(srcPath)) {
523
584
  const content = await fs2.readFile(srcPath, "utf8");
524
- const rendered = this.renderRole(content, canonicalRel);
585
+ const rendered = this.renderConfiguredAgent(content, canonicalRel);
586
+ const roleName = this.stripSubagentPrefix(agentFile.replace(/\.md$/i, ""));
525
587
  artifacts.push({
526
588
  kind: "role",
527
589
  canonical: canonicalRel,
528
- relPath: `${baseDir}/agents/${agentFile}`.replace(/\\/g, "/"),
590
+ relPath: `.cline/agents/${roleName}.yml`.replace(/\\/g, "/"),
529
591
  content: rendered,
530
592
  managedMarker: true
531
593
  });
@@ -564,10 +626,26 @@ ${addonSection}
564
626
  }
565
627
  }
566
628
  }
629
+ for (const workflowFile of resolved.workflows) {
630
+ const canonicalRel = `workflows/${workflowFile}`;
631
+ const srcPath = path4.join(registryDir, "workflows", workflowFile);
632
+ if (await fs2.pathExists(srcPath)) {
633
+ const content = await fs2.readFile(srcPath, "utf8");
634
+ const slug = this.workflowSlug(content, canonicalRel);
635
+ const rendered = this.renderWorkflowProjection(content, canonicalRel);
636
+ artifacts.push({
637
+ kind: "workflow",
638
+ canonical: canonicalRel,
639
+ relPath: `.cline/workflows/${slug}.md`.replace(/\\/g, "/"),
640
+ content: rendered,
641
+ managedMarker: true
642
+ });
643
+ }
644
+ }
567
645
  const ruleContent = this.renderCoordinatorRule(bundle, scope, excludeAddons);
568
646
  artifacts.push({
569
647
  kind: "rule",
570
- relPath: `${baseDir}/rules/agents-united-${bundle.name}.md`.replace(/\\/g, "/"),
648
+ relPath: `.cline/rules/agents-united-${bundle.name}.md`.replace(/\\/g, "/"),
571
649
  content: ruleContent,
572
650
  managedMarker: true
573
651
  });
@@ -675,7 +753,7 @@ var HostProjector = class _HostProjector {
675
753
  return { content: content2, warnings };
676
754
  }
677
755
  if (profile === "cline") {
678
- const content2 = ClineProjector.renderRole(md, canonicalRelPath);
756
+ const content2 = ClineProjector.renderConfiguredAgent(md, canonicalRelPath);
679
757
  return { content: content2, warnings };
680
758
  }
681
759
  const out = {};
@@ -1014,21 +1092,6 @@ var InstallEngine = class _InstallEngine {
1014
1092
  }
1015
1093
  }
1016
1094
  }
1017
- if (lockfile.files) {
1018
- for (const [canonKey, fileMeta] of Object.entries(lockfile.files)) {
1019
- if (fileMeta.projectedTo) {
1020
- const staleClinePaths = fileMeta.projectedTo.filter((p) => p.startsWith(".cline/"));
1021
- for (const stalePath of staleClinePaths) {
1022
- const absPath = path5.join(root, stalePath);
1023
- if (await fs3.pathExists(absPath)) {
1024
- await fs3.remove(absPath);
1025
- await this.removeEmptyProjectionDirs(root, stalePath);
1026
- }
1027
- this.removeProjectedTo(lockfile, canonKey, stalePath);
1028
- }
1029
- }
1030
- }
1031
- }
1032
1095
  for (const artifact of artifacts) {
1033
1096
  const dest = path5.join(root, artifact.relPath);
1034
1097
  if (await fs3.pathExists(dest) && !options.force) {
@@ -1116,7 +1179,8 @@ var InstallEngine = class _InstallEngine {
1116
1179
  const content = await fs3.readFile(path5.join(registryDir, "agents", agentFile), "utf8");
1117
1180
  const canonicalRel = this.canonicalRelAgent(agentFile);
1118
1181
  const res = HostProjector.projectAgent(content, HOST_REGISTRY[host].profile, canonicalRel);
1119
- const dest = path5.join(base, subdir, agentFile);
1182
+ const projName = host === "cline" ? `${agentFile.replace(/\.md$/i, "").replace(/^subagent-/, "")}.yml` : agentFile;
1183
+ const dest = path5.join(base, subdir, projName);
1120
1184
  if (await fs3.pathExists(dest) && !options.force) {
1121
1185
  const existing = await fs3.readFile(dest, "utf8");
1122
1186
  if (!HostProjector.hasManagedMarker(existing)) {
@@ -2030,6 +2094,14 @@ var ClineCapabilityProbe = class {
2030
2094
  source: "node-wrapper"
2031
2095
  };
2032
2096
  }
2097
+ const ext = path9.extname(fullPath).toLowerCase();
2098
+ if (ext === ".cmd" || ext === ".bat") {
2099
+ return {
2100
+ executable: "cmd.exe",
2101
+ prefixArgs: ["/c", fullPath],
2102
+ source: "path-executable"
2103
+ };
2104
+ }
2033
2105
  return {
2034
2106
  executable: fullPath,
2035
2107
  prefixArgs: [],
@@ -2202,7 +2274,7 @@ var DoctorEngine = class {
2202
2274
  for (const [projRelPath, proj] of Object.entries(manifest.projections)) {
2203
2275
  const absPath = path10.join(workspaceRoot, projRelPath);
2204
2276
  if (!await fs8.pathExists(absPath)) {
2205
- warnings.push(`Missing compound projection ${projRelPath} (owners: ${proj.owners.join(", ")}).`);
2277
+ warnings.push(`Missing Cline projection ${projRelPath} (owners: ${proj.owners.join(", ")}).`);
2206
2278
  continue;
2207
2279
  }
2208
2280
  if (proj.managedMarker) {
@@ -2373,14 +2445,14 @@ var ClineLauncher = class _ClineLauncher {
2373
2445
  const coordinatorFile = (orchestrator || "orchestrator-engineering.md").replace(/\.md$/, "");
2374
2446
  const coordinatorCanonical = `.agents/agents/${coordinatorFile}.md`;
2375
2447
  const addonPolicyText = allowAddons ? "Addon auto-installation is pre-authorized for this session." : `Before installing any recommended addon, explain the requirement to the user and request explicit confirmation to run: agents add <addon> -t cline ${scope === "global" ? "-g " : ""}-y.`;
2376
- const pluginInstallText = `Before proceeding, ensure you have installed this bundle's plugin by running: cline plugin install .agents/plugins/${bundleName}`;
2448
+ const deploymentNoteText = `Deployment note: this bundle is already projected natively for this workspace (skills, rules, workflows, and configured subagent roles) - no "cline plugin install" step is needed.`;
2377
2449
  const taskText = prompt && prompt.trim().length > 0 ? `User task: ${prompt.trim()}` : "Please introduce your coordinator role to the user and ask for their first task.";
2378
2450
  const bootstrapPrompt = [
2379
2451
  `You are coordinating the "${bundleName}" team in Agents United.`,
2380
2452
  `Read the Team Manifest at "${manifestRel}" and your coordinator role definition at "${coordinatorCanonical}" before acting.`,
2381
2453
  `Use specialist roles only when necessary.`,
2382
2454
  addonPolicyText,
2383
- pluginInstallText,
2455
+ deploymentNoteText,
2384
2456
  taskText
2385
2457
  ].join("\n\n");
2386
2458
  const argv = [...command.prefixArgs];
@@ -3344,7 +3416,7 @@ cli.command("add [identifier]", "Add a bundle, agent, skill, or workflow to proj
3344
3416
  {
3345
3417
  value: "cline",
3346
3418
  label: HOST_REGISTRY.cline.label,
3347
- hint: detectedHosts.includes("cline") ? "found in this project" : "roles, skills, coordinator rules & team manifests for Cline"
3419
+ hint: detectedHosts.includes("cline") ? "found in this project" : "configured agents, skills, rules, workflows & team manifests for Cline"
3348
3420
  },
3349
3421
  {
3350
3422
  value: "opencode",
@@ -3699,6 +3771,12 @@ ${renderProjections(result.projections)}` : ""),
3699
3771
  "Installation Success"
3700
3772
  );
3701
3773
  const hasClineProjection = result.projections.some((p) => p.host === "cline");
3774
+ if (hasClineProjection && !options.dryRun) {
3775
+ note(
3776
+ pc.green(`Already active: any Cline session in this workspace now sees this bundle's skills, subagent_* agent tools, rules & workflow commands (ADR 0013 native discovery).`),
3777
+ "Native Activation"
3778
+ );
3779
+ }
3702
3780
  if (options.start && !hasClineProjection) {
3703
3781
  throw new Error("--start requires Cline projection. Add -t cline or --fanout cline.");
3704
3782
  }
@@ -3762,8 +3840,10 @@ ${renderProjections(result.projections)}` : ""),
3762
3840
  if (!options.dryRun && hosts.includes("agents") && result.projections.length === 0) {
3763
3841
  note(
3764
3842
  pc.yellow(
3765
- `Tip: only Antigravity reads the main library (.agents/) directly.
3766
- To use this bundle in Cline, Claude Code & others: agents update ${identifier} --fanout cline,claude`
3843
+ `Tip: Antigravity reads the main library (.agents/) directly, and Cline natively
3844
+ discovers skills from .agents/skills/ (ADR 0013). For Cline configured agents,
3845
+ rules & workflows run: agents update ${identifier} --fanout cline
3846
+ (add claude, cursor, opencode, codex for other assistants)`
3767
3847
  ),
3768
3848
  "One library, every assistant"
3769
3849
  );
@@ -3974,8 +4054,8 @@ Updates Available: ${report.outdatedCount > 0 ? pc.yellow(pc.bold(`${report.outd
3974
4054
  if (unprojected.length > 0) {
3975
4055
  note(
3976
4056
  pc.yellow(
3977
- `Tip: not synced to other assistants yet (only Antigravity reads .agents/).
3978
- To add Cline & friends: agents update ${unprojected[0]} --fanout cline,claude`
4057
+ `Tip: not fully synced to other assistants yet (Antigravity reads .agents/ directly; Cline natively discovers .agents/skills/).
4058
+ For Cline configured agents, rules & workflows: agents update ${unprojected[0]} --fanout cline`
3979
4059
  ),
3980
4060
  "One library, every assistant"
3981
4061
  );
@@ -4398,6 +4478,12 @@ Projections:
4398
4478
  ${renderProjections(result.projections)}` : ""),
4399
4479
  "Installation Success"
4400
4480
  );
4481
+ if (result.projections.some((p) => p.host === "cline")) {
4482
+ note(
4483
+ pc.green(`Already active: any Cline session in this workspace now sees this bundle's skills, subagent_* agent tools, rules & workflow commands (ADR 0013 native discovery). Use "agents start ${bundle.name}" for a pre-seeded team session.`),
4484
+ "Native Activation"
4485
+ );
4486
+ }
4401
4487
  outro(pc.green(`\u2728 Installation of "${bundle.name}" complete!`));
4402
4488
  } catch (err) {
4403
4489
  installSpinner.stop(pc.red("Installation failed"));
@@ -4453,7 +4539,7 @@ cli.command("list", "List available bundles grouped by department domain").alias
4453
4539
  domainOptions.push({
4454
4540
  value: "__full_tree__",
4455
4541
  label: "\u{1F333} View Full Static Catalog Tree",
4456
- hint: "expand all 18 bundles and 8 departments at once"
4542
+ hint: `expand all ${bundles.length} bundles and ${new Set(bundles.map((b) => b.domain).filter(Boolean)).size} departments at once`
4457
4543
  });
4458
4544
  const selectedDomain = await select({
4459
4545
  message: "Select Department Domain to explore:",
@@ -4730,10 +4816,11 @@ cli.command("doctor", "Verify health of installed agents, frontmatter schemas, a
4730
4816
  console.log(pc.bold(pc.cyan("\u{1F4A1} Get Started:")));
4731
4817
  console.log(` \u{1F449} ${pc.bold("agents add")} Launch the interactive installation wizard`);
4732
4818
  console.log(` \u{1F449} ${pc.bold("agents add software-engineering")} Install the engineering essentials team`);
4733
- console.log(` \u{1F449} ${pc.bold("agents list")} Browse all 23 bundles and 8 departments
4819
+ const bundleCount = (await registry.listBundles()).length;
4820
+ console.log(` \u{1F449} ${pc.bold("agents list")} Browse all ${bundleCount} bundles by department
4734
4821
  `);
4735
4822
  if (report.clineCapability) {
4736
- console.log(pc.bold(pc.cyan("Cline Runtime & Compound Projection Audit:")));
4823
+ console.log(pc.bold(pc.cyan("Cline Runtime & Native Discovery Audit:")));
4737
4824
  console.log(` Installed: ${report.clineCapability.installed ? pc.green("\u2714 Detected") : pc.yellow("\u2716 Not Found")}`);
4738
4825
  if (report.clineCapability.version) {
4739
4826
  console.log(` Version: ${report.clineCapability.version}`);
@@ -4754,13 +4841,13 @@ cli.command("doctor", "Verify health of installed agents, frontmatter schemas, a
4754
4841
  console.log(` \u{1F504} Installed Workflows: ${pc.bold(report.workflowsCount.toString())}
4755
4842
  `);
4756
4843
  if (report.clineCapability) {
4757
- console.log(pc.bold(pc.cyan("Cline Runtime & Compound Projection Audit:")));
4844
+ console.log(pc.bold(pc.cyan("Cline Runtime & Native Discovery Audit:")));
4758
4845
  console.log(` Installed: ${report.clineCapability.installed ? pc.green("\u2714 Detected") : pc.yellow("\u2716 Not Found")}`);
4759
4846
  if (report.clineCapability.version) {
4760
4847
  console.log(` Version: ${report.clineCapability.version}`);
4761
4848
  }
4762
4849
  console.log(` Named Teams: ${report.clineCapability.namedTeams ? pc.green("\u2714 Supported") : pc.yellow("\u2716 Unsupported (Adaptive fallback)")}`);
4763
- console.log(` Role Definitions: ${report.agentsCount} prepared (activation via "agents start")
4850
+ console.log(` Configured Agents: ${report.agentsCount} active natively in any Cline session ("agents start" = optional team-session launcher)
4764
4851
  `);
4765
4852
  }
4766
4853
  if (report.issues.length > 0) {