Scaffold
codewithmukesh/dotnet-claude-kit
Architecture-aware feature scaffolding for .NET 10 projects.
Author and extend the Roslyn tooling bundled in the Nice3point.Revit.Toolkit package: the incremental source generator that emits external-event boilerplate, the analyzers and code fixers that…
$ npx skills add Nice3point/RevitToolkit --skill revit-toolkit-analyzers -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Nice3point/RevitToolkit revit-toolkit-analyzers --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/Nice3point/RevitToolkit.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/revit-toolkit-analyzers .claude/skills/revit-toolkit-analyzers && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "revit-toolkit-analyzers" agent skill from https://github.com/Nice3point/RevitToolkit/tree/main/.agents/skills/revit-toolkit-analyzers into .claude/skills/revit-toolkit-analyzers/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "revit-toolkit-analyzers", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/Nice3point/RevitToolkit/tree/main/.agents/skills/revit-toolkit-analyzersType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add Nice3point/RevitToolkit --skill revit-toolkit-analyzers -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Nice3point/RevitToolkit revit-toolkit-analyzers --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Nice3point/RevitToolkit.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/revit-toolkit-analyzers .agents/skills/revit-toolkit-analyzers && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "revit-toolkit-analyzers" agent skill from https://github.com/Nice3point/RevitToolkit/tree/main/.agents/skills/revit-toolkit-analyzers into .agents/skills/revit-toolkit-analyzers/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "revit-toolkit-analyzers", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Nice3point/RevitToolkit --skill revit-toolkit-analyzers -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Nice3point/RevitToolkit revit-toolkit-analyzers --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Nice3point/RevitToolkit.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/revit-toolkit-analyzers .cursor/skills/revit-toolkit-analyzers && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "revit-toolkit-analyzers" agent skill from https://github.com/Nice3point/RevitToolkit/tree/main/.agents/skills/revit-toolkit-analyzers into .cursor/skills/revit-toolkit-analyzers/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "revit-toolkit-analyzers", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/Nice3point/RevitToolkit.git --path .agents/skills/revit-toolkit-analyzers--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add Nice3point/RevitToolkit --skill revit-toolkit-analyzers -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Nice3point/RevitToolkit revit-toolkit-analyzers --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Nice3point/RevitToolkit.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/revit-toolkit-analyzers .gemini/skills/revit-toolkit-analyzers && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "revit-toolkit-analyzers" agent skill from https://github.com/Nice3point/RevitToolkit/tree/main/.agents/skills/revit-toolkit-analyzers into .gemini/skills/revit-toolkit-analyzers/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "revit-toolkit-analyzers", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install Nice3point/RevitToolkit revit-toolkit-analyzersInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add Nice3point/RevitToolkit --skill revit-toolkit-analyzers -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Nice3point/RevitToolkit.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/revit-toolkit-analyzers .github/skills/revit-toolkit-analyzers && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "revit-toolkit-analyzers" agent skill from https://github.com/Nice3point/RevitToolkit/tree/main/.agents/skills/revit-toolkit-analyzers into .github/skills/revit-toolkit-analyzers/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "revit-toolkit-analyzers", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Nice3point/RevitToolkit --skill revit-toolkit-analyzers -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Nice3point/RevitToolkit revit-toolkit-analyzers --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Nice3point/RevitToolkit.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/revit-toolkit-analyzers .opencode/skills/revit-toolkit-analyzers && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "revit-toolkit-analyzers" agent skill from https://github.com/Nice3point/RevitToolkit/tree/main/.agents/skills/revit-toolkit-analyzers into .opencode/skills/revit-toolkit-analyzers/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "revit-toolkit-analyzers", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
revit-toolkit-analyzersAuthor and extend the Roslyn tooling bundled in the Nice3point.Revit.Toolkit package: the incremental source generator that emits external-event boilerplate, the analyzers and code fixers that…
Revit Toolkit Analyzers is an agent skill from Nice3point/RevitToolkit. Author and extend the Roslyn tooling bundled in the Nice3point.Revit.Toolkit package: the incremental source generator that emits external-event boilerplate, the analyzers and code fixers that enforce its prerequisites, the RVTTK diagnostic catalog, and the dual-Roslyn packaging. USE FOR: adding or changing a generator, analyzer, code fixer, or diagnostic in the Analyzers, CodeFixers, or SourceGenerators projects; assigning a diagnostic id; wiring the .Roslyn twin projects and Directory.Roslyn.props; packaging…
Its SKILL.md is about 3.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Project scaffolding. It works with .NET. The repository describes itself as: Toolkit for Revit plugin development. The licence is MIT.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit b5abec5. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
dotnetFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Revit Toolkit Analyzers loads about 3.8k tokens when it runs. Until then it costs about 193 tokens; SKILL.md has 1,126 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from Nice3point/RevitToolkit at commit b5abec5, republished under its MIT licence (© Nice3point). 1,126 words, ~3,842 tokens.
.claude/skills/revit-toolkit-analyzers/SKILL.md (or your agent's skills folder).Nice3point.Revit.Toolkit ships Roslyn tooling inside the NuGet package: an incremental source generator that turns an [ExternalEvent]-annotated method into event properties, analyzers that enforce the annotation's prerequisites, and code fixers that resolve the diagnostics.
The generated API shape and the RVTTK#### diagnostic ids are public surface; treat every id and generated name as a contract.
This skill covers authoring and extending that tooling; the generator and analyzers require Microsoft.CodeAnalysis.CSharp.
ExternalEventGenerator entry point or its ExternalEvents/Analysis and ExternalEvents/Emission implementation.ExternalEventDiagnostics catalog or a new analyzer or code fixer..Roslyn### twin project or editing Directory.Roslyn.props.analyzers/dotnet/roslyn{4.14,5.0} paths.Public generator, analyzer, and code-fix entry points live at their project roots.
Their public namespaces remain stable.
Capability-specific implementation lives under the same subject name across projects, such as ExternalEvents.
The capability root holds its shared definitions; Analysis extracts and validates symbols, and Emission renders source.
The external-event diagnostic catalog lives in Analyzers/ExternalEvents/ExternalEventDiagnostics.cs and is linked into the other tooling projects.
Descriptor declarations follow diagnostic-ID order.
CSharp holds language-specific symbol and source operations.
Diagnostics holds generator diagnostic reporting, and IncrementalGeneration holds value equality used by incremental pipelines.
These subjects have no dependency on ExternalEvents.
The public EquatableArray<T> retains its existing SourceGenerators.Models namespace for compatibility; its file belongs to IncrementalGeneration.
Folders describe subjects rather than class forms; Helpers, Extensions, and Models are not storage categories.
New capabilities receive sibling subject folders instead of expanding the external-event implementation or a project-wide helper catalog.
ExternalEventGenerator is [Generator(LanguageNames.CSharp)] and implements IIncrementalGenerator.
It pipes matched methods with ForAttributeWithMetadataName, reports diagnostics, then registers source output.
Keep the pipeline incremental: extract into an equatable model in ExternalEventExtractor, and render text in ExternalEventWriter.
public void Initialize(IncrementalGeneratorInitializationContext context)
{
var methodAnalyses = context.SyntaxProvider
.ForAttributeWithMetadataName(
ExternalEventTypeNames.ExternalEventAttribute.WithoutGlobalPrefix,
predicate: static (node, cancellationToken) => node is MethodDeclarationSyntax,
transform: static (syntaxContext, cancellationToken) => ExternalEventExtractor.AnalyzeMethod(syntaxContext, cancellationToken));
context.ReportDiagnostics(methodAnalyses.Select(static (methodAnalysis, cancellationToken) => methodAnalysis.Diagnostics));
var eventDefinitionsWithOptions = methodAnalyses
.Where(static methodAnalysis => methodAnalysis.Definition is not null)
.Select(static (methodAnalysis, cancellationToken) => methodAnalysis.Definition!)
.Combine(context.ParseOptionsProvider);
context.RegisterSourceOutput(eventDefinitionsWithOptions, static (sourceProductionContext, generationInput) =>
{
var (eventDefinition, _) = generationInput;
var generatedSource = ExternalEventWriter.GenerateSource(eventDefinition, useFieldKeyword: false, useLockType: false);
sourceProductionContext.AddSource(eventDefinition.HintName, SourceText.From(generatedSource, Encoding.UTF8));
});
}Emit into the method's own namespace and a stable hint name derived from the type hierarchy, and treat every generated member name as public surface.
Never carry a SyntaxNode, ISymbol, or Compilation into the model; carry only equatable data. The pipeline then caches correctly.
Project consumer capabilities into equatable values before combining them with event definitions.
The field keyword depends on the consumer language version; System.Threading.Lock requires C# 13 or later and an accessible type in the consumer compilation.
Generated multi-parameter handlers use block-bodied lambdas, with a return statement for value-returning handlers.
Diagnostics live in the internal ExternalEventDiagnostics catalog under the ExternalEventGenerator category, keyed by a RVTTK#### id.
The shipped ids are RVTTK0001 (returns Task), RVTTK0002 (async void), RVTTK0003 (generic), RVTTK0004 (duplicate overloads), and RVTTK0005 (containing type not partial).
Assign the next unused id, never reuse a retired one, and give it a title, a parameterized messageFormat, a category, and a severity.
public static readonly DiagnosticDescriptor ContainingTypeNotPartial = new(
id: "RVTTK0005",
title: "Containing type is not partial",
messageFormat: "The type '{0}' containing method '{1}' marked with [ExternalEvent] must be declared as partial",
category: "ExternalEventGenerator",
defaultSeverity: DiagnosticSeverity.Error,
isEnabledByDefault: true);Choose the reporter by whether the check needs the full symbol model at edit time.
The generator's ExternalEventExtractor.ValidateMethod reports RVTTK0001, RVTTK0003, and RVTTK0004 while building the model, returning false to skip emission.
RVTTK0002 and RVTTK0005 also have standalone analyzers (AsyncVoidMethodAnalyzer, ContainingTypeNotPartialAnalyzer); the IDE flags them live and a code fixer can attach.
An analyzer resolves the attribute symbol once per compilation, then registers a symbol action.
[DiagnosticAnalyzer(LanguageNames.CSharp)]
public sealed class AsyncVoidMethodAnalyzer : DiagnosticAnalyzer
{
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; } = [ExternalEventDiagnostics.AsyncVoidMethod];
public override void Initialize(AnalysisContext context)
{
context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None);
context.EnableConcurrentExecution();
context.RegisterCompilationStartAction(static context =>
{
var attributeSymbol = context.Compilation.GetTypeByMetadataName("Nice3point.Revit.Toolkit.External.ExternalEventAttribute");
if (attributeSymbol is null)
{
return;
}
context.RegisterSymbolAction(context =>
{
if (context.Symbol is not IMethodSymbol { IsAsync: true, ReturnsVoid: true } methodSymbol)
{
return;
}
if (!methodSymbol.HasAttribute(attributeSymbol))
{
return;
}
context.ReportDiagnostic(Diagnostic.Create(
descriptor: ExternalEventDiagnostics.AsyncVoidMethod,
location: methodSymbol.Locations[0],
messageArgs: methodSymbol.Name));
}, SymbolKind.Method);
});
}
}Always call ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None) and EnableConcurrentExecution(), and bail out early when the attribute type is absent from the compilation.
Add a fixer only when the violation resolves without a human decision.
A fixer is [Shared] and [ExportCodeFixProvider(LanguageNames.CSharp)], lists the fixable id from the catalog, and returns WellKnownFixAllProviders.BatchFixer.
[Shared]
[ExportCodeFixProvider(LanguageNames.CSharp)]
public sealed class MakeTypePartialCodeFixer : CodeFixProvider
{
private const string Title = "Make type partial";
public override ImmutableArray<string> FixableDiagnosticIds { get; } = [ExternalEventDiagnostics.ContainingTypeNotPartial.Id];
public override FixAllProvider GetFixAllProvider()
{
return WellKnownFixAllProviders.BatchFixer;
}
public override async Task RegisterCodeFixesAsync(CodeFixContext context)
{
var diagnostic = context.Diagnostics[0];
var root = await context.Document.GetSyntaxRootAsync(context.CancellationToken).ConfigureAwait(false);
var typeDeclaration = root!.FindNode(context.Span).FirstAncestorOrSelf<TypeDeclarationSyntax>();
if (typeDeclaration is null) return;
context.RegisterCodeFix(
CodeAction.Create(
title: Title,
createChangedDocument: cancellationToken => AddPartialModifier(context.Document, root, typeDeclaration, cancellationToken),
equivalenceKey: Title),
diagnostic);
}
}Reference the fixable id through the catalog (ExternalEventDiagnostics.X.Id), never a string literal; an id can never drift between analyzer and fixer.
Every tooling project has a .Roslyn### twin that compiles the same source against an older Roslyn; the package works on older IDEs and SDKs.
Directory.Roslyn.props parses the suffix, links the base project's .cs files into the twin, and sets ROSLYN*_OR_GREATER constants.
Author the code once in the base project; the twin's csproj is empty except for the props import and a version-pinned Microsoft.CodeAnalysis.CSharp.
<!-- Twin project: Nice3point.Revit.Toolkit.Analyzers.Roslyn414.csproj -->
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\Directory.Roslyn.props"/>
<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" VersionOverride="$(RoslynVersion).*" PrivateAssets="all"/>
</ItemGroup>
</Project>Guard any API that differs across Roslyn versions with the ROSLYN5_0_0_OR_GREATER / ROSLYN4_14_0_OR_GREATER constants, as ExternalEventGenerator does when it decides whether the field keyword is available.
Never copy source into a twin; Directory.Roslyn.props links it automatically via <Compile Include="..\$(_BaseProjectName)\**\*.cs" .../>.
The runtime library project is the only package-producing project.
It packs each tooling assembly into the matching Roslyn path; the right build loads per IDE and SDK. It references the tooling projects with ReferenceOutputAssembly="false" purely for build order.
<None Include="..\Nice3point.Revit.Toolkit.SourceGenerators\bin\$(Configuration)\netstandard2.0\Nice3point.Revit.Toolkit.SourceGenerators.dll" PackagePath="analyzers\dotnet\roslyn5.0\cs" Pack="true" Visible="false"/>
<None Include="..\Nice3point.Revit.Toolkit.SourceGenerators.Roslyn414\bin\$(Configuration)\netstandard2.0\Nice3point.Revit.Toolkit.SourceGenerators.dll" PackagePath="analyzers\dotnet\roslyn4.14\cs" Pack="true" Visible="false"/>All tooling projects target netstandard2.0 with IsRoslynComponent=true and EnforceExtendedAnalyzerRules=true, set in Directory.Roslyn.props.
Add every new or changed rule to AnalyzerReleases.Unshipped.md in the analyzer project; the release-tracking analyzer fails the build otherwise.
The shipped ids are already in AnalyzerReleases.Shipped.md.
### New Rules
Rule ID | Category | Severity | Notes
--------|----------|----------|-------
RVTTK0006 | ExternalEventGenerator | Warning | <the new rule>Then cover the change in the tooling test projects and build.
Analyzer and fixer tests assert both the reported RVTTK#### and the fixed source; generator tests drive the generator and verify the emitted source and diagnostics.
dotnet run -c ReleaseRVTTK#### id in ExternalEventDiagnostics, with a title, parameterized message, category, and severity.[Shared]/[ExportCodeFixProvider], and references the fixable id through the catalog.ROSLYN*_OR_GREATER; no source is duplicated into a .Roslyn### twin.analyzers/dotnet/roslyn5.0/cs and analyzers/dotnet/roslyn4.14/cs.AnalyzerReleases.Unshipped.md entry and a test in the matching tooling test project.| Pitfall | Correct approach |
|---|---|
Reusing or renumbering a retired RVTTK#### id | Assign the next unused id; shipped ids are public surface. |
| Renaming a generated property or namespace | Generated names are public surface; deprecate, do not rename. |
Capturing a symbol or Compilation in the generator model | Carry only equatable data; the incremental pipeline then caches. |
Duplicating source into a .Roslyn### twin | Author once in the base project; the props file links the files. |
| A hard-coded diagnostic string in a code fixer | Reference ExternalEventDiagnostics.X.Id; analyzer and fixer stay in sync. |
Skipping the AnalyzerReleases.Unshipped.md entry | Add every rule; release tracking fails the build without it. |
| Adding a code fixer for a fix that needs a human decision | Report the diagnostic only; fix mechanically resolvable cases. |
© Nice3point, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/revit-toolkit-analyzers of Nice3point/RevitToolkit.
Open the folder on GitHubat commit b5abec5
Revit Toolkit Analyzers next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Revit Toolkit Analyzers this skillNice3point/RevitToolkit | 176 | — | ~3.8k | Automated safety check: Pass | MIT | |
| Scaffoldcodewithmukesh/dotnet-claude-kit | 755 | — | ~1.7k | Automated safety check: Pass | MIT | |
| Corvus Benchmarkscorvus-dotnet/Corvus.JsonSchema | 199 | — | ~1.2k | Automated safety check: Pass | Apache-2.0 | |
| Create Migrationfullstackhero/dotnet-starter-kit | 6.8k | — | ~757 | Automated safety check: Pass | MIT | |
| Improve Skill Qualitydotnet/skills | 5.6k | 1 repos | ~3.6k | Automated safety check: Pass | MIT | |
| Create Blazor Projectdotnet/skills | 5.6k | 1 repos | ~3k | Automated safety check: Pass | MIT |
codewithmukesh/dotnet-claude-kit
Architecture-aware feature scaffolding for .NET 10 projects.
corvus-dotnet/Corvus.JsonSchema
Run, interpret, and maintain BenchmarkDotNet benchmarks for JSON Schema validation and query languages.
fullstackhero/dotnet-starter-kit
Create and apply an EF Core migration for a module's DbContext the FSH way (central Migrations project, per-module folder, correct --context).
dotnet/skills
Diagnoses and fixes skills in the dotnet/skills repository that lose to their own baseline, fail to activate, time out, or return "no credible improvement".
dotnet/skills
Create a new ASP.NET Core web application or web site using Blazor.
dotnet/skills
Generate or scaffold ASP.NET Core code — Razor Pages, Blazor components, MVC controllers, views, and Minimal API endpoints — without using ASP.NET Core CLI scaffolding/code-generation tools.
Nice3point/RevitToolkit
Evolve the public surface of Nice3point.Revit.Toolkit without breaking downstream consumers: deprecate a renamed or replaced member with [Obsolete] with a JetBrains [CodeTemplate] auto-conversion…
Nice3point/RevitToolkit
Uphold the design contract of the Nice3point.Revit.Toolkit runtime library, that wraps the raw Revit add-in API.
Works with
Categories
Author and extend the Roslyn tooling bundled in the Nice3point.Revit.Toolkit package: the incremental source generator that emits external-event boilerplate, the analyzers and code fixers that…. Revit Toolkit Analyzers is an agent skill from Nice3point/RevitToolkit.Toolkit package: the incremental source generator that emits external-event boilerplate, the analyzers and code fixers that enforce its prerequisites, the RVTTK diagnostic catalog, and the dual-Roslyn packaging.
Revit Toolkit Analyzers fits situations like: changing a generator; diagnostic in the Analyzers; sourceGenerators projects; assigning a diagnostic id.
Run `npx skills add Nice3point/RevitToolkit --skill revit-toolkit-analyzers -a claude-code`. Or copy the skill folder (.agents/skills/revit-toolkit-analyzers in Nice3point/RevitToolkit) into .claude/skills/revit-toolkit-analyzers in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Nice3point/RevitToolkit --skill revit-toolkit-analyzers -a codex`. Or copy the skill folder (.agents/skills/revit-toolkit-analyzers in Nice3point/RevitToolkit) into .agents/skills/revit-toolkit-analyzers in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Nice3point/RevitToolkit --skill revit-toolkit-analyzers -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/revit-toolkit-analyzers, .gemini/skills/revit-toolkit-analyzers, .github/skills/revit-toolkit-analyzers and .opencode/skills/revit-toolkit-analyzers in your project.
Going by SKILL.md and its folder, Revit Toolkit Analyzers needs the command-line tools its instructions call (dotnet).
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Revit Toolkit Analyzers is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.8k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Revit Toolkit Analyzers: Scaffold (codewithmukesh/dotnet-claude-kit, 755 stars), Corvus Benchmarks (corvus-dotnet/Corvus.JsonSchema, 199 stars), Create Migration (fullstackhero/dotnet-starter-kit, 6.8k stars) and Improve Skill Quality (dotnet/skills, 5.6k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Nice3point (a GitHub user) maintains it in Nice3point/RevitToolkit, which has 176 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 9, 2026.
Source: Nice3point/RevitToolkit on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.