Route gh-aw workflow design/create/debug/upgrade requests to the right prompts.
日本語の概要は準備中です。原文の説明を表示しています。
Validates custom dotnet new templates for correctness before publishing. Catches missing fields, parameter bugs, shortName conflicts, constraint issues, and common authoring mistakes that cause templates to fail silently. USE FOR: checking template.json files for errors before publishing or testing, diagnosing why a template doesn't appear after installation, reviewing template parameter definitions for type mismatches and missing defaults, finding shortName conflicts with dotnet CLI commands, validating post-action and constraint configuration. DO NOT USE FOR: finding or using existing templates (use template-discovery), creating projects from templates (use template-instantiation), creating templates from existing projects (use template-authoring).
インストール方法を見るインストールする前に、エージェントに与えられる指示の中身を確認できます。
This skill helps validate custom dotnet new templates for correctness before publishing. It encodes the validation rules that catch common authoring mistakes — issues that cause templates to silently fail, produce broken projects, or not appear in dotnet new list.
template-discoverytemplate-instantiationtemplate-authoring| Input | Required | Description |
|---|---|---|
| template.json path | Yes | Path to the template.json file or the template directory containing .template.config/template.json |
When reviewing a template.json, check ALL of the following categories systematically. Report every finding as an error, warning, or suggestion.
Parse gate — stop on syntax errors. Parse JSON before applying any semantic rule. If parsing fails, report the parser's line and column, show only the smallest concrete syntax correction, and stop. Do not invent required-field, symbol, post-action, or discoverability findings from a document that did not parse. Re-parse after the correction before making any semantic claim.
The malformed-JSON final response has exactly two parts: the one-line parse verdict and a corrected snippet showing the exact edit. Do not append semantic recommendations, optional metadata, or a full replacement manifest.
| Field | Severity | Rule |
|---|---|---|
identity | ERROR | Must be present and non-empty |
name | ERROR | Must be present and non-empty |
shortName | ERROR | Must be present and non-empty |
sourceName | WARNING | Without it, --name won't customize the generated project name |
author | WARNING | Improves template discoverability |
description | SUGGESTION | Helps users understand what the template creates |
classifications | SUGGESTION | Improves search and categorization (e.g., ["Web", "API"]) |
defaultName | SUGGESTION | Provides a fallback project name when --name is not specified |
MyCompany.WebApi.CSharp). or -) — use reverse-DNS formatA shortName that matches a dotnet new subcommand conflicts, because dotnet new <name> is then parsed as that subcommand instead of instantiating the template. Read the reserved set for the installed SDK from the Commands: section of dotnet new --help — that is the authoritative source and avoids this rule going stale.
As of current SDKs the subcommands include (illustrative only — version-dependent, do not hardcode this list; the live dotnet new --help output is canonical): install, uninstall, update, list, search, details, create. Note that top-level dotnet verbs like build, run, test, and publish do NOT conflict — dotnet new test does not collide with dotnet test.
dotnet new --help (case-insensitive)For each symbol in the symbols object:
type fieldtype: "parameter":
datatype specified (defaults to string)description (improves --help output)datatype: "choice":
choices definedchoices is emptydefaultValue is not in the choices listisRequired) and no defaultValue — users get unexpected behaviordatatype: "bool":
defaultValue is not a valid booleandatatype: "int":
defaultValue is not a valid integerstring, bool, choice, int, float, hex, texttype: "computed":
value expressiontype: "generated":
generator fieldcasing, coalesce, constant, port, guid, now, random, regex, regexMatch, switch, joinCustom parameter help is template-specific: it appears under
dotnet new <shortName> --help, not the global dotnet new --help. Correct that premise
when necessary, then explain which invalid symbol definitions prevent the parameters from
appearing reliably.
A valid choice parameter uses a non-empty choices object, for example:
"Color": {
"type": "parameter",
"datatype": "choice",
"defaultValue": "Blue",
"choices": {
"Blue": { "displayName": "Blue" },
"Green": { "displayName": "Green" }
}
}
Parameter prefix collisions: WARNING if any parameter name is a prefix of another parameter name (e.g., Auth and AuthMode) — this creates ambiguous parsing in expression contexts.
For source modifier conditions:
(symbolName), not bare symbolNameFor each post-action:
actionIddescription — this text is shown to users when the action requires manual stepsmanualInstructions — these are shown when the action can't run automatically (e.g., in an IDE)For each constraint:
type fieldargs — most constraint types require argumentstype: "host", missing args is an ERROR. args is a required array; each entry needs hostname. Supported
built-in identifiers include dotnetcli, vs, vs-mac, ide, and
dotnetcli-preview. An optional version uses NuGet version/range syntax such as
[10.0.100,). The engine matches argument keys case-insensitively, so the documented
hostName spelling is also valid. Reject unrelated fields such as pattern and value.type: "sdk-version", args is a version string or array using the same syntax.language tag — adding tags.language (e.g., "C#") improves filtering in dotnet new list --languagetype tag — adding tags.type (e.g., "project" or "item") improves categorizationThe file can be at:
path/to/template.jsonpath/to/.template.config/template.json.template.config directory: path/.template.config/template.jsonRead the JSON. If it's malformed, report the JSON parse error with line and column. If an absolute-path read fails, retry the user-supplied relative path from the working directory before concluding the file is unavailable.
Only after parsing succeeds, run all 8 validation categories above. Collect errors, warnings, and suggestions separately. Verify schema-sensitive claims against the installed SDK or the current template-engine schema; do not infer a runtime failure from a field name alone.
Lead with a one-line verdict, then a single findings table. This decisive shape is required — do not scatter findings across prose paragraphs.
Verdict header (pick one):
❌ Not ready — N error(s), M warning(s) — has errors⚠️ Publishable but N warning(s) — no errors, has warnings✅ Ready to publish — 0 errors, 0 warnings — no errors or warnings (optional suggestions may still apply)Then one table, ordered errors → warnings → suggestions:
| Severity | Location (JSON path or line:col) | Issue | Fix |
|---|---|---|---|
| ERROR | shortName | "list" conflicts with a dotnet new subcommand | Rename to a distinctive value, e.g. "my-list" |
| ERROR | symbols.maxRetries.defaultValue | "abc" is not a valid int | Set a numeric default, e.g. "3" |
| WARNING | sourceName | Missing replacement token | Set it to the source project name |
Every ERROR and WARNING MUST include a concrete fix — the corrected value, JSON snippet, or a specific edit instruction (e.g. "remove the trailing comma"), not just a restatement of the problem. A finding without an actionable fix is incomplete. This is the single biggest thing that separates a useful validation from a generic lint.
Close with the total: "N error(s), M warning(s), K suggestion(s)."
For malformed JSON the output is intentionally smaller and has exactly two parts:
❌ Not ready — JSON parse error at line N, column M: <message>.
<smallest corrected fragment showing the exact edit>
Do not append a findings table or semantic totals until the corrected file parses.
| Pitfall | Impact |
|---|---|
| ShortName = "list" or "search" | Template can never be created — conflicts with a dotnet new subcommand |
Missing sourceName | --name MyProject doesn't rename anything in the generated files |
Choice parameter without defaultValue | Confusing user experience on optional choice params |
Invalid datatype value | Template engine ignores the symbol, causing silent failures |
Computed symbol without value | Template engine throws at instantiation time |
Parameter prefix collision (Auth vs AuthMode) | Ambiguous expression evaluation |
| Source condition without parentheses | Condition may not evaluate correctly |
| Continuing semantic validation after JSON parsing failed | Findings are speculative. Report the exact parse fix and stop. |
Host constraint uses scalar args, the invalid dotnet-cli host ID, or unrelated fields | Use args: [{ "hostname": "dotnetcli", "version": "[10.0.100,)" }]; hostName is also accepted case-insensitively. |
まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Route gh-aw workflow design/create/debug/upgrade requests to the right prompts.
日本語の概要は準備中です。原文の説明を表示しています。
Scans .NET code for ~50 performance anti-patterns across async, memory, strings, collections, LINQ, regex, serialization, and I/O with tiered severity classification. Use when analyzing .NET code for optimization opportunities, reviewing hot paths, or auditing allocation-heavy patterns.
日本語の概要は準備中です。原文の説明を表示しています。
Symbolicate the .NET runtime frames in an Android tombstone file. Extracts BuildIds and PC offsets from the native backtrace, downloads debug symbols from the Microsoft symbol server, and runs llvm-symbolizer to produce function names with source file and line numbers. USE FOR triaging a .NET MAUI or Mono Android app crash from a tombstone, resolving native backtrace frames in libmonosgen-2.0.so or libcoreclr.so to .NET runtime source code, or investigating SIGABRT, SIGSEGV, or other native signals originating from the .NET runtime on Android. DO NOT USE FOR pure Java/Kotlin crashes, managed .NET exceptions that are already captured in logcat, or iOS crash logs. INVOKES Symbolicate-Tombstone.ps1 script, llvm-symbolizer, Microsoft symbol server.
日本語の概要は準備中です。原文の説明を表示しています。
Symbolicate .NET runtime frames in Apple platform .ips crash logs (iOS, tvOS, Mac Catalyst, macOS). Extracts UUIDs and addresses from the native backtrace, locates dSYM debug symbols, and runs atos to produce function names with source file and line numbers. Automatically downloads .dwarf symbols from the Microsoft symbol server using Mach-O UUIDs. USE FOR triaging a .NET MAUI or Mono app crash from an .ips file on any Apple platform, resolving native backtrace frames in libcoreclr or libmonosgen-2.0 to .NET runtime source code, retrieving .ips crash logs from a connected iOS device or iPhone, or investigating EXC_CRASH, EXC_BAD_ACCESS, SIGABRT, or SIGSEGV originating from the .NET runtime. DO NOT USE FOR pure Swift/Objective-C crashes with no .NET components, or Android tombstone files. INVOKES Symbolicate-Crash.ps1 script, atos, dwarfdump, idevicecrashreport.
日本語の概要は準備中です。原文の説明を表示しています。
Analyze assertion quality, depth, variety, and false confidence in existing tests. ALWAYS USE when asked about weak, shallow, trivial, always-true, self-referential, assertion-free, presence/truthiness-only, or insufficiently diverse assertions, including MSTest, Jest, pytest, and Go. DO NOT USE for direct fixes: writing-mstest-tests owns supplied MSTest assertions; code-testing owns new cases. Use test-gap-analysis when asked whether tests would catch a production change, and test-anti-patterns for general severity-ranked audits.
日本語の概要は準備中です。原文の説明を表示しています。
Create or review Blazor components (.razor files) with correct architecture. USE FOR: writing new Blazor components that do NOT involve JavaScript interop, implementing parameters and EventCallback, RenderFragment slots, component lifecycle (OnInitializedAsync, OnParametersSet), async patterns, IAsyncDisposable, CancellationToken, CSS isolation, code-behind. DO NOT USE FOR: creating new projects (use create-blazor-project), JavaScript interop or calling browser APIs from Blazor (use use-js-interop), forms and validation (use collect-user-input), prerendering issues (use support-prerendering), HTTP data fetching patterns (use fetch-and-send-data), coordinating state between unrelated components (use coordinate-components).
日本語の概要は準備中です。原文の説明を表示しています。