From devolens
Work on the Cryptolens .NET SDK and .NET-specific software licensing integrations. Use when Codex needs to inspect, modify, review, test, or explain the `Cryptolens/cryptolens-dotnet` repository, especially license key verification, offline license verification, cached license files, Web API 3 activation, floating licenses, trial licenses, machine binding, node-locking, user-account authentication, NuGet packaging, .NET Framework versus .NET Standard behavior, or troubleshooting proxy, TLS, Unity, Mono, or Windows-only SDK issues.
How this skill is triggered — by the user, by Claude, or both
Slash command
/devolens:cryptolens-dotnetThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Use this skill for work in the Cryptolens .NET SDK repository: [github.com/Cryptolens/cryptolens-dotnet](https://github.com/Cryptolens/cryptolens-dotnet).
Use this skill for work in the Cryptolens .NET SDK repository: github.com/Cryptolens/cryptolens-dotnet.
Treat GitHub as the primary source of truth. Do not assume the user has the repo cloned locally. If a local checkout is unavailable, search and inspect files directly in github.com/Cryptolens/cryptolens-dotnet by repo-relative path. If a local checkout is also available, use it as a convenience for editing and validation. Start with repo-map.md, then open only the repo files needed for the task. Keep the SDK's public API stable unless the task explicitly asks for a breaking change.
Before adding or explaining machine-binding checks, read the shared Cryptolens rule in licensing-invariants.md.
Before adding or explaining floating licensing, read the shared floating-license rule in floating-licenses.md.
If an SDK call returns a non-empty message, read the shared error table in api-error-messages.md before diagnosing the issue.
When the user asks for implementation patterns or snippets based on the official docs, read official-examples.md. It distills the linked Cryptolens tutorials into current C# and VB.NET guidance and calls out where the docs still show older helper choices.
README.md first for installation, compatibility, and support caveats.SKMv3, LicenseRelated, or UserAccountAuth files.SKM.cs, the SKGL namespace, and the README Old examples section as legacy compatibility material, not templates for new code.Open Cryptolens.Licensing/SKMv3/Key.cs, Cryptolens.Licensing/SKMv3/Helpers.cs, Cryptolens.Licensing/LicenseRelated/LicenseKey.cs, and Cryptolens.Licensing/ExtensionMethods.cs.
Preserve these invariants unless the task explicitly changes them:
SKM.V3.Methods.Key, SKM.V3.Methods.Helpers, SKM.V3.Models.*, and SKM.V3.LicenseKey in new code, docs, and examples.SKGL.SKM, SKGL.ExtensionMethods, or other Web API 2 helpers unless the task is specifically about legacy compatibility.Cryptolens.Licensing/SKM.cs as an obsolete compatibility layer. It is marked [Obsolete] and should not be the default path for fixes, examples, or new integrations.Key.Activate(...) overload that returns RawResponse together with LicenseKey.FromResponse(...) when the user needs a signed, offline-storable license blob.RawResponse + LicenseKey.FromResponse(...) approach as an approved fallback and mention it explicitly.license.SaveAsString(), license.LoadFromString(...), and license.LoadFromFile(...) instead of inventing a custom serialization format.Helpers.GetMachineCodePI() for new cross-platform snippets. Use v=2 only when the task explicitly needs parity with Python or another SDK that expects that format.Helpers.GetMachineCode() in new generic samples because the SYSTEM_MANAGEMENT build marks it obsolete and it can push callers toward older Windows-only behavior.license.IsOnRightMachine() extension helper in new code. It falls back to older SHA1 and SKGL.SKM paths. Prefer SKM.V3.Methods.Helpers.IsOnRightMachine(...), Helpers.IsOnRightMachinePI(...), or license.IsOnRightMachine(machineCode, ...) with an explicit machine code.Helpers.IsOnRightMachine... checks as meaningful only when Maximum Number of Machines > 0. If that value is 0, explain that node-locking is disabled rather than calling the SDK broken.productId=3349 or any other tenant-specific value from the upstream docs. Make product ids, access tokens, RSA public keys, and license keys user-supplied or clearly labeled placeholders.MaxOverdraft to 0 and only use a positive value when the user explicitly wants overdraft behavior.If the user asks for rollback detection or examples that pass checkWithInternetTime: true into HasNotExpired(...), call out that this routes through the legacy SKGL.SKM.TimeCheck() path and be explicit about the compatibility tradeoff.
Use the repo README and SKMv3/Helpers.cs for supported machine-code behavior.
Cryptolens.Licensing.CrossPlatform for Mono, Unity, Linux, or Mac guidance.Helpers.WindowsOnly = true limited to the narrow Windows/.NET Framework workaround described in the README. Do not add it to new general-purpose snippets if GetMachineCodePI() or an explicit machine code is sufficient.v=2 path or only with current .NET consumers.Open Cryptolens.Licensing/SKMv3/User.cs, Cryptolens.Licensing/UserAccountAuth/UserLoginAuth.cs, Cryptolens.Licensing/Models/WebAPIModels.cs, and Cryptolens.Licensing/Models/UserLoginAuthModels.cs.
user-verification tutorial, prefer SKM.V3.Methods.UserAuth.Login(...) with LoginUserModel.SKM.V3.Accounts.UserAccount.GetLicenseKeys(...).Tutorials/v.101-beta.md as historical background only. Do not copy its beta-era namespace names or setup steps into new guidance unless the task explicitly asks for old-package compatibility.UserAccount.GetLicenseKeys(...) flows.Use the repo README.md for supported install and troubleshooting flows, but read it critically:
Old examples section and any references to SKGL.SKM are legacy material. Modernize those examples if the task asks for docs cleanup.SKM.V3 APIs and the current package names in the same pass.Use Cryptolens.Licensing/Cryptolens.Licensing.csproj for package metadata, target frameworks, conditional dependencies, and the SYSTEM_MANAGEMENT build flag.
SYSTEM_MANAGEMENT and cross-platform builds.If a local checkout is available, run validation from the repo root. If the repo is only available through GitHub, inspect and search the GitHub repository directly and restrict the task to review, explanation, or documentation updates unless you also have a writable repository integration.
Prefer the smallest check that proves the change:
dotnet build of Cryptolens.Licensing/Cryptolens.Licensing.csproj, usually starting with -f netstandard2.0SYSTEM_MANAGEMENT, Helpers.WindowsOnly, or .NET Framework-specific code pathsLicenseKey, RawResponse, or offline-file behaviorAvoid relying on the full solution or historical tutorial files as the main safety net. They cover mixed eras of the SDK.
Avoid live activation calls in automated validation unless the task explicitly provides safe test credentials and requires end-to-end verification.
Read repo-map.md for the file map, task routing, and repo-specific gotchas.
Read official-examples.md for current C# and VB.NET example patterns derived from the official Cryptolens docs.
Guides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub cryptolens/skills --plugin devolens