| name | release-episode |
| description | Orchestrate the full momit.fm podcast episode release workflow — transcript conversion, title/shownote/chapter generation, Art19 upload bundle, post-publication announcement, and PR-based commit. Use when releasing a new episode end-to-end. |
You are the orchestrator for releasing a new momit.fm podcast episode. Guide the user through each step, pausing for confirmation before proceeding.
Input
Workflow
Pre-flight Check
Verify that the Riverside transcript file exists:
ls ~/Downloads/momitfm$1.txt
If not found, ask the user to export the transcript from Riverside.fm and save it as ~/Downloads/momitfm$1.txt.
Step 1: Transcript Conversion
Convert the Riverside transcript to structured JSON.
Invoke the convert-transcript skill with episode number $1.
Confirm the output looks correct before proceeding.
Step 2: Title Generation
Generate 10 title candidates for the episode.
Invoke the generate-titles skill with episode number $1.
Ask the user to pick their preferred title (or suggest modifications).
Step 3: Shownote Generation
Generate the episode description/shownote.
Invoke the generate-shownote skill with episode number $1.
Present the shownote for user review. Apply any requested edits.
Step 4: Chapter Generation
Generate chapter markers from the transcript.
Invoke the generate-chapters skill with episode number $1.
Present chapters for user review.
Step 5: Art19 Upload Bundle
Consolidate all materials for Art19 upload.
Invoke the prepare-episode skill with episode number $1.
This outputs all materials in copy-paste-ready format.
Step 6: Art19 Upload (Manual)
Remind the user:
Art19 にアップロードしてください:
1. Art19 ダッシュボード → New Episode
2. 音源ファイルをアップロード
3. 上記バンドルからタイトル・Description・Chapters をコピペ
4. 広告ポイントを設定
5. プレビュー確認 → 公開
公開後、RSS が更新されると:
- GitHub Actions が自動で momit.fm サイトを更新
- announcement.txt が自動生成されます
準備ができたら「done」と教えてください。
Step 7: Post-Publication
After the user confirms Art19 publication:
-
Generate the announcement text:
Invoke the generate-announcement skill with episode number $1.
-
Create a feature branch and commit on it (never directly to main — direct push is blocked by guardrails):
git fetch origin
git checkout -b episode-$1-release origin/main
git add public/transcripts/$1.json announcement.txt
git commit -m "Add transcript and announcement for episode $1"
Note: announcement.txt may already have been auto-generated by GitHub Actions (rss-monitor → generate-announcement workflow). If the auto-generated title contains a duplicated prefix like $1. $1., keep the locally generated cleaner version.
Step 8: PR, Review, and Merge
Automate the PR flow — do not push to main directly.
-
Push the branch and open a PR:
git push -u origin episode-$1-release
gh pr create --base main --head episode-$1-release \
--title "Add transcript and announcement for episode $1" \
--body "$(cat <<'EOF'
## Summary
- Add transcript JSON for episode $1 (`public/transcripts/$1.json`)
- Update `announcement.txt` with the published episode title and links
## Test plan
- [x] Transcript validated (segments, speakers, duration)
- [x] Title matches Art19 published title
- [x] Spotify/Apple URLs verified
🤖 Generated with [Claude Code](https://claude.com/claude-code)
EOF
)"
-
Poll PR checks until Vercel deploy completes (usually 1-3 min):
PR_NUM=$(gh pr view --json number --jq .number)
for i in $(seq 1 6); do
STATUS=$(gh pr view "$PR_NUM" --json statusCheckRollup \
--jq '.statusCheckRollup[] | select((.context // .name) == "Vercel") | (.state // .conclusion)')
echo "[$i] Vercel: $STATUS"
[ "$STATUS" != "PENDING" ] && [ -n "$STATUS" ] && break
sleep 20
done
-
Verify mergeable + checks pass:
gh pr view "$PR_NUM" --json mergeable,mergeStateStatus,statusCheckRollup \
--jq '{merge: .mergeable, state: .mergeStateStatus, checks: [.statusCheckRollup[] | {name: (.name // .context), result: (.conclusion // .state)}]}'
Expected: mergeable: MERGEABLE, state: CLEAN (or UNSTABLE if dependabot is SKIPPED but Vercel is SUCCESS).
-
Show the diff for a quick sanity check:
gh pr diff "$PR_NUM" | head -60
-
Merge and delete the branch:
gh pr merge "$PR_NUM" --merge --delete-branch
-
Present the final summary:
## Episode $1 Release Complete
- [x] Transcript converted and committed
- [x] Title selected
- [x] Shownote generated
- [x] Chapters created
- [x] Art19 uploaded
- [x] Announcement text ready
- [x] PR #<num> merged
GitHub Actions handled:
- [x] RSS monitoring → site update
- [x] Vercel deploy
Next: Copy announcement text to X/Twitter
Important Notes
- Each step pauses for user confirmation before proceeding
- If a step fails, troubleshoot before moving on
- The user can skip steps if they've already completed them
- Art19 upload is always manual (no API available)
- Direct push to
main is blocked by Claude Code auto-mode guardrails — always use the PR flow in Step 8
- If RSS-monitor's auto-generated
announcement.txt lands on main before this branch is created, expect a merge conflict on announcement.txt; resolve by keeping the locally generated version (it has a cleaner title without the $1. $1. duplication)