A Decorative Channel and a Reward Exploit in One of Our Benchmarks
- Method
- A four-agent MAPPO team with parameter sharing on a 12-node graph, 15M timesteps of training, then a semantic man-in-the-middle adversary that spoofs every Scout message through the Scout's own encoder, measured as task satisfaction against the clean-channel and no-communication baselines.
- Result
- A communication channel in a MARL benchmark that looked load-bearing and was not, and a reward function that let trivial policies win.
- Could not detect
- Three task-satisfaction rates with no interval and no test behind them: how far each would move on a rerun was not measured, and the 2.8-point drop under spoofing is read as small next to the 30-point gap, not tested.
- Artifacts
- code
We run an internal adversarial engine. Instead of running scripted perturbations it trains RL adversaries and points them at systems that don’t behave the same way twice: RL policies, robotics stacks, multi-agent swarms, agentic systems built on LLMs. Its job is to find the blind spot before production does.
Because the adversaries are trained rather than scripted, they co-evolve with the system under test and carry what they learned across versions. A static test suite checks the same things every time. One of these adversaries finds that a navigation policy has a blind spot at 47 degrees, or that a swarm is gaming episode length, and leans on it in ways nobody wrote a test for.
The engine is a different internal product from Prove. Prove is a statistical instrument: it measures where a system breaks and whether a fix moved the boundary, and it trains no adversaries. The two answer different questions, and this post is about the adversarial one.
This post is about two of those exploit classes hitting one of our MARL benchmarks in a single run: a semantic man-in-the-middle attack on inter-agent communication, and a reward exploit the swarm had learned during training without anyone noticing. We found the second because we were looking for the first.
The setup
Babel is one of our MARL benchmarks at Poisson Labs, built to stress-test the engine’s communication-attack class. It’s deliberately small: asymmetric information, a narrow channel, and a task that’s supposed to require coordination.
It uses a 12-node procedural graph. Resource demands appear at random nodes. The agent team has two roles:
- Scouts have global visibility into active demands, but cannot act.
- Responders can move and satisfy demands, but are blind beyond a two-hop local view.
The intended solution is that Scouts observe the demand state, encode it into an 8-bit symbolic channel, and Responders decode those messages into routing decisions.
The same shape shows up outside a benchmark: a planner agent passing context to an executor, or a reconnaissance drone broadcasting coordinates to a swarm. If the handoff isn’t doing anything, the system is flying blind and the metrics won’t say so.
We trained a four-agent MAPPO team with parameter sharing across roles. The baseline looked good:
| Configuration | Task Satisfaction |
|---|---|
| IPPO, no communication | 21.1% |
| MAPPO, 8-bit channel | 51.2% |
That’s a 30-point gap, and it made the channel look load-bearing, so we pointed the engine at it.
The attack
The engine runs a semantic man-in-the-middle adversary. It doesn’t add noise. It changes the meaning of what’s being passed between agents and measures whether downstream behaviour changes.
In this case the agents’ 8-bit language was emergent, and we couldn’t spoof it by flipping bits because we didn’t know what any given symbol meant to the trained policy. So the adversary went one level earlier and modified the Scout’s observation instead. It injected a fake demand into the Scout’s input and let the Scout’s own frozen policy encode that fake observation into whatever protocol the agents had learned. What came out was a valid message, produced by the agent’s own encoder, about a world that didn’t exist. At 100% interception every Scout message was built that way.
We expected performance to fall from 51.2% back toward the 21.1% no-communication baseline. It fell to 48.4%.
| Configuration | Task Satisfaction |
|---|---|
| IPPO, no communication | 21.1% |
| MAPPO, clean channel | 51.2% |
| MAPPO, 100% spoofed channel | 48.4% |
The channel had looked responsible for a 30-point lift. Under semantic spoofing, removing the truth from that channel cost 2.8 points. The other 27 points were coming from somewhere else.
Finding 1: The channel was decorative
The Responders had learned a policy that mostly ignored the Scouts. The channel was worth 2.8 points of task satisfaction, not 30. The Scouts were broadcasting, the Responders were moving, the team was collecting reward, and the messages weren’t doing much work. That’s what the communication-attack class is for: not whether a system performs well, but whether the information moving between its parts is actually carrying weight.
Finding 2: The reward function was being exploited
The other 27 points came from a different exploit, and it’s the more interesting one.
With 15M timesteps of training and parameter sharing across roles, the Responders had worked out that learning an 8-bit language was harder than gaming the graph. They learned a near-Hamiltonian sweep across the 12 nodes, and on a 50-step episode that sweep stumbles into roughly 48% of demands by construction. The reward rewarded task satisfaction and nothing else. It didn’t penalize unnecessary movement, it didn’t require a demand to be satisfied on instruction rather than by encounter, and it didn’t scale the search problem with the episode budget. The Responders found a policy that went through every one of those gaps.
That’s the reward-exploit class: policies that game the structure of the reward rather than solving the task as designed. The two findings are linked. The reward exploit is what made the channel decorative; the Responders didn’t need it because the reward let them succeed without it.
Why both findings matter
If you publish on emergent communication, finding 1 is the warning: a 30-point gap over the no-communication baseline isn’t evidence of emergent communication until you’ve checked the system is using the channel, and a reward curve can’t tell you that. If you publish on multi-agent coordination, finding 2 is the warning: a reward that doesn’t punish trivial policies will get trivial policies, however sophisticated the architecture. And if you ship any of this, robotics policies, multi-agent stacks, agents passing context to other agents, a success metric doesn’t tell you whether a handoff is carrying weight or whether the reward can be gamed. The question isn’t whether the system succeeds. It’s what happens when the context is wrong, the reward is perturbed, the environment shifts, or something adversarial gets a turn. Our adversaries ask all of those at once.
Edited 2026-09-15. This post was published as “Monte Found a Decorative Channel and a Reward Exploit in One of Our Benchmarks”, and named the adversarial engine Monte throughout. Monte is still the engine’s internal name; it no longer appears in published work. Nothing about the run, the measurements or the two findings has changed. The original URL, /research/monte-babel-decorative-channel, redirects here.