Agent skill

Medium Publishing

by ericrisco in ericrisco/rsc-harness

A skill your agent uses when a finished article has to land on Medium correctly — profile vs publication, cross-posting under a canonical link so your own site keeps the SEO credit, import-tool…

MITAuto-check passedMarketing & SEO

Install Medium Publishing

skills CLI
$ npx skills add ericrisco/rsc-harness --skill medium-publishing -a claude-code

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

GitHub CLI
$ gh skill install ericrisco/rsc-harness medium-publishing --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/ericrisco/rsc-harness.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/medium-publishing .claude/skills/medium-publishing && 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
medium-publishing
GitHub stars
156
Token cost
~2.5k tokens
SKILL.md length
1,168 words
Files
5 (incl. references)
Skills in repo
229
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses when a finished article has to land on Medium correctly — profile vs publication, cross-posting under a canonical link so your own site keeps the SEO credit, import-tool…

  • A finished article has to land on Medium correctly — profile vs publication
  • SKILL.md covers Reality check (2025-2026), Decision table — pick your path, Cross-post without an SEO… and When the import fails, plus 5 more sections
  • Calls curl; reaches api.medium.com; needs MEDIUM_TOKEN
  • Cross-posting under a canonical link so your own site keeps the SEO credit

What it does

Medium Publishing is an agent skill from ericrisco/rsc-harness. Use when a finished article has to land on Medium correctly — profile vs publication, cross-posting under a canonical link so your own site keeps the SEO credit, import-tool failures, the 5-tag cap, pseudo-Markdown gotchas. NOT writing or headlining the piece (that is medium-writing), NOT cadence or earnings (that is medium-strategy).

Its SKILL.md is about 2.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files, including reference files (for example `evals/README.md`, `evals/cases.yaml` and `references/cross-post-and-canonical.md`).

It sits in Marketing & SEO, covering Social publishing and cross-posting. The repository describes itself as: Your agent invents things because it has no memory, and can't touch your database because it has no arms. rsc is the meta-harness that gives it both, plus the trade to know the… The licence is MIT.

When your agent uses it

  • A finished article has to land on Medium correctly — profile vs publication
  • Cross-posting under a canonical link so your own site keeps the SEO credit
  • Import-tool failures
  • Pseudo-Markdown gotchas

Example prompts

  • “/medium-publishing”

Requirements

  • A credential in MEDIUM_TOKEN

What it can do on your machine

Read from SKILL.md and the folder at commit 92fde8f. 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

    Shell commands in SKILL.md call:

    • curl

    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:

    • api.medium.com

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

  • Credentials

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

    • MEDIUM_TOKEN

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

Context cost

Medium Publishing loads about 2.5k tokens when it runs, and up to ~4.3k if it reads all its reference files. Until then it costs about 90 tokens; SKILL.md has 1,168 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~90
When it runs · the whole SKILL.md, loaded when a task matches
~2.5k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~4.3k

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); files beside SKILL.md are not scanned.

SKILL.md

The full file from ericrisco/rsc-harness at commit 92fde8f, republished under its MIT licence (© ericrisco). 1,168 words, ~2,501 tokens.

Download SKILL.mdSave it as .claude/skills/medium-publishing/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.
name
medium-publishing
description
Use when a finished article has to land on Medium correctly — profile vs publication, cross-posting under a canonical link so your own site keeps the SEO credit, import-tool failures, the 5-tag cap, pseudo-Markdown gotchas. NOT writing or headlining the piece (that is `medium-writing`), NOT cadence or earnings (that is `medium-strategy`).
tags
medium, publishing, cross-posting, canonical-url, seo, import-tool
recommends
medium-writing, medium-strategy, seo-geo, social-publisher
origin
risco

Medium publishing

Land a finished article on Medium with correct metadata: right destination, no duplicate-content penalty, valid tags, intact formatting. Writing the article is ../medium-writing/SKILL.md; deciding when/where/how-often to publish and how it grows is ../medium-strategy/SKILL.md. This skill is only the mechanics of getting bytes onto the platform with the right metadata attached.

Reality check (2025-2026)

The Medium API is closed to new integrations. As of 2025-01-01 Medium issues no new integration tokens and accepts no new integrations; only tokens minted before that date still work. Why it matters: any plan that starts with "register a Medium API token and automate it" is dead on arrival for anyone who didn't already have one. Integration platforms confirm this — the Medium app in Make is marked legacy, and n8n's Medium credentials can no longer be newly configured.

So the default publishing path is web editor + import tool + canonical link, done through the UI. Treat the API as a legacy escape hatch (last section), not the plan — when asked "can I get a token and automate this?", the honest answer is almost always no, so say why and route to the import path below rather than promising automation.

Decision table — pick your path

Branch on where the article already lives and what you control:

