CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

stream-react-native

Build, integrate, audit, or upgrade Stream Chat, Video, and Feeds in React Native CLI and Expo / Expo Router apps, and answer RN / Expo how-to questions about them. Scaffold a new app, add Stream to an existing project, review an integration, upgrade an SDK major, migrate from Sendbird (@sendbird/chat, @sendbird/uikit-react-native), or build an AI assistant / ChatGPT-style app on the Chat SDK's ai-components (replacing the deprecated @stream-io/chat-react-native-ai), or one on Stream Agents. Covers channel lists, messages, MessageComposer, threads, the attachment picker, audio messages, offline support, push notifications, video calls, CallContent and ParticipantView, ringing, livestreams, audio rooms, StreamFeeds activity / timeline / notification feeds, comments, reactions, follows, and theming or matching a design, with stream-chat-react-native, stream-chat-expo, @stream-io/video-react-native-sdk, and @stream-io/feeds-react-native-sdk. React Native and Expo only - web React uses stream-react.

Quality

89%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Low

Low-risk findings worth noting

SKILL.md
Quality
Evals
Security

Quality

Content

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

An exceptionally dense, expert-level body: every section delivers executable commands, exact props, and specific failure modes with strong verification workflow and feedback loops, and it never explains what Claude already knows. The main structural weakness is that the many clearly-signaled reference files the body depends on are absent from the bundle, and time-sensitive version pins sit inline in the core body rather than in versioned references.

Suggestions

Ship the referenced files in references/ — chat-versions.md, ai-integration.md, design-matching.md, simulator-verification.md, sendbird-migration.md, stream-agents.md, basics/offline-support.md, and guides/push-notifications.md are all cited as load-bearing but none exist in the bundle, so the one-level-deep navigation the body relies on is broken.

Move the version-pinned native setup gotchas (Expo SDK 54/56/57/58 and RN 0.81/0.85 pairs, the reanimated 4.5.0/worklets 0.10.0 crash pin and its >=4.5.1/>=0.10.2 fix) into a versioned reference file and keep only a pointer plus the currently-safe requirement in the body, so the always-loaded SKILL.md does not go stale with each Expo release.

Consider moving the long Chat keyboard/picker inset arithmetic (the 86.5/-300 fallbacks, header-height formulas, iOS 26 transparent-header case) into the existing design or setup reference; the body needs only the rule and where to find the per-case numbers.

DimensionReasoningScore

Conciseness

The body is dense and expert-grade — it explains no general concepts, assumes RN/Expo competence, and nearly every line carries a non-obvious failure mode or exact command (e.g. "`getstream env` writes `.env` to the folder `getstream init` ran in... move it next to the app's `package.json`, or Metro never reads it"). It misses anchor 5 because time-sensitive version pins are inlined rather than isolated ("Expo SDK 57 pins react-native-reanimated@4.5.0 + react-native-worklets@0.10.0", "SDK 58", "RN 0.85 / Expo 56"), which the rubric directs penalizing unless placed in a deprecated/old-patterns section.

4 / 5

Actionability

Guidance is fully executable: copy-paste commands (`cat $(getstream docs chat-sdk/react-native)/INDEX.md`, `getstream api UpdateApp --request '{"video_primary_use_case":"livestreaming"}'`), exact install sets per lane, concrete props (`keyboardVerticalOffset={0}` and `topInset={0}`), exact code patterns (`if (call.state.callingState !== CallingState.LEFT) await call.leave()`), and named components/hooks with what breaks without them. Anchor 5 (copy-paste ready, common cases covered) matches; there are no pseudocode or hand-wavy steps that would drop it to 4.

5 / 5

Workflow Clarity

