CtrlK
BlogDocsLog inGet started
Tessl Logo

agui-dotnet-shared-state

Share structured, evolving state between an AG-UI agent and its client with the AG-UI .NET SDK — the client seeds state on the request, the server reads it, mutates it, and streams the updated state back as snapshots or deltas alongside the chat. USE FOR: sending initial/working state from the client via ChatOptions.RawRepresentationFactory -> RunAgentInput.State; reading inbound state on the server with ChatOptions.TryGetRunAgentInput and RunAgentInput.State; emitting a full state object as a StateSnapshotEvent (or incremental JSON-Patch changes as a StateDeltaEvent) from a DelegatingChatClient via ChatResponseUpdate.RawRepresentation; reading state back on the client from update.RawRepresentation as StateSnapshotEvent. DO NOT USE FOR: passing one-off tool arguments (use agui-dotnet-server-tools); rendering UI components from tool calls (use agui-dotnet-generative-ui); plain chat (use agui-dotnet-streaming-chat); approvals/interrupts, multimodal, or protobuf.

75

Quality

92%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Passed

No findings from the security scan

SKILL.md
Quality
Evals
Security

Quality

Content

92%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

High-quality content: complete streaming code for both sides of the protocol, an explicit snapshot-vs-delta decision rule, AOT guidance, pointed anti-patterns that name real failure modes, and a concrete verification checklist — all with essentially zero padding. The only gap is that the server example leans on an undefined state type and helper the reader must fill in.

Suggestions

Define (or show the shape of) the AgentState type used in the server example, since it is also the type serialized via jso.GetTypeInfo(typeof(AgentState)) and the AOT guidance depends on it.

Add a minimal concrete BuildStateAsync or a one-line note showing a working fallback (e.g., returning the incoming state) so the server example runs as-is before the reader plugs in their own logic.

DimensionReasoningScore

Conciseness

The body is lean: every sentence carries SDK-specific, non-obvious information ('State updates are **content-less** — they arrive on update.RawRepresentation, not as update.Text', how TryGetRunAgentInput recovers the input, AOT-safe serialization via jso.GetTypeInfo) with no padding of concepts Claude already knows. It matches the 5 anchor — every token earns its place — rather than the 4 anchor, which expects trimmable over-explanation.

5 / 5

Actionability

Both client and server paths have complete, idiomatic C# code including pipeline registration, which is copy-paste ready for the client side. It falls just short of the 5 anchor because the server example depends on undefined pieces — 'BuildStateAsync(... // your logic' and the 'AgentState' type passed to GetTypeInfo are referenced but never shown, and the registration snippet's IOptions<JsonOptions> wiring is sketched loosely. Above the 3 anchor, since the shown code is executable, not pseudocode.

4 / 5

Workflow Clarity

The multi-step flow is clearly sequenced (client seeds → server reads/mutates/streams → client reads back inside the await foreach), the 'Snapshots vs deltas' section gives the decision rule, and a dedicated 'Verify' section provides three explicit checkpoints including a delta-correctness check. This matches the 5 anchor (clear sequence with explicit validation and feedback guidance); the operations are non-destructive so no cap applies.

5 / 5

Progressive Disclosure

There are no bundle files (references/, scripts/, assets/ are absent) and none are needed — the skill is a single-topic, self-contained procedure with well-organized sections (client, server, snapshot-vs-delta choice, AOT, anti-patterns, verify) and no nested or dead-end references. Per the rubric's simple-skill guidance, a self-contained skill with no need for external references scores 5 on well-organized sections alone.

5 / 5

Total

19

/

20

Passed

Description

92%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

A strong description: it chains the full client→server→client state lifecycle in third person, names the exact SDK APIs involved, and provides explicit USE FOR / DO NOT USE FOR boundaries with sibling-skill routing. The only soft spot is keyword breadth — a few natural synonyms (e.g., 'sync state') are absent.

DimensionReasoningScore

Specificity

The description lists multiple concrete, chained actions in third person voice: 'the client seeds state on the request, the server reads it, mutates it, and streams the updated state back as snapshots or deltas', each further tied to specific API surfaces (ChatOptions.RawRepresentationFactory, TryGetRunAgentInput, StateSnapshotEvent/StateDeltaEvent, update.RawRepresentation). Coverage is comprehensive for the skill's scope, matching the 5 anchor rather than the 4 anchor, which would expect minor coverage gaps.

5 / 5

Completeness

It explicitly answers both questions: the opening sentence states what the skill does, 'USE FOR:' enumerates concrete when-triggers, and 'DO NOT USE FOR:' with named sibling skills sharpens routing further. This exceeds the 4 anchor ('when could be more explicit') and matches the 5 anchor with concrete trigger phrases in both directions.

5 / 5

Trigger Term Quality

Natural terms a user would say are present — 'share structured, evolving state', 'state', 'snapshot', 'delta', 'AG-UI', '.NET SDK' — giving good but not comprehensive coverage; common synonyms like 'sync/synchronize state' or 'JSON Patch' phrasing a user might use are not surfaced. This sits above anchor 3 ('some relevant keywords, missing variations') but below anchor 5's synonym-and-extension completeness.

4 / 5

Distinctiveness Conflict Risk

The niche is narrow (shared evolving state in the AG-UI .NET SDK) and the 'DO NOT USE FOR' clause explicitly redirects overlapping cases (tool arguments, generative UI, plain chat) to named sibling skills, minimizing wrong-skill triggering. Minimal conflict risk, matching the 5 anchor.

5 / 5

Total

19

/

20

Passed

Validation

100%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 16 / 16 Passed

Validation for skill structure

No warnings or errors.

Repository
ag-ui-protocol/ag-ui
Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.