Post the recap video
Drives the user's already-signed-in browser through Claude in Chrome. No API keys, no
OAuth app, no tokens, which is why this skill ships in a public repo safely. It also
means every post goes out as the user, from their own session, so the standard applies:
you prepare, they approve, then it posts.
Invoke the claude-in-chrome skill first, then load the browser tools in ONE ToolSearch
call. You will need at minimum: tabs_context_mcp, tabs_create_mcp, navigate,
computer, read_page, find, file_upload, tabs_close_mcp.
Gate: do not start until all four are true
- The video is built and verified: cards proofread, contact sheet checked. Posting
is the one step that cannot be undone; a misspelled name goes public.
- Written permission from every person who appears, guardians for minors. Ask the
user to confirm this out loud. Do not infer it from the video existing.
- The user has said which Facebook Page. Never guess from what happens to be open.
- The user knows this posts publicly. If they have not seen the final video in this
session, show it to them first.
If the club submits to brand@toastmasters.org before publishing, that approval belongs
here too, so ask whether it has come back.
1. Draft the caption
Read meeting.conf for the facts. Draft in the Toastmasters voice recorded in
tm-brand: confident, friendly-professional, positive, upbeat, succinct, internationally
friendly.
Names and awards are copied verbatim from meeting.conf. They are never paraphrased,
re-capitalised, or written from memory of the conversation. This is the same rule the
video pipeline runs on. A model may write the sentences around a name, never the name.
After drafting, diff every person's name in your draft against WINNERn_NAME
character by character and fix any drift before showing the user.
Constraints on the copy:
- One approved phrase, maximum, and only if
PHRASE in meeting.conf isn't already
carrying it in the video. See brand-cheatsheet.md for the allowed list.
- No invented club taglines, no invented statistics, no claims about the club that
meeting.conf and the user have not supplied.
- Don't restate what the video already shows. The caption gives someone scrolling a
reason to stop, the video does the rest.
- Include the club URL from
CLUB_URL.
- Hashtags: a short, sane set.
#Toastmasters #PublicSpeaking plus the club's city is
usually enough.
- Name the speaker, the evaluator and the winners, then tag them. A tag notifies the
person, and their reply carries the post into a network the club cannot reach on its
own. This is the highest-leverage line in this file for reach, and it costs nothing.
See "Tagging" below, because it is easy to get wrong.
- Close on one specific question. A recap that only reports is a recap nobody
answers, and distribution on both platforms is driven by replies rather than by views.
Ask something the meeting itself already asked, so the question reads as a continuation
rather than as engagement bait: a "Back to School" meeting that opened by asking people
about a favourite teacher ends its caption by asking the reader the same thing. Name
the action plainly ("tell us in the comments"), and ask for a comment rather than a
like, because a comment travels and a like mostly does not.
Write one caption per platform, not one shared caption:
- Facebook Page: warmer, community-facing, guests welcome, meeting details useful to
a local reader.
- Personal LinkedIn: first person, professional register, what the user took from the
meeting or why they volunteer. A club recap reposted verbatim to a personal feed reads
like an advert; a personal note about the club reads like a person.
Show both drafts to the user as text in chat and let them edit before any browser work.
Do not paste an unapproved draft into a composer "so they can see it in place."
2. Tagging
Tags do more for reach than anything else here, and a wrong one is a public mistake about
someone else's achievement, so they get their own step.
- Collect profile URLs before opening a composer. Ask the user for the profile of
every person about to be tagged. Never search a name and take the top hit.
- Verify every pick against the URL the user gave you. Autocomplete shows a name and
a headline, never a URL, so when several candidates share a name, screenshot the list
and ask the user which one. Ranking is not a shortcut: on LinkedIn a 1st degree
connection can sit below three strangers with the same name.
- Tag while composing, never by editing afterwards. A mention added in an edit often
fails to notify the person, which buys the link and loses the notification, and the
notification is the part that does the work. If the post is already live, put the tags
in a comment instead. Mentions in comments notify reliably, and the comment is itself a
distribution signal.
- Someone does not have to be a connection to be tagged. Mentions resolve against any
public profile. People can switch off being tagged in their privacy settings, so a name
that will not resolve is usually a setting rather than a typo. Move on and say so.
- The same consent that covers appearing in the video does not automatically cover being
tagged by name. If the user has not said who to tag, ask.
3. Facebook Page
- Open a new tab to the Page, or to business.facebook.com if they use Business Suite.
- Confirm the composer is posting as the Page, not as the user's personal profile.
Read it back to the user if there is any ambiguity. Posting a club video to a personal
timeline by accident is a real and annoying failure.
- Attach the
.mp4 with file_upload.
- Paste the approved caption.
- Wait for the video to finish processing. A composer that still shows a progress bar
will either reject the post or publish without the video.
- Screenshot the composer and show the user exactly what will go out. Ask for explicit
confirmation. Only then click Post.
4. Personal LinkedIn
- New tab to linkedin.com, start a post, choose the video option.
- Attach the same
.mp4.
- Paste the LinkedIn caption.
- Insert the mentions now, not later: type
@ and the full name, check the candidate
against the profile URL, then select it. Confirm each one rendered as a blue mention
and not as plain text before moving on.
- Check the audience selector: "Anyone" for a club promo, unless the user says otherwise.
- LinkedIn re-encodes; wait for the preview thumbnail before continuing.
- Screenshot, confirm with the user, then post.
Hard rules
- Never click Post, Publish, or Share without a fresh, explicit yes in chat for that
specific post. Approval of the caption is not approval to publish. Approval of the
Facebook post is not approval of the LinkedIn post.
- Never accept a cookie/consent dialog, change an account setting, or dismiss a security
prompt on the user's behalf. Surface it and let them do it.
- Avoid anything that triggers a browser modal; those freeze the extension.
- If a platform asks for a password or a 2FA code, stop and hand control back. Never type
credentials.
- If the DOM has changed and you cannot find the composer after two or three attempts,
stop and describe what you see. Do not click hopefully.
- Report the resulting post URLs back to the user.
After posting
Remind the user that the video should also be submitted to brand@toastmasters.org if the
club has not already done so, and note anything worth changing next week: a caption that
ran long, a thumbnail frame that landed badly, a winner tile that read poorly at feed size.
Engagement is the number worth watching, not views. Views mean the platform showed the
post to someone; comments and reposts are what make it show the post to anyone new. If a
recap pulls hundreds of views and single-digit engagement week after week, the fix is in
the caption, the tags and the question, not in the video.
1---2name: tm-social-post3description: Post a finished Toastmasters recap video to a Facebook Page and a personal LinkedIn profile, with an AI-drafted caption the user approves first. Use after the recap video is built and verified, or when asked to share/publish/post the promo video.4---56# Post the recap video78Drives the user's already-signed-in browser through Claude in Chrome. No API keys, no9OAuth app, no tokens, which is why this skill ships in a public repo safely. It also10means every post goes out as the user, from their own session, so the standard applies:11**you prepare, they approve, then it posts.**1213Invoke the `claude-in-chrome` skill first, then load the browser tools in ONE ToolSearch14call. You will need at minimum: `tabs_context_mcp`, `tabs_create_mcp`, `navigate`,15`computer`, `read_page`, `find`, `file_upload`, `tabs_close_mcp`.1617## Gate: do not start until all four are true18191. The video is built **and verified**: cards proofread, contact sheet checked. Posting20 is the one step that cannot be undone; a misspelled name goes public.212. **Written permission from every person who appears**, guardians for minors. Ask the22 user to confirm this out loud. Do not infer it from the video existing.233. The user has said which Facebook Page. Never guess from what happens to be open.244. The user knows this posts publicly. If they have not seen the final video in this25 session, show it to them first.2627If the club submits to <brand@toastmasters.org> before publishing, that approval belongs28here too, so ask whether it has come back.2930## 1. Draft the caption3132Read `meeting.conf` for the facts. Draft in the Toastmasters voice recorded in33`tm-brand`: confident, friendly-professional, positive, upbeat, succinct, internationally34friendly.3536**Names and awards are copied verbatim from `meeting.conf`. They are never paraphrased,37re-capitalised, or written from memory of the conversation.** This is the same rule the38video pipeline runs on. A model may write the sentences around a name, never the name.39After drafting, diff every person's name in your draft against `WINNERn_NAME`40character by character and fix any drift before showing the user.4142Constraints on the copy:4344- **One approved phrase, maximum**, and only if `PHRASE` in `meeting.conf` isn't already45 carrying it in the video. See `brand-cheatsheet.md` for the allowed list.46- No invented club taglines, no invented statistics, no claims about the club that47 `meeting.conf` and the user have not supplied.48- Don't restate what the video already shows. The caption gives someone scrolling a49 reason to stop, the video does the rest.50- Include the club URL from `CLUB_URL`.51- Hashtags: a short, sane set. `#Toastmasters #PublicSpeaking` plus the club's city is52 usually enough.53- **Name the speaker, the evaluator and the winners, then tag them.** A tag notifies the54 person, and their reply carries the post into a network the club cannot reach on its55 own. This is the highest-leverage line in this file for reach, and it costs nothing.56 See "Tagging" below, because it is easy to get wrong.57- **Close on one specific question.** A recap that only reports is a recap nobody58 answers, and distribution on both platforms is driven by replies rather than by views.59 Ask something the meeting itself already asked, so the question reads as a continuation60 rather than as engagement bait: a "Back to School" meeting that opened by asking people61 about a favourite teacher ends its caption by asking the reader the same thing. Name62 the action plainly ("tell us in the comments"), and ask for a comment rather than a63 like, because a comment travels and a like mostly does not.6465Write one caption per platform, not one shared caption:6667- **Facebook Page**: warmer, community-facing, guests welcome, meeting details useful to68 a local reader.69- **Personal LinkedIn**: first person, professional register, what the user took from the70 meeting or why they volunteer. A club recap reposted verbatim to a personal feed reads71 like an advert; a personal note about the club reads like a person.7273Show both drafts to the user as text in chat and let them edit before any browser work.74Do not paste an unapproved draft into a composer "so they can see it in place."7576## 2. Tagging7778Tags do more for reach than anything else here, and a wrong one is a public mistake about79someone else's achievement, so they get their own step.8081- **Collect profile URLs before opening a composer.** Ask the user for the profile of82 every person about to be tagged. Never search a name and take the top hit.83- **Verify every pick against the URL the user gave you.** Autocomplete shows a name and84 a headline, never a URL, so when several candidates share a name, screenshot the list85 and ask the user which one. Ranking is not a shortcut: on LinkedIn a 1st degree86 connection can sit below three strangers with the same name.87- **Tag while composing, never by editing afterwards.** A mention added in an edit often88 fails to notify the person, which buys the link and loses the notification, and the89 notification is the part that does the work. If the post is already live, put the tags90 in a comment instead. Mentions in comments notify reliably, and the comment is itself a91 distribution signal.92- **Someone does not have to be a connection to be tagged.** Mentions resolve against any93 public profile. People can switch off being tagged in their privacy settings, so a name94 that will not resolve is usually a setting rather than a typo. Move on and say so.95- The same consent that covers appearing in the video does not automatically cover being96 tagged by name. If the user has not said who to tag, ask.9798## 3. Facebook Page991001. Open a new tab to the Page, or to business.facebook.com if they use Business Suite.1012. Confirm the composer is posting **as the Page**, not as the user's personal profile.102 Read it back to the user if there is any ambiguity. Posting a club video to a personal103 timeline by accident is a real and annoying failure.1043. Attach the `.mp4` with `file_upload`.1054. Paste the approved caption.1065. Wait for the video to finish processing. A composer that still shows a progress bar107 will either reject the post or publish without the video.1086. **Screenshot the composer and show the user exactly what will go out. Ask for explicit109 confirmation. Only then click Post.**110111## 4. Personal LinkedIn1121131. New tab to linkedin.com, start a post, choose the video option.1142. Attach the same `.mp4`.1153. Paste the LinkedIn caption.1164. Insert the mentions now, not later: type `@` and the full name, check the candidate117 against the profile URL, then select it. Confirm each one rendered as a blue mention118 and not as plain text before moving on.1195. Check the audience selector: "Anyone" for a club promo, unless the user says otherwise.1206. LinkedIn re-encodes; wait for the preview thumbnail before continuing.1217. **Screenshot, confirm with the user, then post.**122123## Hard rules124125- **Never click Post, Publish, or Share without a fresh, explicit yes in chat for that126 specific post.** Approval of the caption is not approval to publish. Approval of the127 Facebook post is not approval of the LinkedIn post.128- Never accept a cookie/consent dialog, change an account setting, or dismiss a security129 prompt on the user's behalf. Surface it and let them do it.130- Avoid anything that triggers a browser modal; those freeze the extension.131- If a platform asks for a password or a 2FA code, stop and hand control back. Never type132 credentials.133- If the DOM has changed and you cannot find the composer after two or three attempts,134 stop and describe what you see. Do not click hopefully.135- Report the resulting post URLs back to the user.136137## After posting138139Remind the user that the video should also be submitted to <brand@toastmasters.org> if the140club has not already done so, and note anything worth changing next week: a caption that141ran long, a thumbnail frame that landed badly, a winner tile that read poorly at feed size.142143Engagement is the number worth watching, not views. Views mean the platform showed the144post to someone; comments and reposts are what make it show the post to anyone new. If a145recap pulls hundreds of views and single-digit engagement week after week, the fix is in146the caption, the tags and the question, not in the video.