[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CD23Q2DX8AV398HM85EDMW":3,"skill-same:01M6CD23Q2DX8AV398HM85EDMW":68},{"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":18,"publishedAt":34,"linkOnly":35,"markdownContent":36,"markdownBody":37,"frontMatter":38,"refName":41,"commitSha":42,"skillDirectory":43,"forksCount":44,"repositoryHtmlUrl":45,"repositoryHomepageUrl":6,"ownerHtmlUrl":46,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":47,"install":48,"resources":61},"01M6CD23Q2DX8AV398HM85EDMW","python-anti-patterns",null,"Common Python anti-patterns to avoid. Use as a checklist when reviewing code, before finalizing implementations, or when debugging issues that might stem from known bad practices.","cercova-studios\u002F10x-swe","cercova-studios","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F217108198?v=4","01M6CCYGHXTH80N3BXRW6KESTE","Cercova Studios","01M6CCYGPADH5MJDR0VNNR775C",1,"MIT","https:\u002F\u002Fgithub.com\u002Fcercova-studios\u002F10x-swe\u002Fblob\u002Fmain\u002Fplugins\u002F10x-swe\u002Fskills\u002Fpython-anti-patterns\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33],"python","python anti patterns","patterns","anti patterns","debugging","code","issues","common","use","anti-patterns","checklist","bad","as","reviewing code","when","2026-11-10 10:12:30",false,"---\nname: actiontext-richtext\ndescription: Action Text (rich text) in Rails 8 — Trix editor integration, has_rich_text on models, Active Storage for embedded attachments, the safe-list of HTML tags, custom embeds via attachable mixin, server-side sanitization, XSS prevention, search indexing of plain text. Use when the user mentions Action Text, Trix, rich text editor, has_rich_text, WYSIWYG, formatted text content, embedded images, or asks how to add a rich text editor to Rails.\n---\n\n# ActionText (Rich Text)\n\n> Add rich text editing to Rails models. Trix editor + ActionText + ActiveStorage handle the editor, storage, and embedded attachments. Default Rails 8 has decent defaults — the gotchas are around sanitization, search indexing, and custom embeds.\n\n## The opinion\n\n> **`has_rich_text :body` on the model. Trix is the default editor — fine for most cases. Sanitize on output (Rails does by default). Index the plain-text representation, not the HTML. For custom embeds (mentions, polls), use ActionText's attachable mixin. Don't migrate to TinyMCE\u002FCKEditor unless you have a specific need — Trix's smaller surface area is a security win.**\n\nCounter-positions:\n- **TinyMCE \u002F CKEditor \u002F Tiptap** — more powerful editors. Larger XSS attack surface, separate licensing. Pick only if Trix is genuinely insufficient.\n\n## Setup\n\n```bash\nbin\u002Frails action_text:install\nbin\u002Frails db:migrate\n```\n\nCreates `action_text_rich_texts` and `active_storage_blobs\u002Fattachments` tables.\n\n## Core patterns\n\n### Pattern 1: Model + form\n\n```ruby\nclass Post \u003C ApplicationRecord\n  has_rich_text :body\nend\n```\n\n```erb\n\u003C%= form.label :body %>\n\u003C%= form.rich_text_area :body %>\n```\n\n```erb\n\u003C!-- View -->\n\u003C%= @post.body %>  \u003C!-- Renders the rendered Trix HTML, sanitized -->\n```\n\n### Pattern 2: Sanitization (the default + custom)\n\nRails sanitizes ActionText output by default. The allowed tags include common formatting (`\u003Cstrong>`, `\u003Cem>`, `\u003Ch1-6>`, `\u003Ca>`, `\u003Cimg>`, etc.) — see `Rails::Html::SafeListSanitizer` for the exact list.\n\nTo restrict further:\n\n```ruby\n# config\u002Finitializers\u002Faction_text.rb\nActionText::ContentHelper.allowed_tags -= %w[h1 h2]\n```\n\nTo allow more (carefully):\n\n```ruby\nActionText::ContentHelper.allowed_tags += %w[mark]\n```\n\n**Anti-pattern:** allowing `\u003Cscript>` (even by mistake). The default safe-list excludes it; never add.\n\n### Pattern 3: Embedded attachments\n\nTrix supports drag-and-drop image upload. ActionText wires it to ActiveStorage automatically.\n\n```ruby\n# Variant configured on the attachment association (Rails 7.1+):\nclass Post \u003C ApplicationRecord\n  has_rich_text :body\nend\n\n# config\u002Fapplication.rb — variant pipeline (libvips by default in Rails 7+)\n# Rails.application.config.active_storage.variant_processor = :vips\n```\n\nFor the editor preview specifically, ActionText resizes embedded images automatically; you don't need to declare a variant unless you want a non-default size for `\u003C%= image_tag attachment.representation(resize_to_limit: [800, 800]) %>` in your views.\n\nThe HTML stored includes `\u003Caction-text-attachment>` tags pointing at the blob.\n\n### Pattern 4: Custom attachables (mentions, polls)\n\nBeyond images:\n\n```ruby\nclass User \u003C ApplicationRecord\n  include ActionText::Attachable\n\n  # Define how the user renders inside rich text\n  def to_trix_content_attachment_partial_path\n    \"users\u002Fmention\"\n  end\nend\n```\n\n```erb\n\u003C!-- app\u002Fviews\u002Fusers\u002F_mention.html.erb -->\n\u003Ca href=\"\u003C%= user_path(user) %>\" class=\"mention\">@\u003C%= user.username %>\u003C\u002Fa>\n```\n\n```ruby\n# In Trix client-side JS, you'd implement an @-completion that calls:\npost.body.body.attachables.append(User.find(id))\n```\n\nThis pattern is how Basecamp's hey.com handles inline mentions and pinned messages — see signal-v-noise blog posts.\n\n### Pattern 5: Plain-text indexing (search)\n\nRich-text HTML stored in `body` is hard to search. ActionText auto-stores a plain-text version:\n\n```ruby\npost.body.to_plain_text  # \"Hello, world!\"\n```\n\nFor search:\n\n```ruby\nclass Post \u003C ApplicationRecord\n  has_rich_text :body\n\n  # If using pg_search:\n  include PgSearch::Model\n  multisearchable against: [:title, :body_plain]\n\n  def body_plain\n    body.to_plain_text\n  end\nend\n```\n\nSee `rails-search` for full search patterns.\n\n### Pattern 6: Testing\n\n```ruby\nRSpec.describe Post, type: :model do\n  it \"stores rich text body\" do\n    post = create(:post, body: \"\u003Cstrong>Hello\u003C\u002Fstrong>\")\n    expect(post.body.to_plain_text).to eq(\"Hello\")\n    expect(post.body.to_s).to include(\"\u003Cstrong>\")\n  end\n\n  it \"sanitizes script tags\" do\n    post = create(:post, body: \"\u003Cscript>alert(1)\u003C\u002Fscript>Hello\")\n    expect(post.body.to_s).not_to include(\"\u003Cscript>\")\n    expect(post.body.to_plain_text).to include(\"Hello\")\n  end\nend\n```\n\n```ruby\n# System spec — Trix interaction\nRSpec.describe \"Editing a post\", type: :system, js: true do\n  it \"allows rich text input\" do\n    sign_in user\n    visit edit_post_path(post)\n    fill_in_rich_text_area \"post_body\", with: \"Hello world\"\n    click_button \"Update\"\n    expect(page).to have_content(\"Hello world\")\n  end\nend\n```\n\n`fill_in_rich_text_area` is ActionText's Capybara helper (loaded by `action_text\u002Fsystem_test_helper`).\n\n### Pattern 7: Migrating off serialize text columns\n\n```ruby\n# Old: posts.body :text — plain or HTML stored raw\n# New: ActionText\n\n# Migration — assign the legacy column value to the has_rich_text `:body` setter.\n# Read the legacy raw column via the table BEFORE has_rich_text was wired up.\nclass MigratePostBodyToActionText \u003C ActiveRecord::Migration[8.0]\n  disable_ddl_transaction!\n\n  def up\n    legacy_rows = ActiveRecord::Base.connection.select_all(\"SELECT id, legacy_body FROM posts WHERE legacy_body IS NOT NULL\")\n    legacy_rows.each do |row|\n      post = Post.find(row[\"id\"])\n      post.update!(body: row[\"legacy_body\"])  # routes to ActionText via has_rich_text\n    end\n  end\nend\n```\n\nFor non-trivial migrations, do this in a background job, not a migration. See `safe-migrations`.\n\n## Common mistakes to refuse\n\n- Don't allow `\u003Cscript>` in the safe-list. XSS.\n- Don't accept user-provided CSS \u002F HTML attributes (`style`, `onclick`) — Rails strips them by default; don't override.\n- Don't search against HTML — search against plain text via `to_plain_text`.\n- Don't store rich text in the same `text` column as your old plain text. Migrate.\n- Don't switch to TinyMCE \u002F CKEditor without a justification — Trix's smaller surface is a security win.\n\n## When NOT to use this skill\n\n- The user needs Markdown (not WYSIWYG) — use a separate Markdown gem (kramdown, commonmarker).\n- The user needs collaborative editing — out of scope; use Liveblocks \u002F Yjs.\n\n## See also\n\n- `activestorage-uploads` — for the embedded attachment storage\n- `rails-search` — indexing the plain-text body\n- `rails-security-baseline` — XSS \u002F sanitization\n\n## Sources\n\n- [Rails Guides — Action Text Overview](https:\u002F\u002Fguides.rubyonrails.org\u002Faction_text_overview.html)\n- [Trix editor](https:\u002F\u002Ftrix-editor.org\u002F)\n- [ActionText API](https:\u002F\u002Fapi.rubyonrails.org\u002Fclasses\u002FActionText.html)\n- [Sanitization safe-list](https:\u002F\u002Fapi.rubyonrails.org\u002Fclasses\u002FRails\u002FHtml\u002FSafeListSanitizer.html)\n- [DHH on Trix](https:\u002F\u002Fsignalvnoise.com\u002F) — design rationale\n- [pg_search](https:\u002F\u002Fgithub.com\u002FCasecommons\u002Fpg_search)\n- [TinyMCE Rails (counter-position)](https:\u002F\u002Fgithub.com\u002Fspohlenz\u002Ftinymce-rails)\n","# ActionText (Rich Text)\n\n> Add rich text editing to Rails models. Trix editor + ActionText + ActiveStorage handle the editor, storage, and embedded attachments. Default Rails 8 has decent defaults — the gotchas are around sanitization, search indexing, and custom embeds.\n\n## The opinion\n\n> **`has_rich_text :body` on the model. Trix is the default editor — fine for most cases. Sanitize on output (Rails does by default). Index the plain-text representation, not the HTML. For custom embeds (mentions, polls), use ActionText's attachable mixin. Don't migrate to TinyMCE\u002FCKEditor unless you have a specific need — Trix's smaller surface area is a security win.**\n\nCounter-positions:\n- **TinyMCE \u002F CKEditor \u002F Tiptap** — more powerful editors. Larger XSS attack surface, separate licensing. Pick only if Trix is genuinely insufficient.\n\n## Setup\n\n```bash\nbin\u002Frails action_text:install\nbin\u002Frails db:migrate\n```\n\nCreates `action_text_rich_texts` and `active_storage_blobs\u002Fattachments` tables.\n\n## Core patterns\n\n### Pattern 1: Model + form\n\n```ruby\nclass Post \u003C ApplicationRecord\n  has_rich_text :body\nend\n```\n\n```erb\n\u003C%= form.label :body %>\n\u003C%= form.rich_text_area :body %>\n```\n\n```erb\n\u003C!-- View -->\n\u003C%= @post.body %>  \u003C!-- Renders the rendered Trix HTML, sanitized -->\n```\n\n### Pattern 2: Sanitization (the default + custom)\n\nRails sanitizes ActionText output by default. The allowed tags include common formatting (`\u003Cstrong>`, `\u003Cem>`, `\u003Ch1-6>`, `\u003Ca>`, `\u003Cimg>`, etc.) — see `Rails::Html::SafeListSanitizer` for the exact list.\n\nTo restrict further:\n\n```ruby\n# config\u002Finitializers\u002Faction_text.rb\nActionText::ContentHelper.allowed_tags -= %w[h1 h2]\n```\n\nTo allow more (carefully):\n\n```ruby\nActionText::ContentHelper.allowed_tags += %w[mark]\n```\n\n**Anti-pattern:** allowing `\u003Cscript>` (even by mistake). The default safe-list excludes it; never add.\n\n### Pattern 3: Embedded attachments\n\nTrix supports drag-and-drop image upload. ActionText wires it to ActiveStorage automatically.\n\n```ruby\n# Variant configured on the attachment association (Rails 7.1+):\nclass Post \u003C ApplicationRecord\n  has_rich_text :body\nend\n\n# config\u002Fapplication.rb — variant pipeline (libvips by default in Rails 7+)\n# Rails.application.config.active_storage.variant_processor = :vips\n```\n\nFor the editor preview specifically, ActionText resizes embedded images automatically; you don't need to declare a variant unless you want a non-default size for `\u003C%= image_tag attachment.representation(resize_to_limit: [800, 800]) %>` in your views.\n\nThe HTML stored includes `\u003Caction-text-attachment>` tags pointing at the blob.\n\n### Pattern 4: Custom attachables (mentions, polls)\n\nBeyond images:\n\n```ruby\nclass User \u003C ApplicationRecord\n  include ActionText::Attachable\n\n  # Define how the user renders inside rich text\n  def to_trix_content_attachment_partial_path\n    \"users\u002Fmention\"\n  end\nend\n```\n\n```erb\n\u003C!-- app\u002Fviews\u002Fusers\u002F_mention.html.erb -->\n\u003Ca href=\"\u003C%= user_path(user) %>\" class=\"mention\">@\u003C%= user.username %>\u003C\u002Fa>\n```\n\n```ruby\n# In Trix client-side JS, you'd implement an @-completion that calls:\npost.body.body.attachables.append(User.find(id))\n```\n\nThis pattern is how Basecamp's hey.com handles inline mentions and pinned messages — see signal-v-noise blog posts.\n\n### Pattern 5: Plain-text indexing (search)\n\nRich-text HTML stored in `body` is hard to search. ActionText auto-stores a plain-text version:\n\n```ruby\npost.body.to_plain_text  # \"Hello, world!\"\n```\n\nFor search:\n\n```ruby\nclass Post \u003C ApplicationRecord\n  has_rich_text :body\n\n  # If using pg_search:\n  include PgSearch::Model\n  multisearchable against: [:title, :body_plain]\n\n  def body_plain\n    body.to_plain_text\n  end\nend\n```\n\nSee `rails-search` for full search patterns.\n\n### Pattern 6: Testing\n\n```ruby\nRSpec.describe Post, type: :model do\n  it \"stores rich text body\" do\n    post = create(:post, body: \"\u003Cstrong>Hello\u003C\u002Fstrong>\")\n    expect(post.body.to_plain_text).to eq(\"Hello\")\n    expect(post.body.to_s).to include(\"\u003Cstrong>\")\n  end\n\n  it \"sanitizes script tags\" do\n    post = create(:post, body: \"\u003Cscript>alert(1)\u003C\u002Fscript>Hello\")\n    expect(post.body.to_s).not_to include(\"\u003Cscript>\")\n    expect(post.body.to_plain_text).to include(\"Hello\")\n  end\nend\n```\n\n```ruby\n# System spec — Trix interaction\nRSpec.describe \"Editing a post\", type: :system, js: true do\n  it \"allows rich text input\" do\n    sign_in user\n    visit edit_post_path(post)\n    fill_in_rich_text_area \"post_body\", with: \"Hello world\"\n    click_button \"Update\"\n    expect(page).to have_content(\"Hello world\")\n  end\nend\n```\n\n`fill_in_rich_text_area` is ActionText's Capybara helper (loaded by `action_text\u002Fsystem_test_helper`).\n\n### Pattern 7: Migrating off serialize text columns\n\n```ruby\n# Old: posts.body :text — plain or HTML stored raw\n# New: ActionText\n\n# Migration — assign the legacy column value to the has_rich_text `:body` setter.\n# Read the legacy raw column via the table BEFORE has_rich_text was wired up.\nclass MigratePostBodyToActionText \u003C ActiveRecord::Migration[8.0]\n  disable_ddl_transaction!\n\n  def up\n    legacy_rows = ActiveRecord::Base.connection.select_all(\"SELECT id, legacy_body FROM posts WHERE legacy_body IS NOT NULL\")\n    legacy_rows.each do |row|\n      post = Post.find(row[\"id\"])\n      post.update!(body: row[\"legacy_body\"])  # routes to ActionText via has_rich_text\n    end\n  end\nend\n```\n\nFor non-trivial migrations, do this in a background job, not a migration. See `safe-migrations`.\n\n## Common mistakes to refuse\n\n- Don't allow `\u003Cscript>` in the safe-list. XSS.\n- Don't accept user-provided CSS \u002F HTML attributes (`style`, `onclick`) — Rails strips them by default; don't override.\n- Don't search against HTML — search against plain text via `to_plain_text`.\n- Don't store rich text in the same `text` column as your old plain text. Migrate.\n- Don't switch to TinyMCE \u002F CKEditor without a justification — Trix's smaller surface is a security win.\n\n## When NOT to use this skill\n\n- The user needs Markdown (not WYSIWYG) — use a separate Markdown gem (kramdown, commonmarker).\n- The user needs collaborative editing — out of scope; use Liveblocks \u002F Yjs.\n\n## See also\n\n- `activestorage-uploads` — for the embedded attachment storage\n- `rails-search` — indexing the plain-text body\n- `rails-security-baseline` — XSS \u002F sanitization\n\n## Sources\n\n- [Rails Guides — Action Text Overview](https:\u002F\u002Fguides.rubyonrails.org\u002Faction_text_overview.html)\n- [Trix editor](https:\u002F\u002Ftrix-editor.org\u002F)\n- [ActionText API](https:\u002F\u002Fapi.rubyonrails.org\u002Fclasses\u002FActionText.html)\n- [Sanitization safe-list](https:\u002F\u002Fapi.rubyonrails.org\u002Fclasses\u002FRails\u002FHtml\u002FSafeListSanitizer.html)\n- [DHH on Trix](https:\u002F\u002Fsignalvnoise.com\u002F) — design rationale\n- [pg_search](https:\u002F\u002Fgithub.com\u002FCasecommons\u002Fpg_search)\n- [TinyMCE Rails (counter-position)](https:\u002F\u002Fgithub.com\u002Fspohlenz\u002Ftinymce-rails)\n",{"name":39,"description":40},"actiontext-richtext","Action Text (rich text) in Rails 8 — Trix editor integration, has_rich_text on models, Active Storage for embedded attachments, the safe-list of HTML tags, custom embeds via attachable mixin, server-side sanitization, XSS prevention, search indexing of plain text. Use when the user mentions Action Text, Trix, rich text editor, has_rich_text, WYSIWYG, formatted text content, embedded images, or asks how to add a rich text editor to Rails.","master","b45dc3fabf3946024f23f2b6d4b3c07cb288cfbb","plugins\u002F10x-swe\u002Fskills\u002Fpython-anti-patterns",0,"https:\u002F\u002Fgithub.com\u002Fcercova-studios\u002F10x-swe","https:\u002F\u002Fgithub.com\u002Fcercova-studios","2026-11-08 11:59:58",{"source":8,"skillName":39,"commands":49,"prompt":59,"zipAvailable":60},[50,53,56],{"tool":51,"command":52},"npx","npx skills add cercova-studios\u002F10x-swe --skill actiontext-richtext",{"tool":54,"command":55},"bunx","bunx skills add cercova-studios\u002F10x-swe --skill actiontext-richtext",{"tool":57,"command":58},"pnpm","pnpm dlx skills add cercova-studios\u002F10x-swe --skill actiontext-richtext","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fcercova-studios\u002F10x-swe\u002Fblob\u002Fmain\u002Fplugins\u002F10x-swe\u002Fskills\u002Fpython-anti-patterns\u002FSKILL.md",true,[62],{"path":63,"resourceType":64,"resourceTypeDesc":65,"sizeBytes":66,"sourceHtmlUrl":67},"evals.md","REFERENCE","参考文档",770,"https:\u002F\u002Fgithub.com\u002FMadBomber\u002Fexperiments\u002Fblob\u002Fmaster\u002Fai_misc\u002Fskills\u002Frails-skills\u002F35-actiontext-richtext\u002Fevals.md",[69,109,145,165,184,196],{"skillNo":70,"name":71,"nameZh":6,"description":72,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":73,"licenseFileUrl":74,"sourceHtmlUrl":75,"categories":76,"keywords":82,"publishedAt":34},"01M6CD3T6EQ9N5KPNXCM6ABHVA","turnstile-spin","Set up Cloudflare Turnstile end-to-end in a project. Scan the codebase, create the widget via the Cloudflare API, embed it where user requests need bot verification (form submissions, SPA actions, API endpoints, download links, comment or vote submissions, etc.), wire canonical server-side siteverify in the customer's existing backend, validate, and persist the skill. Load this when a user asks to add Turnstile, set up CAPTCHA, protect a form or endpoint from bots, or fix a Turnstile integration. Uses Cloudflare's documented Turnstile contract.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fcercova-studios\u002F10x-swe\u002Fblob\u002Fmain\u002Fplugins\u002F10x-swe\u002Fskills\u002Fturnstile-spin\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fcercova-studios\u002F10x-swe\u002Fblob\u002Fmain\u002Fplugins\u002F10x-swe\u002Fskills\u002Fturnstile-spin\u002FSKILL.md",[77],{"categoryNo":78,"categoryName":79,"taxonomyType":80,"taxonomyTypeDesc":81},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",[83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,33],"turnstile spin","bot","customer","plugin","create","permissions","verification","cloudflare","integration","server","actions","nextjs","SET","api","astro","sveltekit","fix","backend","up","endpoints","bots","project","spa","end","app","SWE",{"skillNo":110,"name":111,"nameZh":6,"description":112,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":73,"licenseFileUrl":113,"sourceHtmlUrl":114,"categories":115,"keywords":127,"publishedAt":34},"01M6CD0BJYRNV610HYYPX933RE","frontend-design","Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.","https:\u002F\u002Fgithub.com\u002Fcercova-studios\u002F10x-swe\u002Fblob\u002Fmain\u002Fplugins\u002F10x-swe\u002Fskills\u002Ffrontend-design\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fcercova-studios\u002F10x-swe\u002Fblob\u002Fmain\u002Fplugins\u002F10x-swe\u002Fskills\u002Ffrontend-design\u002FSKILL.md",[116,119,122],{"categoryNo":117,"categoryName":118,"taxonomyType":80,"taxonomyTypeDesc":81},"01JBSEEDCAT000000000000009","前端开发",{"categoryNo":120,"categoryName":121,"taxonomyType":80,"taxonomyTypeDesc":81},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":123,"categoryName":124,"taxonomyType":125,"taxonomyTypeDesc":126},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[128,129,130,131,132,133,87,24,134,135,136,137,27,138,139,140,141,142,143,144,33],"frontend","design","frontend design","web","components","web components","Production","applications","quality","user","creative","build","pages","aesthetics","with","high","generic",{"skillNo":146,"name":147,"nameZh":6,"description":148,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":149,"categories":150,"keywords":151,"publishedAt":34},"01M6CD4QX8C4DST98AY21HEYCM","source-insights","Prepare inspected source evidence, preserve exact citations, and publish reviewed insights into an explicit local library.","https:\u002F\u002Fgithub.com\u002Fcercova-studios\u002F10x-swe\u002Fblob\u002Fmain\u002Fplugins\u002Fknowledge\u002Fskills\u002Fsource-insights\u002FSKILL.md",[],[152,153,154,155,156,157,158,159,160,161,162,163,164],"source insights","insights","source","workflows","prepare","library","publish","Citations","global","session","evidence","local","preserve",{"skillNo":166,"name":167,"nameZh":6,"description":168,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":169,"categories":170,"keywords":174,"publishedAt":34},"01M6CD4N1HVNC1EXPEBZT7YS31","skill-graph","Discover skills and workflows through independent lexical search, relationship paths and a terminal graph.","https:\u002F\u002Fgithub.com\u002Fcercova-studios\u002F10x-swe\u002Fblob\u002Fmain\u002Fplugins\u002Fknowledge\u002Fskills\u002Fskill-graph\u002FSKILL.md",[171],{"categoryNo":172,"categoryName":173,"taxonomyType":80,"taxonomyTypeDesc":81},"01JBSEEDCAT000000000000023","Skill与智能体开发",[175,176,177,155,86,178,179,160,180,181,182,183,108],"graph","skill graph","terminal","search","10x","relationship","discover","paths","discover skills",{"skillNo":185,"name":186,"nameZh":6,"description":187,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":188,"categories":189,"keywords":190,"publishedAt":34},"01M6CD4HQKXNZ57YEGD8QVK6Z6","session-search","Recall public session turns with exact provenance, bounded excerpts and independent piped exports.","https:\u002F\u002Fgithub.com\u002Fcercova-studios\u002F10x-swe\u002Fblob\u002Fmain\u002Fplugins\u002Fknowledge\u002Fskills\u002Fsession-search\u002FSKILL.md",[],[178,161,191,155,192,193,194,160,142,153,154,195],"session search","provenance","recall","public","bounded",{"skillNo":197,"name":198,"nameZh":6,"description":199,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":200,"categories":201,"keywords":208,"publishedAt":34},"01M6CD4ET7DVNBYPDAMAYMSK2T","newsletter","Produce a private local AI newsletter from bounded public research, with cited deep dives, HTML\u002FMarkdown output, Dagu scheduling and seven-day retention.","https:\u002F\u002Fgithub.com\u002Fcercova-studios\u002F10x-swe\u002Fblob\u002Fmain\u002Fplugins\u002Fknowledge\u002Fskills\u002Fnewsletter\u002FSKILL.md",[202,205],{"categoryNo":203,"categoryName":204,"taxonomyType":80,"taxonomyTypeDesc":81},"01JBSEEDCAT000000000000005","邮件与沟通",{"categoryNo":206,"categoryName":207,"taxonomyType":80,"taxonomyTypeDesc":81},"01JBSEEDCAT000000000000021","资料检索与研究",[198,209,155,210,211,194,160,212,213,214,215,216,163,217,218,219,142,195],"research","produce","markdown","html","daily","scheduling","local ai","dagu","deep","retention","output"]