Get Started

Reference

Nexting Developer Documentation | August 2026

iPhone App

Pairing the PIN

StepAction
1Power on your Nexting PIN. The LED will blink through red → green → blue, then settle into a red slow blink (waiting for connection).
2Open the Nexting app. It automatically scans for nearby devices.
3Tap on your device to pair. The LED turns solid blue when connected.
4Press the PTT (push-to-talk) button and speak.

Voice Pipeline

When you press the PTT button on the PIN:

StepWhat Happens
1PIN captures audio and streams it to iPhone via BLE.
2iPhone records the audio locally, then sends it to the Nexting cloud STT service (Whisper) for transcription.
3Transcribed text is sent to the AI model via the unified WebSocket. The recording is kept locally on your iPhone for playback and history.
4AI processes the message and returns a response.
5Response is displayed on screen and spoken via TTS.
Audio is sent to the Nexting cloud for transcription (streaming Volcengine and Whisper file fallback). Takes that produce text are also stored in Voice History for up to 30 days so you can replay them. Empty recognition is not saved. See the Privacy Policy.

App Tabs

TabDescription
HomeVoice interaction with your AI assistant, plus your Claude Code / Codex / Grok / Cursor session inbox.
ChatConversations: text and voice chat for the active mode (Nexting AI, Claude Code, Codex, Grok, Cursor, MyOpenClaw, MyHermes).
SettingsConnection mode, skills, devices, account, and preferences.

Authentication

The system uses three layers of authentication, each verified once at connection time:

LayerWho → WhereMethodPurpose
1iPhone → Cloud ServerSupabase JWTIdentifies the user account.
2Plugin → Cloud ServerRelay token (/relay/connect)Identifies the OpenClaw instance.
3Relay → Local PluginAuth token (WS auth message)Authenticates the local plugin connection.
Auth Message (Layer 3)
{ "type": "auth", "deviceId": "relay-client", "token": "<authToken>" }

The cloud server responds with auth_ok including the current plugin connection status:

auth_ok Response
{ "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.

Terminal
openclaw pinclaw login    # sign in, auto-configure relay, restart gateway
openclaw pinclaw status   # check current relay config
openclaw pinclaw logout   # remove relay config

Your 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:

Plugin Status Push
{ "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 SayWhat 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

Terminal
# 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.ts

The 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

VariableDefaultDescription
WS_PORT18790Plugin WebSocket server port.
AUTH_TOKENpinclaw-dev-token-2026Device auth token for development.
FALLBACK_AI_KEY(none)AI API key for standalone mode (bypasses Gateway).

Project Structure

Repository Layout20 lines
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 types

Loading Plugin from Local Path

During development, load the plugin directly from your clone:

~/.openclaw/openclaw.json
{
  "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.