Changelog
JetBrains/ideavim
Maintains the IdeaVim changelog (CHANGES.md). An agent skill from JetBrains/ideavim.
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…
$ npx skills add Nice3point/RevitToolkit --skill revit-toolkit-backward-compat -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Nice3point/RevitToolkit revit-toolkit-backward-compat --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-backward-compat .claude/skills/revit-toolkit-backward-compat && 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-backward-compat" agent skill from https://github.com/Nice3point/RevitToolkit/tree/main/.agents/skills/revit-toolkit-backward-compat into .claude/skills/revit-toolkit-backward-compat/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "revit-toolkit-backward-compat", 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-backward-compatType 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-backward-compat -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Nice3point/RevitToolkit revit-toolkit-backward-compat --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-backward-compat .agents/skills/revit-toolkit-backward-compat && 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-backward-compat" agent skill from https://github.com/Nice3point/RevitToolkit/tree/main/.agents/skills/revit-toolkit-backward-compat into .agents/skills/revit-toolkit-backward-compat/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "revit-toolkit-backward-compat", 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-backward-compat -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Nice3point/RevitToolkit revit-toolkit-backward-compat --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-backward-compat .cursor/skills/revit-toolkit-backward-compat && 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-backward-compat" agent skill from https://github.com/Nice3point/RevitToolkit/tree/main/.agents/skills/revit-toolkit-backward-compat into .cursor/skills/revit-toolkit-backward-compat/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "revit-toolkit-backward-compat", 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-backward-compat--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-backward-compat -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Nice3point/RevitToolkit revit-toolkit-backward-compat --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-backward-compat .gemini/skills/revit-toolkit-backward-compat && 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-backward-compat" agent skill from https://github.com/Nice3point/RevitToolkit/tree/main/.agents/skills/revit-toolkit-backward-compat into .gemini/skills/revit-toolkit-backward-compat/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "revit-toolkit-backward-compat", 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-backward-compatInstalls 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-backward-compat -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-backward-compat .github/skills/revit-toolkit-backward-compat && 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-backward-compat" agent skill from https://github.com/Nice3point/RevitToolkit/tree/main/.agents/skills/revit-toolkit-backward-compat into .github/skills/revit-toolkit-backward-compat/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "revit-toolkit-backward-compat", 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-backward-compat -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-backward-compat --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-backward-compat .opencode/skills/revit-toolkit-backward-compat && 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-backward-compat" agent skill from https://github.com/Nice3point/RevitToolkit/tree/main/.agents/skills/revit-toolkit-backward-compat into .opencode/skills/revit-toolkit-backward-compat/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "revit-toolkit-backward-compat", 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-backward-compatEvolve 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…
Revit Toolkit Backward Compat is an agent skill from 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, and treat both the generated API shape and the RVTTK diagnostic ids as stable public surface. USE FOR: renaming, replacing, or removing any public type or member; adding an overload or parameter to a shipped API; changing a generated member name or a diagnostic id; recording the deprecation in the changelog. DO NOT USE…
Its SKILL.md is about 2k 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 Changelog and release notes. It works with JetBrains IDEs and .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 Backward Compat loads about 2k tokens when it runs. Until then it costs about 150 tokens; SKILL.md has 793 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). 793 words, ~2,026 tokens.
.claude/skills/revit-toolkit-backward-compat/SKILL.md (or your agent's skills folder).Nice3point.Revit.Toolkit is a public NuGet library with downstream consumers; a breaking change breaks other people's builds.
Never delete or change an existing public API; deprecate it and keep it working.
Public surface is broader than the hand-written types: the shape the source generator emits and the RVTTK#### diagnostic ids the analyzers report are contracts too.
The only safe evolutions are additive or a deprecation.
To rename or replace a member, mark the old one [Obsolete] with a message that names the replacement, and add a JetBrains [CodeTemplate]; ReSharper and Rider auto-convert call sites.
The obsolete member forwards to its replacement and stays functional.
[Obsolete("Use Application instead")]
[CodeTemplate(
searchTemplate: "UiApplication",
Message = "UiApplication is obsolete, use Application instead",
ReplaceTemplate = "Application",
ReplaceMessage = "Replace with Application")]
public UIApplication UiApplication => Application;searchTemplate is the pattern ReSharper matches at a call site, and ReplaceTemplate is what it substitutes; Message shows on the obsolete member and ReplaceMessage on the quick-fix.
Use a [CodeTemplate] placeholder; the auto-conversion carries the call site's arguments and type arguments across.
$args$ in both templates:[Obsolete("Use RevitApiContext.BeginFailureSuppressionScope instead")]
[CodeTemplate(
searchTemplate: "Context.SuppressFailures($args$)",
Message = "Context.SuppressFailures is obsolete, use RevitApiContext.BeginFailureSuppressionScope with 'using' statement instead",
ReplaceTemplate = "RevitApiContext.BeginFailureSuppressionScope($args$)",
ReplaceMessage = "Replace with RevitApiContext.BeginFailureSuppressionScope")]
public static void SuppressFailures(bool resolveErrors = true)
{
// original implementation kept intact
}$T$:[Obsolete("Use BeginAssemblyResolveScope<T> instead for automatic resource management")]
[CodeTemplate(
searchTemplate: "BeginAssemblyResolve<$T$>()",
Message = "BeginAssemblyResolve is obsolete. Use BeginAssemblyResolveScope with 'using' statement instead",
ReplaceTemplate = "BeginAssemblyResolveScope<$T$>()",
ReplaceMessage = "Replace with BeginAssemblyResolveScope")]
public static void BeginAssemblyResolve<T>()
{
BeginAssemblyResolveScope(typeof(T));
}Omit [CodeTemplate] only when there is no mechanical call-site rewrite, such as retiring a stateful method that a scope now replaces (RestoreDialogs), and still keep the member functional.
An obsolete member keeps calling the original implementation, or forwards to the property, field, or method it became.
It must not throw and must not silently change behavior; a consumer who has not migrated keeps building and running.
A simple rename forwards directly (UiApplication => Application); a replaced method forwards to the new API (BeginAssemblyResolve<T> calls BeginAssemblyResolveScope).
To replace a class, create the new type, mark the old one [Obsolete], and keep it functional.
Keep [PublicAPI] on the deprecated class; its contract stays documented.
[PublicAPI]
[Obsolete("Use Nice3point.Revit.Toolkit.External.ExternalEvent class or ExternalEvent source-generator instead")]
public class ActionEventHandler : ExternalEventHandler
{
// full implementation stays working
}The static Context class shows the same pattern at scale: the type is [Obsolete] and every member carries its own [Obsolete] and [CodeTemplate] forwarding to RevitContext/RevitApiContext.
The [ExternalEvent] generator's output and the analyzers' diagnostic ids are as much a contract as a hand-written method.
RVTTK#### id; assign the next unused id for a new rule.AnalyzerReleases.Unshipped.md; the shipped ids stay in AnalyzerReleases.Shipped.md.Record every addition, deprecation, and behavior change in the current section of CHANGELOG.md, and add a migration example at the end of the section for any breaking change or deprecation.
Update the README and XML docs in the same change.
Then confirm the obsolete member still compiles and its callers still build.
dotnet run -c Release[Obsolete] naming the replacement and a [CodeTemplate] whose placeholder matches the member shape ($args$, $T$).[Obsolete] and still functional; the new class exists alongside it.RVTTK#### id was renumbered or reused; a new rule is recorded in AnalyzerReleases.Unshipped.md.| Pitfall | Correct approach |
|---|---|
| Changing a method signature or return type in place | Add a new overload; leave the shipped one untouched. |
| Deleting or renaming a public member outright | Deprecate with [Obsolete] + [CodeTemplate] and keep it functional. |
| An obsolete member that throws or changes behavior | Forward to the replacement; unmigrated callers keep working. |
| Adding a required parameter to a shipped method | Add it as optional and only at the end, or add an overload. |
| Renaming a generated property or reusing a diagnostic id | Treat generated names and RVTTK#### ids as public surface. |
| Deprecating without a changelog migration note | Record the change and add a migration example for the deprecation. |
© 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-backward-compat of Nice3point/RevitToolkit.
Open the folder on GitHubat commit b5abec5
Revit Toolkit Backward Compat 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 Backward Compat this skillNice3point/RevitToolkit | 176 | — | ~2k | Automated safety check: Pass | MIT | |
| ChangelogJetBrains/ideavim | 10k | 1 repos | ~2.7k | Automated safety check: Pass | MIT | |
| .NET Release Verificationdotnet/core | 22k | — | ~1.8k | Automated safety check: Pass | MIT | |
| Add Analyzerdotnet/roslynator | 3.5k | — | ~1.3k | Automated safety check: Pass | Custom licence | |
| Generate .NET Release changes.jsondotnet/core | 22k | — | ~1.7k | Automated safety check: Pass | MIT | |
| Release Feature Scoringdotnet/core | 22k | — | ~2.2k | Automated safety check: Pass | MIT |
JetBrains/ideavim
Maintains the IdeaVim changelog (CHANGES.md). An agent skill from JetBrains/ideavim.
dotnet/core
Validates .NET release data with the release-notes CLI: download URL liveness, SHA512 hashes, CDN latest.version files and aka.ms redirects.
dotnet/roslynator
A skill your agent uses when adding a new RCS diagnostic in roslynator (RCS0 formatting, RCS1 general, RCS9 code-analysis), wiring roslynator EditorConfig options, or when docs say CHANGELOG.md…
dotnet/core
Produces the changes.json manifest for a .NET preview, RC or GA milestone by choosing the right VMR base and head refs and running release-notes generate changes.
dotnet/core
Ranks the changes in a release manifest and writes a scored features file that release notes, docs and blog posts can each cut at their own threshold.
dotnet/core
Audits a scored features.json file and its draft release notes against editorial examples to catch over-scored, under-scored, or missing entries.
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…
Nice3point/RevitToolkit
Uphold the design contract of the Nice3point.Revit.Toolkit runtime library, that wraps the raw Revit add-in API.
Works with
Categories
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…. Revit Toolkit Backward Compat is an agent skill from Nice3point/RevitToolkit.Toolkit without breaking downstream consumers: deprecate a renamed or replaced member with [Obsolete] with a JetBrains [CodeTemplate] auto-conversion, and treat both the generated API shape and the RVTTK diagnostic ids as stable public surface.
Revit Toolkit Backward Compat fits situations like: removing any public type; adding an overload; parameter to a shipped API; changing a generated member name.
Run `npx skills add Nice3point/RevitToolkit --skill revit-toolkit-backward-compat -a claude-code`. Or copy the skill folder (.agents/skills/revit-toolkit-backward-compat in Nice3point/RevitToolkit) into .claude/skills/revit-toolkit-backward-compat in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Nice3point/RevitToolkit --skill revit-toolkit-backward-compat -a codex`. Or copy the skill folder (.agents/skills/revit-toolkit-backward-compat in Nice3point/RevitToolkit) into .agents/skills/revit-toolkit-backward-compat 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-backward-compat -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-backward-compat, .gemini/skills/revit-toolkit-backward-compat, .github/skills/revit-toolkit-backward-compat and .opencode/skills/revit-toolkit-backward-compat in your project.
Going by SKILL.md and its folder, Revit Toolkit Backward Compat 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 Backward Compat is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 2k tokens (SKILL.md is roughly 8.1k 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 Backward Compat: Changelog (JetBrains/ideavim, 10k stars), .NET Release Verification (dotnet/core, 22k stars), Add Analyzer (dotnet/roslynator, 3.5k stars) and Generate .NET Release changes.json (dotnet/core, 22k 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 7, 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.