Each scenario is clearly sequenced (docs-first pinning of the major, then setup, then build, then verify), and validation is explicit: an entire Verify section with type-check, native build, simulator run, two-user live-delivery testing, and a per-default checklist, plus a pre-write safety gate for app-wide `getstream api` writes ("run `getstream status` and tell the user which app it will change"). Error-recovery feedback is built in (e.g. "a gap between the composer and the picker means `topInset` is wrong", "a failing check reads as green" pipe warning), matching anchor 5; anchor 4's 'minor validation gaps' is not in evidence.

5 / 5

Progressive Disclosure

References are clearly signaled and one level deep ("follow chat-versions.md", "as basics/offline-support.md shows", "follow design-matching.md"), but the bundle contains no references/, scripts/, or assets/ directories — none of the ~13 referenced files (chat-versions.md, ai-integration.md, simulator-verification.md, sendbird-migration.md, basics/offline-support.md, guides/push-notifications.md, design-matching.md, stream-agents.md) resolve to real files. Scoring against the actual bundle structure as directed, the navigation is broken and a substantial amount of version-specific detail (native setup gotchas, keyboard inset arithmetic) is inlined in the always-loaded body. Anchor 3 (references present but the organization leaves significant content inline / structure could be better) is the best fit; it is not 4 because the missing files are more than a minor organization gap, and not 2 because the body is well-sectioned and references are explicitly, not buryingly, signaled.

3 / 5

Total

17

/

20

Passed

Description

91%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 highly specific, well-disambiguated description that enumerates concrete actions, task scenarios, feature surfaces, and exact package names, with an explicit platform boundary against the web-focused sibling skill. Its only weakness is the absence of an explicit "Use when..." trigger clause, leaving the 'when' to be assembled from the task enumeration and scope boundary rather than stated directly.

DimensionReasoningScore

Specificity

The description lists multiple concrete, verbatim actions ("Build, integrate, audit, or upgrade", "Scaffold a new app", "migrate from Sendbird (@sendbird/chat, @sendbird/uikit-react-native)") and names concrete SDK packages (stream-chat-react-native, stream-chat-expo, @stream-io/video-react-native-sdk, @stream-io/feeds-react-native-sdk) plus feature surfaces (MessageComposer, CallContent, ParticipantView). Coverage across Chat, Video, and Feeds is comprehensive; the level above does not exist and the level below (4, "minor gaps") understates it.

5 / 5

Completeness

The 'what' is explicit and rich (build/integrate/audit/upgrade/answer how-to questions with named components), and 'when' is present as equivalent trigger guidance — enumerated task scenarios ("Scaffold a new app, add Stream to an existing project, review an integration, upgrade an SDK major, migrate from Sendbird") plus an explicit scope boundary ("React Native and Expo only - web React uses stream-react"). It stops short of anchor 5 because there is no explicit "Use when..." phrasing with concrete trigger clauses; anchor 3 does not apply since the 'when' is more than weakly implied.

4 / 5

Trigger Term Quality

Natural user phrasing is thoroughly covered: product names users would say ("Stream Chat", "video calls", "livestreams", "audio rooms", "push notifications", "threads", "offline support"), migration source ("Sendbird"), and the ecosystem's equivalent of file extensions — exact npm package names. Anchor 5 (comprehensive natural terms including synonyms and package identifiers) is the closest match; anchor 4's "a few natural terms missing" does not fit — I could not identify a commonly used trigger term that is absent.

5 / 5

Distinctiveness Conflict Risk

The niche is precise (Stream Chat/Video/Feeds in React Native CLI and Expo apps) and it explicitly disambiguates from the nearest competing skill ("web React uses stream-react") and the deprecated @stream-io/chat-react-native-ai package. Distinct triggers (Stream, Sendbird migration, RN/Expo SDK names) give minimal conflict risk, matching anchor 5; anchor 4's "minor overlap risk" would apply only if a sibling skill boundary were left unstated.

5 / 5

Total

19

/

20

Passed

Validation

93%

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

Validation — 15 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

metadata_version

'metadata.version' is missing

Warning

Total

15

/

16

Passed

Repository

GetStream/agent-skills

Path

skills/stream-react-native/SKILL.md

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.