skills/dev-to/SKILL.md
Post and manage articles on dev.to (Forem) via the official API. Create drafts from markdown files, publish or unpublish, list and update existing posts. Use when user wants to publish a dev.to post, draft a dev.to article, fetch their dev.to profile, or sync a markdown file to dev.to.
npx skillsauth add RonanCodes/ronan-skills dev-toInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Post and manage articles on dev.to via the Forem REST API. Stable v1, single API key, no OAuth dance. Sibling to ro:linkedin for cross-posting.
/ro:dev-to me # smoke-test auth, print profile
/ro:dev-to list # list all my articles
/ro:dev-to list drafts # list unpublished only
/ro:dev-to list published # list published only
/ro:dev-to draft post.md # POST as draft
/ro:dev-to draft post.md --publish # POST and publish in one shot
/ro:dev-to draft post.md --open # POST as draft, then open in browser
/ro:dev-to publish <id> # flip an existing draft to published
/ro:dev-to update <id> post.md # edit an existing article
/ro:dev-to get <id> # fetch one article (markdown)
/ro:dev-to open <id> # open the article in the browser
Standard dev.to frontmatter — same shape as the dev.to web editor accepts:
---
title: "Connections Helper: a daily NYT puzzle solver"
published: false
description: "What I built and why it took two weekends, not two hours"
tags: ai, claude, sideproject, javascript
canonical_url: https://ronanconnolly.dev/posts/connections-helper
cover_image: https://ronanconnolly.dev/og/connections-helper.png
series: "Building with Claude Code"
---
# Body markdown here
Forem extracts the frontmatter server-side, so the file is portable: same source works in the dev.to web editor, the API, or as a markdown file in your own site.
Tag rules — max 4. Lowercase. No hyphens (webdev not web-dev).
canonical_url — keep your own site as the SEO source of truth and republish here without duplicate-content penalty.
cover_image — must be a hosted URL. Forem does not accept uploads via API.
| Arg | Script |
|-----|--------|
| me | scripts/me.sh |
| list [filter] | scripts/list.sh |
| get <id> | scripts/get.sh |
| draft <file> [--publish] [--open] | scripts/draft.sh |
| publish <id> | scripts/publish.sh |
| update <id> <file> | scripts/update.sh |
| open <id> | scripts/open.sh |
Pass all trailing args through verbatim.
ronan-skills).~/.claude/.env under a # --- DEV Community / dev.to --- header:
DEVTO_API_KEY=...
chmod 600 ~/.claude/.env./ro:dev-to me. Should print your username + id + bio.update <id> with frontmatter published: false to unpublish.organization_id in the article body. Not wired by default; ask to extend.draft and publish print the article id and URL on success. Use --open to auto-open in the browser. Pair with /ro:linkedin post to cross-post the same source markdown to LinkedIn (the LinkedIn skill takes plain text, so trim the dev.to frontmatter and headers first).
ingest-devto (in llm-wiki) — the inverse: pulls a dev.to article INTO a wiki vault.ro:write-copy — load before drafting any post body. Required for /ro: voice.ro:linkedin — sibling for LinkedIn posts. Cross-post pattern: write once, publish to dev.to and LinkedIn from the same source.reference.md — full API reference, error codes, frontmatter spec, pagination.testing
--- name: linear-pipeline description: The Fable orchestrator for a single dispatched Linear ticket. Holds almost no context itself; it receives `--issue <ID> --detached`, decides the stage sequence, and fans out a sub-agent per stage, passing forward only each stage's artifact (never re-derived, never inlined into its own context). Step zero, before any planning or stage routing, is a boundary triage against `canon/security-boundary.md` (#199): a match tags Ronan Connolly and stops the run, no
development
--- name: in-your-face description: Capture a chat-only answer into a durable artifact (markdown + HTML, PDF when cheap) and launch it automatically so the user cannot miss it. Use when user says "in your face", "don't let me lose this", "save that answer", "make that durable", or right after answering a substantive side question (a recipe, comparison, how-to, or generated prompt) that would otherwise die with the context. category: workflow argument-hint: [--no-open] [--vault <short>] [hint of
tools
One-shot headless OpenAI Codex CLI calls for background/admin AI tasks — summaries, classification, extraction, admin glue. The default engine for anything that runs AI constantly in the background (daemon-driven, per-event), because it bills the flat ChatGPT subscription instead of Claude usage or per-token API spend, and it keeps working while Claude is rate-limited. NEVER for coding — coding stays Claude. Use when a skill or daemon needs a cheap always-on AI call, when the user says "use codex", "ask codex", "codex as backup", or when building a background summarizer/classifier into a listener or loop. Reads auth from ~/.codex/auth.json (ChatGPT account, no API key).
research
Turn a warranty rejection, repair quote, or RMA email into a cited decision brief — legal read (NL/EU consumer law), is the part user-serviceable, live part and new-unit prices, repair-vs-DIY-vs-new economics, before-you-send-it checklist, deadlines. Use when the user pastes or screenshots a repair quote, warranty rejection, "not covered" email, onderzoekskosten fee, or asks "should I repair or replace this".