docs/channels/raft.md
Raft support connects an OpenClaw agent to a Raft External Agent through the local Raft CLI. Raft sends authenticated wake hints to the Gateway. The agent then uses the Raft CLI to check and send messages.
Raft is an official external plugin. Install it on the Gateway host:
openclaw plugins install @openclaw/raft
openclaw gateway restart
Details: Plugins
The plugin does not store Raft credentials. The Raft CLI keeps that authentication in its own profile.
Set the profile in config:
{
channels: {
raft: {
enabled: true,
profile: "openclaw",
},
},
}
For the default account, you can instead set RAFT_PROFILE in the Gateway
environment:
RAFT_PROFILE=openclaw
Use a named account when one Gateway connects to more than one Raft External Agent:
{
channels: {
raft: {
accounts: {
support: {
profile: "support-agent",
},
engineering: {
profile: "engineering-agent",
},
},
},
},
}
The interactive setup flow records the same profile:
openclaw channels setup raft
When the Gateway starts, the plugin:
raft --profile <profile> agent bridge with that endpoint and a
per-process token.eventId, attemptId, messageId, delivery_id, wake_id, or id.The bridge owns Raft delivery retries and reconnects. The OpenClaw turn receives only a wake notice, not a copied Raft message body. It uses the CLI to read pending messages and to send its response:
raft --profile openclaw message check
raft --profile openclaw message send
Check that OpenClaw can find the CLI and has a configured profile:
openclaw channels status --probe
openclaw plugins inspect raft --runtime --json
Then send a message to the Raft External Agent. The Gateway log should show the Raft bridge starting, followed by an inbound wake. The agent should use the configured Raft profile to check its pending messages.