Help users grant a limited, revocable session key to a bot, backend service, or AI agent instead of handing over full control of an ERC-4337 smart account, using Nethereum's SmartSession validator…
Install the "smart-sessions-and-policies" agent skill from https://github.com/Nethereum/Nethereum/tree/master/plugins/nethereum-skills/skills/smart-sessions-and-policies into .claude/skills/smart-sessions-and-policies/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "smart-sessions-and-policies", 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.
Type 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.
skills CLI
$ npx skills add Nethereum/Nethereum --skill smart-sessions-and-policies -a codex
Project install goes to .agents/skills/; add -g for ~/.codex/skills/.
Install the "smart-sessions-and-policies" agent skill from https://github.com/Nethereum/Nethereum/tree/master/plugins/nethereum-skills/skills/smart-sessions-and-policies into .agents/skills/smart-sessions-and-policies/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "smart-sessions-and-policies", 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.
skills CLI
$ npx skills add Nethereum/Nethereum --skill smart-sessions-and-policies -a cursor
Project install goes to .agents/skills/; add -g for ~/.cursor/skills/.
Install the "smart-sessions-and-policies" agent skill from https://github.com/Nethereum/Nethereum/tree/master/plugins/nethereum-skills/skills/smart-sessions-and-policies into .cursor/skills/smart-sessions-and-policies/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "smart-sessions-and-policies", 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.
--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
skills CLI
$ npx skills add Nethereum/Nethereum --skill smart-sessions-and-policies -a gemini-cli
Project install goes to .agents/skills/; add -g for ~/.gemini/skills/.
Install the "smart-sessions-and-policies" agent skill from https://github.com/Nethereum/Nethereum/tree/master/plugins/nethereum-skills/skills/smart-sessions-and-policies into .gemini/skills/smart-sessions-and-policies/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "smart-sessions-and-policies", 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.
Installs 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).
skills CLI
$ npx skills add Nethereum/Nethereum --skill smart-sessions-and-policies -a github-copilot
Project install goes to .agents/skills/; add -g for ~/.copilot/skills/.
Install the "smart-sessions-and-policies" agent skill from https://github.com/Nethereum/Nethereum/tree/master/plugins/nethereum-skills/skills/smart-sessions-and-policies into .github/skills/smart-sessions-and-policies/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "smart-sessions-and-policies", 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.
skills CLI
$ npx skills add Nethereum/Nethereum --skill smart-sessions-and-policies -a opencode
OpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
Install the "smart-sessions-and-policies" agent skill from https://github.com/Nethereum/Nethereum/tree/master/plugins/nethereum-skills/skills/smart-sessions-and-policies into .opencode/skills/smart-sessions-and-policies/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "smart-sessions-and-policies", 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.
Facts
Skill name
smart-sessions-and-policies
GitHub stars
2.3k
Token cost
~3.9k tokens
SKILL.md length
1,021 words
Files
1
Skills in repo
71
Repo updated
First seen
Licence
MIT
At a glance
Help users grant a limited, revocable session key to a bot, backend service, or AI agent instead of handing over full control of an ERC-4337 smart account, using Nethereum's SmartSession validator…
The user mentions session keys
SKILL.md covers When to Use This, Packages, The Simple Way and Mental Model: A Session Is a…, plus 5 more sections
Calls dotnet
Scoped permissions
What it does
Smart Sessions And Policies is an agent skill from Nethereum/Nethereum. Help users grant a limited, revocable session key to a bot, backend service, or AI agent instead of handing over full control of an ERC-4337 smart account, using Nethereum's SmartSession validator and policies (SudoPolicy, UniActionPolicy, ERC20SpendingLimitPolicy). Use whenever the user mentions session keys, scoped permissions, delegated signing for a bot/agent, spending limits on a smart account, revocable wallet access, automated trading bot authorization, or SmartSession/permissionId, in .NET/C.
Its SKILL.md is about 3.9k 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 Business, Finance & HR, covering Trading and backtesting. It works with C# and .NET. The repository describes itself as: Ethereum .Net cross platform integration library. The licence is MIT.
When your agent uses it
The user mentions session keys
Scoped permissions
Delegated signing for a bot/agent
Spending limits on a smart account
Example prompts
“/smart-sessions-and-policies”
What it can do on your machine
Read from SKILL.md and the folder at commit 229f278. 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
Links to these hosts (documentation or services it may open):
docs.nethereum.com
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
Smart Sessions And Policies loads about 3.9k tokens when it runs. Until then it costs about 134 tokens; SKILL.md has 1,021 words of instructions outside code blocks.
Always· name and description, kept in context so the agent knows when to use it
~134
When it runs· the whole SKILL.md, loaded when a task matches
~3.9k
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.
Download SKILL.mdSave it as .claude/skills/smart-sessions-and-policies/SKILL.md (or your agent's skills folder).
name
smart-sessions-and-policies
description
Help users grant a limited, revocable session key to a bot, backend service, or AI agent instead of handing over full control of an ERC-4337 smart account, using Nethereum's SmartSession validator and policies (SudoPolicy, UniActionPolicy, ERC20SpendingLimitPolicy). Use whenever the user mentions session keys, scoped permissions, delegated signing for a bot/agent, spending limits on a smart account, revocable wallet access, automated trading bot authorization, or SmartSession/permissionId, in .NET/C#.
user-invocable
true
Smart Sessions and Policies: Scoped, Revocable Session Keys
An automated trading bot, a backend service that pays out rewards, an AI agent acting on a user's behalf — all of them need to sign UserOperations, but none of them should hold the account owner's key. Handing over the owner key gives unlimited, permanent authority: it can call anything, spend anything, forever, until someone rotates the key everywhere. A session key is the alternative: a fresh, disposable keypair that authenticates through the account's SmartSessionERC-7579 validator, constrained by one or more policies that say exactly what it may do — call this one function, transfer up to this many tokens — and nothing else. Revoke it and the authority is gone; the owner key never left cold storage.
When to Use This
User wants to let a bot/agent/backend act on an account without giving it full control
User wants a spending limit or one-function-only permission for a delegated key
User mentions session keys, scoped permissions, or revocable access for a smart account
User is building automation: recurring payments, DCA bots, reward payouts, agentic execution
User wants to know what happens when a call is out of policy
You need an IAAClient and an already-deployed, ERC-7579-compatible smart account with at least one validator (see the modular-accounts skill). On top of that, sessions deploy generated Nethereum contract services — none requiring hand-written ABI:
Contract
Generated service
Role
SmartSession
SmartSessionService
The TYPE_VALIDATOR module every session authenticates through
ECDSASessionValidator
ECDSASessionValidatorService
The ISessionValidator a session's signature is checked against — separate from the account's own ECDSAValidator
SudoPolicy
SudoPolicyService
An action/UserOp policy that always allows — "no further restriction"
UniActionPolicy
UniActionPolicyService
An action policy with per-argument conditions and a value limit
ERC20SpendingLimitPolicy
ERC20SpendingLimitPolicyService
An action policy that tracks cumulative ERC-20 spend against a limit
csharp
using System.Numerics;
using Nethereum.Hex.HexConvertors.Extensions;
using Nethereum.AccountAbstraction.ERC7579.Modules.SmartSession;
using Nethereum.AccountAbstraction.Contracts.Modules.SmartSessions.SmartSession;
using Nethereum.AccountAbstraction.Contracts.Modules.SmartSessions.SmartSession.ContractDefinition;
using Nethereum.AccountAbstraction.Contracts.Modules.SmartSessions.Policies.SudoPolicy;
using Nethereum.AccountAbstraction.Contracts.Modules.SmartSessions.Policies.SudoPolicy.ContractDefinition;
using Nethereum.AccountAbstraction.Contracts.Modules.SmartSessions.Policies.UniActionPolicy;
The Simple Way
csharp
using Nethereum.AccountAbstraction; // AATransactionReceipt
using Nethereum.AccountAbstraction.Client;
using Nethereum.AccountAbstraction.Contracts.Core.NethereumAccount;
using Nethereum.AccountAbstraction.ERC7579.Modules;
using Nethereum.AccountAbstraction.ERC7579.Modules.SmartSession;
using Nethereum.Signer;
// 1. A fresh keypair - the agent/bot process holds ONLY this, never the account owner's key.
var sessionKey = EthECKey.GenerateKey();
// 2. Scope it to exactly one action: call count() on `counterAddress`, no other function, no other
// target. SudoPolicy means "no further restriction on the args of THIS action" - see below for
// when you'd use UniActionPolicy or a spending limit instead.
var salt = new byte[32];
Guid.NewGuid().ToByteArray().CopyTo(salt, 0);
var config = new SmartSessionConfig()
.WithSessionValidator(sessionValidatorAddress) // a deployed ECDSASessionValidator
.WithSessionValidatorInitData(sessionKey.GetPublicAddress())
.WithSalt(salt)
// UnrestrictedAction's selector arg is the 4-byte function selector as a hex string, e.g. "0x06661abd".
.WithAction(ActionDataBuilder.UnrestrictedAction(counterAddress, countSelector, sudoPolicyAddress));
// 3. Enable it: installs SmartSession (first time only) and this session, in one UserOp, signed by
// the account's OWNER key - the session key never touches this step.
config.ModuleAddress = smartSessionAddress;
var accountService = new NethereumAccountService(web3, account.Address);
accountService.UseAccountAbstraction(account, aaClient);
await accountService.InstallModuleAndWaitForReceiptAsync(config);
// 4. Attach a SEPARATE NethereumSmartAccount for the SAME address, authenticated by the session key.
var permissionId = await smartSession.GetPermissionIdQueryAsync(config.ToSession());
var sessionAccount = aaClient.GetAccount(
account.Address,
new SmartSessionKeySigningService(sessionKey, permissionId),
new SmartSessionValidatorModule(smartSessionAddress, permissionId));
// 5. From here, the session key signs - the owner key is never involved again.
counter.UseAccountAbstraction(sessionAccount, aaClient);
var receipt = (AATransactionReceipt)await counter.CountRequestAndWaitForReceiptAsync();
Mental Model: A Session Is a Scoped Permission Set
SmartSession is one ERC-7579 validator contract shared by every session on every account. A session's identity is its PermissionId — a bytes32 derived only from SessionValidator, SessionValidatorInitData, and Salt (SmartSessionConfig.ToSession()). Two sessions with the same validator, init data, and salt collide on the same PermissionId even if their actions differ — always use a fresh, random salt per session.
Policies attach at two scopes:
UserOpPolicies (WithUserOpPolicy/WithSudoPolicy) — evaluated once per UserOperation, regardless of which function it calls. Use for session-wide gates.
Actions (WithAction/ActionDataBuilder) — evaluated per (target, selector) pair. This is where most real scoping happens.
Policy contract
What it allows
Nethereum builder
SudoPolicy
Everything, unconditionally, for the scope it's attached to
One function, with per-argument conditions and/or a native-value limit
UniActionPolicyBuilder
ERC20SpendingLimitPolicy
transfer/approve/transferFrom up to a cumulative token limit
ERC20SpendingLimitBuilder
A single session can mix a SudoPolicy-scoped action with a UniActionPolicy-scoped one.
SudoPolicy: Unconstrained Within the Scope
SudoPolicy scoped to a specific action is safe: the session can still only call that one (target, selector) — it just means "don't restrict the arguments further." Reach for it when a function has nothing worth restricting, e.g. a zero-argument function like count():
csharp
var result = await sudoPolicyService.CheckActionQueryAsync(
configId, account, target, value, calldata);
// result == 0 (SIG_VALIDATION_SUCCESS) - SudoPolicy never inspects arguments.
SudoPolicy scoped as a UserOpPolicy is a much bigger grant — it removes UserOp-level gating entirely, leaving only whatever action policies you've attached (or none) as the real boundary.
UniActionPolicy: One Action, With Rules
UniActionPolicy is the tool for "this session may call this one function, and here's what its arguments must look like":
csharp
using Nethereum.AccountAbstraction.ERC7579.Modules.SmartSession;
// A DCA bot may call swap() on ONE router, up to 100 (token-unit) worth of value per call.
var maxSwapValue = BigInteger.Parse("100000000");
var policyData = new UniActionPolicyBuilder()
.WithValueLimit(maxSwapValue)
.Build();
var session = new SmartSessionConfig()
.WithSessionValidator(sessionKeyValidator)
.WithSalt(salt)
.WithAction(new ActionDataBuilder()
.WithTarget(uniswapRouter)
.WithSelector(swapSelector)
.WithUniActionPolicy(uniActionPolicy, policyData)
.Build())
.ToSession();
WithValueLimit caps the native-token value sent with the call unconditionally. For calldata arguments, add up to 16 ParamRules, each comparing one 32-byte word at a fixed offset into the call's argument data (not raw calldata — argument 0 starts right after the 4-byte selector):
csharp
var policyInitData = new UniActionPolicyBuilder()
.WithEqualityCheck(offset: 0, expectedValue: ownerAddress.HexToByteArray()) // arg 0 must equal owner
.WithMaxValue(offset: 32, maxValue: capBytes) // arg 1 <= cap
.WithLimitedUsage(offset: 32, refValue: capBytes, limit: totalBudget) // AND track cumulative usage
.Build();
A zero-argument function cannot be scoped by UniActionPolicy — its checkAction requires at least one ParamRule and unconditionally reads 32 bytes of argument data, so it reverts on a truly zero-argument call. Use SudoPolicy for that action instead.
Show full SKILL.md (395 more words)Show less
Session Lifecycle: Enable → Use → Out-of-Policy Rejection
Enable
Installs SmartSession (first time) and the session's policies together, signed by the account's existing validator — the session key isn't involved yet:
csharp
var sessionConfig = new SmartSessionConfig()
.WithSessionValidator(config.SessionValidatorAddress)
.WithSessionValidatorInitData(sessionKey.GetPublicAddress())
.WithSalt(salt)
.WithAction(new ActionDataBuilder()
.WithTarget(counterAddress).WithSelector(countSelector).WithSudoPolicy(config.SudoPolicyAddress).Build())
.WithAction(new ActionDataBuilder()
.WithTarget(counterAddress).WithSelector(gasWasterSelector)
.WithUniActionPolicy(config.UniActionPolicyAddress, gasWasterCapInitData).Build());
var session = sessionConfig.ToSession();
var permissionId = await smartSession.GetPermissionIdQueryAsync(session);
if (!smartSessionInstalled)
{
// First session on this account: install SmartSession AND enable this session in the SAME UserOp.
sessionConfig.ModuleAddress = config.SmartSessionAddress;
receipt = (AATransactionReceipt)await accountService.InstallModuleAndWaitForReceiptAsync(sessionConfig);
}
else
{
// SmartSession already installed (a prior session exists): a further session goes through
// SmartSession's own enableSessions, itself a self-call.
smartSession.UseAccountAbstraction(account, client);
receipt = (AATransactionReceipt)await smartSession.EnableSessionsRequestAndWaitForReceiptAsync(
new List<Session> { session });
}
Use
IAAClient.GetAccount attaches a second, independentNethereumSmartAccount to the same address, authenticated by the session key:
csharp
var sessionAccount = client.GetAccount(
account.Address,
new SmartSessionKeySigningService(sessionKey, permissionId),
new SmartSessionValidatorModule(config.SmartSessionAddress, permissionId));
counter.UseAccountAbstraction(sessionAccount, client);
var receipt = (AATransactionReceipt)await counter.CountRequestAndWaitForReceiptAsync();
SmartSessionKeySigningService.SignTypedDataV4 signs the UserOperation's EIP-712 digest with the raw session key, then wraps it in SmartSession's USE-mode envelope (mode(1 byte) || permissionId(32 bytes) || signature(65 bytes)). PersonalSign throws NotSupportedException — only SignTypedDataV4 (UserOperation signing) is supported.
Out-of-Policy Rejection
A call the session key cannot make fails on-chain during validation, before it does anything:
csharp
// Within the UniActionPolicy cap of 3 - succeeds.
var allowedReceipt = (AATransactionReceipt)await counter.GasWasterRequestAndWaitForReceiptAsync(repeat: 1, "");
// allowedReceipt.UserOpSuccess == true
// Beyond the cap - the session key CANNOT do this, and the call is rejected.
try
{
var overCapReceipt = (AATransactionReceipt)await counter.GasWasterRequestAndWaitForReceiptAsync(repeat: 100, "");
}
catch (Exception ex)
{
// gasWaster(100) was rejected: UniActionPolicy's checkAction failed the argument rule.
}
SmartSession.validateUserOp treats a failed policy result as fatal — it reverts with PolicyViolation(permissionId, policy) during UserOperation validation, so the call never executes: no partial state change, no gas spent on the action itself. ERC20SpendingLimitPolicy fails the identical way the moment alreadySpent + amount > spendingLimit.
SmartSession.removeSession(permissionId) is a self-call, like enableSessions, and clears every policy and the session validator entry for that permissionId. This on-chain call is the only thing that actually revokes authority — any local ValidAfter/ValidUntil bookkeeping is application-side only and does not touch the chain; a session key your app has "forgotten" but never revoked on-chain can still sign valid UserOperations for as long as its policies allow.
Common Mistakes
Reusing a salt across sessions with different actions — they collide on the same PermissionId, and a later install/enableSessions overwrites the earlier session's action set.
Scoping a zero-argument function with UniActionPolicy — reverts. Use SudoPolicy instead.
Calling PersonalSign on a session-key account — throws NotSupportedException.
Forgetting .WithPaymasterPermission(true) — if a paymaster sponsors this session's gas, the session itself must permit it, or the bundler rejects the UserOperation.
Assuming revocation is local — only the on-chain removeSession call stops a session key from signing.
Reach for a session key whenever the caller shouldn't have full account control even temporarily. For recovering a lost owner key entirely, see the social-recovery skill.
Smart Sessions And Policies 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.
Smart Sessions And Policies compared with similar skills
Skill
Stars
Used in
Tokens
Auto-check
Licence
Repo updated
Smart Sessions And Policies this skillNethereum/Nethereum
Calculate technical analysis indicators (EMA, RSI, MACD, ADX, Bollinger Bands, and dozens more) from OHLCV price bars, in batch or live from a market feed, in C with the FacioQuo.Stock.Indicators v3…
Guides building C# and .NET apps on the Tiger Brokers OpenAPI SDK: setup, market data, orders, accounts, options and real-time push, defaulting to paper trading.
面向中文自然语言的 Tushare 数据研究技能。用于把“看看这只股票最近怎么样”“帮我查财报趋势”“最近哪个板块最强”“北向资金在买什么”“给我导出一份行情数据”这类请求,转成可执行的数据获取、清洗、对比、筛选、导出与简要分析流程。适用于 A 股、指数、ETF/基金、财务、估值、资金流、公告新闻、板块概念与宏观数据等研究场景。
Help users run an ERC-4337 bundler using Nethereum — set up in-process or standalone bundlers with mempool, validation, reputation, and JSON-RPC server.
Help users implement ERC-4337 Account Abstraction with Nethereum — send UserOperations, use smart accounts, route contract calls through a bundler, enable gasless transactions, or work with AA in…
Help users grant a limited, revocable session key to a bot, backend service, or AI agent instead of handing over full control of an ERC-4337 smart account, using Nethereum's SmartSession validator…. Smart Sessions And Policies is an agent skill from Nethereum/Nethereum. Help users grant a limited, revocable session key to a bot, backend service, or AI agent instead of handing over full control of an ERC-4337 smart account, using Nethereum's SmartSession validator and policies (SudoPolicy, UniActionPolicy, ERC20SpendingLimitPolicy).
When should I use Smart Sessions And Policies?
Smart Sessions And Policies fits situations like: the user mentions session keys; scoped permissions; delegated signing for a bot/agent; spending limits on a smart account.
How do I install Smart Sessions And Policies in Claude Code?
Run `npx skills add Nethereum/Nethereum --skill smart-sessions-and-policies -a claude-code`. Or copy the skill folder (plugins/nethereum-skills/skills/smart-sessions-and-policies in Nethereum/Nethereum) into .claude/skills/smart-sessions-and-policies in your project. Claude Code loads it when a task matches its description.
How do I install Smart Sessions And Policies in Codex?
Run `npx skills add Nethereum/Nethereum --skill smart-sessions-and-policies -a codex`. Or copy the skill folder (plugins/nethereum-skills/skills/smart-sessions-and-policies in Nethereum/Nethereum) into .agents/skills/smart-sessions-and-policies in your project. Codex loads it when a task matches its description.
Can I use Smart Sessions And Policies 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 Nethereum/Nethereum --skill smart-sessions-and-policies -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/smart-sessions-and-policies, .gemini/skills/smart-sessions-and-policies, .github/skills/smart-sessions-and-policies and .opencode/skills/smart-sessions-and-policies in your project.
What does Smart Sessions And Policies need to run?
Going by SKILL.md and its folder, Smart Sessions And Policies needs the command-line tools its instructions call (dotnet).
Does Smart Sessions And Policies access the network?
SKILL.md names 1 domain. As links in the text: docs.nethereum.com. This is read from the text; nothing was executed.
Is Smart Sessions And Policies 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 Smart Sessions And Policies use?
Smart Sessions And Policies is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
How many tokens does Smart Sessions And Policies use?
About 3.9k 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 Smart Sessions And Policies?
Skills that share tags, products or a category with Smart Sessions And Policies: Stock Indicators Dotnet (facioquo/stock-indicators-dotnet, 1.2k stars), Tiger Brokers OpenAPI C# SDK (qusong0627/QuantMind, 1.7k stars), Dotnet Performance Review (atherio-danp/cde-dotnetcc, 109 stars) and Tushare Data (zillionare/zillionare, 322 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Who maintains Smart Sessions And Policies?
Nethereum (a GitHub organization) maintains it in Nethereum/Nethereum, which has 2,260 GitHub stars. The repository holds 71 skills in this directory. The repository was last updated on October 5, 2026.
Source: Nethereum/Nethereum on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.