Scaffolding
dotnet/efcore
Implementation details for EF Core scaffolding (reverse engineering).
How to correctly use the Slice type and its companions (SliceReader, SliceWriter, SliceOwner) for binary data in the FoundationDB .NET client / SnowBank.Core codebase.
$ npx skills add SnowBankSDK/foundationdb-dotnet-client --skill snowbank-slices-and-buffers -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install SnowBankSDK/foundationdb-dotnet-client snowbank-slices-and-buffers --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/SnowBankSDK/foundationdb-dotnet-client.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/snowbank-slices-and-buffers .claude/skills/snowbank-slices-and-buffers && 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 "snowbank-slices-and-buffers" agent skill from https://github.com/SnowBankSDK/foundationdb-dotnet-client/tree/master/.claude/skills/snowbank-slices-and-buffers into .claude/skills/snowbank-slices-and-buffers/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "snowbank-slices-and-buffers", 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/SnowBankSDK/foundationdb-dotnet-client/tree/master/.claude/skills/snowbank-slices-and-buffersType 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 SnowBankSDK/foundationdb-dotnet-client --skill snowbank-slices-and-buffers -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install SnowBankSDK/foundationdb-dotnet-client snowbank-slices-and-buffers --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/SnowBankSDK/foundationdb-dotnet-client.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/snowbank-slices-and-buffers .agents/skills/snowbank-slices-and-buffers && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "snowbank-slices-and-buffers" agent skill from https://github.com/SnowBankSDK/foundationdb-dotnet-client/tree/master/.claude/skills/snowbank-slices-and-buffers into .agents/skills/snowbank-slices-and-buffers/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "snowbank-slices-and-buffers", 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 SnowBankSDK/foundationdb-dotnet-client --skill snowbank-slices-and-buffers -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install SnowBankSDK/foundationdb-dotnet-client snowbank-slices-and-buffers --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/SnowBankSDK/foundationdb-dotnet-client.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/snowbank-slices-and-buffers .cursor/skills/snowbank-slices-and-buffers && 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 "snowbank-slices-and-buffers" agent skill from https://github.com/SnowBankSDK/foundationdb-dotnet-client/tree/master/.claude/skills/snowbank-slices-and-buffers into .cursor/skills/snowbank-slices-and-buffers/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "snowbank-slices-and-buffers", 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/SnowBankSDK/foundationdb-dotnet-client.git --path .claude/skills/snowbank-slices-and-buffers--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 SnowBankSDK/foundationdb-dotnet-client --skill snowbank-slices-and-buffers -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install SnowBankSDK/foundationdb-dotnet-client snowbank-slices-and-buffers --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/SnowBankSDK/foundationdb-dotnet-client.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/snowbank-slices-and-buffers .gemini/skills/snowbank-slices-and-buffers && 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 "snowbank-slices-and-buffers" agent skill from https://github.com/SnowBankSDK/foundationdb-dotnet-client/tree/master/.claude/skills/snowbank-slices-and-buffers into .gemini/skills/snowbank-slices-and-buffers/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "snowbank-slices-and-buffers", 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 SnowBankSDK/foundationdb-dotnet-client snowbank-slices-and-buffersInstalls 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 SnowBankSDK/foundationdb-dotnet-client --skill snowbank-slices-and-buffers -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/SnowBankSDK/foundationdb-dotnet-client.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/snowbank-slices-and-buffers .github/skills/snowbank-slices-and-buffers && 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 "snowbank-slices-and-buffers" agent skill from https://github.com/SnowBankSDK/foundationdb-dotnet-client/tree/master/.claude/skills/snowbank-slices-and-buffers into .github/skills/snowbank-slices-and-buffers/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "snowbank-slices-and-buffers", 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 SnowBankSDK/foundationdb-dotnet-client --skill snowbank-slices-and-buffers -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install SnowBankSDK/foundationdb-dotnet-client snowbank-slices-and-buffers --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/SnowBankSDK/foundationdb-dotnet-client.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/snowbank-slices-and-buffers .opencode/skills/snowbank-slices-and-buffers && 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 "snowbank-slices-and-buffers" agent skill from https://github.com/SnowBankSDK/foundationdb-dotnet-client/tree/master/.claude/skills/snowbank-slices-and-buffers into .opencode/skills/snowbank-slices-and-buffers/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "snowbank-slices-and-buffers", 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.
snowbank-slices-and-buffersHow to correctly use the Slice type and its companions (SliceReader, SliceWriter, SliceOwner) for binary data in the FoundationDB .NET client / SnowBank.Core codebase.
Snowbank Slices And Buffers is an agent skill from SnowBankSDK/foundationdb-dotnet-client. How to correctly use the Slice type and its companions (SliceReader, SliceWriter, SliceOwner) for binary data in the FoundationDB .NET client / SnowBank.Core codebase. Slice is a readonly struct (namespace System) — the logical equivalent of a ReadOnlyMemory of bytes with many helpers. Use whenever code constructs or reads a Slice, converts between bytes and other types (Slice.FromBytes/FromStringUtf8/FromInt32/FromFixed64/ToInt64/ToStringUtf8/AsSlice/ToArray), builds or parses a binary buffer…
Its SKILL.md is about 2.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files, including reference files (for example `references/buffers-and-pooling.md` and `references/span-readers-writers.md`).
It sits in Databases, covering NoSQL databases. It works with .NET and C#. The repository describes itself as: C/.NET Binding for FoundationDB Client API. The licence is BSD-3-Clause.
11 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit fdd65b1. 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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are csharp).
From 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.
Snowbank Slices And Buffers loads about 2.8k tokens when it runs, and up to ~5k if it reads all its reference files. Until then it costs about 199 tokens; SKILL.md has 862 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 SnowBankSDK/foundationdb-dotnet-client at commit fdd65b1, republished under its BSD-3-Clause licence (© SnowBankSDK). 862 words, ~2,768 tokens.
.claude/skills/snowbank-slices-and-buffers/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.Slice is the workhorse for binary data in this codebase. It is a readonly struct (in namespace System) that wraps a segment of a byte[] — its three fields are Array (the backing array, possibly null), Offset, and Count. It predates Span<T> and is the logical equivalent of ReadOnlyMemory<byte>, but with a large library of helpers for turning bytes into and out of real-world types. Keys and values in the FoundationDB binding are Slices.
Two things to internalize first: (1) a
Sliceis a view, not a copy — it shares the backing array. (2)Slice.Nil(no array) andSlice.Empty(zero-length array) are different and the distinction is load-bearing. Both are covered below.
For the Span-first equivalents (SpanReader/SpanWriter, ISpanEncodable) read references/span-readers-writers.md; for pooled buffer-building (ISliceBufferWriter, SlicePool, ValueBuffer<T>, allocators) read references/buffers-and-pooling.md.
Slice.Nil | Slice.Empty | |
|---|---|---|
| backing array | none (null-like) | a zero-length array |
IsNull | true | false |
IsEmpty | false | true |
IsNullOrEmpty | true | true |
IsPresent | false | true |
GetBytes() | returns null | returns an empty array |
ToStringUtf8() | returns null | returns "" |
== | Nil != Empty | distinct |
CompareTo | Nil and Empty compare equal (both sort first) |
tr.GetAsync(key) returns Slice.Nil for a missing key, so the canonical "does it exist?" check is value.IsNull (or IsNullOrEmpty if an empty value also counts as absent). Use Nil to mean absent and Empty to mean present but zero-length.
var v = await tr.GetAsync(key);
if (v.IsNull) { /* key does not exist */ }Constructing a Slice from a byte[] does not copy; the Slice references the array, so mutations to the array are visible through the slice (and its .Span). When you need an independent owner, copy:
byte[] buf = ...;
var view = buf.AsSlice(); // shares buf — buf[i] = x is visible through view
byte[] mine = view.ToArray(); // defensive copy
buf[0] = 0xFF; // changes `view`, not `mine`// from arrays / spans
byte[] b = ...;
b.AsSlice(); b.AsSlice(offset, count);
new ArraySegment<byte>(b, o, n).AsSlice();
Slice.FromBytes("abc"u8); // copies a ReadOnlySpan<byte>
// from text
Slice.FromStringUtf8("héllo"); Slice.FromString("héllo"); // UTF-8
Slice.FromStringAscii("ABC"); // ASCII only — lossy/throws on chars > 0x7F
// well-known
Slice.Empty; Slice.Nil; Slice.Zero(16); // 16 zero bytes
// guids / uuids / hex
Slice.FromGuid(g); Slice.FromUuid128(u); Slice.FromHexString("00ff1234");This is a classic source of bugs. They are not interchangeable:
| Factory | Encoding | Size (int32) | Read back with |
|---|---|---|---|
Slice.FromInt32(v) | minimal little-endian (leading zero bytes dropped) | 1–4 bytes | slice.ToInt32() |
Slice.FromFixed32(v) | fixed little-endian | always 4 bytes | slice.ToInt32() |
Slice.FromVarint32(v) | 7-bit LEB128 varint | 1–5 bytes | (via SliceReader.ReadVarInt32) |
Every variant has a big-endian twin (FromInt32BE, FromFixed32BE, …) and 16/24/64/128-bit widths, plus floats (FromSingle/FromDouble) and FromDecimal. Big-endian fixed encodings are what you want when a number must sort correctly as a key. The minimal FromInt32 is for standalone values you read whole with ToInt32() — it is not self-delimiting, so don't use it mid-stream (in a SliceWriter, use the fixed-width WriteInt32/WriteInt64 or WriteVarInt* there; see §6).
⚠️ Naming differs between
Sliceand the writer/reader. OnSlice(standalone),FromFixed32= 4 bytes andFromInt32= minimal. OnSliceWriter/SliceReader(streams), the fixed-width method is plainWriteInt32/ReadInt32(4 bytes LE;*BEfor big-endian), and the varint isWriteVarInt32/ReadVarInt32. (WriteFixed32/ReadFixed32exist but are[Obsolete]— useWriteInt32/ReadInt32.)
slice.ToInt64(); slice.ToInt32BE(); slice.ToGuid(); slice.ToUuid128();
slice.ToStringUtf8(); // Nil -> null, Empty -> ""
slice.ToArray(); // defensive copy to byte[]
slice.ToHexString();
// zero-copy access to the bytes
ReadOnlySpan<byte> span = slice.Span;
ReadOnlyMemory<byte> mem = slice.Memory;
// slicing (negative indices count from the end)
slice.Substring(7, 6); slice[2..5]; slice[^1..];Slice compares lexicographically by raw bytes (the same order FoundationDB sorts keys), is offset/array-independent (equal content compares equal regardless of backing array or offset), and supports ==, <, >, CompareTo, StartsWith, EndsWith, IndexOf. For dictionaries/sorted sets, use Slice.Comparer.Default (an IComparer<Slice> + IEqualityComparer<Slice>).
a.CompareTo(b) < 0; // a sorts before b
key.StartsWith(prefix); // prefix match
var set = new SortedSet<Slice>(Slice.Comparer.Default);SliceWriter is a mutable, growable builder (struct, IBufferWriter<byte>, IDisposable). Start from default(SliceWriter) (heap-backed, grows as needed) or new SliceWriter(pool) (rents from an ArrayPool<byte>):
var w = new SliceWriter();
w.WriteInt32(42); // fixed 4 bytes LE (self-delimiting)
w.WriteVarInt32(1000); // LEB128 (self-delimiting)
w.WriteVarString("hello"); // length-prefixed UTF-8
w.WriteStringUtf8("raw"); // raw UTF-8, NO length prefix
w.WriteBytes(payload); // append bytes
Slice result = w.ToSlice(); // the written region (a view into the writer's buffer)WriteInt32/WriteInt64/…, WriteVarInt*, WriteVarString) for anything you'll parse back sequentially. A raw WriteStringUtf8/WriteBytes has no length, so the reader must already know the length.Position, Reset(), Rewind(), Skip(n), Allocate(n)/AllocateSpan(n) (reserve space to fill in place).ArrayPool<byte>, you must either Dispose() the writer or hand the buffer off with ToSliceOwner() — otherwise the rented array is never returned. ToSlice() returns a view into the writer's buffer; if the writer (or its pooled buffer) is disposed/reused, that view becomes invalid — ToArray() or ToSliceOwner() it to keep it.SliceReader is a forward cursor over a Slice. Pair each read with the matching write:
var r = result.ToSliceReader();
int n = r.ReadInt32(); // <-> WriteInt32 (fixed 4 bytes)
uint k = r.ReadVarInt32(); // <-> WriteVarInt32
string s = r.ReadVarString(); // <-> WriteVarString
// raw / fixed-length string written without a prefix: read the known number of bytes
string raw = r.ReadBytes(3).ToStringUtf8();
Slice rest = r.ReadToEnd();Remaining, HasMore, Head (bytes already read), Tail (bytes not yet read), and non-advancing PeekByte()/PeekBytes(n) round out the API. There is no ReadStringUtf8(n) — use ReadBytes(n).ToStringUtf8().
SliceOwner is a rented Slice that returns its buffer to an ArrayPool<byte> on Dispose — the allocation-free analogue of IMemoryOwner<byte>. The contract: you MUST Dispose it, and MUST NOT use its data afterward.
using (var owner = Slice.FromBytes(payload, ArrayPool<byte>.Shared))
{
Slice data = owner.Data; // valid only inside the using
Use(data.Span);
} // buffer returned to the pool hereowner.IsValid, owner.Count, owner.Span, owner.Pool; SliceOwner.Wrap/Create/Copy and writer.ToSliceOwner() produce them. Don't let an owner's Data escape the using.
ISpanEncodableSlice interops freely with the modern primitives: slice.Span (ReadOnlySpan<byte>), slice.Memory (ReadOnlyMemory<byte>), byte[].AsSlice(). Many hot types (keys, values, the writers) implement ISpanEncodable so they can be rendered into a caller's buffer with no intermediate Slice allocation — TryGetSpan(out span) / TryGetSizeHint(out size) / TryEncode(dest, out written). That interface is how subspace.Key(...)/FdbValue.* write themselves into pooled buffers at the last moment.
For working directly over Span<byte> (a caller-owned, fixed buffer) instead of Slice, use SpanReader/SpanWriter — see references/span-readers-writers.md.
// build
var w = new SliceWriter();
w.WriteInt32(order.Id);
w.WriteVarString(order.Customer);
w.WriteVarInt64(order.Total);
Slice packed = w.ToSlice();
// parse
var r = packed.ToSliceReader();
int id = r.ReadInt32();
string cust = r.ReadVarString();
long total = (long) r.ReadVarInt64();IsNull/IsNullOrEmpty (not == Slice.Empty) to test for a missing value?Slice as a view — copying with ToArray()/ToSliceOwner() before mutating shared arrays or outliving a pooled buffer?Fixed*/*BE for sortable keys; VarInt*/Fixed* for self-delimiting stream fields; FromInt32 only for standalone whole-slice values)?SliceWriter writes and SliceReader reads pair up (WriteInt32↔ReadInt32, VarInt↔VarInt, VarString↔VarString)?ArrayPool (SliceWriter(pool) / SliceOwner), did I Dispose/ToSliceOwner() so the buffer returns to the pool — and not use the data after disposal?© SnowBankSDK, BSD-3-Clause. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 2 other files (references) in .claude/skills/snowbank-slices-and-buffers of SnowBankSDK/foundationdb-dotnet-client.
Open the folder on GitHubat commit fdd65b1
Snowbank Slices And Buffers 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 |
|---|---|---|---|---|---|---|
| Snowbank Slices And Buffers this skillSnowBankSDK/foundationdb-dotnet-client | 158 | — | ~2.8k | Automated safety check: Pass | BSD-3-Clause | |
| Scaffoldingdotnet/efcore | 15k | — | ~321 | Automated safety check: Pass | MIT | |
| Blockchain IndexingNethereum/Nethereum | 2.3k | — | ~4.8k | Automated safety check: Pass | MIT | |
| Migrating Oracle To Postgres Data Access Codegithub/awesome-copilot | 40k | — | ~2k | Automated safety check: Pass | MIT | |
| Dotnet Architectaiskillstore/marketplace | 433 | 7 repos | ~1.9k | Automated safety check: Pass | None | |
| Minimax DOCXpoco-ai/poco-claw | 1.4k | 7 repos | ~3.9k | Automated safety check: Pass | MIT |
dotnet/efcore
Implementation details for EF Core scaffolding (reverse engineering).
Nethereum/Nethereum
Index blockchain data (blocks, transactions, logs, tokens) to PostgreSQL/SqlServer/SQLite with progress tracking, reorg handling, and hosted services (.NET/C).
github/awesome-copilot
Migrates .NET/C data access code from Oracle to PostgreSQL (Npgsql).
aiskillstore/marketplace
Expert .NET backend architect specializing in C, ASP.NET Core, Entity Framework, Dapper, and enterprise application patterns.
poco-ai/poco-claw
Professional DOCX document creation, editing, and formatting using OpenXML SDK (.NET).
WeihanLi/WeihanLi.Common
Create or update the project constitution from interactive or provided principle inputs, ensuring all dependent templates stay in sync.
SnowBankSDK/foundationdb-dotnet-client
Advanced engineering for sophisticated FoundationDB layers with the .NET client (FoundationDB.Client / SnowBank) — the cluster model and transaction lifecycle (proxies, resolvers, tlogs, storage…
SnowBankSDK/foundationdb-dotnet-client
How to run a FoundationDB cluster and connect to it from .NET — getting the IFdbDatabaseProvider that the keys/transactions/layers skills assume you already have.
Categories
How to correctly use the Slice type and its companions (SliceReader, SliceWriter, SliceOwner) for binary data in the FoundationDB .NET client / SnowBank.Core codebase. Snowbank Slices And Buffers is an agent skill from SnowBankSDK/foundationdb-dotnet-client.Core codebase.
Snowbank Slices And Buffers fits situations like: code constructs; converts between bytes and other types (Slice.FromBytes/FromStringUtf8/FromInt32/FromFixed64/ToInt64/ToStringUtf8/AsSlice/ToArray); parses a binary buffer (SliceWriter/SliceReader); rents pooled buffers (SliceOwner/ArrayPool).
Run `npx skills add SnowBankSDK/foundationdb-dotnet-client --skill snowbank-slices-and-buffers -a claude-code`. Or copy the skill folder (.claude/skills/snowbank-slices-and-buffers in SnowBankSDK/foundationdb-dotnet-client) into .claude/skills/snowbank-slices-and-buffers in your project. Claude Code loads it when a task matches its description.
Run `npx skills add SnowBankSDK/foundationdb-dotnet-client --skill snowbank-slices-and-buffers -a codex`. Or copy the skill folder (.claude/skills/snowbank-slices-and-buffers in SnowBankSDK/foundationdb-dotnet-client) into .agents/skills/snowbank-slices-and-buffers 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 SnowBankSDK/foundationdb-dotnet-client --skill snowbank-slices-and-buffers -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/snowbank-slices-and-buffers, .gemini/skills/snowbank-slices-and-buffers, .github/skills/snowbank-slices-and-buffers and .opencode/skills/snowbank-slices-and-buffers in your project.
SKILL.md names no scripts, command-line tools or credentials: Snowbank Slices And Buffers is instructions for the agent only.
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.
Snowbank Slices And Buffers is published under the BSD-3-Clause licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.8k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2.2k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Snowbank Slices And Buffers: Scaffolding (dotnet/efcore, 15k stars), Blockchain Indexing (Nethereum/Nethereum, 2.3k stars), Migrating Oracle To Postgres Data Access Code (github/awesome-copilot, 40k stars) and Dotnet Architect (aiskillstore/marketplace, 433 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
SnowBankSDK (a GitHub organization) maintains it in SnowBankSDK/foundationdb-dotnet-client, which has 158 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 9, 2026.
Source: SnowBankSDK/foundationdb-dotnet-client on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.