[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71J2SXP01KDBWD5S4SPQ09R":3,"skill-same:01M71J2SXP01KDBWD5S4SPQ09R":79},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":42,"linkOnly":43,"markdownContent":44,"markdownBody":45,"frontMatter":46,"refName":47,"commitSha":48,"skillDirectory":49,"forksCount":13,"repositoryHtmlUrl":50,"repositoryHomepageUrl":6,"ownerHtmlUrl":51,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":52,"install":53,"resources":66},"01M71J2SXP01KDBWD5S4SPQ09R","deps",null,"Enumerates automation PRs (renovate \u002F dependabot etc.) with the `deps.mjs` engine and makes fixed-vocabulary judgments based on semver classification (from PR title \u002F branch \u002F manifest diff; grouped PRs use the maximum bump), CI status, lockfile consistency, and peer \u002F engines changes. patch\u002Fminor + CI green + lockfile consistent → auto-merge candidate; major \u002F CI red \u002F pending \u002F peer \u002F engines → 要確認. Author judgment uses the same pattern as health area 15 (`*[bot]` \u002F `app\u002F*`; release-please is excluded — that's `\u002Frelease`'s responsibility). `--dry-run` judges only; `--auto` executes without confirmation. Merging follows the central autonomy policy's irreversible gate (`--auto` overrides the policy).","ozzy-labs\u002Fskills","ozzy-labs","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F246109093?v=4","01M6H0M2K2PZXHWNHJJTWY20FY","01M71J2B6FZ5KPEXPR5VS1TX7Z",0,"MIT","https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fskills\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fdeps\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[5,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],"auto","run","please","title","dry","bot","candidate","patch","dependabot","confirmation","only","pr title","renovate","ci","bump","green","lockfile","branch","app","2026-11-10 10:12:30",false,"---\nname: deps\ndescription: Enumerates automation PRs (renovate \u002F dependabot etc.) with the `deps.mjs` engine and makes fixed-vocabulary judgments based on semver classification (from PR title \u002F branch \u002F manifest diff; grouped PRs use the maximum bump), CI status, lockfile consistency, and peer \u002F engines changes. patch\u002Fminor + CI green + lockfile consistent → auto-merge candidate; major \u002F CI red \u002F pending \u002F peer \u002F engines → 要確認. Author judgment uses the same pattern as health area 15 (`*[bot]` \u002F `app\u002F*`; release-please is excluded — that's `\u002Frelease`'s responsibility). `--dry-run` judges only; `--auto` executes without confirmation. Merging follows the central autonomy policy's irreversible gate (`--auto` overrides the policy).\n---\n\n# deps - Policy-based triage for automation PRs\n\nAutomation PRs such as renovate \u002F dependabot were merely piled up by health (area 15) as `要対応`, and handling them was manual every time. This is one of the largest sources of steady-state HITL, and it can be mechanically judged using semver classification + CI status. This skill consolidates that triage: it enumerates automation PRs, classifies them into `auto-merge` (candidate) \u002F `要確認` using fixed vocabulary, and merges according to policy.\n\nThe deterministic logic (PR enumeration, author determination, semver classification, CI judgment, lockfile consistency, peer \u002F engines detection, the fixed-vocabulary judgment table, merge execution, and rendering) is handled by the bundled **`deps.mjs` engine** ([ADR-0028](https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fhandbook\u002Fblob\u002Fmain\u002Fadr\u002F0028-skills-architecture-engine-judgment-policy-catalog.md) R1, following the precedent of `health-check.mjs` \u002F `backlog.mjs` \u002F `topics.mjs` \u002F `policy-read.mjs`). This SKILL.md confines itself to the judgment layer — **when to call the engine, how to present the triage, and where to confirm with a human (policy gate)**. Claude does not merge just because it \"looks safe\" on its own judgment (the judgment is determined by the engine's fixed vocabulary).\n\n**Scope**: automation PR triage for a single repository. Release PRs are out of scope (that's `\u002Frelease`'s responsibility). cross-repo is a future consideration.\n\n## Input\n\n```text\ndeps\n  --repo owner\u002Frepo   (resolved from cwd's origin if omitted)\n  --limit N           (enumeration limit; default 50)\n  --dry-run           (judge only; no merge, no confirmation)\n  --auto              (merge without confirmation; explicit opt-out of the policy's irreversible gate)\n```\n\n- If `--dry-run` and `--auto` are both specified, `--dry-run` takes priority (to prevent accidental merges; the same rule as topics; enforced by the engine)\n- When neither is specified (`plan` mode): the engine judges and returns a `merge_plan` (the scheduled `gh pr merge --squash`) without merging. Confirms with a human according to the gate\n\n## Steps\n\n1. Run `deps.mjs` **in the same directory as this SKILL.md** via Bash (pass the arguments through as-is). In Claude Code this is `~\u002F.claude\u002Fskills\u002Fdeps\u002Fdeps.mjs` (dogfood: `\u003Crepo>\u002F.claude\u002Fskills\u002Fdeps\u002Fdeps.mjs`; Codex\u002FGemini: `.agents\u002Fskills\u002Fdeps\u002Fdeps.mjs`):\n\n   ```bash\n   node \u003Cthis skill's directory>\u002Fdeps.mjs [--repo owner\u002Frepo] [--limit N] [--dry-run | --auto]\n   ```\n\n   By default the engine outputs **formatted text** (a triage table + auto-merge candidates \u002F 要確認 + merge plan) to stdout. Use `--json` to get structured JSON.\n\n2. **Present the engine's output as-is** (do not reformat, reinterpret, or re-judge it — enumeration, classification, and the judgment table are all the engine's responsibility). Each PR's reason (bump size \u002F CI status \u002F lockfile \u002F peer \u002F engines) is noted alongside the `要確認` group.\n3. If `repo_error` is set (no GitHub remote), present that fact and prompt for an explicit `--repo owner\u002Frepo`. If `fetch_error` is set (gh not authenticated \u002F rate limit \u002F network), relay the engine's classification as-is.\n4. Merging follows the **policy's `irreversible` gate** below.\n\n## Author determination (same pattern as health area 15; release-please excluded)\n\nAuthor determination for automation PRs uses **the same pattern as health skill's area 15 (`health-check.mjs`'s `isBotAuthor`)**: logins ending in `*[bot]` \u002F `app\u002F*` (GitHub Apps) \u002F the `is_bot` flag. The match between the two is enforced by a sync assertion in `tests\u002Fdeps.test.mjs`, preventing drift (changing only one side breaks CI).\n\n**release-please is excluded**: release-please is a bot, but its PRs are `\u002Frelease`'s responsibility and out of scope for deps triage. The engine always excludes it via `isReleasePlease`.\n\n## Judgment table (fixed vocabulary; the engine judges deterministically)\n\nThe engine judges using the fixed vocabulary in the table below. Claude **does not reinterpret or override** this judgment.\n\n| Condition | Judgment |\n| --- | --- |\n| semver **patch \u002F minor** + CI **green** + lockfile consistent + no peer + no engines | **`auto-merge`** (candidate) |\n| semver **major** | `要確認` |\n| CI **red** \u002F **pending** \u002F **no checks** \u002F status unobtainable | `要確認` |\n| semver **unclassifiable (unknown)** | `要確認` (conservative side) |\n| **lockfile drift** (manifest changed but lockfile not updated) | `要確認` |\n| **peer dependency** change \u002F **engines** change | `要確認` |\n\nHow the judgment inputs are obtained:\n\n- **semver classification**: determined from the PR title \u002F branch name \u002F the `from→to` version pair in the manifest diff. **Grouped PRs are judged by the maximum bump they contain** (if even one major is included, it's major). If unclassifiable, conservatively `unknown` → `要確認`\n- **CI**: green only when all checks from `gh pr checks \u003CN>` are green. fail \u002F cancel → red; running \u002F queued → pending. If there are no checks at all, `no-checks` (all of these are `要確認`)\n- **lockfile consistency**: if the manifest (`package.json` \u002F `pyproject.toml` \u002F `go.mod` etc.) is changed but the corresponding lockfile is not updated, that's drift (`要確認`). PRs that change only the lockfile (lockfile-maintenance \u002F transitive) or that touch neither manifest nor lockfile (e.g. a GitHub Actions version bump) are treated as consistent\n\nThis fixed vocabulary is implemented in `deps.mjs`. To add or remove vocabulary or judgment conditions, revise both `deps.mjs` and this table together (Claude does not add conditions on its own judgment).\n\n## Merging (follows the policy's `irreversible` gate)\n\n`gh pr merge --squash` is an **irreversible action**. Rather than hardcoding an individual approval gate in prose, it follows the central autonomy policy (the SSOT for the 3 classes and gate vocabulary, defined by the `policy` skill). Classification and zero-config default:\n\n| This skill's action | Class | Policy reference | Zero-config default gate |\n| --- | --- | --- | --- |\n| PR merge (`gh pr merge --squash`) | `irreversible` | `--action=merge` | `ask` (confirms auto-merge candidates one at a time) |\n\nThe effective gate is looked up via the sibling `policy` skill's `policy-read.mjs` (user-scope: `~\u002F.claude\u002Fskills\u002Fpolicy\u002Fpolicy-read.mjs`; dogfood: `\u003Crepo>\u002F.claude\u002Fskills\u002Fpolicy\u002Fpolicy-read.mjs`; Codex\u002FGemini: `.agents\u002Fskills\u002Fpolicy\u002Fpolicy-read.mjs`):\n\n```bash\nnode \u003Cpolicy skill's directory>\u002Fpolicy-read.mjs --action=merge --repo-root=\"$PWD\"\n# => .resolved.gate (default ask)\n```\n\nFlags are kept consistent with policy:\n\n- When `--dry-run` is specified: the engine outputs judgments only, with no merge and no confirmation (it does not call `gh pr merge`)\n- When `--auto` is specified: an **explicit opt-out of the irreversible gate**. The engine runs `gh pr merge \u003CN> --squash` serially against each auto-merge candidate without confirmation (required for unattended execution via routine \u002F `\u002Floop` \u002F `schedule`)\n- When neither is specified (`plan` mode): the engine does not merge and returns a `merge_plan` (the commands scheduled for execution). Confirms with a human according to the gate:\n  - gate=`ask` (zero-config default): confirms auto-merge candidates **one at a time**. Only approved PRs get `gh pr merge \u003CN> --squash` executed\n  - gate=`batch-confirm`: presents auto-merge candidates together once for a single batch confirmation; if approved, re-runs with `--auto` appended to the same arguments\n  - gate=`proceed`: re-runs with `--auto` without confirmation\n\n**Does not break even if policy is absent:** `policy-read.mjs` is fail-safe by design — unreadable or invalid values fall to the stricter side (`ask`). In environments where the `policy` skill is not deployed, the zero-config default gate in the table above (`irreversible`=`ask`) is applied directly.\n\n## Error handling (the engine puts this in the JSON)\n\n| Situation | Engine behavior |\n| --- | --- |\n| `--repo` not specified and no GitHub remote | Sets `repo_error`. No merge is performed |\n| `gh` not authenticated \u002F rate limit \u002F network (PR enumeration) | Puts the classification in `fetch_error`. Candidates are empty |\n| Failure to fetch a PR's individual CI status \u002F diff | Only that PR is downgraded to `要確認` (`ci: error` \u002F `diff_error`). Other PRs continue |\n| Merge failure (branch protection etc., under `--auto`) | Only that PR is downgraded to `要確認` and continues (recorded in `merge_results`) |\n| 0 automation PRs | `candidates: []`. merge plan is empty |\n\n## Integration with `\u002Floop` \u002F `schedule`\n\nLaunching `--auto` from `schedule` (cron routine) or `\u002Floop` closes the loop of \"consume automation PRs every morning\" ([ADR-0028](https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fhandbook\u002Fblob\u002Fmain\u002Fadr\u002F0028-skills-architecture-engine-judgment-policy-catalog.md) R5). Example: `\u002Fdeps --auto`. Since unattended execution cannot be interactive, the judgment table (conservative side = `要確認` when in doubt) and the policy gate become the sole boundary.\n\n## Out of scope\n\n| Item | Reason for exclusion |\n| --- | --- |\n| 1. Handling release PRs | `\u002Frelease`'s responsibility. release-please authors are always excluded |\n| 2. Making judgment conditions freeform | Judgment uses only fixed vocabulary. The LLM does not merge just because it \"looks safe\" on its own judgment (for reproducibility and reliability) |\n| 3. cross-repo triage | Single repo only for now. Crossing multiple repos will be considered in a separate issue |\n| 4. `--delete-branch` \u002F `--auto` (GitHub auto-merge) | This skill only does immediate squash merges. It does not delete branches or use GitHub auto-merge |\n\n## Notes\n\n- Do not read or stage `.env` files\n- Author determination uses the same pattern as health area 15 (a sync assertion in `tests\u002Fdeps.test.mjs` prevents drift). release-please is always excluded\n- Judgment is determined by the engine using the fixed vocabulary (table above). Claude does not re-judge (`要確認` when in doubt)\n- Merging follows the policy's `irreversible` gate (default `ask`). Since `--auto` is an explicit opt-out that skips confirmation, it's recommended to first check the content with `--dry-run` before using it\n- Do not add new runtime dependencies (only Node stdlib + `gh` \u002F `git`)\n","# deps - Policy-based triage for automation PRs\n\nAutomation PRs such as renovate \u002F dependabot were merely piled up by health (area 15) as `要対応`, and handling them was manual every time. This is one of the largest sources of steady-state HITL, and it can be mechanically judged using semver classification + CI status. This skill consolidates that triage: it enumerates automation PRs, classifies them into `auto-merge` (candidate) \u002F `要確認` using fixed vocabulary, and merges according to policy.\n\nThe deterministic logic (PR enumeration, author determination, semver classification, CI judgment, lockfile consistency, peer \u002F engines detection, the fixed-vocabulary judgment table, merge execution, and rendering) is handled by the bundled **`deps.mjs` engine** ([ADR-0028](https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fhandbook\u002Fblob\u002Fmain\u002Fadr\u002F0028-skills-architecture-engine-judgment-policy-catalog.md) R1, following the precedent of `health-check.mjs` \u002F `backlog.mjs` \u002F `topics.mjs` \u002F `policy-read.mjs`). This SKILL.md confines itself to the judgment layer — **when to call the engine, how to present the triage, and where to confirm with a human (policy gate)**. Claude does not merge just because it \"looks safe\" on its own judgment (the judgment is determined by the engine's fixed vocabulary).\n\n**Scope**: automation PR triage for a single repository. Release PRs are out of scope (that's `\u002Frelease`'s responsibility). cross-repo is a future consideration.\n\n## Input\n\n```text\ndeps\n  --repo owner\u002Frepo   (resolved from cwd's origin if omitted)\n  --limit N           (enumeration limit; default 50)\n  --dry-run           (judge only; no merge, no confirmation)\n  --auto              (merge without confirmation; explicit opt-out of the policy's irreversible gate)\n```\n\n- If `--dry-run` and `--auto` are both specified, `--dry-run` takes priority (to prevent accidental merges; the same rule as topics; enforced by the engine)\n- When neither is specified (`plan` mode): the engine judges and returns a `merge_plan` (the scheduled `gh pr merge --squash`) without merging. Confirms with a human according to the gate\n\n## Steps\n\n1. Run `deps.mjs` **in the same directory as this SKILL.md** via Bash (pass the arguments through as-is). In Claude Code this is `~\u002F.claude\u002Fskills\u002Fdeps\u002Fdeps.mjs` (dogfood: `\u003Crepo>\u002F.claude\u002Fskills\u002Fdeps\u002Fdeps.mjs`; Codex\u002FGemini: `.agents\u002Fskills\u002Fdeps\u002Fdeps.mjs`):\n\n   ```bash\n   node \u003Cthis skill's directory>\u002Fdeps.mjs [--repo owner\u002Frepo] [--limit N] [--dry-run | --auto]\n   ```\n\n   By default the engine outputs **formatted text** (a triage table + auto-merge candidates \u002F 要確認 + merge plan) to stdout. Use `--json` to get structured JSON.\n\n2. **Present the engine's output as-is** (do not reformat, reinterpret, or re-judge it — enumeration, classification, and the judgment table are all the engine's responsibility). Each PR's reason (bump size \u002F CI status \u002F lockfile \u002F peer \u002F engines) is noted alongside the `要確認` group.\n3. If `repo_error` is set (no GitHub remote), present that fact and prompt for an explicit `--repo owner\u002Frepo`. If `fetch_error` is set (gh not authenticated \u002F rate limit \u002F network), relay the engine's classification as-is.\n4. Merging follows the **policy's `irreversible` gate** below.\n\n## Author determination (same pattern as health area 15; release-please excluded)\n\nAuthor determination for automation PRs uses **the same pattern as health skill's area 15 (`health-check.mjs`'s `isBotAuthor`)**: logins ending in `*[bot]` \u002F `app\u002F*` (GitHub Apps) \u002F the `is_bot` flag. The match between the two is enforced by a sync assertion in `tests\u002Fdeps.test.mjs`, preventing drift (changing only one side breaks CI).\n\n**release-please is excluded**: release-please is a bot, but its PRs are `\u002Frelease`'s responsibility and out of scope for deps triage. The engine always excludes it via `isReleasePlease`.\n\n## Judgment table (fixed vocabulary; the engine judges deterministically)\n\nThe engine judges using the fixed vocabulary in the table below. Claude **does not reinterpret or override** this judgment.\n\n| Condition | Judgment |\n| --- | --- |\n| semver **patch \u002F minor** + CI **green** + lockfile consistent + no peer + no engines | **`auto-merge`** (candidate) |\n| semver **major** | `要確認` |\n| CI **red** \u002F **pending** \u002F **no checks** \u002F status unobtainable | `要確認` |\n| semver **unclassifiable (unknown)** | `要確認` (conservative side) |\n| **lockfile drift** (manifest changed but lockfile not updated) | `要確認` |\n| **peer dependency** change \u002F **engines** change | `要確認` |\n\nHow the judgment inputs are obtained:\n\n- **semver classification**: determined from the PR title \u002F branch name \u002F the `from→to` version pair in the manifest diff. **Grouped PRs are judged by the maximum bump they contain** (if even one major is included, it's major). If unclassifiable, conservatively `unknown` → `要確認`\n- **CI**: green only when all checks from `gh pr checks \u003CN>` are green. fail \u002F cancel → red; running \u002F queued → pending. If there are no checks at all, `no-checks` (all of these are `要確認`)\n- **lockfile consistency**: if the manifest (`package.json` \u002F `pyproject.toml` \u002F `go.mod` etc.) is changed but the corresponding lockfile is not updated, that's drift (`要確認`). PRs that change only the lockfile (lockfile-maintenance \u002F transitive) or that touch neither manifest nor lockfile (e.g. a GitHub Actions version bump) are treated as consistent\n\nThis fixed vocabulary is implemented in `deps.mjs`. To add or remove vocabulary or judgment conditions, revise both `deps.mjs` and this table together (Claude does not add conditions on its own judgment).\n\n## Merging (follows the policy's `irreversible` gate)\n\n`gh pr merge --squash` is an **irreversible action**. Rather than hardcoding an individual approval gate in prose, it follows the central autonomy policy (the SSOT for the 3 classes and gate vocabulary, defined by the `policy` skill). Classification and zero-config default:\n\n| This skill's action | Class | Policy reference | Zero-config default gate |\n| --- | --- | --- | --- |\n| PR merge (`gh pr merge --squash`) | `irreversible` | `--action=merge` | `ask` (confirms auto-merge candidates one at a time) |\n\nThe effective gate is looked up via the sibling `policy` skill's `policy-read.mjs` (user-scope: `~\u002F.claude\u002Fskills\u002Fpolicy\u002Fpolicy-read.mjs`; dogfood: `\u003Crepo>\u002F.claude\u002Fskills\u002Fpolicy\u002Fpolicy-read.mjs`; Codex\u002FGemini: `.agents\u002Fskills\u002Fpolicy\u002Fpolicy-read.mjs`):\n\n```bash\nnode \u003Cpolicy skill's directory>\u002Fpolicy-read.mjs --action=merge --repo-root=\"$PWD\"\n# => .resolved.gate (default ask)\n```\n\nFlags are kept consistent with policy:\n\n- When `--dry-run` is specified: the engine outputs judgments only, with no merge and no confirmation (it does not call `gh pr merge`)\n- When `--auto` is specified: an **explicit opt-out of the irreversible gate**. The engine runs `gh pr merge \u003CN> --squash` serially against each auto-merge candidate without confirmation (required for unattended execution via routine \u002F `\u002Floop` \u002F `schedule`)\n- When neither is specified (`plan` mode): the engine does not merge and returns a `merge_plan` (the commands scheduled for execution). Confirms with a human according to the gate:\n  - gate=`ask` (zero-config default): confirms auto-merge candidates **one at a time**. Only approved PRs get `gh pr merge \u003CN> --squash` executed\n  - gate=`batch-confirm`: presents auto-merge candidates together once for a single batch confirmation; if approved, re-runs with `--auto` appended to the same arguments\n  - gate=`proceed`: re-runs with `--auto` without confirmation\n\n**Does not break even if policy is absent:** `policy-read.mjs` is fail-safe by design — unreadable or invalid values fall to the stricter side (`ask`). In environments where the `policy` skill is not deployed, the zero-config default gate in the table above (`irreversible`=`ask`) is applied directly.\n\n## Error handling (the engine puts this in the JSON)\n\n| Situation | Engine behavior |\n| --- | --- |\n| `--repo` not specified and no GitHub remote | Sets `repo_error`. No merge is performed |\n| `gh` not authenticated \u002F rate limit \u002F network (PR enumeration) | Puts the classification in `fetch_error`. Candidates are empty |\n| Failure to fetch a PR's individual CI status \u002F diff | Only that PR is downgraded to `要確認` (`ci: error` \u002F `diff_error`). Other PRs continue |\n| Merge failure (branch protection etc., under `--auto`) | Only that PR is downgraded to `要確認` and continues (recorded in `merge_results`) |\n| 0 automation PRs | `candidates: []`. merge plan is empty |\n\n## Integration with `\u002Floop` \u002F `schedule`\n\nLaunching `--auto` from `schedule` (cron routine) or `\u002Floop` closes the loop of \"consume automation PRs every morning\" ([ADR-0028](https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fhandbook\u002Fblob\u002Fmain\u002Fadr\u002F0028-skills-architecture-engine-judgment-policy-catalog.md) R5). Example: `\u002Fdeps --auto`. Since unattended execution cannot be interactive, the judgment table (conservative side = `要確認` when in doubt) and the policy gate become the sole boundary.\n\n## Out of scope\n\n| Item | Reason for exclusion |\n| --- | --- |\n| 1. Handling release PRs | `\u002Frelease`'s responsibility. release-please authors are always excluded |\n| 2. Making judgment conditions freeform | Judgment uses only fixed vocabulary. The LLM does not merge just because it \"looks safe\" on its own judgment (for reproducibility and reliability) |\n| 3. cross-repo triage | Single repo only for now. Crossing multiple repos will be considered in a separate issue |\n| 4. `--delete-branch` \u002F `--auto` (GitHub auto-merge) | This skill only does immediate squash merges. It does not delete branches or use GitHub auto-merge |\n\n## Notes\n\n- Do not read or stage `.env` files\n- Author determination uses the same pattern as health area 15 (a sync assertion in `tests\u002Fdeps.test.mjs` prevents drift). release-please is always excluded\n- Judgment is determined by the engine using the fixed vocabulary (table above). Claude does not re-judge (`要確認` when in doubt)\n- Merging follows the policy's `irreversible` gate (default `ask`). Since `--auto` is an explicit opt-out that skips confirmation, it's recommended to first check the content with `--dry-run` before using it\n- Do not add new runtime dependencies (only Node stdlib + `gh` \u002F `git`)\n",{"name":5,"description":7},"main","db212a47efe751fa1c42bd76e61dbfd8328e5b10",".agents\u002Fskills\u002Fdeps","https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fskills","https:\u002F\u002Fgithub.com\u002Fozzy-labs","2026-07-13 06:49:42",{"source":8,"skillName":5,"commands":54,"prompt":64,"zipAvailable":65},[55,58,61],{"tool":56,"command":57},"npx","npx skills add ozzy-labs\u002Fskills --skill deps",{"tool":59,"command":60},"bunx","bunx skills add ozzy-labs\u002Fskills --skill deps",{"tool":62,"command":63},"pnpm","pnpm dlx skills add ozzy-labs\u002Fskills --skill deps","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fskills\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fdeps\u002FSKILL.md",true,[67,73],{"path":68,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":71,"sourceHtmlUrl":72},"deps.mjs","SCRIPT","脚本",30641,"https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fskills\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fdeps\u002Fdeps.mjs",{"path":74,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":77,"sourceHtmlUrl":78},"SKILL.claude-code.md","REFERENCE","参考文档",3352,"https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fskills\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fdeps\u002FSKILL.claude-code.md",[80,103,129,150,178,200],{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":86,"publishedAt":42},"01M71J6R63H4E6ZE6KMDM4CT85","verify","An integrated skill that runs the combined validation of build \u002F typecheck \u002F test \u002F lint in one shot. The `verify.mjs` engine auto-discovers validation commands via a discovery chain (AGENTS.md's 「検証」 section → package.json scripts → justfile\u002FMakefile\u002Flefthook → language heuristics), executes them serially with their source attached, and returns a result summary. If a higher-priority stage produces a hit, only that stage is executed (no crossing stages).","https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fskills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fverify\u002FSKILL.md",[],[82,87,88,89,90,91,92,93,33,23,94,95,96,97,98,27,99,100,101,102],"combined","heuristics","chain","repo","discovery","section","lefthook","package","stage","Bash","one","lint","engine","with","test","typecheck",{"skillNo":104,"name":105,"nameZh":6,"description":106,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":109,"publishedAt":42},"01M71J6JW7SAY9PDKAWHG3SJCR","usage-guard","Monitors Claude Code's Usage Limit (5-hour = Current \u002F weekly = Weekly), pauses work when it exceeds 95%, and automatically resumes once the reset restores headroom. Bundles an engine form that a caller such as drive Reads at a checkpoint, and a standalone form, `\u002Fusage-guard \"\u003Ccontinuation command>\"`, that guards arbitrary work. Claude-only (depends on the OAuth usage-rate endpoint + ScheduleWakeup).","https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fskills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fusage-guard\u002FSKILL.md",[],[110,111,112,113,114,33,115,116,117,118,119,120,121,122,123,124,125,126,127,128],"usage","usage guard","guard","weekly","standalone","guards","when","code","reset","work","command","at","rate","status","endpoint","as","continuation","form","limit",{"skillNo":130,"name":131,"nameZh":6,"description":132,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":133,"categories":134,"keywords":135,"publishedAt":42},"01M71J6FRG119REA1G0S99Q4GZ","topics","Selects GitHub topic candidates by having the `topics.mjs` engine perform constraint validation, popularity measurement, broad+narrow \u002F singular-plural comparison, and hardcoded ozzy-labs conventions, then applies them via `gh repo edit --add-topic` following the policy's `externally-visible` gate (default batch-confirm). Scope is limited to use within ozzy-labs.","https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fskills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftopics\u002FSKILL.md",[],[131,136,137,90,138,139,140,141,142,143,144,96,145,29,146,27,99,147,148,149],"measurement","scope","policy","default","true","gh","plural","use","comparison","apply","batch","candidates","github","via",{"skillNo":151,"name":152,"nameZh":6,"description":153,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":154,"categories":155,"keywords":162,"publishedAt":42},"01M71J6DC27P4FDSP10SDT2PSN","skill-observability","Defines the skill observability event contract (event.schema.json) and emit substrate (obs-emit.mjs). The SSOT for the measurement layer of the skill improvement loop. Referenced by other skills and hooks.","https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fskills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fskill-observability\u002FSKILL.md",[156,157],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":158,"categoryName":159,"taxonomyType":160,"taxonomyTypeDesc":161},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[163,164,136,165,166,167,168,169,170,171,172,173,174,175,176,177],"observability","skill observability","improvement","skill improvement","for","event","hooks","contract","schema","loop","false","substrate","json","improvement loop","layer",{"skillNo":179,"name":180,"nameZh":6,"description":181,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":182,"categories":183,"keywords":185,"publishedAt":42},"01M71J6AYECH1J94RAZ49QZ19Y","skill-metrics","Aggregates the local observability event log (~\u002F.agents\u002Fobservability\u002Fevents.jsonl) and presents, read-only, per-skill invocation counts and notable events (fallback \u002F HITL rejection \u002F loop cap reached \u002F abort). Fires on \"show me the skill metrics,\" \"aggregate the observability results,\" \"which skills get used the most?\" Does not send anything.","https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fskills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fskill-metrics\u002FSKILL.md",[184],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[186,187,163,188,189,190,191,192,168,193,194,195,196,140,33,172,197,96,198,199],"skill metrics","metrics","event log","which","show","get","read-only","iso","aggregates","send","local","show me","log","jsonl",{"skillNo":201,"name":202,"nameZh":6,"description":203,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":204,"categories":205,"keywords":206,"publishedAt":42},"01M71J68TD0QFATGW3BBZVCWA2","ship","Runs verification, commit, and PR creation all at once. An integrated pipeline that runs verify (build + type + test + lint) → commit → PR creation in sequence against the changes.","https:\u002F\u002Fgithub.com\u002Fozzy-labs\u002Fskills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fship\u002FSKILL.md",[],[202,207,208,101,209,210,82,211,212,213,121,214,215,216,140,217,96,218,98],"type","verification","changes","pr","creation","build","pipeline","read","sequence","grep","pr creation","commit"]