Get Started
Reference
Nexting Developer Documentation | August 2026
iPhone App
Pairing the PIN
| Step | Action |
|---|---|
| 1 | Power on your Nexting PIN. The LED will blink through red → green → blue, then settle into a red slow blink (waiting for connection). |
| 2 | Open the Nexting app. It automatically scans for nearby devices. |
| 3 | Tap on your device to pair. The LED turns solid blue when connected. |
| 4 | Press the PTT (push-to-talk) button and speak. |
Voice Pipeline
When you press the PTT button on the PIN:
| Step | What Happens |
|---|---|
| 1 | PIN captures audio and streams it to iPhone via BLE. |
| 2 | iPhone records the audio locally, then sends it to the Nexting cloud STT service (Whisper) for transcription. |
| 3 | Transcribed text is sent to the AI model via the unified WebSocket. The recording is kept locally on your iPhone for playback and history. |
| 4 | AI processes the message and returns a response. |
| 5 | Response is displayed on screen and spoken via TTS. |
App Tabs
| Tab | Description |
|---|---|
| Home | Voice interaction with your AI assistant, plus your Claude Code / Codex / Grok / Cursor session inbox. |
| Chat | Conversations: text and voice chat for the active mode (Nexting AI, Claude Code, Codex, Grok, Cursor, MyOpenClaw, MyHermes). |
| Settings | Connection mode, skills, devices, account, and preferences. |
Authentication
The system uses three layers of authentication, each verified once at connection time:
| Layer | Who → Where | Method | Purpose |
|---|---|---|---|
| 1 | iPhone → Cloud Server | Supabase JWT | Identifies the user account. |
| 2 | Plugin → Cloud Server | Relay token (/relay/connect) | Identifies the OpenClaw instance. |
| 3 | Relay → Local Plugin | Auth token (WS auth message) | Authenticates the local plugin connection. |
{ "type": "auth", "deviceId": "relay-client", "token": "<authToken>" }The cloud server responds with auth_ok including the current plugin connection status:
{ "type": "auth_ok", "deviceId": "relay-client", "pluginConnected": true }CLI Login
If you run your own OpenClaw instance, the openclaw pinclaw login command automates the entire setup. It opens your browser to sign in to nexting.ai (or pass --email/--password for terminal login), writes the relay config, and prints a reminder to restart the gateway with openclaw gateway run.
openclaw pinclaw login # sign in, auto-configure relay, restart gateway
openclaw pinclaw status # check current relay config
openclaw pinclaw logout # remove relay configYour iPhone (signed in with the same account) will connect automatically.
Plugin Status
The cloud server tracks plugin connectivity and pushes status changes to connected iPhones in real time:
{ "type": "plugin_status", "connected": true }The iPhone app shows an offline banner when the plugin is disconnected.
Scheduling
Ask your AI assistant to set reminders. Managed through the OpenClaw cron system.
| You Say | What Happens |
|---|---|
| "Remind me to drink water in 30 minutes" | One-time reminder, fires after 30m, delivered via TTS. |
| "Remind me to stretch every hour" | Recurring job, fires every 60m, continues until cancelled. |
| "Wake me up at 7am tomorrow" | One-time reminder at an absolute time. |
If the device is offline, messages are queued in the cloud and delivered on reconnect (queued messages expire after 24 hours).
Developer Guide
Local Development
# Clone the repo
git clone https://github.com/Nexting-ai/nexting.git
cd nexting
# Install dependencies
cd plugin && npm install
# Start the standalone dev server (no OpenClaw needed)
npx tsx standalone.tsThe standalone server runs the plugin WebSocket on port 18790 with a direct AI backend connection — useful for testing without a full OpenClaw setup.
Environment Variables
| Variable | Default | Description |
|---|---|---|
WS_PORT | 18790 | Plugin WebSocket server port. |
AUTH_TOKEN | pinclaw-dev-token-2026 | Device auth token for development. |
FALLBACK_AI_KEY | (none) | AI API key for standalone mode (bypasses Gateway). |
Project Structure
nexting/
├── plugin/ # OpenClaw channel plugin
│ ├── index.ts # Plugin entry point
│ ├── openclaw.plugin.json # Plugin manifest
│ ├── standalone.ts # Dev server (no OpenClaw)
│ └── src/
│ ├── channel.ts # Channel adapters
│ ├── types.ts # TypeScript typesLoading Plugin from Local Path
During development, load the plugin directly from your clone:
{
"plugins": {
"load": {
"paths": ["/path/to/pinclaw/plugin"]
},
"entries": {
"pinclaw": { "enabled": true }
}
}
}Then start the gateway normally: openclaw gateway run. The plugin will be loaded from your local directory with hot changes on restart.