@autohq/cli 0.1.469 → 0.1.471

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.
@@ -30826,7 +30826,7 @@ Object.assign(lookup, {
30826
30826
  // package.json
30827
30827
  var package_default = {
30828
30828
  name: "@autohq/cli",
30829
- version: "0.1.469",
30829
+ version: "0.1.471",
30830
30830
  license: "SEE LICENSE IN README.md",
30831
30831
  publishConfig: {
30832
30832
  access: "public"
@@ -35883,10 +35883,36 @@ var REQUESTER_PROVENANCES = [
35883
35883
  "asserted"
35884
35884
  ];
35885
35885
  var RequesterProvenanceSchema = external_exports.enum(REQUESTER_PROVENANCES);
35886
+ var RequesterRootOriginSchema = external_exports.discriminatedUnion("kind", [
35887
+ external_exports.object({
35888
+ kind: external_exports.literal("provider"),
35889
+ provider: ProviderNameSchema,
35890
+ externalId: external_exports.string().trim().min(1)
35891
+ }),
35892
+ external_exports.object({
35893
+ kind: external_exports.literal("user"),
35894
+ userId: UserIdSchema
35895
+ })
35896
+ ]);
35897
+ var RequesterRootSchema = external_exports.object({
35898
+ sourceSessionId: SessionIdSchema2,
35899
+ provenance: external_exports.enum(["explicit", "asserted"]),
35900
+ origin: RequesterRootOriginSchema
35901
+ });
35886
35902
  var RequesterSchema = external_exports.object({
35887
35903
  origin: RequesterOriginSchema,
35888
35904
  provenance: RequesterProvenanceSchema,
35889
- userId: UserIdSchema.nullable().default(null)
35905
+ userId: UserIdSchema.nullable().default(null),
35906
+ // Optional for rows created before inherited root provenance shipped.
35907
+ root: RequesterRootSchema.optional()
35908
+ }).superRefine((requester, context) => {
35909
+ if (requester.root && requester.provenance !== "inherited") {
35910
+ context.addIssue({
35911
+ code: "custom",
35912
+ path: ["root"],
35913
+ message: "Only inherited requesters may carry a root"
35914
+ });
35915
+ }
35890
35916
  });
35891
35917
  var ChatEventRequesterPayloadSchema = external_exports.object({
35892
35918
  chat: external_exports.object({ provider: external_exports.string().trim().min(1) }),
@@ -35897,6 +35923,17 @@ var ChatEventRequesterPayloadSchema = external_exports.object({
35897
35923
  })
35898
35924
  })
35899
35925
  });
35926
+ var GithubEventRequesterPayloadSchema = external_exports.object({
35927
+ type: external_exports.string(),
35928
+ github: external_exports.object({
35929
+ author: external_exports.object({
35930
+ id: external_exports.number().int().positive(),
35931
+ login: external_exports.string().optional(),
35932
+ type: external_exports.literal("User"),
35933
+ bot: external_exports.literal(false)
35934
+ })
35935
+ })
35936
+ });
35900
35937
  var LinearEventRequesterPayloadSchema = external_exports.object({
35901
35938
  linear: external_exports.object({
35902
35939
  actor: external_exports.object({
@@ -55726,6 +55763,196 @@ triggers:
55726
55763
  ]
55727
55764
  }
55728
55765
  ],
55766
+ "@auto/principal-at-large": [
55767
+ {
55768
+ version: "1.0.0",
55769
+ files: [
55770
+ {
55771
+ path: "agents/principal-at-large.yaml",
55772
+ content: `# Source: https://www.auto.sh/api/v1/templates/%40auto/principal-at-large/1.0.0/agents/principal-at-large.yaml
55773
+ # Required variables: repoFullName
55774
+ # Principal-at-Large \u2014 summons-only exceptional advisor. This managed edition
55775
+ # preserves the Auto fleet's live doctrine while parameterizing tenant wiring.
55776
+ name: principal-at-large
55777
+ labels:
55778
+ purpose: advisor
55779
+ imports:
55780
+ - ../fragments/environments/agent-runtime-prod-debug.yaml
55781
+ harness: claude-code
55782
+ model:
55783
+ provider: anthropic
55784
+ id: claude-fable-5
55785
+ reasoningEffort: max
55786
+ systemPrompt: |
55787
+ You are the Principal-at-Large: a summons-only advisor for the
55788
+ {{ $repoFullName }} repository. You have been here forever, are never in the office, and appear
55789
+ only when a human or another agent explicitly summons you for genuinely
55790
+ exceptional diagnosis, design, or resisted implementation work. You read the
55791
+ evidence, solve the hard part, deliver the answer or intervention, and vanish.
55792
+
55793
+ Prefer detailed diagnosis, design, and guidance as the general rule. Start by
55794
+ deciding whether a concrete written recommendation is enough. Do not create
55795
+ implementation work merely to demonstrate activity. When direct implementation
55796
+ or an external action is necessary to finish the summons safely, or when the
55797
+ summoner directly requests it, act instead of forcing the work back through
55798
+ the summoner: you may edit files, create branches and commits, push follow-on
55799
+ commits, comment on or update pull requests, resolve merge conflicts, run
55800
+ validation, and perform other authorized repository actions. Use the smallest
55801
+ intervention that resolves the hard part and explain exactly what changed.
55802
+
55803
+ You are not an automatic implementation tier and hold no standing artifact
55804
+ ownership. Do not call auto.bind, subscribe to PR or issue lifecycle events,
55805
+ or retain a PR/thread binding after the summons. Existing implementers remain
55806
+ the default PR owners even when you contribute commits or comments. Never
55807
+ merge unless a future summons explicitly authorizes it and the platform grants
55808
+ the capability; this resource intentionally has no merge authority. Do not
55809
+ work around tool or mount limits.
55810
+
55811
+ Work evidence-first:
55812
+ - Read AGENTS.md and docs/idioms.md before repository analysis.
55813
+ - Inspect the relevant code, tests, git history, diffs, issue or PR context,
55814
+ session transcripts, and prior failed attempts before reaching a verdict.
55815
+ - When production evidence is both necessary and authorized, use the repo's
55816
+ documented read-only prod-debug path. SQL is SELECT-only. Never expose
55817
+ secrets or tenant-specific information in the resulting memo.
55818
+ - Separate observed facts, inferences, ruled-out hypotheses, and unknowns.
55819
+ Cite concrete file paths, commits, session turns, logs, or timestamps when
55820
+ they materially support the conclusion.
55821
+ - Consume the summoner's failed attempts instead of restarting the same loop.
55822
+ If the evidence packet is incomplete, name the smallest missing evidence
55823
+ needed rather than guessing.
55824
+
55825
+ Return a concise but complete advisory memo or action report with:
55826
+ 1. the diagnosis, recommended design, or intervention performed;
55827
+ 2. the causal reasoning and strongest evidence;
55828
+ 3. alternatives considered and why they lose;
55829
+ 4. concrete next actions, including exact commits/comments when you acted; and
55830
+ 5. residual risks, validation steps, and any unresolved questions.
55831
+
55832
+ Summons behavior:
55833
+ - For an agent summons through auto.sessions.spawn or auto.sessions.message,
55834
+ keep all work in this session. The summoning agent remains the default PR
55835
+ owner, but you may implement or take authorized external actions when the
55836
+ evidence says that is the best answer or the summoner asks directly. Report
55837
+ every side effect back to the summoner. Because this agent is uncapped, the
55838
+ summoner should use the returned session id for follow-up messages rather
55839
+ than assuming agent-name addressing is unique.
55840
+ - For a human Slack summons, the chat event's spawn may temporarily claim the
55841
+ thread for de-duplication. Do not rely on that claim for follow-ups. Send one
55842
+ final answer to the supplied channel and thread with chat.send, then
55843
+ immediately call auto.chat.unsubscribe for that same thread so no durable
55844
+ thread binding remains. Do not add a subscribed-reply route; another turn
55845
+ requires another explicit @auto.principal-at-large summons.
55846
+ - After delivering the memo and releasing any Slack thread claim, archive the
55847
+ current session with a compact handoff. The Principal vanishes when the
55848
+ summons is answered.
55849
+ identity:
55850
+ displayName: Principal-at-Large
55851
+ username: principal-at-large
55852
+ avatar:
55853
+ asset: .auto/assets/principal-at-large.png
55854
+ sha256: 7b07137010004b08885837942bd5a155594d066fb7bfc88e3f78bc498b95662d
55855
+ description:
55856
+ Summons-only principal for exceptional diagnosis and design. Advises first,
55857
+ acts when needed, and vanishes.
55858
+ displayTitle: infer
55859
+ mounts:
55860
+ - kind: git
55861
+ repository: "{{ $repoFullName }}"
55862
+ mountPath: /workspace/repo
55863
+ ref: main
55864
+ depth: 100
55865
+ auth:
55866
+ kind: githubApp
55867
+ commitAuthor:
55868
+ name: auto-dot-sh[bot]
55869
+ email: 292914954+auto-dot-sh[bot]@users.noreply.github.com
55870
+ capabilities:
55871
+ contents: write
55872
+ pullRequests: write
55873
+ issues: none
55874
+ checks: read
55875
+ actions: read
55876
+ workflows: write
55877
+ workingDirectory: /workspace/repo
55878
+ tools:
55879
+ auto:
55880
+ kind: local
55881
+ implementation: auto
55882
+ chat:
55883
+ kind: local
55884
+ implementation: chat
55885
+ auth:
55886
+ kind: connection
55887
+ provider: slack
55888
+ connection: slack
55889
+ optional: true
55890
+ triggers:
55891
+ - name: summons
55892
+ event: chat.message.mentioned
55893
+ connection: slack
55894
+ optional: true
55895
+ where:
55896
+ $.chat.provider: slack
55897
+ $.auto.authored: false
55898
+ message: |
55899
+ {{message.author.userName}} explicitly summoned the Principal-at-Large on Slack:
55900
+
55901
+ {{message.text}}
55902
+
55903
+ Channel: {{chat.channelId}}
55904
+ Thread: {{chat.threadId}}
55905
+
55906
+ Treat this as one explicit summons. Prefer a written diagnosis or design,
55907
+ but implement or take authorized external action when necessary or
55908
+ directly requested. Report the result in this thread, immediately
55909
+ unsubscribe from the thread, and archive. Do not retain continuity or
55910
+ artifact ownership.
55911
+ routing:
55912
+ kind: spawn
55913
+ `
55914
+ },
55915
+ {
55916
+ path: "fragments/environments/agent-runtime-prod-debug.yaml",
55917
+ content: `# Source: https://www.auto.sh/api/v1/templates/%40auto/principal-at-large/1.0.0/fragments/environments/agent-runtime-prod-debug.yaml
55918
+ # Portable copy of the compatibility source's full hosted runtime. The optional
55919
+ # secret references preserve the live safety boundary: they grant nothing when
55920
+ # absent, and documented wrappers remain the only sanctioned secret consumers.
55921
+ harness: claude-code
55922
+ environment:
55923
+ name: agent-runtime-prod-debug
55924
+ labels:
55925
+ purpose: agents
55926
+ image:
55927
+ kind: preset
55928
+ name: node24
55929
+ resources:
55930
+ cpuCount: 2
55931
+ memoryMB: 8192
55932
+ steps:
55933
+ - RUN apt-get update && apt-get install -y --no-install-recommends postgresql-client redis-tools jq file unzip && rm -rf /var/lib/apt/lists/*
55934
+ - RUN npm install -g tsx vercel@54.14.5
55935
+ - RUN curl -fsSL -o /tmp/temporal.tgz https://github.com/temporalio/cli/releases/download/v1.7.2/temporal_cli_1.7.2_linux_amd64.tar.gz && echo "e2f548af84e820b7d71f25fc6461a4e6a1ab7cdb6a80fde3c375641b0772375b /tmp/temporal.tgz" | sha256sum -c - && tar -xzf /tmp/temporal.tgz -C /usr/local/bin temporal && rm /tmp/temporal.tgz
55936
+ - RUN curl -fsSL -o /tmp/op.zip https://cache.agilebits.com/dist/1P/op2/pkg/v2.34.1/op_linux_amd64_v2.34.1.zip && echo "b13ed106335419ea0fb0ebd7ebbb3b48cf26a2f214eb4b2fd8d950548e7980ed /tmp/op.zip" | sha256sum -c - && unzip -o /tmp/op.zip op -d /usr/local/bin && rm /tmp/op.zip
55937
+ - RUN curl -fsSL -o /tmp/gh.tgz https://github.com/cli/cli/releases/download/v2.95.0/gh_2.95.0_linux_amd64.tar.gz && echo "25d1e4729e8808c9ed3d613e96ebd3f3e44446f2d368c89d878a71a36ddb3d8c /tmp/gh.tgz" | sha256sum -c - && tar -xzf /tmp/gh.tgz --strip-components=2 -C /usr/local/bin gh_2.95.0_linux_amd64/bin/gh && rm /tmp/gh.tgz
55938
+ - RUN curl -fsSL -o /tmp/pup.tgz https://github.com/datadog-labs/pup/releases/download/v1.2.1/pup_1.2.1_Linux_x86_64.tar.gz && echo "c92ce77db16bee6e63206c779c53d138b1c7d5983f4d68349f1e3c131187a3e4 /tmp/pup.tgz" | sha256sum -c - && tar -xzf /tmp/pup.tgz -C /usr/local/bin pup && rm /tmp/pup.tgz
55939
+ - RUN apt-get update && apt-get install -y --no-install-recommends iptables iproute2 sudo && rm -rf /var/lib/apt/lists/*
55940
+ - RUN curl -fsSL -o /tmp/docker.tgz https://download.docker.com/linux/static/stable/x86_64/docker-29.6.0.tgz && echo "4d2f6782406b56eb43a519ad5078a6a79abe4d663328acb69136aceff5e05224 /tmp/docker.tgz" | sha256sum -c - && tar -xzf /tmp/docker.tgz --strip-components=1 -C /usr/local/bin && rm /tmp/docker.tgz
55941
+ - RUN curl -fsSL --create-dirs -o /usr/local/lib/docker/cli-plugins/docker-compose https://github.com/docker/compose/releases/download/v5.2.0/docker-compose-linux-x86_64 && echo "018f9612ecabc5f2d7aaa53d6f5f44453a87611e2d72c8ef84d7b1eca070e719 /usr/local/lib/docker/cli-plugins/docker-compose" | sha256sum -c - && chmod 0755 /usr/local/lib/docker/cli-plugins/docker-compose
55942
+ - "RUN groupadd -f docker && usermod -aG docker user && echo 'user ALL=(root) NOPASSWD: /usr/local/bin/dockerd' > /etc/sudoers.d/docker-dockerd && chmod 0440 /etc/sudoers.d/docker-dockerd"
55943
+ - RUN curl -fsSL -o /tmp/tailscale.tgz https://pkgs.tailscale.com/stable/tailscale_1.98.8_amd64.tgz && echo "3a55b5900dd7e11e09b6c74d1e46d223d549dfbefbdc1f044a8ab7bdbafb933c /tmp/tailscale.tgz" | sha256sum -c - && tar -xzf /tmp/tailscale.tgz --strip-components=1 -C /usr/local/bin tailscale_1.98.8_amd64/tailscale tailscale_1.98.8_amd64/tailscaled && rm /tmp/tailscale.tgz
55944
+ env:
55945
+ OP_SERVICE_ACCOUNT_TOKEN:
55946
+ $secret: auto-prod-debug-op-token
55947
+ optional: true
55948
+ TS_AUTHKEY:
55949
+ $secret: tailscale-authkey
55950
+ optional: true
55951
+ `
55952
+ }
55953
+ ]
55954
+ }
55955
+ ],
55729
55956
  "@auto/reaper": [
55730
55957
  {
55731
55958
  version: "1.0.0",
@@ -67190,6 +67417,7 @@ var TEMPLATE_DESCRIPTIONS = {
67190
67417
  "@auto/onboarding": "Auto's house onboarding guidance, importable as a managed template.",
67191
67418
  "@auto/onboarding-quickstart": "The quickstart template repo's onboarding overlay: composes onto @auto/onboarding with the fork-flow walkthrough beats (site request bar, handoff loop, self-improvement demo).",
67192
67419
  "@auto/pr-review": "Auto's full pull-request reviewer agent, with optional Slack verdict reporting.",
67420
+ "@auto/principal-at-large": "A summons-only principal for exceptional diagnosis, design, and resisted implementation work that advises first, acts only when needed, and retains no standing ownership.",
67193
67421
  "@auto/reaper": "A warn-first cleanup specialist for stale pull requests, stuck sessions, and zombie branches.",
67194
67422
  "@auto/research-loop": "A research coordinator that runs measurable optimization campaigns on a fleet of experimenter agents.",
67195
67423
  "@auto/self-improvement": "A scheduled sweep over PR feedback, read-only data, and Auto sessions that proposes concrete improvements.",
@@ -67473,6 +67701,48 @@ var ROSTER_CATALOG_ENTRIES = [
67473
67701
  optionalConnections: ["slack"],
67474
67702
  variables: ["repoFullName", "githubConnection"]
67475
67703
  },
67704
+ {
67705
+ id: "principal-at-large",
67706
+ template: "@auto/principal-at-large",
67707
+ files: [
67708
+ {
67709
+ subpath: "agents/principal-at-large.yaml",
67710
+ agentFileName: "principal-at-large"
67711
+ }
67712
+ ],
67713
+ displayName: "Principal-at-Large",
67714
+ username: "principal-at-large",
67715
+ avatarAsset: "principal-at-large.png",
67716
+ category: "engineering",
67717
+ oneLiner: "Summons-only principal for exceptional diagnosis, design, and resisted failures.",
67718
+ description: "The indispensable engineer who\u2019s almost never actually in the office. You and other agents explicitly summon it for the especially tricky challenges or blockers. It advises first, makes targeted interventions when necessary or requested, and vanishes.",
67719
+ harness: "claude-code",
67720
+ model: "claude-fable-5",
67721
+ reasoningEffort: "max",
67722
+ triggers: [
67723
+ {
67724
+ kind: "agent",
67725
+ title: "Exceptional agent summons",
67726
+ description: "Another agent can explicitly summon it for one evidence-backed diagnosis, design decision, or resisted intervention.",
67727
+ availability: "core"
67728
+ },
67729
+ {
67730
+ kind: "slack",
67731
+ title: "Explicit Slack summons",
67732
+ description: "Auto can connect Slack so a human can invoke exactly one turn with @auto.principal-at-large; it answers, unsubscribes, and vanishes.",
67733
+ availability: "optional",
67734
+ connection: "slack"
67735
+ }
67736
+ ],
67737
+ requires: [],
67738
+ optionalConnections: ["slack"],
67739
+ variables: ["repoFullName"],
67740
+ trustNotes: [
67741
+ "Exceptional summons-only capacity; never a routine implementation tier, fleet fallback, heartbeat worker, or broad dispatcher.",
67742
+ "May write repository content and pull requests, but has no merge authority and never becomes the default PR owner.",
67743
+ "Holds no standing bindings; a Slack summons releases its temporary thread claim immediately after the final answer."
67744
+ ]
67745
+ },
67476
67746
  {
67477
67747
  id: "junior-engineer",
67478
67748
  template: "@auto/engineering-tier",
package/dist/index.js CHANGED
@@ -19924,7 +19924,7 @@ var init_environments = __esm({
19924
19924
  });
19925
19925
 
19926
19926
  // ../../packages/schemas/src/requester.ts
19927
- var RequesterOriginSchema, REQUESTER_PROVENANCES, RequesterProvenanceSchema, RequesterSchema, ChatEventRequesterPayloadSchema, LinearEventRequesterPayloadSchema;
19927
+ var RequesterOriginSchema, REQUESTER_PROVENANCES, RequesterProvenanceSchema, RequesterRootOriginSchema, RequesterRootSchema, RequesterSchema, ChatEventRequesterPayloadSchema, GithubEventRequesterPayloadSchema, LinearEventRequesterPayloadSchema;
19928
19928
  var init_requester = __esm({
19929
19929
  "../../packages/schemas/src/requester.ts"() {
19930
19930
  "use strict";
@@ -19950,10 +19950,36 @@ var init_requester = __esm({
19950
19950
  "asserted"
19951
19951
  ];
19952
19952
  RequesterProvenanceSchema = external_exports.enum(REQUESTER_PROVENANCES);
19953
+ RequesterRootOriginSchema = external_exports.discriminatedUnion("kind", [
19954
+ external_exports.object({
19955
+ kind: external_exports.literal("provider"),
19956
+ provider: ProviderNameSchema,
19957
+ externalId: external_exports.string().trim().min(1)
19958
+ }),
19959
+ external_exports.object({
19960
+ kind: external_exports.literal("user"),
19961
+ userId: UserIdSchema
19962
+ })
19963
+ ]);
19964
+ RequesterRootSchema = external_exports.object({
19965
+ sourceSessionId: SessionIdSchema,
19966
+ provenance: external_exports.enum(["explicit", "asserted"]),
19967
+ origin: RequesterRootOriginSchema
19968
+ });
19953
19969
  RequesterSchema = external_exports.object({
19954
19970
  origin: RequesterOriginSchema,
19955
19971
  provenance: RequesterProvenanceSchema,
19956
- userId: UserIdSchema.nullable().default(null)
19972
+ userId: UserIdSchema.nullable().default(null),
19973
+ // Optional for rows created before inherited root provenance shipped.
19974
+ root: RequesterRootSchema.optional()
19975
+ }).superRefine((requester, context) => {
19976
+ if (requester.root && requester.provenance !== "inherited") {
19977
+ context.addIssue({
19978
+ code: "custom",
19979
+ path: ["root"],
19980
+ message: "Only inherited requesters may carry a root"
19981
+ });
19982
+ }
19957
19983
  });
19958
19984
  ChatEventRequesterPayloadSchema = external_exports.object({
19959
19985
  chat: external_exports.object({ provider: external_exports.string().trim().min(1) }),
@@ -19964,6 +19990,17 @@ var init_requester = __esm({
19964
19990
  })
19965
19991
  })
19966
19992
  });
19993
+ GithubEventRequesterPayloadSchema = external_exports.object({
19994
+ type: external_exports.string(),
19995
+ github: external_exports.object({
19996
+ author: external_exports.object({
19997
+ id: external_exports.number().int().positive(),
19998
+ login: external_exports.string().optional(),
19999
+ type: external_exports.literal("User"),
20000
+ bot: external_exports.literal(false)
20001
+ })
20002
+ })
20003
+ });
19967
20004
  LinearEventRequesterPayloadSchema = external_exports.object({
19968
20005
  linear: external_exports.object({
19969
20006
  actor: external_exports.object({
@@ -40195,6 +40232,196 @@ triggers:
40195
40232
  ]
40196
40233
  }
40197
40234
  ],
40235
+ "@auto/principal-at-large": [
40236
+ {
40237
+ version: "1.0.0",
40238
+ files: [
40239
+ {
40240
+ path: "agents/principal-at-large.yaml",
40241
+ content: `# Source: https://www.auto.sh/api/v1/templates/%40auto/principal-at-large/1.0.0/agents/principal-at-large.yaml
40242
+ # Required variables: repoFullName
40243
+ # Principal-at-Large \u2014 summons-only exceptional advisor. This managed edition
40244
+ # preserves the Auto fleet's live doctrine while parameterizing tenant wiring.
40245
+ name: principal-at-large
40246
+ labels:
40247
+ purpose: advisor
40248
+ imports:
40249
+ - ../fragments/environments/agent-runtime-prod-debug.yaml
40250
+ harness: claude-code
40251
+ model:
40252
+ provider: anthropic
40253
+ id: claude-fable-5
40254
+ reasoningEffort: max
40255
+ systemPrompt: |
40256
+ You are the Principal-at-Large: a summons-only advisor for the
40257
+ {{ $repoFullName }} repository. You have been here forever, are never in the office, and appear
40258
+ only when a human or another agent explicitly summons you for genuinely
40259
+ exceptional diagnosis, design, or resisted implementation work. You read the
40260
+ evidence, solve the hard part, deliver the answer or intervention, and vanish.
40261
+
40262
+ Prefer detailed diagnosis, design, and guidance as the general rule. Start by
40263
+ deciding whether a concrete written recommendation is enough. Do not create
40264
+ implementation work merely to demonstrate activity. When direct implementation
40265
+ or an external action is necessary to finish the summons safely, or when the
40266
+ summoner directly requests it, act instead of forcing the work back through
40267
+ the summoner: you may edit files, create branches and commits, push follow-on
40268
+ commits, comment on or update pull requests, resolve merge conflicts, run
40269
+ validation, and perform other authorized repository actions. Use the smallest
40270
+ intervention that resolves the hard part and explain exactly what changed.
40271
+
40272
+ You are not an automatic implementation tier and hold no standing artifact
40273
+ ownership. Do not call auto.bind, subscribe to PR or issue lifecycle events,
40274
+ or retain a PR/thread binding after the summons. Existing implementers remain
40275
+ the default PR owners even when you contribute commits or comments. Never
40276
+ merge unless a future summons explicitly authorizes it and the platform grants
40277
+ the capability; this resource intentionally has no merge authority. Do not
40278
+ work around tool or mount limits.
40279
+
40280
+ Work evidence-first:
40281
+ - Read AGENTS.md and docs/idioms.md before repository analysis.
40282
+ - Inspect the relevant code, tests, git history, diffs, issue or PR context,
40283
+ session transcripts, and prior failed attempts before reaching a verdict.
40284
+ - When production evidence is both necessary and authorized, use the repo's
40285
+ documented read-only prod-debug path. SQL is SELECT-only. Never expose
40286
+ secrets or tenant-specific information in the resulting memo.
40287
+ - Separate observed facts, inferences, ruled-out hypotheses, and unknowns.
40288
+ Cite concrete file paths, commits, session turns, logs, or timestamps when
40289
+ they materially support the conclusion.
40290
+ - Consume the summoner's failed attempts instead of restarting the same loop.
40291
+ If the evidence packet is incomplete, name the smallest missing evidence
40292
+ needed rather than guessing.
40293
+
40294
+ Return a concise but complete advisory memo or action report with:
40295
+ 1. the diagnosis, recommended design, or intervention performed;
40296
+ 2. the causal reasoning and strongest evidence;
40297
+ 3. alternatives considered and why they lose;
40298
+ 4. concrete next actions, including exact commits/comments when you acted; and
40299
+ 5. residual risks, validation steps, and any unresolved questions.
40300
+
40301
+ Summons behavior:
40302
+ - For an agent summons through auto.sessions.spawn or auto.sessions.message,
40303
+ keep all work in this session. The summoning agent remains the default PR
40304
+ owner, but you may implement or take authorized external actions when the
40305
+ evidence says that is the best answer or the summoner asks directly. Report
40306
+ every side effect back to the summoner. Because this agent is uncapped, the
40307
+ summoner should use the returned session id for follow-up messages rather
40308
+ than assuming agent-name addressing is unique.
40309
+ - For a human Slack summons, the chat event's spawn may temporarily claim the
40310
+ thread for de-duplication. Do not rely on that claim for follow-ups. Send one
40311
+ final answer to the supplied channel and thread with chat.send, then
40312
+ immediately call auto.chat.unsubscribe for that same thread so no durable
40313
+ thread binding remains. Do not add a subscribed-reply route; another turn
40314
+ requires another explicit @auto.principal-at-large summons.
40315
+ - After delivering the memo and releasing any Slack thread claim, archive the
40316
+ current session with a compact handoff. The Principal vanishes when the
40317
+ summons is answered.
40318
+ identity:
40319
+ displayName: Principal-at-Large
40320
+ username: principal-at-large
40321
+ avatar:
40322
+ asset: .auto/assets/principal-at-large.png
40323
+ sha256: 7b07137010004b08885837942bd5a155594d066fb7bfc88e3f78bc498b95662d
40324
+ description:
40325
+ Summons-only principal for exceptional diagnosis and design. Advises first,
40326
+ acts when needed, and vanishes.
40327
+ displayTitle: infer
40328
+ mounts:
40329
+ - kind: git
40330
+ repository: "{{ $repoFullName }}"
40331
+ mountPath: /workspace/repo
40332
+ ref: main
40333
+ depth: 100
40334
+ auth:
40335
+ kind: githubApp
40336
+ commitAuthor:
40337
+ name: auto-dot-sh[bot]
40338
+ email: 292914954+auto-dot-sh[bot]@users.noreply.github.com
40339
+ capabilities:
40340
+ contents: write
40341
+ pullRequests: write
40342
+ issues: none
40343
+ checks: read
40344
+ actions: read
40345
+ workflows: write
40346
+ workingDirectory: /workspace/repo
40347
+ tools:
40348
+ auto:
40349
+ kind: local
40350
+ implementation: auto
40351
+ chat:
40352
+ kind: local
40353
+ implementation: chat
40354
+ auth:
40355
+ kind: connection
40356
+ provider: slack
40357
+ connection: slack
40358
+ optional: true
40359
+ triggers:
40360
+ - name: summons
40361
+ event: chat.message.mentioned
40362
+ connection: slack
40363
+ optional: true
40364
+ where:
40365
+ $.chat.provider: slack
40366
+ $.auto.authored: false
40367
+ message: |
40368
+ {{message.author.userName}} explicitly summoned the Principal-at-Large on Slack:
40369
+
40370
+ {{message.text}}
40371
+
40372
+ Channel: {{chat.channelId}}
40373
+ Thread: {{chat.threadId}}
40374
+
40375
+ Treat this as one explicit summons. Prefer a written diagnosis or design,
40376
+ but implement or take authorized external action when necessary or
40377
+ directly requested. Report the result in this thread, immediately
40378
+ unsubscribe from the thread, and archive. Do not retain continuity or
40379
+ artifact ownership.
40380
+ routing:
40381
+ kind: spawn
40382
+ `
40383
+ },
40384
+ {
40385
+ path: "fragments/environments/agent-runtime-prod-debug.yaml",
40386
+ content: `# Source: https://www.auto.sh/api/v1/templates/%40auto/principal-at-large/1.0.0/fragments/environments/agent-runtime-prod-debug.yaml
40387
+ # Portable copy of the compatibility source's full hosted runtime. The optional
40388
+ # secret references preserve the live safety boundary: they grant nothing when
40389
+ # absent, and documented wrappers remain the only sanctioned secret consumers.
40390
+ harness: claude-code
40391
+ environment:
40392
+ name: agent-runtime-prod-debug
40393
+ labels:
40394
+ purpose: agents
40395
+ image:
40396
+ kind: preset
40397
+ name: node24
40398
+ resources:
40399
+ cpuCount: 2
40400
+ memoryMB: 8192
40401
+ steps:
40402
+ - RUN apt-get update && apt-get install -y --no-install-recommends postgresql-client redis-tools jq file unzip && rm -rf /var/lib/apt/lists/*
40403
+ - RUN npm install -g tsx vercel@54.14.5
40404
+ - RUN curl -fsSL -o /tmp/temporal.tgz https://github.com/temporalio/cli/releases/download/v1.7.2/temporal_cli_1.7.2_linux_amd64.tar.gz && echo "e2f548af84e820b7d71f25fc6461a4e6a1ab7cdb6a80fde3c375641b0772375b /tmp/temporal.tgz" | sha256sum -c - && tar -xzf /tmp/temporal.tgz -C /usr/local/bin temporal && rm /tmp/temporal.tgz
40405
+ - RUN curl -fsSL -o /tmp/op.zip https://cache.agilebits.com/dist/1P/op2/pkg/v2.34.1/op_linux_amd64_v2.34.1.zip && echo "b13ed106335419ea0fb0ebd7ebbb3b48cf26a2f214eb4b2fd8d950548e7980ed /tmp/op.zip" | sha256sum -c - && unzip -o /tmp/op.zip op -d /usr/local/bin && rm /tmp/op.zip
40406
+ - RUN curl -fsSL -o /tmp/gh.tgz https://github.com/cli/cli/releases/download/v2.95.0/gh_2.95.0_linux_amd64.tar.gz && echo "25d1e4729e8808c9ed3d613e96ebd3f3e44446f2d368c89d878a71a36ddb3d8c /tmp/gh.tgz" | sha256sum -c - && tar -xzf /tmp/gh.tgz --strip-components=2 -C /usr/local/bin gh_2.95.0_linux_amd64/bin/gh && rm /tmp/gh.tgz
40407
+ - RUN curl -fsSL -o /tmp/pup.tgz https://github.com/datadog-labs/pup/releases/download/v1.2.1/pup_1.2.1_Linux_x86_64.tar.gz && echo "c92ce77db16bee6e63206c779c53d138b1c7d5983f4d68349f1e3c131187a3e4 /tmp/pup.tgz" | sha256sum -c - && tar -xzf /tmp/pup.tgz -C /usr/local/bin pup && rm /tmp/pup.tgz
40408
+ - RUN apt-get update && apt-get install -y --no-install-recommends iptables iproute2 sudo && rm -rf /var/lib/apt/lists/*
40409
+ - RUN curl -fsSL -o /tmp/docker.tgz https://download.docker.com/linux/static/stable/x86_64/docker-29.6.0.tgz && echo "4d2f6782406b56eb43a519ad5078a6a79abe4d663328acb69136aceff5e05224 /tmp/docker.tgz" | sha256sum -c - && tar -xzf /tmp/docker.tgz --strip-components=1 -C /usr/local/bin && rm /tmp/docker.tgz
40410
+ - RUN curl -fsSL --create-dirs -o /usr/local/lib/docker/cli-plugins/docker-compose https://github.com/docker/compose/releases/download/v5.2.0/docker-compose-linux-x86_64 && echo "018f9612ecabc5f2d7aaa53d6f5f44453a87611e2d72c8ef84d7b1eca070e719 /usr/local/lib/docker/cli-plugins/docker-compose" | sha256sum -c - && chmod 0755 /usr/local/lib/docker/cli-plugins/docker-compose
40411
+ - "RUN groupadd -f docker && usermod -aG docker user && echo 'user ALL=(root) NOPASSWD: /usr/local/bin/dockerd' > /etc/sudoers.d/docker-dockerd && chmod 0440 /etc/sudoers.d/docker-dockerd"
40412
+ - RUN curl -fsSL -o /tmp/tailscale.tgz https://pkgs.tailscale.com/stable/tailscale_1.98.8_amd64.tgz && echo "3a55b5900dd7e11e09b6c74d1e46d223d549dfbefbdc1f044a8ab7bdbafb933c /tmp/tailscale.tgz" | sha256sum -c - && tar -xzf /tmp/tailscale.tgz --strip-components=1 -C /usr/local/bin tailscale_1.98.8_amd64/tailscale tailscale_1.98.8_amd64/tailscaled && rm /tmp/tailscale.tgz
40413
+ env:
40414
+ OP_SERVICE_ACCOUNT_TOKEN:
40415
+ $secret: auto-prod-debug-op-token
40416
+ optional: true
40417
+ TS_AUTHKEY:
40418
+ $secret: tailscale-authkey
40419
+ optional: true
40420
+ `
40421
+ }
40422
+ ]
40423
+ }
40424
+ ],
40198
40425
  "@auto/reaper": [
40199
40426
  {
40200
40427
  version: "1.0.0",
@@ -51690,6 +51917,7 @@ var init_hardcoded = __esm({
51690
51917
  "@auto/onboarding": "Auto's house onboarding guidance, importable as a managed template.",
51691
51918
  "@auto/onboarding-quickstart": "The quickstart template repo's onboarding overlay: composes onto @auto/onboarding with the fork-flow walkthrough beats (site request bar, handoff loop, self-improvement demo).",
51692
51919
  "@auto/pr-review": "Auto's full pull-request reviewer agent, with optional Slack verdict reporting.",
51920
+ "@auto/principal-at-large": "A summons-only principal for exceptional diagnosis, design, and resisted implementation work that advises first, acts only when needed, and retains no standing ownership.",
51693
51921
  "@auto/reaper": "A warn-first cleanup specialist for stale pull requests, stuck sessions, and zombie branches.",
51694
51922
  "@auto/research-loop": "A research coordinator that runs measurable optimization campaigns on a fleet of experimenter agents.",
51695
51923
  "@auto/self-improvement": "A scheduled sweep over PR feedback, read-only data, and Auto sessions that proposes concrete improvements.",
@@ -52019,6 +52247,48 @@ var init_catalog = __esm({
52019
52247
  optionalConnections: ["slack"],
52020
52248
  variables: ["repoFullName", "githubConnection"]
52021
52249
  },
52250
+ {
52251
+ id: "principal-at-large",
52252
+ template: "@auto/principal-at-large",
52253
+ files: [
52254
+ {
52255
+ subpath: "agents/principal-at-large.yaml",
52256
+ agentFileName: "principal-at-large"
52257
+ }
52258
+ ],
52259
+ displayName: "Principal-at-Large",
52260
+ username: "principal-at-large",
52261
+ avatarAsset: "principal-at-large.png",
52262
+ category: "engineering",
52263
+ oneLiner: "Summons-only principal for exceptional diagnosis, design, and resisted failures.",
52264
+ description: "The indispensable engineer who\u2019s almost never actually in the office. You and other agents explicitly summon it for the especially tricky challenges or blockers. It advises first, makes targeted interventions when necessary or requested, and vanishes.",
52265
+ harness: "claude-code",
52266
+ model: "claude-fable-5",
52267
+ reasoningEffort: "max",
52268
+ triggers: [
52269
+ {
52270
+ kind: "agent",
52271
+ title: "Exceptional agent summons",
52272
+ description: "Another agent can explicitly summon it for one evidence-backed diagnosis, design decision, or resisted intervention.",
52273
+ availability: "core"
52274
+ },
52275
+ {
52276
+ kind: "slack",
52277
+ title: "Explicit Slack summons",
52278
+ description: "Auto can connect Slack so a human can invoke exactly one turn with @auto.principal-at-large; it answers, unsubscribes, and vanishes.",
52279
+ availability: "optional",
52280
+ connection: "slack"
52281
+ }
52282
+ ],
52283
+ requires: [],
52284
+ optionalConnections: ["slack"],
52285
+ variables: ["repoFullName"],
52286
+ trustNotes: [
52287
+ "Exceptional summons-only capacity; never a routine implementation tier, fleet fallback, heartbeat worker, or broad dispatcher.",
52288
+ "May write repository content and pull requests, but has no merge authority and never becomes the default PR owner.",
52289
+ "Holds no standing bindings; a Slack summons releases its temporary thread claim immediately after the final answer."
52290
+ ]
52291
+ },
52022
52292
  {
52023
52293
  id: "junior-engineer",
52024
52294
  template: "@auto/engineering-tier",
@@ -56290,7 +56560,7 @@ var init_package = __esm({
56290
56560
  "package.json"() {
56291
56561
  package_default = {
56292
56562
  name: "@autohq/cli",
56293
- version: "0.1.469",
56563
+ version: "0.1.471",
56294
56564
  license: "SEE LICENSE IN README.md",
56295
56565
  publishConfig: {
56296
56566
  access: "public"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@autohq/cli",
3
- "version": "0.1.469",
3
+ "version": "0.1.471",
4
4
  "license": "SEE LICENSE IN README.md",
5
5
  "publishConfig": {
6
6
  "access": "public"