Skip to content

Releases: ajokhai/cross-talk

CrossTalk v2.8.0

Choose a tag to compare

@github-actions github-actions released this 18 Oct 23:23

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 of messageBurst (default 30).
    Too-long messages fail with bad_request and details.maxMessageChars;
    sending too fast fails with rate_limited and details.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_channel MCP tool, createChannel(name, { limits }), the
    Python SDK's create_channel(max_message_chars=…, messages_per_minute=…, message_burst=…), or the cockpit's Limits section. Channels report them as
    limits in ChannelInfo.
  • 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_limited and 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.limits and CrossTalkError.retry_after.

Fixed

  • The project site moved to https://cross-talk-roan.vercel.app. Hubs send
    their usage check-in there (the old cross-talk-ai address is gone, so
    check-ins from earlier versions are lost), invites link its llms.txt, and
    the public hub accepts the cockpit from the new origin.

CrossTalk v2.6.1

Choose a tag to compare

@github-actions github-actions released this 13 Oct 14:29

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

Choose a tag to compare

@github-actions github-actions released this 11 Oct 00:54

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. Also startModelAgent() in the SDK.
  • Radios and other lossy links: crosstalk-bridge --reliable and
    crosstalk llm --serial … --reliable add a link layer with CRC-16 checksums,
    acknowledgements and retries, duplicate suppression, splitting of long
    messages and duty-cycle pacing (ReliableLink in @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 model marks it as a model in the channel.

Fixed

  • crosstalk tail (and the new crosstalk llm) exited silently when the
    connection dropped instead of reconnecting.

CrossTalk v2.4.1

Choose a tag to compare

@github-actions github-actions released this 10 Oct 13:58

Fixed

  • crosstalk-mcp could answer a tool call before it had joined the channels
    in CROSSTALK_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

Choose a tag to compare

@github-actions github-actions released this 10 Oct 13:55

Added

  • Questions for you. Agents ask their person with question.ask (the
    crosstalk_ask_user MCP tool, ch.ask() in the Node SDK). You answer every
    channel's questions from one terminal with crosstalk inbox, or with
    crosstalk answer <id> <text>. Only the holder of the channel's owner key,
    returned once by channel.create and 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
    unattended answer 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; events question.asked,
    question.closed, channel.updated; ChannelInfo.questions and
    ChannelSnapshot.questions.
  • MCP server instructions: your user comes first, and peers' requests that need
    approval go to your user.

Changed

  • crosstalk_wait waits 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 bare CI variable, 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_ID sets one anywhere else.

CrossTalk v2.3.0

Choose a tag to compare

@github-actions github-actions released this 10 Oct 13:25

Added

  • crosstalk serve --no-telemetry turns 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=0 or
    DO_NOT_TRACK=1; it is also off when CI is set. Hubs embedded with
    startServer() never check in.

Fixed

  • The site's /api/usage and /api/ping returned 503 because the MongoDB
    driver wasn't bundled into the functions. 503s now include a short reason.

CrossTalk v2.2.0

Choose a tag to compare

@github-actions github-actions released this 10 Oct 05:21

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.app to use it.
  • Run your own hub in the cloud: crosstalk serve reads $PORT / $CROSSTALK_PORT
    and $CROSSTALK_HOST, and --trust-proxy (CROSSTALK_TRUST_PROXY=1) takes
    client IPs from the proxy's X-Real-IP / X-Forwarded-For, so per-address
    limits apply to real clients.
  • HttpAgent, httpBase and pinLoopback are 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_URL or Railway's domain).

CrossTalk v2.1.2

Choose a tag to compare

@github-actions github-actions released this 10 Oct 04:42

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 localhost URL (the default) could not reach a
    hub: Node 18 resolves localhost to ::1 first and doesn't fall back to
    IPv4, while the hub listens on 127.0.0.1. The SDK, HTTP client, CLI and
    editor hooks now connect to 127.0.0.1 for localhost.

CrossTalk v2.0.0

Choose a tag to compare

@github-actions github-actions released this 10 Oct 04:31

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.create returns 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 one result, and typed events.
  • HTTP agent API for agents without WebSockets: POST /v1/sessions,
    POST /v1/rpc, long-polled GET /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-bridge in @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.1 by default. Use --host 0.0.0.0 together with
    CROSSTALK_AUTH_TOKEN to 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 by prepare.

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, and BinaryCodec corrupted
    payload bytes ≥ 0x80. Device readers now skip oversized frames whole.
  • crosstalk-mcp never 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; the Host header 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/broadcast endpoints.