Skip to content

Stage 1: one event, one queue

Every Pack starts with a pack.toml. Here’s the smallest useful one — a single say event on a single chat queue:

manifest = 1
id = "org.mobrule.doom"
name = "Doom Chaos"
version = "0.1.0"
mpp = "1"
authors = ["you"]
[adapter]
command = "python3"
args = ["-u", "adapter.py"]
restart = "on_crash"
[adapter.env]
DOOM_RCON_HOST = "127.0.0.1"
DOOM_RCON_PORT = "10666"
[queues.chat]
ready_after = "applied"
[events.say]
title = "Say in game chat"
summary = "Broadcast a viewer message into the game's chat."
queue = "chat"
[events.say.params_schema]
type = "object"
additionalProperties = false
required = ["message"]
[events.say.params_schema.properties.message]
type = "string"
minLength = 1
maxLength = 140
"x-mobrule-viewer-override" = true

Three things worth noticing:

  • [adapter.env] carries the RCON address but not the password. Manifest contents are hashed and visible; the adapter reads DOOM_RCON_PASSWORD from the environment the bridge was launched from.
  • "x-mobrule-viewer-override" = true on message means the viewer types the text — the platform validates it against the schema (1–140 chars) before an Invocation is ever produced.
  • ready_after = "applied" is the default queue policy; we declare it explicitly because stage 3 will contrast it with "done".

The manifest declares what viewers can trigger. Next: how the adapter actually reaches into the game.