@autohq/cli 0.1.90 → 0.1.92

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.
@@ -22516,7 +22516,6 @@ var SessionRunDispatchCommandRecordSchema = external_exports.discriminatedUnion(
22516
22516
  var RuntimeRecordSchema = external_exports.object({
22517
22517
  id: RuntimeIdSchema2,
22518
22518
  sandboxId: external_exports.string().trim().min(1).nullable(),
22519
- gitAuthExpiresAt: external_exports.string().datetime().nullable(),
22520
22519
  createdAt: external_exports.string().datetime(),
22521
22520
  updatedAt: external_exports.string().datetime()
22522
22521
  });
package/dist/index.js CHANGED
@@ -18363,7 +18363,6 @@ var init_runtimes = __esm({
18363
18363
  RuntimeRecordSchema = external_exports.object({
18364
18364
  id: RuntimeIdSchema2,
18365
18365
  sandboxId: external_exports.string().trim().min(1).nullable(),
18366
- gitAuthExpiresAt: external_exports.string().datetime().nullable(),
18367
18366
  createdAt: external_exports.string().datetime(),
18368
18367
  updatedAt: external_exports.string().datetime()
18369
18368
  });
@@ -21599,7 +21598,7 @@ var init_package = __esm({
21599
21598
  "package.json"() {
21600
21599
  package_default = {
21601
21600
  name: "@autohq/cli",
21602
- version: "0.1.90",
21601
+ version: "0.1.92",
21603
21602
  license: "SEE LICENSE IN README.md",
21604
21603
  publishConfig: {
21605
21604
  access: "public"
@@ -21622,6 +21621,7 @@ var init_package = __esm({
21622
21621
  build: "tsup",
21623
21622
  dev: "tsx src/main.ts",
21624
21623
  "dev:tui": "node ../../scripts/cli-tui-dev-watch.mjs",
21624
+ "skill:generate": "tsx scripts/generate-skill-content.ts",
21625
21625
  test: "npm run test:unit",
21626
21626
  "test:unit": 'tsx --test "test/**/*.unit.test.ts"',
21627
21627
  typecheck: "tsc --noEmit"
@@ -29880,286 +29880,7 @@ function acceptedInvitationLine(response) {
29880
29880
  ].join(" ");
29881
29881
  }
29882
29882
 
29883
- // src/commands/onboard/skill-content.ts
29884
- var onboardingSkillMarkdown = `# Onboard your user to auto
29885
-
29886
- You are a coding agent running inside the user's repository. Your job is to
29887
- take them from zero to a working auto deployment in one conversation, with
29888
- the least possible friction. Follow the six beats in order, and run every
29889
- waiting step in parallel with your own work.
29890
-
29891
- ## Ground rules
29892
-
29893
- - This document is choreography, not mechanics. Trust \`auto --help\` and live
29894
- command output over this document whenever they disagree.
29895
- - Never block on the user. When a step needs a human click (sign-in, Slack
29896
- install, GitHub App), hand them the link and keep working on the next beat
29897
- while they click.
29898
- - Ask before changing anything outside \`.auto/\`. Editing AGENTS.md happens
29899
- only with the user's explicit opt-in: show the exact block you intend to
29900
- append and wait for a yes.
29901
- - Install exactly one workflow, not a menu. Bias hard toward the lowest
29902
- time-to-first-trigger: a workflow that fires within hours beats one that
29903
- fires next quarter.
29904
- - Talk like a collaborator. One question at a time, short messages, no walls
29905
- of setup output.
29906
-
29907
- ## Beat 1: Pitch
29908
-
29909
- Explain what auto is in your own words, grounded in this repository. The
29910
- canonical framing:
29911
-
29912
- > auto lets you program software factories the same way you program CI/CD.
29913
- > Compose agents and triggers into workflows using simple YAML files, and
29914
- > deploy them into the cloud on merge. Anything that can be described in a
29915
- > standard operating procedure can become a chart of agents and triggers.
29916
-
29917
- Localize it: name a real procedure you can see in this repo ("your PR review
29918
- flow could be a chart that reviews every PR against your conventions").
29919
- Close with why the next beat matters: factory agents work while the user is
29920
- not looking, so they need a way to reach the user.
29921
-
29922
- ## Beat 2: Channel
29923
-
29924
- Say something like: "I work best when I can reach you proactively \u2014 let's
29925
- get me into your Slack." Then, without waiting:
29926
-
29927
- 1. Start sign-in with \`auto auth login --device\` and give the user the
29928
- verification URL. Account, organization, and project setup happen in the
29929
- browser.
29930
- 2. Check \`auto connections list --available\` and start the Slack connection
29931
- (\`auto connect slack\`), giving the user that link too.
29932
- 3. Move straight to Beat 3 while the user clicks. Poll for completion in the
29933
- background; never sit idle waiting for a click.
29934
-
29935
- ## Beat 3: Study
29936
-
29937
- Build a repo dossier while the clicks happen. Explore the codebase and git
29938
- history for:
29939
-
29940
- - Stack and layout: languages, frameworks, build and test setup, CI and
29941
- deploy workflows (Beat 6 wires into these).
29942
- - How the team works: PR conventions, review patterns, branch and release
29943
- habits, merge frequency.
29944
- - Tools referenced: issue tracker keys in commits and branches, chat or
29945
- deploy tooling named in docs and workflow files, existing agent config
29946
- (CLAUDE.md, AGENTS.md, .cursor).
29947
- - Live state, using the user's own credentials (git, gh): open PRs, CI
29948
- status, recent activity.
29949
-
29950
- Write the dossier as structured markdown. It has two consumers: the
29951
- concierge agent (Beat 4) and your own interview (Beat 5). End it with 2-3
29952
- candidate workflows from the playbook below, each tied to a concrete signal
29953
- you found.
29954
-
29955
- ## Beat 4: First contact
29956
-
29957
- The concierge is a session you create in this project, not one that ships
29958
- pre-installed. When sign-in, Slack, and the dossier are all ready:
29959
-
29960
- 1. Draft the concierge into \`.auto/\` from the template below. Adapt names,
29961
- reuse an existing profile or environment if the project already has one,
29962
- and verify with \`auto apply --dry-run\` before applying.
29963
- 2. Launch it headlessly with the dossier as the run message:
29964
- \`auto run concierge --message <dossier>\`. Run messages cap at 20,000
29965
- characters, so distill the dossier to fit; lead with the live state
29966
- (open PRs, CI status) since that is what makes first contact specific.
29967
-
29968
- \`\`\`yaml
29969
- kind: session
29970
- metadata:
29971
- name: concierge
29972
- spec:
29973
- profile: concierge
29974
- identity:
29975
- displayName: auto concierge
29976
- username: auto-concierge
29977
- description: This project's auto agent. Ask it to add or change workflows.
29978
- tools:
29979
- chat:
29980
- ref: slack-chat
29981
- initialPrompt: |
29982
- You are this project's auto concierge. If your message contains a repo
29983
- dossier, this is first contact: send the user exactly one Slack message
29984
- via chat.send - one concrete, verifiable observation from the dossier
29985
- plus one offer. Short, specific, never templated. Otherwise the user is
29986
- consulting you: help them add or adjust workflows by editing .auto/
29987
- resources and applying them.
29988
- \`\`\`
29989
-
29990
- The profile and the slack-chat tool follow the project's existing
29991
- conventions; if the project has neither, draft minimal ones (see
29992
- \`auto apply --help\` and the resource examples in the docs).
29993
-
29994
- The concierge reads the dossier and sends the user one proactive Slack
29995
- message: a specific observation about this repo plus one offer. Do not
29996
- attach to the run or take over the terminal; you remain the user's
29997
- interface.
29998
-
29999
- Tell the user to check Slack. The buzz is the point: an agent they just met
30000
- already knows their codebase and can reach them.
30001
-
30002
- If the apply fails or the Slack identity is not ready yet, skip this beat
30003
- and let the installed workflow's first firing be first contact instead.
30004
-
30005
- ## Beat 5: Interview, then install
30006
-
30007
- Back in the terminal, ask 3-5 questions, one at a time, each grounded in
30008
- the dossier ("I see FRA- refs everywhere \u2014 who triages those?"). Converge on
30009
- one workflow. Then:
30010
-
30011
- 1. Draft the session YAML into \`.auto/sessions/\`.
30012
- 2. Show a plain-language summary of what will run and when ("on every PR
30013
- opened, I'll review it against your conventions and report in Slack").
30014
- 3. Get one explicit yes.
30015
- 4. If the workflow needs repository events, connect the GitHub App now
30016
- (\`auto connect github\`) \u2014 this is the moment the ask is motivated. Other
30017
- providers (Linear, Notion, ...) connect only when the chosen workflow
30018
- needs them, never speculatively.
30019
- 5. Apply with \`auto apply\` and confirm the trigger is active. Route the
30020
- workflow's reports to the Slack channel from Beat 2.
30021
-
30022
- ## Beat 6: Wire CI to apply on merge
30023
-
30024
- Every apply so far ran from this terminal under the user's own login. Its
30025
- durable home is CI: a dry-run plan as a check on every PR, and the real
30026
- apply when changes merge \u2014 \`.auto/\` ships the same way the code does. Do
30027
- this once the GitHub App is connected and the first apply has succeeded.
30028
-
30029
- 1. CI authenticates as a service account, never as the user. Create two \u2014
30030
- the \`applier\` token lives only on the merge path, while the \`read-only\`
30031
- token is exposed to PR-triggered runs: it can produce the dry-run plan
30032
- but cannot perform a real apply, and it stays revocable on its own. Pipe
30033
- each token straight into a GitHub secret so it never touches your
30034
- transcript or disk \u2014 with \`pipefail\` and \`jq -re\` so a failed create
30035
- cannot silently store an empty secret:
30036
-
30037
- \`\`\`sh
30038
- set -o pipefail
30039
- auto service-account create github-actions-auto-apply \\
30040
- --preset applier --json \\
30041
- | jq -re .token | gh secret set AUTO_APPLY_SERVICE_ACCOUNT_TOKEN
30042
- auto service-account create github-actions-auto-apply-dry-run \\
30043
- --preset read-only --json \\
30044
- | jq -re .token | gh secret set AUTO_APPLY_DRY_RUN_SERVICE_ACCOUNT_TOKEN
30045
- \`\`\`
30046
-
30047
- Confirm both pipelines exited 0 and \`gh secret list\` shows both names
30048
- before moving on. If deploys go through a GitHub environment, scope the
30049
- apply secret to it (\`gh secret set --env\`).
30050
- 2. Fit into the deploy process you mapped in Beat 3. If a workflow already
30051
- ships merges, splice two steps in after its deploy succeeds \u2014 plan
30052
- (\`auto apply --dry-run\`), then \`auto apply\` \u2014 reusing its checkout and
30053
- Node setup. If nothing deploys from CI yet, add the standalone workflow
30054
- below. Either way, keep the PR dry-run check: it shows reviewers the
30055
- exact create/update/archive plan their merge will execute.
30056
- 3. Workflow files live outside \`.auto/\`, so show the user the file and get
30057
- a yes; commit it on the same branch as the \`.auto/\` resources.
30058
-
30059
- \`\`\`yaml
30060
- name: Auto Apply
30061
-
30062
- # Both triggers assume the default branch is main; swap in the repo's
30063
- # actual default branch before committing.
30064
- on:
30065
- pull_request:
30066
- branches: [main]
30067
- push:
30068
- branches: [main]
30069
-
30070
- permissions:
30071
- contents: read
30072
-
30073
- concurrency:
30074
- group: auto-apply-\${{ github.event.pull_request.number || github.ref }}
30075
- cancel-in-progress: \${{ github.event_name == 'pull_request' }}
30076
-
30077
- jobs:
30078
- plan:
30079
- runs-on: ubuntu-latest
30080
- timeout-minutes: 10
30081
- steps:
30082
- - uses: actions/checkout@v4
30083
- - uses: actions/setup-node@v4
30084
- with:
30085
- node-version: lts/*
30086
- - run: npx -y --package=@autohq/cli auto apply --dry-run
30087
- env:
30088
- AUTO_API_TOKEN: \${{ secrets.AUTO_APPLY_DRY_RUN_SERVICE_ACCOUNT_TOKEN }}
30089
-
30090
- apply:
30091
- if: \${{ github.event_name == 'push' }}
30092
- needs: plan
30093
- runs-on: ubuntu-latest
30094
- timeout-minutes: 10
30095
- steps:
30096
- - uses: actions/checkout@v4
30097
- - uses: actions/setup-node@v4
30098
- with:
30099
- node-version: lts/*
30100
- - run: npx -y --package=@autohq/cli auto apply
30101
- env:
30102
- AUTO_API_TOKEN: \${{ secrets.AUTO_APPLY_SERVICE_ACCOUNT_TOKEN }}
30103
- \`\`\`
30104
-
30105
- Adapt it to the repo: the default branch name, the team's Node setup or
30106
- pinned tool versions, and set \`AUTO_API_BASE_URL\` only if the project runs
30107
- against a non-default Auto host. \`pull_request\` runs from forks do not
30108
- receive secrets; if fork PRs are routine here, run the dry-run from a
30109
- \`pull_request_target\` workflow that checks out workflow code from the base
30110
- branch and only \`.auto/\` from the PR head.
30111
-
30112
- After the PR merges, watch the first run and confirm its plan reports the
30113
- resources you already applied as unchanged. From then on, \`.auto/\` on the
30114
- default branch is the source of truth \u2014 directory apply prunes resources
30115
- that are no longer declared, so the team changes agents by PR, not by
30116
- terminal.
30117
-
30118
- ## Workflow playbook
30119
-
30120
- Candidates, strongest signals, and what confirms fit:
30121
-
30122
- - PR review: frequent PRs, visible review conventions. Confirm: "what do
30123
- reviewers always catch by hand?" Fires on the next PR.
30124
- - CI failure triage: CI config plus red or flaky runs in recent history.
30125
- Confirm: "who notices when main goes red?" Fires within hours.
30126
- - Issue triage: tracker refs in commits, an untriaged backlog. Confirm:
30127
- "who looks at new issues today?" Needs the tracker connected.
30128
- - Daily digest: busy repo, distributed team. Confirm: "would a morning
30129
- summary of PRs, CI, and issues be useful?" Fires next morning.
30130
- - Dependency or flaky-test watch: lockfile churn or retry patterns in CI.
30131
- Slower to first fire; prefer the options above for the first install.
30132
-
30133
- Estimate time-to-first-trigger for each candidate you propose, and say it
30134
- out loud when proposing.
30135
-
30136
- ## If something is blocked
30137
-
30138
- - Slack needs admin approval: continue without the channel. Finish the
30139
- interview and install; tell the user their agent will appear in Slack once
30140
- the install is approved, and have the concierge retry.
30141
- - Sign-in stalls: the user may not have an invite yet; point them at the
30142
- auto site and pause gracefully rather than failing.
30143
- - \`gh secret set\` fails (no repo admin rights, gh not authenticated):
30144
- leave the CI workflow in the PR anyway and hand the user the two
30145
- create-and-pipe commands from Beat 6 to run themselves. Tokens are shown
30146
- once and must never be pasted into the conversation.
30147
- - A command disagrees with this document: the command is right. Re-read
30148
- \`auto --help\` and adapt.
30149
-
30150
- ## What you leave behind
30151
-
30152
- - \`.auto/\` committed on a branch with a PR the user can merge: the
30153
- concierge and workflow session YAML, the CI apply workflow from Beat 6,
30154
- plus \`context.md\` (the distilled dossier). Write the PR description for
30155
- teammates \u2014 it doubles as the announcement that this repo now has an
30156
- auto agent.
30157
- - With the user's opt-in, an AGENTS.md section that tells every future
30158
- coding agent in this repo that auto exists, what is deployed, and how to
30159
- add workflows.
30160
- - Tell the user the two ways back: talk to the bot in Slack, or run
30161
- \`auto onboard --agent\` again any time.
30162
- `;
29883
+ // src/commands/onboard/quickstart-content.ts
30163
29884
  var humanQuickstartText = `Get started with auto:
30164
29885
 
30165
29886
  1. auto auth login sign in (device flow; account setup in browser)
@@ -30178,6 +29899,9 @@ a first workflow tailored to how your team works.
30178
29899
  Docs and help: auto --help
30179
29900
  `;
30180
29901
 
29902
+ // src/commands/onboard/skill-content.generated.ts
29903
+ var onboardingSkillMarkdown = "# Onboard your user to auto\n\nYou are a coding agent running inside the user's repository. Your job is to\ntake them from zero to a working auto deployment in one conversation, with\nthe least possible friction. Follow the six beats in order, and run every\nwaiting step in parallel with your own work.\n\n## Ground rules\n\n- This document is choreography, not mechanics. Trust `auto --help` and live\n command output over this document whenever they disagree.\n- Never block on the user. When a step needs a human click (sign-in, Slack\n install, GitHub App), hand them the link and keep working on the next beat\n while they click.\n- Ask before changing anything outside `.auto/`. Editing AGENTS.md happens\n only with the user's explicit opt-in: show the exact block you intend to\n append and wait for a yes.\n- Install exactly one workflow, not a menu. Bias hard toward the lowest\n time-to-first-trigger: a workflow that fires within hours beats one that\n fires next quarter.\n- Talk like a collaborator. One question at a time, short messages, no walls\n of setup output.\n\n## Beat 1: Pitch\n\nExplain what auto is in your own words, grounded in this repository. The\ncanonical framing:\n\n> auto lets you program software factories the same way you program CI/CD.\n> Compose agents and triggers into workflows using simple YAML files, and\n> deploy them into the cloud on merge. Anything that can be described in a\n> standard operating procedure can become a chart of agents and triggers.\n\nLocalize it: name a real procedure you can see in this repo (\"your PR review\nflow could be a chart that reviews every PR against your conventions\").\nClose with why the next beat matters: factory agents work while the user is\nnot looking, so they need a way to reach the user.\n\n## Beat 2: Channel\n\nSay something like: \"I work best when I can reach you proactively \u2014 let's\nget me into your Slack.\" Then, without waiting:\n\n1. Start sign-in with `auto auth login --device` and give the user the\n verification URL. Account, organization, and project setup happen in the\n browser.\n2. Check `auto connections list --available` and start the Slack connection\n (`auto connect slack`), giving the user that link too.\n3. Move straight to Beat 3 while the user clicks. Poll for completion in the\n background; never sit idle waiting for a click.\n\n## Beat 3: Study\n\nBuild a repo dossier while the clicks happen. Explore the codebase and git\nhistory for:\n\n- Stack and layout: languages, frameworks, build and test setup, CI and\n deploy workflows (Beat 6 wires into these).\n- How the team works: PR conventions, review patterns, branch and release\n habits, merge frequency.\n- Tools referenced: issue tracker keys in commits and branches, chat or\n deploy tooling named in docs and workflow files, existing agent config\n (CLAUDE.md, AGENTS.md, .cursor).\n- Live state, using the user's own credentials (git, gh): open PRs, CI\n status, recent activity.\n\nWrite the dossier as structured markdown. It has two consumers: the\nconcierge agent (Beat 4) and your own interview (Beat 5). End it with 2-3\ncandidate workflows from the playbook below, each tied to a concrete signal\nyou found.\n\n## Beat 4: First contact\n\nThe concierge is a session you create in this project, not one that ships\npre-installed. When sign-in, Slack, and the dossier are all ready:\n\n1. Draft the concierge into `.auto/` from the template below. Adapt names,\n reuse an existing profile or environment if the project already has one,\n and verify with `auto apply --dry-run` before applying.\n2. Launch it headlessly with the dossier as the run message:\n `auto run concierge --message <dossier>`. Run messages cap at 20,000\n characters, so distill the dossier to fit; lead with the live state\n (open PRs, CI status) since that is what makes first contact specific.\n\n```yaml\nkind: session\nmetadata:\n name: concierge\nspec:\n profile: concierge\n identity:\n displayName: auto concierge\n username: auto-concierge\n description: This project's auto agent. Ask it to add or change workflows.\n tools:\n chat:\n ref: slack-chat\n initialPrompt: |\n You are this project's auto concierge. If your message contains a repo\n dossier, this is first contact: send the user exactly one Slack message\n via chat.send - one concrete, verifiable observation from the dossier\n plus one offer. Short, specific, never templated. Otherwise the user is\n consulting you: help them add or adjust workflows by editing .auto/\n resources and applying them.\n```\n\nThe profile and the slack-chat tool follow the project's existing\nconventions; if the project has neither, draft minimal ones (see\n`auto apply --help` and the resource examples in the docs).\n\nThe concierge reads the dossier and sends the user one proactive Slack\nmessage: a specific observation about this repo plus one offer. Do not\nattach to the run or take over the terminal; you remain the user's\ninterface.\n\nTell the user to check Slack. The buzz is the point: an agent they just met\nalready knows their codebase and can reach them.\n\nIf the apply fails or the Slack identity is not ready yet, skip this beat\nand let the installed workflow's first firing be first contact instead.\n\n## Beat 5: Interview, then install\n\nBack in the terminal, ask 3-5 questions, one at a time, each grounded in\nthe dossier (\"I see FRA- refs everywhere \u2014 who triages those?\"). Converge on\none workflow. Then:\n\n1. Draft the session YAML into `.auto/sessions/`.\n2. Show a plain-language summary of what will run and when (\"on every PR\n opened, I'll review it against your conventions and report in Slack\").\n3. Get one explicit yes.\n4. If the workflow needs repository events, connect the GitHub App now\n (`auto connect github`) \u2014 this is the moment the ask is motivated. Other\n providers (Linear, Notion, ...) connect only when the chosen workflow\n needs them, never speculatively.\n5. Apply with `auto apply` and confirm the trigger is active. Route the\n workflow's reports to the Slack channel from Beat 2.\n\n## Beat 6: Wire CI to apply on merge\n\nEvery apply so far ran from this terminal under the user's own login. Its\ndurable home is CI: a dry-run plan as a check on every PR, and the real\napply when changes merge \u2014 `.auto/` ships the same way the code does. Do\nthis once the GitHub App is connected and the first apply has succeeded.\n\n1. CI authenticates as a service account, never as the user. Create two \u2014\n the `applier` token lives only on the merge path, while the `read-only`\n token is exposed to PR-triggered runs: it can produce the dry-run plan\n but cannot perform a real apply, and it stays revocable on its own. Pipe\n each token straight into a GitHub secret so it never touches your\n transcript or disk \u2014 with `pipefail` and `jq -re` so a failed create\n cannot silently store an empty secret:\n\n ```sh\n set -o pipefail\n auto service-account create github-actions-auto-apply \\\n --preset applier --json \\\n | jq -re .token | gh secret set AUTO_APPLY_SERVICE_ACCOUNT_TOKEN\n auto service-account create github-actions-auto-apply-dry-run \\\n --preset read-only --json \\\n | jq -re .token | gh secret set AUTO_APPLY_DRY_RUN_SERVICE_ACCOUNT_TOKEN\n ```\n\n Confirm both pipelines exited 0 and `gh secret list` shows both names\n before moving on. If deploys go through a GitHub environment, scope the\n apply secret to it (`gh secret set --env`).\n2. Fit into the deploy process you mapped in Beat 3. If a workflow already\n ships merges, splice two steps in after its deploy succeeds \u2014 plan\n (`auto apply --dry-run`), then `auto apply` \u2014 reusing its checkout and\n Node setup. If nothing deploys from CI yet, add the standalone workflow\n below. Either way, keep the PR dry-run check: it shows reviewers the\n exact create/update/archive plan their merge will execute.\n3. Workflow files live outside `.auto/`, so show the user the file and get\n a yes; commit it on the same branch as the `.auto/` resources.\n\n```yaml\nname: Auto Apply\n\n# Both triggers assume the default branch is main; swap in the repo's\n# actual default branch before committing.\non:\n pull_request:\n branches: [main]\n push:\n branches: [main]\n\npermissions:\n contents: read\n\nconcurrency:\n group: auto-apply-${{ github.event.pull_request.number || github.ref }}\n cancel-in-progress: ${{ github.event_name == 'pull_request' }}\n\njobs:\n plan:\n runs-on: ubuntu-latest\n timeout-minutes: 10\n steps:\n - uses: actions/checkout@v4\n - uses: actions/setup-node@v4\n with:\n node-version: lts/*\n - run: npx -y --package=@autohq/cli auto apply --dry-run\n env:\n AUTO_API_TOKEN: ${{ secrets.AUTO_APPLY_DRY_RUN_SERVICE_ACCOUNT_TOKEN }}\n\n apply:\n if: ${{ github.event_name == 'push' }}\n needs: plan\n runs-on: ubuntu-latest\n timeout-minutes: 10\n steps:\n - uses: actions/checkout@v4\n - uses: actions/setup-node@v4\n with:\n node-version: lts/*\n - run: npx -y --package=@autohq/cli auto apply\n env:\n AUTO_API_TOKEN: ${{ secrets.AUTO_APPLY_SERVICE_ACCOUNT_TOKEN }}\n```\n\nAdapt it to the repo: the default branch name, the team's Node setup or\npinned tool versions, and set `AUTO_API_BASE_URL` only if the project runs\nagainst a non-default Auto host. `pull_request` runs from forks do not\nreceive secrets; if fork PRs are routine here, run the dry-run from a\n`pull_request_target` workflow that checks out workflow code from the base\nbranch and only `.auto/` from the PR head.\n\nAfter the PR merges, watch the first run and confirm its plan reports the\nresources you already applied as unchanged. From then on, `.auto/` on the\ndefault branch is the source of truth \u2014 directory apply prunes resources\nthat are no longer declared, so the team changes agents by PR, not by\nterminal.\n\n## Workflow playbook\n\nCandidates, strongest signals, and what confirms fit:\n\n- PR review: frequent PRs, visible review conventions. Confirm: \"what do\n reviewers always catch by hand?\" Fires on the next PR.\n- CI failure triage: CI config plus red or flaky runs in recent history.\n Confirm: \"who notices when main goes red?\" Fires within hours.\n- Issue triage: tracker refs in commits, an untriaged backlog. Confirm:\n \"who looks at new issues today?\" Needs the tracker connected.\n- Daily digest: busy repo, distributed team. Confirm: \"would a morning\n summary of PRs, CI, and issues be useful?\" Fires next morning.\n- Dependency or flaky-test watch: lockfile churn or retry patterns in CI.\n Slower to first fire; prefer the options above for the first install.\n\nEstimate time-to-first-trigger for each candidate you propose, and say it\nout loud when proposing.\n\n## If something is blocked\n\n- Slack needs admin approval: continue without the channel. Finish the\n interview and install; tell the user their agent will appear in Slack once\n the install is approved, and have the concierge retry.\n- Sign-in stalls: the user may not have an invite yet; point them at the\n auto site and pause gracefully rather than failing.\n- `gh secret set` fails (no repo admin rights, gh not authenticated):\n leave the CI workflow in the PR anyway and hand the user the two\n create-and-pipe commands from Beat 6 to run themselves. Tokens are shown\n once and must never be pasted into the conversation.\n- A command disagrees with this document: the command is right. Re-read\n `auto --help` and adapt.\n\n## What you leave behind\n\n- `.auto/` committed on a branch with a PR the user can merge: the\n concierge and workflow session YAML, the CI apply workflow from Beat 6,\n plus `context.md` (the distilled dossier). Write the PR description for\n teammates \u2014 it doubles as the announcement that this repo now has an\n auto agent.\n- With the user's opt-in, an AGENTS.md section that tells every future\n coding agent in this repo that auto exists, what is deployed, and how to\n add workflows.\n- Tell the user the two ways back: talk to the bot in Slack, or run\n `auto onboard --agent` again any time.\n";
29904
+
30181
29905
  // src/commands/onboard/commands.ts
30182
29906
  function registerOnboardCommands(program, context) {
30183
29907
  program.command("onboard").description(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@autohq/cli",
3
- "version": "0.1.90",
3
+ "version": "0.1.92",
4
4
  "license": "SEE LICENSE IN README.md",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -23,6 +23,7 @@
23
23
  "build": "tsup",
24
24
  "dev": "tsx src/main.ts",
25
25
  "dev:tui": "node ../../scripts/cli-tui-dev-watch.mjs",
26
+ "skill:generate": "tsx scripts/generate-skill-content.ts",
26
27
  "test": "npm run test:unit",
27
28
  "test:unit": "tsx --test \"test/**/*.unit.test.ts\"",
28
29
  "typecheck": "tsc --noEmit"