Agent skill

Revit Toolkit Analyzers

by Nice3point in 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…

MITAuto-check passedDevelopment

Install Revit Toolkit Analyzers

skills CLI
$ npx skills add Nice3point/RevitToolkit --skill revit-toolkit-analyzers -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install Nice3point/RevitToolkit revit-toolkit-analyzers --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ 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-src

Use ~/.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/

Facts

Skill name
revit-toolkit-analyzers
GitHub stars
176
Token cost
~3.8k tokens
SKILL.md length
1,126 words
Files
1
Skills in repo
3
Repo updated
First seen
Licence
MIT

At a glance

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…

  • Works in 7 steps: Emit from the incremental generator → Register the diagnostic in the RVTTK… → Report from the generator or a dedicated… → …
  • Changing a generator
  • SKILL.md covers When to use, When not to use, Architecture layout and Workflow, plus 2 more sections
  • Calls dotnet

What it does

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.

When your agent uses it

  • Changing a generator
  • Diagnostic in the Analyzers
  • SourceGenerators projects
  • Assigning a diagnostic id

Example prompts

  • “/revit-toolkit-analyzers”

Workflow steps

7 steps, taken from the step headings in SKILL.md.

  1. Emit from the incremental generator
  2. Register the diagnostic in the RVTTK catalog
  3. Report from the generator or a dedicated analyzer
  4. Add a code fixer when the fix is mechanical
  5. Compile the same source against both Roslyn versions
  6. Package into the version-specific analyzer paths
  7. Record the rule, then test

What it can do on your machine

Read from SKILL.md and the folder at commit b5abec5. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • dotnet

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

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.

Always · name and description, kept in context so the agent knows when to use it
~193
When it runs · the whole SKILL.md, loaded when a task matches
~3.8k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from Nice3point/RevitToolkit at commit b5abec5, republished under its MIT licence (© Nice3point). 1,126 words, ~3,842 tokens.

Download SKILL.mdSave it as .claude/skills/revit-toolkit-analyzers/SKILL.md (or your agent's skills folder).
name
revit-toolkit-analyzers
description
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 the tooling into the analyzers/dotnet/roslyn paths; recording a rule in AnalyzerReleases. DO NOT USE FOR: designing the runtime library types the generator emits against, such as the external-event classes and static contexts.
license
MIT

Revit Toolkit Analyzers

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.

When to use

  • Adding or changing the ExternalEventGenerator entry point or its ExternalEvents/Analysis and ExternalEvents/Emission implementation.
  • Adding a diagnostic to the ExternalEventDiagnostics catalog or a new analyzer or code fixer.
  • Wiring a .Roslyn### twin project or editing Directory.Roslyn.props.
  • Changing how the tooling assemblies pack into the analyzers/dotnet/roslyn{4.14,5.0} paths.

When not to use

  • Designing the runtime types the generator emits against (the external-event family, the static contexts). That is the library design contract, not the compiler tooling.

Architecture layout

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.

Workflow

Step 1: Emit from the incremental generator

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.

csharp
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.

Step 2: Register the diagnostic in the RVTTK catalog

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.

csharp
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);
Step 3: Report from the generator or a dedicated analyzer

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.

