@inline-openclaw/inline
v0.0.13
Published
OpenClaw channel plugin for interacting with an OpenClaw agent via **Inline**.
Readme
@inline-openclaw/inline
OpenClaw channel plugin for interacting with an OpenClaw agent via Inline.
Status: beta (solid foundation; expect iteration).
Quick setup guide: docs/openclaw-setup.md.
Create bot/token guide: docs/create-inline-bot.md.
Supports:
- Inline DMs (
ChatType=direct) - Inline chats (including top-level thread-style chats) as conversations (
ChatType=group) - Message replies: OpenClaw
replyToIdis mapped to InlinereplyToMsgId(message id). - Native media upload/send for images, videos, and documents from
mediaUrlpayloads. - Emoji reactions via message tool actions (
react,reactions). - Reaction events on bot-authored messages are surfaced back to the agent as inbound context.
Non-goals (for now):
- Subthreads: Inline “replyTo” is a message reply, not a thread identifier. We do not expose OpenClaw subthread mode yet (
capabilities.threads=false).
Install
Requires OpenClaw 2026.2.9 or newer.
From npm (once published):
openclaw plugins install @inline-openclaw/inlineIf the plugin is already installed, update in place:
openclaw config set plugins.installs.inline.spec '"@inline-openclaw/inline@latest"'
openclaw plugins update inlineFrom a local checkout (dev):
cd /path/to/inline/packages/openclaw-inline
bun run build
openclaw plugins install --link /path/to/inline/packages/openclaw-inlineConfigure
Channel config lives under channels.inline (supports account settings, block streaming/chunking, and group tool policy).
Plugin id is inline (for plugins.entries.*).
If you enable explicitly, use:
plugins:
entries:
inline:
enabled: trueMinimal setup (token field only):
channels:
inline:
enabled: true
token: "<INLINE_BOT_TOKEN>"baseUrl defaults to https://api.inline.chat.
dmPolicy defaults to pairing (recommended starting point).
requireMention defaults to false for groups (set true to require explicit mentions).
Example:
channels:
inline:
enabled: true
baseUrl: "https://api.inline.chat"
token: "<INLINE_BOT_TOKEN>"
# DMs:
dmPolicy: "pairing" # pairing|open|disabled
allowFrom:
- "inline:123" # or "user:123" or just "123"
# Group threads/chats:
groupPolicy: "allowlist" # allowlist|open|disabled
groupAllowFrom:
- "inline:123" # or "user:123" or just "123"
requireMention: true # optional: default is false
replyToBotWithoutMention: true # if true, replies to bot messages can bypass mention requirement
# Inbound context history (used to build richer thread context for the agent):
historyLimit: 12 # group chats
dmHistoryLimit: 6 # direct messages
# Streaming + chunking:
mediaMaxMb: 20
blockStreaming: true
chunkMode: "newline" # length|newline
blockStreamingCoalesce:
minChars: 600
idleMs: 700
maxChars: 2200
# Group-level tool policy (for agent tool access in group sessions):
groups:
"88":
requireMention: false
tools:
allow: ["message", "web.search"]
toolsBySender:
"42":
allow: ["message"]If you set dmPolicy: "open", set allowFrom: ["*"].
Outbound Target Semantics
For message send/plugin outbound sends:
chat:<id>targets a chat id.user:<id>targets a user id (DM peer).inline:user:<id>andinline:chat:<id>are accepted and normalized.- User directory IDs and
channels resolve --kind useroutputs are returned asuser:<id>to keep DM targets explicit. - Bare numeric ids are disambiguated against Inline directory data:
- matches chat only -> sent as chat id
- matches user only -> sent as user id
- matches both -> rejected (use explicit
chat:oruser:) - matches neither -> treated as chat id (legacy behavior)
Message Tool RPC Actions
The plugin exposes Inline RPC-backed actions through OpenClaw's message tool.
Inline RPC-backed actions use a numeric chat id via to, chatId, or channelId.
- Replying:
reply,thread-reply - Reactions:
react,reactions - Reading/searching:
read,search - Editing:
edit - Channels/threads:
channel-info,channel-edit,channel-list,channel-create,channel-delete,channel-move,thread-list,thread-create - Participants:
addParticipant,removeParticipant,leaveGroup,member-info - Message lifecycle:
delete,unsend - Pins:
pin,unpin,list-pins - Space permissions:
permissions
You can gate action groups from config:
channels:
inline:
actions:
reply: true
reactions: true
read: true
search: true
edit: true
channels: true
participants: true
delete: true
pins: true
permissions: trueMulti-account:
channels:
inline:
accounts:
default:
baseUrl: "https://api.inline.chat"
token: "<BOT_TOKEN_A>"
work:
baseUrl: "https://api.inline.chat"
token: "<BOT_TOKEN_B>"Quick Troubleshooting
plugin not found: inline/plugins.entries.inline: plugin not found: inline- Ensure the plugin is installed and discovered (
openclaw plugins list).
- Ensure the plugin is installed and discovered (
doctor --fixsuggests Inline changes even though channel is healthy- Plugin entry id should be
inline.
- Plugin entry id should be
Inline: SETUP / no token- Ensure
channels.inline.tokenis set and plugin is updated (openclaw plugins update inline). - If using
dmPolicy: "open", ensureallowFrom: ["*"].
- Ensure
