Recording
codewhale-hq/Codewhale
Capture screenshots on registered computers, record on macOS or HarmonyOS, and manage saved captures.
Eliminate hand-rolled POCO record<-document string seams — types/paths that materialize a managed string (or List<string/Dictionary) between a bytes SOURCE (a parsed UTF-8 body, a DB column, a…
$ npx skills add corvus-dotnet/Corvus.JsonSchema --skill corvus-bytes-to-bytes -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install corvus-dotnet/Corvus.JsonSchema corvus-bytes-to-bytes --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/corvus-dotnet/Corvus.JsonSchema.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.github/skills/corvus-bytes-to-bytes .claude/skills/corvus-bytes-to-bytes && 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 "corvus-bytes-to-bytes" agent skill from https://github.com/corvus-dotnet/Corvus.JsonSchema/tree/main/.github/skills/corvus-bytes-to-bytes into .claude/skills/corvus-bytes-to-bytes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "corvus-bytes-to-bytes", 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/corvus-dotnet/Corvus.JsonSchema/tree/main/.github/skills/corvus-bytes-to-bytesType 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 corvus-dotnet/Corvus.JsonSchema --skill corvus-bytes-to-bytes -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install corvus-dotnet/Corvus.JsonSchema corvus-bytes-to-bytes --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/corvus-dotnet/Corvus.JsonSchema.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.github/skills/corvus-bytes-to-bytes .agents/skills/corvus-bytes-to-bytes && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "corvus-bytes-to-bytes" agent skill from https://github.com/corvus-dotnet/Corvus.JsonSchema/tree/main/.github/skills/corvus-bytes-to-bytes into .agents/skills/corvus-bytes-to-bytes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "corvus-bytes-to-bytes", 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 corvus-dotnet/Corvus.JsonSchema --skill corvus-bytes-to-bytes -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install corvus-dotnet/Corvus.JsonSchema corvus-bytes-to-bytes --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/corvus-dotnet/Corvus.JsonSchema.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.github/skills/corvus-bytes-to-bytes .cursor/skills/corvus-bytes-to-bytes && 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 "corvus-bytes-to-bytes" agent skill from https://github.com/corvus-dotnet/Corvus.JsonSchema/tree/main/.github/skills/corvus-bytes-to-bytes into .cursor/skills/corvus-bytes-to-bytes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "corvus-bytes-to-bytes", 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/corvus-dotnet/Corvus.JsonSchema.git --path .github/skills/corvus-bytes-to-bytes--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 corvus-dotnet/Corvus.JsonSchema --skill corvus-bytes-to-bytes -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install corvus-dotnet/Corvus.JsonSchema corvus-bytes-to-bytes --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/corvus-dotnet/Corvus.JsonSchema.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.github/skills/corvus-bytes-to-bytes .gemini/skills/corvus-bytes-to-bytes && 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 "corvus-bytes-to-bytes" agent skill from https://github.com/corvus-dotnet/Corvus.JsonSchema/tree/main/.github/skills/corvus-bytes-to-bytes into .gemini/skills/corvus-bytes-to-bytes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "corvus-bytes-to-bytes", 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 corvus-dotnet/Corvus.JsonSchema corvus-bytes-to-bytesInstalls 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 corvus-dotnet/Corvus.JsonSchema --skill corvus-bytes-to-bytes -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/corvus-dotnet/Corvus.JsonSchema.git skills-src && mkdir -p .github/skills && cp -r skills-src/.github/skills/corvus-bytes-to-bytes .github/skills/corvus-bytes-to-bytes && 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 "corvus-bytes-to-bytes" agent skill from https://github.com/corvus-dotnet/Corvus.JsonSchema/tree/main/.github/skills/corvus-bytes-to-bytes into .github/skills/corvus-bytes-to-bytes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "corvus-bytes-to-bytes", 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 corvus-dotnet/Corvus.JsonSchema --skill corvus-bytes-to-bytes -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install corvus-dotnet/Corvus.JsonSchema corvus-bytes-to-bytes --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/corvus-dotnet/Corvus.JsonSchema.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.github/skills/corvus-bytes-to-bytes .opencode/skills/corvus-bytes-to-bytes && 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 "corvus-bytes-to-bytes" agent skill from https://github.com/corvus-dotnet/Corvus.JsonSchema/tree/main/.github/skills/corvus-bytes-to-bytes into .opencode/skills/corvus-bytes-to-bytes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "corvus-bytes-to-bytes", 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.
corvus-bytes-to-bytesEliminate hand-rolled POCO record<-document string seams — types/paths that materialize a managed string (or List<string/Dictionary) between a bytes SOURCE (a parsed UTF-8 body, a DB column, a…
Corvus Bytes To Bytes is an agent skill from corvus-dotnet/Corvus.JsonSchema. Eliminate hand-rolled POCO record<-document string seams — types/paths that materialize a managed string (or List<string/Dictionary) between a bytes SOURCE (a parsed UTF-8 body, a DB column, a directory/HTTP response) and a bytes SINK (a serialized JSON document, a generated model, a SecurityTagSet, a DB write). The fix recipe is bytes-native default + opt-in string extensibility, plus a decision procedure for telling a genuine string leaf from work you are avoiding. USE FOR: deciding whether a string on a…
Its SKILL.md is about 3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
The repository describes itself as: Support for Json Schema validation and entity generation. The licence is Apache-2.0.
Read from SKILL.md and the folder at commit b9e3040. 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.
Corvus Bytes To Bytes loads about 3k tokens when it runs. Until then it costs about 256 tokens; SKILL.md has 1,114 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 corvus-dotnet/Corvus.JsonSchema at commit b9e3040, republished under its Apache-2.0 licence (© corvus-dotnet). 1,114 words, ~2,968 tokens.
.claude/skills/corvus-bytes-to-bytes/SKILL.md (or your agent's skills folder).A record<->document string seam is the most expensive allocation anti-pattern in this codebase
and the one most often re-introduced. It is a value that arrives as bytes, is materialized into
a managed string (or List<string> / Dictionary<string,…> / a per-row POCO), and is then
written back out as bytes — a u-turn through the managed heap. Both ends are bytes; the string is
pure overhead, plus a closure if a non-static builder lambda is involved.
The cost is real and measured: a per-row row-security scan was 25.78 KB -> 1.56 KB (0.06x) once the
filter walked the persisted UTF-8 instead of SecurityTagSet.ToList() per row; a directory grantee
projection was 5.88 KB -> 2.01 KB (0.34x) once value/label flowed as spans instead of GetString.
The words "genuine leaf", "marginal", "admin-rare", "low-frequency", "pragmatic", "good enough", "consistency win", "too fragile", "edge case", "one X's worth" are red flags: they are usually a justification reached for first, to license skipping the bytes mechanism. Before any of them excuses a managed string on a warm/hot path, write a two-ended trace and check both ends:
| Source end | Destination end | |
|---|---|---|
| String IS the leaf only if | a string-typed external API: ClaimsPrincipal claims, the Novell LDAP client (LdapAttribute.StringValue), a BsonValue.AsString (the driver pre-materialized it) | a string-typed sink: an HttpRequestMessage URI, an LDAP filter, an HTTP Authorization header, a string-keyed store (store.GetAsync(string)), a human-facing audit/error message |
If EITHER end is bytes/spans and a documented mechanism exists, it is NOT a leaf — it is work you
are avoiding. A "constructed" value (e.g. first + " " + last, a prefix + dimension key) is never
a leaf: assemble it into a pooled/stack UTF-8 buffer, not a string. The mechanism always exists:
| Need | Mechanism | Skill |
|---|---|---|
| Build a tag set from UTF-8 | SecurityTagSet.Build + IdentityBuilder.Add(span) | this skill |
Build a key prefix + dimension | stackalloc/ArrayPool + Encoding.UTF8.GetBytes(prefix, key) | corvus-buffer-and-pooling |
| Write UTF-8 into a generated model, no closure | T.Build<TContext> / CreateBuilder<TContext> | corvus-builder-context-threading |
| Compare UTF-8 vs a fixed string | pre-encode the string to u8/byte[] once, SequenceEqual | this skill |
| Re-transcode a holder's bytes | Utf8JsonWriter -> TagSet.CopyFromJsonArray | corvus-mutable-documents |
Sometimes the string (or the List + per-item concat that builds it) isn't defended as a leaf but as
too risky to remove — "the sort has a '-' vs '.' edge case needing a careful comparer", "I'd have to
reproduce the exact output bytes", "it's only one row's worth". That difficulty is almost always
self-imposed: it comes from preserving the existing code's incidental output shape (an entry/element
order, a container layout, an insertion order), not from the task itself. Before you skip it: (1) name the
exact invariant making it fragile; (2) read the consumer — the reader, the sink, the comparer — and
check whether it actually requires that invariant. An order-independent reader (finds entries by
name/key, not position), a sink that re-normalises/re-canonicalises, or a content-addressed-by-hash
artifact does not. When no consumer requires it, the invariant is incidental — drop it and the clean
low-alloc form falls out. Example: WorkflowPackage.PackPooled sorts sources by key in a pooled
scratch array and emits a fixed bucket order (workflow, sources, metadata), writing each entry name as
UTF-8 directly ("sources/"u8 + key + ".json"u8, length back-patched) — instead of reproducing the old
full-name sort, which removed the List + per-source name string outright (PackCanonicalPackage
0.73 -> 0.49 KB, scales per source). Treating incidental output shape as a contract is the
anchoring-on-existing-code failure (deriving the replacement from what the old code happened to do)
applied to behaviour instead of style.
An opaque pagination/continuation token round-trips between two UTF-8 ends — emitted into a JSON
response, carried back in the next JSON request (a CTJ JsonString) — so "it is store-minted, not domain
data, so it stays a string" is a genuine-leaf rationalization: both ends are bytes. Encode it bytes-native
with System.Buffers.Text.Base64Url (GetEncodedLength + EncodeToUtf8 straight into the destination;
GetMaxDecodedLength + DecodeFromUtf8 from the request's pageToken.GetUtf8String().Span) — no
EncodeToString/DecodeFromChars char detour, and no per-part ToString()/concat/GetBytes (assemble
the key into a stackalloc/ArrayPool UTF-8 buffer with a separator byte). The token must survive into
the response, but owned ≠ GC: pool it in a disposable carrier rather than minting a string (the only
necessarily-GC form). The cross-root request→store JsonString is bridged with JsonString.From(...)
(free rewrap). The lifetime that governs emitting it is the deferred-body rule — see
corvus-ctj-handler-implementation.
Mirror IdentityBuilder.Add(ReadOnlySpan<byte> key, ReadOnlySpan<byte> value) (the fast path) vs
Add(ReadOnlySpan<byte> key, string value) (the opt-in for a value a deployment genuinely computed
through a string API). The bytes path is the path; the string path is the explicit, documented
exception — never the default.
// The bytes-native seam every adapter/handler builds an identity through. The value span is the
// unescaped UTF-8 the source already holds (reader.GetUtf8String().Span); no managed string per tag.
SecurityTagSet identity = SecurityTagSet.Build(
in state,
static (ref IdentityBuilder builder, in TState s) =>
{
builder.Add("sys:tenant"u8, s.TenantSpan); // span path
builder.Add("sys:sub"u8, s.SubSpan);
});A deferred holder (SecurityTagSet, TagSet) is the bytes form. Read it as ((JsonElement)x).GetUtf8String()
(a ref struct; cannot cross an await) or .TakeOwnership(out byte[]? rented) for owned
ReadOnlyMemory<byte> that can. Transcode to a string ONLY at the genuine leaf (e.g.
Encoding.UTF8.GetString(value.Span) for a string-keyed store key).
When a type is a deployment-authored extension point (e.g. ResolvedPrincipal, returned by an
IDirectoryIdentityMapper), give it BOTH constructors — span for the built-in fast path, string for
mapper ergonomics — and decode on demand for string consumers:
public readonly struct ResolvedPrincipal
{
private readonly ReadOnlyMemory<byte> value; // owned UTF-8
// Span ctor — the built-in adapters' bytes-to-bytes fast path (copies the transient span to owned).
public ResolvedPrincipal(GranteeKind kind, ReadOnlySpan<byte> value, ReadOnlySpan<byte> label, bool hasLabel, SecurityTagSet identity) { /* value.ToArray() */ }
// String ctor — the ergonomic path a deployment mapper (or LDAP, a genuine string leaf) uses.
public ResolvedPrincipal(GranteeKind kind, string value, string? label, SecurityTagSet identity) { /* Encoding.UTF8.GetBytes(value) */ }
public ReadOnlyMemory<byte> ValueMemory => this.value; // server: bytes-to-bytes into the response
public string Value => Encoding.UTF8.GetString(this.value.Span); // CLI/tests: decode on demand
}// A "first last" display name has no single source span — assemble it into a REUSED pooled buffer
// (rented once outside the row loop, grown on demand), not Encoding.UTF8.GetString(...) + string concat.
int needed = first.Length + 1 + last.Length;
if (labelBuffer is null || labelBuffer.Length < needed)
{
if (labelBuffer is not null) { ArrayPool<byte>.Shared.Return(labelBuffer); }
labelBuffer = ArrayPool<byte>.Shared.Rent(needed);
}
first.CopyTo(labelBuffer);
labelBuffer[first.Length] = (byte)' ';
last.CopyTo(labelBuffer.AsSpan(first.Length + 1));
ReadOnlySpan<byte> labelSpan = labelBuffer.AsSpan(0, needed); // the consumer copies it before the next row reuses the bufferWhen a path must evaluate over a tag set (not just copy it), parse the persisted UTF-8 once into a
pooled scratch + slice table (SecurityTagSpanSort.Parse), compare on spans, and pre-encode the fixed
side once. The string evaluator becomes a thin adapter that delegates via FromTags, so the existing
tests lock the bytes evaluator's semantics. See SecurityRule.EvaluateAll(in SecurityTagSet, in Utf8ClaimSet)
and SecurityRuleEvaluation.cs. Ordinal UTF-8 SequenceEqual IS ordinal string equality for the same
code points.
Before committing, scan your own diff and report each:
string / List<string> / Dictionary on a path where bytes are available? -> apply the proof; fix or flag.static builder lambda (a closure) where a static + TContext form exists? -> corvus-builder-context-threading.Decisions & deferrals + a task, never a buried comment.file:line.Prove every warm path with a BenchmarkDotNet [MemoryDiagnoser] benchmark (baseline old vs new) — see
SecurityFilterScanBenchmarks / GranteeProjectionBenchmarks for the shape. "Admin-rare" is not a
licence to allocate.
corvus-builder-context-threading — write UTF-8 spans into a generated model with no closure (the Build<TContext> form).corvus-buffer-and-pooling — the stackalloc/ArrayPool/thread-local pooling the span paths rent from.corvus-typed-model-construction — constructing generated models from native values (the non-span common case).ref-struct-delegates — why the build callbacks are named ref struct delegates, not Func<>/Action<>.corvus-parsed-documents-and-memory — GetUtf8String() / TakeOwnership / the deferred-holder memory model.© corvus-dotnet, Apache-2.0. 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 .github/skills/corvus-bytes-to-bytes of corvus-dotnet/Corvus.JsonSchema.
Open the folder on GitHubat commit b9e3040
Corvus Bytes To Bytes 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 |
|---|---|---|---|---|---|---|
| Corvus Bytes To Bytes this skillcorvus-dotnet/Corvus.JsonSchema | 199 | — | ~3k | Automated safety check: Pass | Apache-2.0 | |
| Recordingcodewhale-hq/Codewhale | 41k | — | ~540 | Automated safety check: Pass | MIT | |
| Architecture Decision Recordsaffaan-m/ECC | 275k | 4 repos | ~1.8k | Automated safety check: Pass | MIT | |
| Architecture Decision Recordsaffaan-m/ECC | 275k | 1 repos | ~863 | Automated safety check: Pass | MIT | |
| Architecture Decision Recordsaffaan-m/ECC | 275k | — | ~1.1k | Automated safety check: Pass | MIT | |
| Browser Recordruvnet/ruflo | 74k | — | ~735 | Automated safety check: Notes | MIT |
codewhale-hq/Codewhale
Capture screenshots on registered computers, record on macOS or HarmonyOS, and manage saved captures.
affaan-m/ECC
Capture architectural decisions as numbered ADR markdown files in docs/adr/ with context, alternatives considered, consequences, and an index README.
affaan-m/ECC
在Claude Code会话期间,将做出的架构决策捕获为结构化的架构决策记录(ADR)。自动检测决策时刻,记录上下文、考虑的替代方案和理由。维护一个ADR日志,以便未来的开发人员理解代码库为何以当前方式构建。
affaan-m/ECC
コーディングセッション中にアーキテクチャ決定を構造化ADRとして記録し、自動的に決定の瞬間を検出し、コンテキスト、検討された代替案、根拠を記録します。今後の開発者がコードベースの形成理由を理解するためのADRログを維持します。
ruvnet/ruflo
Open a named, traced browser session into an RVF cognitive container with a ruvector trajectory recording every action
thedaviddias/Front-End-Checklist
A skill your agent uses when reviewing a codebase for internationalisation readiness, setting up an i18n library, or preparing strings for a new locale.
corvus-dotnet/Corvus.JsonSchema
Understand and work with the Roslyn analyzers shipped with Corvus.Text.Json.
corvus-dotnet/Corvus.JsonSchema
Run, interpret, and maintain BenchmarkDotNet benchmarks for JSON Schema validation and query languages.
corvus-dotnet/Corvus.JsonSchema
Test Corvus.JsonSchema against the JSON Schema Test Suite using Bowtie, the cross-implementation meta-validator.
corvus-dotnet/Corvus.JsonSchema
Write allocation-efficient buffer code in Corvus.JsonSchema using the codebase's established three-tier pooling pattern: stackalloc → ArrayPool → ThreadStatic caches.
corvus-dotnet/Corvus.JsonSchema
Generate strongly-typed C from JSON Schema using the Roslyn source generator or the corvusjson CLI tool.
corvus-dotnet/Corvus.JsonSchema
Implement OpenAPI server handlers using Corvus.Text.Json generated types.
Eliminate hand-rolled POCO record<-document string seams — types/paths that materialize a managed string (or List<string/Dictionary) between a bytes SOURCE (a parsed UTF-8 body, a DB column, a…. JsonSchema. Eliminate hand-rolled POCO record<-document string seams — types/paths that materialize a managed string (or List<string/Dictionary) between a bytes SOURCE (a parsed UTF-8 body, a DB column, a directory/HTTP response) and a bytes SINK (a serialized JSON document, a generated model, a SecurityTagSet, a DB write).
Corvus Bytes To Bytes fits situations like: : deciding whether a string on a hot/warm path is justified; converting a bytes-string-bytes u-turn to bytes-to-bytes; reviewing your own diff for hidden string materializations before committing; building an identity/tag set from a UTF-8 source.
Run `npx skills add corvus-dotnet/Corvus.JsonSchema --skill corvus-bytes-to-bytes -a claude-code`. Or copy the skill folder (.github/skills/corvus-bytes-to-bytes in corvus-dotnet/Corvus.JsonSchema) into .claude/skills/corvus-bytes-to-bytes in your project. Claude Code loads it when a task matches its description.
Run `npx skills add corvus-dotnet/Corvus.JsonSchema --skill corvus-bytes-to-bytes -a codex`. Or copy the skill folder (.github/skills/corvus-bytes-to-bytes in corvus-dotnet/Corvus.JsonSchema) into .agents/skills/corvus-bytes-to-bytes 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 corvus-dotnet/Corvus.JsonSchema --skill corvus-bytes-to-bytes -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/corvus-bytes-to-bytes, .gemini/skills/corvus-bytes-to-bytes, .github/skills/corvus-bytes-to-bytes and .opencode/skills/corvus-bytes-to-bytes in your project.
SKILL.md names no scripts, command-line tools or credentials: Corvus Bytes To Bytes 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.
Corvus Bytes To Bytes is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3k tokens (SKILL.md is roughly 12k 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 Corvus Bytes To Bytes: Recording (codewhale-hq/Codewhale, 41k stars), Architecture Decision Records (affaan-m/ECC, 275k stars), Architecture Decision Records (affaan-m/ECC, 275k stars) and Architecture Decision Records (affaan-m/ECC, 275k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
corvus-dotnet (a GitHub organization) maintains it in corvus-dotnet/Corvus.JsonSchema, which has 199 GitHub stars. The repository holds 26 skills in this directory. The repository was last updated on October 8, 2026.
Source: corvus-dotnet/Corvus.JsonSchema on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.