A CLI tool for product teams (or anyone) to post stickies to a MURAL board from the command line. Useful for quickly populating boards with structured data. An included example is a process 'Event Storm'.
While the nature of event storming and many other visualisation techniques is collaborative, this tool offers a quick start, aiming to get something that someone has worked on in silo, like a text doc into a visual tool so the collaborative discussion can take centre stage.
- Go to https://developers.mural.co and sign in
- Navigate to Your apps → Create new app
- Give it a name (e.g. "Sticky Poster CLI")
- Set the redirect URI to exactly:
http://127.0.0.1:8000/ - Under scopes, enable
murals:readandmurals:write - Save the app
- Copy the Client ID and Client Secret somewhere so you can add into your
.envfile later
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtRun the interactive setup:
python setup.pyIt will prompt for:
- Client ID and Client Secret from your MURAL app
- Mural board URL or ID — paste the full board URL (e.g.
https://app.mural.co/t/myworkspace/m/myworkspace/myworkspace.1780064070379/...) and it will extract the ID automatically, or enter the ID directly (e.g.myworkspace.1780064070379)
Config is saved to .env. Setup runs automatically on first use if .env is missing.
python main.pyOn first run, a browser window opens for MURAL OAuth login.
You can then return to the CLI and you will be prompted to choose:
- Post a single sticky — specify text, position, and hex colour
- Post an event storm — from a JSON file (or the included example)
- Generate event storm JSON — prints an LLM prompt you can use to convert a process doc into valid JSON for this tool
- Re-run setup — update credentials or board ID
Ronseal - designed to make sure this thing is doing the thing it's supposed to do
Event storming is a colaborative process to explore a particular domain. Useful in software design and business modelling. The original intention for this tool was to help take some process docs that are currently written up in a variety of places in Confluence and map it in Mural to allow for a more collaborative conversation about the process we were mapping. Easing the initial setup of the workshop.
When posting an event storm, stickies are automatically laid out an order based on their type:
| Type | Colour | Use for |
|---|---|---|
event |
Orange | Things that happened — "Config submitted" |
command |
Blue | Actions someone took — "Submit config" |
actor |
Yellow | Who did it — "Onboarding", "RP" |
readmodel |
Green | Info needed to make a decision — "Checklist" |
policy |
Purple | Business rules / automated reactions |
system |
Pink | Tools involved — "ServiceNow", "Slack" |
hotspot |
Red | Problems / pain points — "This takes 5 days" |
Row 1 (y=0) │ actor │ actor │ actor │
Row 2 (y=200) │ readmodel│ command │ event │ readmodel│ command │ event │ ...
Row 3 (y=400) │ policy │ policy │
Row 4 (y=600) │ system │ system │
- readmodel, command, event share the same row and flow left-to-right as the main timeline
- actor, policy, system each have their own row and flow independently
- hotspot is placed ad hoc with explicit
xandynear the related sticky
[
{"type": "actor", "text": "Engagement Manager"},
{"type": "readmodel", "text": "Onboarding checklist"},
{"type": "command", "text": "Send onboarding manual"},
{"type": "event", "text": "Manual sent to service team"},
{"type": "policy", "text": "If incomplete - request more info"},
{"type": "system", "text": "Google Docs"},
{"type": "hotspot", "text": "This takes 5 days", "x": 500, "y": 300}
]- Items are placed left-to-right in the order they appear
- Use
"column": Nto explicitly position a sticky at a specific column - Hotspots require
"x"and"y"fields
Don't have your process in JSON yet? Option 3 in the CLI prints a ready-made prompt you can paste into any LLM (ChatGPT, Claude, etc.) along with your process document. The LLM will return valid JSON that works directly with this tool.
The prompt is also available at prompts/doc_to_event_storm.md if you want to use it outside the CLI.
The tool is designed to be extensible to other types of visualisations. What's been implemented and some ideas for future iteration can be found in project.md