pilot-gossip
Implement gossip protocols for eventually-consistent state propagation in agent swarms.
This skill enables agents to share state updates by randomly selecting peers and exchanging information, achieving eventual consistency without centralized coordination.
Commands
Publish state update to random peers
FANOUT=3
PEERS=$(pilotctl --json peers --search "swarm:$SWARM_NAME" | jq -r '.[].address' | shuf -n $FANOUT)
for peer in $PEERS; do
pilotctl --json send-message "$peer" \
--data "{\"type\":\"gossip_push\",\"version\":$STATE_VERSION,\"state\":$STATE_DATA,\"sender\":\"$AGENT_ID\",\"timestamp\":\"$(date -u +%s)\"}" &
done
wait
Merge received state updates
GOSSIP_MSGS=$(pilotctl --json received | jq '[.messages[] | select(.payload.type == "gossip_push")]')
for msg in $(echo "$GOSSIP_MSGS" | jq -r '.[] | @base64'); do
PAYLOAD=$(echo "$msg" | base64 -d)
REMOTE_VERSION=$(echo "$PAYLOAD" | jq -r '.payload.version')
if [ "$REMOTE_VERSION" -gt "$MY_VERSION" ]; then
MY_STATE=$(echo "$MY_STATE $REMOTE_STATE" | jq -s '.[0] * .[1]')
MY_VERSION=$REMOTE_VERSION
fi
done
Workflow Example
Distributed key-value store with gossip replication:
#!/bin/bash
SWARM_NAME="kv-store-cluster"
AGENT_ID=$(pilotctl --json info | jq -r '.node_id')
# Gossip loop
for round in $(seq 1 10); do
# Push to random peers
PEERS=$(pilotctl --json peers --search "swarm:$SWARM_NAME" | jq -r '.[].address' | shuf -n 3)
for peer in $PEERS; do
pilotctl --json send-message "$peer" \
--data "{\"type\":\"gossip_push\",\"version\":$MY_VERSION,\"state\":$MY_STATE,\"sender\":\"$AGENT_ID\"}" &
done
wait
sleep 5
done
Dependencies
Requires pilot-protocol skill, jq, shuf, and base64.