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.development
--- name: worktree description: Coordinate multiple agents on one repo via a worktree-lock pool, so two agents never clobber each other's working tree. Acquire the first free slot (main, then beta/gamma… worktrees, created on demand), work there on your own branch, release when you've pushed. Use before modifying any repo that might be in use by another agent (factory, dataforce, etc.), or whenever you're told a repo is being worked on. Backed by `ro worktree`. category: development argument-hin
testing
--- name: ship description: Ship a feature branch the local-CI-first way — run the full local gate, push, open a PR, squash-merge, then deploy, without waiting on GitHub Actions. Use when a branch is ready for main and you want it merged and deployed now. Reads CI policy from `ro ci` (default skips remote CI because GitHub Actions billing keeps hitting limits). Sibling to /ro:gh-ship (waits on GitHub checks) and /ro:cf-ship (the deploy half). Triggers on "ship it", "ship this", "merge and deploy
testing
--- name: setup-logging description: Set up (or audit) the observability stack in a TanStack Start + Cloudflare Workers app so it is "diagnosable by default" — structured logging (logtape) with a request context carrying trace_id + userId + tenant/orgId, a trace_id propagated FE→BE→logs→Sentry→PostHog, Cloudflare Workers observability enabled, and Sentry + PostHog wired. Two modes: `setup` (wire it into an app) and `audit` (check an existing app + report gaps). Use when scaffolding a new app, wh
development
Manage credentials INSIDE the active ~/.claude/.env file — read which token/account to use for a given app (Simplicity vs Dataforce vs Ronan-personal), add or update a secret WITHOUT it passing through the chat (an interactive Terminal window prompts for it), and track secrets that were exposed in a transcript so they get rotated. Sibling to /ro:context (which switches WHICH env file is active). Use when the user wants to add an API key/token/secret, asks "which credential do I use for X", needs the env organized/labelled, or a secret was pasted into the chat and should be rotated.