-
Notifications
You must be signed in to change notification settings - Fork 0
b2o2i edited this page Apr 3, 2026
·
6 revisions
Run st in the directory containing your story file and you get a keyboard-driven menu that walks you through the full workflow — no flags to memorize.
st # open the menu (auto-detects *.json in current directory)
st topic.json # open with a specific story pre-selectedThe menus follow the natural top-down workflow:
| Key | Menu | What it covers |
|---|---|---|
g |
Generate | Write a prompt, generate stories, run all AIs in parallel |
v |
View | Inspect stories and fact-checks |
e |
Edit | Revise story text, title, improve with AI |
a |
Analyze | Fact-check, cross-check all AIs, benchmark |
p |
Post | Publish to Discourse, export or print PDF |
u |
Utility | Charts, audio, remove stories |
x |
Settings | Default AI, voice, editor |
Press a letter to enter a submenu, then a second letter to run the command. Press q to go back, q again to quit.
Related: Onboarding · st-new · st-bang · Command Reference
st.py builds shell commands only — no business logic lives here. Every action calls a st-*.py tool directly. You can always skip the menu and run any st-* command by hand.
- Add a label in the relevant submenu dict in
menus(~line 40):"k": "Description shown in menu"
- Add the matching
caseinexecute_menu():case "k": cmd = f"st-mycommand {file_json}"
- If the command writes to the
.jsoncontainer, add its name toPOST_CMD_REFRESHat the top of the file — this tellsstto re-read the file after the command finishes so story/fact-check counts stay current.