The problem
She describes one Sunday’s backlog: “Thirty-seven comments on my recent posts. Eleven Notes replies waiting. Fourteen Notes I meant to write but didn’t. A DM I had been putting off for six days.” Three hours later she felt she had written “very slightly different versions of “thanks for reading - what do you think?””
She had resisted AI tools because “every AI writing tool I had tried felt like I was outsourcing my voice to a motivational poster.” Her diagnosis was that she “was asking one AI to do four different jobs (understand context, recall my back catalogue, write like me, and quality-check itself) all at once.” Her fix was one agent per job.
The blueprint (as she describes it)
- Read the archive from RSS. Every Substack publication exposes a public feed at yourname.substack.com/feed. A short feedparser function pulls recent posts and strips the HTML to plain text. The function defaults to 50 posts. She needed no scraping and no Substack API keys.
- Distill the voice once. A Voice Distiller agent reads 10 to 20 of her best articles. The code uses 15. It returns a JSON profile with fields for tone, sentence rhythm, punctuation quirks, rhetorical moves, recurring metaphors, vocabulary, what she avoids, signature openings and closings, stances and exemplar paragraphs. The prompt tells the agent to be specific and calls “Conversational” useless. The profile is saved to data/voice_profile.json and injected into every other agent’s prompt. She says hers caught that she almost always opens with a micro-scene and uses “honestly” as a tell before disagreeing.
- Index the archive. A Content Indexer agent turns each article into a JSON entry with a one-liner, topic tags, key claims, who it helps, quotable lines, the title and the URL. The indexing runs in parallel with 8 workers. It runs once and again whenever she publishes new posts. She notes there are no embeddings to maintain.
- Run the reply team on each comment or Note.
- Context Agent: what the person is really saying, the emotional register, and whether it is a question or a point.
- Relevance Agent: up to 2 genuinely relevant articles from the index, or none.
- Drafter: 3 drafts under 80 words, in different angles (warm, a sharp thought, a question back). It weaves in one article reference and URL only when relevant.
- Voice Critic: scores each draft 0 to 10 against the profile in a separate, cold context and penalizes generic phrases and LinkedIn-speak. The drafts come back ranked.
- Reply by hand from the drafts. She runs
substack-assist reply --text "...", gets three ranked drafts, picks one, tweaks a word and pastes it into Substack herself. - Generate daily Notes from the archive.
substack-assist daily-notespicks 5 random entries from the content index. For each one it writes a 40 to 80 word standalone Note in her voice. The URL to the original article goes on its own line at the end. - Review everything. Her rule is “never post anything unedited.” She says the assistant gets her “from blank page to 90%” and she does the last 10%.
- Maintain the voice. Her other rules: feed it “your 15 best articles, not your 50 most recent”. Re-run the Voice Distiller every 3 months. Always generate 3 drafts, never 1. Keep an edits.log of before/after snippets and feed it to the Voice Distiller on the next run.
Stated results
- A thoughtful reply took her 3 to 5 minutes. With the tool it takes “~30 seconds.” She says she has 20 to 40 of these a week.
- Five Notes in “~20 seconds.” Writing five original Notes from scratch used to take “an hour of my week.”
- “~8 hours back every week” and “Roughly 400 hours a year.” Her per-task breakdown is an image and is not in the source text.
- The daily Notes “drive traffic to your archive”, which she had been “completely leaving on the table.” Traffic numbers: None stated.
- She says the top-ranked draft “is almost always the one that actually sounds like you.”
Caveats
- This is her own Substack post. It is also a funnel. She announces a paid production version for paid subscribers with “the inbox integration that lets it draft replies automatically”, a “revision loop” and her own voice_profile.json. The post carries subscribe prompts.
- All results are self-reported. The 8-hour figure comes from a breakdown table that is not reproduced in the text. She does not state a baseline average voice score. She says the paid version’s revision loop “added another 2 points” to it.
- The agents only draft. In the free version she pastes replies into Substack by hand. Running daily-notes by cron is listed as a possible upgrade, not as something she says she runs.
- The post says the GitHub repo has “all seven agents”. The article text walks through six: Voice Distiller, Content Indexer, Context, Relevance, Drafter and Voice Critic. The code in the post is partial. The complete version is in the repo.
- It needs an Anthropic API key. API cost is not stated.
- Her job title comes from her site and GitHub profile, not the post. Her X bio lists a different role at the University of Chicago.
- Handles (verified 2026-10-27): LinkedIn linkedin.com/in/teodoraszasz (linked from her GitHub profile). Substack @teodora485587 (author handle on the post). GitHub DoraSzasz. YouTube: channel linked from her Substack About page. X @TeodoraSzasz (bio: Computational Scientist at The University of Chicago, Chicago IL; cross-checked against the UChicago work listed on her site, but not linked from her site). Bluesky, Threads, Instagram, Mastodon and TikTok are not verified and are not tagged.
Sources
- https://teodoracoach.substack.com/p/multi-agent-ai-substack-assistant-python (primary: first-person tutorial on her Substack, published 2026-04-18)
- https://github.com/DoraSzasz/substack-assistant (open-source code, repo created the same day)
- https://teodoraszasz.com (her site, for role and background)
Want agents like these working your distribution? Get It Built. Get new teardowns weekly: subscribe (double opt-in).
Get one teardown a week.
Same format, a new operator every issue. Double opt-in.