Build and integrate Stream Chat, Video, and Feeds in Android apps. Use for Jetpack Compose, Android Studio, and Gradle project work — including Stream package setup, auth and token wiring, screen blueprints, and any follow-up Stream UI work such as adding screens, navigating between channel list and channel/message screens, channel tap handling, deep links, push routing, theming, custom channel/message UI, video calling flows (joining/starting calls, ringing, custom call controls and participant tiles), and Feeds surfaces (timeline, activity composer, threaded comments, follow graph / profile, notification feed, stories).
Rules: Read RULES.md once per session - every non-negotiable rule is stated there, nowhere else.
This file is the single entrypoint: intent classification, local project detection, and module pointers for Stream work in Android apps.
Before any tool call, decide the track from the user's input alone - no probes first.
| Signal in user input | Track |
|---|---|
Explicit product/framework token: Chat Compose, Chat XML, Video Android, Video Compose, Feeds Android, Feeds Compose, etc. | C - Reference lookup |
| Words "docs" or "documentation" around Stream Android/Compose work | C - Reference lookup |
| "How do I {X} in Compose/XML/Android?", "What does {SDK type/Composable/View/Fragment} do?" | C - Reference lookup |
| "Build me a new Android app", "create a Compose app", "new Android app" + Stream product | A - New app |
| "Add/integrate Stream into this app", "wire Chat/Video/Feeds into my Android project" | B - Existing app |
| "Install Stream packages", "set up Stream in Android Studio", "wire auth/token flow" with no broader feature request | D - Bootstrap / setup |
Bare /stream-android with no args | List the tracks briefly and wait |
If the request is ambiguous between build/integrate and reference lookup, ask one short question and wait:
Do you want me to wire this into the project, or just map the Android SDK pattern and files?
builder.md and sdk.md. Do not probe the project before credentials.Order: intent classification -> Step 0.5 (this step) -> Project signals probe -> track work. Do this before running the Project signals shell command, even if a track table below lists "Detect" as phase 1. Run once per session for tracks A, B, and D. Skip for Track C.
Follow credentials.md to:
Wire the API key from getstream env's output (e.g. BuildConfig.STREAM_API_KEY) and use the real user token in code snippets - never placeholder strings. If a track A/B/D task reaches code work and credentials haven't been collected yet, return to credentials.md before continuing.
Read-only local probe. Use it to detect whether the user is in an Android Studio / Gradle project, a Kotlin module, or an empty directory.
bash -c 'echo "=== GRADLE ROOT ==="; find . -maxdepth 2 \( -name "settings.gradle.kts" -o -name "settings.gradle" -o -name "build.gradle.kts" -o -name "build.gradle" \) -print 2>/dev/null; echo "=== APP MODULES ==="; find . -maxdepth 3 -type f \( -name "build.gradle.kts" -o -name "build.gradle" \) -path "*/*/build.gradle*" -print 2>/dev/null; echo "=== VERSION CATALOG ==="; find . -maxdepth 3 -name "libs.versions.toml" -print 2>/dev/null; echo "=== MANIFESTS ==="; find . -maxdepth 4 -name "AndroidManifest.xml" -print 2>/dev/null; echo "=== EMPTY ==="; test -z "$(ls -A 2>/dev/null)" && echo "EMPTY_CWD" || echo "NON_EMPTY"'Hold the result in conversation context. Don't re-run it unless the user changes directory or the project shape clearly changed.
Use the result to produce a one-line status, for example:
Compose app detected - app/build.gradle.kts - libs.versions.toml present - ready for Stream wiringMulti-module Gradle project detected - preserve existing module layoutXML / View-based app detected - keep current UI layer unless the user asks to migrateNo Gradle project found - user needs to create the app in Android Studio first| Track | Module(s) |
|---|---|
| A - New app | builder.md + sdk.md + relevant reference files |
| B - Existing app | builder.md + sdk.md + relevant reference files |
| C - Reference lookup | sdk.md + relevant reference files |
| D - Bootstrap / setup | builder.md + sdk.md |
Shared Android/Kotlin patterns live in sdk.md.
Product and UI-layer specifics live under references/ using a flat naming scheme that can grow with the full Stream Android surface:
references/<PRODUCT>-<UI_LAYER>.mdreferences/<PRODUCT>-<UI_LAYER>-blueprints.mdCurrent extracted modules:
references/CHAT-COMPOSE.md + references/CHAT-COMPOSE-blueprints.mdreferences/CHAT-XML.md + references/CHAT-XML-blueprints.mdreferences/VIDEO-COMPOSE.md + references/VIDEO-COMPOSE-blueprints.mdreferences/FEEDS-COMPOSE.md + references/FEEDS-COMPOSE-blueprints.mdFeeds has no pre-built UI components.
FEEDS-COMPOSE.mdcovers the headless data SDK (FeedsClient, FeedState, ActivityState);FEEDS-COMPOSE-blueprints.mdis custom Composable scaffolding driven by those state flows. Load both for any Feeds request.
Future Android product coverage should stay in this naming family instead of creating more top-level skills.
If the requested product/UI layer file is not bundled yet, say so plainly, use sdk.md for the shared Android patterns, and only switch to live docs if the user asks.
Full detail: builder.md - use the new-project path.
| Phase | Name | What you do |
|---|---|---|
| A1 | Detect | After Step 0.5 (credentials), run Project signals. If there is no Android app yet, tell the user to create one in Android Studio first. |
| A2 | Choose lane | Confirm product(s) and UI layer: Compose, XML/Views, or mixed. |
| A3 | Install + wire | Follow builder.md + sdk.md, then load only the needed product references. |
| A4 | Verify | Confirm Gradle sync, ChatClient lifetime, auth, and first rendered screen. |
Full detail: builder.md - use the existing-project path.
| Phase | Name | What you do |
|---|---|---|
| B1 | Detect | After Step 0.5 (credentials), run Project signals and inspect the existing app structure before editing. |
| B2 | Preserve | Keep the current UI layer, dependency strategy (version catalog vs inline), and navigation setup unless the user asks for a migration. |
| B3 | Integrate | Use sdk.md for shared wiring, then load only the needed product reference files. |
| B4 | Verify | Confirm the requested Stream flow builds and renders inside the existing app. |
Load only the relevant files for the requested product and UI layer.
sdk.mdreferences/CHAT-COMPOSE.mdreferences/CHAT-COMPOSE-blueprints.mdreferences/CHAT-XML.mdreferences/CHAT-XML-blueprints.mdreferences/VIDEO-COMPOSE.mdreferences/VIDEO-COMPOSE-blueprints.mdreferences/FEEDS-COMPOSE.mdreferences/FEEDS-COMPOSE-blueprints.mdIf the user asks for a product/UI-layer combo that is not bundled (e.g. Video XML, Feeds XML), say that clearly instead of inventing API details.
Use when the user wants the install and wiring path more than a feature build:
ChatClient lifetime via sdk.mdb81d80e
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.