{"id":"76c8dc73-9675-46fa-a2cc-0692f0fd32a0","shortId":"Kcp2rg","kind":"skill","title":"Technical Blog Post Writer","tagline":"Writes engaging, accurate technical blog posts targeted at developer audiences.","description":"# Technical Blog Post Writer\n\n## What this skill does\n\nThis skill directs the agent to write a complete technical blog post on a given topic — from a strong hook through to a practical conclusion — targeting a developer audience. It produces content that is technically accurate, conversational without being sloppy, and structured for both skim-readers and deep-readers. It also outputs an SEO title and meta description.\n\nUse this when you need to publish a tutorial, an opinion piece, a launch announcement, or a \"how we solved X\" post on your engineering blog.\n\n## How to use\n\n### Claude Code / Antigravity\n\nCopy this file to `.agents/skills/tech-blog-writer/SKILL.md` in your project root.\n\nThen ask:\n- *\"Write a blog post about how we migrated from REST to GraphQL using the Technical Blog Post Writer skill.\"*\n- *\"Use the Technical Blog Post Writer skill to write a tutorial on using React Query for server state management.\"*\n\nProvide:\n- The topic or title idea\n- The target audience (junior devs, senior backend engineers, general developer audience, etc.)\n- The tone (opinionated/personal vs neutral/tutorial-style)\n- Any key points, code snippets, or conclusions you want included\n- Target length if you have a preference (default: 800-1200 words)\n\n### Cursor / Codex\n\nPaste the instructions below into your session along with your topic brief.\n\n## The Prompt / Instructions for the Agent\n\nWhen asked to write a technical blog post, follow these steps:\n\n### 1. Plan before writing\n\nBefore drafting, identify:\n- **The problem** the post addresses (developers reading this have this pain point)\n- **The insight** or solution the post delivers\n- **The reader's takeaway** — what can they do differently after reading?\n- **The assumed skill level** — calibrate vocabulary and explanation depth accordingly\n\n### 2. Structure the post\n\nEvery post must follow this structure:\n\n**Hook (first 2-3 sentences)**\nOpen with a relatable scenario, a surprising stat, or a bold claim. Do NOT open with \"In this post, I will...\". Do NOT open with a definition (\"Docker is a containerization platform...\"). Make the reader feel the problem before you name it.\n\n**The Problem (1-2 paragraphs)**\nDescribe the situation that led to needing this solution. Be specific. Use concrete numbers and scenarios, not vague abstractions.\n\n**The Solution / Tutorial body**\nThe core content. For tutorials:\n- Use numbered steps for sequential processes\n- Use H2 headers for major sections, H3 for sub-sections\n- Include code blocks with the correct language tag (```typescript, ```bash, etc.)\n- Explain *why* before *how* — readers skip the \"why\" but they remember it\n- Keep code examples minimal but complete enough to run\n\nFor opinion/analysis posts:\n- Make a clear claim\n- Support it with evidence (benchmarks, examples, experience)\n- Acknowledge counterarguments briefly\n\n**Conclusion (1 paragraph)**\nSummarize the key takeaway in one sentence. Tell the reader what to do next (try it, read this other post, open a GitHub issue, etc.).\n\n### 3. Tone rules\n\n- Write how a senior developer would talk to a junior colleague over Slack — friendly, direct, no corporate buzzwords\n- Use \"you\" to address the reader\n- Use contractions naturally (\"you'll\", \"it's\", \"don't\")\n- Avoid: \"leverage\", \"utilize\", \"seamlessly\", \"robust solution\", \"in conclusion, it is evident that\"\n- Short paragraphs (3-4 sentences max for body text)\n- Use bullet points for lists of 3+ items, not inline commas\n\n### 4. Code examples\n\n- Show real, runnable code (not pseudocode unless the concept genuinely requires it)\n- Include comments in code blocks to explain non-obvious lines\n- When comparing before/after, show both blocks clearly labeled\n- Do not show code that would require the reader to fill in 10 imports to run\n\n### 5. Output format\n\n```markdown\n---\ntitle: [SEO-optimized title, 50-65 characters]\nmeta_description: [150-160 character description including the primary keyword]\n---\n\n# [Post Title]\n\n[Post body in markdown]\n```\n\nAfter the post, add a short \"Editorial notes\" block (not part of the published post):\n```\n## Editorial Notes\n- Primary keyword: [keyword]\n- Suggested tags: [tag1, tag2, tag3]\n- Estimated reading time: [X min]\n- Suggested internal links: [topics to link to]\n```\n\n## Example\n\n**Input to Agent:**\n> \"Use the Technical Blog Post Writer skill to write a post about using environment variables correctly in Node.js. Target: junior to mid-level Node.js developers. Tone: tutorial-style. Key points: dotenv, never commit .env, process.env validation with zod. ~800 words.\"\n\n**Output from Agent:**\n\n```markdown\n---\ntitle: How to Manage Environment Variables in Node.js the Right Way\nmeta_description: Learn how to use dotenv, validate env vars with Zod, and avoid the mistakes that expose secrets in Node.js projects.\n---\n\n# How to Manage Environment Variables in Node.js the Right Way\n\nYou've seen it in a GitHub commit history: `remove API key oops`. Someone hardcoded a secret,\npushed it, and then panicked. It's more common than anyone admits.\n\nEnvironment variables are how you keep secrets out of your codebase — but there's a right way\nand a wrong way to use them. Here's how to get it right from the start.\n\n## The basics: dotenv\n\n...\n```\n\n## Notes\n\n- If you have a specific code example you want included, paste it when making the request. The agent will incorporate it naturally rather than inventing a different example.\n- The skill writes a first draft. Technical accuracy of any code examples should be verified by the author before publishing.\n- For posts involving benchmarks or specific version numbers, provide those numbers explicitly — the agent should not invent them.\n- If the post is about a proprietary internal system, give the agent enough context about what the system does so it can write accurately without access to your codebase.","tags":["tech","blog","writer","openagentskills","notysoty","agent-skills","claude","claude-code","claude-skills","cline","cursor","llm"],"capabilities":["skill","source-notysoty","skill-tech-blog-writer","topic-agent-skills","topic-claude","topic-claude-code","topic-claude-skills","topic-cline","topic-cursor","topic-llm","topic-llm-skills","topic-skills"],"categories":["openagentskills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/Notysoty/openagentskills/tech-blog-writer","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add Notysoty/openagentskills","source_repo":"https://github.com/Notysoty/openagentskills","install_from":"skills.sh"}},"qualityScore":"0.454","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 8 github stars · SKILL.md body (5,841 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:13:25.024Z","embedding":null,"createdAt":"2026-05-18T13:20:47.138Z","updatedAt":"2026-05-18T19:13:25.024Z","lastSeenAt":"2026-05-18T19:13:25.024Z","tsv":"'-1200':206 '-160':603 '-2':346 '-3':299 '-4':521 '-65':598 '1':239,345,443 '10':584 '150':602 '2':286,298 '3':470,520,533 '4':538 '5':588 '50':597 '800':205,697 'abstract':366 'access':904 'accord':285 'accur':7,58,902 'accuraci':848 'acknowledg':439 'add':619 'address':250,494 'admit':774 'agent':27,227,656,701,830,874,890 'agents/skills/tech-blog-writer/skill.md':119 'along':217 'also':75 'announc':97 'antigrav':114 'anyon':773 'api':756 'ask':125,229 'assum':277 'audienc':14,51,172,180 'author':858 'avoid':506,727 'backend':176 'bash':402 'basic':810 'before/after':566 'benchmark':436,864 'block':395,557,569,624 'blog':2,9,16,33,108,128,141,148,234,660 'bodi':370,525,613 'bold':311 'brief':221 'briefli':441 'bullet':528 'buzzword':490 'calibr':280 'charact':599,604 'claim':312,431 'claud':112 'clear':430,570 'code':113,190,394,417,539,544,556,575,818,851 'codebas':785,907 'codex':209 'colleagu':483 'comma':537 'comment':554 'commit':691,753 'common':771 'compar':565 'complet':31,421 'concept':549 'conclus':47,193,442,513 'concret':360 'container':331 'content':54,373 'context':892 'contract':498 'convers':59 'copi':115 'core':372 'corpor':489 'correct':398,672 'counterargu':440 'cursor':208 'deep':72 'deep-read':71 'default':204 'definit':327 'deliv':264 'depth':284 'describ':348 'descript':82,601,605,715 'dev':174 'develop':13,50,179,251,477,682 'differ':273,839 'direct':25,487 'docker':328 'dotenv':689,720,811 'draft':244,846 'editori':622,631 'engag':6 'engin':107,177 'enough':422,891 'env':692,722 'environ':670,707,739,775 'estim':641 'etc':181,403,469 'everi':290 'evid':435,516 'exampl':418,437,540,653,819,840,852 'experi':438 'explain':404,559 'explan':283 'explicit':872 'expos':731 'feel':336 'file':117 'fill':582 'first':297,845 'follow':236,293 'format':590 'friend':486 'general':178 'genuin':550 'get':803 'github':467,752 'give':888 'given':37 'graphql':137 'h2':383 'h3':388 'hardcod':760 'header':384 'histori':754 'hook':42,296 'idea':169 'identifi':245 'import':585 'includ':196,393,553,606,822 'incorpor':832 'inlin':536 'input':654 'insight':259 'instruct':212,224 'intern':647,886 'invent':837,877 'involv':863 'issu':468 'item':534 'junior':173,482,676 'keep':416,780 'key':188,447,687,757 'keyword':609,634,635 'label':571 'languag':399 'launch':96 'learn':716 'led':352 'length':198 'level':279,680 'leverag':507 'line':563 'link':648,651 'list':531 'll':501 'major':386 'make':333,428,826 'manag':163,706,738 'markdown':591,615,702 'max':523 'meta':81,600,714 'mid':679 'mid-level':678 'migrat':133 'min':645 'minim':419 'mistak':729 'must':292 'name':341 'natur':499,834 'need':87,354 'neutral/tutorial-style':186 'never':690 'next':458 'node.js':674,681,710,734,742 'non':561 'non-obvi':560 'note':623,632,812 'number':361,377,868,871 'obvious':562 'one':450 'oop':758 'open':301,315,324,465 'opinion':93 'opinion/analysis':426 'opinionated/personal':184 'optim':595 'output':76,589,699 'pain':256 'panick':767 'paragraph':347,444,519 'part':626 'past':210,823 'piec':94 'plan':240 'platform':332 'point':189,257,529,688 'post':3,10,17,34,104,129,142,149,235,249,263,289,291,319,427,464,610,612,618,630,661,667,862,881 'practic':46 'prefer':203 'primari':608,633 'problem':247,338,344 'process':381 'process.env':693 'produc':53 'project':122,735 'prompt':223 'proprietari':885 'provid':164,869 'pseudocod':546 'publish':89,629,860 'push':763 'queri':159 'rather':835 'react':158 'read':252,275,461,642 'reader':69,73,266,335,408,454,496,580 'real':542 'relat':304 'rememb':414 'remov':755 'request':828 'requir':551,578 'rest':135 'right':712,744,790,805 'robust':510 'root':123 'rule':472 'run':424,587 'runnabl':543 'scenario':305,363 'seamless':509 'secret':732,762,781 'section':387,392 'seen':748 'senior':175,476 'sentenc':300,451,522 'seo':78,594 'seo-optim':593 'sequenti':380 'server':161 'session':216 'short':518,621 'show':541,567,574 'situat':350 'skill':21,24,144,151,278,663,842 'skill-tech-blog-writer' 'skim':68 'skim-read':67 'skip':409 'slack':485 'sloppi':62 'snippet':191 'solut':261,356,368,511 'solv':102 'someon':759 'source-notysoty' 'specif':358,817,866 'start':808 'stat':308 'state':162 'step':238,378 'strong':41 'structur':64,287,295 'style':686 'sub':391 'sub-sect':390 'suggest':636,646 'summar':445 'support':432 'surpris':307 'system':887,896 'tag':400,637 'tag1':638 'tag2':639 'tag3':640 'takeaway':268,448 'talk':479 'target':11,48,171,197,675 'technic':1,8,15,32,57,140,147,233,659,847 'tell':452 'text':526 'time':643 'titl':79,168,592,596,611,703 'tone':183,471,683 'topic':38,166,220,649 'topic-agent-skills' 'topic-claude' 'topic-claude-code' 'topic-claude-skills' 'topic-cline' 'topic-cursor' 'topic-llm' 'topic-llm-skills' 'topic-skills' 'tri':459 'tutori':91,155,369,375,685 'tutorial-styl':684 'typescript':401 'unless':547 'use':83,111,138,145,157,359,376,382,491,497,527,657,669,719,797 'util':508 'vagu':365 'valid':694,721 'var':723 'variabl':671,708,740,776 've':747 'verifi':855 'version':867 'vocabulari':281 'vs':185 'want':195,821 'way':713,745,791,795 'without':60,903 'word':207,698 'would':478,577 'write':5,29,126,153,231,242,473,665,843,901 'writer':4,18,143,150,662 'wrong':794 'x':103,644 'zod':696,725","prices":[{"id":"8f40ed8c-b633-4bf2-9add-806614b440dd","listingId":"76c8dc73-9675-46fa-a2cc-0692f0fd32a0","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"Notysoty","category":"openagentskills","install_from":"skills.sh"},"createdAt":"2026-05-18T13:20:47.138Z"}],"sources":[{"listingId":"76c8dc73-9675-46fa-a2cc-0692f0fd32a0","source":"github","sourceId":"Notysoty/openagentskills/tech-blog-writer","sourceUrl":"https://github.com/Notysoty/openagentskills/tree/main/skills/tech-blog-writer","isPrimary":false,"firstSeenAt":"2026-05-18T13:20:47.138Z","lastSeenAt":"2026-05-18T19:13:25.024Z"}],"details":{"listingId":"76c8dc73-9675-46fa-a2cc-0692f0fd32a0","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"Notysoty","slug":"tech-blog-writer","github":{"repo":"Notysoty/openagentskills","stars":8,"topics":["agent-skills","claude","claude-code","claude-skills","cline","cursor","llm","llm-skills","skills"],"license":"mit","html_url":"https://github.com/Notysoty/openagentskills","pushed_at":"2026-03-28T06:50:19Z","description":"A  community-driven library of reusable AI agent skills for Claude Code, Cursor, Codex, Cline, and more.","skill_md_sha":"7113401e3bb814d65e00eaec2c5f14c85bf86b85","skill_md_path":"skills/tech-blog-writer/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/Notysoty/openagentskills/tree/main/skills/tech-blog-writer"},"layout":"multi","source":"github","category":"openagentskills","frontmatter":{"name":"Technical Blog Post Writer","description":"Writes engaging, accurate technical blog posts targeted at developer audiences."},"skills_sh_url":"https://skills.sh/Notysoty/openagentskills/tech-blog-writer"},"updatedAt":"2026-05-18T19:13:25.024Z"}}