{"slug": "i-built-a-claude-code-skill-to-handle-the-absolute-nightmare-of", "title": "I built a Claude Code skill to handle the absolute nightmare of", "summary": "A developer built a Claude Code skill called `publishing-kit` to automate multi-platform article publishing, using Python scripts for artifact generation, cover design, fact-checking, pre-flight validation, and API-driven deployment. The workflow transforms a single Markdown file into formats for dev.to, AWS Builder Center, Medium, and LinkedIn, with checksum verification and data tracing to ensure accuracy.", "body_md": "# I built a Claude Code skill to handle the absolute nightmare of\n\nI got tired of managing four different versions of the same article, so I built a specialized AI workflow. I packaged the entire publishing lifecycle into a [Claude Code](/en/tags/claude%20code/) skill called `publishing-kit`\n\n. Instead of manually tweaking files, you just write one clean Markdown file and tell [Claude](/en/tags/claude/) to handle the rest.\n\n## The technical architecture of the workflow\n\nThe core idea is to separate the \"intelligence\" from the \"execution.\" I use Claude Code to manage the high-level logic and decision-making, while a suite of Python scripts handles the heavy lifting that an LLM shouldn't do manually (like pixel-perfect image resizing or byte-for-byte URL verification).\n\n**Artifact Generation:** The skill uses`make-builder.py`\n\n,`make-medium.py`\n\n, and`make-linkedin.py`\n\nto transform your source Markdown into platform-specific formats. For Medium, it actually renders Markdown tables into PNG images because the Medium editor is notorious for breaking table layouts.**Automated Cover Design:** Instead of opening Photoshop,`make-cover.py`\n\ngenerates the necessary assets. It renders the diagrams at every geometry the destinations demand and uses a hash-based naming convention to prevent cache issues.**Fact-Checking via Data Tracing:** This is my favorite part. The`check-facts.py`\n\nscript extracts every number, price, and version mentioned in your prose and compares them against your evidence files. It doesn't \"know\" if a fact is true, but it flags anything you've written from memory that doesn't appear in your source data.**The Pre-flight Check:** Before anything goes live,`preflight.py`\n\nruns a suite of tests. It checks if the cover matches the current git HEAD, verifies geometry, ensures no hard-wrapped paragraphs exist, and performs a byte-for-byte comparison of published URLs against your local files.**API-Driven Deployment:** For platforms like dev.to, the skill uses`publish-devto.py`\n\nto push the payload (including tags and cover) directly via API. For platforms without an API (like Medium), the skill manages the browser interaction through a checksum-verified paste method to ensure the content actually landed correctly.\n\n## The Prompt Engineering behind the skill\n\nTo make this work, the Claude Code skill needs a very specific set of instructions. It needs to understand that \"publishing\" isn't just a text task—it's a deployment pipeline. Here is the core logic I used to define how Claude should interact with these tools:\n\n```\nYou are an expert Technical Publishing Agent. Your goal is to take a single source Markdown file and deploy it across multiple platforms (dev.to, AWS Builder Center, Medium, and LinkedIn) using the publishing-kit toolset.\n\nFollow this strict deployment pipeline:\n\n1. ANALYZE: Read the source markdown and identify the technical claims (versions, prices, metrics).\n2. VERIFY: Run `python check-facts.py` to ensure all extracted numbers match the provided evidence files. Fix any discrepancies in the source before proceeding.\n3. BUILD: Execute the build scripts to generate platform-specific artifacts:\n   - dev.to (standard markdown)\n   - AWS Builder Center (emoji-stripped, disclaimer-appended)\n   - Medium (HTML with tables converted to PNGs)\n   - LinkedIn (short-form announcement post)\n4. ASSET CHECK: Run `python make-cover.py --flow --sizes devto,builder` to generate compliant cover images.\n5. PRE-FLIGHT: Run `python preflight.py --live` to validate all assets, geometry, and URL integrity.\n6. DEPLOY: \n   - Use `publish-devto.py --create --org-slug [slug]` for dev.to.\n   - For Medium and AWS, initiate the browser-based workflow using the provided checksum verification.\n   - For LinkedIn, prepare the draft for manual review.\n\nIf any step in the pre-flight check fails, do not attempt to publish. Report the specific error and wait for my instruction to fix the source file.\n```\n\n## Why this matters for your AI workflow\n\nThe real value here isn't just automation; it's the enforcement of standards. When you treat publishing as a CI/CD pipeline for content, you stop making \"human\" mistakes like forgetting to update a version number or uploading a cover image that gets cropped awkwardly by a platform's feed card.\n\nBy integrating these scripts into an LLM agent like Claude Code, you move from \"writing an article\" to \"managing a content deployment.\" It’s a much more robust way to handle technical communication.\n\n[Next Stop chasing prompts and start building deterministic systems →](/en/threads/8484/)\n\n## All Replies （0）\n\nNo replies yet — be the first!", "url": "https://wpnews.pro/news/i-built-a-claude-code-skill-to-handle-the-absolute-nightmare-of", "canonical_source": "https://promptcube3.com/en/threads/8485/", "published_at": "2026-09-01 16:50:23+00:00", "updated_at": "2026-09-01 16:55:04.079296+00:00", "lang": "en", "topics": ["ai-tools", "developer-tools", "ai-agents"], "entities": ["Claude Code", "Claude", "dev.to", "AWS Builder Center", "Medium", "LinkedIn"], "alternates": {"html": "https://wpnews.pro/news/i-built-a-claude-code-skill-to-handle-the-absolute-nightmare-of", "markdown": "https://wpnews.pro/news/i-built-a-claude-code-skill-to-handle-the-absolute-nightmare-of.md", "text": "https://wpnews.pro/news/i-built-a-claude-code-skill-to-handle-the-absolute-nightmare-of.txt", "jsonld": "https://wpnews.pro/news/i-built-a-claude-code-skill-to-handle-the-absolute-nightmare-of.jsonld"}}