csharp
[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.

Step 4: Add a code fixer when the fix is mechanical

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.

csharp
[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.

Show full SKILL.md (479 more words)Show less
Step 5: Compile the same source against both Roslyn versions

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.

xml
<!-- 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" .../>.

Step 6: Package into the version-specific analyzer paths

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.

xml
<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.

Step 7: Record the rule, then test

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.

text
### 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.

shell
dotnet run -c Release

Validation

  • The generator stays incremental: only equatable data crosses into the model, and output goes to a stable hint name and namespace.
  • A new diagnostic uses the next unused RVTTK#### id in ExternalEventDiagnostics, with a title, parameterized message, category, and severity.
  • Every analyzer configures generated-code analysis and concurrent execution and bails when the attribute type is absent.
  • A code fixer is added only for a mechanical fix, is [Shared]/[ExportCodeFixProvider], and references the fixable id through the catalog.
  • Roslyn-version-specific APIs are guarded with ROSLYN*_OR_GREATER; no source is duplicated into a .Roslyn### twin.
  • Each tooling assembly packs into both analyzers/dotnet/roslyn5.0/cs and analyzers/dotnet/roslyn4.14/cs.
  • Every new or changed rule has an AnalyzerReleases.Unshipped.md entry and a test in the matching tooling test project.

Common Pitfalls

PitfallCorrect approach
Reusing or renumbering a retired RVTTK#### idAssign the next unused id; shipped ids are public surface.
Renaming a generated property or namespaceGenerated names are public surface; deprecate, do not rename.
Capturing a symbol or Compilation in the generator modelCarry only equatable data; the incremental pipeline then caches.
Duplicating source into a .Roslyn### twinAuthor once in the base project; the props file links the files.
A hard-coded diagnostic string in a code fixerReference ExternalEventDiagnostics.X.Id; analyzer and fixer stay in sync.
Skipping the AnalyzerReleases.Unshipped.md entryAdd every rule; release tracking fails the build without it.
Adding a code fixer for a fix that needs a human decisionReport 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

Files

Just SKILL.md in .agents/skills/revit-toolkit-analyzers of Nice3point/RevitToolkit.

Open the folder on GitHubat commit b5abec5

Compare with similar skills

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.

Revit Toolkit Analyzers compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Revit Toolkit Analyzers this skillNice3point/RevitToolkit176—~3.8kAutomated safety check: PassMIT
Scaffoldcodewithmukesh/dotnet-claude-kit755—~1.7kAutomated safety check: PassMIT
Corvus Benchmarkscorvus-dotnet/Corvus.JsonSchema199—~1.2kAutomated safety check: PassApache-2.0
Create Migrationfullstackhero/dotnet-starter-kit6.8k—~757Automated safety check: PassMIT
Improve Skill Qualitydotnet/skills5.6k1 repos~3.6kAutomated safety check: PassMIT
Create Blazor Projectdotnet/skills5.6k1 repos~3kAutomated safety check: PassMIT

Similar skills

  • Scaffold

    codewithmukesh/dotnet-claude-kit

    Architecture-aware feature scaffolding for .NET 10 projects.

    755 GitHub stars~1.7k tokensUpdated 2 mo ago
    DevelopmentAuto-check passed
  • Corvus Benchmarks

    corvus-dotnet/Corvus.JsonSchema

    Run, interpret, and maintain BenchmarkDotNet benchmarks for JSON Schema validation and query languages.

    199 GitHub stars~1.2k tokensUpdated today
    DevelopmentAuto-check passed
  • Create Migration

    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).

    6.8k GitHub stars~757 tokensUpdated today
    DevelopmentAuto-check passed
  • Official

    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".

    5.6k GitHub starsUsed in 1 repo~3.6k tokens
    DevelopmentAuto-check passed
  • Official

    Create a new ASP.NET Core web application or web site using Blazor.

    5.6k GitHub starsUsed in 1 repo~3k tokens
    DevelopmentAuto-check passed
  • Official

    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.

    5.6k GitHub starsUsed in 1 repo~3.2k tokens
    DevelopmentAuto-check passed

More from Nice3point/RevitToolkit

  • Revit Toolkit Backward Compat

    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…

    176 GitHub stars~2k tokensUpdated today
    Auto-check passed
  • Revit Toolkit Internals

    Nice3point/RevitToolkit

    Uphold the design contract of the Nice3point.Revit.Toolkit runtime library, that wraps the raw Revit add-in API.

    176 GitHub stars~2.5k tokensUpdated today
    Auto-check passed

Works with

Categories

Questions about Revit Toolkit Analyzers

What does Revit Toolkit Analyzers do?

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.

When should I use Revit Toolkit Analyzers?

Revit Toolkit Analyzers fits situations like: changing a generator; diagnostic in the Analyzers; sourceGenerators projects; assigning a diagnostic id.

How do I install Revit Toolkit Analyzers in Claude Code?

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.

How do I install Revit Toolkit Analyzers in Codex?

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.

Can I use Revit Toolkit Analyzers in Cursor, Gemini CLI or GitHub Copilot?

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.

What does Revit Toolkit Analyzers need to run?

Going by SKILL.md and its folder, Revit Toolkit Analyzers needs the command-line tools its instructions call (dotnet).

Does Revit Toolkit Analyzers access the network?

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.

Is Revit Toolkit Analyzers safe to install?

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.

What licence does Revit Toolkit Analyzers use?

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.

How many tokens does Revit Toolkit Analyzers use?

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.

What are the alternatives to Revit Toolkit Analyzers?

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.

Who maintains Revit Toolkit Analyzers?

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.