@autohq/cli 0.1.424 → 0.1.426

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/index.js CHANGED
@@ -20373,6 +20373,37 @@ var init_mcp = __esm({
20373
20373
  }
20374
20374
  });
20375
20375
 
20376
+ // ../../packages/schemas/src/onboarding-runs.ts
20377
+ var ONBOARDING_RUN_SLUG_PATTERN, OnboardingRunTeamIdSchema, OnboardingRunPhaseSchema, OnboardingRunEvidenceSchema, ProjectOnboardingRunSnapshotSchema;
20378
+ var init_onboarding_runs = __esm({
20379
+ "../../packages/schemas/src/onboarding-runs.ts"() {
20380
+ "use strict";
20381
+ init_zod();
20382
+ init_primitives();
20383
+ ONBOARDING_RUN_SLUG_PATTERN = /^[a-z][a-z0-9_-]*$/;
20384
+ OnboardingRunTeamIdSchema = external_exports.string().trim().min(1).max(64).regex(
20385
+ ONBOARDING_RUN_SLUG_PATTERN,
20386
+ "team id must be a lowercase slug (letters, digits, '_' or '-')"
20387
+ );
20388
+ OnboardingRunPhaseSchema = external_exports.string().trim().min(1).max(64).regex(
20389
+ ONBOARDING_RUN_SLUG_PATTERN,
20390
+ "phase must be a lowercase slug (letters, digits, '_' or '-')"
20391
+ );
20392
+ OnboardingRunEvidenceSchema = JsonObjectSchema;
20393
+ ProjectOnboardingRunSnapshotSchema = external_exports.object({
20394
+ id: external_exports.string().min(1),
20395
+ teamId: OnboardingRunTeamIdSchema,
20396
+ phase: OnboardingRunPhaseSchema,
20397
+ evidence: OnboardingRunEvidenceSchema,
20398
+ /** Monotonic per-run write counter; also the phase_changed dedup clock. */
20399
+ revision: external_exports.number().int().positive(),
20400
+ completedAt: external_exports.string().datetime().nullable(),
20401
+ createdAt: external_exports.string().datetime(),
20402
+ updatedAt: external_exports.string().datetime()
20403
+ });
20404
+ }
20405
+ });
20406
+
20376
20407
  // ../../packages/schemas/src/organization-settings.ts
20377
20408
  var OrganizationIdentityPolicySchema, UpdateOrganizationIdentityPolicyRequestSchema, UpdateOrganizationSettingsRequestSchema;
