Introduction

DSH already has send_message and list_agents, but the original form is hierarchical: parent sessions send messages to their own background subagents. When two DSH sessions run on the same machine but in different repositories, they cannot discover or message each other by default.

Jesse-njx/dsh-crosstalk fills in the same-machine horizontal communication capability for this multi-session workflow: any session can list live sessions on the machine and send messages to any of them, without a daemon.

What is it

Jesse-njx/dsh-crosstalk is a DeepSeek Harness bundle, MIT licensed. It extends DSH’s session communication to peer sessions running on the same machine and same user, giving list_agents and send_message peer discovery and peer addressing capabilities.

v0.1 does not provide network transport, only local file and directory level message delivery.

Core Capabilities

Session Discovery and Messaging Interface

  • list_agents adds scope: peers, used to view other live sessions on the machine; scope: all covers descendants and peers.
  • send_message’s to field accepts peer name or ref in addition to subagent id, and can carry summary.
  • This bundle hooks into agent tools natively; it can restore native behavior upon uninstallation.

Local Delivery

  • Each running session publishes a heartbeat JSON file under ~/.dsh/crosstalk.
  • Messages are written to the target inbox as files using an atomic way: temporary file + rename.
  • Idle targets are woken up for a turn; busy targets receive the message at the next turn boundary.
  • Delivery is best-effort; status in list_agents does not constitute a delivery promise.

Injection and Trust Boundaries

  • Messages received by the recipient are tagged as a relay turn, for example:
[message from session dsh-cowork-amber (/Users/me/projects/dsh-cowork)]
  • System prompts will clarify that this is a request from a peer agent, not a user instruction.
  • v0.1 is fixed to accept only same-user; can be further configured with a name/cwd allowlist for stricter inbound filtering.

Installation and Activation

Requirements

  • Node >= 22
  • If installing from GitHub, you need to allow the build hook @dsh-crosstalk/bundle first.

Installing from GitHub

First configure the profile workspace to allow the bundle’s build hook:

# ~/.dsh/profiles/web/pnpm-workspace.yaml
packages:
  - .
allowBuilds:
  '@dsh-crosstalk/bundle': true

Then add the bundle to each profile that needs to participate:

dsh plugin --profile web add github:Jesse-njx/dsh-crosstalk
dsh plugin --profile <other-profile> add github:Jesse-njx/dsh-crosstalk

GitHub installation builds lib/ from src/ via the package’s postinstall hook.

Local Checkout Installation

When installing from source, build first, then add the repository root to the profile:

git clone https://github.com/Jesse-njx/dsh-crosstalk
cd dsh-crosstalk
pnpm install
pnpm build
dsh plugin --profile web add "$PWD"
dsh plugin --profile <other-profile> add "$PWD"

Local checkout loads the compiled lib/; run pnpm build and restart DSH after modifying source code, no need to reinstall.

Configuration Override

The bundle mounts automatically after being added. To override fields, override the crosstalk entry in the profile’s cordis.patch.yml by id; do not add a second crosstalk row, otherwise a duplicate entry error will occur.

# in <DSH_HOME>/profiles/<name>/cordis.patch.yml
- id: crosstalk
  config:
    homeDir: ~/.dsh/crosstalk
    cwd: /path/to/repo
    name: my-custom-name
    accept: same-user
    mode: open
    allowlist: []
    notifyUser: true
    heartbeatIntervalMs: 10000
    inboxPollMs: 1000
    staleAfterMs: 20000
    maxInboxAttempts: 30

Unset fields fall back to default values; the loader replaces the config object entirely, so only list the fields that need changing.

Typical Usage

Two DSH terminals with the bundle installed can perform a round-trip like this:

You: list_agents peers
      dsh-cowork-amber [idle] — /Users/me/projects/dsh-cowork
      dsh-memory-azure  [running] — /Users/me/projects/dsh-memory
You: send_message to="dsh-cowork-amber" message="Round-trip check: can you list the files in your repo?" summary="ping for round-trip"

The peer session will wake up or receive the message after the current turn ends; after seeing the message with the source tag, it can use send_message to reply with your name.

Use Cases and Notes

Suitable for scenarios: multiple DSH sessions split by repository on the same machine, need a coordinator to distribute tasks, a routine session pings a live session, or human sessions exchanging messages with agent sessions.

Usage notes:

  • v0.1 is limited to same machine, same user; no network transport.
  • Peer messages are peer requests, not user instructions; models should process within established user instruction boundaries and expose operations with side effects.
  • Delivery is best-effort, not guaranteed.
  • This bundle runs under the current DSH process permissions; it is recommended to check the source code, build hooks, and MIT license before installing, and do not install directly from untrusted repositories.
  • If using allowlist mode, you can restrict inbound sources using an exact session name or cwd glob.

Conclusion

The value of dsh-crosstalk lies in extending DSH’s session communication from “parent to child” to “peer sessions on the same machine”, suitable for multi-repository, multi-session, same-user environments.

  • GitHub: https://github.com/Jesse-njx/dsh-crosstalk
  • Directory Page: Search for Jesse-njx/dsh-crosstalk in the community directory; the community directory is an independent site, not the DeepSeek / Huansuan official app store.