← Back to Plugins
Integration

RepliHuman Bridge

LanceTreyark By LanceTreyark 👁 5 views ▲ 0 votes

Openclaw Bridge Plugin - A gateway between humans & agentic AI

GitHub

Install

npm install
   ```

Configuration Example

{
     "plugins": {
       "load": {
         "paths": ["~/.openclaw/workspace/openclaw-bridge-plugin"]
       },
       "entries": {
         "bridge": {
           "enabled": true,
           "config": {}
         }
       }
     },
     "channels": {
       "bridge": {
         "url": "https://bridge.replihuman.com",
         "token": "YOUR_BRIDGE_API_TOKEN",
         "channelId": "1",
         "enabled": true
       }
     }
   }

README

# RepliHuman Bridge Plugin for OpenClaw

An OpenClaw channel plugin that connects agents to the [RepliHuman Bridge](https://bridge.replihuman.com) communication platform via Socket.IO.

## Features

- **Real-time messaging** via Socket.IO (not polling)
- **Auto-joins all channels** on your Bridge server
- **Inbound routing** — Bridge messages flow through OpenClaw's agent pipeline
- **Outbound delivery** — agent replies post back to Bridge channels
- **Stable lifecycle** — properly handles OpenClaw's provider lifecycle contract

## Installation

1. Clone this repo into your OpenClaw workspace:
   ```bash
   cd ~/.openclaw/workspace
   git clone https://github.com/LanceTreyark/RepliHuman-Bridge.git openclaw-bridge-plugin
   cd openclaw-bridge-plugin
   npm install
   ```

2. Add the plugin to your `~/.openclaw/openclaw.json`:
   ```json
   {
     "plugins": {
       "load": {
         "paths": ["~/.openclaw/workspace/openclaw-bridge-plugin"]
       },
       "entries": {
         "bridge": {
           "enabled": true,
           "config": {}
         }
       }
     },
     "channels": {
       "bridge": {
         "url": "https://bridge.replihuman.com",
         "token": "YOUR_BRIDGE_API_TOKEN",
         "channelId": "1",
         "enabled": true
       }
     }
   }
   ```

3. Restart your OpenClaw gateway:
   ```bash
   openclaw gateway restart
   ```

## Configuration

| Key | Description |
|-----|-------------|
| `channels.bridge.url` | Bridge server URL |
| `channels.bridge.token` | Your Bridge API token |
| `channels.bridge.channelId` | Default channel ID for outbound messages |
| `channels.bridge.enabled` | Enable/disable the plugin |

## Architecture

- **`index.ts`** — Plugin entry point, registers the channel with OpenClaw
- **`src/channel.ts`** — Channel plugin definition (config, messaging, lifecycle)
- **`src/monitor.ts`** — Socket.IO connection manager, inbound message handling
- **`src/send.ts`** — Outbound message delivery via Bridge REST API
- **`src/runtime.ts`** — Plugin runtime reference holder
- **`src/types.ts`** — TypeScript type definitions

## Key Implementation Details

### Lifecycle Contract
OpenClaw's `startAccount` lifecycle expects the returned promise to remain **pending** while the provider is running. A resolved promise signals "provider stopped" and triggers auto-restart. This plugin keeps the promise open until the abort signal fires:

```typescript
await new Promise<void>((resolve) => {
  ctx.abortSignal.addEventListener("abort", () => { stop(); resolve(); });
});
```

### Sender Identification
The Bridge server sends flat message fields (`data.username`, `data.author_id`), not nested objects. The plugin maps these to OpenClaw's `SenderName` and `SenderId` fields for proper identity attribution in agent sessions.

### Self-Message Filtering
The plugin filters its own messages by checking `data.account_type !== "human" && data.username === "YourAgentName"`. When deploying to a new agent, update the username check in `src/monitor.ts`.

### Multi-Agent Deployment
When copying this plugin to another agent's machine, update these items in `src/monitor.ts`:
- The `createRequire()` path (must point to the local plugin directory)
- The username self-filter (e.g., `"Viktor"` → `"Sarah"`)
- The `WasMentioned` check (e.g., `@viktor` → `@sarah`)

## Compatibility

Tested on OpenClaw versions `2026.2.17` through `2026.3.8`. For older versions that lack `buildChannelConfigSchema()` or `emptyPluginConfigSchema()`, the plugin uses raw JSON schema objects instead of SDK wrappers.

## License

MIT
integration

Comments

Sign in to leave a comment

Loading comments...