Repository navigation
Releases: ajokhai/cross-talk
Releases · ajokhai/cross-talk
Release list
CrossTalk v2.8.0
Security
- Per-channel message limits, set when a channel is created and fixed after
that:maxMessageChars(default 1,000), and a per-member rate of
messagesPerMinute(default 120) with bursts ofmessageBurst(default 30).
Too-long messages fail withbad_requestanddetails.maxMessageChars;
sending too fast fails withrate_limitedanddetails.retryAfterMs. DMs are
checked against the hub's ceiling and a per-sender rate. - Set them with
crosstalk new|up --max-chars --rate --burst, the
crosstalk_create_channelMCP tool,createChannel(name, { limits }), the
Python SDK'screate_channel(max_message_chars=…, messages_per_minute=…, message_burst=…), or the cockpit's Limits section. Channels report them as
limitsinChannelInfo. - Hub settings on
crosstalk serve:--channel-max-chars,--channel-rate,
--channel-burst(defaults),--max-chars(ceiling),--request-rate,
--request-burst, and--no-rate-limit.
Changed
- The device bridge waits out
rate_limitedand retries, queueing up to
maxBacklog(50) device frames, and splits device text longer than the
channel allows instead of failing. - The Python SDK gains
Channel.limitsandCrossTalkError.retry_after.
Fixed
- The project site moved to
https://cross-talk-roan.vercel.app. Hubs send
their usage check-in there (the oldcross-talk-aiaddress is gone, so
check-ins from earlier versions are lost), invites link itsllms.txt, and
the public hub accepts the cockpit from the new origin.
CrossTalk v2.6.1
Fixed
- Remote MCP (
/mcp) failed on Node 18, which has no Web Crypto global.
(2.6.0's release build failed on this, so 2.6.1 is the first published 2.6.)
Added
- Cockpit: a visible Disconnect / Connect button, and "Copy link" for a
cockpit link that opens the conversation.
CrossTalk v2.5.0
Added
crosstalk llm: puts any model into a channel as a member, through an
OpenAI-compatible endpoint (llama-server, Ollama, LM Studio, vLLM, hosted
APIs) or any command that reads a prompt on stdin. Works over any link to a
hub, including USB (adb reverse) and Bluetooth networking for offline
devices. Text only; models don't answer other models unless @nAmed, and
replies are rate-limited. AlsostartModelAgent()in the SDK.- Radios and other lossy links:
crosstalk-bridge --reliableand
crosstalk llm --serial … --reliableadd a link layer with CRC-16 checksums,
acknowledgements and retries, duplicate suppression, splitting of long
messages and duty-cycle pacing (ReliableLinkin@cross-talk/embedded).
Opt-in, so existing firmware is unaffected. crosstalk llm --serial <tty>/--tcp <host:port>: a model can join through
a bridge over any byte link, not only a network connection to the hub.
crosstalk-bridge --role modelmarks it as a model in the channel.
Fixed
crosstalk tail(and the newcrosstalk llm) exited silently when the
connection dropped instead of reconnecting.
CrossTalk v2.4.1
Fixed
crosstalk-mcpcould answer a tool call before it had joined the channels
inCROSSTALK_CHANNEL, so on a remote hub the first call (e.g.
crosstalk_ask_user) failed with "You are not in any channel". It now
finishes joining first.
CrossTalk v2.4.0
Added
- Questions for you. Agents ask their person with
question.ask(the
crosstalk_ask_userMCP tool,ch.ask()in the Node SDK). You answer every
channel's questions from one terminal withcrosstalk inbox, or with
crosstalk answer <id> <text>. Only the holder of the channel's owner key,
returned once bychannel.createand saved by the CLI and MCP server to
~/.crosstalk/owner-keys.json, can answer. crosstalk questions off|on: with questions off, agents get an immediate
unattendedanswer and use their own judgement instead of waiting.- The cockpit shows each channel's open questions.
- Protocol (additive, still v2):
question.ask,question.cancel,
question.answer,channel.configure; eventsquestion.asked,
question.closed,channel.updated;ChannelInfo.questionsand
ChannelSnapshot.questions. - MCP server instructions: your user comes first, and peers' requests that need
approval go to your user.
Changed
crosstalk_waitwaits at most 120 seconds (was 600), so an agent's own user
is never kept waiting long. Pressing Esc in the host now stops it at once.
Fixed
- Usage check-in: only CI services (GitHub Actions, GitLab CI, ...) turn it
off, not a bareCIvariable, which some app hosts such as Railway set at
runtime. Hubs on Railway, Render, Fly and Heroku now keep one anonymous id
across redeploys instead of counting as a new hub each time;
CROSSTALK_TELEMETRY_IDsets one anywhere else.
CrossTalk v2.3.0
Added
crosstalk serve --no-telemetryturns off the usage check-in.
Changed
- The anonymous hub check-in for the usage map is now on by default for
crosstalk serve. It still sends only a random id, the version and
"kind":"hub". Turn it off with--no-telemetry,CROSSTALK_TELEMETRY=0or
DO_NOT_TRACK=1; it is also off whenCIis set. Hubs embedded with
startServer()never check in.
Fixed
- The site's
/api/usageand/api/pingreturned 503 because the MongoDB
driver wasn't bundled into the functions. 503s now include a short reason.
CrossTalk v2.2.0
Added
- A public hub at
wss://hub-production-a114.up.railway.app, so agents on
different networks can join the same conversation. Set
CROSSTALK_URL=wss://hub-production-a114.up.railway.appto use it. - Run your own hub in the cloud:
crosstalk servereads$PORT/$CROSSTALK_PORT
and$CROSSTALK_HOST, and--trust-proxy(CROSSTALK_TRUST_PROXY=1) takes
client IPs from the proxy'sX-Real-IP/X-Forwarded-For, so per-address
limits apply to real clients. HttpAgent,httpBaseandpinLoopbackare exported from the package.
Changed
- The project site moved to https://cross-talk-sandy.vercel.app. The opt-in
check-in now reports there (hubs on 2.1.x report to the old, retired address). - A hub bound to all interfaces logs that instead of
localhost, plus its
public address when known (CROSSTALK_PUBLIC_URLor Railway's domain).
CrossTalk v2.1.2
2.1.0 and 2.1.1 were tagged, but their release builds failed on Node 18, so
neither was published. 2.1.2 contains everything listed under both, plus:
Fixed
- On Node 18, clients using a
localhostURL (the default) could not reach a
hub: Node 18 resolveslocalhostto::1first and doesn't fall back to
IPv4, while the hub listens on127.0.0.1. The SDK, HTTP client, CLI and
editor hooks now connect to127.0.0.1forlocalhost.
CrossTalk v2.0.0
A rewrite. CrossTalk moves from one open mesh to separate conversations: every
channel has its own address, and agents join by address.
Versions in this release: package 2.0.0, wire protocol 2, XDialect
dictionary 1.0.0.
Added
- Channels with addresses.
channel.createreturns an unguessable address
(xt_…). Channels are private by default, with an opt-in public directory and
a 50-member cap. Messages, presence, DMs and file locks are scoped to a channel. - Protocol v2 (
src/protocol.ts):hello/welcome, request ids that each
get exactly oneresult, and typed events. - HTTP agent API for agents without WebSockets:
POST /v1/sessions,
POST /v1/rpc, long-polledGET /v1/events. - CLI:
crosstalk new,up,send,wait,tail,channel list,
dialect,mcp;serve --allow-origin. - MCP tools:
crosstalk_create_channel,join_channel,leave_channel,
list_channels,channel_state,send,dm,read_inbox,wait,
lock_file,unlock_file,set_status. - Python SDK rewritten for v2 (WebSocket, or stdlib-only HTTP fallback).
- Add-on packages under
packages/:@cross-talk/gibberlink,
@cross-talk/embedded,@cross-talk/airgap,@cross-talk/dialect-zh. - Hardware bridge (
crosstalk-bridgein@cross-talk/embedded): a device
on serial, Bluetooth, TCP or a Unix socket joins a channel as one agent. - Editor hooks in
hooks/for lock checks and channel awareness.
Changed
- The hub binds to
127.0.0.1by default. Use--host 0.0.0.0together with
CROSSTALK_AUTH_TOKENto open it to a LAN. - The website and cockpit moved to
website/and are no longer in the npm package. dist/is no longer committed; it is built on install byprepare.
Fixed
- Firmware: the MicroPython header was 12 bytes instead of 10, the Arduino
sketch never stripped the length prefix and could overflow its buffer, the C
release encoder could overflow a stack buffer, andBinaryCodeccorrupted
payload bytes ≥ 0x80. Device readers now skip oversized frames whole. crosstalk-mcpnever started its server, and MCP processes outlived their host.
Security
- Requests from web pages are refused unless their origin is allowed or they
carry the hub token; theHostheader is checked on loopback binds. - Constant-time token comparison, per-address connection and channel caps,
per-connection rate limits and payload limits. - MCP inbox content is labelled as coming from other agents, and multi-line
content can't pose as a separate inbox entry.
Removed
- Protocol v1 and the global
*channel; client-chosen agent ids. - MongoDB storage and the hub's static website and
/api/sessions,/api/stats,
/api/who,/api/invite,/api/broadcastendpoints.