{"id":"8a638282-258e-4fd5-8250-ba041f6feacf","shortId":"NAyGCR","kind":"skill","title":"noise2blog","tagline":"Turns rough notes, bullet points, voice transcripts, or tweet dumps into a polished, publication-ready blog post. Optionally enriches with Tavily research to add supporting data and credibility to claims. Use when asked to write a blog post from notes, turn rough ideas into an ar","description":"# Noise to Blog\n\nTake any rough input (bullet points, voice transcripts, tweet dumps, or short drafts) and produce a polished, publication-ready blog post. Every claim traces to the source material or Tavily-verified research.\n\n---\n\n**Critical rule:** DO NOT INVENT SPECIFICS. Every claim, metric, and example in the blog post must come from the raw input or a Tavily search result. Never fabricate data, quotes, or outcomes.\n\n---\n\n## Step 1: Setup Check\n\nConfirm required env vars are set:\n\n```bash\necho \"GEMINI_API_KEY: ${GEMINI_API_KEY:+set}\"\necho \"TAVILY_API_KEY: ${TAVILY_API_KEY:-not set, Tavily enrichment will be skipped}\"\n```\n\n**If GEMINI_API_KEY is missing:**\nStop. Tell the user: \"GEMINI_API_KEY is required. Get it at aistudio.google.com → Get API key. Add it to your .env file.\"\n\n**If TAVILY_API_KEY is missing:**\nContinue. Note that Tavily enrichment will be skipped. The blog post will be based entirely on the provided content. This is fine for personal stories, tutorials from experience, or opinion pieces.\n\n**Confirm input is present.**\nThe user must provide one of:\n- Pasted text (bullet points, rough notes, transcript, tweet dump, short draft)\n- A URL to fetch\n\nIf no input, ask: \"Share your rough notes, bullet points, or transcript. Paste them directly, or give me a URL to fetch the source.\"\n\n---\n\n## Step 2: Read and Analyze Input\n\n**If input is a URL:**\nFetch the page content using WebFetch. Extract: title, author, publish date, all body text, key statistics, numbered lists, subheadings, quotes.\n\n**If input is pasted text:**\nRead it directly. Identify the input type:\n- **Bullet points or rough notes**: fragmented ideas, incomplete sentences, stream of consciousness\n- **Voice transcript**: conversational, repetitive, filler words (um, uh, like, you know), meandering sentences\n- **Tweet thread dump**: short fragments, @mentions, hashtags, \"1/8\" numbering\n- **Short draft**: structured but thin, needs expansion and polish\n\n**QA checkpoint:** State before continuing:\n1. Input type detected\n2. Core thesis or main argument in one sentence\n3. The 3-5 strongest insights, facts, or ideas from the raw content\n4. Any claims that need external verification (benchmarks, statistics, product comparisons, research findings)\n\nIf you cannot identify a core thesis, ask: \"What's the single most important thing you want readers to take away from this?\"\n\n---\n\n## Step 3: Choose Blog Post Style\n\nFour styles. Auto-detect from content signals. User override always respected.\n\n| Style | When to use | Signals |\n|-------|-------------|---------|\n| Technical Tutorial | Step-by-step guide, how-to, code walkthrough | Numbered steps, commands, code snippets, \"how to\" in content |\n| Case Study | Before/after story, build log, lessons learned | Specific results, timelines, first-person journey |\n| Thought Leadership | Opinion, argument, counterintuitive claim | \"I think\", \"the problem with X\", contrarian position, debate framing |\n| Explainer | What is X, why it matters, how it works | Concept-first, comparison-heavy, \"most people don't know\" |\n\n**Detection logic:**\n- Content has numbered steps or commands → Technical Tutorial\n- Content has before/after, specific metrics, or narrative arc → Case Study\n- Content argues against common wisdom or makes a strong opinion claim → Thought Leadership\n- Content explains a concept, tool, or trend for people unfamiliar with it → Explainer\n\nState chosen style and reasoning. If ambiguous, pick one and note the choice.\n\n---\n\n## Step 4: Enrich with Tavily Research\n\nSkip this step silently if TAVILY_API_KEY is not set.\n\nSearch for supporting evidence for claims in the raw content that could benefit from verification or data. Good candidates:\n- Product benchmarks or performance numbers\n- Market statistics or industry trends\n- Technical comparisons (\"X is faster than Y\")\n- Any number the user mentioned from memory rather than a cited source\n\nRun one Tavily search per claim that needs verification. Limit to 3 searches maximum to avoid over-sourcing:\n\n```bash\ncurl -s -X POST \"https://api.tavily.com/search\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"api_key\": \"'\"$TAVILY_API_KEY\"'\",\n    \"query\": \"SPECIFIC_CLAIM_OR_TOPIC\",\n    \"search_depth\": \"advanced\",\n    \"max_results\": 5,\n    \"include_answer\": true\n  }'\n```\n\nKeep results with `score >= 0.65`. Extract: title, url, content snippet.\n\n**Rules for using Tavily results:**\n- Use them to support or verify claims already present in the raw input. Never introduce entirely new claims from search results.\n- Attribute sources naturally in the text: \"according to [Source]\", \"data from [X] shows\"\n- If no Tavily result confirms a claim, leave the claim unverified rather than substituting an unrelated result\n\n---\n\n## Step 5: Generate the Blog Post\n\nRead `references/blog-format.md` in full. Select the matching template from `references/output-template.md`. Internalize all rules before generating.\n\nWrite the Gemini request to a temp file to handle special characters safely:\n\n```bash\ncat > /tmp/noise2blog-request.json << 'ENDJSON'\n{\n  \"system_instruction\": {\n    \"parts\": [{\n      \"text\": \"You are a tech writer who sounds like a real person. Rules: Active voice only. Short paragraphs, 1-3 lines max, then a blank line. Use contractions naturally (don't, won't, it's, can't, you're, they're). No em dashes — use a comma or period instead. No semicolons. Every sentence needs a concrete detail: a number, a tool name, a file name, a command, a result. No filler phrases: no 'In today's rapidly evolving', no 'Let's dive in', no 'It's worth noting', no 'In conclusion', no 'I hope this was helpful'. No banned words: incredible, amazing, leveraging, synergize, game-changing, groundbreaking, revolutionary, paradigm, cutting-edge, seamless, robust, unprecedented, delve, harness, utilize, transformative, disruptive, unlock, comprehensive, actionable, crucial, pivotal. Title must not start with I, My, or We. Open with a hook paragraph that does not announce the topic. Close with something actionable. Do not invent claims, metrics, or outcomes not present in the source material.\"\n    }]\n  },\n  \"contents\": [{\n    \"parts\": [{\n      \"text\": \"RAW_CONTENT_AND_INSTRUCTIONS_HERE\"\n    }]\n  }],\n  \"generationConfig\": {\n    \"temperature\": 0.7,\n    \"maxOutputTokens\": 4096\n  }\n}\nENDJSON\n```\n\nReplace `RAW_CONTENT_AND_INSTRUCTIONS_HERE` with:\n- The raw input content\n- The blog post style and structure instructions (from the selected template)\n- Any Tavily research results gathered in Step 4\n- Word target: 800-1,800 words\n\nPost the request:\n\n```bash\ncurl -s -X POST \\\n  \"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d @/tmp/noise2blog-request.json \\\n  | python3 -c \"import sys,json; d=json.load(sys.stdin); print(d['candidates'][0]['content']['parts'][0]['text'])\"\n```\n\nAlso produce:\n- (B) A 1-2 sentence meta description for SEO preview text\n- (C) One alternative title using a different hook angle\n\n---\n\n## Step 6: Self-QA\n\nRun every check and fix violations before presenting:\n\n- [ ] Title does not start with \"I\", \"My\", or \"We\"\n- [ ] Title is specific and conversational (not \"A Comprehensive Guide to X\" or \"The Ultimate Guide to Y\")\n- [ ] Opening paragraph hooks without announcing the topic (\"In this post I will...\")\n- [ ] No em dashes in any line\n- [ ] No semicolons\n- [ ] No paragraph longer than 3 lines before a blank line\n- [ ] No banned words: incredible, amazing, leveraging, game-changing, delve, harness, unlock, groundbreaking, cutting-edge, remarkable, paradigm, revolutionize, seamless, robust, utilize, unprecedented, comprehensive, actionable, crucial, pivotal\n- [ ] No invented data: every claim traces to the raw input or a Tavily result\n- [ ] Post does not end with \"In conclusion\", \"To summarize\", or \"I hope this helped\"\n- [ ] 800-1,800 words (state the word count)\n- [ ] Logical flow: opening → problem/context → body sections → actionable close\n\nFix any violation before presenting. State the final word count.\n\n---\n\n## Step 7: Output\n\nPresent the full blog post in a code block.\n\nPresent the meta description and alternative title below the main post.\n\nAsk: \"Ready to copy this to your editor? If you're publishing to a specific platform, let me know and I can format the frontmatter.\"\n\n**On platform-specific request:**\n\nGhost:\n```yaml\n---\ntitle: \"POST_TITLE\"\ndate: YYYY-MM-DD\ntags: [tag1, tag2]\nstatus: draft\n---\n```\n\ndev.to:\n```yaml\n---\ntitle: POST_TITLE\ndescription: META_DESCRIPTION\ntags: [tag1, tag2, tag3]\npublished: false\n---\n```\n\nSubstack: Present as plain Markdown. Substack's editor imports markdown directly.\n\nHashnode:\n```yaml\n---\ntitle: POST_TITLE\nsubtitle: META_DESCRIPTION\ntags: [tag1, tag2]\n---\n```","tags":["noise2blog","opendirectory","varnan-tech","agent-skills","gtm","hermes-agent","openclaw-skills","skills","technical-seo"],"capabilities":["skill","source-varnan-tech","skill-noise2blog","topic-agent-skills","topic-gtm","topic-hermes-agent","topic-openclaw-skills","topic-skills","topic-technical-seo"],"categories":["opendirectory"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/Varnan-Tech/opendirectory/noise2blog","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add Varnan-Tech/opendirectory","source_repo":"https://github.com/Varnan-Tech/opendirectory","install_from":"skills.sh"}},"qualityScore":"0.511","qualityRationale":"deterministic score 0.51 from registry signals: · indexed on github topic:agent-skills · 123 github stars · SKILL.md body (8,788 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-02T00:55:51.121Z","embedding":null,"createdAt":"2026-04-18T22:18:33.784Z","updatedAt":"2026-05-02T00:55:51.121Z","lastSeenAt":"2026-05-02T00:55:51.121Z","tsv":"'-1':1008,1192 '-2':1050 '-3':816 '-5':372 '/search':664 '/tmp/noise2blog-request.json':792,1028 '/v1beta/models/gemini-2.0-flash:generatecontent?key=$gemini_api_key':1021 '0':1040,1043 '0.65':694 '0.7':971 '1':119,356,815,1049 '1/8':340 '2':266,360 '3':369,371,419,649,1130 '4':382,574,1004 '4096':973 '5':686,757 '6':1068 '7':1218 '800':1007,1009,1191,1193 'accord':732 'action':921,947,1160,1205 'activ':810 'add':26,173 'advanc':683 'aistudio.google.com':169 'alreadi':712 'also':1045 'altern':1060,1234 'alway':434 'amaz':899,1140 'ambigu':566 'analyz':269 'angl':1066 'announc':941,1110 'answer':688 'api':131,134,139,142,153,162,171,181,585,671,674 'api.tavily.com':663 'api.tavily.com/search':662 'application/json':669,1026 'ar':48 'arc':531 'argu':535 'argument':365,480 'ask':35,244,402,1240 'attribut':726 'author':284 'auto':427 'auto-detect':426 'avoid':653 'away':415 'b':1047 'ban':896,1137 'base':198 'bash':128,657,790,1014 'before/after':464,526 'benchmark':389,610 'benefit':602 'blank':821,1134 'block':1228 'blog':18,39,51,72,99,194,421,760,987,1223 'bodi':288,1203 'build':466 'bullet':5,56,228,249,308 'c':1030,1058 'candid':608,1039 'cannot':397 'case':462,532 'cat':791 'chang':904,1144 'charact':788 'check':121,1074 'checkpoint':352 'choic':572 'choos':420 'chosen':561 'cite':636 'claim':32,75,93,384,482,544,595,643,678,711,722,745,748,951,1167 'close':944,1206 'code':451,456,1227 'come':102 'comma':843 'command':455,521,864 'common':537 'comparison':392,507,620 'comparison-heavi':506 'comprehens':920,1096,1159 'concept':504,550 'concept-first':503 'conclus':888,1183 'concret':853 'confirm':122,216,743 'conscious':319 'content':203,279,381,430,461,516,524,534,547,599,667,698,961,965,977,985,1024,1041 'content-typ':666,1023 'continu':185,355 'contract':824 'contrarian':489 'convers':322,1093 'copi':1243 'core':361,400 'could':601 'count':1198,1216 'counterintuit':481 'credibl':30 'critic':86 'crucial':922,1161 'curl':658,1015 'cut':909,1150 'cutting-edg':908,1149 'd':670,1027,1034,1038 'dash':840,1120 'data':28,114,606,735,1165 'date':286,1275 'dd':1279 'debat':491 'delv':914,1145 'depth':682 'descript':1053,1232,1290,1292,1317 'detail':854 'detect':359,428,514 'dev.to':1285 'differ':1064 'direct':255,303,1309 'disrupt':918 'dive':879 'draft':64,236,343,1284 'dump':11,61,234,335 'echo':129,137 'edg':910,1151 'editor':1247,1306 'em':839,1119 'end':1180 'endjson':793,974 'enrich':21,147,189,575 'entir':199,720 'env':124,177 'everi':74,92,849,1073,1166 'evid':593 'evolv':875 'exampl':96 'expans':348 'experi':212 'explain':493,548,559 'extern':387 'extract':282,695 'fabric':113 'fact':375 'fals':1298 'faster':623 'fetch':240,262,276 'file':178,784,861 'filler':324,868 'final':1214 'find':394 'fine':206 'first':474,505 'first-person':473 'fix':1076,1207 'flow':1200 'format':1262 'four':424 'fragment':313,337 'frame':492 'frontmatt':1264 'full':765,1222 'game':903,1143 'game-chang':902,1142 'gather':1001 'gemini':130,133,152,161,779 'generat':758,776 'generationconfig':969 'generativelanguage.googleapis.com':1020 'generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generatecontent?key=$gemini_api_key':1019 'get':166,170 'ghost':1270 'give':257 'good':607 'groundbreak':905,1148 'guid':447,1097,1103 'h':665,1022 'handl':786 'har':915,1146 'hashnod':1310 'hashtag':339 'heavi':508 'help':894,1190 'hook':936,1065,1108 'hope':891,1188 'how-to':448 'idea':45,314,377 'identifi':304,398 'import':408,1031,1307 'includ':687 'incomplet':315 'incred':898,1139 'industri':617 'input':55,106,217,243,270,272,297,306,357,717,984,1172 'insight':374 'instead':846 'instruct':795,967,979,992 'intern':772 'introduc':719 'invent':90,950,1164 'journey':476 'json':1033 'json.load':1035 'keep':690 'key':132,135,140,143,154,163,172,182,290,586,672,675 'know':330,513,1258 'leadership':478,546 'learn':469 'leav':746 'lesson':468 'let':877,1256 'leverag':900,1141 'like':328,805 'limit':647 'line':817,822,1123,1131,1135 'list':293 'log':467 'logic':515,1199 'longer':1128 'main':364,1238 'make':540 'markdown':1303,1308 'market':614 'match':768 'materi':80,960 'matter':499 'max':684,818 'maximum':651 'maxoutputtoken':972 'meander':331 'memori':632 'mention':338,630 'meta':1052,1231,1291,1316 'metric':94,528,952 'miss':156,184 'mm':1278 'must':101,222,925 'name':859,862 'narrat':530 'natur':728,825 'need':347,386,645,851 'never':112,718 'new':721 'nois':49 'noise2blog':1 'note':4,42,186,231,248,312,570,885 'number':292,341,453,518,613,627,856 'one':224,367,568,639,1059 'open':933,1106,1201 'opinion':214,479,543 'option':20 'outcom':117,954 'output':1219 'over-sourc':654 'overrid':433 'page':278 'paradigm':907,1153 'paragraph':814,937,1107,1127 'part':796,962,1042 'past':226,253,299 'peopl':510,555 'per':642 'perform':612 'period':845 'person':208,475,808 'phrase':869 'pick':567 'piec':215 'pivot':923,1162 'plain':1302 'platform':1255,1267 'platform-specif':1266 'point':6,57,229,250,309 'polish':14,68,350 'posit':490 'post':19,40,73,100,195,422,661,761,988,1011,1018,1115,1177,1224,1239,1273,1288,1313 'present':219,713,956,1079,1211,1220,1229,1300 'preview':1056 'print':1037 'problem':486 'problem/context':1202 'produc':66,1046 'product':391,609 'provid':202,223 'public':16,70 'publication-readi':15,69 'publish':285,1251,1297 'python3':1029 'qa':351,1071 'queri':676 'quot':115,295 'rapid':874 'rather':633,750 'raw':105,380,598,716,964,976,983,1171 're':835,837,1250 'read':267,301,762 'reader':412 'readi':17,71,1241 'real':807 'reason':564 'references/blog-format.md':763 'references/output-template.md':771 'remark':1152 'repetit':323 'replac':975 'request':780,1013,1269 'requir':123,165 'research':24,85,393,578,999 'respect':435 'result':111,471,685,691,704,725,742,755,866,1000,1176 'revolution':1154 'revolutionari':906 'robust':912,1156 'rough':3,44,54,230,247,311 'rule':87,700,774,809 'run':638,1072 'safe':789 'score':693 'seamless':911,1155 'search':110,590,641,650,681,724 'section':1204 'select':766,995 'self':1070 'self-qa':1069 'semicolon':848,1125 'sentenc':316,332,368,850,1051 'seo':1055 'set':127,136,145,589 'setup':120 'share':245 'short':63,235,336,342,813 'show':738 'signal':431,440 'silent':582 'singl':406 'skill' 'skill-noise2blog' 'skip':150,192,579 'snippet':457,699 'someth':946 'sound':804 'sourc':79,264,637,656,727,734,959 'source-varnan-tech' 'special':787 'specif':91,470,527,677,1091,1254,1268 'start':927,1083 'state':353,560,1195,1212 'statist':291,390,615 'status':1283 'step':118,265,418,444,446,454,519,573,581,756,1003,1067,1217 'step-by-step':443 'stop':157 'stori':209,465 'stream':317 'strong':542 'strongest':373 'structur':344,991 'studi':463,533 'style':423,425,436,562,989 'subhead':294 'substack':1299,1304 'substitut':752 'subtitl':1315 'summar':1185 'support':27,592,708 'synerg':901 'sys':1032 'sys.stdin':1036 'system':794 'tag':1280,1293,1318 'tag1':1281,1294,1319 'tag2':1282,1295,1320 'tag3':1296 'take':52,414 'target':1006 'tavili':23,83,109,138,141,146,180,188,577,584,640,673,703,741,998,1175 'tavily-verifi':82 'tech':801 'technic':441,522,619 'tell':158 'temp':783 'temperatur':970 'templat':769,996 'text':227,289,300,731,797,963,1044,1057 'thesi':362,401 'thin':346 'thing':409 'think':484 'thought':477,545 'thread':334 'timelin':472 'titl':283,696,924,1061,1080,1089,1235,1272,1274,1287,1289,1312,1314 'today':872 'tool':551,858 'topic':680,943,1112 'topic-agent-skills' 'topic-gtm' 'topic-hermes-agent' 'topic-openclaw-skills' 'topic-skills' 'topic-technical-seo' 'trace':76,1168 'transcript':8,59,232,252,321 'transform':917 'trend':553,618 'true':689 'turn':2,43 'tutori':210,442,523 'tweet':10,60,233,333 'type':307,358,668,1025 'uh':327 'ultim':1102 'um':326 'unfamiliar':556 'unlock':919,1147 'unpreced':913,1158 'unrel':754 'unverifi':749 'url':238,260,275,697 'use':33,280,439,702,705,823,841,1062 'user':160,221,432,629 'util':916,1157 'var':125 'verif':388,604,646 'verifi':84,710 'violat':1077,1209 'voic':7,58,320,811 'walkthrough':452 'want':411 'webfetch':281 'wisdom':538 'without':1109 'won':828 'word':325,897,1005,1010,1138,1194,1197,1215 'work':502 'worth':884 'write':37,777 'writer':802 'x':488,496,621,660,737,1017,1099 'y':625,1105 'yaml':1271,1286,1311 'yyyi':1277 'yyyy-mm-dd':1276","prices":[{"id":"0046e107-e4a7-4f95-9d73-24e918760076","listingId":"8a638282-258e-4fd5-8250-ba041f6feacf","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"Varnan-Tech","category":"opendirectory","install_from":"skills.sh"},"createdAt":"2026-04-18T22:18:33.784Z"}],"sources":[{"listingId":"8a638282-258e-4fd5-8250-ba041f6feacf","source":"github","sourceId":"Varnan-Tech/opendirectory/noise2blog","sourceUrl":"https://github.com/Varnan-Tech/opendirectory/tree/main/skills/noise2blog","isPrimary":false,"firstSeenAt":"2026-04-18T22:18:33.784Z","lastSeenAt":"2026-05-02T00:55:51.121Z"}],"details":{"listingId":"8a638282-258e-4fd5-8250-ba041f6feacf","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"Varnan-Tech","slug":"noise2blog","github":{"repo":"Varnan-Tech/opendirectory","stars":123,"topics":["agent-skills","gtm","hermes-agent","openclaw-skills","skills","technical-seo"],"license":null,"html_url":"https://github.com/Varnan-Tech/opendirectory","pushed_at":"2026-04-30T18:54:05Z","description":" AI Agent Skills built for GTM, Technical Marketing, and growth automation.","skill_md_sha":"950df70dea69bf1d1f77b3d9d66843a95b4a47a2","skill_md_path":"skills/noise2blog/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/Varnan-Tech/opendirectory/tree/main/skills/noise2blog"},"layout":"multi","source":"github","category":"opendirectory","frontmatter":{"name":"noise2blog","description":"Turns rough notes, bullet points, voice transcripts, or tweet dumps into a polished, publication-ready blog post. Optionally enriches with Tavily research to add supporting data and credibility to claims. Use when asked to write a blog post from notes, turn rough ideas into an article, expand bullet points into a full post, clean up a voice transcript into a blog, or repurpose a tweet thread as an article. Trigger when a user says \"write a blog post from this\", \"turn these notes into a post\", \"expand this into an article\", \"make this publishable\", \"I have rough notes write a blog\", or \"clean up this transcript\".","compatibility":"[claude-code, gemini-cli, github-copilot]"},"skills_sh_url":"https://skills.sh/Varnan-Tech/opendirectory/noise2blog"},"updatedAt":"2026-05-02T00:55:51.121Z"}}