[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6MJNKGA9SRVQXNK3FDMVM35":3,"skill-same:01M6MJNKGA9SRVQXNK3FDMVM35":137},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":28,"publishedAt":49,"linkOnly":50,"markdownContent":51,"markdownBody":52,"frontMatter":53,"refName":55,"commitSha":56,"skillDirectory":57,"forksCount":58,"repositoryHtmlUrl":59,"repositoryHomepageUrl":60,"ownerHtmlUrl":61,"ownerBlogUrl":62,"ownerDescription":63,"updatedAt":64,"install":65,"resources":78},"01M6MJNKGA9SRVQXNK3FDMVM35","distribute",null,"Turn a published long-form piece (newsletter issue, essay, blog post) into platform-native social posts built from the author's own sentences, then track which ones went live on a local dashboard. Use when the user gives a published URL and wants to distribute it, or asks to open their posting list or distribution dashboard.","hashgraph-online\u002Fawesome-codex-plugins","hashgraph-online","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F160371962?v=4","01M6CNB6NRJVNNGN14TR01Q6D3","HOL (Hashgraph Online)","01M6JT1HSKKG9V68KQAQGBA7XP",1575,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fmrowean\u002Flong-form-distribution\u002Fskills\u002Fdistribute\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000013","分析与可视化","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[5,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],"posting","when","track","long-form","which","posts","essay","URL","native","form","distribution","dashboard","live","local","social","newsletter","issue","list","blog post","open","2026-11-10 10:12:30",false,"---\nname: distribute\ndescription: Turn a published long-form piece (newsletter issue, essay, blog post) into platform-native social posts built from the author's own sentences, then track which ones went live on a local dashboard. Use when the user gives a published URL and wants to distribute it, or asks to open their posting list or distribution dashboard.\nargument-hint: \u003Cpublished-issue-url> | dashboard\n---\n\n# Distribute\n\nOne published piece → a set of posts for LinkedIn, X, Substack Notes (and Threads or Bluesky if asked) → a checklist on a local dashboard where the user ticks each post off and pastes its live link.\n\nEverything stays on the user's machine. The dashboard is a small Python server (standard library only) bound to 127.0.0.1. Issue files and the posting log live in `~\u002Fdistribution-tracker\u002F` unless `LFD_HOME` says otherwise.\n\nArguments: the URL or word the user gave with the request.\n\n`\u003Cskill-dir>` below means the folder this SKILL.md is in. Replace it with that folder's absolute path.\n\n- If the argument is `dashboard` (or the user only wants to see their list), skip to **Step 6**.\n- If there is no URL, ask for the published link. Don't work from a draft that isn't live: the posts link back to it.\n- The user can also give the text itself, pasted or as a file path (`.md`, `.txt`, `.html`), along with the published URL. Read that instead of fetching, and use the URL only for the links.\n\n## Step 1 — Read the piece\n\nFetch the URL with your web-fetch tool and ask for the full article text: the title, the publish date, the cover image URL if there is one, and every section heading with the body under it, verbatim. Ask it to leave out navigation, subscribe boxes, footers and comments.\n\n**If the piece is paywalled or cut short.** Signs include text that ends mid-piece, a \"Keep reading with a free trial\" or \"This post is for paid subscribers\" box, or sections the intro promises that never appear. Tell the user the last section you received, then offer whichever of these routes you can use:\n\n- **Read it in their signed-in browser.** If you have a browser tool connected to the user's own browser, ask first: \"Can I open the post in your browser, where you're signed in?\" On a yes, open the post URL, read the full text from the page and close the tab. Don't click anything except to expand the text, change no settings, and don't copy cookies or session data.\n- **Paste it from their editor.** Open the post in the platform's editor, select all, copy, and paste it into the chat.\n- **Give a file path.** Save the post as `.md`, `.txt` or `.html` and give you the path.\n- **Use the platform's export.** Substack: Settings → Exports gives a zip with every post as HTML, paid posts included.\n\nOnly use text the author can already see as themselves. Never try to get past the paywall another way: no cached copies, archive sites, reader-mode tricks or someone else's login. If the user isn't the author, write posts from the free portion only and say they cover only that.\n\nNever fill in a gap from memory or a guess about what the piece says.\n\nSave the text verbatim to `~\u002Fdistribution-tracker\u002Fsources\u002F\u003Cslug>.txt` (or `$LFD_HOME\u002Fsources\u002F`), with the slug made as in **Step 5**. Step 4 checks every post against this file.\n\n## Step 2 — Split it into sections\n\nUse the piece's own headings. If it has none, split where the topic changes, and name each section with a short phrase taken from its own text.\n\nClassify each section as:\n\n- **feature**: 250+ words with an argument, a story or a number that stands alone. Worth 2–3 posts.\n- **brief**: shorter, a link or an aside. Worth one post at most, often none.\n\n## Step 3 — Show the table and wait\n\nShow a table with these columns:\n\n| # | Section | Type | Words | Strongest line (verbatim) | Suggested posts |\n|---|---------|------|-------|---------------------------|-----------------|\n\nThen ask which sections to distribute and on which platforms. The default is every feature, on LinkedIn, X and Substack Notes. **Wait for the user's answer.** They know which sections they're proud of, and that matters more than word count.\n\n## Step 4 — Write the posts\n\nBuild every post out of the author's sentences. That is the whole method: the piece already contains the posts, and your job is to find them and cut them to length. These rules aren't optional:\n\n1. **Start from the author's sentences.** The key line in each post comes from the piece, verbatim or trimmed. Around it, write what the format needs: a lead-in, a line that sets up the point for someone who hasn't read the piece, a reworded sentence that fits the length. Keep that copy plain and in the author's register, and keep it to framing. The claims stay the author's.\n2. **Never fabricate.** No numbers, quotes, names, events or results that aren't in the piece. If a post needs a fact the piece doesn't have, leave it out.\n3. **A different opening move per platform** for the same section. For example, the number on LinkedIn, the claim on X and the scene on Notes. Two posts that open the same way get scrolled past as duplicates by anyone who follows the author on both.\n4. **Platform shape:**\n   - **LinkedIn post**: under ~1,300 characters. The first two lines carry it, because that's all that shows before \"see more\". Short paragraphs. Put the link at the end, or tell the user to put it in the first comment.\n   - **X post**: under 280 characters. **X thread**: 3–6 posts numbered `1\u002F`, `2\u002F`, each able to stand alone. The link goes in the last post.\n     Tell the user: X can show a new post from an account under 50,000 followers near the top of some feeds, but only in its first two hours (X ranking change, September 30, 2026), and its ranking code weights a reply ten times a like. Post when they can answer replies for those two hours.\n   - **Substack Note**: 1–4 sentences, conversational. No link needed when it's posted from the same publication.\n   - **Threads \u002F Bluesky**: like X, with a 500 \u002F 300 character limit.\n5. **Cut the AI tells** before showing anything:\n   - \"Here's the thing\", \"Let that sink in\", \"In today's fast-paced world\"\n   - \"It's not X, it's Y\" used as a reflex\n   - \"game-changer\", \"unlock\", \"delve\", \"navigate\", \"landscape\", \"elevate\"\n   - tricolons that exist for rhythm alone\n   - rhetorical questions as hooks\n   - emoji bullets\n   - hashtag strings\n   - a closing line that sums up a post that already said it\n   \n   If the author's own text uses one of these, keep it: it's their voice.\n6. **Match the author's register.** If the piece is dry, the posts are dry. Don't add enthusiasm or exclamation marks the piece doesn't have.\n\nIf the user has a voice file (see **Voice**), read it before writing and follow it over the defaults above.\n\n**Check the posts before showing them.** Write them to a scratch file, separated by lines of `---` (or as the `items` of an issue file), and run:\n\n```bash\npython3 \"\u003Cskill-dir>\u002Fscripts\u002Fcheck_posts.py\" --source ~\u002Fdistribution-tracker\u002Fsources\u002F\u003Cslug>.txt --posts \u003Cfile>\n```\n\nIt marks each line that isn't quoted from the piece as `adapted` (with the source sentence it came from) or `new` (lead-in or framing). Those are expected. It fails on two things: `NEW FACT`, a number, quoted phrase or name that isn't in the piece, and `TOO LONG`, a post over its platform's limit. Fix every failure and run it again. When you show the posts, list the adapted and new lines so the user can check that each one frames the point rather than changing it.\n\nIt also warns `CAVEAT?` when a post drops something that narrowed the claim in the piece: a qualifier in the source sentence (\"only\", \"about\", \"as of\", \"may\"), a parenthetical, or the next sentence when that sentence is the caveat (\"But…\", \"Caveat:\"). A caveat that made sense in the full piece can disappear when a section becomes a standalone post. For each warning, either put the qualifier back or, if the post no longer makes the claim the caveat was for, tell the user why it's safe to leave out.\n\nShow the posts grouped by section, and let the user edit or cut any of them before saving.\n\n## Step 5 — Save the issue\n\nWrite one JSON file to `~\u002Fdistribution-tracker\u002Fissues\u002F\u003Cslug>.json` (or `$LFD_HOME\u002Fissues\u002F`). Make the slug lowercase from the title: letters, digits and hyphens only, 60 characters max. Use the same shape as `\u003Cskill-dir>\u002Fsample\u002Fissues\u002Fsample-shortcuts-06.json`:\n\n```json\n{\n  \"slug\": \"my-newsletter-12-the-title\",\n  \"title\": \"My Newsletter #12: The Title\",\n  \"url\": \"https:\u002F\u002F…the published URL…\",\n  \"published\": \"YYYY-MM-DD\",\n  \"series\": \"My Newsletter\",\n  \"cover\": \"https:\u002F\u002F…cover image URL, covers\u002F\u003Cfile>.jpg, or empty…\",\n  \"sections\": [{\"id\": \"s1\", \"title\": \"…\"}],\n  \"items\": [\n    {\"id\": \"s1-li\", \"section\": \"s1\", \"platform\": \"linkedin\", \"format\": \"post\",\n     \"label\": \"Hook over the full section\", \"copy\": \"…the post text…\",\n     \"source\": \"…the paragraph(s) of the piece the post was cut from, verbatim…\"}\n  ]\n}\n```\n\n- `url` is the published URL the user gave, exactly as given. Never put another address there, even one you know for the same author or publication.\n- `platform` is one of `linkedin`, `x`, `substack`, `threads`, `bluesky`.\n- `format` is `post`, `thread` or `note`.\n- `label` is a few words the user will recognise in the checklist.\n- `source` is the full paragraph (or paragraphs) each post draws on, copied verbatim from the saved source text, caveats included. The dashboard shows it beside the post so the user can see what the post left out.\n- Every item `id` must be unique within the file.\n- Leave out `\"sample\"`.\n\nIf a file for this slug already exists, the issue has been distributed before. Ask before you overwrite it. Ticks and links are stored by item `id` in `log.jsonl`, so keep the existing ids for any post that stays.\n\n## Step 6 — Open the dashboard\n\nStart it in the background:\n\n```bash\npython3 \"\u003Cskill-dir>\u002Fdashboard\u002Fserve.py\"\n```\n\nIf it prints that port 8799 is already in use, the dashboard is most likely already running from an earlier session: it reads the issue files on every request, so the new issue is already there.\n\nIf it prints `Couldn't open port` instead, your sandbox doesn't allow local servers. Don't retry or work around it. Give the user the command it printed to run in their own terminal. The issue file is already saved, so the dashboard will show it.\n\nThen tell the user to open **http:\u002F\u002F127.0.0.1:8799**. The new issue is at the top. On the dashboard:\n\n- **Click a post** to see its text beside the passage it came from, then use **Copy text** to grab it.\n- **Tick it** once it's posted.\n- **Add link** saves the live URL. The server checks that a LinkedIn link is really from linkedin.com, and so on.\n- **Skip** marks a post you've decided not to use.\n- **Coverage** shows which sections have never gone out. Those are posts that are already written.\n- **Export CSV** downloads every logged link.\n\nIf the user opens the address and sees something other than the dashboard, another program has the port: start the server with `--port \u003Canother>` and give the user that address.\n\n## Voice (optional, once)\n\nIf the user wants posts that sound more like their social writing than their long-form, ask them to paste 5–10 of their own posts that did well. Save the posts verbatim to `~\u002Fdistribution-tracker\u002Fvoice.md`, with a short list of patterns you noticed in them. Notice things like how posts open, line length, whether they use questions, and how they close. Read that file at the start of Step 4 from then on. Never write the voice file from guesses or from posts the user didn't give you.\n","# Distribute\n\nOne published piece → a set of posts for LinkedIn, X, Substack Notes (and Threads or Bluesky if asked) → a checklist on a local dashboard where the user ticks each post off and pastes its live link.\n\nEverything stays on the user's machine. The dashboard is a small Python server (standard library only) bound to 127.0.0.1. Issue files and the posting log live in `~\u002Fdistribution-tracker\u002F` unless `LFD_HOME` says otherwise.\n\nArguments: the URL or word the user gave with the request.\n\n`\u003Cskill-dir>` below means the folder this SKILL.md is in. Replace it with that folder's absolute path.\n\n- If the argument is `dashboard` (or the user only wants to see their list), skip to **Step 6**.\n- If there is no URL, ask for the published link. Don't work from a draft that isn't live: the posts link back to it.\n- The user can also give the text itself, pasted or as a file path (`.md`, `.txt`, `.html`), along with the published URL. Read that instead of fetching, and use the URL only for the links.\n\n## Step 1 — Read the piece\n\nFetch the URL with your web-fetch tool and ask for the full article text: the title, the publish date, the cover image URL if there is one, and every section heading with the body under it, verbatim. Ask it to leave out navigation, subscribe boxes, footers and comments.\n\n**If the piece is paywalled or cut short.** Signs include text that ends mid-piece, a \"Keep reading with a free trial\" or \"This post is for paid subscribers\" box, or sections the intro promises that never appear. Tell the user the last section you received, then offer whichever of these routes you can use:\n\n- **Read it in their signed-in browser.** If you have a browser tool connected to the user's own browser, ask first: \"Can I open the post in your browser, where you're signed in?\" On a yes, open the post URL, read the full text from the page and close the tab. Don't click anything except to expand the text, change no settings, and don't copy cookies or session data.\n- **Paste it from their editor.** Open the post in the platform's editor, select all, copy, and paste it into the chat.\n- **Give a file path.** Save the post as `.md`, `.txt` or `.html` and give you the path.\n- **Use the platform's export.** Substack: Settings → Exports gives a zip with every post as HTML, paid posts included.\n\nOnly use text the author can already see as themselves. Never try to get past the paywall another way: no cached copies, archive sites, reader-mode tricks or someone else's login. If the user isn't the author, write posts from the free portion only and say they cover only that.\n\nNever fill in a gap from memory or a guess about what the piece says.\n\nSave the text verbatim to `~\u002Fdistribution-tracker\u002Fsources\u002F\u003Cslug>.txt` (or `$LFD_HOME\u002Fsources\u002F`), with the slug made as in **Step 5**. Step 4 checks every post against this file.\n\n## Step 2 — Split it into sections\n\nUse the piece's own headings. If it has none, split where the topic changes, and name each section with a short phrase taken from its own text.\n\nClassify each section as:\n\n- **feature**: 250+ words with an argument, a story or a number that stands alone. Worth 2–3 posts.\n- **brief**: shorter, a link or an aside. Worth one post at most, often none.\n\n## Step 3 — Show the table and wait\n\nShow a table with these columns:\n\n| # | Section | Type | Words | Strongest line (verbatim) | Suggested posts |\n|---|---------|------|-------|---------------------------|-----------------|\n\nThen ask which sections to distribute and on which platforms. The default is every feature, on LinkedIn, X and Substack Notes. **Wait for the user's answer.** They know which sections they're proud of, and that matters more than word count.\n\n## Step 4 — Write the posts\n\nBuild every post out of the author's sentences. That is the whole method: the piece already contains the posts, and your job is to find them and cut them to length. These rules aren't optional:\n\n1. **Start from the author's sentences.** The key line in each post comes from the piece, verbatim or trimmed. Around it, write what the format needs: a lead-in, a line that sets up the point for someone who hasn't read the piece, a reworded sentence that fits the length. Keep that copy plain and in the author's register, and keep it to framing. The claims stay the author's.\n2. **Never fabricate.** No numbers, quotes, names, events or results that aren't in the piece. If a post needs a fact the piece doesn't have, leave it out.\n3. **A different opening move per platform** for the same section. For example, the number on LinkedIn, the claim on X and the scene on Notes. Two posts that open the same way get scrolled past as duplicates by anyone who follows the author on both.\n4. **Platform shape:**\n   - **LinkedIn post**: under ~1,300 characters. The first two lines carry it, because that's all that shows before \"see more\". Short paragraphs. Put the link at the end, or tell the user to put it in the first comment.\n   - **X post**: under 280 characters. **X thread**: 3–6 posts numbered `1\u002F`, `2\u002F`, each able to stand alone. The link goes in the last post.\n     Tell the user: X can show a new post from an account under 50,000 followers near the top of some feeds, but only in its first two hours (X ranking change, September 30, 2026), and its ranking code weights a reply ten times a like. Post when they can answer replies for those two hours.\n   - **Substack Note**: 1–4 sentences, conversational. No link needed when it's posted from the same publication.\n   - **Threads \u002F Bluesky**: like X, with a 500 \u002F 300 character limit.\n5. **Cut the AI tells** before showing anything:\n   - \"Here's the thing\", \"Let that sink in\", \"In today's fast-paced world\"\n   - \"It's not X, it's Y\" used as a reflex\n   - \"game-changer\", \"unlock\", \"delve\", \"navigate\", \"landscape\", \"elevate\"\n   - tricolons that exist for rhythm alone\n   - rhetorical questions as hooks\n   - emoji bullets\n   - hashtag strings\n   - a closing line that sums up a post that already said it\n   \n   If the author's own text uses one of these, keep it: it's their voice.\n6. **Match the author's register.** If the piece is dry, the posts are dry. Don't add enthusiasm or exclamation marks the piece doesn't have.\n\nIf the user has a voice file (see **Voice**), read it before writing and follow it over the defaults above.\n\n**Check the posts before showing them.** Write them to a scratch file, separated by lines of `---` (or as the `items` of an issue file), and run:\n\n```bash\npython3 \"\u003Cskill-dir>\u002Fscripts\u002Fcheck_posts.py\" --source ~\u002Fdistribution-tracker\u002Fsources\u002F\u003Cslug>.txt --posts \u003Cfile>\n```\n\nIt marks each line that isn't quoted from the piece as `adapted` (with the source sentence it came from) or `new` (lead-in or framing). Those are expected. It fails on two things: `NEW FACT`, a number, quoted phrase or name that isn't in the piece, and `TOO LONG`, a post over its platform's limit. Fix every failure and run it again. When you show the posts, list the adapted and new lines so the user can check that each one frames the point rather than changing it.\n\nIt also warns `CAVEAT?` when a post drops something that narrowed the claim in the piece: a qualifier in the source sentence (\"only\", \"about\", \"as of\", \"may\"), a parenthetical, or the next sentence when that sentence is the caveat (\"But…\", \"Caveat:\"). A caveat that made sense in the full piece can disappear when a section becomes a standalone post. For each warning, either put the qualifier back or, if the post no longer makes the claim the caveat was for, tell the user why it's safe to leave out.\n\nShow the posts grouped by section, and let the user edit or cut any of them before saving.\n\n## Step 5 — Save the issue\n\nWrite one JSON file to `~\u002Fdistribution-tracker\u002Fissues\u002F\u003Cslug>.json` (or `$LFD_HOME\u002Fissues\u002F`). Make the slug lowercase from the title: letters, digits and hyphens only, 60 characters max. Use the same shape as `\u003Cskill-dir>\u002Fsample\u002Fissues\u002Fsample-shortcuts-06.json`:\n\n```json\n{\n  \"slug\": \"my-newsletter-12-the-title\",\n  \"title\": \"My Newsletter #12: The Title\",\n  \"url\": \"https:\u002F\u002F…the published URL…\",\n  \"published\": \"YYYY-MM-DD\",\n  \"series\": \"My Newsletter\",\n  \"cover\": \"https:\u002F\u002F…cover image URL, covers\u002F\u003Cfile>.jpg, or empty…\",\n  \"sections\": [{\"id\": \"s1\", \"title\": \"…\"}],\n  \"items\": [\n    {\"id\": \"s1-li\", \"section\": \"s1\", \"platform\": \"linkedin\", \"format\": \"post\",\n     \"label\": \"Hook over the full section\", \"copy\": \"…the post text…\",\n     \"source\": \"…the paragraph(s) of the piece the post was cut from, verbatim…\"}\n  ]\n}\n```\n\n- `url` is the published URL the user gave, exactly as given. Never put another address there, even one you know for the same author or publication.\n- `platform` is one of `linkedin`, `x`, `substack`, `threads`, `bluesky`.\n- `format` is `post`, `thread` or `note`.\n- `label` is a few words the user will recognise in the checklist.\n- `source` is the full paragraph (or paragraphs) each post draws on, copied verbatim from the saved source text, caveats included. The dashboard shows it beside the post so the user can see what the post left out.\n- Every item `id` must be unique within the file.\n- Leave out `\"sample\"`.\n\nIf a file for this slug already exists, the issue has been distributed before. Ask before you overwrite it. Ticks and links are stored by item `id` in `log.jsonl`, so keep the existing ids for any post that stays.\n\n## Step 6 — Open the dashboard\n\nStart it in the background:\n\n```bash\npython3 \"\u003Cskill-dir>\u002Fdashboard\u002Fserve.py\"\n```\n\nIf it prints that port 8799 is already in use, the dashboard is most likely already running from an earlier session: it reads the issue files on every request, so the new issue is already there.\n\nIf it prints `Couldn't open port` instead, your sandbox doesn't allow local servers. Don't retry or work around it. Give the user the command it printed to run in their own terminal. The issue file is already saved, so the dashboard will show it.\n\nThen tell the user to open **http:\u002F\u002F127.0.0.1:8799**. The new issue is at the top. On the dashboard:\n\n- **Click a post** to see its text beside the passage it came from, then use **Copy text** to grab it.\n- **Tick it** once it's posted.\n- **Add link** saves the live URL. The server checks that a LinkedIn link is really from linkedin.com, and so on.\n- **Skip** marks a post you've decided not to use.\n- **Coverage** shows which sections have never gone out. Those are posts that are already written.\n- **Export CSV** downloads every logged link.\n\nIf the user opens the address and sees something other than the dashboard, another program has the port: start the server with `--port \u003Canother>` and give the user that address.\n\n## Voice (optional, once)\n\nIf the user wants posts that sound more like their social writing than their long-form, ask them to paste 5–10 of their own posts that did well. Save the posts verbatim to `~\u002Fdistribution-tracker\u002Fvoice.md`, with a short list of patterns you noticed in them. Notice things like how posts open, line length, whether they use questions, and how they close. Read that file at the start of Step 4 from then on. Never write the voice file from guesses or from posts the user didn't give you.\n",{"name":5,"description":7,"argument-hint":54},"\u003Cpublished-issue-url> | dashboard","main","2b63f856ce19c2a797929cacabd9e0fc936812fa","plugins\u002Fmrowean\u002Flong-form-distribution\u002Fskills\u002Fdistribute",491,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins","https:\u002F\u002Fhol.org\u002Fplugins\u002Fbest-codex-plugins","https:\u002F\u002Fgithub.com\u002Fhashgraph-online","https:\u002F\u002Fhol.org","Open-source standards and developer tools for interoperable AI agents: discovery, identity, communication, payments, privacy and security.","2026-11-14 14:06:13",{"source":8,"skillName":5,"commands":66,"prompt":76,"zipAvailable":77},[67,70,73],{"tool":68,"command":69},"npx","npx skills add hashgraph-online\u002Fawesome-codex-plugins --skill distribute",{"tool":71,"command":72},"bunx","bunx skills add hashgraph-online\u002Fawesome-codex-plugins --skill distribute",{"tool":74,"command":75},"pnpm","pnpm dlx skills add hashgraph-online\u002Fawesome-codex-plugins --skill distribute","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fmrowean\u002Flong-form-distribution\u002Fskills\u002Fdistribute\u002FSKILL.md",true,[79,85,91,95,101,105,109,113,117,121,125,129,133],{"path":80,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":83,"sourceHtmlUrl":84},"dashboard\u002Fapp.js","SCRIPT","脚本",15091,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fmrowean\u002Flong-form-distribution\u002Fskills\u002Fdistribute\u002Fdashboard\u002Fapp.js",{"path":86,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":89,"sourceHtmlUrl":90},"dashboard\u002Findex.html","REFERENCE","参考文档",13841,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fmrowean\u002Flong-form-distribution\u002Fskills\u002Fdistribute\u002Fdashboard\u002Findex.html",{"path":92,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":93,"sourceHtmlUrl":94},"dashboard\u002Fserve.py",11018,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fmrowean\u002Flong-form-distribution\u002Fskills\u002Fdistribute\u002Fdashboard\u002Fserve.py",{"path":96,"resourceType":97,"resourceTypeDesc":98,"sizeBytes":99,"sourceHtmlUrl":100},"sample\u002Fcovers\u002Fshortcuts-04.jpg","ASSET","资产文件",42675,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fmrowean\u002Flong-form-distribution\u002Fskills\u002Fdistribute\u002Fsample\u002Fcovers\u002Fshortcuts-04.jpg",{"path":102,"resourceType":97,"resourceTypeDesc":98,"sizeBytes":103,"sourceHtmlUrl":104},"sample\u002Fcovers\u002Fshortcuts-05.jpg",30405,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fmrowean\u002Flong-form-distribution\u002Fskills\u002Fdistribute\u002Fsample\u002Fcovers\u002Fshortcuts-05.jpg",{"path":106,"resourceType":97,"resourceTypeDesc":98,"sizeBytes":107,"sourceHtmlUrl":108},"sample\u002Fcovers\u002Fshortcuts-06.jpg",34174,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fmrowean\u002Flong-form-distribution\u002Fskills\u002Fdistribute\u002Fsample\u002Fcovers\u002Fshortcuts-06.jpg",{"path":110,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":111,"sourceHtmlUrl":112},"sample\u002Fissues\u002Fsample-shortcuts-04.json",9912,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fmrowean\u002Flong-form-distribution\u002Fskills\u002Fdistribute\u002Fsample\u002Fissues\u002Fsample-shortcuts-04.json",{"path":114,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":115,"sourceHtmlUrl":116},"sample\u002Fissues\u002Fsample-shortcuts-05.json",7677,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fmrowean\u002Flong-form-distribution\u002Fskills\u002Fdistribute\u002Fsample\u002Fissues\u002Fsample-shortcuts-05.json",{"path":118,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":119,"sourceHtmlUrl":120},"sample\u002Fissues\u002Fsample-shortcuts-06.json",11047,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fmrowean\u002Flong-form-distribution\u002Fskills\u002Fdistribute\u002Fsample\u002Fissues\u002Fsample-shortcuts-06.json",{"path":122,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":123,"sourceHtmlUrl":124},"sample\u002Fsources\u002Fsample-shortcuts-04.txt",4387,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fmrowean\u002Flong-form-distribution\u002Fskills\u002Fdistribute\u002Fsample\u002Fsources\u002Fsample-shortcuts-04.txt",{"path":126,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":127,"sourceHtmlUrl":128},"sample\u002Fsources\u002Fsample-shortcuts-05.txt",3049,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fmrowean\u002Flong-form-distribution\u002Fskills\u002Fdistribute\u002Fsample\u002Fsources\u002Fsample-shortcuts-05.txt",{"path":130,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":131,"sourceHtmlUrl":132},"sample\u002Fsources\u002Fsample-shortcuts-06.txt",7280,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fmrowean\u002Flong-form-distribution\u002Fskills\u002Fdistribute\u002Fsample\u002Fsources\u002Fsample-shortcuts-06.txt",{"path":134,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":135,"sourceHtmlUrl":136},"scripts\u002Fcheck_posts.py",9284,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fmrowean\u002Flong-form-distribution\u002Fskills\u002Fdistribute\u002Fscripts\u002Fcheck_posts.py",[138,146,153,160,186,211],{"skillNo":139,"name":140,"nameZh":6,"description":141,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":142,"categories":143,"keywords":144,"publishedAt":145},"01M746ZWACVKMZ1BJXJZHYJSSX","migrate-to-e2e","Moves an existing Playwright, Cypress, Selenium, Appium, Detox, Maestro, or TesterArmy suite to e2e one slice at a time, with the old suite running beside the new one until each ported test is proven. Keeps a MIGRATION.md progress file so any later session resumes where the last stopped. Optionally plants a defect to show both suites catch it. Use for \u002Fmigrate-to-e2e, \"migrate our tests to e2e\", \"port these Maestro flows\", \"move our TesterArmy tests\", or when a project has an e2e config and an older suite still running.","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Ftester-army\u002Fe2e\u002Fskills\u002Fmigrate-to-e2e\u002FSKILL.md",[],[],"2026-11-11 15:11:14",{"skillNo":147,"name":148,"nameZh":6,"description":149,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":150,"categories":151,"keywords":152,"publishedAt":145},"01M746ZPTAX1Q0FBKAB1CYND7E","e2e","Writes, runs, and debugs end-to-end tests for web and mobile apps with e2e, the agentic test runner, which mixes agent.act goals with exact locator assertions on a Playwright browser or an iOS or Android device. Also drives a project's running app live over the e2e MCP server to look at a screen, check a UI change, take a screenshot or record a video, and try a locator; and runs bug bashes, parallel e2e explore runs with each bug proven by a repro test. Use when a project depends on e2e or has an e2e.config.ts, when asked for end-to-end, browser, mobile, or agentic UI tests, to check a change in the running app, to QA or bug bash an app or branch, or when an e2e run fails.","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Ftester-army\u002Fe2e\u002Fskills\u002Fe2e\u002FSKILL.md",[],[],{"skillNo":154,"name":155,"nameZh":6,"description":156,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":157,"categories":158,"keywords":159,"publishedAt":145},"01M746ZJN784HVHMDP9MQGCSGG","create-verification-skill","Generate a project-local verify-\u003Capp> skill on top of e2e, so any coding agent can launch the app, check it is worth driving, exercise a feature the way a user does, keep evidence, and bug bash it. Writes the skill, a feature map with one explore charter per feature, and proves it once. Use for \u002Fcreate-verification-skill, \"make a verification skill for this repo\", or when a project has no scripted way to prove UI behavior.","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Ftester-army\u002Fe2e\u002Fskills\u002Fcreate-verification-skill\u002FSKILL.md",[],[],{"skillNo":161,"name":162,"nameZh":6,"description":163,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":164,"categories":165,"keywords":166,"publishedAt":49},"01M716A6ETNB9B1SQ3GXZC75VR","deja-search","deja-vu memory — search the user's past AI coding sessions with the deja CLI. Holds what they already settled and never wrote into the repo (naming rules, banned or already-tried tools, required checks before merge, preferred values, who owns what). Use before your first edit in a task, before you call a change done or ready to merge, before you recommend a tool, library, design or reviewer, before re-debugging an error that may already be solved, when they say 'didn't we fix this before', 'what did we decide about X' or 'I already have that', and before telling them something on this machine does not exist.","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fvshulcz\u002Fdeja-vu\u002Fskills\u002Fdeja-search\u002FSKILL.md",[],[167,168,169,170,171,172,173,174,175,176,177,30,178,179,180,181,182,183,184,185],"search","deja search","never","error","ready","memory","re","decide","fix","design","debugging","you","done","reviewer","io","change","cli","merge","past",{"skillNo":187,"name":188,"nameZh":6,"description":189,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":190,"categories":191,"keywords":192,"publishedAt":49},"01M716A3J2W5SENSE9VGMXB375","deja-reflect","End-of-session reflection and memory curation with deja-vu. Review what was decided, what commands broke and what repaired them, and record durable project rules or decisions with deja remember so the next session starts with them.","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fvshulcz\u002Fdeja-vu\u002Fskills\u002Fdeja-reflect\u002FSKILL.md",[],[193,194,195,181,196,197,198,199,200,201,202,203,204,205,172,206,207,208,209,210],"deja reflect","reflect","review","with","record","github","next","https","node","Rules","decisions","brew","remember","project rules","project","session","end","reflection",{"skillNo":212,"name":213,"nameZh":6,"description":214,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":215,"categories":216,"keywords":226,"publishedAt":49},"01M715T3RR4BAYSR57HPPTJ0PF","revid","Make, edit, export and post AI videos with Revid (revid.ai) through the Revid MCP server. Use whenever the user wants a short-form or long-form video made (from an idea, a script, a URL, an article, a PDF, a tweet, a product page, their own clips, or a song), wants to find what is going viral on TikTok, YouTube, Instagram or X before making something, wants to edit or re-export an existing Revid project, generate a standalone AI image or clip, make a series episode, or publish and schedule a finished video to connected social accounts. Covers setup (hosted MCP with OAuth, or an API key), the 36 tools, credits, polling and the rules for publishing. Routes to the more specific revid-* skills when one fits.","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Ftmakersas\u002Frevid-skills\u002Fskills\u002Frevid\u002FSKILL.md",[217,220,223],{"categoryNo":218,"categoryName":219,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":221,"categoryName":222,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":224,"categoryName":225,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口",[213,36,227,228,229,230,231,207,232,173,233,43,234,235,30,236,237,238,239,240],"Video","short-form","standalone","PDF","viral","tiktok","short","MCP","song","image","mcp server","schedule","api","publish"]