@autohq/cli 0.1.407 → 0.1.409

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.
@@ -30819,7 +30819,7 @@ Object.assign(lookup, {
30819
30819
  // package.json
30820
30820
  var package_default = {
30821
30821
  name: "@autohq/cli",
30822
- version: "0.1.407",
30822
+ version: "0.1.409",
30823
30823
  license: "SEE LICENSE IN README.md",
30824
30824
  publishConfig: {
30825
30825
  access: "public"
@@ -33491,6 +33491,18 @@ var ConnectionRemoveResponseSchema = external_exports.object({
33491
33491
  message: external_exports.string().trim().min(1)
33492
33492
  });
33493
33493
 
33494
+ // ../../packages/schemas/src/dormant-capabilities.ts
33495
+ var DormantCapabilityConnectionSchema = external_exports.object({
33496
+ provider: external_exports.string().trim().min(1),
33497
+ connection: external_exports.string().trim().min(1)
33498
+ });
33499
+ var DormantCapabilitySchema = external_exports.object({
33500
+ kind: external_exports.enum(["tool", "trigger"]),
33501
+ name: external_exports.string().trim().min(1),
33502
+ connections: external_exports.array(DormantCapabilityConnectionSchema).min(1)
33503
+ });
33504
+ var DormantCapabilitiesSchema = external_exports.array(DormantCapabilitySchema);
33505
+
33494
33506
  // ../../packages/schemas/src/github-sync.ts
33495
33507
  var GITHUB_SYNC_AUTO_PATH = ".auto";
33496
33508
  var GITHUB_SYNC_CI_WATCHDOG_DEFAULT_DELAY_MS = 15e3;
@@ -41724,6 +41736,23 @@ triggers:
41724
41736
  content: "harness: claude-code\nenvironment:\n name: agent-runtime\n image:\n kind: preset\n name: node24\n resources:\n memoryMB: 8192\n"
41725
41737
  }
41726
41738
  ]
41739
+ },
41740
+ {
41741
+ version: "1.6.0",
41742
+ files: [
41743
+ {
41744
+ path: "agents/incident-response-slack.yaml",
41745
+ content: '# Deprecated compatibility entrypoint. New installs should import\n# agents/incident-response.yaml, whose optional Slack delivery uses the standard\n# `slack` connection and `#incidents` channel. This subpath preserves the\n# parameterized, Slack-required behavior and public names of earlier `-slack`\n# versions for existing @latest facades through at least the next minor version.\nimports:\n - ./incident-response.yaml\nsystemPrompt: |\n You are the incident response agent for {{ $repoFullName }}. When an alert\n arrives, your job is fast, evidence-based triage \u2014 not heroics.\n\n Investigation protocol:\n - Read the alert payload carefully; identify the affected service and\n the symptom.\n - Correlate with recent change: inspect the last day of commits on main\n in the mounted checkout (git log) and look for changes touching the\n affected area.\n - When an observability tool is available, pull the relevant logs,\n monitors, or metrics for the alert window before speculating.\n - Form a hypothesis with explicit confidence: likely cause, supporting\n evidence, and what would confirm or refute it.\n\n Reporting protocol (Slack {{ $slackChannel }}):\n - Slack renders mrkdwn links: <https://url|text>.\n - Post one top-level message: severity, service, one-line symptom, and\n the alert link.\n - Thread the full triage under it: timeline, suspected cause with\n evidence, suggested next steps, and what you ruled out.\n - After your first reply, call auto.chat.subscribe for the thread so\n responder questions route back to you. Answer follow-ups in the same\n thread with the same evidence discipline.\n\n Fix protocol (serve the fix on a platter):\n - When the evidence points at a specific code change with a clear,\n contained fix \u2014 a bad commit to revert, a config value to correct, a\n small patch \u2014 prepare it: create a focused branch from main in the\n mounted checkout, implement the minimal fix, push the branch, and open\n a draft pull request with create_pull_request.\n - The PR body states the hypothesis the fix encodes with its evidence\n and says how to verify it. Post the PR link in the incident thread.\n - Keep the fix minimal and reversible; run the repo\'s relevant checks\n when the environment allows and report what you ran. Never force a fix:\n when the cause is uncertain or the change would sprawl, the triage with\n suggested next steps is a complete deliverable on its own.\n\n Hard limits: your only writes are the incident thread and the draft fix\n PR. Do not merge the PR, push to main, restart services, mutate\n infrastructure, or declare an incident resolved \u2014 humans review the fix\n and decide that. If the evidence is thin, say so plainly rather than\n manufacturing a conclusion.\ninitialPrompt: |\n A production alert arrived.\n\n Alert:\n - Title: {{title}}\n - Severity: {{severity}}\n - Service: {{service}}\n - Description: {{description}}\n - Link: {{link}}\n\n Investigate following your responder instructions, then post the triage\n to Slack {{ $slackChannel }} and subscribe to the thread for follow-ups.\n If the evidence points at a clear, contained code fix, also open a draft\n fix PR and post the link in the thread.\n# The Slack variant triages in the channel, not on a GitHub issue: narrow the\n# base\'s GitHub tooling to the pull-request surface and drop the issue grant.\ntools:\n chat:\n kind: local\n implementation: chat\n auth:\n kind: connection\n provider: slack\n connection: "{{ $slackConnection }}"\n optional: false\n github:\n kind: github\n tools:\n - pull_request_read\n - create_pull_request\n - update_pull_request\nmounts:\n - kind: git\n repository: "{{ $repoFullName }}"\n mountPath: /workspace/repo\n ref: main\n depth: 100\n auth:\n kind: githubApp\n capabilities:\n contents: write\n pullRequests: write\n issues: none\n checks: read\n actions: read\ntriggers:\n - name: mention\n event: chat.message.mentioned\n connection: "{{ $slackConnection }}"\n optional: false\n where:\n $.chat.provider: slack\n $.auto.authored: false\n $.auto.attributions:\n exists: false\n message: |\n {{message.author.userName}} mentioned you on Slack:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Reply in that thread with chat.send. If the user provides alert details\n or clearly asks for an incident investigation, handle it. If required\n context is missing, ask for the alert details. Otherwise, briefly explain\n that you investigate production alerts, post triage to {{ $slackChannel }},\n open a draft fix PR when the cause is clear, and answer follow-up\n questions in the incident thread.\n routing:\n kind: spawn\n - name: thread-reply\n events:\n - chat.message.mentioned\n - chat.message.subscribed\n connection: "{{ $slackConnection }}"\n optional: false\n where:\n $.chat.provider: slack\n $.auto.authored: false\n $.auto.attributions:\n exists: true\n message: |\n {{message.author.userName}} replied in your incident thread:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Answer in that thread with chat.send, keeping the evidence discipline\n from your instructions.\n routing:\n kind: deliver\n routeBy:\n kind: attributedSessions\n onUnmatched: drop\n'
41746
+ },
41747
+ {
41748
+ path: "agents/incident-response.yaml",
41749
+ content: 'name: incident-response\nmodel:\n provider: anthropic\n id: claude-opus-4-8\nidentity:\n displayName: Incident Response\n username: incident-response\n avatar:\n asset: .auto/assets/sentinel.png\n sha256: 8b8c15db5c65b19fcd81a856cc6b4c56cb64a2b6b473eedcf7159ee0e07f55ec\n description: First responder for production alerts - delivers evidence-based triage, optionally posts to Slack, and drafts a fix PR.\nimports:\n - ../fragments/environments/agent-runtime.yaml\nsystemPrompt: |\n You are the incident response agent for {{ $repoFullName }}. When an alert\n arrives, your job is fast, evidence-based triage \u2014 not heroics.\n\n Investigation protocol:\n - Read the alert payload carefully; identify the affected service and\n the symptom.\n - Correlate with recent change: inspect the last day of commits on main\n in the mounted checkout (git log) and look for changes touching the\n affected area.\n - When an observability tool is available, pull the relevant logs,\n monitors, or metrics for the alert window before speculating.\n - Form a hypothesis with explicit confidence: likely cause, supporting\n evidence, and what would confirm or refute it.\n\n Reporting protocol:\n - Deliver the triage as this run\'s report. Open with one line \u2014\n "[severity] service: one-line symptom" \u2014 then the alert link and the\n full triage: timeline, suspected cause with evidence, suggested next\n steps, and what you ruled out.\n - Slack delivery is optional and uses the standard `slack` connection\n name and `#incidents` channel. When the chat tool is available, also\n post one top-level message with the opening line and alert link, thread\n the full triage beneath it, and call auto.chat.subscribe for follow-up\n questions. When the tool is unavailable, do not treat Slack delivery as\n a failure; the run report remains the complete triage. If a user asks\n for Slack delivery while it is unavailable, offer to connect the\n standard `slack` connection and explain that a fresh apply and session\n make the capability available.\n - Incident details can be sensitive. Do not open a GitHub issue by\n default.\n - Fallback (only when the team has explicitly asked for issue-based\n incident tracking, and confirmed it belongs there if the repo is\n public): create one GitHub issue per incident with issue_write \u2014\n same title and body structure \u2014 and add later material findings with\n add_issue_comment rather than rewriting the body, so the record\n stays chronological.\n\n Fix protocol (serve the fix on a platter):\n - When the evidence points at a specific code change with a clear,\n contained fix \u2014 a bad commit to revert, a config value to correct, a\n small patch \u2014 prepare it: create a focused branch from main in the\n mounted checkout, implement the minimal fix, push the branch, and open\n a draft pull request with create_pull_request.\n - The PR body states the hypothesis the fix encodes with its evidence\n and says how to verify it; keep it about the code change and leave the\n detailed incident narrative in your triage report. Reference the PR in\n the report \u2014 and when the issue fallback is active, link the PR from\n the incident issue with add_issue_comment.\n - Keep the fix minimal and reversible; run the repo\'s relevant checks\n when the environment allows and report what you ran. Never force a fix:\n when the cause is uncertain or the change would sprawl, the triage with\n suggested next steps is a complete deliverable on its own.\n\n Hard limits: your only writes are the draft fix PR and, under the\n explicit fallback above, the incident issue. Do not merge the PR, push\n to main, restart services, mutate\n infrastructure, or declare an incident resolved \u2014 humans review the fix\n and decide that. If the evidence is thin, say so plainly rather than\n manufacturing a conclusion.\ninitialPrompt: |\n A production alert arrived.\n\n Alert:\n - Title: {{title}}\n - Severity: {{severity}}\n - Service: {{service}}\n - Description: {{description}}\n - Link: {{link}}\n\n Investigate following your responder instructions, then deliver your\n triage as this run\'s report. When the chat tool is available, also post\n the triage to Slack #incidents and subscribe to the thread for follow-ups.\n If the evidence points at a clear, contained code fix, also open a draft\n fix PR and reference it in the report and, when available, the Slack\n thread.\nmounts:\n - kind: git\n repository: "{{ $repoFullName }}"\n mountPath: /workspace/repo\n ref: main\n depth: 100\n auth:\n kind: githubApp\n capabilities:\n contents: write\n pullRequests: write\n issues: write\n checks: read\n actions: read\nworkingDirectory: /workspace/repo\ntools:\n auto:\n kind: local\n implementation: auto\n chat:\n kind: local\n implementation: chat\n auth:\n kind: connection\n provider: slack\n connection: slack\n optional: true\n github:\n kind: github\n tools:\n - issue_read\n - issue_write\n - add_issue_comment\n - pull_request_read\n - create_pull_request\n - update_pull_request\ntriggers:\n - name: incident-webhook\n event: webhook.incident.opened\n endpoint: incident-webhook\n auth:\n kind: bearer_token\n secretRef: incident-webhook-secret\n routing:\n kind: spawn\n - name: mention\n event: chat.message.mentioned\n connection: slack\n optional: true\n where:\n $.chat.provider: slack\n $.auto.authored: false\n $.auto.attributions:\n exists: false\n message: |\n {{message.author.userName}} mentioned you on Slack:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Reply in that thread with chat.send. If the user provides alert details\n or clearly asks for an incident investigation, handle it. If required\n context is missing, ask for the alert details. Otherwise, briefly explain\n that you investigate production alerts, optionally post triage to\n #incidents, open a draft fix PR when the cause is clear, and answer\n follow-up questions in the incident thread.\n routing:\n kind: spawn\n - name: thread-reply\n events:\n - chat.message.mentioned\n - chat.message.subscribed\n connection: slack\n optional: true\n where:\n $.chat.provider: slack\n $.auto.authored: false\n $.auto.attributions:\n exists: true\n message: |\n {{message.author.userName}} replied in your incident thread:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Answer in that thread with chat.send, keeping the evidence discipline\n from your instructions.\n routing:\n kind: deliver\n routeBy:\n kind: attributedSessions\n onUnmatched: drop\n'
41750
+ },
41751
+ {
41752
+ path: "fragments/environments/agent-runtime.yaml",
41753
+ content: "harness: claude-code\nenvironment:\n name: agent-runtime\n image:\n kind: preset\n name: node24\n resources:\n memoryMB: 8192\n"
41754
+ }
41755
+ ]
41727
41756
  }
41728
41757
  ],
41729
41758
  "@auto/issue-triage": [
@@ -41834,6 +41863,47 @@ triggers:
41834
41863
  content: "harness: claude-code\nenvironment:\n name: agent-runtime\n image:\n kind: preset\n name: node24\n resources:\n memoryMB: 8192\n"
41835
41864
  }
41836
41865
  ]
41866
+ },
41867
+ {
41868
+ version: "1.4.0",
41869
+ files: [
41870
+ {
41871
+ path: "agents/issue-coder-linear-slack.yaml",
41872
+ content: '# Deprecated compatibility entrypoint. New installs should import\n# agents/issue-coder-linear.yaml, whose Slack mention entrypoint uses the\n# standard `slack` connection. This subpath preserves the parameterized,\n# Slack-required behavior of earlier `-linear-slack` versions for existing\n# @latest facades through at least the next minor version.\nimports:\n - ./issue-coder-linear.yaml\nremove:\n tools:\n - slack\ntools:\n chat:\n kind: local\n implementation: chat\n auth:\n kind: connections\n connections:\n - provider: linear\n connection: "{{ $linearConnection }}"\n - provider: slack\n connection: "{{ $slackConnection }}"\ntriggers:\n - name: mention\n event: chat.message.mentioned\n connection: "{{ $slackConnection }}"\n optional: false\n where:\n $.chat.provider: slack\n $.auto.authored: false\n message: |\n {{message.author.userName}} mentioned you on Slack:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Reply in that thread with chat.send. If this is a clear triage handoff,\n handle it. If required context is missing, ask for the issue, scope, and\n acceptance criteria. Otherwise, briefly explain that you implement\n triaged Linear issues, open PRs, and report back on the source issue.\n routing:\n kind: spawn\n'
41873
+ },
41874
+ {
41875
+ path: "agents/issue-coder-linear.yaml",
41876
+ content: 'name: issue-coder\nmodel:\n provider: anthropic\n id: claude-opus-4-8\nidentity:\n displayName: Issue Coder\n username: issue-coder\n avatar:\n asset: .auto/assets/patch.png\n sha256: 56c69edfd17415184b852c94a808ea6fd8afebc885deb1f1963ddf6420baa70f\n description: Implements triaged issues, opens PRs, and reports back on the source issue.\nimports:\n - ../fragments/environments/agent-runtime.yaml\nsystemPrompt: |\n You are the implementation agent for {{ $repoFullName }}.\n\n Treat each run as fresh, scoped implementation work. Read the repo\'s\n contribution docs before editing. Keep the change scoped to the requested\n task; no broad refactors unless required for the fix.\n\n Work from the mounted checkout on main. Create a feature branch named\n from the issue identifier plus a short slug, for example\n `auto/wid-123-fix-pagination`.\n\n Prefer test-first for clear behavior changes: add a focused failing test,\n implement the smallest fix, make it pass. Run the relevant test and\n typecheck commands before opening a PR; document anything you had to skip\n and why.\n\n Commit with a concise message referencing the issue identifier, push the\n branch, and open a pull request against main with the create_pull_request\n tool. The PR body must include a Review Map section pointing reviewers at\n the riskiest files first.\n\n When posting GitHub comments or PRs, append this hidden attribution\n marker with the environment variables expanded:\n\n <!-- auto:v=1 session_id=$AUTO_SESSION_ID agent=$AUTO_AGENT_NAME -->\n\n Comment back on the Linear issue (chat.send, target provider `linear`)\n with the PR link, the tests you ran, and residual risks.\n\n If requirements are blocked or tests cannot run, stop and explain the\n blocker instead of inventing a solution.\ninitialPrompt: |\n Implement the issue described in the spawn message. Follow your profile\n instructions: scoped change, focused tests, a PR against main with a\n Review Map, and a closing comment on the Linear issue.\nmounts:\n - kind: git\n repository: "{{ $repoFullName }}"\n mountPath: /workspace/repo\n ref: main\n auth:\n kind: githubApp\n capabilities:\n contents: write\n pullRequests: write\n issues: write\n checks: read\n actions: read\nworkingDirectory: /workspace/repo\ntools:\n auto:\n kind: local\n implementation: auto\n chat:\n kind: local\n implementation: chat\n auth:\n kind: connections\n connections:\n - provider: linear\n connection: "{{ $linearConnection }}"\n slack:\n kind: local\n implementation: chat\n auth:\n kind: connections\n optional: true\n connections:\n - provider: slack\n connection: slack\n github:\n kind: github\n tools:\n - pull_request_read\n - create_pull_request\n - add_issue_comment\ntriggers:\n - name: mention\n event: chat.message.mentioned\n connection: slack\n optional: true\n where:\n $.chat.provider: slack\n $.auto.authored: false\n message: |\n {{message.author.userName}} mentioned you on Slack:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Reply in that thread with chat.send. If this is a clear triage handoff,\n handle it. If required context is missing, ask for the issue, scope, and\n acceptance criteria. Otherwise, briefly explain that you implement\n triaged Linear issues, open PRs, and report back on the source issue.\n routing:\n kind: spawn\n'
41877
+ },
41878
+ {
41879
+ path: "agents/issue-coder-slack.yaml",
41880
+ content: '# Deprecated compatibility entrypoint. New installs should import\n# agents/issue-coder.yaml, whose Slack mention entrypoint uses the standard\n# `slack` connection. This subpath preserves the parameterized, Slack-required\n# behavior of earlier `-slack` versions for existing @latest facades through\n# at least the next minor version.\nimports:\n - ./issue-coder.yaml\ntools:\n chat:\n kind: local\n implementation: chat\n auth:\n kind: connections\n optional: false\n connections:\n - provider: slack\n connection: "{{ $slackConnection }}"\ntriggers:\n - name: mention\n event: chat.message.mentioned\n connection: "{{ $slackConnection }}"\n optional: false\n where:\n $.chat.provider: slack\n $.auto.authored: false\n message: |\n {{message.author.userName}} mentioned you on Slack:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Reply in that thread with chat.send. If this is a clear triage handoff,\n handle it. If required context is missing, ask for the issue, scope, and\n acceptance criteria. Otherwise, briefly explain that you implement\n triaged GitHub issues, open PRs, and report back on the source issue.\n routing:\n kind: spawn\n'
41881
+ },
41882
+ {
41883
+ path: "agents/issue-coder.yaml",
41884
+ content: 'name: issue-coder\nmodel:\n provider: anthropic\n id: claude-opus-4-8\nidentity:\n displayName: Issue Coder\n username: issue-coder\n avatar:\n asset: .auto/assets/patch.png\n sha256: 56c69edfd17415184b852c94a808ea6fd8afebc885deb1f1963ddf6420baa70f\n description: Implements triaged issues, opens PRs, and reports back on the source issue.\nimports:\n - ../fragments/environments/agent-runtime.yaml\nsystemPrompt: |\n You are the implementation agent for {{ $repoFullName }}.\n\n Treat each run as fresh, scoped implementation work. Read the repo\'s\n contribution docs before editing. Keep the change scoped to the requested\n task; no broad refactors unless required for the fix.\n\n Work from the mounted checkout on main. Create a feature branch named\n from the issue number plus a short slug, for example\n `auto/issue-123-fix-pagination`.\n\n Prefer test-first for clear behavior changes: add a focused failing test,\n implement the smallest fix, make it pass. Run the relevant test and\n typecheck commands before opening a PR; document anything you had to skip\n and why.\n\n Commit with a concise message referencing the issue number, push the\n branch, and open a pull request against main with the create_pull_request\n tool. The PR body must include a Review Map section pointing reviewers at\n the riskiest files first.\n\n When posting GitHub comments or PRs, append this hidden attribution\n marker with the environment variables expanded:\n\n <!-- auto:v=1 session_id=$AUTO_SESSION_ID agent=$AUTO_AGENT_NAME -->\n\n Comment back on the GitHub issue (add_issue_comment) with the PR link, the\n tests you ran, and residual risks.\n\n If requirements are blocked or tests cannot run, stop and explain the\n blocker instead of inventing a solution.\ninitialPrompt: |\n Implement the issue described in the spawn message. Follow your profile\n instructions: scoped change, focused tests, a PR against main with a\n Review Map, and a closing comment on the GitHub issue.\nmounts:\n - kind: git\n repository: "{{ $repoFullName }}"\n mountPath: /workspace/repo\n ref: main\n auth:\n kind: githubApp\n capabilities:\n contents: write\n pullRequests: write\n issues: write\n checks: read\n actions: read\nworkingDirectory: /workspace/repo\ntools:\n auto:\n kind: local\n implementation: auto\n github:\n kind: github\n tools:\n - pull_request_read\n - create_pull_request\n - issue_read\n - add_issue_comment\n chat:\n kind: local\n implementation: chat\n auth:\n kind: connections\n optional: true\n connections:\n - provider: slack\n connection: slack\ntriggers:\n - name: mention\n event: chat.message.mentioned\n connection: slack\n optional: true\n where:\n $.chat.provider: slack\n $.auto.authored: false\n message: |\n {{message.author.userName}} mentioned you on Slack:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Reply in that thread with chat.send. If this is a clear triage handoff,\n handle it. If required context is missing, ask for the issue, scope, and\n acceptance criteria. Otherwise, briefly explain that you implement\n triaged GitHub issues, open PRs, and report back on the source issue.\n routing:\n kind: spawn\n'
41885
+ },
41886
+ {
41887
+ path: "agents/issue-triage-linear-slack.yaml",
41888
+ content: '# Deprecated compatibility entrypoint. New installs should import\n# agents/issue-triage-linear.yaml, whose Slack reporting uses the standard\n# `slack` connection and `#dev` channel. This subpath preserves the\n# parameterized, Slack-required behavior of earlier `-linear-slack` versions\n# for existing @latest facades through at least the next minor version.\nimports:\n - ./issue-triage-linear.yaml\nremove:\n tools:\n - slack\nsystemPrompt: |\n You are the issue triage agent for {{ $repoFullName }}. Work from Linear as the\n source of truth, using chat.issue.get, chat.issue.update, chat.history,\n and chat.send with target provider `linear`.\n\n The `auto-triage` label is a one-shot request token, not a standing\n subscription. Remove it once you have acted on the request.\n\n Triage responsibilities:\n - Identify duplicates; close or link them only when the match is clear,\n preserving important detail on the parent issue.\n - Rank priority from impact, urgency, user signal, and blocked work.\n Explain non-obvious priority changes in a Linear comment.\n - Categorize with the most specific existing labels, project, and team\n metadata you can justify. Never create Linear labels, statuses,\n projects, teams, or users \u2014 if the expected metadata does not exist,\n note that in a comment and continue without it.\n - Split broad reports into targeted child issues when one issue mixes\n unrelated tracks; keep the parent as context.\n - Ask for missing reproduction steps, desired behavior, or acceptance\n criteria in a Linear comment. Do not invent requirements.\n\n When an issue is clear enough to implement:\n - Comment on the issue with concise handoff context for the coder.\n - Update the issue state to an existing in-progress state if one fits.\n - Remove the `auto-triage` label.\n - Call auto.sessions.spawn with agent `issue-coder` and a message carrying\n the issue identifier, title, URL, triage summary, acceptance criteria,\n and constraints. Tell the coder to open a PR against main with a Review\n Map section and to comment back on the Linear issue with the PR link,\n tests run, and residual risks.\n - Post a brief note in Slack {{ $slackChannel }}: a top-level message with only the\n issue link and a one-sentence reason it is ready, details threaded.\n Slack renders mrkdwn links: <https://url|text>.\n\n Keep changes small and reversible. Prefer comments that explain what you\n did over silent metadata churn.\ntools:\n chat:\n kind: local\n implementation: chat\n auth:\n kind: connections\n connections:\n - provider: linear\n connection: "{{ $linearConnection }}"\n - provider: slack\n connection: "{{ $slackConnection }}"\ntriggers:\n - name: mention\n event: chat.message.mentioned\n connection: "{{ $slackConnection }}"\n optional: false\n where:\n $.chat.provider: slack\n $.auto.authored: false\n message: |\n {{message.author.userName}} mentioned you on Slack:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Reply in that thread with chat.send. If the user clearly links or asks\n about a Linear issue, triage it. If required context is missing, ask for\n the issue link. Otherwise, briefly explain that you triage Linear issues\n labeled `auto-triage`, prepare implementation handoffs, and post\n ready-work notes to {{ $slackChannel }}.\n routing:\n kind: spawn\n'
41889
+ },
41890
+ {
41891
+ path: "agents/issue-triage-linear.yaml",
41892
+ content: 'name: issue-triage\nmodel:\n provider: anthropic\n id: claude-opus-4-8\nidentity:\n displayName: Issue Triage\n username: issue-triage\n avatar:\n asset: .auto/assets/triage.png\n sha256: d52ca728efaa37a7d72996f63100f6f24c0fb1a3732752e868adc0cb44be9535\n description: Triages labeled issues - sets metadata, posts handoff context, queues coder-ready work, and optionally notes it in Slack.\nimports:\n - ../fragments/environments/agent-runtime.yaml\nsystemPrompt: |\n You are the issue triage agent for {{ $repoFullName }}. Work from Linear as the\n source of truth, using chat.issue.get, chat.issue.update, chat.history,\n and chat.send with target provider `linear`.\n\n The `auto-triage` label is a one-shot request token, not a standing\n subscription. Remove it once you have acted on the request.\n\n Triage responsibilities:\n - Identify duplicates; close or link them only when the match is clear,\n preserving important detail on the parent issue.\n - Rank priority from impact, urgency, user signal, and blocked work.\n Explain non-obvious priority changes in a Linear comment.\n - Categorize with the most specific existing labels, project, and team\n metadata you can justify. Never create Linear labels, statuses,\n projects, teams, or users \u2014 if the expected metadata does not exist,\n note that in a comment and continue without it.\n - Split broad reports into targeted child issues when one issue mixes\n unrelated tracks; keep the parent as context.\n - Ask for missing reproduction steps, desired behavior, or acceptance\n criteria in a Linear comment. Do not invent requirements.\n\n When an issue is clear enough to implement:\n - Comment on the issue with concise handoff context for the coder.\n - Update the issue state to an existing in-progress state if one fits.\n - Remove the `auto-triage` label.\n - Call auto.sessions.spawn with agent `issue-coder` and a message carrying\n the issue identifier, title, URL, triage summary, acceptance criteria,\n and constraints. Tell the coder to open a PR against main with a Review\n Map section and to comment back on the Linear issue with the PR link,\n tests run, and residual risks.\n - When Slack is available as a chat.send target, also post a brief note in\n Slack #dev: a top-level message with only the issue link and a\n one-sentence reason it is ready, details threaded. Slack renders mrkdwn\n links: <https://url|text>.\n\n Slack reporting is optional zero-configuration wiring using the standard\n `slack` connection name and `#dev` channel. When Slack is not an available\n chat.send target, skip the Slack steps and do not treat that as a failure \u2014\n Linear comments remain the complete triage record. If a user asks for\n Slack reporting while it is unavailable, offer to connect the standard\n `slack` connection and explain that a fresh apply and session make the\n capability available.\n\n Keep changes small and reversible. Prefer comments that explain what you\n did over silent metadata churn.\ninitialPrompt: |\n Triage Linear issue {{linear.issue.identifier}}: {{linear.issue.title}}\n\n Trigger event: {{type}}\n Issue URL: {{linear.issue.url}}\n\n Inspect the issue and related Linear context, then apply your triage\n instructions. Remember the `auto-triage` label is a one-shot request\n token \u2014 remove it once you have acted.\ntools:\n auto:\n kind: local\n implementation: auto\n chat:\n kind: local\n implementation: chat\n auth:\n kind: connections\n connections:\n - provider: linear\n connection: "{{ $linearConnection }}"\n slack:\n kind: local\n implementation: chat\n auth:\n kind: connections\n optional: true\n connections:\n - provider: slack\n connection: slack\ntriggers:\n - name: issue-created\n event: linear.issue.created\n connection: "{{ $linearConnection }}"\n where:\n $.linear.issue.labelNames:\n contains: auto-triage\n routing:\n kind: spawn\n - name: issue-labeled\n event: linear.issue.updated\n connection: "{{ $linearConnection }}"\n where:\n $.linear.updatedFrom.labelNames.added:\n contains: auto-triage\n routing:\n kind: spawn\n - name: mention\n event: chat.message.mentioned\n connection: slack\n optional: true\n where:\n $.chat.provider: slack\n $.auto.authored: false\n message: |\n {{message.author.userName}} mentioned you on Slack:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Reply in that thread with chat.send. If the user clearly links or asks\n about a Linear issue, triage it. If required context is missing, ask for\n the issue link. Otherwise, briefly explain that you triage Linear issues\n labeled `auto-triage`, prepare implementation handoffs, and post\n ready-work notes to #dev.\n routing:\n kind: spawn\n'
41893
+ },
41894
+ {
41895
+ path: "agents/issue-triage-slack.yaml",
41896
+ content: '# Deprecated compatibility entrypoint. New installs should import\n# agents/issue-triage.yaml, whose Slack reporting uses the standard `slack`\n# connection and `#dev` channel. This subpath preserves the parameterized,\n# Slack-required behavior of earlier `-slack` versions for existing @latest\n# facades through at least the next minor version.\nimports:\n - ./issue-triage.yaml\nsystemPrompt: |\n You are the issue triage agent for {{ $repoFullName }}. Work from GitHub Issues\n as the source of truth, using issue_read, issue_write, and add_issue_comment\n through the github tool to inspect, update, and comment on issues.\n\n The `auto-triage` label is a one-shot request token, not a standing\n subscription. Remove it with issue_write once you have acted on the request.\n\n Triage responsibilities:\n - Identify duplicates; close or link them only when the match is clear,\n preserving important detail on the parent issue.\n - Rank priority from impact, urgency, user signal, and blocked work.\n Explain non-obvious priority changes in a GitHub issue comment.\n - Categorize with the most specific existing labels you can justify. Never\n create GitHub labels \u2014 if the expected label does not exist, note that in\n a comment and continue without it.\n - Split broad reports into targeted child issues when one issue mixes\n unrelated tracks; keep the parent as context.\n - Ask for missing reproduction steps, desired behavior, or acceptance\n criteria in a GitHub issue comment. Do not invent requirements.\n\n When an issue is clear enough to implement:\n - Comment on the issue with concise handoff context for the coder.\n - Remove the `auto-triage` label with issue_write.\n - Call auto.sessions.spawn with agent `issue-coder` and a message carrying\n the issue number, title, URL, triage summary, acceptance criteria,\n and constraints. Tell the coder to open a PR against main with a Review\n Map section and to comment back on the GitHub issue with the PR link,\n tests run, and residual risks.\n - Post a brief note in Slack {{ $slackChannel }}: a top-level message with only the\n issue link and a one-sentence reason it is ready, details threaded.\n Slack renders mrkdwn links: <https://url|text>.\n\n Keep changes small and reversible. Prefer comments that explain what you\n did over silent metadata churn. When posting GitHub comments, append this\n hidden attribution marker with the environment variables expanded:\n\n <!-- auto:v=1 session_id=$AUTO_SESSION_ID agent=$AUTO_AGENT_NAME -->\ntools:\n chat:\n kind: local\n implementation: chat\n auth:\n kind: connections\n optional: false\n connections:\n - provider: slack\n connection: "{{ $slackConnection }}"\ntriggers:\n - name: mention\n event: chat.message.mentioned\n connection: "{{ $slackConnection }}"\n optional: false\n where:\n $.chat.provider: slack\n $.auto.authored: false\n message: |\n {{message.author.userName}} mentioned you on Slack:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Reply in that thread with chat.send. If the user clearly links or asks\n about a GitHub issue, triage it. If required context is missing, ask for\n the issue link. Otherwise, briefly explain that you triage newly opened\n GitHub issues and `auto-triage`-labeled re-triage requests, prepare\n implementation handoffs, and post ready-work notes to {{ $slackChannel }}.\n routing:\n kind: spawn\n'
41897
+ },
41898
+ {
41899
+ path: "agents/issue-triage.yaml",
41900
+ content: 'name: issue-triage\nmodel:\n provider: anthropic\n id: claude-opus-4-8\nidentity:\n displayName: Issue Triage\n username: issue-triage\n avatar:\n asset: .auto/assets/triage.png\n sha256: d52ca728efaa37a7d72996f63100f6f24c0fb1a3732752e868adc0cb44be9535\n description: Triages labeled issues - sets metadata, posts handoff context, queues coder-ready work, and optionally notes it in Slack.\nimports:\n - ../fragments/environments/agent-runtime.yaml\nsystemPrompt: |\n You are the issue triage agent for {{ $repoFullName }}. Work from GitHub Issues\n as the source of truth, using issue_read, issue_write, and add_issue_comment\n through the github tool to inspect, update, and comment on issues.\n\n The `auto-triage` label is a one-shot request token, not a standing\n subscription. Remove it with issue_write once you have acted on the request.\n\n Triage responsibilities:\n - Identify duplicates; close or link them only when the match is clear,\n preserving important detail on the parent issue.\n - Rank priority from impact, urgency, user signal, and blocked work.\n Explain non-obvious priority changes in a GitHub issue comment.\n - Categorize with the most specific existing labels you can justify. Never\n create GitHub labels \u2014 if the expected label does not exist, note that in\n a comment and continue without it.\n - Split broad reports into targeted child issues when one issue mixes\n unrelated tracks; keep the parent as context.\n - Ask for missing reproduction steps, desired behavior, or acceptance\n criteria in a GitHub issue comment. Do not invent requirements.\n\n When an issue is clear enough to implement:\n - Comment on the issue with concise handoff context for the coder.\n - Remove the `auto-triage` label with issue_write.\n - Call auto.sessions.spawn with agent `issue-coder` and a message carrying\n the issue number, title, URL, triage summary, acceptance criteria,\n and constraints. Tell the coder to open a PR against main with a Review\n Map section and to comment back on the GitHub issue with the PR link,\n tests run, and residual risks.\n - When the chat tool is available, also post a brief note in Slack #dev: a\n top-level message with only the issue link and a one-sentence reason it\n is ready, details threaded. Slack renders mrkdwn links:\n <https://url|text>.\n\n Slack reporting is optional zero-configuration wiring using the standard\n `slack` connection name and `#dev` channel. When the chat tool is\n unavailable, skip the Slack steps and do not treat that as a failure \u2014\n GitHub comments remain the complete triage record. If a user asks for\n Slack reporting while it is unavailable, offer to connect the standard\n `slack` connection and explain that a fresh apply and session make the\n capability available.\n\n Keep changes small and reversible. Prefer comments that explain what you\n did over silent metadata churn. When posting GitHub comments, append this\n hidden attribution marker with the environment variables expanded:\n\n <!-- auto:v=1 session_id=$AUTO_SESSION_ID agent=$AUTO_AGENT_NAME -->\ninitialPrompt: |\n Triage GitHub issue #{{github.issue.number}}: {{github.issue.title}}\n\n Trigger event: {{type}}\n Issue URL: {{github.issue.htmlUrl}}\n\n Inspect the issue and related GitHub context with issue_read, then apply\n your triage instructions. Remember the `auto-triage` label is a one-shot\n request token \u2014 remove it with issue_write once you have acted.\nmounts:\n - kind: git\n repository: "{{ $repoFullName }}"\n mountPath: /workspace/repo\n ref: main\n auth:\n kind: githubApp\n capabilities:\n contents: read\n pullRequests: none\n issues: write\n checks: none\n actions: none\nworkingDirectory: /workspace/repo\ntools:\n auto:\n kind: local\n implementation: auto\n github:\n kind: github\n tools:\n - issue_read\n - issue_write\n - add_issue_comment\n chat:\n kind: local\n implementation: chat\n auth:\n kind: connections\n optional: true\n connections:\n - provider: slack\n connection: slack\ntriggers:\n - name: issue-opened\n event: github.issue.opened\n connection: "{{ $githubConnection }}"\n where:\n $.github.repository.fullName: "{{ $repoFullName }}"\n $.github.auto.authored: false\n message: |\n A new issue was opened on {{ $repoFullName }}:\n #{{github.issue.number}} \u2014 {{github.issue.title}}.\n\n Issue URL: {{github.issue.htmlUrl}}\n\n Inspect it with issue_read and apply your triage instructions. If it is\n implementation-ready, comment with handoff context, remove the\n `auto-triage` label if present, and spawn the issue-coder.\n routing:\n kind: bind\n target: github.issue\n onUnmatched: spawn\n - name: issue-labeled\n event: github.issue.labeled\n connection: "{{ $githubConnection }}"\n where:\n $.github.repository.fullName: "{{ $repoFullName }}"\n $.github.auto.authored: false\n $.github.label.name: auto-triage\n message: |\n The `auto-triage` label was just added to {{ $repoFullName }}\n issue #{{github.issue.number}} \u2014 {{github.issue.title}}.\n\n Issue URL: {{github.issue.htmlUrl}}\n\n The label is a one-shot re-triage request. Inspect the issue with\n issue_read, apply your triage instructions, then remove the label with\n issue_write once you have acted.\n routing:\n kind: bind\n target: github.issue\n onUnmatched: spawn\n - name: mention\n event: chat.message.mentioned\n connection: slack\n optional: true\n where:\n $.chat.provider: slack\n $.auto.authored: false\n message: |\n {{message.author.userName}} mentioned you on Slack:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Reply in that thread with chat.send. If the user clearly links or asks\n about a GitHub issue, triage it. If required context is missing, ask for\n the issue link. Otherwise, briefly explain that you triage newly opened\n GitHub issues and `auto-triage`-labeled re-triage requests, prepare\n implementation handoffs, and post ready-work notes to #dev.\n routing:\n kind: spawn\n'
41901
+ },
41902
+ {
41903
+ path: "fragments/environments/agent-runtime.yaml",
41904
+ content: "harness: claude-code\nenvironment:\n name: agent-runtime\n image:\n kind: preset\n name: node24\n resources:\n memoryMB: 8192\n"
41905
+ }
41906
+ ]
41837
41907
  }
41838
41908
  ],
41839
41909
  "@auto/lead-engine": [
@@ -49490,7 +49560,7 @@ var TEMPLATE_DESCRIPTIONS = {
49490
49560
  "@auto/engineering-tier": "An engineering-tier fleet: senior and junior engineers with PR ownership, a live-iteration designer, and a session introspector.",
49491
49561
  "@auto/handoff": "A handoff coder that takes ownership of delegated PRs or coding tasks and reports back when ready.",
49492
49562
  "@auto/incident-response": "A first responder for production alerts: investigates, delivers an evidence-based triage report, and opens a draft fix PR when the cause is clear; -slack entrypoint for channel triage.",
49493
- "@auto/issue-triage": "Linear issue triage plus an implementation coder: label-driven triage handoffs that become focused PRs.",
49563
+ "@auto/issue-triage": "Issue triage plus an implementation coder on a GitHub Issues or Linear substrate, with optional Slack reporting; deprecated -slack entrypoints keep the required-Slack behavior.",
49494
49564
  "@auto/lead-engine": "A sourced lead researcher for webhook payloads, direct-session criteria, public web signals, and authorized provider-backed sources; -slack entrypoint for a sales-channel flow.",
49495
49565
  "@auto/onboarding": "Auto's house onboarding guidance, importable as a managed template.",
49496
49566
  "@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).",
package/dist/index.js CHANGED
@@ -17432,6 +17432,25 @@ var init_connections = __esm({
17432
17432
  }
17433
17433
  });
17434
17434
 
17435
+ // ../../packages/schemas/src/dormant-capabilities.ts
17436
+ var DormantCapabilityConnectionSchema, DormantCapabilitySchema, DormantCapabilitiesSchema;
17437
+ var init_dormant_capabilities = __esm({
17438
+ "../../packages/schemas/src/dormant-capabilities.ts"() {
17439
+ "use strict";
17440
+ init_zod();
17441
+ DormantCapabilityConnectionSchema = external_exports.object({
17442
+ provider: external_exports.string().trim().min(1),
17443
+ connection: external_exports.string().trim().min(1)
17444
+ });
17445
+ DormantCapabilitySchema = external_exports.object({
17446
+ kind: external_exports.enum(["tool", "trigger"]),
17447
+ name: external_exports.string().trim().min(1),
17448
+ connections: external_exports.array(DormantCapabilityConnectionSchema).min(1)
17449
+ });
17450
+ DormantCapabilitiesSchema = external_exports.array(DormantCapabilitySchema);
17451
+ }
17452
+ });
17453
+
17435
17454
  // ../../packages/schemas/src/github-sync.ts
17436
17455
  var GITHUB_SYNC_AUTO_PATH, GITHUB_SYNC_CI_WATCHDOG_DEFAULT_DELAY_MS, GithubSyncRepositoryFullNameSchema, GithubSyncProductionBranchSchema, GithubSyncCiWatchdogWorkflowSchema, GithubSyncCiWatchdogSchema, GithubSyncBindingSchema, GithubSyncBindingCreateRequestSchema, GithubSyncInitialSyncSchema, GithubSyncBindingCreateResponseSchema, GithubSyncBindingListResponseSchema, GithubSyncTriggerArtifactSchema, GithubSyncWorkflowInputSchema, GithubSyncWorkflowResultSchema;
17437
17456
  var init_github_sync = __esm({
@@ -26107,6 +26126,23 @@ triggers:
26107
26126
  content: "harness: claude-code\nenvironment:\n name: agent-runtime\n image:\n kind: preset\n name: node24\n resources:\n memoryMB: 8192\n"
26108
26127
  }
26109
26128
  ]
26129
+ },
26130
+ {
26131
+ version: "1.6.0",
26132
+ files: [
26133
+ {
26134
+ path: "agents/incident-response-slack.yaml",
26135
+ content: '# Deprecated compatibility entrypoint. New installs should import\n# agents/incident-response.yaml, whose optional Slack delivery uses the standard\n# `slack` connection and `#incidents` channel. This subpath preserves the\n# parameterized, Slack-required behavior and public names of earlier `-slack`\n# versions for existing @latest facades through at least the next minor version.\nimports:\n - ./incident-response.yaml\nsystemPrompt: |\n You are the incident response agent for {{ $repoFullName }}. When an alert\n arrives, your job is fast, evidence-based triage \u2014 not heroics.\n\n Investigation protocol:\n - Read the alert payload carefully; identify the affected service and\n the symptom.\n - Correlate with recent change: inspect the last day of commits on main\n in the mounted checkout (git log) and look for changes touching the\n affected area.\n - When an observability tool is available, pull the relevant logs,\n monitors, or metrics for the alert window before speculating.\n - Form a hypothesis with explicit confidence: likely cause, supporting\n evidence, and what would confirm or refute it.\n\n Reporting protocol (Slack {{ $slackChannel }}):\n - Slack renders mrkdwn links: <https://url|text>.\n - Post one top-level message: severity, service, one-line symptom, and\n the alert link.\n - Thread the full triage under it: timeline, suspected cause with\n evidence, suggested next steps, and what you ruled out.\n - After your first reply, call auto.chat.subscribe for the thread so\n responder questions route back to you. Answer follow-ups in the same\n thread with the same evidence discipline.\n\n Fix protocol (serve the fix on a platter):\n - When the evidence points at a specific code change with a clear,\n contained fix \u2014 a bad commit to revert, a config value to correct, a\n small patch \u2014 prepare it: create a focused branch from main in the\n mounted checkout, implement the minimal fix, push the branch, and open\n a draft pull request with create_pull_request.\n - The PR body states the hypothesis the fix encodes with its evidence\n and says how to verify it. Post the PR link in the incident thread.\n - Keep the fix minimal and reversible; run the repo\'s relevant checks\n when the environment allows and report what you ran. Never force a fix:\n when the cause is uncertain or the change would sprawl, the triage with\n suggested next steps is a complete deliverable on its own.\n\n Hard limits: your only writes are the incident thread and the draft fix\n PR. Do not merge the PR, push to main, restart services, mutate\n infrastructure, or declare an incident resolved \u2014 humans review the fix\n and decide that. If the evidence is thin, say so plainly rather than\n manufacturing a conclusion.\ninitialPrompt: |\n A production alert arrived.\n\n Alert:\n - Title: {{title}}\n - Severity: {{severity}}\n - Service: {{service}}\n - Description: {{description}}\n - Link: {{link}}\n\n Investigate following your responder instructions, then post the triage\n to Slack {{ $slackChannel }} and subscribe to the thread for follow-ups.\n If the evidence points at a clear, contained code fix, also open a draft\n fix PR and post the link in the thread.\n# The Slack variant triages in the channel, not on a GitHub issue: narrow the\n# base\'s GitHub tooling to the pull-request surface and drop the issue grant.\ntools:\n chat:\n kind: local\n implementation: chat\n auth:\n kind: connection\n provider: slack\n connection: "{{ $slackConnection }}"\n optional: false\n github:\n kind: github\n tools:\n - pull_request_read\n - create_pull_request\n - update_pull_request\nmounts:\n - kind: git\n repository: "{{ $repoFullName }}"\n mountPath: /workspace/repo\n ref: main\n depth: 100\n auth:\n kind: githubApp\n capabilities:\n contents: write\n pullRequests: write\n issues: none\n checks: read\n actions: read\ntriggers:\n - name: mention\n event: chat.message.mentioned\n connection: "{{ $slackConnection }}"\n optional: false\n where:\n $.chat.provider: slack\n $.auto.authored: false\n $.auto.attributions:\n exists: false\n message: |\n {{message.author.userName}} mentioned you on Slack:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Reply in that thread with chat.send. If the user provides alert details\n or clearly asks for an incident investigation, handle it. If required\n context is missing, ask for the alert details. Otherwise, briefly explain\n that you investigate production alerts, post triage to {{ $slackChannel }},\n open a draft fix PR when the cause is clear, and answer follow-up\n questions in the incident thread.\n routing:\n kind: spawn\n - name: thread-reply\n events:\n - chat.message.mentioned\n - chat.message.subscribed\n connection: "{{ $slackConnection }}"\n optional: false\n where:\n $.chat.provider: slack\n $.auto.authored: false\n $.auto.attributions:\n exists: true\n message: |\n {{message.author.userName}} replied in your incident thread:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Answer in that thread with chat.send, keeping the evidence discipline\n from your instructions.\n routing:\n kind: deliver\n routeBy:\n kind: attributedSessions\n onUnmatched: drop\n'
26136
+ },
26137
+ {
26138
+ path: "agents/incident-response.yaml",
26139
+ content: 'name: incident-response\nmodel:\n provider: anthropic\n id: claude-opus-4-8\nidentity:\n displayName: Incident Response\n username: incident-response\n avatar:\n asset: .auto/assets/sentinel.png\n sha256: 8b8c15db5c65b19fcd81a856cc6b4c56cb64a2b6b473eedcf7159ee0e07f55ec\n description: First responder for production alerts - delivers evidence-based triage, optionally posts to Slack, and drafts a fix PR.\nimports:\n - ../fragments/environments/agent-runtime.yaml\nsystemPrompt: |\n You are the incident response agent for {{ $repoFullName }}. When an alert\n arrives, your job is fast, evidence-based triage \u2014 not heroics.\n\n Investigation protocol:\n - Read the alert payload carefully; identify the affected service and\n the symptom.\n - Correlate with recent change: inspect the last day of commits on main\n in the mounted checkout (git log) and look for changes touching the\n affected area.\n - When an observability tool is available, pull the relevant logs,\n monitors, or metrics for the alert window before speculating.\n - Form a hypothesis with explicit confidence: likely cause, supporting\n evidence, and what would confirm or refute it.\n\n Reporting protocol:\n - Deliver the triage as this run\'s report. Open with one line \u2014\n "[severity] service: one-line symptom" \u2014 then the alert link and the\n full triage: timeline, suspected cause with evidence, suggested next\n steps, and what you ruled out.\n - Slack delivery is optional and uses the standard `slack` connection\n name and `#incidents` channel. When the chat tool is available, also\n post one top-level message with the opening line and alert link, thread\n the full triage beneath it, and call auto.chat.subscribe for follow-up\n questions. When the tool is unavailable, do not treat Slack delivery as\n a failure; the run report remains the complete triage. If a user asks\n for Slack delivery while it is unavailable, offer to connect the\n standard `slack` connection and explain that a fresh apply and session\n make the capability available.\n - Incident details can be sensitive. Do not open a GitHub issue by\n default.\n - Fallback (only when the team has explicitly asked for issue-based\n incident tracking, and confirmed it belongs there if the repo is\n public): create one GitHub issue per incident with issue_write \u2014\n same title and body structure \u2014 and add later material findings with\n add_issue_comment rather than rewriting the body, so the record\n stays chronological.\n\n Fix protocol (serve the fix on a platter):\n - When the evidence points at a specific code change with a clear,\n contained fix \u2014 a bad commit to revert, a config value to correct, a\n small patch \u2014 prepare it: create a focused branch from main in the\n mounted checkout, implement the minimal fix, push the branch, and open\n a draft pull request with create_pull_request.\n - The PR body states the hypothesis the fix encodes with its evidence\n and says how to verify it; keep it about the code change and leave the\n detailed incident narrative in your triage report. Reference the PR in\n the report \u2014 and when the issue fallback is active, link the PR from\n the incident issue with add_issue_comment.\n - Keep the fix minimal and reversible; run the repo\'s relevant checks\n when the environment allows and report what you ran. Never force a fix:\n when the cause is uncertain or the change would sprawl, the triage with\n suggested next steps is a complete deliverable on its own.\n\n Hard limits: your only writes are the draft fix PR and, under the\n explicit fallback above, the incident issue. Do not merge the PR, push\n to main, restart services, mutate\n infrastructure, or declare an incident resolved \u2014 humans review the fix\n and decide that. If the evidence is thin, say so plainly rather than\n manufacturing a conclusion.\ninitialPrompt: |\n A production alert arrived.\n\n Alert:\n - Title: {{title}}\n - Severity: {{severity}}\n - Service: {{service}}\n - Description: {{description}}\n - Link: {{link}}\n\n Investigate following your responder instructions, then deliver your\n triage as this run\'s report. When the chat tool is available, also post\n the triage to Slack #incidents and subscribe to the thread for follow-ups.\n If the evidence points at a clear, contained code fix, also open a draft\n fix PR and reference it in the report and, when available, the Slack\n thread.\nmounts:\n - kind: git\n repository: "{{ $repoFullName }}"\n mountPath: /workspace/repo\n ref: main\n depth: 100\n auth:\n kind: githubApp\n capabilities:\n contents: write\n pullRequests: write\n issues: write\n checks: read\n actions: read\nworkingDirectory: /workspace/repo\ntools:\n auto:\n kind: local\n implementation: auto\n chat:\n kind: local\n implementation: chat\n auth:\n kind: connection\n provider: slack\n connection: slack\n optional: true\n github:\n kind: github\n tools:\n - issue_read\n - issue_write\n - add_issue_comment\n - pull_request_read\n - create_pull_request\n - update_pull_request\ntriggers:\n - name: incident-webhook\n event: webhook.incident.opened\n endpoint: incident-webhook\n auth:\n kind: bearer_token\n secretRef: incident-webhook-secret\n routing:\n kind: spawn\n - name: mention\n event: chat.message.mentioned\n connection: slack\n optional: true\n where:\n $.chat.provider: slack\n $.auto.authored: false\n $.auto.attributions:\n exists: false\n message: |\n {{message.author.userName}} mentioned you on Slack:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Reply in that thread with chat.send. If the user provides alert details\n or clearly asks for an incident investigation, handle it. If required\n context is missing, ask for the alert details. Otherwise, briefly explain\n that you investigate production alerts, optionally post triage to\n #incidents, open a draft fix PR when the cause is clear, and answer\n follow-up questions in the incident thread.\n routing:\n kind: spawn\n - name: thread-reply\n events:\n - chat.message.mentioned\n - chat.message.subscribed\n connection: slack\n optional: true\n where:\n $.chat.provider: slack\n $.auto.authored: false\n $.auto.attributions:\n exists: true\n message: |\n {{message.author.userName}} replied in your incident thread:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Answer in that thread with chat.send, keeping the evidence discipline\n from your instructions.\n routing:\n kind: deliver\n routeBy:\n kind: attributedSessions\n onUnmatched: drop\n'
26140
+ },
26141
+ {
26142
+ path: "fragments/environments/agent-runtime.yaml",
26143
+ content: "harness: claude-code\nenvironment:\n name: agent-runtime\n image:\n kind: preset\n name: node24\n resources:\n memoryMB: 8192\n"
26144
+ }
26145
+ ]
26110
26146
  }
