[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M698Z74AMD0234MTMAS8RQ76":3,"skill-same:01M698Z74AMD0234MTMAS8RQ76":105},{"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":23,"publishedAt":36,"linkOnly":37,"markdownContent":38,"markdownBody":39,"frontMatter":40,"refName":41,"commitSha":42,"skillDirectory":43,"forksCount":44,"repositoryHtmlUrl":45,"repositoryHomepageUrl":46,"ownerHtmlUrl":47,"ownerBlogUrl":48,"ownerDescription":49,"updatedAt":50,"install":51,"resources":64},"01M698Z74AMD0234MTMAS8RQ76","skia-gn-workflow",null,"MANDATORY: Use this skill for ANY and ALL tasks involving building Skia with GN, Ninja, or compiling any Skia tool. It is the authoritative source for Skia's build workflows and MUST be used whenever compilation is required.","google\u002Fskia","google","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1342004?v=4","01M698VYEFDM0VJBZDYYJ2T83S","Google","01M698Z251PDBWCXQ35SASSY22",11024,"BSD-3-Clause","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskia\u002Fblob\u002Fmain\u002F_agents\u002Fskills\u002Fskia-gn-workflow\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35],"skia gn workflow","workflow","workflows","tasks","compiling","tool","use","build","it","with","for","source","2026-11-10 10:12:30",false,"---\nname: skia-gn-workflow\ndescription: >-\n  MANDATORY: Use this skill for ANY and ALL tasks involving building Skia with\n  GN, Ninja, or compiling any Skia tool. It is the authoritative source for\n  Skia's build workflows and MUST be used whenever compilation is required.\n---\n\n# skia-gn-workflow\n\nThis skill provides expert guidance for building and testing Skia using the GN build system and Ninja. It covers common workflows for correctness testing (`dm`), performance benchmarking (`nanobench`), and interactive visualization (`viewer`).\n\n## Core Principles\n- **Hermeticity**: Always use `.\u002Fbin\u002Fgn` for configuration and `.\u002Fbin\u002Ffetch-ninja` to ensure the correct version of Ninja is available.\n- **Verification**: Always build and run tests\u002Fbenchmarks before documenting or finalizing changes.\n- **Filtering**: Use the `--match` flag (aliased as `-m`) to target specific tests and reduce execution time.\n- **Build Directories**: **NEVER** override a user's existing build directory settings (e.g. `out\u002FDebug`). If you need a different configuration, create a new directory (e.g. `out\u002FDebug2`, `out\u002FASAN`). Only modify settings in an existing directory if explicitly asked by the user.\n- **Toolchain Paths**: When a build requires specific toolchain paths (e.g. `cc`, `cxx`, or `clang_win` for Clang\u002FLLVM), **ALWAYS ask the user** where these are extracted on their machine. Different developers have these in different locations.\n\n## Setup & Troubleshooting\n\n### 1. Syncing Dependencies\nIf you encounter compilation errors in `third_party` or missing headers, run:\n```bash\npython3 tools\u002Fgit-sync-deps\n```\n\n### 2. Fetching Ninja\nIf the `ninja` command is not found or you want to ensure a hermetic version:\n```bash\n.\u002Fbin\u002Ffetch-ninja\n```\n\n### 3. Formatting Code\nNear the end of your workflow, before uploading a CL or finalizing changes, format your code using:\n```bash\ngit clang-format origin\u002Fmain\n```\n\n### 4. Cleaning Builds\nIf the build system gets into a broken state, clean the directory:\n```bash\n.\u002Fbin\u002Fgn -q clean out\u002FDir\n```\n\n### 5. Inspecting the Build\nTo understand how a target is being built or to find available targets:\n- **List all targets**: `.\u002Fbin\u002Fgn ls out\u002FDir` or `ninja -C out\u002FDir -t targets`\n- **Inspect a target**: `.\u002Fbin\u002Fgn desc out\u002FDir \u002F\u002F:dm` (shows flags, defines, sources, etc.)\n- **Check why a file is included**: `.\u002Fbin\u002Fgn path out\u002FDir \u002F\u002F:dm \u002F\u002Fsrc\u002Fcore\u002FSkPath.cpp`\n\n### 6. Rust Dependencies (Bazel)\nIf a build requires Rust dependencies (in `third_party`), use `bazelisk` to manage the toolchain:\n- Download: https:\u002F\u002Fgithub.com\u002Fbazelbuild\u002Fbazelisk\u002Freleases\n\n## Build Workflows\n\n### 1. Common Build Arguments\n- `is_debug=false`: Create an optimized Release build.\n- `is_official_build=true`: Optimized build, links against system libraries. Suitable for shipping.\n- `is_component_build=true`: Build Skia as a shared library.\n- `sanitize=\"ASAN\"|\"MSAN\"|\"TSAN\"|\"UBSAN\"`: Enable memory, address, thread, or undefined behavior sanitizers.\n- `extra_cflags=[\"...\"]`, `extra_ldflags=[\"...\"]`: Add custom compiler\u002Flinker flags.\n- `cc=\"clang\" cxx=\"clang++\"`: Specify the compiler (highly recommended for performance).\n\n### 2. Sanitizer Builds (`xsan`)\n- **ASAN**: `.\u002Fbin\u002Fgn gen -q out\u002FASAN --args='sanitize=\"ASAN\" cc=\"\u003Cpath_to_clang>\" cxx=\"\u003Cpath_to_clang++>\"'`\n- **MSAN**: `.\u002Fbin\u002Fgn gen -q out\u002FMSAN --args='sanitize=\"MSAN\" cc=\"\u003Cpath_to_clang>\" cxx=\"\u003Cpath_to_clang++>\" skia_use_fontconfig=false'`\n  - *Note*: Run `dm` with `--nogpu` under MSAN to avoid driver noise.\n- **TSAN**: `.\u002Fbin\u002Fgn gen -q out\u002FTSAN --args='sanitize=\"TSAN\" is_debug=false cc=\"\u003Cpath_to_clang>\" cxx=\"\u003Cpath_to_clang++>\"'`\n\n### 3. Platform Specifics\n- **Android**: `.\u002Fbin\u002Fgn gen -q out\u002Fandroid --args='ndk=\"~\u002Fndk\" target_cpu=\"arm64\"'`\n- **iOS**: `.\u002Fbin\u002Fgn gen -q out\u002Fios --args='target_os=\"ios\" target_cpu=\"arm64\"'`\n- **Windows**: Use `clang_win=\"\u003Cpath_to_llvm>\"` to build with clang-cl (highly recommended).\n\n### 4. Other Build Notes\n- Unless otherwise instructed, build with: `ninja --quiet -C {OUT_DIR} {TARGET}`. If given an `ninja` command that is missing `--quiet`, you *must* add `--quiet`.\n\n## Tool Reference\n\n### `dm` (Correctness Testing)\n`dm` runs GMs (graphics tests), unit tests, and compares images.\n- **Common Flags**:\n  - `--src \u003Ctypes>`: e.g., `--src tests gm skp image`.\n  - `--config \u003Cconfigs>`: e.g., `--config 8888 gl`.\n  - `--match` \u002F `-m`: Case-sensitive substring filter. Supports `~` (exclude), `^` (start), `$` (end).\n  - `--skip \u003Cconfig> \u003Csrc> \u003CsrcOptions> \u003Cname>`: Skip specific test cases. Use `_` for wildcards.\n  - `--writePath` \u002F `-w`: Write result bitmaps as PNGs.\n  - `--readPath` \u002F `-r`: Read reference bitmaps for comparison.\n  - `--threads` \u002F `-j`: Number of threads (default: one per core).\n  - `--verbose` \u002F `-v`: Detailed output.\n- **Extended Help**: For detailed documentation on specific flags, use `--help \u003Cflag_name>`.\n  - Example: `out\u002FDebug\u002Fdm --help config`.\n\n### `nanobench` (Performance Benchmarking)\n**Always use a Release build for benchmarking.**\n- **Common Flags**:\n  - `--samples \u003CN>`: Number of samples per benchmark (default 10).\n  - `--ms \u003Ctime>`: Run each benchmark for at least `\u003Ctime>` milliseconds.\n  - `--cpuprofile \u003Cfile>`: Write pprof CPU profile (requires `skia_use_pprof=true`).\n  - `--match` \u002F `-m`: Filter benchmarks.\n- **Baseline Preservation**: It is recommended to copy a stable baseline binary to `nanobench_control` (outside the `out\u002F` directory) to compare against a new build.\n\n### `viewer` (Interactive Visualization)\n- **Common Flags**:\n  - `--backend` \u002F `-b`: `sw`, `gl`, `vulkan`, `metal`, `d3d`.\n  - `--slide \u003Cname>`: Jump to a specific GM or SKP.\n  - `--match` \u002F `-m`: Filter slides.\n- **Hotkeys**: `i` (HUD), `z` (zoom), `[`\u002F`]` (navigation).\n\n## Advanced: \"Via\" Configs\n`dm` supports \"via\" configs in the format `[via-]*backend`. These wrap a rendering sink to test additional logic.\n- **Examples**:\n  - `serialize-8888`: Serialize and then deserialize the canvas before drawing.\n  - `srgb-8888`: Run the 8888 sink in the sRGB color space.\n- **Common Vias**:\n  - `serialize`: Serializes\u002FDeserializes drawing.\n  - `pic`: Records to `SkPicture` and plays back.\n  - `rtblend`: Uses a runtime blend mode.\n  - `matrix`: Applies a 2x2 matrix (requires `--matrix \"s0 s1 s2 s3\"`).\n  - `upright`: Applies a matrix and then uprights it.\n- **Color Space Vias**: `srgb`, `linear`, `p3`, `rec2020`, `narrow`.\n\n## Writing Tests\n- **Unit Tests**: Use `DEF_TEST(Name, reporter)` in `tests\u002F`.\n- **GMs**: Use `DEF_GM(return new MyGM;)` in `gm\u002F`.\n\n### 6. Debugging Fuzz Cases & Writing Reproduction Tests\nTo build and run a fuzzer (like Clusterfuzz or oss-fuzz) to reproduce a crash:\n```bash\nninja --quiet -C out\u002FDebug fuzz\nout\u002FDebug\u002Ffuzz --bytes \u003Cpath_to_testcase>\n```\nFor the full workflow (including writing reproduction unit tests), see [Fuzz Debugging](references\u002Ffuzz.md).\n\n## Available Resources\n- [Build Arguments](references\u002Fbuild_args.md)\n- [dm Usage](references\u002Fdm_usage.md)\n- [nanobench Usage](references\u002Fnanobench_usage.md)\n- [viewer Usage](references\u002Fviewer_usage.md)\n- [Testing](references\u002Ftesting.md)\n- [GMs](references\u002Fgms.md)\n- [Fuzz Debugging](references\u002Ffuzz.md)\n- [Other Tools](references\u002Fother_tools.md)\n","# skia-gn-workflow\n\nThis skill provides expert guidance for building and testing Skia using the GN build system and Ninja. It covers common workflows for correctness testing (`dm`), performance benchmarking (`nanobench`), and interactive visualization (`viewer`).\n\n## Core Principles\n- **Hermeticity**: Always use `.\u002Fbin\u002Fgn` for configuration and `.\u002Fbin\u002Ffetch-ninja` to ensure the correct version of Ninja is available.\n- **Verification**: Always build and run tests\u002Fbenchmarks before documenting or finalizing changes.\n- **Filtering**: Use the `--match` flag (aliased as `-m`) to target specific tests and reduce execution time.\n- **Build Directories**: **NEVER** override a user's existing build directory settings (e.g. `out\u002FDebug`). If you need a different configuration, create a new directory (e.g. `out\u002FDebug2`, `out\u002FASAN`). Only modify settings in an existing directory if explicitly asked by the user.\n- **Toolchain Paths**: When a build requires specific toolchain paths (e.g. `cc`, `cxx`, or `clang_win` for Clang\u002FLLVM), **ALWAYS ask the user** where these are extracted on their machine. Different developers have these in different locations.\n\n## Setup & Troubleshooting\n\n### 1. Syncing Dependencies\nIf you encounter compilation errors in `third_party` or missing headers, run:\n```bash\npython3 tools\u002Fgit-sync-deps\n```\n\n### 2. Fetching Ninja\nIf the `ninja` command is not found or you want to ensure a hermetic version:\n```bash\n.\u002Fbin\u002Ffetch-ninja\n```\n\n### 3. Formatting Code\nNear the end of your workflow, before uploading a CL or finalizing changes, format your code using:\n```bash\ngit clang-format origin\u002Fmain\n```\n\n### 4. Cleaning Builds\nIf the build system gets into a broken state, clean the directory:\n```bash\n.\u002Fbin\u002Fgn -q clean out\u002FDir\n```\n\n### 5. Inspecting the Build\nTo understand how a target is being built or to find available targets:\n- **List all targets**: `.\u002Fbin\u002Fgn ls out\u002FDir` or `ninja -C out\u002FDir -t targets`\n- **Inspect a target**: `.\u002Fbin\u002Fgn desc out\u002FDir \u002F\u002F:dm` (shows flags, defines, sources, etc.)\n- **Check why a file is included**: `.\u002Fbin\u002Fgn path out\u002FDir \u002F\u002F:dm \u002F\u002Fsrc\u002Fcore\u002FSkPath.cpp`\n\n### 6. Rust Dependencies (Bazel)\nIf a build requires Rust dependencies (in `third_party`), use `bazelisk` to manage the toolchain:\n- Download: https:\u002F\u002Fgithub.com\u002Fbazelbuild\u002Fbazelisk\u002Freleases\n\n## Build Workflows\n\n### 1. Common Build Arguments\n- `is_debug=false`: Create an optimized Release build.\n- `is_official_build=true`: Optimized build, links against system libraries. Suitable for shipping.\n- `is_component_build=true`: Build Skia as a shared library.\n- `sanitize=\"ASAN\"|\"MSAN\"|\"TSAN\"|\"UBSAN\"`: Enable memory, address, thread, or undefined behavior sanitizers.\n- `extra_cflags=[\"...\"]`, `extra_ldflags=[\"...\"]`: Add custom compiler\u002Flinker flags.\n- `cc=\"clang\" cxx=\"clang++\"`: Specify the compiler (highly recommended for performance).\n\n### 2. Sanitizer Builds (`xsan`)\n- **ASAN**: `.\u002Fbin\u002Fgn gen -q out\u002FASAN --args='sanitize=\"ASAN\" cc=\"\u003Cpath_to_clang>\" cxx=\"\u003Cpath_to_clang++>\"'`\n- **MSAN**: `.\u002Fbin\u002Fgn gen -q out\u002FMSAN --args='sanitize=\"MSAN\" cc=\"\u003Cpath_to_clang>\" cxx=\"\u003Cpath_to_clang++>\" skia_use_fontconfig=false'`\n  - *Note*: Run `dm` with `--nogpu` under MSAN to avoid driver noise.\n- **TSAN**: `.\u002Fbin\u002Fgn gen -q out\u002FTSAN --args='sanitize=\"TSAN\" is_debug=false cc=\"\u003Cpath_to_clang>\" cxx=\"\u003Cpath_to_clang++>\"'`\n\n### 3. Platform Specifics\n- **Android**: `.\u002Fbin\u002Fgn gen -q out\u002Fandroid --args='ndk=\"~\u002Fndk\" target_cpu=\"arm64\"'`\n- **iOS**: `.\u002Fbin\u002Fgn gen -q out\u002Fios --args='target_os=\"ios\" target_cpu=\"arm64\"'`\n- **Windows**: Use `clang_win=\"\u003Cpath_to_llvm>\"` to build with clang-cl (highly recommended).\n\n### 4. Other Build Notes\n- Unless otherwise instructed, build with: `ninja --quiet -C {OUT_DIR} {TARGET}`. If given an `ninja` command that is missing `--quiet`, you *must* add `--quiet`.\n\n## Tool Reference\n\n### `dm` (Correctness Testing)\n`dm` runs GMs (graphics tests), unit tests, and compares images.\n- **Common Flags**:\n  - `--src \u003Ctypes>`: e.g., `--src tests gm skp image`.\n  - `--config \u003Cconfigs>`: e.g., `--config 8888 gl`.\n  - `--match` \u002F `-m`: Case-sensitive substring filter. Supports `~` (exclude), `^` (start), `$` (end).\n  - `--skip \u003Cconfig> \u003Csrc> \u003CsrcOptions> \u003Cname>`: Skip specific test cases. Use `_` for wildcards.\n  - `--writePath` \u002F `-w`: Write result bitmaps as PNGs.\n  - `--readPath` \u002F `-r`: Read reference bitmaps for comparison.\n  - `--threads` \u002F `-j`: Number of threads (default: one per core).\n  - `--verbose` \u002F `-v`: Detailed output.\n- **Extended Help**: For detailed documentation on specific flags, use `--help \u003Cflag_name>`.\n  - Example: `out\u002FDebug\u002Fdm --help config`.\n\n### `nanobench` (Performance Benchmarking)\n**Always use a Release build for benchmarking.**\n- **Common Flags**:\n  - `--samples \u003CN>`: Number of samples per benchmark (default 10).\n  - `--ms \u003Ctime>`: Run each benchmark for at least `\u003Ctime>` milliseconds.\n  - `--cpuprofile \u003Cfile>`: Write pprof CPU profile (requires `skia_use_pprof=true`).\n  - `--match` \u002F `-m`: Filter benchmarks.\n- **Baseline Preservation**: It is recommended to copy a stable baseline binary to `nanobench_control` (outside the `out\u002F` directory) to compare against a new build.\n\n### `viewer` (Interactive Visualization)\n- **Common Flags**:\n  - `--backend` \u002F `-b`: `sw`, `gl`, `vulkan`, `metal`, `d3d`.\n  - `--slide \u003Cname>`: Jump to a specific GM or SKP.\n  - `--match` \u002F `-m`: Filter slides.\n- **Hotkeys**: `i` (HUD), `z` (zoom), `[`\u002F`]` (navigation).\n\n## Advanced: \"Via\" Configs\n`dm` supports \"via\" configs in the format `[via-]*backend`. These wrap a rendering sink to test additional logic.\n- **Examples**:\n  - `serialize-8888`: Serialize and then deserialize the canvas before drawing.\n  - `srgb-8888`: Run the 8888 sink in the sRGB color space.\n- **Common Vias**:\n  - `serialize`: Serializes\u002FDeserializes drawing.\n  - `pic`: Records to `SkPicture` and plays back.\n  - `rtblend`: Uses a runtime blend mode.\n  - `matrix`: Applies a 2x2 matrix (requires `--matrix \"s0 s1 s2 s3\"`).\n  - `upright`: Applies a matrix and then uprights it.\n- **Color Space Vias**: `srgb`, `linear`, `p3`, `rec2020`, `narrow`.\n\n## Writing Tests\n- **Unit Tests**: Use `DEF_TEST(Name, reporter)` in `tests\u002F`.\n- **GMs**: Use `DEF_GM(return new MyGM;)` in `gm\u002F`.\n\n### 6. Debugging Fuzz Cases & Writing Reproduction Tests\nTo build and run a fuzzer (like Clusterfuzz or oss-fuzz) to reproduce a crash:\n```bash\nninja --quiet -C out\u002FDebug fuzz\nout\u002FDebug\u002Ffuzz --bytes \u003Cpath_to_testcase>\n```\nFor the full workflow (including writing reproduction unit tests), see [Fuzz Debugging](references\u002Ffuzz.md).\n\n## Available Resources\n- [Build Arguments](references\u002Fbuild_args.md)\n- [dm Usage](references\u002Fdm_usage.md)\n- [nanobench Usage](references\u002Fnanobench_usage.md)\n- [viewer Usage](references\u002Fviewer_usage.md)\n- [Testing](references\u002Ftesting.md)\n- [GMs](references\u002Fgms.md)\n- [Fuzz Debugging](references\u002Ffuzz.md)\n- [Other Tools](references\u002Fother_tools.md)\n",{"name":5,"description":7},"main","607de4b035dcf7fdbaafb66c6cc04f22009ff4d4","_agents\u002Fskills\u002Fskia-gn-workflow",1791,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskia","https:\u002F\u002Fskia.org","https:\u002F\u002Fgithub.com\u002Fgoogle","https:\u002F\u002Fopensource.google\u002F","Google ❤️ Open Source","2026-11-11 08:44:49",{"source":8,"skillName":5,"commands":52,"prompt":62,"zipAvailable":63},[53,56,59],{"tool":54,"command":55},"npx","npx skills add google\u002Fskia --skill skia-gn-workflow",{"tool":57,"command":58},"bunx","bunx skills add google\u002Fskia --skill skia-gn-workflow",{"tool":60,"command":61},"pnpm","pnpm dlx skills add google\u002Fskia --skill skia-gn-workflow","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskia\u002Fblob\u002Fmain\u002F_agents\u002Fskills\u002Fskia-gn-workflow\u002FSKILL.md",true,[65,71,77,81,85,89,93,97,101],{"path":66,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":69,"sourceHtmlUrl":70},"assets\u002Fexample_asset.txt","ASSET","资产文件",23,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskia\u002Fblob\u002Fmain\u002F_agents\u002Fskills\u002Fskia-gn-workflow\u002Fassets\u002Fexample_asset.txt",{"path":72,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":75,"sourceHtmlUrl":76},"references\u002Fbuild_args.md","REFERENCE","参考文档",2672,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskia\u002Fblob\u002Fmain\u002F_agents\u002Fskills\u002Fskia-gn-workflow\u002Freferences\u002Fbuild_args.md",{"path":78,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":79,"sourceHtmlUrl":80},"references\u002Fdm_usage.md",2620,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskia\u002Fblob\u002Fmain\u002F_agents\u002Fskills\u002Fskia-gn-workflow\u002Freferences\u002Fdm_usage.md",{"path":82,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":83,"sourceHtmlUrl":84},"references\u002Ffuzz.md",2431,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskia\u002Fblob\u002Fmain\u002F_agents\u002Fskills\u002Fskia-gn-workflow\u002Freferences\u002Ffuzz.md",{"path":86,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":87,"sourceHtmlUrl":88},"references\u002Fgms.md",1347,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskia\u002Fblob\u002Fmain\u002F_agents\u002Fskills\u002Fskia-gn-workflow\u002Freferences\u002Fgms.md",{"path":90,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":91,"sourceHtmlUrl":92},"references\u002Fnanobench_usage.md",1802,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskia\u002Fblob\u002Fmain\u002F_agents\u002Fskills\u002Fskia-gn-workflow\u002Freferences\u002Fnanobench_usage.md",{"path":94,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":95,"sourceHtmlUrl":96},"references\u002Fother_tools.md",1215,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskia\u002Fblob\u002Fmain\u002F_agents\u002Fskills\u002Fskia-gn-workflow\u002Freferences\u002Fother_tools.md",{"path":98,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":99,"sourceHtmlUrl":100},"references\u002Ftesting.md",1234,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskia\u002Fblob\u002Fmain\u002F_agents\u002Fskills\u002Fskia-gn-workflow\u002Freferences\u002Ftesting.md",{"path":102,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":103,"sourceHtmlUrl":104},"references\u002Fviewer_usage.md",1518,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskia\u002Fblob\u002Fmain\u002F_agents\u002Fskills\u002Fskia-gn-workflow\u002Freferences\u002Fviewer_usage.md",[106,131],{"skillNo":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":113,"publishedAt":36},"01M698Z9BRHT49CDX1V3Y9YH3G","skia-style-check","Checks that changed code on the current git branch matches Skia's style and formatting requirements defined in site\u002Fdocs\u002Fdev\u002Fcontrib\u002Fstyle.md. Use this skill when verifying, auditing, or reviewing code changes on the active branch for style compliance before committing or submitting. Do not use for compiler errors or build workflows.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskia\u002Fblob\u002Fmain\u002F_agents\u002Fskills\u002Fskia-style-check\u002FSKILL.md",[112],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[114,115,116,117,118,119,120,121,30,31,122,123,124,125,34,126,127,128,129,26,130],"skia style check","check","style","dev","when","compiler","compliance","branch","do","requirements","reviewing code","errors","changes","contrib","git branch","code","docs",{"skillNo":132,"name":133,"nameZh":6,"description":134,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":135,"categories":136,"keywords":141,"publishedAt":36},"01M698Z5MG65YJ810070967902","skia-add-test","Add a new test to the Skia repository. Use this skill when you need to create a new unit or integration test in the tests\u002F directory and ensure it's part of the build system.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskia\u002Fblob\u002Fmain\u002F_agents\u002Fskills\u002Fskia-add-test\u002FSKILL.md",[137,140],{"categoryNo":138,"categoryName":139,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[142,143,144,145,146,118,147,32,148,149,31,30,150,151,152,153,154],"skia add test","test","add test","add","directory","you","unit","tests","integration test","system","repository","integration","create"]