一键导入
substack-post
// Publishes a local markdown blog file to Substack using Playwright browser automation
// Publishes a local markdown blog file to Substack using Playwright browser automation
Publishes a carousel post to Meta Threads — a single post containing multiple images or videos. Trigger when the user says "carousel on Threads", "post multiple images to Threads", "Threads carousel", "share a gallery on Threads", or any intent to publish a multi-image or multi-video Threads post. Do NOT trigger for a single image post or reply chain threads — those have dedicated skills.
Crafts and publishes a single text or image post to Meta Threads using Playwright browser automation. Trigger when the user says "post to Threads", "share on Threads", "publish this to Threads", "put this on Threads", or any similar intent to post a single piece of content to Threads. Do NOT trigger for carousel (multi-image) posts or reply chain threads — those have dedicated skills.
Creates and publishes a spoiler-style post to Meta Threads using Playwright browser automation. Trigger when the user says "spoiler post on Threads", "hide this behind a spoiler", "tap to reveal post", "Threads spoiler", or any similar intent to post content that requires a tap to show. Do NOT trigger for regular posts or carousels — those have dedicated skills.
Crafts and publishes a threaded reply chain to Meta Threads — a root post followed by a series of connected replies that form a thread. Trigger when the user says "create a thread on Threads", "thread this article", "post a thread", "make a multi-part thread", "thread chain", or any intent to publish a sequence of connected posts on Threads. Do NOT trigger for a single post or multi-image carousel — those have dedicated skills.
Publishes a local blog file (markdown) to Substack using Playwright MCP browser automation. Trigger when the user says anything like "publish to Substack", "post this blog to Substack", "upload my markdown to Substack", "share on Substack", "save this draft to Substack", or any similar intent to send a local blog file to Substack. Defaults to saving as a draft. Do NOT trigger for general Substack browsing or subscriber management.
Submits a URL to Hacker News using Playwright browser automation
| name | substack-post |
| description | Publishes a local markdown blog file to Substack using Playwright browser automation |
| version | 1.0.0 |
| author | Aditya Karnam |
| license | MIT |
| platforms | ["macos","linux","windows"] |
| metadata | {"hermes":{"tags":["Social Media","Substack","Browser Automation","Publishing","Blog"],"related_skills":[],"requires_toolsets":["browser"],"requires_tools":["browser_navigate","browser_fill_form","browser_click","browser_type","browser_snapshot"]}} |
| required_environment_variables | [{"name":"SUBSTACK_EMAIL","prompt":"Enter your Substack account email","help":"The email address used to log in to substack.com","required_for":"Logging in to Substack"},{"name":"SUBSTACK_PASSWORD","prompt":"Enter your Substack account password","help":"Your Substack password (set one at https://substack.com/account/login-options if you only use magic-link)","required_for":"Logging in to Substack"},{"name":"SUBSTACK_PUBLICATION","prompt":"Enter your Substack publication subdomain (optional)","help":"The subdomain of your publication, e.g. 'myblog' for myblog.substack.com. Leave blank to use the default publication shown on the dashboard.","required_for":"Targeting a specific publication directly"}] |
Automates publishing a local markdown blog file to Substack using Playwright browser tools. Defaults to saving as a draft and confirms before publishing.
Trigger when the user says "publish to Substack", "post this blog to Substack", "upload my markdown to Substack", "share on Substack", "save this draft to Substack", or any similar intent to send a local blog file to Substack. Do not trigger for general Substack browsing or subscriber management.
https://substack.com/sign-inhttps://<publication>.substack.com/publish/post?type=newsletterhttps://substack.com → click "New post".socialsecho $SUBSTACK_EMAIL
echo $SUBSTACK_PASSWORD
echo $SUBSTACK_PUBLICATION
If blank, check .socials:
grep -E "^SUBSTACK_(EMAIL|PASSWORD|PUBLICATION)=" .socials 2>/dev/null
If still missing, ask the user or run hermes setup substack-post.
--- ... ---) or a TOML block (+++ ... +++), parse it and remove the block from the body. Handles Hugo, Jekyll, Zola, Hexo, Astro, Obsidian, etc. Files without frontmatter pass through unchanged.title → first # H1 in body (strip from body if used) → filename without extension. For generic filenames (index, README, post), use the parent directory name instead.subtitle → description → summary → excerpt → blank.https://substack.com/sign-in.SUBSTACK_PUBLICATION is set: navigate to https://<publication>.substack.com/publish/post?type=newsletter.https://substack.com and click "New post".## lines stay as literal text. Substack only auto-styles a heading when # /## /### is typed at line start and the trailing space is pressed (space triggers the conversion). Split the body on lines matching ^#{1,3} : paste prose chunks between headings (preserves inline markdown), and for each heading line type the prefix + space + heading text + Enter. Code blocks, images, and tables still won't render — flag in the report.Click "Save draft" or wait for autosave. Capture the draft URL.
Stop at draft by default. Report the draft URL and any markdown elements that didn't convert. Only click Publish if the user explicitly confirmed.
https://substack.com/account/login-options.After saving, the editor URL changes to a draft URL like https://<publication>.substack.com/publish/post/<id>. Capture and report it. After publishing (if confirmed), Substack redirects to the public post URL — capture and report that too.