20378
20409
  var init_organization_settings = __esm({
@@ -35957,11 +35988,1088 @@ var init_subscription = __esm({
35957
35988
  });
35958
35989
 
35959
35990
  // ../../packages/schemas/src/templates/catalog.ts
35960
- import "yaml";
35991
+ import { parse as parseYaml } from "yaml";
35992
+ function plannedCatalogAgent(input) {
35993
+ return {
35994
+ ...input,
35995
+ files: [
35996
+ {
35997
+ subpath: `agents/${input.id}.yaml`,
35998
+ agentFileName: input.id
35999
+ }
36000
+ ],
36001
+ harness: "claude-code",
36002
+ model: "claude-fable-5",
36003
+ triggers: [],
36004
+ requires: ["github"],
36005
+ optionalConnections: [],
36006
+ variables: ["repoFullName", "githubConnection"],
36007
+ availability: "coming-soon",
36008
+ capabilitySummary: input.capabilitySummary ?? [],
36009
+ trustNotes: input.trustNotes ?? []
36010
+ };
36011
+ }
36012
+ function resolvedTemplateFileContent(template, subpath) {
36013
+ const versions = GENERATED_TEMPLATE_CONTENT[template];
36014
+ if (!versions) {
36015
+ return void 0;
36016
+ }
36017
+ const version2 = versions.reduce(
36018
+ (latest, candidate) => compareSemver(candidate.version, latest.version) > 0 ? candidate : latest
36019
+ );
36020
+ const file2 = version2.files.find((candidate) => candidate.path === subpath);
36021
+ return file2?.content;
36022
+ }
36023
+ function capabilitySummary(entry) {
36024
+ if (entry.capabilitySummary) {
36025
+ return entry.capabilitySummary;
36026
+ }
36027
+ const primary = entry.files[0];
36028
+ if (!primary) {
36029
+ return [];
36030
+ }
36031
+ const content = resolvedTemplateFileContent(entry.template, primary.subpath);
36032
+ if (!content) {
36033
+ return [];
36034
+ }
36035
+ const parsed = parseYaml(content);
36036
+ const capabilities = parsed.mounts?.find(
36037
+ (mount) => mount.auth?.kind === "githubApp"
36038
+ )?.auth?.capabilities;
36039
+ if (!capabilities) {
36040
+ return [];
36041
+ }
36042
+ return Object.entries(capabilities).filter(([, level]) => level !== "none").map(([name, level]) => `${name}:${level}`).sort();
36043
+ }
36044
+ var ROSTER_CATALOG_ENTRIES, ROSTER_CATALOG_MANIFEST, ROSTER_CATALOG, SELF_IMPROVEMENT, TEAM_TEMPLATES, ROSTER_KITS;
35961
36045
  var init_catalog = __esm({
35962
36046
  "../../packages/schemas/src/templates/catalog.ts"() {
35963
36047
  "use strict";
35964
- init_hardcoded();
36048
+ init_content_generated();
36049
+ init_registry();
36050
+ ROSTER_CATALOG_ENTRIES = [
36051
+ {
36052
+ id: "chief-of-staff",
36053
+ template: "@auto/agent-fleet",
36054
+ files: [
36055
+ {
36056
+ subpath: "agents/chief-of-staff.yaml",
36057
+ agentFileName: "chief-of-staff"
36058
+ },
36059
+ {
36060
+ subpath: "agents/staff-engineer.yaml",
36061
+ agentFileName: "staff-engineer"
36062
+ }
36063
+ ],
36064
+ displayName: "Chief of Staff Engineers",
36065
+ username: "chief",
36066
+ avatarAsset: "chief-of-staff-engineers.png",
36067
+ category: "engineering",
36068
+ oneLiner: "Takes a task list, dispatches staff engineers, shepherds them to green.",
36069
+ description: "The engineering orchestrator: hand it a task list in chat and it breaks the work down, dispatches a staff engineer per task, and keeps every open PR moving through CI, review, comments, and conflicts until you approve a merge. It can merge a ready PR only after your explicit go-ahead, then posts one collated progress packet. Installs its staff-engineer teammate alongside it.",
36070
+ harness: "claude-code",
36071
+ model: "claude-fable-5",
36072
+ triggers: [
36073
+ {
36074
+ kind: "agent",
36075
+ title: "Team dispatch",
36076
+ description: "Give it a task list and it assigns scoped work to staff engineers, then shepherds their progress.",
36077
+ availability: "core"
36078
+ },
36079
+ {
36080
+ kind: "slack",
36081
+ title: "Slack conversations",
36082
+ description: "Auto can connect Slack so you can mention it with a batch of work, reply in its thread, or steer with reactions.",
36083
+ availability: "optional",
36084
+ connection: "slack"
36085
+ },
36086
+ {
36087
+ kind: "github",
36088
+ title: "Engineer PR follow-through",
36089
+ description: "The staff engineer installed with it owns CI, review feedback, comments, and conflicts on each assigned PR.",
36090
+ availability: "core"
36091
+ },
36092
+ {
36093
+ kind: "schedule",
36094
+ title: "Background check-ins",
36095
+ description: "Every 15 minutes, it quietly checks active batches and nudges stalled work.",
36096
+ availability: "core"
36097
+ }
36098
+ ],
36099
+ requires: ["github"],
36100
+ optionalConnections: ["slack"],
36101
+ variables: ["repoFullName", "githubConnection"],
36102
+ trustNotes: [
36103
+ "Can merge only after a user delegates the merge and the readiness bar passes."
36104
+ ]
36105
+ },
36106
+ {
36107
+ id: "staff-engineer",
36108
+ template: "@auto/agent-fleet",
36109
+ files: [
36110
+ {
36111
+ subpath: "agents/staff-engineer.yaml",
36112
+ agentFileName: "staff-engineer"
36113
+ }
36114
+ ],
36115
+ displayName: "Staff Engineer",
36116
+ username: "staff-engineer",
36117
+ avatarAsset: "staff-engineer.png",
36118
+ category: "engineering",
36119
+ oneLiner: "Owns one task and its PR until you decide to merge or close it.",
36120
+ description: "The senior implementer: dispatched with a single scoped task, it explores the codebase, plans the change, implements it with tests, opens and binds the PR, and keeps handling CI failures, reviews, comments, and conflicts while the PR remains open. It reports milestones to its dispatcher and never merges the PR itself.",
36121
+ harness: "codex",
36122
+ model: "gpt-5.6-sol",
36123
+ triggers: [
36124
+ {
36125
+ kind: "agent",
36126
+ title: "Orchestrator dispatch",
36127
+ description: "Chief of Staff or another orchestrator can assign it one scoped task and track its milestones.",
36128
+ availability: "core"
36129
+ },
36130
+ {
36131
+ kind: "github",
36132
+ title: "PR ownership",
36133
+ description: "It stays with its PR through CI, review feedback, comments, and conflicts; a human decides whether to merge.",
36134
+ availability: "core"
36135
+ },
36136
+ {
36137
+ kind: "slack",
36138
+ title: "Invited thread discussion",
36139
+ description: "Auto can connect Slack so the chief can invite it into a named thread for direct discussion of its task.",
36140
+ availability: "optional",
36141
+ connection: "slack"
36142
+ }
36143
+ ],
36144
+ requires: ["github"],
36145
+ optionalConnections: ["slack"],
36146
+ variables: ["repoFullName", "githubConnection"]
36147
+ },
36148
+ {
36149
+ id: "senior-engineer",
36150
+ template: "@auto/engineering-tier",
36151
+ files: [
36152
+ {
36153
+ subpath: "agents/senior-engineer.yaml",
36154
+ agentFileName: "senior-engineer"
36155
+ }
36156
+ ],
36157
+ displayName: "Senior Engineer",
36158
+ username: "senior-engineer",
36159
+ avatarAsset: "architect.png",
36160
+ category: "engineering",
36161
+ oneLiner: "Owns a complex task and its PR until you decide to merge or close it.",
36162
+ description: "The senior implementer (Sonnet-class): dispatched with a scoped task, it explores the codebase, plans and implements with tests, binds the PR, and keeps handling CI, review feedback, comments, and conflicts while the PR remains open. It never merges the PR itself.",
36163
+ harness: "claude-code",
36164
+ model: "claude-sonnet-5",
36165
+ triggers: [
36166
+ {
36167
+ kind: "agent",
36168
+ title: "Orchestrator dispatch",
36169
+ description: "Chief of Staff or another orchestrator can assign it a complex scoped task and track its milestones.",
36170
+ availability: "core"
36171
+ },
36172
+ {
36173
+ kind: "github",
36174
+ title: "PR ownership",
36175
+ description: "It handles CI, reviews, comments, and conflicts for its PR; a human decides whether to merge.",
36176
+ availability: "core"
36177
+ },
36178
+ {
36179
+ kind: "slack",
36180
+ title: "Direct Slack tasks",
36181
+ description: "Auto can connect Slack so you can mention it with one task.",
36182
+ availability: "optional",
36183
+ connection: "slack"
36184
+ }
36185
+ ],
36186
+ requires: ["github"],
36187
+ optionalConnections: ["slack"],
36188
+ variables: ["repoFullName", "githubConnection"]
36189
+ },
36190
+ {
36191
+ id: "junior-engineer",
36192
+ template: "@auto/engineering-tier",
36193
+ files: [
36194
+ {
36195
+ subpath: "agents/junior-engineer.yaml",
36196
+ agentFileName: "junior-engineer"
36197
+ }
36198
+ ],
36199
+ displayName: "Junior Engineer",
36200
+ username: "junior-engineer",
36201
+ avatarAsset: "patch.png",
36202
+ category: "engineering",
36203
+ oneLiner: "Mechanical and batch coding work \u2014 renames, test backfills, straightforward edits.",
36204
+ description: "The junior implementer (Haiku-class): dispatched with mechanical or batch coding tasks, it handles bulk renames, find-and-replace, test backfills, and straightforward migrations. It opens and binds the PR, keeps handling CI, reviews, comments, and conflicts until you merge or close it, and defers design-heavy work to the senior engineer.",
36205
+ harness: "claude-code",
36206
+ model: "claude-haiku-4-5",
36207
+ triggers: [
36208
+ {
36209
+ kind: "agent",
36210
+ title: "Orchestrator dispatch",
36211
+ description: "Chief of Staff or another orchestrator can assign it a mechanical scoped task and track its milestones.",
36212
+ availability: "core"
36213
+ },
36214
+ {
36215
+ kind: "github",
36216
+ title: "PR ownership",
36217
+ description: "It handles CI, reviews, comments, and conflicts for its PR; a human decides whether to merge.",
36218
+ availability: "core"
36219
+ },
36220
+ {
36221
+ kind: "slack",
36222
+ title: "Direct Slack tasks",
36223
+ description: "Auto can connect Slack so you can mention it with one task.",
36224
+ availability: "optional",
36225
+ connection: "slack"
36226
+ }
36227
+ ],
36228
+ requires: ["github"],
36229
+ optionalConnections: ["slack"],
36230
+ variables: ["repoFullName", "githubConnection"]
36231
+ },
36232
+ {
36233
+ id: "designer",
36234
+ template: "@auto/engineering-tier",
36235
+ files: [
36236
+ {
36237
+ subpath: "agents/designer.yaml",
36238
+ agentFileName: "designer"
36239
+ }
36240
+ ],
36241
+ displayName: "Designer",
36242
+ username: "designer",
36243
+ avatarAsset: "mason.png",
36244
+ category: "engineering",
36245
+ oneLiner: "Live-iteration UI pairing \u2014 brings up the app, shares a link, iterates while you watch.",
36246
+ description: "The live-iteration UI agent (Opus-class, Claude Code harness): mention it with a UI request and it brings up the web app against the live backend, shares a tailnet-private link, and iterates on the interface while you watch in real time. Defers tests during iteration and graduates the work into a production PR when you ask.",
36247
+ harness: "claude-code",
36248
+ model: "claude-opus-4-8",
36249
+ triggers: [
36250
+ {
36251
+ kind: "slack",
36252
+ title: "Live Slack pairing",
36253
+ description: "Auto can connect Slack so you can request UI work and steer the live iteration in-thread.",
36254
+ availability: "optional",
36255
+ connection: "slack"
36256
+ },
36257
+ {
36258
+ kind: "github",
36259
+ title: "Production PR follow-through",
36260
+ description: "When you ask it to graduate the work, it owns CI, review feedback, comments, and conflicts on the PR.",
36261
+ availability: "core"
36262
+ }
36263
+ ],
36264
+ requires: ["github"],
36265
+ optionalConnections: ["slack"],
36266
+ variables: ["repoFullName", "githubConnection"]
36267
+ },
36268
+ {
36269
+ id: "introspector",
36270
+ template: "@auto/engineering-tier",
36271
+ files: [
36272
+ {
36273
+ subpath: "agents/introspector.yaml",
36274
+ agentFileName: "introspector"
36275
+ }
36276
+ ],
36277
+ displayName: "Introspector",
36278
+ username: "introspector",
36279
+ avatarAsset: "introspector.png",
36280
+ category: "factory",
36281
+ oneLiner: "Diagnoses failures, bottlenecks, and drift in sibling sessions.",
36282
+ description: "The session diagnostician: examines sibling agent sessions in the project \u2014 failed runs, slow sessions, behavior drift \u2014 and produces concrete, evidence-backed findings with recommended fixes. Runs on a standing heartbeat sweep or on direct mention, and hands actionable findings to the chief for triage.",
36283
+ harness: "claude-code",
36284
+ model: null,
36285
+ triggers: [
36286
+ {
36287
+ kind: "schedule",
36288
+ title: "Scheduled health sweep",
36289
+ description: "Every two hours, it checks sibling sessions for failures, drift, and bottlenecks.",
36290
+ availability: "core"
36291
+ },
36292
+ {
36293
+ kind: "slack",
36294
+ title: "On-demand diagnosis",
36295
+ description: "Auto can connect Slack so you can mention it for a focused session diagnosis.",
36296
+ availability: "optional",
36297
+ connection: "slack"
36298
+ }
36299
+ ],
36300
+ requires: [],
36301
+ optionalConnections: ["slack"],
36302
+ variables: ["repoFullName"]
36303
+ },
36304
+ {
36305
+ id: "pr-review",
36306
+ template: "@auto/code-review",
36307
+ files: [{ subpath: "agents/pr-review.yaml", agentFileName: "pr-review" }],
36308
+ displayName: "PR Review",
36309
+ username: "pr-review",
36310
+ avatarAsset: "pr-reviewer.png",
36311
+ category: "quality",
36312
+ oneLiner: "Reviews every pull request with one severity-ranked comment and a check.",
36313
+ description: "Reads the full diff of every pull request in context \u2014 the surrounding code, the repo's idioms, recent related changes \u2014 and posts exactly one severity-ranked review comment with a clear merge recommendation, reporting a commit check alongside it. Follows the PR conversation and can optionally report verdicts in Slack.",
36314
+ harness: "claude-code",
36315
+ model: "claude-opus-4-8",
36316
+ triggers: [
36317
+ {
36318
+ kind: "github",
36319
+ title: "Pull request review",
36320
+ description: "Reviews every PR when it opens, reopens, or receives a new push, then follows the review conversation.",
36321
+ availability: "core"
36322
+ },
36323
+ {
36324
+ kind: "slack",
36325
+ title: "Slack review verdicts",
36326
+ description: "Auto can connect Slack so PR Review also reports verdicts in #pr-review and responds to direct mentions.",
36327
+ availability: "optional",
36328
+ connection: "slack"
36329
+ }
36330
+ ],
36331
+ requires: ["github"],
36332
+ optionalConnections: ["slack"],
36333
+ variables: ["repoFullName", "githubConnection"]
36334
+ },
36335
+ {
36336
+ id: "issue-triage",
36337
+ template: "@auto/issue-triage",
36338
+ files: [
36339
+ { subpath: "agents/issue-triage.yaml", agentFileName: "issue-triage" },
36340
+ { subpath: "agents/issue-coder.yaml", agentFileName: "issue-coder" }
36341
+ ],
36342
+ displayName: "Issue Triage",
36343
+ username: "issue-triage",
36344
+ avatarAsset: "triage.png",
36345
+ category: "operations",
36346
+ oneLiner: "Triages new issues into implementation-ready work, then hands them to a coder.",
36347
+ description: "Reads every new issue as it lands, classifies and prioritizes it, and turns vague reports into implementation-ready work items. Clear issues can be handed directly to its issue-coder teammate; adding the one-shot auto-triage label requests another issue-bound triage pass. When the standard Slack connection is available, it also posts ready-work notes in #dev.",
36348
+ harness: "claude-code",
36349
+ model: "claude-opus-4-8",
36350
+ triggers: [
36351
+ {
36352
+ kind: "github",
36353
+ title: "Issue intake",
36354
+ description: "Triages new issues and runs another issue-bound pass when the auto-triage label is added.",
36355
+ availability: "core"
36356
+ },
36357
+ {
36358
+ kind: "slack",
36359
+ title: "Slack ready-work notes",
36360
+ description: "Auto can connect Slack so it posts ready-work notes in #dev and takes triage mentions.",
36361
+ availability: "optional",
36362
+ connection: "slack"
36363
+ }
36364
+ ],
36365
+ requires: ["github"],
36366
+ optionalConnections: ["slack"],
36367
+ variables: ["repoFullName", "githubConnection"],
36368
+ substrate: {
36369
+ role: "issue-triage",
36370
+ id: "github",
36371
+ label: "GitHub Issues",
36372
+ default: true
36373
+ }
36374
+ },
36375
+ {
36376
+ id: "issue-triage-linear",
36377
+ template: "@auto/issue-triage",
36378
+ files: [
36379
+ {
36380
+ subpath: "agents/issue-triage-linear.yaml",
36381
+ agentFileName: "issue-triage"
36382
+ },
36383
+ {
36384
+ subpath: "agents/issue-coder-linear.yaml",
36385
+ agentFileName: "issue-coder"
36386
+ }
36387
+ ],
36388
+ displayName: "Issue Triage",
36389
+ username: "issue-triage",
36390
+ avatarAsset: "triage.png",
36391
+ category: "operations",
36392
+ oneLiner: "Triages new issues into implementation-ready work, then hands them to a coder.",
36393
+ description: "Works from Linear as the source of truth: triages issues labeled auto-triage, classifies and prioritizes them, and turns vague reports into implementation-ready work items handed to its issue-coder teammate, which opens PRs and reports back on the Linear issue. When the standard Slack connection is available, it also posts ready-work notes in #dev.",
36394
+ harness: "claude-code",
36395
+ model: "claude-opus-4-8",
36396
+ triggers: [
36397
+ {
36398
+ kind: "linear",
36399
+ title: "Issue intake",
36400
+ description: "Triages Linear issues when the auto-triage label is added at creation or later.",
36401
+ availability: "core",
36402
+ connection: "linear"
36403
+ },
36404
+ {
36405
+ kind: "slack",
36406
+ title: "Slack ready-work notes",
36407
+ description: "Auto can connect Slack so it posts ready-work notes in #dev and takes triage mentions.",
36408
+ availability: "optional",
36409
+ connection: "slack"
36410
+ }
36411
+ ],
36412
+ requires: ["linear"],
36413
+ optionalConnections: ["slack"],
36414
+ variables: ["repoFullName", "linearConnection"],
36415
+ substrate: { role: "issue-triage", id: "linear", label: "Linear" }
36416
+ },
36417
+ {
36418
+ id: "ship-digest",
36419
+ template: "@auto/daily-digest",
36420
+ files: [
36421
+ { subpath: "agents/ship-digest.yaml", agentFileName: "ship-digest" }
36422
+ ],
36423
+ displayName: "Ship Digest",
36424
+ username: "ship-digest",
36425
+ avatarAsset: "ship-digest.png",
36426
+ category: "operations",
36427
+ oneLiner: "A daily shipped-code digest of everything your factory moved.",
36428
+ description: "A scheduled read-only analyst that compiles a daily digest of merged PRs, confirmed agent-authored work, notable changes, follow-ups, and idiom drift. It always delivers a run report and can also post the summary and full digest to Slack when the standard Slack connection is available.",
36429
+ harness: "claude-code",
36430
+ model: null,
36431
+ triggers: [
36432
+ {
36433
+ kind: "schedule",
36434
+ title: "Daily ship report",
36435
+ description: "Every morning, it compiles the previous 24 hours of shipped work and follow-ups.",
36436
+ availability: "core"
36437
+ },
36438
+ {
36439
+ kind: "slack",
36440
+ title: "Slack digest delivery",
36441
+ description: "Auto can connect Slack so it also posts the daily summary and full digest in #dev.",
36442
+ availability: "optional",
36443
+ connection: "slack"
36444
+ }
36445
+ ],
36446
+ requires: [],
36447
+ optionalConnections: ["slack"],
36448
+ variables: ["repoFullName"]
36449
+ },
36450
+ {
36451
+ id: "chatterbox",
36452
+ template: "@auto/chat-assistant",
36453
+ files: [{ subpath: "agents/assistant.yaml", agentFileName: "assistant" }],
36454
+ displayName: "Chatterbox",
36455
+ username: "assistant",
36456
+ avatarAsset: "chatterbox.png",
36457
+ category: "factory",
36458
+ oneLiner: "A quick conversational assistant for direct sessions or optional Slack chat.",
36459
+ description: "A lightweight conversational assistant for quick answers, drafting, summaries, and an Auto setup sanity check. Use it directly in a session, or connect Slack to mention Chatterbox and continue in a thread.",
36460
+ harness: "claude-code",
36461
+ model: null,
36462
+ triggers: [
36463
+ {
36464
+ kind: "slack",
36465
+ title: "Optional Slack chat",
36466
+ description: "Auto can connect Slack so you can mention Chatterbox and confirm Auto is installed, reachable, and responding.",
36467
+ availability: "optional",
36468
+ connection: "slack"
36469
+ }
36470
+ ],
36471
+ requires: [],
36472
+ optionalConnections: ["slack"],
36473
+ variables: []
36474
+ },
36475
+ {
36476
+ id: "self-improvement",
36477
+ template: "@auto/self-improvement",
36478
+ files: [
36479
+ {
36480
+ subpath: "agents/self-improvement.yaml",
36481
+ agentFileName: "self-improvement"
36482
+ }
36483
+ ],
36484
+ displayName: "Self Improvement",
36485
+ username: "self-improvement",
36486
+ avatarAsset: "self-improvement.png",
36487
+ category: "factory",
36488
+ oneLiner: "Sweeps PR feedback and agent sessions, proposes concrete tuning.",
36489
+ description: "A scheduled sweep over PR feedback, read-only repo data, committed .auto agent files, and your agents' own sessions: where they stalled, what reviewers keep flagging, and which triggers fired for nothing. It proposes concrete application and factory changes with exact files and fields.",
36490
+ harness: "claude-code",
36491
+ model: "claude-opus-4-8",
36492
+ triggers: [
36493
+ {
36494
+ kind: "schedule",
36495
+ title: "Scheduled improvement sweep",
36496
+ description: "Every two hours, it reviews agent sessions and PR feedback for concrete tuning opportunities.",
36497
+ availability: "core"
36498
+ },
36499
+ {
36500
+ kind: "slack",
36501
+ title: "Slack improvement requests",
36502
+ description: "Auto can connect Slack so teammates can mention Self Improvement for an on-demand sweep and receive material findings in #dev.",
36503
+ availability: "optional",
36504
+ connection: "slack"
36505
+ }
36506
+ ],
36507
+ requires: [],
36508
+ optionalConnections: ["slack"],
36509
+ variables: ["repoFullName"]
36510
+ },
36511
+ {
36512
+ id: "incident-response",
36513
+ template: "@auto/incident-response",
36514
+ files: [
36515
+ {
36516
+ subpath: "agents/incident-response.yaml",
36517
+ agentFileName: "incident-response"
36518
+ }
36519
+ ],
36520
+ displayName: "Incident Response",
36521
+ username: "incident-response",
36522
+ avatarAsset: "sentinel.png",
36523
+ category: "operations",
36524
+ oneLiner: "First on the scene: investigates alerts, posts triage, drafts the fix.",
36525
+ description: "First responder for production alerts: an incident webhook wakes it, it correlates the alert with recent changes, delivers an evidence-based triage through the entrypoint you configure, and opens a draft fix PR when the cause is clear. It can also post the triage to Slack and answer follow-ups in the incident thread when the standard Slack connection is available.",
36526
+ harness: "claude-code",
36527
+ model: "claude-opus-4-8",
36528
+ triggers: [
36529
+ {
36530
+ kind: "webhook",
36531
+ title: "Incident alerts",
36532
+ description: "Connect an alerting webhook and it starts an evidence-based incident investigation.",
36533
+ availability: "core"
36534
+ },
36535
+ {
36536
+ kind: "slack",
36537
+ title: "Slack triage delivery",
36538
+ description: "Auto can connect Slack so it also posts the triage in the incident thread and answers responder follow-ups there.",
36539
+ availability: "optional",
36540
+ connection: "slack"
36541
+ }
36542
+ ],
36543
+ requires: [],
36544
+ optionalConnections: ["slack"],
36545
+ variables: ["repoFullName"]
36546
+ },
36547
+ {
36548
+ id: "handoff",
36549
+ template: "@auto/handoff",
36550
+ files: [{ subpath: "agents/handoff.yaml", agentFileName: "handoff" }],
36551
+ displayName: "Handoff",
36552
+ username: "handoff",
36553
+ avatarAsset: "handoff.png",
36554
+ category: "engineering",
36555
+ oneLiner: "Tag it on GitHub or start a session with a coding task; it takes ownership.",
36556
+ description: "The delegation coder: address it on a pull request or issue, or start a new session with a coding task. It picks up or creates the branch, binds the relevant GitHub artifacts, implements what's asked, follows CI and review feedback, and reports when the work is ready for final review.",
36557
+ harness: "claude-code",
36558
+ model: "claude-opus-4-8",
36559
+ triggers: [
36560
+ {
36561
+ kind: "github",
36562
+ title: "GitHub handoff",
36563
+ description: "Address it on a PR or issue and it takes scoped ownership, including CI and review follow-through.",
36564
+ availability: "core"
36565
+ },
36566
+ {
36567
+ kind: "agent",
36568
+ title: "Direct dispatch",
36569
+ description: "An orchestrator can start it with a new coding task that needs an owned branch and PR.",
36570
+ availability: "core"
36571
+ }
36572
+ ],
36573
+ requires: ["github"],
36574
+ optionalConnections: [],
36575
+ variables: ["repoFullName", "githubConnection"]
36576
+ },
36577
+ {
36578
+ id: "lead-researcher",
36579
+ template: "@auto/lead-engine",
36580
+ files: [
36581
+ {
36582
+ subpath: "agents/lead-researcher.yaml",
36583
+ agentFileName: "lead-researcher"
36584
+ }
36585
+ ],
36586
+ displayName: "Lead Researcher",
36587
+ username: "lead-researcher",
36588
+ avatarAsset: "scout.png",
36589
+ category: "growth",
36590
+ oneLiner: "Researches leads from your sources or the public web, then drafts outreach.",
36591
+ description: "A lead researcher you can connect to preferred data sources or ask to scour public web signals. It builds sourced dossiers, scores fit from available evidence, and drafts outreach for human approval without contacting prospects itself.",
36592
+ harness: "claude-code",
36593
+ model: null,
36594
+ triggers: [
36595
+ {
36596
+ kind: "webhook",
36597
+ title: "Incoming leads",
36598
+ description: "Send a lead by webhook and it builds a sourced dossier and draft outreach.",
36599
+ availability: "core"
36600
+ },
36601
+ {
36602
+ kind: "agent",
36603
+ title: "Research dispatch",
36604
+ description: "Start it directly with research criteria and any connected sources you want it to use.",
36605
+ availability: "core"
36606
+ }
36607
+ ],
36608
+ requires: [],
36609
+ optionalConnections: [],
36610
+ variables: ["repoFullName"]
36611
+ },
36612
+ {
36613
+ id: "research-coordinator",
36614
+ template: "@auto/research-loop",
36615
+ files: [
36616
+ {
36617
+ subpath: "agents/research-coordinator.yaml",
36618
+ agentFileName: "research-coordinator"
36619
+ },
36620
+ { subpath: "agents/experimenter.yaml", agentFileName: "experimenter" }
36621
+ ],
36622
+ displayName: "Research Coordinator",
36623
+ username: "research",
36624
+ avatarAsset: "cartographer.png",
36625
+ category: "growth",
36626
+ oneLiner: "Start a measurable research campaign, then let one coordinator keep its rounds moving.",
36627
+ description: "Address the coordinator in a GitHub issue or PR comment to start a measurable campaign. Its one live session dispatches installed experimenters, tracks multiple campaign issues without mixing them, and uses a 10-minute heartbeat only to advance campaigns already in flight.",
36628
+ harness: "claude-code",
36629
+ model: "claude-opus-4-8",
36630
+ triggers: [
36631
+ {
36632
+ kind: "github",
36633
+ title: "Campaign commands",
36634
+ description: "Address it in a GitHub comment to start or steer a measurable research campaign.",
36635
+ availability: "core"
36636
+ },
36637
+ {
36638
+ kind: "agent",
36639
+ title: "Experiment dispatch",
36640
+ description: "It assigns each approved round to installed experimenters and collects their results.",
36641
+ availability: "core"
36642
+ },
36643
+ {
36644
+ kind: "schedule",
36645
+ title: "Campaign check-ins",
36646
+ description: "Every 10 minutes, it advances campaigns that are already in flight.",
36647
+ availability: "core"
36648
+ }
36649
+ ],
36650
+ requires: ["github"],
36651
+ optionalConnections: [],
36652
+ variables: ["repoFullName", "githubConnection"]
36653
+ },
36654
+ plannedCatalogAgent({
36655
+ id: "intern",
36656
+ template: "@auto/agent-fleet",
36657
+ displayName: "The Intern",
36658
+ username: "intern",
36659
+ avatarAsset: "intern.png",
36660
+ category: "engineering",
36661
+ oneLiner: "Handles quick questions, small fixes, and grunt work.",
36662
+ description: "A low-cost generalist for small, bounded tasks that should not interrupt the senior engineering lanes."
36663
+ }),
36664
+ plannedCatalogAgent({
36665
+ id: "workforce-optimization-consultant",
36666
+ template: "@auto/agent-fleet",
36667
+ displayName: "Workforce Optimization Consultant",
36668
+ username: "workforce-optimization-consultant",
36669
+ avatarAsset: "workforce-consultant.png",
36670
+ category: "factory",
36671
+ oneLiner: "Produces evidence-based scorecards on which agents earn their seat.",
36672
+ description: "Reviews fleet outcomes, cost, and utilization on a schedule and recommends concrete roster changes.",
36673
+ trustNotes: [
36674
+ "Scheduled analysis carries recurring model and compute cost."
36675
+ ]
36676
+ }),
36677
+ plannedCatalogAgent({
36678
+ id: "renovator",
36679
+ template: "@auto/slopbusters",
36680
+ displayName: "The Renovator",
36681
+ username: "renovator",
36682
+ avatarAsset: "renovator.png",
36683
+ category: "quality",
36684
+ oneLiner: "Walks the property, writes the punch list, and schedules the crew.",
36685
+ description: "The Slopbusters' front of house: turns repo-specific cleanup rulings into a sustained, reviewable renovation campaign.",
36686
+ capabilitySummary: [
36687
+ "actions:read",
36688
+ "checks:read",
36689
+ "contents:write",
36690
+ "issues:write",
36691
+ "merge:write",
36692
+ "pullRequests:write"
36693
+ ],
36694
+ trustNotes: [
36695
+ "Contents write cannot be path-scoped; doctrine and review limit writes to idioms and campaign ledgers.",
36696
+ "Can merge only after a user delegates the merge and the readiness bar passes."
36697
+ ]
36698
+ }),
36699
+ plannedCatalogAgent({
36700
+ id: "reaper",
36701
+ template: "@auto/slopbusters",
36702
+ displayName: "The Reaper",
36703
+ username: "reaper",
36704
+ avatarAsset: "reaper.png",
36705
+ category: "quality",
36706
+ oneLiner: "Finds stale pull requests, sessions, and branches before they become undead.",
36707
+ description: "A cleanup specialist that reports stale work first and only gains destructive execution authority through explicit opt-in.",
36708
+ trustNotes: [
36709
+ "Destructive cleanup is warn-only until a tenant explicitly opts in."
36710
+ ]
36711
+ }),
36712
+ plannedCatalogAgent({
36713
+ id: "butcher",
36714
+ template: "@auto/slopbusters",
36715
+ displayName: "The Butcher",
36716
+ username: "butcher",
36717
+ avatarAsset: "butcher.png",
36718
+ category: "quality",
36719
+ oneLiner: "Cuts dead code in small, reviewable negative diffs.",
36720
+ description: "A deletion-first implementer for unused dependencies, exports, and obsolete paths identified by the cleanup campaign."
36721
+ }),
36722
+ plannedCatalogAgent({
36723
+ id: "janitor",
36724
+ template: "@auto/slopbusters",
36725
+ displayName: "The Janitor",
36726
+ username: "janitor",
36727
+ avatarAsset: "janitor.png",
36728
+ category: "quality",
36729
+ oneLiner: "Sweeps merged branches, dead labels, expired TODOs, and artifact bloat.",
36730
+ description: "A scheduled hygiene agent that starts with dry-run reports and limits branch cleanup to already-merged work.",
36731
+ trustNotes: [
36732
+ "Scheduled cleanup starts in dry-run mode and carries recurring cost."
36733
+ ]
36734
+ }),
36735
+ plannedCatalogAgent({
36736
+ id: "exorcist",
36737
+ template: "@auto/slopbusters",
36738
+ displayName: "The Exorcist",
36739
+ username: "exorcist",
36740
+ avatarAsset: "exorcist.png",
36741
+ category: "quality",
36742
+ oneLiner: "Hunts flaky tests and explains each quarantine or repair.",
36743
+ description: "A CI reliability specialist that detects recurring failure signatures, reproduces what it can, and proposes bounded fixes."
36744
+ }),
36745
+ plannedCatalogAgent({
36746
+ id: "inspector",
36747
+ template: "@auto/slopbusters",
36748
+ displayName: "The Inspector",
36749
+ username: "inspector",
36750
+ avatarAsset: "inspector.png",
36751
+ category: "quality",
36752
+ oneLiner: "Builds reproductions, bisects regressions, and assembles case files.",
36753
+ description: "A read-first investigator shared by cleanup and incident teams to establish evidence before implementation begins."
36754
+ }),
36755
+ plannedCatalogAgent({
36756
+ id: "admiral",
36757
+ template: "@auto/war-room",
36758
+ displayName: "The Admiral",
36759
+ username: "admiral",
36760
+ avatarAsset: "admiral.png",
36761
+ category: "operations",
36762
+ oneLiner: "Owns the threat board, dispatches the fleet, and briefs you.",
36763
+ description: "The War Room's front of house: proves the response loop on a labeled drill, then keeps every real threat owned and followed up.",
36764
+ capabilitySummary: [
36765
+ "actions:read",
36766
+ "checks:read",
36767
+ "contents:write",
36768
+ "issues:write",
36769
+ "merge:write",
36770
+ "pullRequests:write"
36771
+ ],
36772
+ trustNotes: [
36773
+ "Drills are synthetic and labeled; the agent never creates incidents in external providers.",
36774
+ "Can merge only after a user delegates the merge and the readiness bar passes."
36775
+ ]
36776
+ }),
36777
+ plannedCatalogAgent({
36778
+ id: "watchdog",
36779
+ template: "@auto/war-room",
36780
+ displayName: "The Watchdog",
36781
+ username: "watchdog",
36782
+ avatarAsset: "watchdog.png",
36783
+ category: "operations",
36784
+ oneLiner: "Checks connected signals on a standing heartbeat and barks early.",
36785
+ description: "A scheduled signal watcher for crew heartbeats, GitHub-side indicators, and webhook-fed alerts.",
36786
+ trustNotes: [
36787
+ "Heartbeat monitoring carries recurring model and compute cost."
36788
+ ]
36789
+ }),
36790
+ plannedCatalogAgent({
36791
+ id: "bouncer",
36792
+ template: "@auto/war-room",
36793
+ displayName: "The Bouncer",
36794
+ username: "bouncer",
36795
+ avatarAsset: "bouncer.png",
36796
+ category: "quality",
36797
+ oneLiner: "Applies a dedicated security lens to every pull request.",
36798
+ description: "A review gate focused on authorization boundaries, unsafe defaults, and security-sensitive code paths."
36799
+ }),
36800
+ plannedCatalogAgent({
36801
+ id: "pentester",
36802
+ template: "@auto/war-room",
36803
+ displayName: "The Pentester",
36804
+ username: "pentester",
36805
+ avatarAsset: "pentester.png",
36806
+ category: "operations",
36807
+ oneLiner: "Runs read-only red-team campaigns and records findings.",
36808
+ description: "An offensive-security specialist that reports evidence to an issues ledger and never fixes or blocks quietly.",
36809
+ trustNotes: [
36810
+ "Read-only campaigns still require real security tooling before launch."
36811
+ ]
36812
+ }),
36813
+ plannedCatalogAgent({
36814
+ id: "coroner",
36815
+ template: "@auto/war-room",
36816
+ displayName: "The Coroner",
36817
+ username: "coroner",
36818
+ avatarAsset: "coroner.png",
36819
+ category: "operations",
36820
+ oneLiner: "Writes blameless postmortems with owned follow-up actions.",
36821
+ description: "A post-incident analyst that turns the evidence trail into concrete corrective actions and tracks their owners."
36822
+ }),
36823
+ plannedCatalogAgent({
36824
+ id: "patron",
36825
+ template: "@auto/blank-canvas",
36826
+ displayName: "The Patron",
36827
+ username: "patron",
36828
+ avatarAsset: "patron.png",
36829
+ category: "factory",
36830
+ oneLiner: "Takes your commission, staffs the workshop, and drives it to a first outcome.",
36831
+ description: "The Blank Canvas front of house: translates a plain-language automation brief into the smallest useful team and reviewable setup PR.",
36832
+ capabilitySummary: [
36833
+ "actions:read",
36834
+ "checks:read",
36835
+ "contents:write",
36836
+ "issues:write",
36837
+ "merge:write",
36838
+ "pullRequests:write"
36839
+ ],
36840
+ trustNotes: [
36841
+ "Authors agent resources, but every hire arrives as a setup PR the user must merge.",
36842
+ "Can merge only after a user delegates the merge and the readiness bar passes."
36843
+ ]
36844
+ })
36845
+ ];
36846
+ ROSTER_CATALOG_MANIFEST = ROSTER_CATALOG_ENTRIES.map((entry) => ({
36847
+ ...entry,
36848
+ availability: entry.availability ?? "available",
36849
+ capabilitySummary: capabilitySummary(entry),
36850
+ trustNotes: entry.trustNotes ?? []
36851
+ }));
36852
+ ROSTER_CATALOG = ROSTER_CATALOG_MANIFEST.filter((agent) => agent.availability === "available");
36853
+ SELF_IMPROVEMENT = [
36854
+ {
36855
+ id: "self-improvement",
36856
+ roleLine: "Standing infrastructure that reviews the team's own work and proposes concrete tuning."
36857
+ }
36858
+ ];
36859
+ TEAM_TEMPLATES = [
36860
+ {
36861
+ id: "accelerator",
36862
+ name: "The Accelerator",
36863
+ template: "@auto/agent-fleet",
36864
+ tagline: "You decide. It ships.",
36865
+ pitch: "You've got a big idea and you want it to happen quickly and efficiently. Your software factory boots up and gets to work, anticipating your next move and improving itself as it goes.",
36866
+ backdrop: "accelerator.mp4",
36867
+ frontOfHouse: "chief-of-staff",
36868
+ members: [
36869
+ {
36870
+ id: "chief-of-staff",
36871
+ roleLine: "Front of house. Turns a task list into owned, review-ready pull requests."
36872
+ },
36873
+ {
36874
+ id: "staff-engineer",
36875
+ roleLine: "Owns each task end to end through CI and review."
36876
+ },
36877
+ {
36878
+ id: "senior-engineer",
36879
+ roleLine: "Handles complex scoped implementation work."
36880
+ },
36881
+ {
36882
+ id: "junior-engineer",
36883
+ roleLine: "Takes mechanical and batch coding work."
36884
+ },
36885
+ {
36886
+ id: "designer",
36887
+ roleLine: "Iterates on live UI and graduates it to a production PR."
36888
+ },
36889
+ {
36890
+ id: "pr-review",
36891
+ roleLine: "Reviews every pull request against the current head."
36892
+ },
36893
+ {
36894
+ id: "intern",
36895
+ roleLine: "Handles quick questions, small fixes, and grunt work."
36896
+ },
36897
+ {
36898
+ id: "ship-digest",
36899
+ roleLine: "Summarizes what shipped and what needs attention."
36900
+ },
36901
+ {
36902
+ id: "workforce-optimization-consultant",
36903
+ roleLine: "Produces weekly evidence-based team scorecards."
36904
+ }
36905
+ ],
36906
+ standing: SELF_IMPROVEMENT,
36907
+ availability: "coming-soon",
36908
+ legacyKits: [
36909
+ {
36910
+ id: "startup",
36911
+ name: "Startup Kit",
36912
+ agents: [
36913
+ "chief-of-staff",
36914
+ "senior-engineer",
36915
+ "junior-engineer",
36916
+ "pr-review",
36917
+ "issue-triage",
36918
+ "ship-digest",
36919
+ "chatterbox"
36920
+ ]
36921
+ },
36922
+ {
36923
+ id: "engineering",
36924
+ name: "Engineering Kit",
36925
+ agents: [
36926
+ "senior-engineer",
36927
+ "junior-engineer",
36928
+ "designer",
36929
+ "introspector"
36930
+ ]
36931
+ },
36932
+ {
36933
+ id: "growth",
36934
+ name: "Growth Kit",
36935
+ agents: ["lead-researcher", "research-coordinator", "ship-digest"]
36936
+ }
36937
+ ]
36938
+ },
36939
+ {
36940
+ id: "slopbusters",
36941
+ name: "The Slopbusters",
36942
+ template: "@auto/slopbusters",
36943
+ tagline: "Somebody has to say it: your codebase is haunted.",
36944
+ pitch: "Your agent swarm got ahead of itself. The machine works, but nobody knows how and every new feature digs the hole deeper. Send in the squad to recover a workable codebase and shake out the haunts.",
36945
+ backdrop: "slopbusters.mp4",
36946
+ frontOfHouse: "renovator",
36947
+ members: [
36948
+ {
36949
+ id: "renovator",
36950
+ roleLine: "Front of house. Walks the property, writes the punch list, and schedules the crew."
36951
+ },
36952
+ {
36953
+ id: "reaper",
36954
+ roleLine: "Warns on stale pull requests, stuck sessions, and zombie branches before cleanup."
36955
+ },
36956
+ {
36957
+ id: "butcher",
36958
+ roleLine: "Removes dead code in small, reviewable negative diffs."
36959
+ },
36960
+ {
36961
+ id: "janitor",
36962
+ roleLine: "Sweeps merged branches, dead labels, expired TODOs, and artifact bloat."
36963
+ },
36964
+ {
36965
+ id: "exorcist",
36966
+ roleLine: "Hunts flaky tests and explains each quarantine or repair."
36967
+ },
36968
+ {
36969
+ id: "inspector",
36970
+ roleLine: "Root-causes unusual behavior before anyone changes it."
36971
+ },
36972
+ {
36973
+ id: "senior-engineer",
36974
+ roleLine: "Executes the report's structural refactors."
36975
+ },
36976
+ {
36977
+ id: "junior-engineer",
36978
+ roleLine: "Handles mechanical deletions and renames."
36979
+ },
36980
+ {
36981
+ id: "pr-review",
36982
+ roleLine: "Checks every cleanup so the cure is not worse than the disease."
36983
+ }
36984
+ ],
36985
+ standing: SELF_IMPROVEMENT,
36986
+ availability: "coming-soon",
36987
+ legacyKits: [
36988
+ {
36989
+ id: "code-quality",
36990
+ name: "Code Quality Kit",
36991
+ agents: ["pr-review", "handoff", "self-improvement"]
36992
+ }
36993
+ ]
36994
+ },
36995
+ {
36996
+ id: "war-room",
36997
+ name: "The War Room",
36998
+ template: "@auto/war-room",
36999
+ tagline: "The fleet reports to the Admiral. The Admiral reports to you.",
37000
+ pitch: "Every emergent threat gets an owner, a status, and a follow-up. The room proves itself on a synthetic drill before anything real is burning, then keeps watch around the clock.",
37001
+ backdrop: "war-room.mp4",
37002
+ frontOfHouse: "admiral",
37003
+ members: [
37004
+ {
37005
+ id: "admiral",
37006
+ roleLine: "Front of house. Owns the threat board, dispatches the fleet, and briefs you."
37007
+ },
37008
+ {
37009
+ id: "incident-response",
37010
+ roleLine: "Correlates incidents with evidence and recent changes."
37011
+ },
37012
+ {
37013
+ id: "watchdog",
37014
+ roleLine: "Checks connected signals on a standing heartbeat."
37015
+ },
37016
+ {
37017
+ id: "issue-triage",
37018
+ roleLine: "Classifies and routes every inbound report."
37019
+ },
37020
+ {
37021
+ id: "inspector",
37022
+ roleLine: "Builds the reproduction, bisect, and case file."
37023
+ },
37024
+ {
37025
+ id: "staff-engineer",
37026
+ roleLine: "Implements scoped fixes and owns their pull requests."
37027
+ },
37028
+ {
37029
+ id: "bouncer",
37030
+ roleLine: "Applies a dedicated security lens to every pull request."
37031
+ },
37032
+ {
37033
+ id: "pentester",
37034
+ roleLine: "Runs read-only red-team campaigns and records findings."
37035
+ },
37036
+ {
37037
+ id: "coroner",
37038
+ roleLine: "Writes blameless postmortems with owned follow-up actions."
37039
+ }
37040
+ ],
37041
+ standing: SELF_IMPROVEMENT,
37042
+ availability: "coming-soon",
37043
+ legacyKits: [
37044
+ {
37045
+ id: "ops",
37046
+ name: "Ops / On-Call Kit",
37047
+ agents: ["incident-response", "issue-triage", "ship-digest"]
37048
+ }
37049
+ ]
37050
+ },
37051
+ {
37052
+ id: "blank-canvas",
37053
+ name: "The Blank Canvas",
37054
+ template: "@auto/blank-canvas",
37055
+ tagline: "The whole corpus. Your vision.",
37056
+ pitch: "Describe the automations you want in plain language. The Patron turns that commission into the smallest useful team and drives it to your definition of a magic moment.",
37057
+ backdrop: "blank-canvas.mp4",
37058
+ frontOfHouse: "patron",
37059
+ members: [
37060
+ {
37061
+ id: "patron",
37062
+ roleLine: "Front of house. Takes the commission, staffs the workshop, and authors every hire through a reviewable PR."
37063
+ }
37064
+ ],
37065
+ standing: SELF_IMPROVEMENT,
37066
+ availability: "coming-soon",
37067
+ legacyKits: [{ id: "custom", name: "Custom", agents: [] }]
37068
+ }
37069
+ ];
37070
+ ROSTER_KITS = TEAM_TEMPLATES.flatMap(
37071
+ (team) => team.legacyKits
37072
+ );
35965
37073
  }
35966
37074
  });
35967
37075
 
@@ -36150,6 +37258,7 @@ var init_src = __esm({
36150
37258
  init_mcp();
36151
37259
  init_model_selection();
36152
37260
  init_mounts();
37261
+ init_onboarding_runs();
36153
37262
  init_organization_settings();
36154
37263
  init_billing();
36155
37264
  init_pricing();
@@ -36276,7 +37385,7 @@ function activeAccountKey(path2 = defaultConfigPath()) {
36276
37385
  function writeConfig(config2, path2 = defaultConfigPath()) {
36277
37386
  const accountPath = activeAccountPath(path2);
36278
37387
  if (!accountPath) {
36279
- throw new Error("Not logged in. Session `auto auth login` first.");
37388
+ throw new Error("Not logged in. Run `auto auth login` first.");
36280
37389
  }
36281
37390
  writeAccountFile(config2, accountPath);
36282
37391
  }
@@ -36386,7 +37495,7 @@ var init_file = __esm({
36386
37495
  function requireActiveProject(config2) {
36387
37496
  if (!config2.organizationId || !config2.projectId) {
36388
37497
  throw new Error(
36389
- "Session `auto orgs use <organization>` and `auto projects use <project>` first."
37498
+ "Run `auto orgs use <organization>` and `auto projects use <project>` first."
36390
37499
  );
36391
37500
  }
36392
37501
  return {
@@ -37068,7 +38177,7 @@ function createApiClient(input) {
37068
38177
  const { organizationId } = await resolveActiveSelection();
37069
38178
  if (!organizationId) {
37070
38179
  throw new Error(
37071
- "No active organization. Session `auto auth login` to sign in, then `auto orgs use <organization>` to select one."
38180
+ "No active organization. Run `auto auth login` to sign in, then `auto orgs use <organization>` to select one."
37072
38181
  );
37073
38182
  }
37074
38183
  return { organizationId };
@@ -38941,7 +40050,7 @@ var init_package = __esm({
38941
40050
  "package.json"() {
38942
40051
  package_default = {
38943
40052
  name: "@autohq/cli",
38944
- version: "0.1.424",
40053
+ version: "0.1.426",
38945
40054
  license: "SEE LICENSE IN README.md",
38946
40055
  publishConfig: {
38947
40056
  access: "public"
@@ -48677,7 +49786,7 @@ function logout(context) {
48677
49786
  function listAccounts2(context) {
48678
49787
  const accounts = listAccounts(context.configPath);
48679
49788
  if (accounts.length === 0) {
48680
- throw new Error("No stored accounts. Session `auto auth login` first.");
49789
+ throw new Error("No stored accounts. Run `auto auth login` first.");
48681
49790
  }
48682
49791
  for (const account of accounts) {
48683
49792
  context.writeOutput(
@@ -48734,7 +49843,7 @@ function accountLine(account, activeKey, style) {
48734
49843
  async function switchAccountInteractive(context) {
48735
49844
  const accounts = listAccounts(context.configPath);
48736
49845
  if (accounts.length === 0) {
48737
- throw new Error("No stored accounts. Session `auto auth login` first.");
49846
+ throw new Error("No stored accounts. Run `auto auth login` first.");
48738
49847
  }
48739
49848
  if (!context.io.canPrompt()) {
48740
49849
  throw new Error(
@@ -48781,14 +49890,14 @@ function useAccount(context, account) {
48781
49890
  function resolveAccountByEmail(context, accountRef, options) {
48782
49891
  const accounts = listAccounts(context.configPath);
48783
49892
  if (accounts.length === 0) {
48784
- throw new Error("No stored accounts. Session `auto auth login` first.");
49893
+ throw new Error("No stored accounts. Run `auto auth login` first.");
48785
49894
  }
48786
49895
  const matches = accounts.filter(
48787
49896
  (account) => account.config.userEmail?.toLowerCase() === accountRef.toLowerCase() && (!options.server || account.config.serverUrl === options.server)
48788
49897
  );
48789
49898
  if (matches.length === 0) {
48790
49899
  throw new Error(
48791
- `No stored account for ${accountRef}. Session \`auto auth login\` to add it.`
49900
+ `No stored account for ${accountRef}. Run \`auto auth login\` to add it.`
48792
49901
  );
48793
49902
  }
48794
49903
  if (matches.length === 1) return matches[0];
@@ -49969,7 +51078,7 @@ async function runAgentBridgeSocket(options) {
49969
51078
  });
49970
51079
  socket.on(
49971
51080
  RUNTIME_BRIDGE_BOOTSTRAP_EVENT,
49972
- createSessiontimeBridgeBootstrapListener({
51081
+ createRuntimeBridgeBootstrapListener({
49973
51082
  token: options.token,
49974
51083
  onBootstrap: options.onBootstrap,
49975
51084
  createHandler: (bootstrap) => options.createHandler({
@@ -50095,7 +51204,7 @@ async function runAgentBridgeSocket(options) {
50095
51204
  function isTerminalAuthError(error51) {
50096
51205
  return TERMINAL_AUTH_ERROR_MESSAGES.has(error51.message);
50097
51206
  }
50098
- function createSessiontimeBridgeBootstrapListener(input) {
51207
+ function createRuntimeBridgeBootstrapListener(input) {
50099
51208
  return async (rawEnvelope, ack) => {
50100
51209
  const bootstrapStartedAt = Date.now();
50101
51210
  input.writeOutput?.(
@@ -56932,7 +58041,7 @@ async function requireProjectScope(input) {
56932
58041
  return resolved;
56933
58042
  }
56934
58043
  throw new Error(
56935
- `No project selected. Session \`auto projects use <project>\` or pass ${input.explicitHint}.`
58044
+ `No project selected. Run \`auto projects use <project>\` or pass ${input.explicitHint}.`
56936
58045
  );
56937
58046
  }
56938
58047
  async function resolveProjectScope(input) {
@@ -56996,7 +58105,7 @@ async function requireConnection(input) {
56996
58105
  );
56997
58106
  }
56998
58107
  throw new Error(
56999
- `No ${input.provider} connection found matching ${identifier}. Session \`auto connections list\` to see available connections.`
58108
+ `No ${input.provider} connection found matching ${identifier}. Run \`auto connections list\` to see available connections.`
57000
58109
  );
57001
58110
  }
57002
58111
  if (matches.length > 1) {
@@ -57008,7 +58117,7 @@ async function requireConnection(input) {
57008
58117
  }
57009
58118
  if (grants.length === 0) {
57010
58119
  throw new Error(
57011
- `No ${input.provider} connections found. Session \`auto connect ${input.provider}\` first.`
58120
+ `No ${input.provider} connections found. Run \`auto connect ${input.provider}\` first.`
57012
58121
  );
57013
58122
  }
57014
58123
  if (grants.length > 1) {
@@ -58227,7 +59336,7 @@ var humanQuickstartText = `Get started with auto:
58227
59336
  Fastest path: paste this into a coding agent running in your repo
58228
59337
  (Claude Code, Cursor, Codex):
58229
59338
 
58230
- "Session \`auto onboard --agent\` and follow the instructions it prints."
59339
+ "Run \`auto onboard --agent\` and follow the instructions it prints."
58231
59340
 
58232
59341
  The agent walks you through setup end to end, studies your repo, and installs
58233
59342
  a first workflow tailored to how your team works.