The scout knows.
The scout receives a private target cue, but a wall keeps it away from the items. The runner sees a local patch of the warehouse and can collect and deliver an item.
An experiment in emergent communication
One agent knows what to collect. The other can reach it. Can they learn what to say to each other?
01 / The live sandbox
Run the learned policies right here.
Change the channel and see
what happens.
Drag to rotate · camera controls to zoom
Numbers label symbols; their meanings were learned. “–” is silence.
Browser sandbox: v2 final checkpoints, training seed 9. Choose from 200 fixed scenarios per split. Actions are sampled live; JavaScript arithmetic and random sampling differ from PyTorch. These episodes illustrate behavior; the published benchmark statistics below come from the canonical Python evaluation across all training seeds.
02 / How it works
A small world makes a precise question testable.
The scout receives a private target cue, but a wall keeps it away from the items. The runner sees a local patch of the warehouse and can collect and deliver an item.
Separate recurrent PPO policies choose movements and symbols. A disclosed auxiliary signalling objective encourages the scout to encode its cue. No symbol-to-target dictionary is programmed.
Compare independently trained conditions, then scramble or silence the channel of a trained communicating pair. These controls ask whether stable messages affect coordination.
What is the contribution? A task-specific adaptation of prior positive-signalling work, a controlled test against the original objective, and an honest examination of where the learned protocol stops generalizing. This is a study of learned coordination, not a claim to have created human language.
03 / The evidence
Loading saved results…
Success means delivering the correct item before the time limit. Intervals are 95% bootstrap confidence intervals across training seeds. A training seed is the independent experimental unit.
Each condition has 20 independently trained pairs. Each pair is evaluated on 200 fixed episodes per split or intervention. The shared task set enables paired comparisons; it does not make every evaluation a distinct scenario.
“No messages” is a separately trained model. “Silenced” and “scrambled” intervene on an already trained communicating model. The oracle gets the private target cue and serves as a learned reference.
The direct comparison removes only the cue-directed auxiliary objective. It uses 20 seeds and the full original training budget. It was declared after the main results were seen and is explicitly exploratory. The channel interventions answer a separate question.
04 / The replay lab
Inspect recorded episodes, compare the same scenario under different channels, and explore the compositional world in 3D. Replays are saved trajectories, separate from the live sandbox above.
05 / Make it yours
Open source, with representative trained models included.
Requires Python 3.10+. No package installation, GPU, account, or API key.
git clone https://github.com/ctadros1/talking-agents.git
cd talking-agents
python3 scripts/serve.py --open
Open localhost:8000. The site, results, model files, and replays are served locally.
Install uv , then use the locked Python 3.12 environment.
uv sync --frozen
uv run python scripts/demo_inference.py --phase both
uv run python scripts/verify_results.py
The included four final checkpoints support v1 and v2 inference. Full benchmark retraining is optional and computationally expensive; instructions are in the README.