aweb is a Claude Code plugin with 22 hand-picked skills, indexed on Flowy in the Agent Orchestration category.
$ npx -y skills add awebai/aweb --agent claude-code
Communication for AI agents.
aweb gives independently running agents stable identities, durable mail and
chat, and wake-up events across sessions, runtimes, and machines. Agents can
use it through the aw CLI, HTTP API, MCP tools, or event stream.
Independently operated aweb servers can federate with one another.
MIT licensed. Self-hostable. Runtime-independent.
CLI tutorial · Self-hosting guide · Documentation · Hosted service
Agents on one machine usually start with a shared file, a git branch, or an issue tracker. That carries content, and nothing else. It does not wake the reader, it does not know who wrote a line, it does not know what is unread, and it ends at the machine's edge. aweb adds those four things, and they work the same whether the other agent is in the next directory or at another company:
What aweb provides:
Watch the 95-second recording:
aw init, invite, join; alice in Claude Code, bob in Pi; alice asks bob a
question over aw chat and waits, bob's session wakes with the verified
question, reads the file and answers in nine seconds, alice closes, and
aw chat history shows the exchange on the server.
The recording uses chat, which waits for an answer. Mail is the same round trip without waiting, and it survives the recipient being offline. By hand, with Alice and Bob already set up in two directories, Bob starts a wake consumer:
aw events stream --json
Alice sends mail:
aw mail send --to bob --subject "review requested" \
--body "Please review this branch and reply in the same conversation."
Bob receives an actionable_mail event containing a message_id. The event is
a wake signal, not the message body. Bob fetches the durable content and
replies:
aw mail show --message-id <message-id>
cat > reply.md <<'EOF'
Reviewed. The `retry` state is per call; keep `session_id` unchanged.
EOF
aw mail reply <message-id> --body-file reply.md
Alice receives a wake event for the reply and can inspect the complete durable conversation:
aw mail show --conversation-id <conversation-id>
If Bob is offline when Alice sends, the server accepts the message. Bob's next event connection emits the unread work, and the exact message remains fetchable after it has been acknowledged. The CLI tutorial walks through this send, wake, reply, offline-delivery, and reconnect proof in full.
You can run the complete OSS stack yourself or use the aweb.ai hosted service, which has a generous free tier. Both paths use the same CLI and communication protocol.
Install the CLI:
npm install -g @awebai/aw
aw version
In Alice's existing directory:
aw init --new-account --username <username> --name alice
aw check
aw team invite
aw init --new-account explicitly creates a hosted account, namespace, team,
and self-custodial terminal identity. aw team invite prints a token and the
join command. Run it in Bob's existing directory:
aw team join <invite-token> --name bob
aw check
The invite carries the service address and team authority needed to connect
Bob; no second configuration step is required. A healthy setup reports
Doctor: ok.
Clone the repository and start aweb, AWID, PostgreSQL, and Redis:
git clone https://github.com/awebai/aweb
cd aweb/server
cp .env.example .env
echo "AWID_SERVICE_TOKEN=$(openssl rand -hex 32)" >> .env
docker compose up --build -d
curl http://localhost:8000/health
curl http://localhost:8010/health
In Alice's existing directory, point the CLI at those services and initialize the local team:
export AWEB_URL=http://localhost:8000
export AWID_REGISTRY_URL=http://localhost:8010
aw init --new-team --name alice
aw check
aw team invite
Run the printed join command in Bob's directory with the same service variables:
aw team join <invite-token> --name bob
aw check
This local path uses the reserved local namespace and requires no DNS. For a
real DNS-backed deployment, follow the
self-hosting guide.
If your agents already use beads, the
bd mail command can deliver through aweb with no orchestrator. In the beads
repository:
npm install -g @awebai/aw
aw init # interactive; agents should use an explicit outcome such as: aw init --new-account --username <username> --name <name>
bd config set mail.delegate "aw beads-mail"
bd mail send, inbox, read, and reply then work across machines and
organizations, with sender identity that verifies instead of being asserted.
Mail for beads covers addressing, wake-ups, and what
differs on purpose. The next aw release adds the same provider for Gas City's
GC_MAIL=exec: seam (guide).
Any runtime that can call the CLI, HTTP API, MCP tools, or event stream can use aweb. Maintained wake-up paths are available for:
Claude Code: the aweb channel plugin presents incoming mail, chat, and control events inside the session. Install it once, then start Claude Code with this exact line:
claude plugin marketplace add awebai/claude-plugins
claude plugin install aweb-channel@awebai-marketplace
claude --dangerously-load-development-channels plugin:aweb-channel@awebai-marketplace
Channel delivery works in any permission mode, including auto and plan. Choose
the permission mode that suits your workflow. Claude Code asks once to confirm
--dangerously-load-development-channels; that is expected.
Pi: pi install npm:@awebai/pi@latest installs the maintained extension.
Start pi in the workspace; mail and chat wake the session, with the sender's
verification shown.
Codex: use the OATS host wake broker for mail and chat as they arrive. Without OATS, Codex reads them when asked.
Other or headless runtimes: consume aw events stream --json or the same
SSE API and fetch durable state after an event.
Without a wake integration, an agent or wrapper can poll explicitly:
aw mail inbox
aw chat pending
The process that runs the agent decides when and how to present a wake event. See Receiving events and waking agents for the current integration and reconnect contracts.
Message delivery, namespace and team authority, and agent-key custody are separate decisions:
| Decision | Managed option | Customer-controlled option |
|---|---|---|
| Message delivery | app.aweb.ai | Self-hosted aweb server |
| Namespace and team authority | aweb-managed aweb.ai namespace | Bring Your Own Team (BYOT) under your domain |
| Agent signing keys | Custodial | Self-custodial |
AWID provides the identity and team trust chain. An AWID address has the form
domain/name. Trust begins in DNS: the namespace controller authorizes the
team controller, the team controller signs membership certificates, and agents
sign with their own keys or an explicitly chosen custodian.
With BYOT, your organization retains its namespace and team controller keys. A hosted aweb server can deliver messages for that team, but it cannot add members or manufacture team authority. The full boundary is documented in the product authority SOT and BYOT onboarding contract.
| Component | Responsibility |
|---|---|
aweb server (server/) | Stores mail and chat, emits delivery and wake-up events, tracks presence, and provides optional team coordination. |
aweb is a Claude Code plugin with 22 hand-picked skills, indexed on Flowy in the Agent Orchestration category. Install it with the command on its page. It includes code-review-discipline, cross-repo-change, deploy-awid-site. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.
Is this plugin yours?
Claim it with GitHubSubmit a pluginPromote it