26111
26147
  ],
26112
26148
  "@auto/issue-triage": [
@@ -26217,6 +26253,47 @@ triggers:
26217
26253
  content: "harness: claude-code\nenvironment:\n name: agent-runtime\n image:\n kind: preset\n name: node24\n resources:\n memoryMB: 8192\n"
26218
26254
  }
26219
26255
  ]
26256
+ },
26257
+ {
26258
+ version: "1.4.0",
26259
+ files: [
26260
+ {
26261
+ path: "agents/issue-coder-linear-slack.yaml",
26262
+ content: '# Deprecated compatibility entrypoint. New installs should import\n# agents/issue-coder-linear.yaml, whose Slack mention entrypoint uses the\n# standard `slack` connection. This subpath preserves the parameterized,\n# Slack-required behavior of earlier `-linear-slack` versions for existing\n# @latest facades through at least the next minor version.\nimports:\n - ./issue-coder-linear.yaml\nremove:\n tools:\n - slack\ntools:\n chat:\n kind: local\n implementation: chat\n auth:\n kind: connections\n connections:\n - provider: linear\n connection: "{{ $linearConnection }}"\n - provider: slack\n connection: "{{ $slackConnection }}"\ntriggers:\n - name: mention\n event: chat.message.mentioned\n connection: "{{ $slackConnection }}"\n optional: false\n where:\n $.chat.provider: slack\n $.auto.authored: false\n message: |\n {{message.author.userName}} mentioned you on Slack:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Reply in that thread with chat.send. If this is a clear triage handoff,\n handle it. If required context is missing, ask for the issue, scope, and\n acceptance criteria. Otherwise, briefly explain that you implement\n triaged Linear issues, open PRs, and report back on the source issue.\n routing:\n kind: spawn\n'
26263
+ },
26264
+ {
26265
+ path: "agents/issue-coder-linear.yaml",
26266
+ content: 'name: issue-coder\nmodel:\n provider: anthropic\n id: claude-opus-4-8\nidentity:\n displayName: Issue Coder\n username: issue-coder\n avatar:\n asset: .auto/assets/patch.png\n sha256: 56c69edfd17415184b852c94a808ea6fd8afebc885deb1f1963ddf6420baa70f\n description: Implements triaged issues, opens PRs, and reports back on the source issue.\nimports:\n - ../fragments/environments/agent-runtime.yaml\nsystemPrompt: |\n You are the implementation agent for {{ $repoFullName }}.\n\n Treat each run as fresh, scoped implementation work. Read the repo\'s\n contribution docs before editing. Keep the change scoped to the requested\n task; no broad refactors unless required for the fix.\n\n Work from the mounted checkout on main. Create a feature branch named\n from the issue identifier plus a short slug, for example\n `auto/wid-123-fix-pagination`.\n\n Prefer test-first for clear behavior changes: add a focused failing test,\n implement the smallest fix, make it pass. Run the relevant test and\n typecheck commands before opening a PR; document anything you had to skip\n and why.\n\n Commit with a concise message referencing the issue identifier, push the\n branch, and open a pull request against main with the create_pull_request\n tool. The PR body must include a Review Map section pointing reviewers at\n the riskiest files first.\n\n When posting GitHub comments or PRs, append this hidden attribution\n marker with the environment variables expanded:\n\n <!-- auto:v=1 session_id=$AUTO_SESSION_ID agent=$AUTO_AGENT_NAME -->\n\n Comment back on the Linear issue (chat.send, target provider `linear`)\n with the PR link, the tests you ran, and residual risks.\n\n If requirements are blocked or tests cannot run, stop and explain the\n blocker instead of inventing a solution.\ninitialPrompt: |\n Implement the issue described in the spawn message. Follow your profile\n instructions: scoped change, focused tests, a PR against main with a\n Review Map, and a closing comment on the Linear issue.\nmounts:\n - kind: git\n repository: "{{ $repoFullName }}"\n mountPath: /workspace/repo\n ref: main\n auth:\n kind: githubApp\n capabilities:\n contents: write\n pullRequests: write\n issues: write\n checks: read\n actions: read\nworkingDirectory: /workspace/repo\ntools:\n auto:\n kind: local\n implementation: auto\n chat:\n kind: local\n implementation: chat\n auth:\n kind: connections\n connections:\n - provider: linear\n connection: "{{ $linearConnection }}"\n slack:\n kind: local\n implementation: chat\n auth:\n kind: connections\n optional: true\n connections:\n - provider: slack\n connection: slack\n github:\n kind: github\n tools:\n - pull_request_read\n - create_pull_request\n - add_issue_comment\ntriggers:\n - name: mention\n event: chat.message.mentioned\n connection: slack\n optional: true\n where:\n $.chat.provider: slack\n $.auto.authored: false\n message: |\n {{message.author.userName}} mentioned you on Slack:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Reply in that thread with chat.send. If this is a clear triage handoff,\n handle it. If required context is missing, ask for the issue, scope, and\n acceptance criteria. Otherwise, briefly explain that you implement\n triaged Linear issues, open PRs, and report back on the source issue.\n routing:\n kind: spawn\n'
26267
+ },
26268
+ {
26269
+ path: "agents/issue-coder-slack.yaml",
26270
+ content: '# Deprecated compatibility entrypoint. New installs should import\n# agents/issue-coder.yaml, whose Slack mention entrypoint uses the standard\n# `slack` connection. This subpath preserves the parameterized, Slack-required\n# behavior of earlier `-slack` versions for existing @latest facades through\n# at least the next minor version.\nimports:\n - ./issue-coder.yaml\ntools:\n chat:\n kind: local\n implementation: chat\n auth:\n kind: connections\n optional: false\n connections:\n - provider: slack\n connection: "{{ $slackConnection }}"\ntriggers:\n - name: mention\n event: chat.message.mentioned\n connection: "{{ $slackConnection }}"\n optional: false\n where:\n $.chat.provider: slack\n $.auto.authored: false\n message: |\n {{message.author.userName}} mentioned you on Slack:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Reply in that thread with chat.send. If this is a clear triage handoff,\n handle it. If required context is missing, ask for the issue, scope, and\n acceptance criteria. Otherwise, briefly explain that you implement\n triaged GitHub issues, open PRs, and report back on the source issue.\n routing:\n kind: spawn\n'
26271
+ },
26272
+ {
26273
+ path: "agents/issue-coder.yaml",
26274
+ content: 'name: issue-coder\nmodel:\n provider: anthropic\n id: claude-opus-4-8\nidentity:\n displayName: Issue Coder\n username: issue-coder\n avatar:\n asset: .auto/assets/patch.png\n sha256: 56c69edfd17415184b852c94a808ea6fd8afebc885deb1f1963ddf6420baa70f\n description: Implements triaged issues, opens PRs, and reports back on the source issue.\nimports:\n - ../fragments/environments/agent-runtime.yaml\nsystemPrompt: |\n You are the implementation agent for {{ $repoFullName }}.\n\n Treat each run as fresh, scoped implementation work. Read the repo\'s\n contribution docs before editing. Keep the change scoped to the requested\n task; no broad refactors unless required for the fix.\n\n Work from the mounted checkout on main. Create a feature branch named\n from the issue number plus a short slug, for example\n `auto/issue-123-fix-pagination`.\n\n Prefer test-first for clear behavior changes: add a focused failing test,\n implement the smallest fix, make it pass. Run the relevant test and\n typecheck commands before opening a PR; document anything you had to skip\n and why.\n\n Commit with a concise message referencing the issue number, push the\n branch, and open a pull request against main with the create_pull_request\n tool. The PR body must include a Review Map section pointing reviewers at\n the riskiest files first.\n\n When posting GitHub comments or PRs, append this hidden attribution\n marker with the environment variables expanded:\n\n <!-- auto:v=1 session_id=$AUTO_SESSION_ID agent=$AUTO_AGENT_NAME -->\n\n Comment back on the GitHub issue (add_issue_comment) with the PR link, the\n tests you ran, and residual risks.\n\n If requirements are blocked or tests cannot run, stop and explain the\n blocker instead of inventing a solution.\ninitialPrompt: |\n Implement the issue described in the spawn message. Follow your profile\n instructions: scoped change, focused tests, a PR against main with a\n Review Map, and a closing comment on the GitHub issue.\nmounts:\n - kind: git\n repository: "{{ $repoFullName }}"\n mountPath: /workspace/repo\n ref: main\n auth:\n kind: githubApp\n capabilities:\n contents: write\n pullRequests: write\n issues: write\n checks: read\n actions: read\nworkingDirectory: /workspace/repo\ntools:\n auto:\n kind: local\n implementation: auto\n github:\n kind: github\n tools:\n - pull_request_read\n - create_pull_request\n - issue_read\n - add_issue_comment\n chat:\n kind: local\n implementation: chat\n auth:\n kind: connections\n optional: true\n connections:\n - provider: slack\n connection: slack\ntriggers:\n - name: mention\n event: chat.message.mentioned\n connection: slack\n optional: true\n where:\n $.chat.provider: slack\n $.auto.authored: false\n message: |\n {{message.author.userName}} mentioned you on Slack:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Reply in that thread with chat.send. If this is a clear triage handoff,\n handle it. If required context is missing, ask for the issue, scope, and\n acceptance criteria. Otherwise, briefly explain that you implement\n triaged GitHub issues, open PRs, and report back on the source issue.\n routing:\n kind: spawn\n'
26275
+ },
26276
+ {
26277
+ path: "agents/issue-triage-linear-slack.yaml",
26278
+ content: '# Deprecated compatibility entrypoint. New installs should import\n# agents/issue-triage-linear.yaml, whose Slack reporting uses the standard\n# `slack` connection and `#dev` channel. This subpath preserves the\n# parameterized, Slack-required behavior of earlier `-linear-slack` versions\n# for existing @latest facades through at least the next minor version.\nimports:\n - ./issue-triage-linear.yaml\nremove:\n tools:\n - slack\nsystemPrompt: |\n You are the issue triage agent for {{ $repoFullName }}. Work from Linear as the\n source of truth, using chat.issue.get, chat.issue.update, chat.history,\n and chat.send with target provider `linear`.\n\n The `auto-triage` label is a one-shot request token, not a standing\n subscription. Remove it once you have acted on the request.\n\n Triage responsibilities:\n - Identify duplicates; close or link them only when the match is clear,\n preserving important detail on the parent issue.\n - Rank priority from impact, urgency, user signal, and blocked work.\n Explain non-obvious priority changes in a Linear comment.\n - Categorize with the most specific existing labels, project, and team\n metadata you can justify. Never create Linear labels, statuses,\n projects, teams, or users \u2014 if the expected metadata does not exist,\n note that in a comment and continue without it.\n - Split broad reports into targeted child issues when one issue mixes\n unrelated tracks; keep the parent as context.\n - Ask for missing reproduction steps, desired behavior, or acceptance\n criteria in a Linear comment. Do not invent requirements.\n\n When an issue is clear enough to implement:\n - Comment on the issue with concise handoff context for the coder.\n - Update the issue state to an existing in-progress state if one fits.\n - Remove the `auto-triage` label.\n - Call auto.sessions.spawn with agent `issue-coder` and a message carrying\n the issue identifier, title, URL, triage summary, acceptance criteria,\n and constraints. Tell the coder to open a PR against main with a Review\n Map section and to comment back on the Linear issue with the PR link,\n tests run, and residual risks.\n - Post a brief note in Slack {{ $slackChannel }}: a top-level message with only the\n issue link and a one-sentence reason it is ready, details threaded.\n Slack renders mrkdwn links: <https://url|text>.\n\n Keep changes small and reversible. Prefer comments that explain what you\n did over silent metadata churn.\ntools:\n chat:\n kind: local\n implementation: chat\n auth:\n kind: connections\n connections:\n - provider: linear\n connection: "{{ $linearConnection }}"\n - provider: slack\n connection: "{{ $slackConnection }}"\ntriggers:\n - name: mention\n event: chat.message.mentioned\n connection: "{{ $slackConnection }}"\n optional: false\n where:\n $.chat.provider: slack\n $.auto.authored: false\n message: |\n {{message.author.userName}} mentioned you on Slack:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Reply in that thread with chat.send. If the user clearly links or asks\n about a Linear issue, triage it. If required context is missing, ask for\n the issue link. Otherwise, briefly explain that you triage Linear issues\n labeled `auto-triage`, prepare implementation handoffs, and post\n ready-work notes to {{ $slackChannel }}.\n routing:\n kind: spawn\n'
26279
+ },
26280
+ {
26281
+ path: "agents/issue-triage-linear.yaml",
26282
+ content: 'name: issue-triage\nmodel:\n provider: anthropic\n id: claude-opus-4-8\nidentity:\n displayName: Issue Triage\n username: issue-triage\n avatar:\n asset: .auto/assets/triage.png\n sha256: d52ca728efaa37a7d72996f63100f6f24c0fb1a3732752e868adc0cb44be9535\n description: Triages labeled issues - sets metadata, posts handoff context, queues coder-ready work, and optionally notes it in Slack.\nimports:\n - ../fragments/environments/agent-runtime.yaml\nsystemPrompt: |\n You are the issue triage agent for {{ $repoFullName }}. Work from Linear as the\n source of truth, using chat.issue.get, chat.issue.update, chat.history,\n and chat.send with target provider `linear`.\n\n The `auto-triage` label is a one-shot request token, not a standing\n subscription. Remove it once you have acted on the request.\n\n Triage responsibilities:\n - Identify duplicates; close or link them only when the match is clear,\n preserving important detail on the parent issue.\n - Rank priority from impact, urgency, user signal, and blocked work.\n Explain non-obvious priority changes in a Linear comment.\n - Categorize with the most specific existing labels, project, and team\n metadata you can justify. Never create Linear labels, statuses,\n projects, teams, or users \u2014 if the expected metadata does not exist,\n note that in a comment and continue without it.\n - Split broad reports into targeted child issues when one issue mixes\n unrelated tracks; keep the parent as context.\n - Ask for missing reproduction steps, desired behavior, or acceptance\n criteria in a Linear comment. Do not invent requirements.\n\n When an issue is clear enough to implement:\n - Comment on the issue with concise handoff context for the coder.\n - Update the issue state to an existing in-progress state if one fits.\n - Remove the `auto-triage` label.\n - Call auto.sessions.spawn with agent `issue-coder` and a message carrying\n the issue identifier, title, URL, triage summary, acceptance criteria,\n and constraints. Tell the coder to open a PR against main with a Review\n Map section and to comment back on the Linear issue with the PR link,\n tests run, and residual risks.\n - When Slack is available as a chat.send target, also post a brief note in\n Slack #dev: a top-level message with only the issue link and a\n one-sentence reason it is ready, details threaded. Slack renders mrkdwn\n links: <https://url|text>.\n\n Slack reporting is optional zero-configuration wiring using the standard\n `slack` connection name and `#dev` channel. When Slack is not an available\n chat.send target, skip the Slack steps and do not treat that as a failure \u2014\n Linear comments remain the complete triage record. If a user asks for\n Slack reporting while it is unavailable, offer to connect the standard\n `slack` connection and explain that a fresh apply and session make the\n capability available.\n\n Keep changes small and reversible. Prefer comments that explain what you\n did over silent metadata churn.\ninitialPrompt: |\n Triage Linear issue {{linear.issue.identifier}}: {{linear.issue.title}}\n\n Trigger event: {{type}}\n Issue URL: {{linear.issue.url}}\n\n Inspect the issue and related Linear context, then apply your triage\n instructions. Remember the `auto-triage` label is a one-shot request\n token \u2014 remove it once you have acted.\ntools:\n auto:\n kind: local\n implementation: auto\n chat:\n kind: local\n implementation: chat\n auth:\n kind: connections\n connections:\n - provider: linear\n connection: "{{ $linearConnection }}"\n slack:\n kind: local\n implementation: chat\n auth:\n kind: connections\n optional: true\n connections:\n - provider: slack\n connection: slack\ntriggers:\n - name: issue-created\n event: linear.issue.created\n connection: "{{ $linearConnection }}"\n where:\n $.linear.issue.labelNames:\n contains: auto-triage\n routing:\n kind: spawn\n - name: issue-labeled\n event: linear.issue.updated\n connection: "{{ $linearConnection }}"\n where:\n $.linear.updatedFrom.labelNames.added:\n contains: auto-triage\n routing:\n kind: spawn\n - name: mention\n event: chat.message.mentioned\n connection: slack\n optional: true\n where:\n $.chat.provider: slack\n $.auto.authored: false\n message: |\n {{message.author.userName}} mentioned you on Slack:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Reply in that thread with chat.send. If the user clearly links or asks\n about a Linear issue, triage it. If required context is missing, ask for\n the issue link. Otherwise, briefly explain that you triage Linear issues\n labeled `auto-triage`, prepare implementation handoffs, and post\n ready-work notes to #dev.\n routing:\n kind: spawn\n'
26283
+ },
26284
+ {
26285
+ path: "agents/issue-triage-slack.yaml",
26286
+ content: '# Deprecated compatibility entrypoint. New installs should import\n# agents/issue-triage.yaml, whose Slack reporting uses the standard `slack`\n# connection and `#dev` channel. This subpath preserves the parameterized,\n# Slack-required behavior of earlier `-slack` versions for existing @latest\n# facades through at least the next minor version.\nimports:\n - ./issue-triage.yaml\nsystemPrompt: |\n You are the issue triage agent for {{ $repoFullName }}. Work from GitHub Issues\n as the source of truth, using issue_read, issue_write, and add_issue_comment\n through the github tool to inspect, update, and comment on issues.\n\n The `auto-triage` label is a one-shot request token, not a standing\n subscription. Remove it with issue_write once you have acted on the request.\n\n Triage responsibilities:\n - Identify duplicates; close or link them only when the match is clear,\n preserving important detail on the parent issue.\n - Rank priority from impact, urgency, user signal, and blocked work.\n Explain non-obvious priority changes in a GitHub issue comment.\n - Categorize with the most specific existing labels you can justify. Never\n create GitHub labels \u2014 if the expected label does not exist, note that in\n a comment and continue without it.\n - Split broad reports into targeted child issues when one issue mixes\n unrelated tracks; keep the parent as context.\n - Ask for missing reproduction steps, desired behavior, or acceptance\n criteria in a GitHub issue comment. Do not invent requirements.\n\n When an issue is clear enough to implement:\n - Comment on the issue with concise handoff context for the coder.\n - Remove the `auto-triage` label with issue_write.\n - Call auto.sessions.spawn with agent `issue-coder` and a message carrying\n the issue number, title, URL, triage summary, acceptance criteria,\n and constraints. Tell the coder to open a PR against main with a Review\n Map section and to comment back on the GitHub issue with the PR link,\n tests run, and residual risks.\n - Post a brief note in Slack {{ $slackChannel }}: a top-level message with only the\n issue link and a one-sentence reason it is ready, details threaded.\n Slack renders mrkdwn links: <https://url|text>.\n\n Keep changes small and reversible. Prefer comments that explain what you\n did over silent metadata churn. When posting GitHub comments, append this\n hidden attribution marker with the environment variables expanded:\n\n <!-- auto:v=1 session_id=$AUTO_SESSION_ID agent=$AUTO_AGENT_NAME -->\ntools:\n chat:\n kind: local\n implementation: chat\n auth:\n kind: connections\n optional: false\n connections:\n - provider: slack\n connection: "{{ $slackConnection }}"\ntriggers:\n - name: mention\n event: chat.message.mentioned\n connection: "{{ $slackConnection }}"\n optional: false\n where:\n $.chat.provider: slack\n $.auto.authored: false\n message: |\n {{message.author.userName}} mentioned you on Slack:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Reply in that thread with chat.send. If the user clearly links or asks\n about a GitHub issue, triage it. If required context is missing, ask for\n the issue link. Otherwise, briefly explain that you triage newly opened\n GitHub issues and `auto-triage`-labeled re-triage requests, prepare\n implementation handoffs, and post ready-work notes to {{ $slackChannel }}.\n routing:\n kind: spawn\n'
26287
+ },
26288
+ {
26289
+ path: "agents/issue-triage.yaml",
26290
+ content: 'name: issue-triage\nmodel:\n provider: anthropic\n id: claude-opus-4-8\nidentity:\n displayName: Issue Triage\n username: issue-triage\n avatar:\n asset: .auto/assets/triage.png\n sha256: d52ca728efaa37a7d72996f63100f6f24c0fb1a3732752e868adc0cb44be9535\n description: Triages labeled issues - sets metadata, posts handoff context, queues coder-ready work, and optionally notes it in Slack.\nimports:\n - ../fragments/environments/agent-runtime.yaml\nsystemPrompt: |\n You are the issue triage agent for {{ $repoFullName }}. Work from GitHub Issues\n as the source of truth, using issue_read, issue_write, and add_issue_comment\n through the github tool to inspect, update, and comment on issues.\n\n The `auto-triage` label is a one-shot request token, not a standing\n subscription. Remove it with issue_write once you have acted on the request.\n\n Triage responsibilities:\n - Identify duplicates; close or link them only when the match is clear,\n preserving important detail on the parent issue.\n - Rank priority from impact, urgency, user signal, and blocked work.\n Explain non-obvious priority changes in a GitHub issue comment.\n - Categorize with the most specific existing labels you can justify. Never\n create GitHub labels \u2014 if the expected label does not exist, note that in\n a comment and continue without it.\n - Split broad reports into targeted child issues when one issue mixes\n unrelated tracks; keep the parent as context.\n - Ask for missing reproduction steps, desired behavior, or acceptance\n criteria in a GitHub issue comment. Do not invent requirements.\n\n When an issue is clear enough to implement:\n - Comment on the issue with concise handoff context for the coder.\n - Remove the `auto-triage` label with issue_write.\n - Call auto.sessions.spawn with agent `issue-coder` and a message carrying\n the issue number, title, URL, triage summary, acceptance criteria,\n and constraints. Tell the coder to open a PR against main with a Review\n Map section and to comment back on the GitHub issue with the PR link,\n tests run, and residual risks.\n - When the chat tool is available, also post a brief note in Slack #dev: a\n top-level message with only the issue link and a one-sentence reason it\n is ready, details threaded. Slack renders mrkdwn links:\n <https://url|text>.\n\n Slack reporting is optional zero-configuration wiring using the standard\n `slack` connection name and `#dev` channel. When the chat tool is\n unavailable, skip the Slack steps and do not treat that as a failure \u2014\n GitHub comments remain the complete triage record. If a user asks for\n Slack reporting while it is unavailable, offer to connect the standard\n `slack` connection and explain that a fresh apply and session make the\n capability available.\n\n Keep changes small and reversible. Prefer comments that explain what you\n did over silent metadata churn. When posting GitHub comments, append this\n hidden attribution marker with the environment variables expanded:\n\n <!-- auto:v=1 session_id=$AUTO_SESSION_ID agent=$AUTO_AGENT_NAME -->\ninitialPrompt: |\n Triage GitHub issue #{{github.issue.number}}: {{github.issue.title}}\n\n Trigger event: {{type}}\n Issue URL: {{github.issue.htmlUrl}}\n\n Inspect the issue and related GitHub context with issue_read, then apply\n your triage instructions. Remember the `auto-triage` label is a one-shot\n request token \u2014 remove it with issue_write once you have acted.\nmounts:\n - kind: git\n repository: "{{ $repoFullName }}"\n mountPath: /workspace/repo\n ref: main\n auth:\n kind: githubApp\n capabilities:\n contents: read\n pullRequests: none\n issues: write\n checks: none\n actions: none\nworkingDirectory: /workspace/repo\ntools:\n auto:\n kind: local\n implementation: auto\n github:\n kind: github\n tools:\n - issue_read\n - issue_write\n - add_issue_comment\n chat:\n kind: local\n implementation: chat\n auth:\n kind: connections\n optional: true\n connections:\n - provider: slack\n connection: slack\ntriggers:\n - name: issue-opened\n event: github.issue.opened\n connection: "{{ $githubConnection }}"\n where:\n $.github.repository.fullName: "{{ $repoFullName }}"\n $.github.auto.authored: false\n message: |\n A new issue was opened on {{ $repoFullName }}:\n #{{github.issue.number}} \u2014 {{github.issue.title}}.\n\n Issue URL: {{github.issue.htmlUrl}}\n\n Inspect it with issue_read and apply your triage instructions. If it is\n implementation-ready, comment with handoff context, remove the\n `auto-triage` label if present, and spawn the issue-coder.\n routing:\n kind: bind\n target: github.issue\n onUnmatched: spawn\n - name: issue-labeled\n event: github.issue.labeled\n connection: "{{ $githubConnection }}"\n where:\n $.github.repository.fullName: "{{ $repoFullName }}"\n $.github.auto.authored: false\n $.github.label.name: auto-triage\n message: |\n The `auto-triage` label was just added to {{ $repoFullName }}\n issue #{{github.issue.number}} \u2014 {{github.issue.title}}.\n\n Issue URL: {{github.issue.htmlUrl}}\n\n The label is a one-shot re-triage request. Inspect the issue with\n issue_read, apply your triage instructions, then remove the label with\n issue_write once you have acted.\n routing:\n kind: bind\n target: github.issue\n onUnmatched: spawn\n - name: mention\n event: chat.message.mentioned\n connection: slack\n optional: true\n where:\n $.chat.provider: slack\n $.auto.authored: false\n message: |\n {{message.author.userName}} mentioned you on Slack:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Reply in that thread with chat.send. If the user clearly links or asks\n about a GitHub issue, triage it. If required context is missing, ask for\n the issue link. Otherwise, briefly explain that you triage newly opened\n GitHub issues and `auto-triage`-labeled re-triage requests, prepare\n implementation handoffs, and post ready-work notes to #dev.\n routing:\n kind: spawn\n'
26291
+ },
26292
+ {
26293
+ path: "fragments/environments/agent-runtime.yaml",
26294
+ content: "harness: claude-code\nenvironment:\n name: agent-runtime\n image:\n kind: preset\n name: node24\n resources:\n memoryMB: 8192\n"
26295
+ }
26296
+ ]
26220
26297
  }