SituationPathCanonical handling
Article only ever lives on MediumWrite or paste natively in the web editor, publishNone needed — Medium is the original
Article already published on your own site/blogImport tool: paste the original URLAuto-set to that URL + auto-backdated
Import tool fails (403/404/timeout)Native paste, then set canonical by handManual: Story settings -> Customize canonical link
You hold a pre-2025 API token and want automationLegacy POST /v1/users/{id}/postscanonicalUrl field in the request body
Destination is a publication you write forSubmit draft to the publicationSame as above; submission is separate from canonical

Cross-post without an SEO penalty (the core job)

When the article already lives on your own site, you must tell search engines that the origin — your page, never the Medium URL — is canonical, or Google sees two copies and may credit Medium or neither. Two mechanisms, in order of preference:

1. Import tool (preferred). Pasting the original URL into Medium's import field does three things at once:

  • imports the rendered content into a new draft,
  • sets the story's canonical link to that original URL (search engines keep crediting your site),
  • backdates the Medium post to your original publish date by reading the page's article:published_time meta tag.

Path: New story -> import icon (or medium.com/p/import) -> paste the original URL -> Import. Review the draft, then publish.

2. Manual canonical (fallback). If you drafted natively or the import failed, set it per story: More options (•••) -> Story settings -> advanced/edit -> "Customize canonical link", paste the origin URL, then publish. This is per-story; there is no global default.

text
Bad:  Open a new Medium story, paste the article body, hit Publish.
      -> Duplicate content, no canonical, wrong date. Your own page now
         competes with Medium for its own ranking.
Good: Use the import tool (canonical + backdate set automatically), or if
      you paste natively, set "Customize canonical link" to the origin URL
      BEFORE publishing.

When the import fails

The importer is an HTTP crawler hitting your URL; failures are crawl failures, not Medium bugs. Map the symptom to the cause:

SymptomLikely causeFix
400 / 404URL unreachable, redirected, or page metadata missingVerify the URL loads anonymously; ensure <link rel="canonical"> and article:published_time exist
403Bot-blocking (WAF, Cloudflare challenge, login wall)Serve a clean static copy the crawler can reach, or paste natively + set canonical manually
500 / 504Crawl timeout — heavy JS, slow pageProvide a lightweight static HTML version of the article
Imports but body is empty/garbledContent rendered client-side only (JS)Same: static HTML with the content in the initial markup

The reliable workaround for stubborn pages: publish a minimal static HTML page of the article carrying <link rel="canonical"> and <meta property="article:published_time">, import that, then you can take it down. Full recipe and the complete error -> cause -> fix matrix are in references/cross-post-and-canonical.md.

Tags & formatting at publish time

Five tags, exactly. Medium allows up to 5 tags per story; they drive topic distribution and discovery, so they are functional metadata, not decoration. Pick 5 real topics readers browse, not keyword-stuffed variants.

text
Bad:  tags: react, reactjs, react.js, react-hooks, javascript, frontend, webdev  (7, redundant)
Good: tags: react, javascript, web-development, frontend, programming           (5, distinct surfaces)

