# Preparing The Race

> Use when the simulator receives a validated plan from the planner and must initialize the race: parsing the plan, spawning runner agents, starting the telemetry collector, and firing the start gun. Triggered once per simulation, before the first tick.

- Skill: `googlecloudplatform/preparing-the-race` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add googlecloudplatform/preparing-the-race`
- Raw SKILL.md: https://api.skillmd.com/api/skills/googlecloudplatform/preparing-the-race/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: Apache-2.0
- Author: GoogleCloudPlatform (https://skillmd.com/u/googlecloudplatform)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/googlecloudplatform/preparing-the-race

---


# Preparing the Race

This skill initializes the simulation after a validated plan arrives
from the planner.

## Workflow

Each numbered step is a **separate model response**. The skill toolset
guards against multi-step responses with an error.

```
Pre-Race Progress:
- [ ] Response 1: prepare_simulation (alone)
- [ ] Response 2: spawn_runners + start_race_collector (parallel)
- [ ] Response 3: fire_start_gun
```

**Why separate responses:** `prepare_simulation` sets state
(`simulation_ready`, `runner_count`, `simulation_id`) that the other
tools read. The skill guard rejects parallel calls that would race
with that state write.

### Response 1: Parse the plan

Call only `prepare_simulation` with the JSON plan from the planner.
The tool extracts the route, computes tick parameters, and stores
configuration in session state.

### Response 2: Spawn runners + start collector (parallel)

Call `spawn_runners` and `start_race_collector` together in the same
response. The two tools are independent: spawning runners and
subscribing to broadcasts have no data dependency, so they execute
simultaneously for faster startup.

### Response 3: Fire the start gun

Call `fire_start_gun` to broadcast the START_GUN event to all spawned
runner agents.

## Tools

- `prepare_simulation(plan_json, tool_context, duration_seconds=120, tick_interval_seconds=10, total_race_hours=6.0)`:
  Parse the plan JSON, compute max_ticks, and store simulation config
  in state.
- `spawn_runners(count, tool_context)`:
  HTTP POST to the gateway spawn API to create runner agent sessions.
- `start_race_collector(tool_context)`:
  Start a RaceCollector subscribed to gateway:broadcast for runner
  telemetry.
- `fire_start_gun(tool_context)`:
  Broadcast a START_GUN RunnerEvent to all spawned runner agents via
  Redis.
- `call_agent(agent_name, message, tool_context)`:
  Delegate inter-agent communication via the shared A2A utility.