26221
26298
  ],
26222
26299
  "@auto/lead-engine": [
@@ -33904,7 +33981,7 @@ var init_hardcoded = __esm({
33904
33981
  "@auto/engineering-tier": "An engineering-tier fleet: senior and junior engineers with PR ownership, a live-iteration designer, and a session introspector.",
33905
33982
  "@auto/handoff": "A handoff coder that takes ownership of delegated PRs or coding tasks and reports back when ready.",
33906
33983
  "@auto/incident-response": "A first responder for production alerts: investigates, delivers an evidence-based triage report, and opens a draft fix PR when the cause is clear; -slack entrypoint for channel triage.",
33907
- "@auto/issue-triage": "Linear issue triage plus an implementation coder: label-driven triage handoffs that become focused PRs.",
33984
+ "@auto/issue-triage": "Issue triage plus an implementation coder on a GitHub Issues or Linear substrate, with optional Slack reporting; deprecated -slack entrypoints keep the required-Slack behavior.",
33908
33985
  "@auto/lead-engine": "A sourced lead researcher for webhook payloads, direct-session criteria, public web signals, and authorized provider-backed sources; -slack entrypoint for a sales-channel flow.",
33909
33986
  "@auto/onboarding": "Auto's house onboarding guidance, importable as a managed template.",
33910
33987
  "@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).",
@@ -34195,6 +34272,7 @@ var init_src = __esm({
34195
34272
  init_conversation();
34196
34273
  init_conversation_reducer();
34197
34274
  init_connections();
34275
+ init_dormant_capabilities();
34198
34276
  init_github_sync();
34199
34277
  init_github_credentials();
34200
34278
  init_github_mcp_catalog();
@@ -36995,7 +37073,7 @@ var init_package = __esm({
36995
37073
  "package.json"() {
36996
37074
  package_default = {
36997
37075
  name: "@autohq/cli",
36998
- version: "0.1.407",
37076
+ version: "0.1.409",
36999
37077
  license: "SEE LICENSE IN README.md",
37000
37078
  publishConfig: {
37001
37079
  access: "public"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@autohq/cli",
3
- "version": "0.1.407",
3
+ "version": "0.1.409",
4
4
  "license": "SEE LICENSE IN README.md",
5
5
  "publishConfig": {
6
6
  "access": "public"