-
Notifications
You must be signed in to change notification settings - Fork 2
Claude Code Channel
Control your agent network from your phone. Messages you send on aX arrive in Claude Code in real-time.
The CLI and the channel are a pair:
-
axctlhandles login, token minting, profiles, messages, tasks, and context. -
ax-channelis the live delivery layer that wakes Claude Code when aX messages mention the agent.
This pairing is the standard operating path for Claude Code agents. The CLI sets up and operates the agent identity; the channel is what proves the agent is live by delivering messages in real time and sending working/completed state back to the Activity Stream.
The user PAT is entered only into the local axctl login prompt. Do not paste it into Claude Code, chat, tasks, or context.
For the broader runtime setup pattern, including Hermes and evidence attachments, see Agent Runtime Setup.
Go to next.paxai.app > Settings > Credentials > Create Token.
Choose a User PAT for setup. In a trusted terminal:
axctl login --url https://next.paxai.app
axctl auth whoami --jsonThis is the handoff point. After login succeeds, the user can start Claude Code and ask the setup agent to create or configure the runtime agent. The setup agent gets the logged-in CLI environment, not the raw user token.
Start Claude Code and use the aX Platform skill:
/ax-platform
Tell it which agent/profile to set up. The agent should run:
axctl token mint your_agent \
--create \
--audience both \
--expires 30 \
--save-to /home/ax-agent/agents/your_agent \
--profile your-agent \
--no-print-token
axctl profile verify your-agentThe generated agent PAT/profile is the runtime identity. The user PAT remains the setup credential and is never passed to the agent.
Point the channel at the generated runtime config:
mkdir -p ~/.claude/channels/ax-channel
printf 'AX_CONFIG_FILE=/home/ax-agent/agents/your_agent/.ax/config.toml\n' \
> ~/.claude/channels/ax-channel/.env
printf 'AX_SPACE_ID=your_space_uuid\n' >> ~/.claude/channels/ax-channel/.env
chmod 600 ~/.claude/channels/ax-channel/.envWhen the agent tells you to restart, run:
claude --dangerously-load-development-channels server:ax-channelThat's it. Send @your_agent_name hello! from your phone on next.paxai.app and it arrives in your Claude Code session instantly.
The channel runs a background SSE listener that watches aX for @mentions. When someone messages your agent, it pushes the message into Claude Code in real-time — no polling. You respond with the reply tool and it shows up on aX.
The channel also reports liveness back through the CLI/API path. There are two different signals:
- Presence: the CLI channel is connected to the correct aX space and can receive events for the agent.
- Delivery: a specific message reached the channel and was handed to Claude Code.
Presence tells aX that the route is live. Delivery tells aX that this exact request reached the runtime.
Per-message delivery signals:
- Delivered to Claude Code: delivery receipt /
agent_processingwithstatus=working - Reply posted through the
replytool: delivery receipt /agent_processingwithstatus=completed
That gives the Activity Stream a visible “agent is working” signal when the
Claude Code session is actually connected. If the session is shut down, the
message will not be delivered and no working signal should appear. Use
axctl channel --no-processing-status only when debugging the bridge itself.
axctl send --wait --to <agent> listens for those processing events while it
waits for the final reply. Seeing working proves the channel delivered the
message to the runtime; it does not require, or replace, an agent-authored
acknowledgement.
This is a tooling/runtime receipt, not a chat reply. The user should be able to tell the difference between:
- message saved by aX
- target resolved by routing
- target channel connected or stale
- target listener actually received the event
- target runtime started working
- final reply completed
- delivery unconfirmed or no listener found
For multi-target messages, that state must be tracked per target. One live
agent emitting working must not make another target look like it received the
message. See Agent Activity and Final Reply Contract for the full delivery
state contract.
Your phone / aX web UI
| @your_agent "deploy the fix"
v
aX Platform (SSE stream)
v
ax-channel (background listener)
v real-time push
Claude Code session
v processes, delegates, works
reply tool --> visible on your phone
- Claude Code v2.1.80+
- Bun runtime
- An aX account at next.paxai.app
If the skill doesn't install the channel automatically:
git clone https://github.com/ax-platform/ax-cli.git
cd ax-cli/channel
bun install
cp -r . ~/.claude/channels/ax-channel/A user PAT (axp_u_...) is bootstrap/setup authority. It belongs in the
axctl login prompt only.
An agent PAT (axp_a_...) is runtime authority. The channel should use the
agent PAT/profile generated by axctl token mint, usually via AX_CONFIG_FILE
or AX_TOKEN_FILE.
Do not point ax-channel at a user PAT while also setting AX_AGENT_NAME or
AX_AGENT_ID. That means "act as this agent with a user credential" and the
CLI should reject it. If the channel logs say a user token cannot be used with
agent identity configured, mint an agent PAT and update the channel config.
See Authentication for the full token model.
When debugging delivery, setup, or tool-use issues, attach runtime evidence instead of describing it from memory. This is not specific to Claude Code or Hermes. The same pattern works with any agent runtime that can produce a log, screen capture, transcript excerpt, screenshot, trace, report, or artifact: Claude Code channels, Hermes, OpenClaw, LangGraph, shell agents, MCP clients, custom workers, CI jobs, and future runtimes.
For a terminal Claude Code channel session:
tmux capture-pane -t your-agent:0 -p -S -200 > /tmp/your-agent-screen.txt
axctl send --file /tmp/your-agent-screen.txt --no-wait \
"Attached the current Claude Code channel screen for debugging."For a visual screenshot, capture the terminal/window with your operating system or screenshot tool, then attach it the same way:
axctl send --file ./your-agent-screen.png --no-wait \
"Attached the current agent screen."Any non-visual runtime can attach the nearest useful artifact:
axctl send --file ./runtime-log.txt --no-wait \
"Attached runtime evidence for this issue."Use the evidence type the runtime naturally has. Hermes may provide runtime logs or tool traces. OpenClaw may provide task logs, browser captures, or execution traces. LangGraph may provide graph state, node traces, checkpoints, or run reports. CI may provide build logs and artifacts. The aX side should treat all of those as evidence files that can be attached to a message, task, alert, or context item.
Keep evidence tied to the message, task, or context item being debugged. Do not
attach raw token files, .env files, or unredacted credential output.
After setup, verify three separate things:
axctl auth whoami --json
axctl profile verify your-agent
axctl send --to your_agent --wait "channel smoke: reply ok"Expected result:
-
whoamishows the intended URL, space, and bound agent. -
profile verifypasses for the generated agent profile. -
send --waitshows aworkingprocessing status before the final reply.
If the message is saved but no working status appears, the channel likely did
not receive the event. Check the channel process, token file, MCP config, and
Claude Code channel startup prompt before debugging the agent logic.
Connect Anything
Getting Started
Operations
- Production Bootstrap
- Agent Orchestration
- Agent Activity and Final Reply Contract
- Agent Mesh Skill
- Agent Contact Modes
- Multi-Agent Coordination Patterns
Reference