> For the complete documentation index, see [llms.txt](https://tools.docs.sendbird.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://tools.docs.sendbird.com/plugins/client.md).

# Sendbird Client plugin

The Sendbird Client plugin adds Chat and Calls features to your app from inside Claude Code or Codex. Tell your AI coding agent what you want, for example "add a channel list", "add video calls", or "set up push on Android". The plugin then writes the code in your project with the Sendbird Chat SDK, Chat UIKit, or Calls SDK.

## What you can do

<table><thead><tr><th width="457.09375">What you want</th><th>Guide</th></tr></thead><tbody><tr><td>Add chat to an existing app, or create a new chat app</td><td><a href="/plugins/client/add-chat.md">Add Chat</a></td></tr><tr><td>Add 1-to-1 voice and video calls to an existing app, or create a new app with calls</td><td><a href="/plugins/client/add-voice-and-video-calls.md">Add voice and video calls</a></td></tr><tr><td>Add features, restyle Chat UIKit screens, set up push, check your integration, or explain an error</td><td><a href="#run-a-skill-with-a-command">Run a skill with a command</a></td></tr></tbody></table>

## Supported products and platforms

<table><thead><tr><th width="180.265625">Scope</th><th>Supported</th></tr></thead><tbody><tr><td>Products</td><td>• Chat<br>• Chat UIKit<br>• Calls (plugin version 0.1.54 or later)</td></tr><tr><td>Platforms</td><td>• iOS: UIKit, SwiftUI<br>• Android: Views, Jetpack Compose<br>• React<br>• React Native</td></tr><tr><td>Coding tools</td><td>• Claude Code<br>• Codex</td></tr></tbody></table>

Every Sendbird API the plugin writes comes from one of these sources:

* Sendbird's documentation
* The SDK installed in your project
* Sendbird's public source code

When the plugin can't confirm an API, it tells you what it checked and stops instead of guessing.

## How to use the plugin

You work with the plugin in a conversation in Claude Code or Codex. Install it once, open your app project, and describe what you want in plain words. The plugin finds your App ID, or asks for it once, and writes the code in your project.

### Before you begin

* Claude Code or Codex CLI on macOS, Linux, or Windows. On Windows, install Git for Windows first, because the plugin's scripts run in Git Bash.
* Your platform's development tools. iOS apps build only on a Mac.
  * iOS: Xcode
  * Android: Android Studio
  * JavaScript: Node.js
* A Sendbird app and its App ID. You can find the App ID on Sendbird Dashboard. If you use Sendbird CLI, log in and select the Sendbird app as described in the [Quickstart](/readme/quickstart.md). When the plugin finds no other App ID, it uses that Sendbird app's App ID. If you don't have a Sendbird app, create one on Sendbird Dashboard or [with Sendbird CLI](/readme/quickstart.md#create-a-sendbird-app).

### Install the plugin

Install the plugin from the terminal, or ask your AI coding agent to install it.

#### Install from the terminal

Run the commands for Claude Code or Codex. The first command adds the plugin source, and the second installs the plugin.

{% tabs %}
{% tab title="Claude Code" %}

```bash
claude plugin marketplace add sendbird/sendbird-plugins
claude plugin install sendbird-client@sendbird
```

{% endtab %}

{% tab title="Codex" %}

```bash
codex plugin marketplace add sendbird/sendbird-plugins
codex plugin add sendbird-client@sendbird
```

{% endtab %}
{% endtabs %}

The `sendbird/sendbird-plugins` source has both the Sendbird CLI plugin and the Sendbird Client plugin, so you can install both from it. If you added an older Sendbird plugin source, remove it first with `claude plugin marketplace remove sendbird` or `codex plugin marketplace remove sendbird`.

#### Ask your AI coding agent

In Claude Code or Codex, type:

```
Install the Sendbird Client plugin for me.
Use sendbird/sendbird-plugins as the plugin source.
```

Review the installation permission request before approving it, and wait for the installation to finish.

To confirm the installation, run `claude plugin list` or `codex plugin list` and find `sendbird-client@sendbird`.

### Open your app project

The plugin loads when a session starts, so start a new session after you install it. Open a terminal, move to your app project's folder, and start Claude Code or Codex there. Replace `/PATH/TO/YOUR/APP` with the folder's path. To create a new app, use an empty folder.

The plugin finds your App ID or asks for it, as described in [Give the plugin your App ID](#give-the-plugin-your-app-id). To skip the question, set the `SENDBIRD_APP_ID` environment variable in this terminal before you start the session.

{% tabs %}
{% tab title="Claude Code" %}

```bash
cd /PATH/TO/YOUR/APP
claude
```

The first time you start a session after installing the plugin, Claude Code shows a short notice about what the plugin runs on your computer.
{% endtab %}

{% tab title="Codex" %}

```bash
cd /PATH/TO/YOUR/APP
codex
```

Codex asks you to approve the plugin's hooks. The hooks block credentials in your code and Sendbird API code that has no verifiable source, and they don't run until you approve them. When **Hooks need review** appears:

1. Choose **Review hooks**.
2. Check the hooks.
3. Press `t` to trust them.

Codex asks again after each update.
{% endtab %}
{% endtabs %}

### Ask in plain words

You don't need to learn commands. In the session, say what you want in plain words. Here are two examples of requests.

To add a new screen, ask:

```
Add a channel list screen that opens from the home screen.
```

To change how existing screens look, ask:

```
Use dark mode for the Sendbird chat screens.
```

The plugin reads your project to find its platform, UI framework, and package manager, and then picks the right way to handle your request. It asks you only when it can't tell from the project, such as when a project mixes two UI frameworks. When it finishes, it lists the files it changed and any steps left for you.

### Give the plugin your App ID

The plugin looks for your App ID in this order and uses the first one it finds:

1. The `SENDBIRD_APP_ID` environment variable
2. The App ID it saved in `.sendbird-client/profile.json` in your project
3. The `sendbird.json` file that Sendbird CLI writes in your project
4. The Sendbird app selected in Sendbird CLI. The plugin tells you which App ID it used.

If Sendbird CLI is installed but no Sendbird app is selected, the plugin lists your Sendbird apps and asks you to pick one. It then runs `sendbird project init`, which writes `sendbird.json` in your project, so the CLI and the plugin use the same Sendbird app. If you aren't logged in to the CLI, it asks you to run `sendbird auth login`.

When it can't find an App ID, the plugin asks for it in the conversation, but only when it sets up Sendbird in your project or creates a new app project. Reply in the same conversation with the App ID, for example:

```
My Sendbird App ID is <APP_ID>.
```

Replace `<APP_ID>` with your App ID, without the angle brackets. The App ID isn't a secret. The plugin saves it in `.sendbird-client/profile.json` in your project and doesn't ask again. Your app code reads it from your project's settings file, such as `.env.local` in a JavaScript project or an `Info.plist` key in an iOS project.

For other requests, the plugin doesn't ask. It lists setting the App ID as a step left for you.

Give the plugin only the App ID. Keep these credentials out of your app code and your requests:

* Your CLI login
* Management API tokens
* Users' access tokens

### Next steps

* To add chat to an existing app or create a new chat app, follow [Add Chat](/plugins/client/add-chat.md).
* To add 1-to-1 voice and video calls, follow [Add voice and video calls](/plugins/client/add-voice-and-video-calls.md).

## Run a skill with a command

The plugin handles each kind of request with a skill, a built-in task such as `setup` or `explain-error`. To run a skill directly, enter its command. The prefix depends on your coding tool:

| Coding tool | Command format                                 | Example                  |
| ----------- | ---------------------------------------------- | ------------------------ |
| Claude Code | `/sendbird-client:` followed by the skill name | `/sendbird-client:setup` |
| Codex       | `$sendbird-client:` followed by the skill name | `$sendbird-client:setup` |

Some commands take a value, such as `/sendbird-client:add-feature reactions` or `/sendbird-client:explain-error 400302`.

| Skill                | What it does                                                                                                                                                          | Example request                                                                  |
| -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
| `setup`              | Installs the SDK, adds initialization and connection code, and can add a first screen. In an empty folder, it creates a new app.                                      | "Add Sendbird chat to this app."                                                 |
| `add-feature`        | Adds channels, messages, reactions, threads, typing indicators, file upload, push, or calls to existing code.                                                         | "Let users add emoji reactions to messages."                                     |
| `ui-customize`       | Restyles Chat UIKit screens: theme, colors, fonts, dark mode, header, message bubbles, or a replaced component.                                                       | "Use our brand color #6210CC in the chat screens."                               |
| `auth-recipes`       | Writes connection and session code: session tokens and refresh, multiple devices, reconnecting, and safe sign-out.                                                    | "Connect with a session token that our server returns from /api/sendbird-token." |
| `push-setup`         | Sets up push notifications for APNs, FCM, HMS, or web push, including token registration and opening the right screen from a notification.                            | "Send a push notification when a new message arrives."                           |
| `start-chat`         | Adds a button that opens a 1-to-1 chat with a specific user.                                                                                                          | "Add a 'Chat with seller' button on the product screen."                         |
| `permissions-setup`  | Decides which permission rules go in app settings, server code, or client code, then writes the client code.                                                          | "Only operators should be able to delete messages."                              |
| `calls-incoming`     | Sets up push for incoming calls and fixes common in-call audio and video problems.                                                                                    | "Incoming calls never ring on Android."                                          |
| `upgrade-sdk`        | Updates your Sendbird SDKs to the newest release of the same major version after you confirm.                                                                         | "Update my Sendbird SDKs to the latest version."                                 |
| `verify-integration` | Checks SDK versions, single initialization, permissions, manifest entries, and handlers that are never removed.                                                       | "Check whether my Sendbird setup is correct."                                    |
| `performance-audit`  | Looks for repeated connections, listener leaks, loading too much at once, and a missing offline cache.                                                                | "The chat screen gets slower the longer it's open. Find out why."                |
| `explain-error`      | Explains what a Sendbird error code means, what usually causes it, and how to fix it.                                                                                 | "What does error 400302 mean?"                                                   |
| `diagnose-channel`   | Finds why a channel is missing from the list, is created again each time, or disappeared.                                                                             | "Every time I tap Message, a new 1:1 channel is created."                        |
| `fix-build`          | Fixes a build or bundler error that names a Sendbird package.                                                                                                         | "The build fails with this error:" followed by the log                           |
| `run-check`          | Builds and launches your app and checks sign-in, connection, and messages between two test users, with screenshots. It runs only when you ask and agree to the build. | "Check that the Sendbird chat really works in this app."                         |
| `docs-search`        | Answers a how-to question from Sendbird's docs, public samples, and public discussions.                                                                               | "How do I mark messages as read?"                                                |
| `trace-sdk`          | Shows a public API's signature and documentation.                                                                                                                     | "What parameters does sending a file message take?"                              |
| `choose-ui`          | Compares Chat UIKit and your own screens on the Chat SDK for your platform and recommends one. It changes no files.                                                   | "Should I use Chat UIKit or build my own chat screens?"                          |

## Manage the plugin

### Check the installed version

{% tabs %}
{% tab title="Claude Code" %}

```bash
claude plugin list
```

Find `sendbird-client@sendbird` and check its **Version**.
{% endtab %}

{% tab title="Codex" %}

```bash
codex plugin list
```

Find `sendbird-client@sendbird` and check its **VERSION** column.
{% endtab %}
{% endtabs %}

### Update the plugin

The plugin stays at its installed version until you update it.

{% tabs %}
{% tab title="Claude Code" %}

```bash
claude plugin marketplace update sendbird
claude plugin update sendbird-client@sendbird
```

Then run `/reload-plugins` in your session, or start a new session.

To update automatically:

1. Run `/plugin`.
2. Open the **Marketplaces** tab.
3. Select **sendbird**.
4. Choose **Enable auto-update**.
   {% endtab %}

{% tab title="Codex" %}

```bash
codex plugin marketplace upgrade sendbird
```

After the update, Codex asks you to review the plugin's hooks again.
{% endtab %}
{% endtabs %}

### Remove the plugin

{% tabs %}
{% tab title="Claude Code" %}

```bash
claude plugin uninstall sendbird-client@sendbird
```

To also remove the plugin source, run `claude plugin marketplace remove sendbird`.
{% endtab %}

{% tab title="Codex" %}

```bash
codex plugin remove sendbird-client@sendbird
```

To also remove the plugin source, run `codex plugin marketplace remove sendbird`.
{% endtab %}
{% endtabs %}

Removing the plugin keeps the `.sendbird-client/` folder in your project. The folder holds:

* Your App ID
* What the plugin detected about your project
* A cache of your installed SDK
* Run check results and screenshots, in `.sendbird-client/run-check/`

It never holds tokens. You can delete it; the plugin detects the project again next time and finds or asks for the App ID again. Add `.sendbird-client/` to your project's `.gitignore`, because the folder belongs to the plugin, not your app.
