CtrlK
BlogDocsLog inGet started
Tessl Logo

stream

Stream router for Chat, Video, Feeds, and Moderation. Use when the user wants to build a new app with Stream, scaffold a project, add Chat/Video/Feeds/Moderation to an existing app, integrate Stream, audit or migrate an integration, build for Swift/SwiftUI/UIKit/iOS/Xcode/Android/Kotlin/React Native/Expo/Flutter, query Stream data, list channels, list calls, show flagged messages, find users, run getstream CLI commands, install the Stream CLI, set up Stream, configure moderation, search Stream SDK documentation, or look up Stream React/iOS/Android/Node/Flutter/Unity SDK methods. Routes to the right sub-skill based on the task.

72

Quality

90%

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

81%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.

A strong router body: deterministic, precedence-ordered routing with executable commands, explicit disambiguation, and verbatim user-facing output. Its main weakness is redundancy — the 'By task' section and the 'Pick a track' table restate the same routes and caveats — plus referenced files that cannot be verified against the bundle.

Suggestions

Collapse the duplication between the 'By task' section and the 'Pick a track' table into a single routing surface (keep the table, replace the prose section with the few rules it uniquely contributes, such as the SDK-vs-build-target precedence), cutting roughly a third of the body.

Move the long per-row caveats (onboarding carve-outs, React framework scope, docs-vs-platform distinctions) out of the table cells into RULES.md or peers.yaml so the table stays scannable and each rule is stated once.

Verify the referenced files (RULES.md, peers.yaml, peers.schema.json, sendbird-data-migration.md) ship with the skill bundle — none are present here — and consider placing them under references/ with paths confirmed, so the one-level-deep links resolve.

DimensionReasoningScore

Conciseness

There is no concept padding — the body never explains what Stream or a router is — but the routing rules are stated multiple times: the 'By task' section and the 'Pick a track' table repeat the same audit, migration, and peer-signal routes, and caveats like 'install on demand' and 'no peer signal present' appear in several forms. This matches the score-3 anchor ('mostly efficient but includes some unnecessary explanation or could be tightened') better than score 4, where only minor instances would be trimmable — here whole rows duplicate earlier bullets.

3 / 5

Actionability

Guidance is fully executable: exact CLI commands with when-to-use ('getstream init', 'getstream api <Endpoint>', 'getstream skills stream-swift'), the exact disambiguator question to ask ('Want me to look up the SDK method (docs) or run it now via CLI?'), the verbatim menu to render, and a concrete recovery step for the known 'Unknown skill' failure (Glob the peer path, run its install command, before calling Skill). This is copy-paste-ready routing behavior, matching the score-5 anchor.

5 / 5

Workflow Clarity

The multi-step routing process is explicitly sequenced with precedence ('matched before the docs rows', 'takes precedence over the web stream-react rows'), a deterministic no-probe classification stage, error-recovery checkpoints (ask one disambiguator and wait; never call Skill before the Glob to avoid the 'Unknown skill' error; ask 'Unity or Unreal?' rather than guessing), and clear handling of edge states (bare /stream, missing CLI, uninstalled peers). The feedback-loop analogs a router needs are all present, matching the score-5 anchor.

5 / 5

Progressive Disclosure

Structure is good: routing logic and the CLI surface live in SKILL.md while cross-cutting rules, peer routing data, and the Sendbird data-migration procedure are each split into a separate file with clearly signaled links ([RULES.md], [peers.yaml], [peers.schema.json], [sendbird-data-migration.md]). It falls short of score 5 because the referenced files (RULES.md, peers.yaml, peers.schema.json, sendbird-data-migration.md) do not exist in this bundle — there is no references/ or scripts/ directory to verify them against — and the routing table itself carries a lot of detail (long multi-clause cells) that could live in the referenced peer/routing files.

4 / 5

Total

17

/

20

Passed

Description

100%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 model router description: third-person voice, explicit what-and-when, and a dense set of natural trigger phrases covering every product, platform, and operation the router handles. Its length is justified — each clause is a distinct trigger, not padding.

DimensionReasoningScore

Specificity

The description enumerates many concrete actions — 'build a new app with Stream, scaffold a project, add Chat/Video/Feeds/Moderation to an existing app, integrate Stream, audit or migrate an integration', 'query Stream data, list channels, list calls, show flagged messages, find users, run getstream CLI commands, install the Stream CLI', 'search Stream SDK documentation', 'look up Stream React/iOS/Android/Node/Flutter/Unity SDK methods' — with comprehensive coverage across products, platforms, and operations. It is well above the score-4 anchor's 'minor gaps in coverage' since it also names each platform target and both docs and CLI surfaces.

5 / 5

Completeness

The 'what' is explicit up front ('Stream router for Chat, Video, Feeds, and Moderation') and the 'when' is an explicit 'Use when the user wants to...' clause listing concrete trigger situations, exactly matching the score-5 anchor pattern of a clear what followed by concrete trigger phrases.

5 / 5

Trigger Term Quality

It contains the natural phrases a user would actually say — 'list channels', 'list calls', 'show flagged messages', 'find users', 'scaffold a project', 'set up Stream', 'install the Stream CLI' — plus platform synonyms and tokens (Swift/SwiftUI/UIKit/iOS/Xcode, Android/Kotlin, React Native/Expo, Flutter, Unity). Coverage of natural terms including synonyms matches the score-5 anchor; nothing common is obviously missing for the Stream domain.

5 / 5

Distinctiveness Conflict Risk

It occupies a clear niche (the Stream/getstream ecosystem) with brand-anchored triggers ('Stream', 'getstream CLI') that other skills would not claim. Its breadth overlaps only with its own sub-skills, which is the router's purpose ('Routes to the right sub-skill based on the task') rather than a conflict with unrelated skills.

5 / 5

Total

20

/

20

Passed

Validation

81%

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

Validation — 13 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

allowed_tools_field

'allowed-tools' contains unusual tool name(s)

Warning

metadata_version

'metadata.version' is missing

Warning

relative_links

Relative link issues: 10 missing

Warning

Total

13

/

16

Passed

Repository
GetStream/agent-skills
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.