1. The Premise

Whisper of the City is played in the real world, in a real city, among real strangers. A secret society — the Guild — operates in plain sight. A second group — the Catchers — exists to find and expose it. You are one or the other, and for most of the game, you won't know who else is.

2. Roles

The Guild

You've been granted access to the closed chat — the game's coordination layer — and one invite link to recruit exactly one new member. You don't know the full roster. Your goal is to survive to the final ritual, attend gatherings when called, and help identify traitors before they identify you.

The Catchers

You start outside the system. Your goal is to infiltrate the Guild — through social engineering, observation, and deception — identify its members, and publicly expose all of them before the final ritual begins. You may operate in the open, but your intentions stay hidden.

3. Joining the Game

There is no public sign-up. Access is earned, not purchased. See the Contact page if you're looking for a way in.

4. Gatherings

Sudden real-world meetups are called with 20–30 minutes' notice through the closed chat. Showing up within the window counts as presence. Showing up late — or not at all — draws suspicion, and repeated absences can get you voted out regardless of your role.

5. The Chain of Trust

Each Guild member may invite exactly one new person. This chain is both the Guild's growth mechanism and its biggest liability — a Catcher who social-engineers their way past a single link can ride that one invitation straight into the closed chat.

6. Expulsion

If a member's behavior in the chat or at a gathering reads as suspicious, the Guild can call and hold a vote to expel them. This is the Guild's primary defense against infiltration — and its biggest risk, since expelling a genuine member weakens the roster for no gain.

7. Victory Conditions

8. Fair Play & Real-World Safety

This is a game about a city, played by people who live in it. A few rules exist outside the fiction and are non-negotiable: