[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M79SP1J69N1KHE02WS4SRNET":3,"skill-same:01M79SP1J69N1KHE02WS4SRNET":61},{"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":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":26,"commitSha":27,"skillDirectory":28,"forksCount":14,"repositoryHtmlUrl":29,"repositoryHomepageUrl":6,"ownerHtmlUrl":30,"ownerBlogUrl":31,"ownerDescription":32,"updatedAt":33,"install":34,"resources":46},"01M79SP1J69N1KHE02WS4SRNET","repo-audit",null,"Sanity-check a repo against the owner's quality preferences — pre-commit hooks, type checking, linting, test coverage, CLI ergonomics, secrets hygiene, dependency pinning, CLAUDE.md freshness, default-branch protection, auto-merge. Reports what's missing or drifted, doesn't fix it.","dannybrown37\u002Fskill-tree","dannybrown37","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F28059438?v=4","01M79SKVHAKWQH9VF0G6KQRZZ2","Danny Brown","01M79SKVJ1X8VHPTK7MKMHBRD2",0,"MIT","https:\u002F\u002Fgithub.com\u002Fdannybrown37\u002Fskill-tree\u002Fblob\u002Fmain\u002Fskills\u002Frepo-audit\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: repo-audit\ndescription: \"Sanity-check a repo against the owner's quality preferences — pre-commit hooks, type checking, linting, test coverage, CLI ergonomics, secrets hygiene, dependency pinning, CLAUDE.md freshness, default-branch protection, auto-merge. Reports what's missing or drifted, doesn't fix it.\"\nuser-invocable: true\ndisable-model-invocation: true\nallowed-tools: Read, Grep, Glob, Bash\n---\n\n# Repo Audit\n\nRead-only. Report findings, don't apply fixes — the user picks what to act on.\n\nRun from the repo root. Every check either passes, fails, or is not applicable (the repo\ndoesn't use that thing). Report all three columns.\n\n## Run the checker first\n\n`repo-audit audit \u003Crepo-root>` answers the mechanical half of this list from the working\ntree, so the reading below is spent on what actually failed rather than on re-deriving\nverdicts a script can compute:\n\n```bash\nskill-tree repo-audit            # audits the current directory\nskill-tree repo-audit .          # the repo root; `audit` is implied\nskill-tree repo-audit . --run    # also runs the test suite (slower)\nskill-tree repo-audit . --json   # same verdicts, machine-readable\n```\n\n**Claude:** delegate this run to the `checker-summarizer` subagent, passing it the\ncommand above. **No subagent delegation available:** run it yourself and read the output\ndirectly.\n\nExit `0` = nothing failed, `1` = at least one FAIL, `2` = nothing there to audit. Each\nsection comes back `PASS`, `FAIL`, `NA` (the repo doesn't use that thing), or **`MANUAL`**.\n\nSections 1, 2, 3, 6, 7, 8, and 9 are computed from the working tree; 12 and 13 query GitHub via\n`gh` (read-only). Sections 4 and 11 need `--run` to execute the suite \u002F zizmor; without it,\nsection 4 still reports modules with no test file, and section 11 reports whether zizmor is\nwired in at all. Where a section reports\n`PASS`, it has proven the config exists, not that the tool passes — the `PASS` detail names\nthe command to confirm with.\n\n**Section 5 is always `MANUAL`:** the checker lists entrypoints but never runs them (probing\n`--version` once created a skill directory named `--version`). Work it by hand.\n\n`MANUAL` also covers \"tool not installed\" and \"suite timed out\" — not evidence of breakage.\n\n## Checks\n\nWork them in order. Each section says what to look for and how to verify it.\n\n### 1. Pre-commit hooks\n\nThe repo should have a `.pre-commit-config.yaml`. If it does:\n\n- Run `prek run --all-files` (or `pre-commit run --all-files`) and report failures.\n- Check that the hook list includes at minimum: a linter, a formatter, a secret scanner\n  (gitleaks or equivalent), and end-of-file-fixer.\n- If the repo has Python: ruff-check, ruff-format, mypy, and pytest hooks should be present.\n- If the repo has shell scripts: shellcheck and shfmt hooks should be present.\n- If the repo uses commitizen: both the early hook and the commit-msg hook should be present.\n\nIf no `.pre-commit-config.yaml` exists, flag it and skip to the next section.\n\n### 2. Type checking\n\n- **Python:** mypy config (`mypy.ini`, `[tool.mypy]`, or `setup.cfg`) at the root or in each\n  subproject's own dir. Run `uv run --with mypy mypy` (bare, no targets) and report errors.\n- **TypeScript:** `tsconfig.json` reaches `strict: true`, directly or via `extends`. Run `npx tsc --noEmit`.\n- **Neither:** skip.\n\n### 3. Linting and formatting\n\n- **Python:** `.ruff.toml` or `[tool.ruff]` in `pyproject.toml`. Run\n  `uv run --with ruff ruff check .` and `uv run --with ruff ruff format --check .`.\n- **Node\u002FTS:** biome config must exist. Run `npx biome .`.\n  - eslint + prettier are okay in Legacy apps but should be upgraded if reasonable.\n- **Shell:** shellcheck and shfmt should be in pre-commit (checked above). Also spot-check:\n  `find . -name '*.sh' -not -path '.\u002F.git\u002F*' | head -5 | xargs shellcheck` to confirm\n  scripts pass standalone.\n\n### 4. Tests exist and pass\n\n- Identify the test runner (`pytest`, `jest`, `vitest`, `go test`, etc.).\n- Run the suite. Report pass\u002Ffail count and coverage if a coverage config exists.\n- Flag any source file with logic (not config, `__init__.py`, `.d.ts`, or gitignored generated\n  output) that has zero corresponding test file. `templates\u002F` and `fixtures\u002F` don't count.\n\n### 5. CLI ergonomics\n\nFor every CLI entrypoint the repo exposes (check `pyproject.toml [project.scripts]`,\n`package.json bin`, `justfile`\u002F`Makefile` targets that look like commands, or `scripts\u002F` executables):\n\n- `--version` must exist, print a version, and exit 0 with no config\u002Fauth required.\n- Running with no arguments must print help, not crash.\n- If the CLI prompts interactively, confirm it fails cleanly when stdin is not a TTY\n  (`\u003C \u002Fdev\u002Fnull`).\n\n### 6. Secrets hygiene\n\n- `.gitignore` must exclude `.env`, `*.pem`, `credentials*`, and common secret file patterns.\n- `gitleaks` (or equivalent) must be in pre-commit hooks.\n- Grep for hardcoded strings that look like secrets:\n  `grep -rn --include='*.py' --include='*.ts' --include='*.js' --include='*.sh' -E '(password|secret|token|api_key)\\s*=' . | grep -v test | grep -v __pycache__`\n  and flag any that aren't reading from env vars or a secrets manager.\n\n### 7. Dependency pinning\n\n- **Python (uv\u002Fpip):** `uv.lock` or pinned versions in `pyproject.toml`. Unpinned `>=`\n  without an upper bound is a flag.\n- **Node:** `package-lock.json` or equivalent lockfile must exist and be committed.\n- **Both:** check for dependencies added but not in the lockfile (lockfile drift).\n\n### 8. CLAUDE.md \u002F project config freshness\n\n- If a `CLAUDE.md` or `.claude\u002FCLAUDE.md` exists, grep it for file paths, function names,\n  framework names, and dependency names. Verify each reference still exists in the repo.\n- If the repo has a `SKILL.md` anywhere, run the same staleness check: paths and names it\n  references must still exist.\n- Flag any mention of a tool, framework, or file that's been removed or renamed.\n\n### 9. README quality\n\nThe README is the front door. It must be written for humans — not frameworks, not LLMs, not\nfuture-you-who-already-knows-everything.\n\n- `README.md` must exist and not be a framework-generated placeholder (check for default\n  strings like \"Getting Started with Create React App\" or \"This project was bootstrapped\").\n- **Inverted pyramid:** the most important information comes first. The first paragraph\n  should answer \"what is this and why would I care\" in 1–3 sentences. Install and usage\n  come next. Architecture, contributing, and deep details come last. If a reader stops\n  after the first screen, they should still know what the project does.\n- **Tracks reality:** compare the README's feature claims, CLI examples, API surface, and\n  install steps against what the repo actually exposes. Run every example command it shows\n  and confirm it works. Flag anything the README promises that the code doesn't deliver,\n  and anything the code delivers that the README doesn't mention.\n- **Concise but thorough:** no walls of text, no five-paragraph essays explaining what a\n  dependency is. Bullet points and short paragraphs. But don't skip things — every public\n  entrypoint, every required env var, every non-obvious setup step should appear somewhere.\n- If there's a `CHANGELOG.md`, its latest entry should reference the most recent tag\n  (`git describe --tags --abbrev=0`).\n\n### 10. Git hygiene\n\n- No large binary files tracked (check `git ls-files` for common binary extensions:\n  `.zip`, `.tar.gz`, `.jar`, `.exe`, `.dll`, `.so`, `.dylib`, images over 1MB).\n- `.gitignore` exists and covers the stack's build artifacts (`__pycache__`, `node_modules`,\n  `dist\u002F`, `.next\u002F`, `target\u002F`, etc.).\n- No merge conflict markers in tracked files:\n  `grep -rn '\u003C\u003C\u003C\u003C\u003C\u003C\u003C ' $(git ls-files) 2>\u002Fdev\u002Fnull`.\n\n### 11. GitHub Actions static analysis (zizmor)\n\nOnly applicable if the repo has `.github\u002Fworkflows\u002F*.yml`. If it doesn't, this is `n\u002Fa`.\n\n- [zizmor](https:\u002F\u002Fgithub.com\u002Fwoodruffw\u002Fzizmor) should be wired in somewhere -- a\n  `zizmor` pre-commit hook, or a CI step that runs it (`uvx zizmor .`). If neither exists,\n  flag it: workflow injection, missing permissions pins, and unpinned third-party actions\n  go unreviewed.\n- Every `uses:` ref must resolve: `.\u002F\u003Cpath>` to a file in the repo, else `owner\u002Frepo@ref`.\n  zizmor offline passed `uses: $\u002F.github\u002Fworkflows\u002Fx.yml`; the checker catches it.\n- Run `uvx zizmor .` (or `--run` on the checker below) and report findings — untrusted\n  input flowing into `run:` blocks, overly broad `permissions:`, actions pinned to a\n  mutable tag instead of a commit SHA.\n\n### 12–13. Branch protected by CI; auto-merge + branch cleanup on\n\nGitHub `origin` only; details and fix commands come from the checker. Changing repo settings is\noutward-facing — report it, don't apply it unasked.\n\n## Report format\n\nGroup findings by section number. For each finding:\n\n- **Status:** pass \u002F fail \u002F n\u002Fa\n- **Detail:** what's wrong (one line)\n- **Fix hint:** what to do about it (one line)\n\nEnd with a summary line: X passed, Y failed, Z not applicable.\n","# Repo Audit\n\nRead-only. Report findings, don't apply fixes — the user picks what to act on.\n\nRun from the repo root. Every check either passes, fails, or is not applicable (the repo\ndoesn't use that thing). Report all three columns.\n\n## Run the checker first\n\n`repo-audit audit \u003Crepo-root>` answers the mechanical half of this list from the working\ntree, so the reading below is spent on what actually failed rather than on re-deriving\nverdicts a script can compute:\n\n```bash\nskill-tree repo-audit            # audits the current directory\nskill-tree repo-audit .          # the repo root; `audit` is implied\nskill-tree repo-audit . --run    # also runs the test suite (slower)\nskill-tree repo-audit . --json   # same verdicts, machine-readable\n```\n\n**Claude:** delegate this run to the `checker-summarizer` subagent, passing it the\ncommand above. **No subagent delegation available:** run it yourself and read the output\ndirectly.\n\nExit `0` = nothing failed, `1` = at least one FAIL, `2` = nothing there to audit. Each\nsection comes back `PASS`, `FAIL`, `NA` (the repo doesn't use that thing), or **`MANUAL`**.\n\nSections 1, 2, 3, 6, 7, 8, and 9 are computed from the working tree; 12 and 13 query GitHub via\n`gh` (read-only). Sections 4 and 11 need `--run` to execute the suite \u002F zizmor; without it,\nsection 4 still reports modules with no test file, and section 11 reports whether zizmor is\nwired in at all. Where a section reports\n`PASS`, it has proven the config exists, not that the tool passes — the `PASS` detail names\nthe command to confirm with.\n\n**Section 5 is always `MANUAL`:** the checker lists entrypoints but never runs them (probing\n`--version` once created a skill directory named `--version`). Work it by hand.\n\n`MANUAL` also covers \"tool not installed\" and \"suite timed out\" — not evidence of breakage.\n\n## Checks\n\nWork them in order. Each section says what to look for and how to verify it.\n\n### 1. Pre-commit hooks\n\nThe repo should have a `.pre-commit-config.yaml`. If it does:\n\n- Run `prek run --all-files` (or `pre-commit run --all-files`) and report failures.\n- Check that the hook list includes at minimum: a linter, a formatter, a secret scanner\n  (gitleaks or equivalent), and end-of-file-fixer.\n- If the repo has Python: ruff-check, ruff-format, mypy, and pytest hooks should be present.\n- If the repo has shell scripts: shellcheck and shfmt hooks should be present.\n- If the repo uses commitizen: both the early hook and the commit-msg hook should be present.\n\nIf no `.pre-commit-config.yaml` exists, flag it and skip to the next section.\n\n### 2. Type checking\n\n- **Python:** mypy config (`mypy.ini`, `[tool.mypy]`, or `setup.cfg`) at the root or in each\n  subproject's own dir. Run `uv run --with mypy mypy` (bare, no targets) and report errors.\n- **TypeScript:** `tsconfig.json` reaches `strict: true`, directly or via `extends`. Run `npx tsc --noEmit`.\n- **Neither:** skip.\n\n### 3. Linting and formatting\n\n- **Python:** `.ruff.toml` or `[tool.ruff]` in `pyproject.toml`. Run\n  `uv run --with ruff ruff check .` and `uv run --with ruff ruff format --check .`.\n- **Node\u002FTS:** biome config must exist. Run `npx biome .`.\n  - eslint + prettier are okay in Legacy apps but should be upgraded if reasonable.\n- **Shell:** shellcheck and shfmt should be in pre-commit (checked above). Also spot-check:\n  `find . -name '*.sh' -not -path '.\u002F.git\u002F*' | head -5 | xargs shellcheck` to confirm\n  scripts pass standalone.\n\n### 4. Tests exist and pass\n\n- Identify the test runner (`pytest`, `jest`, `vitest`, `go test`, etc.).\n- Run the suite. Report pass\u002Ffail count and coverage if a coverage config exists.\n- Flag any source file with logic (not config, `__init__.py`, `.d.ts`, or gitignored generated\n  output) that has zero corresponding test file. `templates\u002F` and `fixtures\u002F` don't count.\n\n### 5. CLI ergonomics\n\nFor every CLI entrypoint the repo exposes (check `pyproject.toml [project.scripts]`,\n`package.json bin`, `justfile`\u002F`Makefile` targets that look like commands, or `scripts\u002F` executables):\n\n- `--version` must exist, print a version, and exit 0 with no config\u002Fauth required.\n- Running with no arguments must print help, not crash.\n- If the CLI prompts interactively, confirm it fails cleanly when stdin is not a TTY\n  (`\u003C \u002Fdev\u002Fnull`).\n\n### 6. Secrets hygiene\n\n- `.gitignore` must exclude `.env`, `*.pem`, `credentials*`, and common secret file patterns.\n- `gitleaks` (or equivalent) must be in pre-commit hooks.\n- Grep for hardcoded strings that look like secrets:\n  `grep -rn --include='*.py' --include='*.ts' --include='*.js' --include='*.sh' -E '(password|secret|token|api_key)\\s*=' . | grep -v test | grep -v __pycache__`\n  and flag any that aren't reading from env vars or a secrets manager.\n\n### 7. Dependency pinning\n\n- **Python (uv\u002Fpip):** `uv.lock` or pinned versions in `pyproject.toml`. Unpinned `>=`\n  without an upper bound is a flag.\n- **Node:** `package-lock.json` or equivalent lockfile must exist and be committed.\n- **Both:** check for dependencies added but not in the lockfile (lockfile drift).\n\n### 8. CLAUDE.md \u002F project config freshness\n\n- If a `CLAUDE.md` or `.claude\u002FCLAUDE.md` exists, grep it for file paths, function names,\n  framework names, and dependency names. Verify each reference still exists in the repo.\n- If the repo has a `SKILL.md` anywhere, run the same staleness check: paths and names it\n  references must still exist.\n- Flag any mention of a tool, framework, or file that's been removed or renamed.\n\n### 9. README quality\n\nThe README is the front door. It must be written for humans — not frameworks, not LLMs, not\nfuture-you-who-already-knows-everything.\n\n- `README.md` must exist and not be a framework-generated placeholder (check for default\n  strings like \"Getting Started with Create React App\" or \"This project was bootstrapped\").\n- **Inverted pyramid:** the most important information comes first. The first paragraph\n  should answer \"what is this and why would I care\" in 1–3 sentences. Install and usage\n  come next. Architecture, contributing, and deep details come last. If a reader stops\n  after the first screen, they should still know what the project does.\n- **Tracks reality:** compare the README's feature claims, CLI examples, API surface, and\n  install steps against what the repo actually exposes. Run every example command it shows\n  and confirm it works. Flag anything the README promises that the code doesn't deliver,\n  and anything the code delivers that the README doesn't mention.\n- **Concise but thorough:** no walls of text, no five-paragraph essays explaining what a\n  dependency is. Bullet points and short paragraphs. But don't skip things — every public\n  entrypoint, every required env var, every non-obvious setup step should appear somewhere.\n- If there's a `CHANGELOG.md`, its latest entry should reference the most recent tag\n  (`git describe --tags --abbrev=0`).\n\n### 10. Git hygiene\n\n- No large binary files tracked (check `git ls-files` for common binary extensions:\n  `.zip`, `.tar.gz`, `.jar`, `.exe`, `.dll`, `.so`, `.dylib`, images over 1MB).\n- `.gitignore` exists and covers the stack's build artifacts (`__pycache__`, `node_modules`,\n  `dist\u002F`, `.next\u002F`, `target\u002F`, etc.).\n- No merge conflict markers in tracked files:\n  `grep -rn '\u003C\u003C\u003C\u003C\u003C\u003C\u003C ' $(git ls-files) 2>\u002Fdev\u002Fnull`.\n\n### 11. GitHub Actions static analysis (zizmor)\n\nOnly applicable if the repo has `.github\u002Fworkflows\u002F*.yml`. If it doesn't, this is `n\u002Fa`.\n\n- [zizmor](https:\u002F\u002Fgithub.com\u002Fwoodruffw\u002Fzizmor) should be wired in somewhere -- a\n  `zizmor` pre-commit hook, or a CI step that runs it (`uvx zizmor .`). If neither exists,\n  flag it: workflow injection, missing permissions pins, and unpinned third-party actions\n  go unreviewed.\n- Every `uses:` ref must resolve: `.\u002F\u003Cpath>` to a file in the repo, else `owner\u002Frepo@ref`.\n  zizmor offline passed `uses: $\u002F.github\u002Fworkflows\u002Fx.yml`; the checker catches it.\n- Run `uvx zizmor .` (or `--run` on the checker below) and report findings — untrusted\n  input flowing into `run:` blocks, overly broad `permissions:`, actions pinned to a\n  mutable tag instead of a commit SHA.\n\n### 12–13. Branch protected by CI; auto-merge + branch cleanup on\n\nGitHub `origin` only; details and fix commands come from the checker. Changing repo settings is\noutward-facing — report it, don't apply it unasked.\n\n## Report format\n\nGroup findings by section number. For each finding:\n\n- **Status:** pass \u002F fail \u002F n\u002Fa\n- **Detail:** what's wrong (one line)\n- **Fix hint:** what to do about it (one line)\n\nEnd with a summary line: X passed, Y failed, Z not applicable.\n",{"name":5,"description":7,"allowed-tools":24,"user-invocable":25,"disable-model-invocation":25},"Read, Grep, Glob, Bash",true,"main","aec70683dacdf9512d27e04a1e04069bbd199b5e","skills\u002Frepo-audit","https:\u002F\u002Fgithub.com\u002Fdannybrown37\u002Fskill-tree","https:\u002F\u002Fgithub.com\u002Fdannybrown37","dannybrown.dev","Software Engineer","2026-11-12 15:25:14",{"source":8,"skillName":5,"commands":35,"prompt":45,"zipAvailable":25},[36,39,42],{"tool":37,"command":38},"npx","npx skills add dannybrown37\u002Fskill-tree --skill repo-audit",{"tool":40,"command":41},"bunx","bunx skills add dannybrown37\u002Fskill-tree --skill repo-audit",{"tool":43,"command":44},"pnpm","pnpm dlx skills add dannybrown37\u002Fskill-tree --skill repo-audit","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fdannybrown37\u002Fskill-tree\u002Fblob\u002Fmain\u002Fskills\u002Frepo-audit\u002FSKILL.md",[47,53,57],{"path":48,"resourceType":49,"resourceTypeDesc":50,"sizeBytes":51,"sourceHtmlUrl":52},"scripts\u002Frepo_audit_cli.py","SCRIPT","脚本",47303,"https:\u002F\u002Fgithub.com\u002Fdannybrown37\u002Fskill-tree\u002Fblob\u002Fmain\u002Fskills\u002Frepo-audit\u002Fscripts\u002Frepo_audit_cli.py",{"path":54,"resourceType":49,"resourceTypeDesc":50,"sizeBytes":55,"sourceHtmlUrl":56},"scripts\u002Frepo-audit",486,"https:\u002F\u002Fgithub.com\u002Fdannybrown37\u002Fskill-tree\u002Fblob\u002Fmain\u002Fskills\u002Frepo-audit\u002Fscripts\u002Frepo-audit",{"path":58,"resourceType":49,"resourceTypeDesc":50,"sizeBytes":59,"sourceHtmlUrl":60},"scripts\u002Ftest_repo_audit.py",42090,"https:\u002F\u002Fgithub.com\u002Fdannybrown37\u002Fskill-tree\u002Fblob\u002Fmain\u002Fskills\u002Frepo-audit\u002Fscripts\u002Ftest_repo_audit.py",[62,69,76,83,90,97],{"skillNo":63,"name":64,"nameZh":6,"description":65,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":66,"categories":67,"keywords":68,"publishedAt":19},"01M79SQ7Z4DXMYJECV1NTEP9WY","wait-what","Stop. Your plan\u002Fidea did not land. Re-pitch it.","https:\u002F\u002Fgithub.com\u002Fdannybrown37\u002Fskill-tree\u002Fblob\u002Fmain\u002Fskills\u002Fwait-what\u002FSKILL.md",[],[],{"skillNo":70,"name":71,"nameZh":6,"description":72,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":75,"publishedAt":19},"01M79SQ4WQB5YZ7Q2A87JVR219","verify","Verify before answering whether something works, still passes, is gone, is used, or is correct — and whenever the user says \"can you confirm\", \"are you sure\", \"did that actually work\", or reports something is \"still\" broken. Produces the answer plus the evidence that would have falsified it. A failed GitHub Actions run is skill-tree:debug-ci instead.","https:\u002F\u002Fgithub.com\u002Fdannybrown37\u002Fskill-tree\u002Fblob\u002Fmain\u002Fskills\u002Fverify\u002FSKILL.md",[],[],{"skillNo":77,"name":78,"nameZh":6,"description":79,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":80,"categories":81,"keywords":82,"publishedAt":19},"01M79SQ0GKSM5891DKPXE8J7TZ","ui-designer","Design or restyle a web UI — landing pages, dashboards, docs sites, app chrome — or when the user asks why a site \"looks generic\", \"looks like a template\", or wants it to feel intentional. A running list of design lessons learned, applied as rules rather than suggestions.","https:\u002F\u002Fgithub.com\u002Fdannybrown37\u002Fskill-tree\u002Fblob\u002Fmain\u002Fskills\u002Fui-designer\u002FSKILL.md",[],[],{"skillNo":84,"name":85,"nameZh":6,"description":86,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":89,"publishedAt":19},"01M79SPVN5C0XYAXWBH9HD1YF1","two-axis-review","Two-axis review of changes since a fixed point (commit, tag, HEAD~N, or default HEAD~1): Standards (does the code follow this repo's conventions?) and Spec (does the code do what it should?). Axes run as parallel sub-agents so neither masks the other. Use when the user says \"review against the spec\", \"does this follow our conventions\", \"standards and spec review\", or \"two-axis review\". Not a correctness bug hunt — that's the built-in `\u002Fcode-review`.","https:\u002F\u002Fgithub.com\u002Fdannybrown37\u002Fskill-tree\u002Fblob\u002Fmain\u002Fskills\u002Ftwo-axis-review\u002FSKILL.md",[],[],{"skillNo":91,"name":92,"nameZh":6,"description":93,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":96,"publishedAt":19},"01M79SPRT8GV1RPQ2VVR9K08BB","tui-screenshots","Use for generating or refreshing TUI screenshots for docs — \"regenerate the screenshots\", \"the README screenshots are stale\". Drives a Textual\u002FTUI app headlessly and exports SVG. Not for reading a user's screenshot — that is `screenshot`.","https:\u002F\u002Fgithub.com\u002Fdannybrown37\u002Fskill-tree\u002Fblob\u002Fmain\u002Fskills\u002Ftui-screenshots\u002FSKILL.md",[],[],{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":103,"publishedAt":19},"01M79SPNVJQ0WNWH7PBEM5Y463","to-tickets","Break a spec, plan, or conversation into tracer-bullet vertical-slice tickets with blocking edges — \"turn this into tickets\", \"break this down\", \"what's the work?\". Pairs with skill-tree:to-spec upstream and skill-tree:handoff downstream.","https:\u002F\u002Fgithub.com\u002Fdannybrown37\u002Fskill-tree\u002Fblob\u002Fmain\u002Fskills\u002Fto-tickets\u002FSKILL.md",[],[]]