Agent skill

Crossposting

by wasp-lang in wasp-lang/wasp

Crosspost Wasp blog articles (MDX) to DEV.to and Medium. An agent skill from wasp-lang/wasp.

MITAuto-check passedDocuments & Office

Install Crossposting

skills CLI
$ npx skills add wasp-lang/wasp --skill crossposting -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install wasp-lang/wasp crossposting --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/wasp-lang/wasp.git skills-src && mkdir -p .claude/skills && cp -r skills-src/web/.claude/skills/crossposting .claude/skills/crossposting && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
crossposting
GitHub stars
19k
Token cost
~1.1k tokens
SKILL.md length
514 words
Files
5 (incl. scripts)
Skills in repo
4
Repo updated
First seen
Licence
MIT

At a glance

Crosspost Wasp blog articles (MDX) to DEV.to and Medium. An agent skill from wasp-lang/wasp.

  • Works in 6 steps: Convert the MDX article → Navigate to https://medium.com/new-story → Set the article title → …
  • Tasks that involve Markdown
  • Runs TypeScript and JavaScript scripts from its folder; calls npx; reaches medium.com; needs DEVTO_API_KEY and YOUTUBE_CLIENT_SECRET

What it does

Crossposting is an agent skill from wasp-lang/wasp. Crosspost Wasp blog articles (MDX) to DEV.to and Medium.

Its SKILL.md is about 1.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including scripts (for example `README.md`, `scripts/convert-mdx.ts` and `scripts/medium-helpers.js`).

It sits in Documents & Office, covering Markdown. It works with YouTube. The repository describes itself as: The batteries-included full-stack framework for the AI era. Develop JS/TS web apps (React, Node.js, and Prisma) using declarative code that abstracts away complex full-stack… The licence is MIT.

When your agent uses it

  • Tasks that involve Markdown

Example prompts

  • “/crossposting”

Requirements

  • Node.js
  • A credential in DEVTO_API_KEY
  • A credential in YOUTUBE_CLIENT_SECRET

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. Convert the MDX article
  2. Navigate to https://medium.com/new-story
  3. Set the article title
  4. Paste the article body
  5. Verify
  6. Before Publishing (human steps)

What it can do on your machine

Read from SKILL.md and the folder at commit c8a7939. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 3 files in scripts/ (TypeScript and JavaScript), which the agent can run.

    Shell commands in SKILL.md call:

    • npx

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • medium.com

    Also links to:

    • dev.to

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • DEVTO_API_KEY
    • YOUTUBE_CLIENT_SECRET

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Crossposting loads about 1.1k tokens when it runs. Until then it costs about 17 tokens; SKILL.md has 514 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~17
When it runs · the whole SKILL.md, loaded when a task matches
~1.1k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from wasp-lang/wasp at commit c8a7939, republished under its MIT licence (© wasp-lang). 514 words, ~1,132 tokens.

Download SKILL.mdSave it as .claude/skills/crossposting/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.
name
crossposting
description
Crosspost Wasp blog articles (MDX) to DEV.to and Medium.

MDX Conversion Script

Converts a Wasp blog MDX file to clean markdown, HTML, and Medium-ready chunks. Output is saved to .claude/skills/crossposting/scripts/output/.

bash
npx tsx .claude/skills/crossposting/scripts/convert-mdx.ts <path-to-mdx-file> [--publish-devto] [--update-devto <id>] [--upload-videos]

Output files (always written):

  • <slug>.md — clean markdown (for DEV.to)
  • <slug>.html — HTML (for Medium preview/reference)
  • <slug>-medium-chunks.json — { title: string, chunks: string[] } pre-split at <h2> boundaries, pre-escaped for JS template literals

Flags:

  • --publish-devto — POST as draft to DEV.to (requires DEVTO_API_KEY)
  • --update-devto <id> — PUT to existing DEV.to article (requires DEVTO_API_KEY)
  • --upload-videos — upload local .mp4s to YouTube (unlisted), embed as {% youtube URL %} liquid tags

