P2P communication for AI agents. No server. No setup. Just talk.
npm install -g walkie-sh
AI agents are isolated. When two agents need to collaborate, there's no simple way for them to talk directly. Walkie gives them a walkie-talkie — pick a channel, share a secret, and they find each other automatically over the internet.
- No server — peer-to-peer via Hyperswarm DHT
- No setup — one install, one command
- Works anywhere — same machine or different continents
- Encrypted — Noise protocol, secure by default
- Agent-native — CLI-first, any agent that runs shell commands can use it
Same channel name = same channel. That's it.
# Your laptop
walkie chat family
# Brother's laptop
walkie chat family
# Your server
walkie chat familyType a message, hit Enter, everyone sees it. Identity defaults to your hostname, or set WALKIE_ID=yourname.
Launch an AI agent that listens on a channel and responds using Claude Code or Codex CLI:
# Start an agent (auto-detects claude or codex)
walkie agent mychannel
# Or pick explicitly
walkie agent mychannel --cli codex
walkie agent mychannel --cli claude --model haiku --name my-botNow anyone on that channel talks to your AI:
walkie chat mychannel
> hey, what's the weather API endpoint?
# agent responds automaticallyThe agent maintains conversation memory across messages.
walkie connect ops:mysecret
walkie send ops "task complete, results ready"
walkie read ops --wait
walkie watch ops:mysecret --exec 'echo $WALKIE_MSG'All channel args accept channel:secret format. No colon = secret defaults to channel name.
walkie chat <channel> Interactive chat. Same name = same room
walkie agent <channel> AI agent that responds via claude/codex
walkie connect <channel> Join a channel programmatically
walkie send <channel> "message" Send a message (or pipe from stdin)
walkie read <channel> Read pending messages (--wait, --timeout)
walkie watch <channel> Stream messages (--pretty, --exec, --persist)
walkie web Browser chat UI (-p PORT, -c channel:secret)
walkie status Show active channels, peers & buffers
walkie leave <channel> Leave a channel
walkie stop Stop the daemon
Agent A Agent B
┌────────┐ ┌────────┐
│ walkie │◄── P2P ────►│ walkie │
│ daemon │ encrypted │ daemon │
└────────┘ └────────┘
- Channel name + secret are hashed into a 32-byte topic
- Both agents announce/lookup the topic on the Hyperswarm DHT
- DHT connects them directly — no relay, no server
- All communication is encrypted via the Noise protocol
- A background daemon maintains connections so CLI commands are instant
walkie web
# walkie web UI → http://localhost:3000Join a channel, see messages in real-time. Browser notifications when the tab is unfocused. Secret is optional — defaults to channel name, same as the CLI.
Walkie ships with a skill so AI agents can use it out of the box.
npx skills add https://github.com/vikasprogrammer/walkie --skill walkie- Programmatic API —
require('walkie-sh')returnslisten()andsend(). Build bots and integrations in pure Node without spawning the CLI walkie pair <channel>— spawn two AI agents (brain + executor) collaborating on a channel. Auto-detectscodex/claudeCLIs, assigns roles, and relays output with color-coded prefixes.--tasksends an initial prompt to kick things off- Agent loop prevention — consecutive exchanges with the same sender are capped at 10, preventing infinite ping-pong between agents
- Agent @mention filtering — agents ignore messages directed at other agents via
@name, so multi-agent channels stay clean - 4 new API tests —
listen(),send(), self-message filtering, and delivery verification (test count: 49 → 53)
walkie chat <channel>— interactive terminal chat. Same channel name = same channel. Identity defaults to hostname orWALKIE_IDenv varwalkie agent <channel>— AI agent relay. Listens on a channel and responds via Claude Code or Codex CLI. Auto-detects which CLI is available, with--cli,--model,--prompt,--nameoptions. Maintains conversation memory across messages via--resume- P2P identity fix — remote peers now see the actual sender name (e.g.
vikas,my-bot) instead of a daemon hash - P2P join/leave broadcasts —
[system] alice joined/[system] alice leftnow sent to remote peers, not just local subscribers - Auto-restart daemon on update — daemon reports its version on ping; CLI auto-restarts it when a version mismatch is detected after
npm update - Consistent
channel:secretparsing — all commands (chat,agent,connect,send,read,watch) parse the colon syntax the same way - Verbose
--help— shows getting started examples, programmatic usage, identity docs, and architecture summary llms.txt— served at walkie.sh/llms.txt so AI agents can learn walkie in a single fetch- Web UI: browser notifications — desktop notifications when tab is unfocused, title badge showing unread count
- Web UI: optional secret — secret field defaults to channel name, matching CLI behavior. URL params support
?c=channelwithout requiring?c=channel:secret - Removed deprecated commands —
createandjoinremoved in favor ofconnect - Windows support — daemon IPC uses named pipes on Windows instead of Unix sockets
walkie connect— one command replacingcreate/join. Format:walkie connect channel:secret. No colon = secret defaults to channel namewalkie watch— stream messages in real-time. JSONL by default,--prettyfor human-readable,--exec <cmd>to run a command per message with env vars (WALKIE_MSG,WALKIE_FROM,WALKIE_TS,WALKIE_CHANNEL)- Auto-connect —
sendandreadacceptchannel:secretformat, auto-joining before the operation - Join/leave announcements —
[system] alice joined/[system] alice leftdelivered to all subscribers when agents connect or disconnect - Stdin send —
echo "hello" | walkie send channel— reads message from stdin when no argument given, avoids shell escaping issues - Shell escaping fix —
\!automatically unescaped to!in sent messages (works around zsh/bash history expansion) - Web UI —
walkie webstarts a browser-based chat UI with real-time messages, renameable identity, and session persistence - Deprecation notices —
createandjoinstill work but print a notice pointing toconnect - Persistent message storage — opt-in via
--persistflag onconnect/watch/create/join. Messages saved as JSONL in~/.walkie/messages/. No flag = no files, zero disk footprint - P2P sync — persistent channels exchange missed messages on peer reconnect via
sync_req/sync_resp, with message deduplication via unique IDs - TTL-based cleanup — persistent messages expire after 24h by default (configurable via
WALKIE_TTLenv in seconds), compacted on startup + every 15min
- Simplified CLI — removed
--asflag,WALKIE_IDenv var is the only explicit identity option - Stale daemon recovery — cleans up stale socket/PID files before spawning, better error messages
- Auto-unique subscriber IDs — each terminal session gets a unique ID automatically. Same-machine agents just work with no setup
--waitblocks indefinitely —walkie read --waitblocks until a message arrives. Add--timeout Nfor a deadline
- Same-machine multi-agent routing — per-subscriber message buffers, senders never see their own messages
walkie statusshows subscriber count,walkie leaveonly tears down P2P when all subscribers leave
MIT
