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.
- Skill ID
- getstream/agent-skills/stream
- Publisher
- getstream
- Repository
- agent-skills
- Installs
- 0
- Files
- 5
- License
- See repository
- Synced
- Sep 23, 2026
Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.
getstream/agent-skills/streamInstalls these files- RULES.md
- SKILL.md
- peers.schema.json
- peers.yaml
- sendbird-data-migration.md
What this skill tells the agent
Stream - skill router + CLI
This skill picks the track from the user's input. Building (web + platform) and docs go to dedicated sub-skills; CLI tasks - querying data, configuring an app, onboarding, installing skills - are handled here (see Stream CLI below), since the getstream CLI underlies every track.
Read first: `RULES.md`. Non-negotiable rules apply, including the Peer skills procedure. `peers.yaml` (schema: `peers.schema.json`) is the single source of truth for peer names, Glob paths, install commands, and routing signals. Install a missing peer on demand per its policy inpeers.yaml(Glob its path, run its install command -getstream skills <name>), then invoke via theSkilltool or Read it inline. Don't callSkillbefore the Glob; it surfaces a confusing "Unknown skill" error. Do not stop after naming the track.
By task
Build or integrate Stream in a platform-specific app -> peer pack from `peers.yaml` (check peer signals first)
- Match user input or cwd against each peer's
signals(e.g.swift/swiftui/.xcodeproj->stream-swift;react native/expo/stream video react native->stream-react-native;unreal/.uproject/umg->stream-unreal;unity/monobehaviour/.unitypackage->stream-unity) - All peers install on demand - install if missing, then route, no prompt
- An SDK/engine signal beats an OS-target signal. When both appear, the pack that owns the SDK wins: "build an Unreal chat app for iOS" is
stream-unreal(notstream-swift), "a Unity game on Android" isstream-unity(notstream-android).ios/android/xcode/gradledescribe the build target;unity/unreal/.uproject/.unitypackage/umg/flutter/react nativedescribe the SDK. Same rule forflutter+ios. - Name the engine for game requests.
stream-unrealandstream-unityboth claim generic game phrasing (in-game chat,game chat). An explicit engine token decides it; with neither engine named and no.uproject/ProjectSettings/in the cwd, ask one short question ("Unity or Unreal?") rather than guessing. Note the capability difference that answer implies: Unity has Chat and Video, Unreal has Chat only. - Peer signals take precedence over the web rows below. A request like "add a video call to my Expo app" or "scaffold a React Native app with Stream Video" matches
stream-react-native, not the web packs - the platform token wins.
Build / enhance / audit / migrate a web app with Stream (React / Next.js) -> use the stream-react skill (the default web pack when no other platform signal is present)
- "build me a Chat/Video/Feeds app", "scaffold", "create a new ...", "add Chat to this app", "integrate Video", "drop Feeds into ...", "upgrade/migrate ... to vN" - and no platform signal (no
react native,expo,swift,ios,android, etc.) - React / Next.js tokens (
stream-chat-react,@stream-io/video-react-sdk,useCreateChatClient,MessageList, ...) with a build/integrate verb also route here - Covers Track A (scaffold, Steps 0-7), Track E (enhance an existing project), Track F (read-only best-practices audit), Track M (migrate/upgrade an SDK version)
Build with the framework-agnostic builder -> use the stream-builder skill only when the user names it explicitly ("use stream-builder", "/stream-builder")
stream-builderis the generic builder being extended to other app kinds; web React/Next.js defaults tostream-reactabove
Audit/review an existing Stream Video integration against best practices (read-only - no scaffolding, no CLI, no build steps)
- Peer signal (
react native/expo) ->stream-react-native; web / React / Next.js or no platform signal ->stream-react(Track F) - Video only. The dedicated best-practices audit covers Stream Video. Chat/Feeds have no dedicated audit checklist yet -
stream-reacthandles those requests with a general docs-based review and says so up front. - Triggers: "audit/review my video integration", "is my video app production-ready?", "what am I missing before launch?"
- Routes here even when the request contains "check" - the audit intent takes precedence over the CLI "check {anything}" route below
Build or review a Feeds v2 -> v3 sync mapping -> use the stream-feeds-migration skill
- "what mapping do we need?", "set up our v2 to v3 migration", "review our v3sync mapping", "why did the migrated activity lose its text/attachments/comments?"
- Produces the
mappingconfig object by sampling the v2 app's own activities and reactions - it does not build or change an app - Needs the v2 app's API key and secret in the environment; see the skill's Step 1 and `RULES.md` > Secrets
Query Stream data or run a CLI command -> handled here (see Stream CLI below)
- "list calls", "show channels", "any flagged", "find users", a literal
getstreamcommand, or "install the CLI" / "set up stream"
Search Stream SDK documentation -> use the stream-docs skill
- "docs", "documentation", explicit SDK token (
Chat React,Video iOS,Feeds Node,Moderation) - "how do I ... in <framework>", "how does <hook/component/method> work?", "what does <SDK thing> do?"
Pick a track
Scan the user's input for the signals below in order. The classifier is deterministic - no probes, no fetches, no CLI checks at this stage.
| Signal in user input | Route |
|---|---|
Upgrade / migrate an installed SDK (build/integrate intent - matched before the docs rows): "upgrade/migrate/bump/update stream-chat-react to vN", "migrate to the new SDK version", "bump my Stream version" - an upgrade verb (upgrade/migrate/bump/update) + a Stream package token, no peer signal. Peer signal (react native / expo / an @stream-io/*-react-native-* token) -> stream-react-native instead (its own migration flow). | stream-react (Track M) |
Audit/review an existing integration (read-only - matched before the SDK-token / docs rows below): "audit/review my video integration", "audit my Chat React integration", "review my Video React app", "is my video app production-ready?", "what am I missing before launch?" - audit/review intent even when an SDK token like `Chat React` / `Video React` is present. Peer signal (react native / expo) -> stream-react-native; web / React / Next.js or no platform signal -> stream-react (Track F - Video has a dedicated checklist; Chat/Feeds get a general docs-based review, stated up front). Also wins over the CLI "check {anything}" row below whenever the request frames a best-practices / production-readiness review rather than a data query. | matching platform pack (read-only audit) |
Explicit SDK/framework token: Chat React, Video iOS, Feeds Node, Moderation, etc. (with or without version), and no build/integrate verb and no audit/review intent (upgrade/migrate/bump/update count as build/integrate verbs -> migration row above; "audit/review" -> audit row above) | stream-docs |
| Words "docs" or "documentation" (and no build/integrate verb) | stream-docs |
"How do I {X} in {framework}?", "How does {hook/component/method} work?", "What does {SDK thing} do?" - and no build/integrate verb. If the request is "how do I add/build/integrate/scaffold {X} in {framework}" and {framework} matches a peer signal, the peer row below wins instead. | stream-docs |
Operational verbs + Stream noun: "list calls", "show channels", "any flagged", "find users", "check {anything}", or a literal getstream command (getstream api, getstream init, getstream login, ...), or "install the CLI" / "set up stream" | Stream CLI - handle here (below) |
More from getstream
Use this skill in a project
Open any RiverX project, search the Skills panel for getstream/agent-skills/stream, and install it in one click.
