# Automating Workflow in an RPG Pseudo-Journalistic Publishing Architecture
*Created:* 2026-10-22, *Modified:* 2026-10-22
![[Thoughts/attachments/Grim Tokens Workflow (cover).png]]
For the last month or so, I've been seriously using **[Bionic](https://lmstudio.ai)** as a self-teaching writer's aid in producing my work, not to *write* it, but to be my copy editor[^1] and to help me find the mistakes I often make. It also puts together a decent cover if I'm feeling particularly unmotivated.
While copy editing posts to Grim Tokens, **Bionic** continuously learns more of my particular writing style, my voice, my expectations of what's in an article, etc. This is useful for a number of reasons, not least because it's a lot easier to read documentation in my own voice. The results just feel comfortable and stick in the mind. If you had an automated version of me reading your documentation aloud in my dulcet tones with my witty banter, it would stick in your mind too. In this case, I'm just sans the dulcet tones, and I'm sure at some point that'll happen.
However, one of the great parts of an AI writing assistant is that you can turn it loose on its own skills and reasoning and produce actual flowcharts and diagrams of the entire top-to-bottom process, which is what I've done here.
```mermaid
---
title: Grim Tokens — From Seed to Social
---
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#2a241c", "primaryTextColor": "#e9e2d4", "primaryBorderColor": "#c9a25d", "lineColor": "#6b5a44", "secondaryColor": "#332a1f", "tertiaryColor": "#1d1713", "clusterBkg": "#13100d", "clusterBorder": "#3a322a", "edgeLabelBackground": "#13100d", "fontFamily": "Georgia, serif"}, "flowchart": {"nodeSpacing": 30, "rankSpacing": 30, "useMaxWidth": true}}}%%
flowchart TB
seed("Seed<br/>idea · thread · book · session · prompt")
exists{"Existing piece?"}
edit{"Structural or line?"}
rework[["Rework it<br/>read whole · plan · edit surgically"]]
kind{"Which kind?"}
scaffold["Scaffold<br/>name it · open<br/>draft · <i>obsidian create</i>"]
seriesScaffold["Scaffold<br/>filename + series: field<br/>draft · <i>obsidian create</i>"]
draft("Draft<br/>author drives; agent serves on request")
ready{"Done writing?"}
copy[["Copy-edit<br/><i>autofix.py</i> pre-pass · ¶N sweep"]]
fixed{"Sign-off?"}
fin["Finalize<br/>read-through · series format<br/>description + cover · <i>cover_audit.py</i>"]
ship{"Ready to publish?"}
flip["Flip publish: true"]
series{"Series or campaign?"}
hub["Run the generator<br/>hub row + month table<br/><i>inject.py</i>"]
pub["Publish + verify live<br/><i>obsidian reload</i> · <i>publish.py</i>"]
live{"Live at the URL?"}
social[["Status post<br/>three options · author picks"]]
dist["Distribution<br/><i>bluesky_reply</i> · <i>mastodon_post</i><br/>X · Facebook by hand"]
rec["Record<br/>social post file · URL in the session log"]
done(["Live and announced"])
refA["Find it in Books<br/><i>find_files</i> · Calibre"]
refB["Read the book<br/><i>pdf_cache.py</i>"]
refC["Convert the cover<br/>short side 600 · JPEG 85<br/><i>Pillow</i>"]
refD["Build the note<br/>draft · <i>publish: false</i><br/><i>_gameDescriptorGenerator</i>"]
refE["Ground it in the text<br/>completeness · correctness"]
refF["Verify every source<br/><i>web_extract</i>"]
refG["Tag the library record<br/><i>calibredb</i>"]
refH("Review it in Obsidian<br/>polish · reorder · re-check")
refI{"Changes?"}
refM[["Revise it<br/>author edits · agent applies"]]
refJ["Flip publish: true"]
refL["Add it to the games index<br/><i>inject.py</i>"]
refK["Publish + verify<br/><i>publish.py</i>"]
refDone(["Live — no announcement"])
seed --> exists
exists -->|existing| edit
edit -->|structural| rework
edit -->|line| copy
exists -->|new| kind
rework --> draft
kind -->|"Thought · Article · Play"| scaffold
kind -->|"Series entry"| seriesScaffold
kind -->|Reference| refA
scaffold --> draft
seriesScaffold --> draft
draft --> ready
ready -->|not yet| draft
ready -->|yes| copy
copy --> fixed
fixed -->|more| copy
fixed -->|done| fin
fin --> ship
ship -->|no| copy
ship -->|yes| flip
flip --> series
series -->|yes| hub
hub --> pub
series -->|no| pub
pub --> live
live -->|no — retry| pub
live -->|yes| social
social --> rec
rec --> dist
dist --> done
refA --> refB --> refC --> refD --> refE --> refF --> refG --> refH
refH --> refI
refI -->|no| refJ
refI -->|changes| refM
refM --> refE
refJ --> refL --> refK --> refDone
subgraph Legend["who does the work · italic = the script it runs"]
direction LR
L1("Author")
L2[["Author + agent"]]
L3["Agent"]
L4{"Author gate"}
L5{"Agent gate"}
L1 ~~~ L2 ~~~ L3 ~~~ L4 ~~~ L5
end
```
Hopefully this looks as good on Obsidian Publish as it does in the editor. Obsidian just updated the Mermaid renderer, but I don't know if it's reached the garden yet. I suppose we shall see.
The smart thing would be to put it in a footnote with a rendered PNG just as a backup.[^2]
Aside from being a beautiful flowchart, this is a pretty good guide to how I think about editing. Reference notes are largely automated, but I have to go in and review those reference notes to make sure the system understands the context of relationships to other RPGs, RPG families, and media.
You would be surprised how much actual expertise makes things go, look, and work better. Once the man in the loop has embedded the expertise, the loop *itself* functions more effectively. You get better output.
Of course, I've also been working toward automating as much as possible symbolically[^3], without the involvement of a large language model. Why? Because *tokens cost money*. Also, tokens are a literal representation of time, and symbolic computation is faster than Transformer computation.
Explaining this would probably require me to teach a course in CompSci 302, which I know no one comes here to watch, hear, or read. I will save you that suffering.[^4]
Look, I'm going to level with you. The real reason that I put this together is that I spent a good chunk of the day working on the automation process here and refining it into as much *symbolic* computation as possible.
Then I remembered that [Kepano](https://x.com/kepano) had released the **[Pele](https://pele.run)** library and I wanted to play with it. While I was putting this together, he pushed the new version of Obsidian, which ships with **Pele** inside. How could I possibly resist finishing this up?
This is one of the most beautiful flowcharts that I've seen in a while, and I'm going to use charts and tables more going forward. It's a great way to communicate a lot of things in a little space. Expressing things visually often lets people get a grip on what they were finding slippery in text.
I thought you might enjoy getting a peek behind the curtain to see what's going on around here and how I'm spending my money when it's not on [collector's editions of RPGs that haven't been released in the US in 35 years](https://www.backerkit.com/c/projects/mugen-gaming/sword-world).
You know how it goes. The collection must grow.
[^1]: I hate copy editing and copy editors. Not because I despise them as people. I just hate copy editing so much it slops over onto other people vaguely associated with the process.
It's much safer to hate machines.
[^2]: I am smart.
![[Grim Tokens Workflow (diagram).png|200]]
[^3]: Symbolic AI is the older project: you write the rules and the symbols down, and the machine manipulates them. Logic, search, expert systems, Prolog, the whole [GOFAI](https://mitpress.mit.edu/9780262580953/artificial-intelligence/) (good old-fashioned AI) era. There are no weights and no inference — the knowledge is explicit, the reasoning mechanical, the result repeatable. Neural nets took the spotlight once they got good at perception and language, but for a deterministic job like this one, symbolic is faster, cheaper, and won't hallucinate a step. [Artificial Intelligence - Stanford Encyclopedia of Philosophy](https://plato.stanford.edu/entries/artificial-intelligence/)
[^4]: If there *are* people who want to be part of that misery, let me know. Maybe I can put something together, but even as sadistic as I am, I don't want to do that to people without significant preparation. On your part.