[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6BYRGGE49R0KCAGY8KHGJ1G":3,"skill-same:01M6BYRGGE49R0KCAGY8KHGJ1G":166},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":45,"commitSha":46,"skillDirectory":47,"forksCount":48,"repositoryHtmlUrl":49,"repositoryHomepageUrl":6,"ownerHtmlUrl":50,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":51,"install":52,"resources":65},"01M6BYRGGE49R0KCAGY8KHGJ1G","tdd",null,"Test-driven development. Use when the user wants to build features or fix bugs test-first, mentions \"red-green-refactor\", or wants integration tests.","Vortex375\u002Fseraph","Vortex375","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F5016523?v=4","01M6BYMHA5FQE4EMD6BSZ13M46","Benjamin Schmitz","01M6BYMHEYGQ7DM3Q8A7KBNZ48",2,"AGPL-3.0","https:\u002F\u002Fgithub.com\u002FVortex375\u002Fseraph\u002Fblob\u002Fmain\u002Fapp\u002Fseraph_app\u002F.agents\u002Fskills\u002Ftdd\u002FSKILL.md",[],[5,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"build","when","test-first","test-driven","features","bugs","fix bugs","red","tests","green","red-green-refactor","use","fix","first","refactor","integration","development","integration tests","test","2026-11-10 10:12:30",false,"---\nname: repo-standardizer\ndescription: Polish any GitHub repository's surface — labels (emoji rating tiers, P0–P3 priority, impact severity), issue forms, PR template, CI workflows, CODEOWNERS, rulesets, docs. Repo meta & config only — no code logic touched. Use when creating a new repo or polishing an existing one.\n---\n\n# GitHub Repo Standardizer\n\nDetect a repository's current state, then polish its surface: issue forms,\nPR template, label taxonomy, CI, CODEOWNERS, rulesets, docs. Works on\nrepo metadata and config files only — code logic is never touched.\n**Idempotent** — safe to re-run; fills gaps and reconciles drift without\nduplicating or clobbering.\n\n## When to use\n\n- User says \"standardize \u002F tidy up \u002F professionalize this repo\"\n- A new repo was just created and needs templates, labels, CI, and rules from day one\n- A repo looks bare: no templates, no labels, no CI, no branch protection\n\n## Preflight (mandatory, in order)\n\n> **Requires**: `gh` CLI (authenticated), `git`, `jq`, `python3` — verify\n> they exist before starting (`which gh git jq python3`).\n\n### 1. Authenticate — check gh login first\n\n```bash\ngh auth status 2>\u002Fdev\u002Fnull || echo \"NOT_LOGGED_IN\"\n```\n\n- **Logged in** → continue; print `gh api user -q .login` so the user knows which account will act.\n- **Not logged in** → STOP. Tell the user (do not guess):\n  1. Run `gh auth login` (web\u002Fdevice flow), **or**\n  2. Export a token: `export GH_TOKEN=ghp_xxx` — needs `repo`, `workflow` (for CI files) and, for org repos, `admin:org` (or `admin:repo_hook` \u002F org membership admin) scopes.\n  - Never paste tokens into chat, logs, or files. If the user pastes a token in chat, advise them to revoke it and re-issue.\n  - If `gh auth login` is impossible in this environment (headless), suggest `gh auth login --with-token` reading from a file the user created.\n\nVerify the acting account can write to the target:\n\n```bash\n# user repos: no extra check needed beyond token scopes\n# org repos: must be a member\u002Fadmin of the org\ngh api \"orgs\u002FORG\u002Fmemberships\u002F$(gh api user -q .login)\" -q .role 2>\u002Fdev\u002Fnull || echo \"NO_ORG_ACCESS\"\n```\n\n- `admin`\u002F`member` → OK. `404` → stop and ask the user to add the account to the org first.\n\n### 2. Detect repository type\n\n```bash\ngh repo view OWNER\u002FREPO --json name,owner,visibility,defaultBranchRef,isArchived,isFork \\\n  -q '{name:.name, ownerType:.owner.type, visibility:.visibility, defaultBranch:.defaultBranchRef.name, archived:.isArchived, fork:.isFork}'\n```\n\n| Field | Meaning | Consequence |\n|---|---|---|\n| `ownerType` | `User` = personal, `Organization` = org | Org repos can also use org-level rulesets; both support repo-level rulesets |\n| `visibility` | `PUBLIC` \u002F `PRIVATE` \u002F `INTERNAL` | Private: skip public-facing docs pressure, keep CI secrets minimal; public: README badges + CONTRIBUTING\u002FSECURITY matter |\n| `archived` \u002F `fork` | Read-only \u002F fork | **Skip write modules**; report why |\n\nIf the repo was not explicitly named by the user, confirm before touching an\norg or private repository.\n\n### 3. Audit current state\n\n```bash\ngh label list --repo OWNER\u002FREPO --limit 200\ngh api repos\u002FOWNER\u002FREPO\u002Fcontents\u002F.github -q '.[].path' 2>\u002Fdev\u002Fnull || echo \"no .github dir\"\ngh api repos\u002FOWNER\u002FREPO\u002Fcontents\u002F.github\u002Fworkflows -q '.[].name' 2>\u002Fdev\u002Fnull || echo \"no workflows\"\ngh api repos\u002FOWNER\u002FREPO\u002Frulesets -q '.[] | {name:.name, enforcement:.enforcement}' 2>\u002Fdev\u002Fnull || echo \"no rulesets\"\ngh api repos\u002FOWNER\u002FREPO\u002Fbranches -q '.[].name' 2>\u002Fdev\u002Fnull\nfor f in README.md CONTRIBUTING.md SECURITY.md LICENSE .gitignore; do\n  gh api \"repos\u002FOWNER\u002FREPO\u002Fcontents\u002F$f\" -q .name 2>\u002Fdev\u002Fnull || echo \"missing: $f\"\ndone\n```\n\n### 4. Detect test framework (for CI module)\n\nCheck for these signals (first match wins):\n\n```bash\ngh api repos\u002FOWNER\u002FREPO\u002Fcontents\u002Fpackage.json -q .name 2>\u002Fdev\u002Fnull   # node → templates\u002Fci-node.yml\ngh api repos\u002FOWNER\u002FREPO\u002Fcontents\u002Fpyproject.toml -q .name 2>\u002Fdev\u002Fnull # python → templates\u002Fci-python.yml\ngh api repos\u002FOWNER\u002FREPO\u002Fcontents\u002Fgo.mod -q .name 2>\u002Fdev\u002Fnull         # go → templates\u002Fci-go.yml\ngh api repos\u002FOWNER\u002FREPO\u002Fcontents\u002FCargo.toml -q .name 2>\u002Fdev\u002Fnull     # rust → templates\u002Fci-rust.yml\n```\n\nNo signal → propose the generic CI (or ask the user whether CI is wanted at all).\n\n### 5. Ask about language (before planning)\n\n- Ask the user which language `CONTRIBUTING.md` and the PR template should be\n  written in (default: English, or the project's primary language for local\n  projects). Translate the templates accordingly when generating — never\n  assume a language.\n- (README languages are asked separately in Module F.)\n\n### 6. Ask about automation (decides the Governance labels)\n\nAsk the user whether the repo has any **automation bots or AI writers**\nrunning on it — e.g. dependabot, a Stale bot, ClawSweeper, or an AI coding\nagent that auto-files PRs \u002F auto-fixes issues.\n\n- **Why ask**: `r:*` \u002F `clawsweeper:*` \u002F `triage:*` \u002F `close:*` labels are\n  **signal labels, not categories** — a bot reads them and acts (auto-close,\n  auto-lock, auto-fix, auto-merge). Without running automation those labels\n  are dead weight, so the answer decides whether the Governance dimension is\n  added at all (Module A, Step 2).\n- **Yes** → plan the `Governance \u002F auto-close rules` dimension (add only the\n  `r:*` rules matching the project's real reject criteria).\n- **No** → skip that dimension entirely — never add `r:*` \u002F bot labels to a\n  repo with no automation.\n\n## Workflow\n\n1. **Preflight** (above). If auth or access fails, stop with a clear message.\n2. **Dry-run plan** — show the user a concise table of what will be created\u002Fupdated\u002Fskipped. Get confirmation for: rulesets, branch deletion\u002Fprotection changes, org-level changes, and anything destructive.\n3. **Apply modules** (each idempotent; run in this order).\n4. **Verify** — re-query and print an `applied \u002F skipped \u002F failed` checklist.\n\n### Module A — Labels (design first, then idempotent upsert)\n\n**Step 1 — Profile the project** (adjust the taxonomy, never copy blindly):\n\n- **Rating labels** → design a themed tier system for THIS project\n  (never copy an existing repo's set verbatim):\n  - Reference example — OpenClaw's official repo uses themed tiers with\n    emoji icons and a low→high color gradient (**EXAMPLE ONLY, do not copy**):\n    `rating: ? unranked krab` → `rating: ? silver shellfish` →\n    `rating: ? gold shrimp` → `rating: ? challenger crab` →\n    `rating: ? platinum hermit` → `rating: ? diamond lobster`\n  - International project → universal grades also work\n    (`grade: S\u002FA\u002FB\u002FC\u002FD` or `★`–`★★★★★`)\n  - Always redesign: pick a theme that fits the project (animals, gems,\n    ranks, stars…) and the audience's language. Do not reuse any existing\n    repo's rating labels as-is.\n- **Teams**: if the repo has an explicit division of labor\n  (CODEOWNERS, CONTRIBUTING, a team list in docs) → add one `team: *` label\n  per group (e.g. `team: frontend`, `team: algorithm`). No team list → skip.\n- **Project type** (library \u002F app \u002F coursework \u002F org-infra) → decide which\n  dimensions below are needed (`dependencies`, `security`, `docs`, …).\n- **Language**: write every label name and description in the language chosen\n  in Preflight step 5 (default English; local project → its primary language).\n  Never assume — translate every label name and description into the chosen\n  language (emoji glyphs stay as-is).\n  - **Exception — bot labels**: `r:*` \u002F `clawsweeper:*` \u002F `triage:*` \u002F\n    `close:*` names are matched literally by automation code (almost always\n    English). Keep those **names** in the bot's language — a translated name\n    breaks the bot. Only their `description` may use the user's language.\n\n**Step 2 — Compose categories.** Baseline lives in `templates\u002Flabels.json`\n(plain names, no emoji); extend or trim per the profile in Step 1.\n\n**Emoji policy — rating tiers are the ONLY mandatory-emoji labels.** Every\n`rating:*` \u002F `issue-rating:*` tier MUST carry an emoji with a clear low→high\ngradient (e.g. `rating: ? diamond lobster`). All other labels: emoji is the\nagent's call — add icons where they aid scanning, omit them where they\nclutter. **Consistency rule: within one dimension, either ALL labels carry\nan emoji or NONE do** — never a mixed half-emoji dimension (e.g. don't ship\n`? bug` next to a plain `enhancement`).\n\n**Every dimension is opt-in except Type.** Add a dimension only if the repo\nactually needs it; skip it otherwise. The menu below mirrors OpenClaw's\nofficial label taxonomy (the richest open reference) — cover every dimension\nthat applies, but never force one the repo doesn't use.\n\n**Priority uses `P0`–`P3`** (OpenClaw's convention — `P0` = emergency).\nExamples in the tables below show the optional emoji style — apply them\nall or none per dimension (baseline ships plain `P0`–`P3`):\n\n| Label | Meaning | Color |\n|---|---|---|\n| `? P0` | Emergency: data loss, security bypass, crash loop, unusable core | `b60205` |\n| `? P1` | High: blocks planned work, needs attention soon | `d93f0b` |\n| `? P2` | Medium: normal priority | `fbca04` |\n| `? P3` | Low: nice to have | `1a7f37` |\n\n**Dimension menu** (write each label in the user's chosen language):\n\n| Dimension | Labels (examples) | Add when |\n|---|---|---|\n| Type (always) | `? bug` `✨ enhancement` `? documentation` `❓ question` `? help wanted` `? good first issue` | always |\n| Priority | `? P0` `? P1` `? P2` `? P3` | recommended |\n| Status | `? in progress` `? blocked` `✅ ready to merge` `? merged` `? wontfix` | recommended |\n| Impact | `impact: security` `impact: data-loss` `impact: availability` … | recommended; required for security-sensitive repos |\n| Rating (PR quality) | `rating: ? diamond lobster` … themed tiers | PR-quality gate exists |\n| Issue rating | `issue-rating: ? diamond lobster` … | issue-quality gate exists (may fold into Rating) |\n| Merge risk | `merge-risk: ? security-boundary` `merge-risk: ? availability` … | maintainer review process exists |\n| Size | `size: XS` `size: S` `size: M` `size: L` `size: XL` | large repo \u002F team estimation |\n| Area \u002F module | `area: core` `area: api` `area: cli` … | multi-module project |\n| Bug detail | `bug: behavior` `bug: crash` | crash-prone \u002F many bug reports |\n| Governance \u002F auto-close rules | `r: spam` `r: support` `r: no-ci-pr` … `clawsweeper:*` `triage:*` | automation bot enforces close\u002Flock\u002Freview rules |\n| Close reason | `close: duplicate` `close: superseded` `close: invalid` … | close-automation bot exists |\n| Triage | `triage: bug` `triage: blocked` `triage: needs-review` … | triage workflow exists |\n| Proof | `proof: ? video` `proof: ? screenshot` | reproduction evidence required |\n| Dependencies | `? dependencies` | dependabot \u002F dependency PRs |\n| Security | `? security` | security-sensitive repo |\n| Regression | `↩️ regression` | stable project (was-working-now-fails) |\n| Stale | `?️ stale` `? no-stale` | stale automation exists |\n| Team | `team: \u003Cgroup>` | explicit division of labor |\n| Duplicate \u002F invalid | `? duplicate` `? invalid` | active public repo with many issues |\n| Channel | `channel: discord` `channel: telegram` … | multi-channel product (OpenClaw-style) |\n| App \u002F platform | `app: ios` `app: android` `app: web-ui` … | multi-platform app |\n| Extensions \u002F plugins | `extensions: \u003Cname>` `plugin: \u003Cname>` | plugin\u002Fextension ecosystem |\n\n**Governance rules (`r:` \u002F bot labels) — gated by Preflight step 6.** Only\nconsider this dimension if the user answered \"yes\" to automation bots \u002F AI\nwriters; skip it entirely otherwise. Auto-close and bot-state labels are\n**signal labels, not categories** — a bot (or Actions workflow) reads them and\nacts (auto-close, auto-lock, auto-fix, auto-merge). They are useless without\nthe matching automation, so **skip them unless a governance bot actually runs**\non the repo. If one does, add only the `r:*` rules matching the project's real\noff-topic \u002F reject criteria (e.g. `r: spam`, `r: support`, `r: no-ci-pr`) plus\nthe bot's own state labels (`clawsweeper:*`, `triage:*`, `close:*`). Never copy\nOpenClaw's set verbatim — its rules encode OpenClaw's specific product\nboundaries.\n\n**Impact dimension** — the security \"blast radius\" judgement (generalized\nfrom OpenClaw; trim to the repo's actual failure modes):\n\n| Label | Meaning |\n|---|---|\n| `impact: security` | security boundary, credentials, authz, sandbox, sensitive data |\n| `impact: data-loss` | loses\u002Fcorrupts\u002Fdrops user, session, or config data |\n| `impact: availability` | crash, hang, restart loop, or process outage |\n| `impact: auth-provider` | auth \u002F routing \u002F model choice \u002F secret resolution breaks |\n| `impact: session-state` | session \u002F memory \u002F state drifts or corrupts (stateful systems) |\n| `impact: message-loss` | messages\u002Fevents lost, duplicated, or misrouted (messaging systems) |\n| `impact: ux-blocker` | user blocked with no terminal\u002Flogs\u002Fsupport (GUI products) |\n| `impact: ux-friction` | confusing flow \u002F support burden (GUI products) |\n| `impact: other` | meaningful impact outside the owned taxonomy |\n\n**Step 3 — Color rules (mandatory):**\n\n- **Diverse palette**: colors must be rich and varied — the whole label set\n  should look like a palette, not a monochrome block. Even within one\n  category, spread the hues (e.g. priority labels: red \u002F orange \u002F yellow \u002F\n  green, or four clearly different hues).\n- **Semantic hints (not hard mappings)**: `ready to merge` \u002F `merged` \u002F done\n  → greens (never gray or red); `wontfix` → gray; `in progress` → blue.\n  Everything else: pick colors that look good together and match the label's\n  meaning loosely — but prefer variety over strict one-meaning-one-color.\n- **Emoji policy**: rating tiers are emoji-**mandatory** — every\n  `rating:*` \u002F `issue-rating:*` label needs a clear low→high emoji gradient\n  (e.g. `rating: ? diamond lobster`). Everywhere else, emoji is the agent's\n  call: use icons where they aid scanning, omit them where they clutter.\n  **Consistency: within one dimension, all labels carry an emoji or none\n  do** — never a mixed half-emoji dimension. If used, the emoji must match\n  the label's meaning, never decorative-only.\n- **Rating labels need docs**: when rating labels are added, also add\n  `LABELS.md` (Step 4) describing each label's meaning and the explicit\n  low→high order, so the ranking is unambiguous.\n- Neighboring labels must be distinguishable. Forbidden: all-one-color,\n  adjacent duplicates, or colors that contradict the label content.\n\n**Step 4 — Rating-label docs (only if rating labels exist).** Generate\n`LABELS.md` from `templates\u002FLABELS.md` (or extend an existing docs file):\nlist every rating label with its meaning and the explicit low→high order,\nplus the rest of the taxonomy. Commit and push it together with the labels.\n\n**Step 5 — Idempotent upsert.** GitHub has **no** `PUT \u002Flabels\u002F{name}`\nendpoint. Upsert = check existence (`GET \u002Flabels\u002F{name}`), then\n`POST \u002Flabels` (create) or `PATCH \u002Flabels\u002F{name}` (update). Works for both\nmap-form and array-form `labels.json`:\n\n```bash\nR=\"repos\u002FOWNER\u002FREPO\"\njq -c 'if type == \"array\" then .[] else to_entries[] | {name: .key} + .value end' templates\u002Flabels.json | while read -r l; do\n  name=$(echo \"$l\" | jq -r .name); color=$(echo \"$l\" | jq -r .color); desc=$(echo \"$l\" | jq -r .description)\n  enc=$(python3 -c \"import urllib.parse,sys;print(urllib.parse.quote(sys.argv[1]))\" \"$name\")\n  if gh api \"$R\u002Flabels\u002F$enc\" >\u002Fdev\u002Fnull 2>&1; then\n    gh api -X PATCH \"$R\u002Flabels\u002F$enc\" -f name=\"$name\" -f color=\"$color\" -f description=\"$desc\" --silent && echo \"label updated: $name\"\n  else\n    gh api -X POST \"$R\u002Flabels\" -f name=\"$name\" -f color=\"$color\" -f description=\"$desc\" --silent && echo \"label created: $name\"\n  fi\ndone\n```\n\n- URL-encode label names (spaces, slashes).\n- To reconcile drift (deleted manual labels), show the diff and ask before removing labels that are already in use.\n\n### Module B — Issue forms + config\n\nCreate `.github\u002FISSUE_TEMPLATE\u002F` with `config.yml` plus one YAML form per\ntemplate (bug \u002F feature \u002F question). Push via a commit:\n\n- **Replace placeholders** in `config.yml` (`OWNER\u002FREPO` in the\n  Discussions \u002F Security contact URLs) — see Template placeholders.\n- Write the forms in the user-chosen language (Preflight step 5): translate\n  form names, labels, descriptions, and placeholder text; `title:` prefix\n  and `labels:` values stay as-is (they must match the label taxonomy).\n\n```bash\nmkdir -p .github\u002FISSUE_TEMPLATE\ncp templates\u002Fissue-form-*.yml templates\u002Fconfig.yml .github\u002FISSUE_TEMPLATE\u002F\ngit add .github\u002FISSUE_TEMPLATE && git commit -m \"chore: add issue forms\" && git push\n```\n\n- If templates already exist, diff them; only overwrite identical or clearly\n  stale files (ask first if the user may have customized them).\n- If there is no git clone, clone first (`gh repo clone OWNER\u002FREPO`), edit, push.\n\n### Module C — PR template\n\n```bash\nmkdir -p .github\ncp templates\u002FPR_TEMPLATE.md .github\u002FPULL_REQUEST_TEMPLATE.md\ngit add .github\u002FPULL_REQUEST_TEMPLATE.md && git commit -m \"chore: add PR template\" && git push\n```\n\n- Write the template in the user-chosen language (Preflight step 5).\n  The PR template has no placeholders to replace.\n\n### Module D — CI workflow\n\nPick the workflow from the framework detection (templates\u002Fci-*.yml —\nthey trigger on `$default-branch`, so they work for any default branch\nname). Write to `.github\u002Fworkflows\u002Fci.yml`, commit, push. Keep existing\nworkflows; only add `ci.yml` if none exists.\n\n- Node projects: `ci-node.yml` installs dependencies lockfile-aware\n  (`npm ci` \u002F `pnpm install --frozen-lockfile` \u002F `yarn install\n  --frozen-lockfile`, with plain `npm install` as fallback) — no manual\n  adjustment needed for pnpm \u002F yarn repos.\n\n- Note: pushing workflow files requires a token with the `workflow` scope; if\n  the push is rejected with 403, tell the user their token lacks `workflow`.\n\n### Module E — Branch rules\n\nPrefer **rulesets** (modern) over legacy branch protection:\n\n```bash\n# list existing\ngh api repos\u002FOWNER\u002FREPO\u002Frulesets -q '.[].name'\n# create (example: protect default branch)\ngh api -X POST repos\u002FOWNER\u002FREPO\u002Frulesets --input - \u003C\u003C'EOF'\n{\n  \"name\": \"protect-default-branch\",\n  \"target\": \"branch\",\n  \"enforcement\": \"active\",\n  \"conditions\": {\n    \"ref_name\": {\"include\": [\"refs\u002Fheads\u002FDEFAULT_BRANCH\"], \"exclude\": []}\n  },\n  \"rules\": [\n    {\"type\": \"pull_request\", \"parameters\": {\"required_approving_review_count\": 1, \"dismiss_stale_reviews_on_push\": true, \"require_code_owner_review\": false, \"require_last_push_approval\": true, \"required_review_thread_resolution\": true}},\n    {\"type\": \"required_linear_history\"},\n    {\"type\": \"deletion\"},\n    {\"type\": \"non_fast_forward\"},\n    {\"type\": \"required_signatures\"}\n  ]\n}\nEOF\n```\n\n- Idempotency: if a ruleset with the same name exists, update it with\n  `PUT repos\u002FOWNER\u002FREPO\u002Frulesets\u002F{id}` — **full replace**, include the complete\n  body (name, enforcement, conditions, rules, bypass_actors). There is no PATCH\n  for rulesets (PATCH returns 404).\n- Optional admin bypass: add `\"bypass_actors\": [{\"actor_id\": 5,\n  \"actor_type\": \"RepositoryRole\", \"bypass_mode\": \"always\"}]` (id 5 = admin)\n  so maintainers can push directly to the protected branch; non-admins still\n  go through pull requests.\n- `pull_request` parameters are **all required** in current API versions:\n  `required_approving_review_count`, `dismiss_stale_reviews_on_push`,\n  `require_code_owner_review`, `require_last_push_approval`,\n  `required_review_thread_resolution`. Omitting any → HTTP 422.\n- `target: \"branch\"` + `ref_name.include: refs\u002Fheads\u002F\u003Cdefault>`; also offer\n  `\"tag\"` rules if tags matter.\n- Org repos: optionally offer org-level rulesets (`\u002Forgs\u002F{org}\u002Frulesets`).\n\n### Module F — Docs\n\nREADME (ask about languages FIRST):\n\n- Ask the user: which languages should the README support? (suggest the\n  project's primary language + English for international projects)\n- If a README already exists, ask whether to adapt it into more languages —\n  never add languages without asking.\n- Language switcher convention (pattern from `programmingHLS\u002Fccmm`):\n  - Default file stays `README.md` (usually English).\n  - Extra languages: `README.\u003Clang>.md` (e.g. `README.zh.md`, `README.ja.md`).\n  - Top of every file, a switcher line — current language as plain text,\n    others as relative links:\n    - `README.md`:       `\u003C English | 简体中文 >`  (简体中文 links to `README.zh.md`)\n    - `README.zh.md`:    `\u003C English | 简体中文 >`  (English links to `README.md`)\n  - Keep structure, badges, and anchors parallel across language files.\n- `README.md`: if missing or bare, generate one from `templates\u002FREADME.md`\n  (badges, install, usage, modules table). Keep the user's existing content if\n  it is already substantive — only append a badges block. **Replace\n  placeholders** (badge URLs, clone URL, owner credit) per Template\n  placeholders.\n- `CONTRIBUTING.md`, `SECURITY.md`, `CODE_OF_CONDUCT.md`: copy from\n  templates if missing (write `CONTRIBUTING.md` in the user-chosen language\n  from Preflight step 5; **replace `OWNER\u002FREPO`** in `SECURITY.md`'s\n  advisory link per Template placeholders).\n- `VISION.md`: optional direction doc (modeled on OpenClaw's VISION.md) —\n  generate a short vision from `templates\u002FVISION.md` (origin, guiding\n  principles, current state, direction, contribution rules) if the user\n  wants one (**replace `PROJECT_NAME`** per Template placeholders).\n- `THIRD_PARTY_NOTICES.md`: add when the project adapts third-party content\n  (licenses, fonts, code of conduct) — list each source and its license.\n- `docs\u002FARCHITECTURE.md`: for non-trivial projects, generate a short\n  architecture doc (structure, flow, constraints) from the audit.\n- `LICENSE`: ask the user which license (default MIT) before creating.\n- `CHANGELOG.md`: create from `templates\u002FCHANGELOG.md` (Keep a Changelog\n  format) if missing; log notable changes per release (**replace\n  `YYYY-MM-DD`** in the placeholder date line per Template placeholders).\n\n### Module G — AI assistant guides (CLAUDE.md \u002F AGENTS.md)\n\n- Add a `CLAUDE.md` (guidance for Claude Code) and an `AGENTS.md` (guidance\n  for any AI coding agent) when missing — see `templates\u002FCLAUDE.md` and\n  `templates\u002FAGENTS.md` (**replace `OWNER\u002FREPO`** and the i18n placeholder\n  per Template placeholders).\n- If they already exist, diff and fill gaps rather than overwrite.\n- Typical content, derived from the repo audit (Modules A–F):\n  - Project: one-paragraph summary, status, stack.\n  - Commands: build \u002F test \u002F lint \u002F run (from CI detection + package scripts).\n  - Conventions: commit style (see CONTRIBUTING), label taxonomy, i18n\n    requirements, secrets policy (never hardcode keys), file map.\n  - Caveats: known risks, areas to be careful with.\n- CLAUDE.md vs AGENTS.md: CLAUDE.md is Claude-specific; AGENTS.md is\n  agent-agnostic (works for Cursor\u002FCopilot\u002FOpenClaw too). Keep AGENTS.md free\n  of Claude-only references.\n\n## Verification\n\n```bash\ngh label list --repo OWNER\u002FREPO --limit 200 | wc -l\ngh api repos\u002FOWNER\u002FREPO\u002Fcontents\u002F.github\u002FISSUE_TEMPLATE -q '.[].name' 2>\u002Fdev\u002Fnull\ngh api repos\u002FOWNER\u002FREPO\u002Fcontents\u002F.github\u002FPULL_REQUEST_TEMPLATE.md -q .name 2>\u002Fdev\u002Fnull\ngh api repos\u002FOWNER\u002FREPO\u002Fcontents\u002F.github\u002Fworkflows\u002Fci.yml -q .name 2>\u002Fdev\u002Fnull\ngh api repos\u002FOWNER\u002FREPO\u002Frulesets -q '.[] | {name:.name, enforcement:.enforcement}'\n```\n\nReport a final table: `module | status (applied\u002Fskipped\u002Ffailed) | note`.\n\n## Template placeholders (replace on copy)\n\nTemplates stay generic — `OWNER\u002FREPO`, `OWNER_USERNAME`, `PROJECT_NAME`,\n`YYYY-MM-DD` are placeholders the agent fills in when copying a template\ninto the target repo. **Unreplaced placeholders ship broken links** (badges,\nclone URL, discussions, security advisory, CODEOWNERS handle) into the\nuser's repo.\n\n| Placeholder | Replace with |\n|---|---|\n| `OWNER` | target repo owner login (user or org) |\n| `REPO` | target repo name |\n| `OWNER_USERNAME` | owner's default reviewer \u002F team handle |\n| `PROJECT_NAME` | project display name |\n| `YYYY-MM-DD` | current date |\n\nResolve the values once up front, then substitute in every copied file\n(`config.yml`, `README*.md`, `SECURITY.md`, `CODEOWNERS`, `AGENTS.md` \u002F\n`CLAUDE.md`, `VISION.md`, …):\n\n```bash\nO=OWNER R=REPO N=PROJECT_NAME D=$(date +%F)\nsed -i \"s|OWNER_USERNAME|$O|g; s|OWNER\u002FREPO|$O\u002F$R|g; s|PROJECT_NAME|$N|g; s|YYYY-MM-DD|$D|g\" \\\n  .github\u002FISSUE_TEMPLATE\u002Fconfig.yml README.md SECURITY.md .github\u002FCODEOWNERS AGENTS.md\n```\n\n- Replace `OWNER_USERNAME` before `OWNER\u002FREPO` — the former contains the\n  `OWNER` prefix, so order matters with naive `sed`.\n- Only `config.yml`, `README*.md`, `SECURITY.md`, `CODEOWNERS`, `AGENTS.md` \u002F\n  `CLAUDE.md`, `VISION.md`, `CHANGELOG.md` carry placeholders; the issue\n  forms, PR template, CI workflows, and CoC are placeholder-free.\n- CI templates need no substitution, but **translate** their human-facing\n  text if the user chose a non-English language.\n\n## Rules of thumb\n\n- **Idempotent**: every module can run twice with the same result.\n- **Never clobber user content**: diff first, ask before overwriting customized files.\n- **Auth first**: no token, no action — tell the user how to log in, never guess.\n- **Dry-run before destructive ops**: rulesets, branch rules, label deletion, visibility changes.\n- **Confirm scope**: org\u002Fprivate repos and anything the user didn't explicitly name.\n\n## Templates\n\nAll templates live in `templates\u002F`:\n`labels.json`, `LABELS.md`, `config.yml`, `issue-form-bug.yml`,\n`issue-form-feature.yml`, `issue-form-question.yml`, `PR_TEMPLATE.md`,\n`ci-node.yml`, `ci-python.yml`, `ci-go.yml`, `ci-rust.yml`, `CODEOWNERS`,\n`CONTRIBUTING.md`, `SECURITY.md`, `CODE_OF_CONDUCT.md`, `CLAUDE.md`,\n`AGENTS.md`, `VISION.md`, `CHANGELOG.md`, `templates\u002FREADME.md`,\n`templates\u002FREADME.zh.md`.\n","# GitHub Repo Standardizer\n\nDetect a repository's current state, then polish its surface: issue forms,\nPR template, label taxonomy, CI, CODEOWNERS, rulesets, docs. Works on\nrepo metadata and config files only — code logic is never touched.\n**Idempotent** — safe to re-run; fills gaps and reconciles drift without\nduplicating or clobbering.\n\n## When to use\n\n- User says \"standardize \u002F tidy up \u002F professionalize this repo\"\n- A new repo was just created and needs templates, labels, CI, and rules from day one\n- A repo looks bare: no templates, no labels, no CI, no branch protection\n\n## Preflight (mandatory, in order)\n\n> **Requires**: `gh` CLI (authenticated), `git`, `jq`, `python3` — verify\n> they exist before starting (`which gh git jq python3`).\n\n### 1. Authenticate — check gh login first\n\n```bash\ngh auth status 2>\u002Fdev\u002Fnull || echo \"NOT_LOGGED_IN\"\n```\n\n- **Logged in** → continue; print `gh api user -q .login` so the user knows which account will act.\n- **Not logged in** → STOP. Tell the user (do not guess):\n  1. Run `gh auth login` (web\u002Fdevice flow), **or**\n  2. Export a token: `export GH_TOKEN=ghp_xxx` — needs `repo`, `workflow` (for CI files) and, for org repos, `admin:org` (or `admin:repo_hook` \u002F org membership admin) scopes.\n  - Never paste tokens into chat, logs, or files. If the user pastes a token in chat, advise them to revoke it and re-issue.\n  - If `gh auth login` is impossible in this environment (headless), suggest `gh auth login --with-token` reading from a file the user created.\n\nVerify the acting account can write to the target:\n\n```bash\n# user repos: no extra check needed beyond token scopes\n# org repos: must be a member\u002Fadmin of the org\ngh api \"orgs\u002FORG\u002Fmemberships\u002F$(gh api user -q .login)\" -q .role 2>\u002Fdev\u002Fnull || echo \"NO_ORG_ACCESS\"\n```\n\n- `admin`\u002F`member` → OK. `404` → stop and ask the user to add the account to the org first.\n\n### 2. Detect repository type\n\n```bash\ngh repo view OWNER\u002FREPO --json name,owner,visibility,defaultBranchRef,isArchived,isFork \\\n  -q '{name:.name, ownerType:.owner.type, visibility:.visibility, defaultBranch:.defaultBranchRef.name, archived:.isArchived, fork:.isFork}'\n```\n\n| Field | Meaning | Consequence |\n|---|---|---|\n| `ownerType` | `User` = personal, `Organization` = org | Org repos can also use org-level rulesets; both support repo-level rulesets |\n| `visibility` | `PUBLIC` \u002F `PRIVATE` \u002F `INTERNAL` | Private: skip public-facing docs pressure, keep CI secrets minimal; public: README badges + CONTRIBUTING\u002FSECURITY matter |\n| `archived` \u002F `fork` | Read-only \u002F fork | **Skip write modules**; report why |\n\nIf the repo was not explicitly named by the user, confirm before touching an\norg or private repository.\n\n### 3. Audit current state\n\n```bash\ngh label list --repo OWNER\u002FREPO --limit 200\ngh api repos\u002FOWNER\u002FREPO\u002Fcontents\u002F.github -q '.[].path' 2>\u002Fdev\u002Fnull || echo \"no .github dir\"\ngh api repos\u002FOWNER\u002FREPO\u002Fcontents\u002F.github\u002Fworkflows -q '.[].name' 2>\u002Fdev\u002Fnull || echo \"no workflows\"\ngh api repos\u002FOWNER\u002FREPO\u002Frulesets -q '.[] | {name:.name, enforcement:.enforcement}' 2>\u002Fdev\u002Fnull || echo \"no rulesets\"\ngh api repos\u002FOWNER\u002FREPO\u002Fbranches -q '.[].name' 2>\u002Fdev\u002Fnull\nfor f in README.md CONTRIBUTING.md SECURITY.md LICENSE .gitignore; do\n  gh api \"repos\u002FOWNER\u002FREPO\u002Fcontents\u002F$f\" -q .name 2>\u002Fdev\u002Fnull || echo \"missing: $f\"\ndone\n```\n\n### 4. Detect test framework (for CI module)\n\nCheck for these signals (first match wins):\n\n```bash\ngh api repos\u002FOWNER\u002FREPO\u002Fcontents\u002Fpackage.json -q .name 2>\u002Fdev\u002Fnull   # node → templates\u002Fci-node.yml\ngh api repos\u002FOWNER\u002FREPO\u002Fcontents\u002Fpyproject.toml -q .name 2>\u002Fdev\u002Fnull # python → templates\u002Fci-python.yml\ngh api repos\u002FOWNER\u002FREPO\u002Fcontents\u002Fgo.mod -q .name 2>\u002Fdev\u002Fnull         # go → templates\u002Fci-go.yml\ngh api repos\u002FOWNER\u002FREPO\u002Fcontents\u002FCargo.toml -q .name 2>\u002Fdev\u002Fnull     # rust → templates\u002Fci-rust.yml\n```\n\nNo signal → propose the generic CI (or ask the user whether CI is wanted at all).\n\n### 5. Ask about language (before planning)\n\n- Ask the user which language `CONTRIBUTING.md` and the PR template should be\n  written in (default: English, or the project's primary language for local\n  projects). Translate the templates accordingly when generating — never\n  assume a language.\n- (README languages are asked separately in Module F.)\n\n### 6. Ask about automation (decides the Governance labels)\n\nAsk the user whether the repo has any **automation bots or AI writers**\nrunning on it — e.g. dependabot, a Stale bot, ClawSweeper, or an AI coding\nagent that auto-files PRs \u002F auto-fixes issues.\n\n- **Why ask**: `r:*` \u002F `clawsweeper:*` \u002F `triage:*` \u002F `close:*` labels are\n  **signal labels, not categories** — a bot reads them and acts (auto-close,\n  auto-lock, auto-fix, auto-merge). Without running automation those labels\n  are dead weight, so the answer decides whether the Governance dimension is\n  added at all (Module A, Step 2).\n- **Yes** → plan the `Governance \u002F auto-close rules` dimension (add only the\n  `r:*` rules matching the project's real reject criteria).\n- **No** → skip that dimension entirely — never add `r:*` \u002F bot labels to a\n  repo with no automation.\n\n## Workflow\n\n1. **Preflight** (above). If auth or access fails, stop with a clear message.\n2. **Dry-run plan** — show the user a concise table of what will be created\u002Fupdated\u002Fskipped. Get confirmation for: rulesets, branch deletion\u002Fprotection changes, org-level changes, and anything destructive.\n3. **Apply modules** (each idempotent; run in this order).\n4. **Verify** — re-query and print an `applied \u002F skipped \u002F failed` checklist.\n\n### Module A — Labels (design first, then idempotent upsert)\n\n**Step 1 — Profile the project** (adjust the taxonomy, never copy blindly):\n\n- **Rating labels** → design a themed tier system for THIS project\n  (never copy an existing repo's set verbatim):\n  - Reference example — OpenClaw's official repo uses themed tiers with\n    emoji icons and a low→high color gradient (**EXAMPLE ONLY, do not copy**):\n    `rating: ? unranked krab` → `rating: ? silver shellfish` →\n    `rating: ? gold shrimp` → `rating: ? challenger crab` →\n    `rating: ? platinum hermit` → `rating: ? diamond lobster`\n  - International project → universal grades also work\n    (`grade: S\u002FA\u002FB\u002FC\u002FD` or `★`–`★★★★★`)\n  - Always redesign: pick a theme that fits the project (animals, gems,\n    ranks, stars…) and the audience's language. Do not reuse any existing\n    repo's rating labels as-is.\n- **Teams**: if the repo has an explicit division of labor\n  (CODEOWNERS, CONTRIBUTING, a team list in docs) → add one `team: *` label\n  per group (e.g. `team: frontend`, `team: algorithm`). No team list → skip.\n- **Project type** (library \u002F app \u002F coursework \u002F org-infra) → decide which\n  dimensions below are needed (`dependencies`, `security`, `docs`, …).\n- **Language**: write every label name and description in the language chosen\n  in Preflight step 5 (default English; local project → its primary language).\n  Never assume — translate every label name and description into the chosen\n  language (emoji glyphs stay as-is).\n  - **Exception — bot labels**: `r:*` \u002F `clawsweeper:*` \u002F `triage:*` \u002F\n    `close:*` names are matched literally by automation code (almost always\n    English). Keep those **names** in the bot's language — a translated name\n    breaks the bot. Only their `description` may use the user's language.\n\n**Step 2 — Compose categories.** Baseline lives in `templates\u002Flabels.json`\n(plain names, no emoji); extend or trim per the profile in Step 1.\n\n**Emoji policy — rating tiers are the ONLY mandatory-emoji labels.** Every\n`rating:*` \u002F `issue-rating:*` tier MUST carry an emoji with a clear low→high\ngradient (e.g. `rating: ? diamond lobster`). All other labels: emoji is the\nagent's call — add icons where they aid scanning, omit them where they\nclutter. **Consistency rule: within one dimension, either ALL labels carry\nan emoji or NONE do** — never a mixed half-emoji dimension (e.g. don't ship\n`? bug` next to a plain `enhancement`).\n\n**Every dimension is opt-in except Type.** Add a dimension only if the repo\nactually needs it; skip it otherwise. The menu below mirrors OpenClaw's\nofficial label taxonomy (the richest open reference) — cover every dimension\nthat applies, but never force one the repo doesn't use.\n\n**Priority uses `P0`–`P3`** (OpenClaw's convention — `P0` = emergency).\nExamples in the tables below show the optional emoji style — apply them\nall or none per dimension (baseline ships plain `P0`–`P3`):\n\n| Label | Meaning | Color |\n|---|---|---|\n| `? P0` | Emergency: data loss, security bypass, crash loop, unusable core | `b60205` |\n| `? P1` | High: blocks planned work, needs attention soon | `d93f0b` |\n| `? P2` | Medium: normal priority | `fbca04` |\n| `? P3` | Low: nice to have | `1a7f37` |\n\n**Dimension menu** (write each label in the user's chosen language):\n\n| Dimension | Labels (examples) | Add when |\n|---|---|---|\n| Type (always) | `? bug` `✨ enhancement` `? documentation` `❓ question` `? help wanted` `? good first issue` | always |\n| Priority | `? P0` `? P1` `? P2` `? P3` | recommended |\n| Status | `? in progress` `? blocked` `✅ ready to merge` `? merged` `? wontfix` | recommended |\n| Impact | `impact: security` `impact: data-loss` `impact: availability` … | recommended; required for security-sensitive repos |\n| Rating (PR quality) | `rating: ? diamond lobster` … themed tiers | PR-quality gate exists |\n| Issue rating | `issue-rating: ? diamond lobster` … | issue-quality gate exists (may fold into Rating) |\n| Merge risk | `merge-risk: ? security-boundary` `merge-risk: ? availability` … | maintainer review process exists |\n| Size | `size: XS` `size: S` `size: M` `size: L` `size: XL` | large repo \u002F team estimation |\n| Area \u002F module | `area: core` `area: api` `area: cli` … | multi-module project |\n| Bug detail | `bug: behavior` `bug: crash` | crash-prone \u002F many bug reports |\n| Governance \u002F auto-close rules | `r: spam` `r: support` `r: no-ci-pr` … `clawsweeper:*` `triage:*` | automation bot enforces close\u002Flock\u002Freview rules |\n| Close reason | `close: duplicate` `close: superseded` `close: invalid` … | close-automation bot exists |\n| Triage | `triage: bug` `triage: blocked` `triage: needs-review` … | triage workflow exists |\n| Proof | `proof: ? video` `proof: ? screenshot` | reproduction evidence required |\n| Dependencies | `? dependencies` | dependabot \u002F dependency PRs |\n| Security | `? security` | security-sensitive repo |\n| Regression | `↩️ regression` | stable project (was-working-now-fails) |\n| Stale | `?️ stale` `? no-stale` | stale automation exists |\n| Team | `team: \u003Cgroup>` | explicit division of labor |\n| Duplicate \u002F invalid | `? duplicate` `? invalid` | active public repo with many issues |\n| Channel | `channel: discord` `channel: telegram` … | multi-channel product (OpenClaw-style) |\n| App \u002F platform | `app: ios` `app: android` `app: web-ui` … | multi-platform app |\n| Extensions \u002F plugins | `extensions: \u003Cname>` `plugin: \u003Cname>` | plugin\u002Fextension ecosystem |\n\n**Governance rules (`r:` \u002F bot labels) — gated by Preflight step 6.** Only\nconsider this dimension if the user answered \"yes\" to automation bots \u002F AI\nwriters; skip it entirely otherwise. Auto-close and bot-state labels are\n**signal labels, not categories** — a bot (or Actions workflow) reads them and\nacts (auto-close, auto-lock, auto-fix, auto-merge). They are useless without\nthe matching automation, so **skip them unless a governance bot actually runs**\non the repo. If one does, add only the `r:*` rules matching the project's real\noff-topic \u002F reject criteria (e.g. `r: spam`, `r: support`, `r: no-ci-pr`) plus\nthe bot's own state labels (`clawsweeper:*`, `triage:*`, `close:*`). Never copy\nOpenClaw's set verbatim — its rules encode OpenClaw's specific product\nboundaries.\n\n**Impact dimension** — the security \"blast radius\" judgement (generalized\nfrom OpenClaw; trim to the repo's actual failure modes):\n\n| Label | Meaning |\n|---|---|\n| `impact: security` | security boundary, credentials, authz, sandbox, sensitive data |\n| `impact: data-loss` | loses\u002Fcorrupts\u002Fdrops user, session, or config data |\n| `impact: availability` | crash, hang, restart loop, or process outage |\n| `impact: auth-provider` | auth \u002F routing \u002F model choice \u002F secret resolution breaks |\n| `impact: session-state` | session \u002F memory \u002F state drifts or corrupts (stateful systems) |\n| `impact: message-loss` | messages\u002Fevents lost, duplicated, or misrouted (messaging systems) |\n| `impact: ux-blocker` | user blocked with no terminal\u002Flogs\u002Fsupport (GUI products) |\n| `impact: ux-friction` | confusing flow \u002F support burden (GUI products) |\n| `impact: other` | meaningful impact outside the owned taxonomy |\n\n**Step 3 — Color rules (mandatory):**\n\n- **Diverse palette**: colors must be rich and varied — the whole label set\n  should look like a palette, not a monochrome block. Even within one\n  category, spread the hues (e.g. priority labels: red \u002F orange \u002F yellow \u002F\n  green, or four clearly different hues).\n- **Semantic hints (not hard mappings)**: `ready to merge` \u002F `merged` \u002F done\n  → greens (never gray or red); `wontfix` → gray; `in progress` → blue.\n  Everything else: pick colors that look good together and match the label's\n  meaning loosely — but prefer variety over strict one-meaning-one-color.\n- **Emoji policy**: rating tiers are emoji-**mandatory** — every\n  `rating:*` \u002F `issue-rating:*` label needs a clear low→high emoji gradient\n  (e.g. `rating: ? diamond lobster`). Everywhere else, emoji is the agent's\n  call: use icons where they aid scanning, omit them where they clutter.\n  **Consistency: within one dimension, all labels carry an emoji or none\n  do** — never a mixed half-emoji dimension. If used, the emoji must match\n  the label's meaning, never decorative-only.\n- **Rating labels need docs**: when rating labels are added, also add\n  `LABELS.md` (Step 4) describing each label's meaning and the explicit\n  low→high order, so the ranking is unambiguous.\n- Neighboring labels must be distinguishable. Forbidden: all-one-color,\n  adjacent duplicates, or colors that contradict the label content.\n\n**Step 4 — Rating-label docs (only if rating labels exist).** Generate\n`LABELS.md` from `templates\u002FLABELS.md` (or extend an existing docs file):\nlist every rating label with its meaning and the explicit low→high order,\nplus the rest of the taxonomy. Commit and push it together with the labels.\n\n**Step 5 — Idempotent upsert.** GitHub has **no** `PUT \u002Flabels\u002F{name}`\nendpoint. Upsert = check existence (`GET \u002Flabels\u002F{name}`), then\n`POST \u002Flabels` (create) or `PATCH \u002Flabels\u002F{name}` (update). Works for both\nmap-form and array-form `labels.json`:\n\n```bash\nR=\"repos\u002FOWNER\u002FREPO\"\njq -c 'if type == \"array\" then .[] else to_entries[] | {name: .key} + .value end' templates\u002Flabels.json | while read -r l; do\n  name=$(echo \"$l\" | jq -r .name); color=$(echo \"$l\" | jq -r .color); desc=$(echo \"$l\" | jq -r .description)\n  enc=$(python3 -c \"import urllib.parse,sys;print(urllib.parse.quote(sys.argv[1]))\" \"$name\")\n  if gh api \"$R\u002Flabels\u002F$enc\" >\u002Fdev\u002Fnull 2>&1; then\n    gh api -X PATCH \"$R\u002Flabels\u002F$enc\" -f name=\"$name\" -f color=\"$color\" -f description=\"$desc\" --silent && echo \"label updated: $name\"\n  else\n    gh api -X POST \"$R\u002Flabels\" -f name=\"$name\" -f color=\"$color\" -f description=\"$desc\" --silent && echo \"label created: $name\"\n  fi\ndone\n```\n\n- URL-encode label names (spaces, slashes).\n- To reconcile drift (deleted manual labels), show the diff and ask before removing labels that are already in use.\n\n### Module B — Issue forms + config\n\nCreate `.github\u002FISSUE_TEMPLATE\u002F` with `config.yml` plus one YAML form per\ntemplate (bug \u002F feature \u002F question). Push via a commit:\n\n- **Replace placeholders** in `config.yml` (`OWNER\u002FREPO` in the\n  Discussions \u002F Security contact URLs) — see Template placeholders.\n- Write the forms in the user-chosen language (Preflight step 5): translate\n  form names, labels, descriptions, and placeholder text; `title:` prefix\n  and `labels:` values stay as-is (they must match the label taxonomy).\n\n```bash\nmkdir -p .github\u002FISSUE_TEMPLATE\ncp templates\u002Fissue-form-*.yml templates\u002Fconfig.yml .github\u002FISSUE_TEMPLATE\u002F\ngit add .github\u002FISSUE_TEMPLATE && git commit -m \"chore: add issue forms\" && git push\n```\n\n- If templates already exist, diff them; only overwrite identical or clearly\n  stale files (ask first if the user may have customized them).\n- If there is no git clone, clone first (`gh repo clone OWNER\u002FREPO`), edit, push.\n\n### Module C — PR template\n\n```bash\nmkdir -p .github\ncp templates\u002FPR_TEMPLATE.md .github\u002FPULL_REQUEST_TEMPLATE.md\ngit add .github\u002FPULL_REQUEST_TEMPLATE.md && git commit -m \"chore: add PR template\" && git push\n```\n\n- Write the template in the user-chosen language (Preflight step 5).\n  The PR template has no placeholders to replace.\n\n### Module D — CI workflow\n\nPick the workflow from the framework detection (templates\u002Fci-*.yml —\nthey trigger on `$default-branch`, so they work for any default branch\nname). Write to `.github\u002Fworkflows\u002Fci.yml`, commit, push. Keep existing\nworkflows; only add `ci.yml` if none exists.\n\n- Node projects: `ci-node.yml` installs dependencies lockfile-aware\n  (`npm ci` \u002F `pnpm install --frozen-lockfile` \u002F `yarn install\n  --frozen-lockfile`, with plain `npm install` as fallback) — no manual\n  adjustment needed for pnpm \u002F yarn repos.\n\n- Note: pushing workflow files requires a token with the `workflow` scope; if\n  the push is rejected with 403, tell the user their token lacks `workflow`.\n\n### Module E — Branch rules\n\nPrefer **rulesets** (modern) over legacy branch protection:\n\n```bash\n# list existing\ngh api repos\u002FOWNER\u002FREPO\u002Frulesets -q '.[].name'\n# create (example: protect default branch)\ngh api -X POST repos\u002FOWNER\u002FREPO\u002Frulesets --input - \u003C\u003C'EOF'\n{\n  \"name\": \"protect-default-branch\",\n  \"target\": \"branch\",\n  \"enforcement\": \"active\",\n  \"conditions\": {\n    \"ref_name\": {\"include\": [\"refs\u002Fheads\u002FDEFAULT_BRANCH\"], \"exclude\": []}\n  },\n  \"rules\": [\n    {\"type\": \"pull_request\", \"parameters\": {\"required_approving_review_count\": 1, \"dismiss_stale_reviews_on_push\": true, \"require_code_owner_review\": false, \"require_last_push_approval\": true, \"required_review_thread_resolution\": true}},\n    {\"type\": \"required_linear_history\"},\n    {\"type\": \"deletion\"},\n    {\"type\": \"non_fast_forward\"},\n    {\"type\": \"required_signatures\"}\n  ]\n}\nEOF\n```\n\n- Idempotency: if a ruleset with the same name exists, update it with\n  `PUT repos\u002FOWNER\u002FREPO\u002Frulesets\u002F{id}` — **full replace**, include the complete\n  body (name, enforcement, conditions, rules, bypass_actors). There is no PATCH\n  for rulesets (PATCH returns 404).\n- Optional admin bypass: add `\"bypass_actors\": [{\"actor_id\": 5,\n  \"actor_type\": \"RepositoryRole\", \"bypass_mode\": \"always\"}]` (id 5 = admin)\n  so maintainers can push directly to the protected branch; non-admins still\n  go through pull requests.\n- `pull_request` parameters are **all required** in current API versions:\n  `required_approving_review_count`, `dismiss_stale_reviews_on_push`,\n  `require_code_owner_review`, `require_last_push_approval`,\n  `required_review_thread_resolution`. Omitting any → HTTP 422.\n- `target: \"branch\"` + `ref_name.include: refs\u002Fheads\u002F\u003Cdefault>`; also offer\n  `\"tag\"` rules if tags matter.\n- Org repos: optionally offer org-level rulesets (`\u002Forgs\u002F{org}\u002Frulesets`).\n\n### Module F — Docs\n\nREADME (ask about languages FIRST):\n\n- Ask the user: which languages should the README support? (suggest the\n  project's primary language + English for international projects)\n- If a README already exists, ask whether to adapt it into more languages —\n  never add languages without asking.\n- Language switcher convention (pattern from `programmingHLS\u002Fccmm`):\n  - Default file stays `README.md` (usually English).\n  - Extra languages: `README.\u003Clang>.md` (e.g. `README.zh.md`, `README.ja.md`).\n  - Top of every file, a switcher line — current language as plain text,\n    others as relative links:\n    - `README.md`:       `\u003C English | 简体中文 >`  (简体中文 links to `README.zh.md`)\n    - `README.zh.md`:    `\u003C English | 简体中文 >`  (English links to `README.md`)\n  - Keep structure, badges, and anchors parallel across language files.\n- `README.md`: if missing or bare, generate one from `templates\u002FREADME.md`\n  (badges, install, usage, modules table). Keep the user's existing content if\n  it is already substantive — only append a badges block. **Replace\n  placeholders** (badge URLs, clone URL, owner credit) per Template\n  placeholders.\n- `CONTRIBUTING.md`, `SECURITY.md`, `CODE_OF_CONDUCT.md`: copy from\n  templates if missing (write `CONTRIBUTING.md` in the user-chosen language\n  from Preflight step 5; **replace `OWNER\u002FREPO`** in `SECURITY.md`'s\n  advisory link per Template placeholders).\n- `VISION.md`: optional direction doc (modeled on OpenClaw's VISION.md) —\n  generate a short vision from `templates\u002FVISION.md` (origin, guiding\n  principles, current state, direction, contribution rules) if the user\n  wants one (**replace `PROJECT_NAME`** per Template placeholders).\n- `THIRD_PARTY_NOTICES.md`: add when the project adapts third-party content\n  (licenses, fonts, code of conduct) — list each source and its license.\n- `docs\u002FARCHITECTURE.md`: for non-trivial projects, generate a short\n  architecture doc (structure, flow, constraints) from the audit.\n- `LICENSE`: ask the user which license (default MIT) before creating.\n- `CHANGELOG.md`: create from `templates\u002FCHANGELOG.md` (Keep a Changelog\n  format) if missing; log notable changes per release (**replace\n  `YYYY-MM-DD`** in the placeholder date line per Template placeholders).\n\n### Module G — AI assistant guides (CLAUDE.md \u002F AGENTS.md)\n\n- Add a `CLAUDE.md` (guidance for Claude Code) and an `AGENTS.md` (guidance\n  for any AI coding agent) when missing — see `templates\u002FCLAUDE.md` and\n  `templates\u002FAGENTS.md` (**replace `OWNER\u002FREPO`** and the i18n placeholder\n  per Template placeholders).\n- If they already exist, diff and fill gaps rather than overwrite.\n- Typical content, derived from the repo audit (Modules A–F):\n  - Project: one-paragraph summary, status, stack.\n  - Commands: build \u002F test \u002F lint \u002F run (from CI detection + package scripts).\n  - Conventions: commit style (see CONTRIBUTING), label taxonomy, i18n\n    requirements, secrets policy (never hardcode keys), file map.\n  - Caveats: known risks, areas to be careful with.\n- CLAUDE.md vs AGENTS.md: CLAUDE.md is Claude-specific; AGENTS.md is\n  agent-agnostic (works for Cursor\u002FCopilot\u002FOpenClaw too). Keep AGENTS.md free\n  of Claude-only references.\n\n## Verification\n\n```bash\ngh label list --repo OWNER\u002FREPO --limit 200 | wc -l\ngh api repos\u002FOWNER\u002FREPO\u002Fcontents\u002F.github\u002FISSUE_TEMPLATE -q '.[].name' 2>\u002Fdev\u002Fnull\ngh api repos\u002FOWNER\u002FREPO\u002Fcontents\u002F.github\u002FPULL_REQUEST_TEMPLATE.md -q .name 2>\u002Fdev\u002Fnull\ngh api repos\u002FOWNER\u002FREPO\u002Fcontents\u002F.github\u002Fworkflows\u002Fci.yml -q .name 2>\u002Fdev\u002Fnull\ngh api repos\u002FOWNER\u002FREPO\u002Frulesets -q '.[] | {name:.name, enforcement:.enforcement}'\n```\n\nReport a final table: `module | status (applied\u002Fskipped\u002Ffailed) | note`.\n\n## Template placeholders (replace on copy)\n\nTemplates stay generic — `OWNER\u002FREPO`, `OWNER_USERNAME`, `PROJECT_NAME`,\n`YYYY-MM-DD` are placeholders the agent fills in when copying a template\ninto the target repo. **Unreplaced placeholders ship broken links** (badges,\nclone URL, discussions, security advisory, CODEOWNERS handle) into the\nuser's repo.\n\n| Placeholder | Replace with |\n|---|---|\n| `OWNER` | target repo owner login (user or org) |\n| `REPO` | target repo name |\n| `OWNER_USERNAME` | owner's default reviewer \u002F team handle |\n| `PROJECT_NAME` | project display name |\n| `YYYY-MM-DD` | current date |\n\nResolve the values once up front, then substitute in every copied file\n(`config.yml`, `README*.md`, `SECURITY.md`, `CODEOWNERS`, `AGENTS.md` \u002F\n`CLAUDE.md`, `VISION.md`, …):\n\n```bash\nO=OWNER R=REPO N=PROJECT_NAME D=$(date +%F)\nsed -i \"s|OWNER_USERNAME|$O|g; s|OWNER\u002FREPO|$O\u002F$R|g; s|PROJECT_NAME|$N|g; s|YYYY-MM-DD|$D|g\" \\\n  .github\u002FISSUE_TEMPLATE\u002Fconfig.yml README.md SECURITY.md .github\u002FCODEOWNERS AGENTS.md\n```\n\n- Replace `OWNER_USERNAME` before `OWNER\u002FREPO` — the former contains the\n  `OWNER` prefix, so order matters with naive `sed`.\n- Only `config.yml`, `README*.md`, `SECURITY.md`, `CODEOWNERS`, `AGENTS.md` \u002F\n  `CLAUDE.md`, `VISION.md`, `CHANGELOG.md` carry placeholders; the issue\n  forms, PR template, CI workflows, and CoC are placeholder-free.\n- CI templates need no substitution, but **translate** their human-facing\n  text if the user chose a non-English language.\n\n## Rules of thumb\n\n- **Idempotent**: every module can run twice with the same result.\n- **Never clobber user content**: diff first, ask before overwriting customized files.\n- **Auth first**: no token, no action — tell the user how to log in, never guess.\n- **Dry-run before destructive ops**: rulesets, branch rules, label deletion, visibility changes.\n- **Confirm scope**: org\u002Fprivate repos and anything the user didn't explicitly name.\n\n## Templates\n\nAll templates live in `templates\u002F`:\n`labels.json`, `LABELS.md`, `config.yml`, `issue-form-bug.yml`,\n`issue-form-feature.yml`, `issue-form-question.yml`, `PR_TEMPLATE.md`,\n`ci-node.yml`, `ci-python.yml`, `ci-go.yml`, `ci-rust.yml`, `CODEOWNERS`,\n`CONTRIBUTING.md`, `SECURITY.md`, `CODE_OF_CONDUCT.md`, `CLAUDE.md`,\n`AGENTS.md`, `VISION.md`, `CHANGELOG.md`, `templates\u002FREADME.md`,\n`templates\u002FREADME.zh.md`.\n",{"name":43,"description":44},"repo-standardizer","Polish any GitHub repository's surface — labels (emoji rating tiers, P0–P3 priority, impact severity), issue forms, PR template, CI workflows, CODEOWNERS, rulesets, docs. Repo meta & config only — no code logic touched. Use when creating a new repo or polishing an existing one.","main","5269f7ea2d6c3a9bfda5ed878b6726cf509121fd","app\u002Fseraph_app\u002F.agents\u002Fskills\u002Ftdd",0,"https:\u002F\u002Fgithub.com\u002FVortex375\u002Fseraph","https:\u002F\u002Fgithub.com\u002FVortex375","2026-11-08 18:46:14",{"source":8,"skillName":43,"commands":53,"prompt":63,"zipAvailable":64},[54,57,60],{"tool":55,"command":56},"npx","npx skills add Vortex375\u002Fseraph --skill repo-standardizer",{"tool":58,"command":59},"bunx","bunx skills add Vortex375\u002Fseraph --skill repo-standardizer",{"tool":61,"command":62},"pnpm","pnpm dlx skills add Vortex375\u002Fseraph --skill repo-standardizer","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FVortex375\u002Fseraph\u002Fblob\u002Fmain\u002Fapp\u002Fseraph_app\u002F.agents\u002Fskills\u002Ftdd\u002FSKILL.md",true,[66,72,76,80,84,88,92,96,100,104,108,114,118,122,126,130,134,138,142,146,150,154,158,162],{"path":67,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":70,"sourceHtmlUrl":71},"agents\u002Fopenai.yaml","REFERENCE","参考文档",87,"https:\u002F\u002Fgithub.com\u002FVortex375\u002Fseraph\u002Fblob\u002Fmain\u002Fapp\u002Fseraph_app\u002F.agents\u002Fskills\u002Ftdd\u002Fagents\u002Fopenai.yaml",{"path":73,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":74,"sourceHtmlUrl":75},"mocking.md",1481,"https:\u002F\u002Fgithub.com\u002FVortex375\u002Fseraph\u002Fblob\u002Fmain\u002Fapp\u002Fseraph_app\u002F.agents\u002Fskills\u002Ftdd\u002Fmocking.md",{"path":77,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":78,"sourceHtmlUrl":79},"templates\u002FAGENTS.md",1426,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Frepo-standardizer\u002Ftemplates\u002FAGENTS.md",{"path":81,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":82,"sourceHtmlUrl":83},"templates\u002FCHANGELOG.md",256,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Frepo-standardizer\u002Ftemplates\u002FCHANGELOG.md",{"path":85,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":86,"sourceHtmlUrl":87},"templates\u002Fci-go.yml",398,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Frepo-standardizer\u002Ftemplates\u002Fci-go.yml",{"path":89,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":90,"sourceHtmlUrl":91},"templates\u002Fci-node.yml",746,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Frepo-standardizer\u002Ftemplates\u002Fci-node.yml",{"path":93,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":94,"sourceHtmlUrl":95},"templates\u002Fci-python.yml",414,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Frepo-standardizer\u002Ftemplates\u002Fci-python.yml",{"path":97,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":98,"sourceHtmlUrl":99},"templates\u002Fci-rust.yml",297,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Frepo-standardizer\u002Ftemplates\u002Fci-rust.yml",{"path":101,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":102,"sourceHtmlUrl":103},"templates\u002FCLAUDE.md",1321,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Frepo-standardizer\u002Ftemplates\u002FCLAUDE.md",{"path":105,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":106,"sourceHtmlUrl":107},"templates\u002FCODE_OF_CONDUCT.md",428,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Frepo-standardizer\u002Ftemplates\u002FCODE_OF_CONDUCT.md",{"path":109,"resourceType":110,"resourceTypeDesc":111,"sizeBytes":112,"sourceHtmlUrl":113},"templates\u002FCODEOWNERS","OTHER","其他",96,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Frepo-standardizer\u002Ftemplates\u002FCODEOWNERS",{"path":115,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":116,"sourceHtmlUrl":117},"templates\u002Fconfig.yml",291,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Frepo-standardizer\u002Ftemplates\u002Fconfig.yml",{"path":119,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":120,"sourceHtmlUrl":121},"templates\u002FCONTRIBUTING.md",1486,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Frepo-standardizer\u002Ftemplates\u002FCONTRIBUTING.md",{"path":123,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":124,"sourceHtmlUrl":125},"templates\u002Fissue-form-bug.yml",1438,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Frepo-standardizer\u002Ftemplates\u002Fissue-form-bug.yml",{"path":127,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":128,"sourceHtmlUrl":129},"templates\u002Fissue-form-feature.yml",1153,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Frepo-standardizer\u002Ftemplates\u002Fissue-form-feature.yml",{"path":131,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":132,"sourceHtmlUrl":133},"templates\u002Fissue-form-question.yml",570,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Frepo-standardizer\u002Ftemplates\u002Fissue-form-question.yml",{"path":135,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":136,"sourceHtmlUrl":137},"templates\u002Flabels.json",1865,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Frepo-standardizer\u002Ftemplates\u002Flabels.json",{"path":139,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":140,"sourceHtmlUrl":141},"templates\u002FLABELS.md",1604,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Frepo-standardizer\u002Ftemplates\u002FLABELS.md",{"path":143,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":144,"sourceHtmlUrl":145},"templates\u002FPR_TEMPLATE.md",449,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Frepo-standardizer\u002Ftemplates\u002FPR_TEMPLATE.md",{"path":147,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":148,"sourceHtmlUrl":149},"templates\u002FREADME.md",1215,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Frepo-standardizer\u002Ftemplates\u002FREADME.md",{"path":151,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":152,"sourceHtmlUrl":153},"templates\u002FREADME.zh.md",1170,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Frepo-standardizer\u002Ftemplates\u002FREADME.zh.md",{"path":155,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":156,"sourceHtmlUrl":157},"templates\u002FSECURITY.md",726,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Frepo-standardizer\u002Ftemplates\u002FSECURITY.md",{"path":159,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":160,"sourceHtmlUrl":161},"templates\u002FVISION.md",453,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Frepo-standardizer\u002Ftemplates\u002FVISION.md",{"path":163,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":164,"sourceHtmlUrl":165},"tests.md",2214,"https:\u002F\u002Fgithub.com\u002FVortex375\u002Fseraph\u002Fblob\u002Fmain\u002Fapp\u002Fseraph_app\u002F.agents\u002Fskills\u002Ftdd\u002Ftests.md",[167,189,214,239,255,274],{"skillNo":168,"name":169,"nameZh":6,"description":170,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":171,"categories":172,"keywords":183,"publishedAt":38},"01M6BYS1QVW7F887EXS5RR34TA","writing-for-agents","Writing documents for agents. Use when creating or editing skills, or modifying AGENTS.md or CLAUDE.md.","https:\u002F\u002Fgithub.com\u002FVortex375\u002Fseraph\u002Fblob\u002Fmain\u002Fapp\u002Fseraph_app\u002F.agents\u002Fskills\u002Fwriting-for-agents\u002FSKILL.md",[173,178],{"categoryNo":174,"categoryName":175,"taxonomyType":176,"taxonomyTypeDesc":177},"01JBSEEDCAT000000000000018","写作与文案","SCENARIO","使用场景",{"categoryNo":179,"categoryName":180,"taxonomyType":181,"taxonomyTypeDesc":182},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[184,185,186,20,30,187,188],"writing","for","writing for agents","editing","documents",{"skillNo":190,"name":191,"nameZh":6,"description":192,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":193,"categories":194,"keywords":195,"publishedAt":38},"01M6BYRZNREK0C7V6Y43AKDJWW","wizard","Generate an interactive bash wizard that walks a human through steps only they can perform. Use when provisioning infrastructure, setting up credentials or CI secrets, walking an unfamiliar third-party dashboard, or running a one-off migration or cutover. Don't invoke this for steps the agent can perform itself.","https:\u002F\u002Fgithub.com\u002FVortex375\u002Fseraph\u002Fblob\u002Fmain\u002Fapp\u002Fseraph_app\u002F.agents\u002Fskills\u002Fwizard\u002FSKILL.md",[],[191,196,197,198,199,200,201,202,20,203,204,185,205,206,207,208,209,210,30,211,212,213],"provisioning","ci","generate","infrastructure","dashboard","can","running","invoke","party","credentials","human","provisioning infrastructure","migration","up","only","interactive","Bash","secrets",{"skillNo":215,"name":216,"nameZh":6,"description":217,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":218,"categories":219,"keywords":220,"publishedAt":38},"01M6BYRY92S448X31PTG25TCJC","wayfinder","Plan a huge chunk of work (more than one agent session can hold) as a shared map of decision tickets on your issue tracker, and resolve them one at a time until the way to the destination is clear.","https:\u002F\u002Fgithub.com\u002FVortex375\u002Fseraph\u002Fblob\u002Fmain\u002Fapp\u002Fseraph_app\u002F.agents\u002Fskills\u002Fwayfinder\u002FSKILL.md",[],[216,221,222,223,201,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238],"at","map","agent session","time","true","shared","more","tickets","as","clear","issue","session","one at a time","work","decision","plan","chunk","tracker",{"skillNo":240,"name":241,"nameZh":6,"description":242,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":243,"categories":244,"keywords":245,"publishedAt":38},"01M6BYRWXMYWB6PD7E9PAD44M4","wait-what","Stop. That last message did not land: re-pitch it.","https:\u002F\u002Fgithub.com\u002FVortex375\u002Fseraph\u002Fblob\u002Fmain\u002Fapp\u002Fseraph_app\u002F.agents\u002Fskills\u002Fwait-what\u002FSKILL.md",[],[246,247,248,225,249,250,251,252,253,254],"wait what","wait","re","last","it","pitch","message","stop","land",{"skillNo":256,"name":257,"nameZh":6,"description":258,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":259,"categories":260,"keywords":261,"publishedAt":38},"01M6BYRTS6JNDYB7BZVAWK7JJ9","triage","Move issues and external PRs through a state machine of triage roles, categorise, verify, grill if needed, and write agent-ready briefs.","https:\u002F\u002Fgithub.com\u002FVortex375\u002Fseraph\u002Fblob\u002Fmain\u002Fapp\u002Fseraph_app\u002F.agents\u002Fskills\u002Ftriage\u002FSKILL.md",[],[257,262,263,264,265,266,267,268,269,270,271,272,225,273],"machine","roles","grill","ready","write","verify","issues","state","move","prs","state machine","briefs",{"skillNo":275,"name":276,"nameZh":6,"description":277,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":278,"categories":279,"keywords":280,"publishedAt":38},"01M6BYRRRCDHNXH2YBDTYJPG36","to-tickets","Break a plan, spec, or the current conversation into a set of tracer-bullet tickets, each declaring its blocking edges, published to the configured tracker (edges as text in one file per ticket locally, or native blocking links on a real tracker).","https:\u002F\u002Fgithub.com\u002FVortex375\u002Fseraph\u002Fblob\u002Fmain\u002Fapp\u002Fseraph_app\u002F.agents\u002Fskills\u002Fto-tickets\u002FSKILL.md",[],[281,228,282,283,284,225,285,286,229,287,238,288,236,289,290],"to tickets","spec","links","break","native","ticket","conversation","text","SET","file"]