Medium is NOT a full Markdown editor. The web editor interprets a subset of Markdown shortcuts as you type, and silently ignores the rest. Know the gotchas:

  • Headings (#, ##), blockquote (>), emphasis (*/_), ordered/bulleted lists (1., *), and the --- separator work as you type.
  • No Markdown tables. Pasting a | col | col | table renders as plain text. Restructure into a list, or insert the table as an image.
  • Code blocks: type triple-backtick then content, or Cmd/Ctrl + Option + 6. Do not rely on indentation-based code.
  • Embeds: paste a bare URL on its own line (YouTube, gist, tweet) and Medium expands it. A URL inside a sentence stays a plain link.
text
Bad:  Paste a raw Markdown table and assume it renders as a table.
Good: Convert the table to a labeled list, or screenshot/export it as an
      image and insert the image. Reserve real tables for the original site.

(The legacy API's contentFormat: markdown is more permissive than the web editor — but that path is closed to new users.)

Show full SKILL.md (387 more words)Show less

Publications

Two outcomes, often confused:

  • Self-publish puts the story on your own profile immediately.
  • Submit to a publication routes the draft to that publication's editors, where it stays pending — not live — until one of them publishes it. A publication is editorially controlled, so submission is a request, not a publish action, and it only works if you are already an accepted writer there. If you're not, request access first; submitting otherwise goes nowhere.

Legacy API — only if you hold a pre-2025 token

Do not attempt to register a new token; it will be refused. This applies only to tokens minted before 2025-01-01.

bash
# 1. Resolve your user id
curl -s -H "Authorization: Bearer $MEDIUM_TOKEN" \
  https://api.medium.com/v1/me
# -> { "data": { "id": "<userId>", ... } }

# 2. Create a post with canonical + publish status
curl -s -X POST \
  -H "Authorization: Bearer $MEDIUM_TOKEN" \
  -H "Content-Type: application/json" \
  https://api.medium.com/v1/users/<userId>/posts \
  -d '{
    "title": "My title",
    "contentFormat": "markdown",
    "content": "# My title\n\nBody...",
    "canonicalUrl": "https://mysite.com/original-post",
    "tags": ["react", "javascript", "web-development"],
    "publishStatus": "draft"
  }'

publishStatus is public | draft | unlisted. For a publication, POST to /v1/publications/{publicationId}/posts; a draft there stays pending an editor. Full field reference and response shapes are in references/legacy-api.md.

Anti-patterns

Anti-patternWhy it's wrongDo instead
Paste a copy of your own article, publish with no canonicalDuplicate content; your site loses ranking creditImport tool, or set canonical to the origin before publishing
Plan an automated pipeline on a freshly registered API tokenNo new tokens since 2025-01-01; it will never authorizeUse the import tool / web editor; reserve API only for pre-2025 tokens
Cram 6+ tags or keyword-stuff the tag slotsMax is 5; redundant tags waste distribution surfacePick 5 distinct topics readers actually browse
Paste a raw Markdown table and assume it rendersThe web editor has no table supportList or image; keep the table on the origin site
Submit to a publication and assume it goes liveSubmission is pending until an editor acts; needs writer accessSelf-publish for instant, or submit only as an accepted writer
Set canonical to the Medium URLPoints credit at Medium, defeating the cross-postCanonical must point to your origin site
Native paste of a backdated piece without checking the dateManual paste does not backdate; canonical/date mismatchUse import (auto-backdate) or set the date deliberately

Post-publish verify checklist

A correctly cross-posted article passes all of these:

  • Canonical link present and pointing to the origin (your site), not the Medium URL.
  • Publish date matches the original (backdated correctly if cross-posted).
  • 5 tags or fewer, all distinct real topics.
  • Code blocks render as code; embeds expanded; no broken Markdown tables.
  • Correct destination — your profile, or the intended publication (and it actually went live, not stuck pending).

© ericrisco, 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 (references) in skills/medium-publishing of ericrisco/rsc-harness.

  • SKILL.md
  • evals/README.md
  • evals/cases.yaml
  • references/cross-post-and-canonical.md
  • references/legacy-api.md

Open the folder on GitHubat commit 92fde8f

Compare with similar skills

Medium Publishing 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.

Medium Publishing compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Medium Publishing this skillericrisco/rsc-harness156—~2.5kAutomated safety check: PassMIT
WeChat Official Account PosterJimLiu/baoyu-skills26k2 repos~3.6kAutomated safety check: WarnMIT
Canghe Post To Wechatfreestylefly/canghe-skills4613 repos~3.4kAutomated safety check: NotesNone
Canghe Post To Xfreestylefly/canghe-skills4614 repos~1.7kAutomated safety check: WarnNone
Ops SocialsLifecycle-Innovations-Limited/claude-ops540—~3.6kAutomated safety check: NotesMIT
Post to WeiboJimLiu/baoyu-skills26k1 repos~1.4kAutomated safety check: WarnMIT

Similar skills

  • Publishes articles and image-text posts to a WeChat Official Account through the API or Chrome CDP, converting markdown to WeChat-ready HTML with link citations.

    26k GitHub starsUsed in 2 repos~3.6k tokens
    Marketing & SEOAuto-check: warnings
  • Canghe Post To Wechat

    freestylefly/canghe-skills

    Posts content to WeChat Official Account (微信公众号) via API or Chrome CDP.

    461 GitHub starsUsed in 3 repos~3.4k tokens
    Marketing & SEOAuto-check: notes
  • Canghe Post To X

    freestylefly/canghe-skills

    Posts content and articles to X (Twitter). An agent skill from freestylefly/canghe-skills.

    461 GitHub starsUsed in 4 repos~1.7k tokens
    Marketing & SEOAuto-check: warnings
  • Ops Socials

    Lifecycle-Innovations-Limited/claude-ops

    OPS on-demand: This skill should be used when the user asks to "tweet", "post to linkedin", or…

    540 GitHub stars~3.6k tokensUpdated 3 days ago
    Marketing & SEOAuto-check: notes
  • Post to Weibo

    JimLiu/baoyu-skills

    Publish text, image and video posts or long-form Markdown headline articles to Weibo through a real Chrome session, with the final review left to you.

    26k GitHub starsUsed in 1 repo~1.4k tokens
    Marketing & SEOAuto-check: warnings
  • Xiaohongshu Auto Posting

    browser-act/skills

    Automates the complete Xiaohongshu (XHS / Little Red Book) content operation workflow: pain-point topic collection → style case collection → topic selection → content writing → publishing →…

    6.1k GitHub stars~3.9k tokensUpdated 1 mo ago
    Marketing & SEOAuto-check passed

More from ericrisco/rsc-harness

All 229 skills in this repo
  • Ab Testing

    ericrisco/rsc-harness

    A skill your agent uses when designing or analyzing a controlled experiment — falsifiable hypothesis, sample size from an MDE, reading significance/CI/power, CUPED, or rescuing tests that won't go…

    156 GitHub stars~2.4k tokensUpdated yesterday
    Auto-check passed
  • Accessibility

    ericrisco/rsc-harness

    A skill your agent uses when making a web UI conform to WCAG 2.2 Level AA — axe-core or Lighthouse a11y violations, keyboard operability, focus management, ARIA roles/names/live regions, contrast…

    156 GitHub stars~3.4k tokensUpdated yesterday
    Auto-check passed
  • Ads

    ericrisco/rsc-harness

    A skill your agent uses when running or fixing paid acquisition on Google or Meta — campaign structure (Performance Max, Demand Gen, Search, Advantage+), platform-fit creative, budget/scaling rules…

    156 GitHub stars~2.2k tokensUpdated yesterday
    Auto-check passed
  • Agent Eval

    ericrisco/rsc-harness

    A skill your agent uses when measuring whether an LLM or agent system actually got better and gating merges on it: golden sets, fixing an inflated LLM-as-judge, scoring RAG (faithfulness, contextual…

    156 GitHub stars~3.2k tokensUpdated yesterday
    Auto-check passed
  • AI Media

    ericrisco/rsc-harness

    A skill your agent uses when a creative goal must become a finished media file: pick and order generative-media models per modality — AI voiceover, image-to-video clips, score — then glue them with…

    156 GitHub stars~3.3k tokensUpdated yesterday
    Auto-check passed
  • Analytics

    ericrisco/rsc-harness

    A skill your agent uses when instrumenting product or web analytics — GA4/PostHog SDK wiring, event taxonomy, funnels, double-counted events, consent gating, PII scrubbing.

    156 GitHub stars~2.8k tokensUpdated yesterday
    Auto-check passed

Categories

Questions about Medium Publishing

What does Medium Publishing do?

A skill your agent uses when a finished article has to land on Medium correctly — profile vs publication, cross-posting under a canonical link so your own site keeps the SEO credit, import-tool…. Medium Publishing is an agent skill from ericrisco/rsc-harness. Use when a finished article has to land on Medium correctly — profile vs publication, cross-posting under a canonical link so your own site keeps the SEO credit, import-tool failures, the 5-tag cap, pseudo-Markdown gotchas.

When should I use Medium Publishing?

Medium Publishing fits situations like: A finished article has to land on Medium correctly — profile vs publication; cross-posting under a canonical link so your own site keeps the SEO credit; import-tool failures; pseudo-Markdown gotchas.

How do I install Medium Publishing in Claude Code?

Run `npx skills add ericrisco/rsc-harness --skill medium-publishing -a claude-code`. Or copy the skill folder (skills/medium-publishing in ericrisco/rsc-harness) into .claude/skills/medium-publishing in your project. Claude Code loads it when a task matches its description.

How do I install Medium Publishing in Codex?

Run `npx skills add ericrisco/rsc-harness --skill medium-publishing -a codex`. Or copy the skill folder (skills/medium-publishing in ericrisco/rsc-harness) into .agents/skills/medium-publishing in your project. Codex loads it when a task matches its description.

Can I use Medium Publishing 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 ericrisco/rsc-harness --skill medium-publishing -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/medium-publishing, .gemini/skills/medium-publishing, .github/skills/medium-publishing and .opencode/skills/medium-publishing in your project.

What does Medium Publishing need to run?

Going by SKILL.md and its folder, Medium Publishing needs the command-line tools its instructions call (curl) and credentials named MEDIUM_TOKEN. Our summary lists: A credential in MEDIUM_TOKEN.

Does Medium Publishing access the network?

SKILL.md names 1 domain. In commands or code: api.medium.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is Medium Publishing 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. Review the folder before installing.

What licence does Medium Publishing use?

Medium Publishing 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 Medium Publishing use?

About 2.5k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.8k tokens, read only when the agent opens those files.

What are the alternatives to Medium Publishing?

Skills that share tags, products or a category with Medium Publishing: WeChat Official Account Poster (JimLiu/baoyu-skills, 26k stars), Canghe Post To Wechat (freestylefly/canghe-skills, 461 stars), Canghe Post To X (freestylefly/canghe-skills, 461 stars) and Ops Socials (Lifecycle-Innovations-Limited/claude-ops, 540 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Medium Publishing?

ericrisco (a GitHub user) maintains it in ericrisco/rsc-harness, which has 156 GitHub stars. The repository holds 229 skills in this directory. The repository was last updated on October 6, 2026.

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