Claude
Skills
Sign in
Back

stream

Included with Lifetime
$97 forever

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, build for Swift/SwiftUI/UIKit/iOS/Xcode, query Stream data, list channels, list calls, show flagged messages, find users, run stream api / stream config / stream auth commands, install the Stream CLI, set up Stream, search Stream SDK documentation, look up Stream React/iOS/Android/Node/Flutter/Unity SDK methods, ask how-to questions about Stream hooks/components/methods, configure moderation blocklists or automod, set up webhooks, or anything tagged Chat React, Video iOS, Feeds Node, Moderation, etc. Routes to the right sub-skill based on the task.

Image & Video

What this skill does


# Stream - skill router

This skill picks the track from the user's input and delegates to a specialized sub-skill. **It does no scaffolding, CLI, or docs work itself** - those live in dedicated skills.

> **Read first:** [`RULES.md`](RULES.md). Non-negotiable rules apply, including the **Peer skills** procedure (Glob path + install command + install policy + Skill-vs-Read-inline rule).
>
> **Peer manifest:** [`peers.yaml`](peers.yaml) (schema: [`peers.schema.json`](peers.schema.json)) is the single source of truth for peer skill names, Glob paths, install commands, and routing signals. Every peer installs silently on demand. Read it before installing or routing to a peer.
>
> **After picking a sub-skill:** follow the procedure in RULES.md > Peer skills - Glob the entry's `SKILL.md` path, install it if missing (always silently - every peer is silent-install), then Skill tool (if listed) or Read inline. Do not call `Skill` before 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`](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`)
- All peers install silently on demand - install if missing, then route, no prompt
- **Peer signals take precedence over the `stream-builder` 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 `stream-builder` - the platform token wins.

**Build a new app with Stream (web)** -> use the `stream-builder` skill (default when no peer signal is present)
- Empty/new directory + "build me a Chat/Video/Feeds app", "scaffold", "create a new ..." and **no platform signal** (no `react native`, `expo`, `swift`, `ios`, `android`, etc.)
- Covers Steps 0-7 (scaffold, theme, auth, env, SDK install, component generation)

**Add Stream to an existing app (web)** -> use the `stream-builder` skill (default when no peer signal is present)
- Existing project + "add Chat to this app", "integrate Video", "drop Feeds into ..." and **no platform signal**
- Same SDK wiring as scaffold; skips Next.js init and theme pick

**Audit an existing Stream Video integration against best practices** -> the matching platform pack runs its **read-only** Integration best-practices audit (no scaffolding, no CLI, no build steps)
- Peer signal (`react native` / `expo`) -> `stream-react-native`; web / React / Next.js or no platform signal -> `stream-builder` (Track F)
- Triggers: "audit/review my video integration", "check my app against best practices", "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 `stream-cli` "check {anything}" route below

**Query Stream data via the CLI** -> use the `stream-cli` skill
- "list calls", "show channels", "any flagged", "find users"
- Literal CLI: `stream api ...`, `stream config ...`, `stream auth ...`
- Tricky bodies and filter syntax live in the sub-skill's cookbook
- **Required for every `stream api` call** - including ad-hoc "let me check" queries from inside other sub-skills. No guessing endpoint names from training data; route through `stream-cli` (or read `~/.stream/cache/API.md`) first. See [`RULES.md`](RULES.md) > CLI safety.

**Install the Stream CLI** -> use the `stream-cli` skill
- "install the CLI", "set up stream" with no project context
- Bootstrap (binary install, SHA-256 verification, TTY confirmation) ships with the CLI sub-skill

**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?"
- No CLI needed - answers come from getstream.io with citations

---

## 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 | Sub-skill |
|---|---|
| Explicit SDK/framework token: `Chat React`, `Video iOS`, `Feeds Node`, `Moderation`, etc. (with or without version), and **no build/integrate verb** | `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` |
| **Audit/review an existing Stream Video integration** (read-only): "audit/review my video integration", "check my app against Stream's best practices", "is my video app production-ready?", "what am I missing before launch?" - **no build/integrate verb**. Peer signal (`react native` / `expo`) -> `stream-react-native`; web / React / Next.js or no platform signal -> `stream-builder` (Track F). **This row is matched before - and wins over - the `stream-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) |
| Operational verbs + Stream noun: "list calls", "show channels", "any flagged", "find users", "check {anything}" | `stream-cli` |
| `stream api`, `stream config`, `stream auth` (literal CLI invocation) | `stream-cli` |
| "Install the CLI", "set up stream" with no project context | `stream-cli` |
| **Build/integration intent + a token matching a peer's `signals` in [`peers.yaml`](peers.yaml)** (e.g. `swift` / `.xcodeproj` -> `stream-swift`; `react native` / `expo` / `stream video react native` / `stream video rn` -> `stream-react-native`). **This row takes precedence over the web `stream-builder` rows below whenever a peer signal is present, and also wins over the docs how-to rows above whenever the request contains a build/integrate verb (`add`, `build`, `integrate`, `scaffold`, `wire`, `set up`, `create`) alongside the peer signal.** | matching peer (installed silently if missing) |
| "Build me a ... app", "scaffold", "create a new ..." + Stream product, in an empty/new directory, **and no peer signal present** | `stream-builder` (web/Next.js, the default when no platform signal is given) |
| "Add Chat/Video/Feeds to this app", "integrate Stream into" - existing project, **and no peer signal present** | `stream-builder` (web/Next.js, the default when no platform signal is given) |
| Operational verb wrapped in how-to phrasing (e.g. "how do I list my calls?" - docs *or* CLI) | **Ask one disambiguator** |

**Track D carve-out.** `stream-docs` answers from documentation only - no preflight, no shell commands, no project inspection. Every other sub-skill runs preflight before doing real work.

**Docs vs platform packs.** A pure how-to or method-lookup question about an iOS/Android/etc. SDK symbol stays in `stream-docs` - don't pull in a platform pack for a documentation answer. Platform packs (e.g. `stream-swift`) are for *building or integrating* - scaffolding projects, wiring packages, generating views.

**Disambiguator.** If the input fits more than one row (typically operational verb + how-to phrasing), ask one short question and wait. Don't probe before the answer:

> Want me to look up the SDK method (docs) or run it now via CLI?

After the answer, route as if the user had given that signal directly.

**Bare `/stream` with no args.** Render the menu under "Quick navigation" **verbatim**, then wait for input. No shell execution, no probing, no install.

---

## Quick navigation

For a bare `/stream` (and whenever the user wants
Files: 4
Size: 28.7 KB
Complexity: 48/100
Category: Image & Video

Related in Image & Video