Env vars: DEVTO_API_KEY (from https://dev.to/settings/extensions), YOUTUBE_CLIENT_ID + YOUTUBE_CLIENT_SECRET (saved in 1password for the users).

Notes:

  • canonical_url is auto-generated from MDX filename → wasp.sh/blog/...
  • Without --upload-videos, local .mp4 videos become plain links
YouTube Setup (one-time, human steps)
  1. Create Google Cloud project → enable YouTube Data API v3 → create OAuth 2.0 Desktop credentials
  2. Add YOUTUBE_CLIENT_ID and YOUTUBE_CLIENT_SECRET to ~/.zshrc
  3. Run npx tsx .claude/skills/crossposting/scripts/upload-youtube.ts --auth → authorize in browser (select @wasplang channel if prompted)
  4. Refresh token stored in ~/.youtube-upload-tokens.json
  5. Check channel: npx tsx .claude/skills/crossposting/scripts/upload-youtube.ts --whoami. Wrong channel? Delete token file and re-auth.

Crossposting to Dev.to

Use --publish-devto or --update-devto <id> flags. Requires DEVTO_API_KEY.


Crossposting to Medium

Paste HTML into Medium's editor via Chrome DevTools MCP. The user must be logged in to Medium using email login (not google oauth) with info@wasp-lang.dev.

Steps

1. Convert the MDX article

Run the conversion script, if it hasn't been run yet (see usage above).

Images: Medium does not support webp. Convert webp images to jpg for later manual upload:

bash
for f in static/img/<slug>/*.webp; do sips -s format jpeg "$f" --out ".claude/skills/crossposting/scripts/output/$(basename "${f%.webp}.jpg")"; done
2. Navigate to https://medium.com/new-story

The human user must login to Medium with the info@wasp-lang.dev email and get the OTP sent to your email.

3. Set the article title

Do NOT use the fill tool — it puts text into the body paragraph instead. Use evaluate_script with the setMediumTitle function from scripts/medium-helpers.js.

  1. Read setMediumTitle from scripts/medium-helpers.js.
  2. Replace TITLE_PLACEHOLDER with the actual title (escape backticks and ${ sequences).
  3. Call evaluate_script with the resulting function string.

Then press Enter to move cursor to the body area.

Show full SKILL.md (187 more words)Show less
4. Paste the article body

IMPORTANT: Do NOT use document.execCommand — it bypasses Medium's internal state and causes save errors. Always use synthetic ClipboardEvent paste.

IMPORTANT: Chunks are already pre-escaped for JS template literals and pre-processed for Medium (YouTube URLs, image placeholders). Inline each chunk string directly into the pasteMediumChunk function body where HTML_CHUNK_PLACEHOLDER appears. Do NOT base64-encode, store chunks in page variables, or add any intermediate encoding steps.

  1. Read output/<slug>-medium-chunks.json — chunks are ready to paste as-is.
  2. Click the body paragraph to focus it.
  3. For each chunk, use evaluate_script with the pasteMediumChunk function from scripts/medium-helpers.js. Replace HTML_CHUNK_PLACEHOLDER directly with the chunk string content.
  4. Wait for "Saved" status after all chunks are pasted.
5. Verify
  • Snapshot the article to confirm it looks correct and shows "Draft" / "Saved"
  • Scroll through to confirm section order matches the original and make any necessary adjustments.
6. Before Publishing (human steps)
  • Replace [IMAGE: filename.jpg] markers with actual image uploads in Medium's editor
  • Add any YouTube embeds that didn't auto-embed (Medium auto-embeds standalone YouTube URLs in <p> tags)
  • Add the banner image and canonical URL
  • Review and publish from Medium's UI

© wasp-lang, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 4 other files (scripts) in web/.claude/skills/crossposting of wasp-lang/wasp.

  • SKILL.md
  • README.md
  • scripts/convert-mdx.ts
  • scripts/medium-helpers.js
  • scripts/upload-youtube.ts

Open the folder on GitHubat commit c8a7939

Compare with similar skills

Crossposting next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Crossposting compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Crossposting this skillwasp-lang/wasp19k—~1.1kAutomated safety check: PassMIT
MarkitdownImCa0/just-laws78114 repos~3.2kAutomated safety check: NotesMIT
Add Related Resourcespingcap/docs616—~1.8kAutomated safety check: PassCustom licence
Lecture To Mdysyecust/lecture-to-notes270—~3.9kAutomated safety check: PassCustom licence
Gbro Series Vocabpyang5166/gbro-series-vocab162—~1.1kAutomated safety check: PassMIT
Markdown Converterintellectronica/agent-skills2954 repos~492Automated safety check: PassCC0-1.0

Similar skills

  • Markitdown

    ImCa0/just-laws

    Convert files and office documents to Markdown. An agent skill from ImCa0/just-laws.

    781 GitHub starsUsed in 14 repos~3.2k tokens
    Documents & OfficeAuto-check: notes
  • Produces and merges Related resources cards for TiDB docs pages using the RelatedResources and ResourceCard MDX components.

    616 GitHub stars~1.8k tokensUpdated yesterday
    Documents & OfficeAuto-check passed
  • Lecture To Md

    ysyecust/lecture-to-notes

    把课堂视频(本地或 B 站/YouTube)、文字稿、课件三者(任意组合)整理成一份详细的中文 Markdown 课堂笔记,输出按课程标题命名的 {titlename}.md(首行为 文档标题)+ 相对路径图片。Markdown 工作流,与上游 lecture-to-notes 的 LaTeX/PDF 输出并行存在;上游 skill 完全不动。触发词:markdown 笔记、md 笔记、视频转…

    270 GitHub stars~3.9k tokensUpdated 5 days ago
    Documents & OfficeAuto-check passed
  • Gbro Series Vocab

    pyang5166/gbro-series-vocab

    追剧学英语 / Learn English vocabulary from TV series. An agent skill from pyang5166/gbro-series-vocab.

    162 GitHub stars~1.1k tokensUpdated 2 mo ago
    Documents & OfficeAuto-check passed
  • Markdown Converter

    intellectronica/agent-skills

    Convert documents and files to Markdown using markitdown. An agent skill from intellectronica/agent-skills.

    295 GitHub starsUsed in 4 repos~492 tokens
    Documents & OfficeAuto-check passed
  • Markdown Converter

    steipete/agent-scripts

    Markdown conversion: PDF, Office, HTML, data, OCR, audio, ZIP, YouTube.

    7.3k GitHub stars~525 tokensUpdated 4 days ago
    Documents & OfficeAuto-check passed

More from wasp-lang/wasp

  • Geo Fundamentals

    wasp-lang/wasp

    Generative Engine Optimization for AI search engines (ChatGPT, Claude, Perplexity).

    19k GitHub starsUsed in 9 repos~861 tokens
    Auto-check passed
  • Notion To Blog

    wasp-lang/wasp

    Transfer a blog post from Notion to the Wasp blog. An agent skill from wasp-lang/wasp.

    19k GitHub stars~922 tokensUpdated yesterday
    Auto-check passed
  • Wasp Review

    wasp-lang/wasp

    Review code changes for correctness, clarity, and potential issues.

    19k GitHub stars~834 tokensUpdated yesterday
    Auto-check passed

Works with

Questions about Crossposting

What does Crossposting do?

Crosspost Wasp blog articles (MDX) to DEV.to and Medium. An agent skill from wasp-lang/wasp. Crossposting is an agent skill from wasp-lang/wasp.to and Medium.

When should I use Crossposting?

Crossposting fits situations like: tasks that involve Markdown.

How do I install Crossposting in Claude Code?

Run `npx skills add wasp-lang/wasp --skill crossposting -a claude-code`. Or copy the skill folder (web/.claude/skills/crossposting in wasp-lang/wasp) into .claude/skills/crossposting in your project. Claude Code loads it when a task matches its description.

How do I install Crossposting in Codex?

Run `npx skills add wasp-lang/wasp --skill crossposting -a codex`. Or copy the skill folder (web/.claude/skills/crossposting in wasp-lang/wasp) into .agents/skills/crossposting in your project. Codex loads it when a task matches its description.

Can I use Crossposting in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add wasp-lang/wasp --skill crossposting -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/crossposting, .gemini/skills/crossposting, .github/skills/crossposting and .opencode/skills/crossposting in your project.

What does Crossposting need to run?

Going by SKILL.md and its folder, Crossposting needs TypeScript and JavaScript for the scripts in its folder, the command-line tools its instructions call (npx) and credentials named DEVTO_API_KEY and YOUTUBE_CLIENT_SECRET. Our summary lists: Node.js; A credential in DEVTO_API_KEY; A credential in YOUTUBE_CLIENT_SECRET.

Does Crossposting access the network?

SKILL.md names 2 domains. In commands or code: medium.com; the agent is likely to contact it when it follows the instructions. As links in the text: dev.to. This is read from the text; nothing was executed.

Is Crossposting safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Crossposting use?

Crossposting is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Crossposting use?

About 1.1k tokens (SKILL.md is roughly 4.5k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Crossposting?

Skills that share tags, products or a category with Crossposting: Markitdown (ImCa0/just-laws, 781 stars), Add Related Resources (pingcap/docs, 616 stars), Lecture To Md (ysyecust/lecture-to-notes, 270 stars) and Gbro Series Vocab (pyang5166/gbro-series-vocab, 162 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Crossposting?

wasp-lang (a GitHub organization) maintains it in wasp-lang/wasp, which has 18,762 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on October 7, 2026.

Source: wasp-lang/wasp on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.