Official agent skill

Type Mapping

by aws in aws/aws-sdk-net

Smithy shape to .NET type mapping, nullability, collection element rules, and error-shape naming/member rules.

OfficialApache-2.0Auto-check passed

Install Type Mapping

skills CLI
$ npx skills add aws/aws-sdk-net --skill type-mapping -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install aws/aws-sdk-net type-mapping --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/aws/aws-sdk-net.git skills-src && mkdir -p .claude/skills && cp -r skills-src/generator/SmithyDotNet/skills/type-mapping .claude/skills/type-mapping && rm -rf skills-src

Use ~/.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/

Facts

Skill name
type-mapping
GitHub stars
145
Token cost
~2.1k tokens
SKILL.md length
1,075 words
Files
1
Skills in repo
6
Repo updated
First seen
Licence
Apache-2.0

At a glance

Smithy shape to .NET type mapping, nullability, collection element rules, and error-shape naming/member rules.

  • Works in 4 steps: All value-type members are nullable… → Reference types (string, MemoryStream,… → Collection elements and map values are… → …
  • Changing TypeMapper
  • SKILL.md covers Type Mapping Table, Nullability Rules, Data Type Swaps and Collection Defaults, plus 4 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Type Mapping is an agent skill from aws/aws-sdk-net, published by the product's own GitHub organization. Smithy shape to .NET type mapping, nullability, collection element rules, and error-shape naming/member rules. Use when changing TypeMapper or member resolution in the SmithyDotNet generator.

Its SKILL.md is about 2.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It works with .NET and Amazon Web Services. The repository describes itself as: The official AWS SDK for .NET. For more information on the AWS SDK for .NET, see our web site:. The licence is Apache-2.0.

When your agent uses it

  • Changing TypeMapper
  • Member resolution in the SmithyDotNet generator

Example prompts

  • “/type-mapping”

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. All value-type members are nullable (bool?, int?, DateTime?, ...) regardless of @required or @default.
  2. Reference types (string, MemoryStream, generated classes) carry no ?.
  3. Collection elements and map values are non-nullable (List, Dictionary), unless the collection is @sparse, which makes them nullable again…
  4. @default and @required do NOT change nullability.

What it can do on your machine

Read from SKILL.md and the folder at commit f36df89. 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

    No scripts in the folder and no shell commands in SKILL.md.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    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

Type Mapping loads about 2.1k tokens when it runs. Until then it costs about 51 tokens; SKILL.md has 1,075 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~51
When it runs · the whole SKILL.md, loaded when a task matches
~2.1k

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.

SKILL.md

The full file from aws/aws-sdk-net at commit f36df89, republished under its Apache-2.0 licence (© aws). 1,075 words, ~2,118 tokens.

Download SKILL.mdSave it as .claude/skills/type-mapping/SKILL.md (or your agent's skills folder).
name
type-mapping
description
Smithy shape to .NET type mapping, nullability, collection element rules, and error-shape naming/member rules. Use when changing TypeMapper or member resolution in the SmithyDotNet generator.

Skill: Smithy to .NET Type Mapping

Type Mapping Table

Smithy shape.NET typeNotes
booleanbool?
stringstring
integerint?
longlong?
floatfloat?
doubledouble?
timestampDateTime?
byte, short, bigInteger, bigDecimal—Not supported yet: throws
blobMemoryStreamSupported as an @httpPayload body, a JSON body member, or a list element / map value (base64 on the wire). A header, query or label blob throws. @streaming blob → Stream, @httpPayload-only (throws as a collection element)
documentAmazon.Runtime.Documents.Document(Un)marshals wholesale through the runtime document transforms. Supported as a body member, @httpPayload, list element, or map value
enumConstantClassThe generated ConstantClass subclass; marshals as a string via implicit conversion, matching C2J. Only as a member's own type; inside a collection it is plain string (see Enums in Collections)
intEnumint?No ConstantClass: C2J has no intEnum, so it is a plain integer in every position
listList<T>Element rules below
mapDictionary<string, TValue>Key is always string (Smithy requires a string key; an enum key is string too, matching C2J). Values follow the element rules
structure, unionGenerated classThe service rename map wins when it has an entry for the shape (error codes still use the shape name). A union is generated as a plain structure (matches the current SDK)

Prelude shapes (smithy.api#String, smithy.api#Integer, ...) and the Smithy 1.0 Primitive* shapes (PrimitiveLong, PrimitiveBoolean, ...) map exactly as their plain counterparts above. smithy.api#Unit has no type: an operation with no input/output emits an empty {Op}Request/{Op}Response, and a union member targeting Unit gets a per-service empty Unit model class, as C2J ships.

Nullability Rules

The AWS SDK for .NET V4 convention:

  1. All value-type members are nullable (bool?, int?, DateTime?, ...) regardless of @required or @default.
  2. Reference types (string, MemoryStream, generated classes) carry no ?.
  3. Collection elements and map values are non-nullable (List<int>, Dictionary<string, DateTime>), unless the collection is @sparse, which makes them nullable again (List<int?>, matching C2J).
  4. @default and @required do NOT change nullability.

IsSet{Property}() follows from the type: .HasValue for a nullable value type (intEnum included), !this.X.IsNull() for a document (the runtime Document is a struct), the collection rule below for a list/map, != null otherwise.

Data Type Swaps

The dataTypeSwap customization (keyed by modeled shape name, then emitted member name) overrides a member's emitted .NET type and optionally names the marshaller method and unmarshaller instance generated code calls for it; an omitted one keeps the modeled conversion, as in C2J.

CustomizationTransform validates each entry after shapeModifiers, so a member renamed by emitPropertyName is named by its new name, as in C2J. Nothing is stored on the model: ResolveMembers looks the entry up by structure.Id.Name and member name, and ResolveType folds it into the TypeDescriptor: DotNetType is the swapped type, IsNullableValueType describes the swapped type, and MarshallerOverride / UnmarshallerOverride carry the conversion (see marshalling → Data Type Swaps). Target stays the modeled shape.

CustomizationTransform rejects an entry that names no structure member or has a blank Type. C2J swaps any member, but these are not supported yet: a swap on a non-scalar member, on a payload, response-code, prefix-header, query-map, label, host-label, idempotency-token, or event member (the writers would ignore the swapped type there), or to a List<>/Dictionary<> type (C2J then treats the member as a collection). The XML-only entry fields isFlattened and alternateLocationName are rejected until an XML protocol is supported.

Collection Defaults

Collections default to null (V4) and to an empty list when AWSConfigs.InitializeCollections is on (V3 compat). In V4 an empty list counts as "set" (the caller cleared it); in V3 mode it counts as "not set". The property initializer and IsSet body that encode this are in sdk-conventions → Collection Properties.

Show full SKILL.md (478 more words)Show less

Enums in Collections

An enum surfaces as its ConstantClass only as a structure member's own type. As a list element, a map key, or a map value it is plain string:

Smithy.NET
member targeting StatusStatus (the ConstantClass)
list<Status>List<string>
map<Status, Status>Dictionary<string, string>
list<list<Status>>List<List<string>>

This matches C2J. Typing an element as its ConstantClass would be a public-API divergence (Amazon.Lambda.Model.CreateFunctionRequest.Architectures and friends are List<string> in the shipped SDK). A paginator's items element type follows the same element rules (string for an enum, nullability per rule 3), so the flattened enumerable agrees with the List<T> property it reads from.

Constrained Shapes

Smithy allows constrained shapes (e.g. a string shape named Uuid with @length or @pattern). These do NOT get wrapper classes; they map to their underlying .NET type:

Smithy.NET
Uuid (string shape with constraints)string
AuditEvents (list shape)List<AuditEvent> inline
ChannelArn (string shape)string

The constraints flow through to [AWSProperty] on the member that references the shape: Required from the member's @required; Min/Max from @length/@range on the member, else on the target (e.g. AuditEvents has @length(min:1, max:100), so PutAuditEventsRequest.AuditEvents gets [AWSProperty(Required=true, Min=1, Max=100)]); Sensitive from the target's @sensitive.

Error Shape Naming

Smithy error shapes often omit the Exception suffix. The rules (matching the current SDK):

  • Ends with Exception → keep as-is (e.g. UnsupportedOperationException)
  • Ends with Fault → replace Fault with Exception
  • Otherwise → append Exception (e.g. ChannelNotFound → ChannelNotFoundException)

Error Shape Members

Error shapes have a message member in the Smithy model, but the generated exception class does not expose it as a property. The message is passed to System.Exception via the constructor and inherited as Exception.Message. The generator filters message out everywhere: the property set, the serialization block, and the unmarshaller alike.

Two base-class adjustments follow (matching the current SDK):

  • A member named errorType is renamed to the property RequestErrorType (property name only; the wire name stays errorType) so it doesn't hide AmazonServiceException.ErrorType, whose type is the ErrorType enum rather than the member's own type.
  • A member named Retryable is emitted with the new modifier, hiding AmazonServiceException.Retryable.

Independently of the exception-only rules, a member named Equals on any structure is emitted with new to hide object.Equals(object).

A response member named ContentLength is not shadowed but omitted from the response class entirely: AmazonWebServiceResponse already declares it and the unmarshaller assigns the inherited property. See sdk-conventions.

RequestId and ErrorCode get a narrower treatment than message. AmazonServiceException already declares them, so the generator emits no property (one would shadow the base). But unlike message they are not filtered from serialization or unmarshalling: C2J serializes and reads every modeled member except message, so the inherited property is still written to the serialization block and read from the error body. Every other member is emitted as-is, exactly as C2J does; one colliding with another inherited property (e.g. StatusCode) would hide it without new and fail the SDK's warnings-as-errors build, and no model has one.

© aws, 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

Files

Just SKILL.md in generator/SmithyDotNet/skills/type-mapping of aws/aws-sdk-net.

Open the folder on GitHubat commit f36df89

Compare with similar skills

Type Mapping 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.

Type Mapping compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Type Mapping this skillaws/aws-sdk-net145—~2.1kAutomated safety check: PassApache-2.0
FoundatioFoundatioFx/Foundatio2.1k—~3.9kAutomated safety check: PassApache-2.0
New Event Sourceaws/aws-lambda-dotnet1.7k—~3kAutomated safety check: PassApache-2.0
Cloud KmsNethereum/Nethereum2.3k—~738Automated safety check: PassMIT
External SignerNethereum/Nethereum2.3k—~2.3kAutomated safety check: PassMIT
Rds Sqlserveraws/agent-toolkit-for-aws2.8k—~6.3kAutomated safety check: PassApache-2.0

Similar skills

  • Foundatio

    FoundatioFx/Foundatio

    A skill your agent uses when working with Foundatio infrastructure abstractions for .NET -- caching, queuing, messaging, file storage, distributed locking, or background jobs.

    2.1k GitHub stars~3.9k tokensUpdated today
    Backend & APIsAuto-check passed
  • New Event Source

    aws/aws-lambda-dotnet

    Official

    Add a new AWS event source attribute (e.g., Kinesis, Kafka, MQ) to the Lambda .NET Annotations framework, including the attribute class, source generator integration, CloudFormation writer, unit…

    1.7k GitHub stars~3k tokensUpdated today
    Testing & QAAuto-check passed
  • Cloud Kms

    Nethereum/Nethereum

    Sign Ethereum transactions with AWS KMS or Azure Key Vault HSMs using Nethereum.

    2.3k GitHub stars~738 tokensUpdated 2 days ago
    Backend & APIsAuto-check passed
  • External Signer

    Nethereum/Nethereum

    Help users own an ERC-4337 smart account whose ECDSA key never lives in the application process — sign UserOperations with AWS KMS, Azure Key Vault, an HSM, a Ledger, or a Trezor instead of an…

    2.3k GitHub stars~2.3k tokensUpdated 2 days ago
    SecurityAuto-check passed
  • Rds Sqlserver

    aws/agent-toolkit-for-aws

    Official

    Provides connectivity, authentication, and troubleshooting guidance for Amazon RDS for SQL Server.

    2.8k GitHub stars~6.3k tokensUpdated today
    Backend & APIsAuto-check passed
  • Setting Up Cloudwatch Observability

    aws/agent-toolkit-for-aws

    Official

    Sets up CloudWatch observability for the first time - Omni (CloudWatch Application Observability) and classic CloudWatch.

    2.8k GitHub stars~5k tokensUpdated today
    DevOps & CloudAuto-check passed

More from aws/aws-sdk-net

  • Official

    A skill your agent uses when validating that a C2J-to-Smithy migrated AWS SDK service builds, packages, and stays API-compatible with the shipping SDK, or before reporting such a migration as done…

    145 GitHub stars~4k tokensUpdated today
    Auto-check passed
  • AWS SDK Net Maintainer

    aws/aws-sdk-net

    Official

    A skill your agent uses when working on the AWS SDK for .NET source code itself, including Core runtime changes, service client implementations, generator or model changes, repo-specific build and…

    145 GitHub stars~503 tokensUpdated today
    Auto-check passed
  • Smithy Ast Model

    aws/aws-sdk-net

    Official

    The Smithy JSON AST facts and model invariants the SmithyDotNet generator relies on.

    145 GitHub stars~1.4k tokensUpdated today
    Auto-check passed
  • Marshalling

    aws/aws-sdk-net

    Official

    What the SmithyDotNet generator must emit for request marshallers and response/error unmarshallers, per Smithy binding trait and protocol.

    145 GitHub stars~8.2k tokensUpdated today
    Auto-check passed
  • SDK Conventions

    aws/aws-sdk-net

    Official

    The public-API contract SmithyDotNet-generated code must match against the shipping AWS SDK for .NET - what must match vs.

    145 GitHub stars~6.3k tokensUpdated today
    Auto-check passed

Questions about Type Mapping

What does Type Mapping do?

Smithy shape to .NET type mapping, nullability, collection element rules, and error-shape naming/member rules. Type Mapping is an agent skill from aws/aws-sdk-net, published by the product's own GitHub organization.NET type mapping, nullability, collection element rules, and error-shape naming/member rules.

When should I use Type Mapping?

Type Mapping fits situations like: changing TypeMapper; member resolution in the SmithyDotNet generator.

How do I install Type Mapping in Claude Code?

Run `npx skills add aws/aws-sdk-net --skill type-mapping -a claude-code`. Or copy the skill folder (generator/SmithyDotNet/skills/type-mapping in aws/aws-sdk-net) into .claude/skills/type-mapping in your project. Claude Code loads it when a task matches its description.

How do I install Type Mapping in Codex?

Run `npx skills add aws/aws-sdk-net --skill type-mapping -a codex`. Or copy the skill folder (generator/SmithyDotNet/skills/type-mapping in aws/aws-sdk-net) into .agents/skills/type-mapping in your project. Codex loads it when a task matches its description.

Can I use Type Mapping 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 aws/aws-sdk-net --skill type-mapping -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/type-mapping, .gemini/skills/type-mapping, .github/skills/type-mapping and .opencode/skills/type-mapping in your project.

What does Type Mapping need to run?

SKILL.md names no scripts, command-line tools or credentials: Type Mapping is instructions for the agent only.

Does Type Mapping access the network?

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.

Is Type Mapping 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 Type Mapping use?

Type Mapping 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.

How many tokens does Type Mapping use?

About 2.1k tokens (SKILL.md is roughly 8.5k 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 Type Mapping?

Skills that share tags, products or a category with Type Mapping: Foundatio (FoundatioFx/Foundatio, 2.1k stars), New Event Source (aws/aws-lambda-dotnet, 1.7k stars), Cloud Kms (Nethereum/Nethereum, 2.3k stars) and External Signer (Nethereum/Nethereum, 2.3k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Type Mapping?

aws (a GitHub organization, an official publisher) maintains it in aws/aws-sdk-net, which has 145 GitHub stars. The repository holds 6 skills in this directory. The repository was last updated on October 6, 2026.

Source: aws/aws-sdk-net on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.