[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DWN3MNPTP9ZK7NN2NNGZ7T":3,"skill-same:01M6DWN3MNPTP9ZK7NN2NNGZ7T":86},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":25,"publishedAt":46,"linkOnly":47,"markdownContent":48,"markdownBody":49,"frontMatter":50,"refName":56,"commitSha":57,"skillDirectory":58,"forksCount":59,"repositoryHtmlUrl":60,"repositoryHomepageUrl":61,"ownerHtmlUrl":62,"ownerBlogUrl":63,"ownerDescription":64,"updatedAt":65,"install":66,"resources":79},"01M6DWN3MNPTP9ZK7NN2NNGZ7T","programming-ruby",null,"Ruby and Rails practices: objects, services, ActiveRecord persistence, transactions, Active Job boundaries. Use when writing or reviewing Ruby or Rails.","Muvon\u002Foctomind-tap","Muvon","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F25336907?v=4","01M6DWA4KTRX4J73CW5CECKAD0","01M6DWA4QSWFGYE6WDMAMFF1WE",6,"Apache-2.0","https:\u002F\u002Fgithub.com\u002FMuvon\u002Foctomind-tap\u002Fblob\u002Fmaster\u002Fskills\u002Fprogramming-ruby\u002FSKILL.md",[17,22],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000036","内容创作者",[26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],"programming","programming ruby","ruby","use","bundler","gemfile","when","writing","guidance","services","file","best practices","development","developer","active","rails","transactions","only","objects","projects","2026-11-10 10:12:30",false,"---\nname: programming-ruby\ntitle: \"Ruby and Rails Development Best Practices\"\ndescription: \"Ruby and Rails practices: objects, services, ActiveRecord persistence, transactions, Active Job boundaries. Use when writing or reviewing Ruby or Rails.\"\nlicense: Apache-2.0\ncompatibility: \"Requires a supported Ruby and Bundler; Rails guidance applies only to Rails projects.\"\ndomains: developer\nrules:\n  - file(Gemfile)\n  - content(ruby)\n---\n\n## Overview\n\nWrite idiomatic Ruby with explicit data contracts and predictable persistence. As of 2026-10: Ruby 4.0 is the current stable line and Rails 8.1 (8.1.4) the latest Rails; Rails 7.2 has shipped its final release, so treat 7.2 apps as upgrade candidates. Rails guidance below targets Rails 8.x APIs. Check `.ruby-version`, the Gemfile\u002Flockfile, Ruby implementation, and Rails version before using newer features. Preserve existing application conventions and dependencies; a small change does not need a new service layer or gem extraction.\n\n## Mental model\n\nRuby's flexibility makes names and failure contracts important. Keep domain behavior near the object that owns it; extract orchestration only when it has independent responsibilities. Rails conventions reduce boilerplate, but callbacks, transactions, and asynchronous jobs have distinct timing and failure semantics.\n\n## Current language features\n\n- Ruby 3.2+ `Data.define` describes fixed value records; members cannot be reassigned, but referenced strings\u002Farrays\u002Fhashes are not deeply frozen. `Struct` is mutable unless frozen. Copy\u002Ffreeze nested values only when the contract needs it.\n- Ruby 3.4's implicit block parameter `it` suits a short, obvious block; use named parameters for nested or nontrivial logic. New syntax should improve readability rather than demonstrate novelty.\n- Ruby 4 makes `Set` a core class and adds `Array#rfind` for reverse search. Keep older-version `require \"set\"` compatibility when the repository supports older Rubies.\n- Ruby 4's Ruby Box and Ractor remain experimental; ZJIT is also experimental. Do not introduce them or switch JITs as routine cleanup.\n- Keep frozen-string policy explicit and consistent with the project. `# frozen_string_literal: true` freezes literals, not all strings; use `+\"\"` or an owned duplicate when mutation is intended.\n\n## Values and control flow\n\n- Use keyword arguments where positional arguments hide intent. Forward positional arguments, keywords, and blocks accurately; Ruby 3 distinguishes a positional hash from keyword arguments.\n- Prefer `fetch` for required hash\u002Fconfiguration keys; use `[]`, `dig`, and `&.` only where absence is valid. A chain of nil-tolerant operations must not conceal a missing invariant.\n- Ruby treats only `nil` and `false` as falsey. `||=` does not cache a valid false\u002Fnil result; use an explicit initialization check when those results matter.\n- Use explicit parsing such as `Integer(text, 10)` for validated integer input; `to_i` can silently accept malformed data. Keep absence distinct from invalid syntax.\n- Use `map` for transformation, `each` for effects, and `filter_map` only when discarding both nil and false is intended. Keep long chains readable with named intermediate values.\n- A `return` inside a normal block exits its enclosing method; an escaped proc can raise `LocalJumpError` when that method has returned. A lambda's `return` exits the lambda. Use `next` for the current block invocation.\n- Predicate methods conventionally end in `?`; `!` identifies a more dangerous counterpart, not a universal promise to mutate or raise. Follow the specific method contract.\n\n## Errors and resources\n\n- Rescue the specific error where recovery or translation is meaningful. Ordinary custom errors derive from `StandardError`; do not broadly rescue `Exception`, which includes shutdown and interrupt conditions.\n- Preserve causes when wrapping failures. Avoid rescue modifiers, empty rescues, and fallback empty collections that convert broken I\u002FO or invalid data into success.\n- Use block forms of resource APIs, or `ensure` when cleanup must span custom control flow. Do not return from `ensure`, which can replace results or suppress errors.\n- Bound retries to identified transient failures and account for side effects already performed. Prefer an explicit not-found result only where the caller expects one.\n\n## Rails persistence and jobs\n\n- Keep entity behavior on the model when cohesive; extract a query, form, or orchestration object only when it clarifies a real boundary. Controllers should adapt HTTP and authorize operations, not dictate arbitrary class counts.\n- Rails 8's `params.expect` can require and permit an expected parameter shape together. Strong Parameters filter assignment; they do not authorize access or validate all domain constraints.\n- Back uniqueness and cross-record invariants with database constraints and appropriate locking. A model validation alone cannot prevent races. Choose eager loading based on accessed relationships.\n- Transactions cover database work on their connection; they do not roll back HTTP calls or restore in-memory objects. Use raising persistence methods when failure must abort; ordinary `save` returning false does not trigger rollback automatically.\n- `ActiveRecord::Rollback` rolls back but is swallowed by the transaction boundary. Do not rescue database statement errors inside a transaction and continue using a potentially aborted transaction.\n- Schedule external effects after commit when appropriate; use durable coordination when delivery must survive a process crash. Make jobs safe under duplicate execution and bounded retries.\n- On Rails 8.1, long-running jobs can include `ActiveJob::Continuable` and split work into `step`s with a cursor so a deploy or restart resumes from the last completed step. Each step must still be idempotent, because a step interrupted mid-way reruns.\n- Rails 8.1's `has_many :x, deprecated: true` reports remaining uses of an association before removal; prefer it over deleting an association blind.\n- Active Job supports records via GlobalID, which reloads them later. Choose IDs, records, or explicit snapshots according to desired semantics and handle deletion before execution. Verify enqueue-after-commit behavior for the actual adapter\u002Fdatabase setup.\n\n## Example\n\nPreserve a legitimate false value and reject a malformed required value:\n\n```ruby\n# frozen_string_literal: true\n\ndef read_settings(input)\n  enabled = input.fetch(\"enabled\")\n  unless enabled == true || enabled == false\n    raise ArgumentError, \"enabled must be boolean\"\n  end\n\n  attempts = Integer(input.fetch(\"attempts\"), 10)\n  raise ArgumentError, \"attempts must be positive\" unless attempts.positive?\n\n  { enabled: enabled, attempts: attempts }\nend\n```\n\nThis boundary expects string input for `attempts`, such as form\u002Fconfig text. Missing keys and malformed values remain explicit failures.\n\n## Checklist\n\n- Check Ruby\u002FRails version gates and retain the project's formatter and testing conventions.\n- Distinguish nil\u002Ffalse\u002Fmissing from invalid data; check mutation and block-return semantics.\n- Verify transaction failure, database constraints, job duplication, and commit timing.\n- Use installed project commands through `bundle exec`, binstubs, or a Rails 8.1 `bin\u002Fci` when present and authorized; test observable behavior with the existing Minitest\u002FRSpec setup. Do not replace fixtures or test libraries by preference.\n\n## References\n\n- [Ruby release lines](https:\u002F\u002Fwww.ruby-lang.org\u002Fen\u002Fdownloads\u002Freleases\u002F)\n- [Ruby 4.0 features and experimental status](https:\u002F\u002Fwww.ruby-lang.org\u002Fen\u002Fnews\u002F2025\u002F12\u002F25\u002Fruby-4-0-0-released\u002F)\n- [Ruby 3.4 changes](https:\u002F\u002Fwww.ruby-lang.org\u002Fen\u002Fnews\u002F2024\u002F12\u002F25\u002Fruby-3-4-0-released\u002F)\n- [Data immutability](https:\u002F\u002Fdocs.ruby-lang.org\u002Fen\u002F4.0\u002FData.html), [Proc control flow](https:\u002F\u002Fdocs.ruby-lang.org\u002Fen\u002F4.0\u002FProc.html), and [Hash access](https:\u002F\u002Fdocs.ruby-lang.org\u002Fen\u002F4.0\u002FHash.html)\n- [Rails 8.1 release](https:\u002F\u002Frubyonrails.org\u002F2025\u002F10\u002F22\u002Frails-8-1)\n- [Strong Parameters](https:\u002F\u002Fapi.rubyonrails.org\u002Fclasses\u002FActionController\u002FParameters.html)\n- [Active Record transactions](https:\u002F\u002Fapi.rubyonrails.org\u002Fclasses\u002FActiveRecord\u002FTransactions\u002FClassMethods.html)\n- [Active Job and transaction behavior](https:\u002F\u002Fguides.rubyonrails.org\u002Factive_job_basics.html)\n","## Overview\n\nWrite idiomatic Ruby with explicit data contracts and predictable persistence. As of 2026-10: Ruby 4.0 is the current stable line and Rails 8.1 (8.1.4) the latest Rails; Rails 7.2 has shipped its final release, so treat 7.2 apps as upgrade candidates. Rails guidance below targets Rails 8.x APIs. Check `.ruby-version`, the Gemfile\u002Flockfile, Ruby implementation, and Rails version before using newer features. Preserve existing application conventions and dependencies; a small change does not need a new service layer or gem extraction.\n\n## Mental model\n\nRuby's flexibility makes names and failure contracts important. Keep domain behavior near the object that owns it; extract orchestration only when it has independent responsibilities. Rails conventions reduce boilerplate, but callbacks, transactions, and asynchronous jobs have distinct timing and failure semantics.\n\n## Current language features\n\n- Ruby 3.2+ `Data.define` describes fixed value records; members cannot be reassigned, but referenced strings\u002Farrays\u002Fhashes are not deeply frozen. `Struct` is mutable unless frozen. Copy\u002Ffreeze nested values only when the contract needs it.\n- Ruby 3.4's implicit block parameter `it` suits a short, obvious block; use named parameters for nested or nontrivial logic. New syntax should improve readability rather than demonstrate novelty.\n- Ruby 4 makes `Set` a core class and adds `Array#rfind` for reverse search. Keep older-version `require \"set\"` compatibility when the repository supports older Rubies.\n- Ruby 4's Ruby Box and Ractor remain experimental; ZJIT is also experimental. Do not introduce them or switch JITs as routine cleanup.\n- Keep frozen-string policy explicit and consistent with the project. `# frozen_string_literal: true` freezes literals, not all strings; use `+\"\"` or an owned duplicate when mutation is intended.\n\n## Values and control flow\n\n- Use keyword arguments where positional arguments hide intent. Forward positional arguments, keywords, and blocks accurately; Ruby 3 distinguishes a positional hash from keyword arguments.\n- Prefer `fetch` for required hash\u002Fconfiguration keys; use `[]`, `dig`, and `&.` only where absence is valid. A chain of nil-tolerant operations must not conceal a missing invariant.\n- Ruby treats only `nil` and `false` as falsey. `||=` does not cache a valid false\u002Fnil result; use an explicit initialization check when those results matter.\n- Use explicit parsing such as `Integer(text, 10)` for validated integer input; `to_i` can silently accept malformed data. Keep absence distinct from invalid syntax.\n- Use `map` for transformation, `each` for effects, and `filter_map` only when discarding both nil and false is intended. Keep long chains readable with named intermediate values.\n- A `return` inside a normal block exits its enclosing method; an escaped proc can raise `LocalJumpError` when that method has returned. A lambda's `return` exits the lambda. Use `next` for the current block invocation.\n- Predicate methods conventionally end in `?`; `!` identifies a more dangerous counterpart, not a universal promise to mutate or raise. Follow the specific method contract.\n\n## Errors and resources\n\n- Rescue the specific error where recovery or translation is meaningful. Ordinary custom errors derive from `StandardError`; do not broadly rescue `Exception`, which includes shutdown and interrupt conditions.\n- Preserve causes when wrapping failures. Avoid rescue modifiers, empty rescues, and fallback empty collections that convert broken I\u002FO or invalid data into success.\n- Use block forms of resource APIs, or `ensure` when cleanup must span custom control flow. Do not return from `ensure`, which can replace results or suppress errors.\n- Bound retries to identified transient failures and account for side effects already performed. Prefer an explicit not-found result only where the caller expects one.\n\n## Rails persistence and jobs\n\n- Keep entity behavior on the model when cohesive; extract a query, form, or orchestration object only when it clarifies a real boundary. Controllers should adapt HTTP and authorize operations, not dictate arbitrary class counts.\n- Rails 8's `params.expect` can require and permit an expected parameter shape together. Strong Parameters filter assignment; they do not authorize access or validate all domain constraints.\n- Back uniqueness and cross-record invariants with database constraints and appropriate locking. A model validation alone cannot prevent races. Choose eager loading based on accessed relationships.\n- Transactions cover database work on their connection; they do not roll back HTTP calls or restore in-memory objects. Use raising persistence methods when failure must abort; ordinary `save` returning false does not trigger rollback automatically.\n- `ActiveRecord::Rollback` rolls back but is swallowed by the transaction boundary. Do not rescue database statement errors inside a transaction and continue using a potentially aborted transaction.\n- Schedule external effects after commit when appropriate; use durable coordination when delivery must survive a process crash. Make jobs safe under duplicate execution and bounded retries.\n- On Rails 8.1, long-running jobs can include `ActiveJob::Continuable` and split work into `step`s with a cursor so a deploy or restart resumes from the last completed step. Each step must still be idempotent, because a step interrupted mid-way reruns.\n- Rails 8.1's `has_many :x, deprecated: true` reports remaining uses of an association before removal; prefer it over deleting an association blind.\n- Active Job supports records via GlobalID, which reloads them later. Choose IDs, records, or explicit snapshots according to desired semantics and handle deletion before execution. Verify enqueue-after-commit behavior for the actual adapter\u002Fdatabase setup.\n\n## Example\n\nPreserve a legitimate false value and reject a malformed required value:\n\n```ruby\n# frozen_string_literal: true\n\ndef read_settings(input)\n  enabled = input.fetch(\"enabled\")\n  unless enabled == true || enabled == false\n    raise ArgumentError, \"enabled must be boolean\"\n  end\n\n  attempts = Integer(input.fetch(\"attempts\"), 10)\n  raise ArgumentError, \"attempts must be positive\" unless attempts.positive?\n\n  { enabled: enabled, attempts: attempts }\nend\n```\n\nThis boundary expects string input for `attempts`, such as form\u002Fconfig text. Missing keys and malformed values remain explicit failures.\n\n## Checklist\n\n- Check Ruby\u002FRails version gates and retain the project's formatter and testing conventions.\n- Distinguish nil\u002Ffalse\u002Fmissing from invalid data; check mutation and block-return semantics.\n- Verify transaction failure, database constraints, job duplication, and commit timing.\n- Use installed project commands through `bundle exec`, binstubs, or a Rails 8.1 `bin\u002Fci` when present and authorized; test observable behavior with the existing Minitest\u002FRSpec setup. Do not replace fixtures or test libraries by preference.\n\n## References\n\n- [Ruby release lines](https:\u002F\u002Fwww.ruby-lang.org\u002Fen\u002Fdownloads\u002Freleases\u002F)\n- [Ruby 4.0 features and experimental status](https:\u002F\u002Fwww.ruby-lang.org\u002Fen\u002Fnews\u002F2025\u002F12\u002F25\u002Fruby-4-0-0-released\u002F)\n- [Ruby 3.4 changes](https:\u002F\u002Fwww.ruby-lang.org\u002Fen\u002Fnews\u002F2024\u002F12\u002F25\u002Fruby-3-4-0-released\u002F)\n- [Data immutability](https:\u002F\u002Fdocs.ruby-lang.org\u002Fen\u002F4.0\u002FData.html), [Proc control flow](https:\u002F\u002Fdocs.ruby-lang.org\u002Fen\u002F4.0\u002FProc.html), and [Hash access](https:\u002F\u002Fdocs.ruby-lang.org\u002Fen\u002F4.0\u002FHash.html)\n- [Rails 8.1 release](https:\u002F\u002Frubyonrails.org\u002F2025\u002F10\u002F22\u002Frails-8-1)\n- [Strong Parameters](https:\u002F\u002Fapi.rubyonrails.org\u002Fclasses\u002FActionController\u002FParameters.html)\n- [Active Record transactions](https:\u002F\u002Fapi.rubyonrails.org\u002Fclasses\u002FActiveRecord\u002FTransactions\u002FClassMethods.html)\n- [Active Job and transaction behavior](https:\u002F\u002Fguides.rubyonrails.org\u002Factive_job_basics.html)\n",{"name":5,"rules":51,"title":54,"domains":39,"license":14,"description":7,"compatibility":55},[52,53],"file(Gemfile)","content(ruby)","Ruby and Rails Development Best Practices","Requires a supported Ruby and Bundler; Rails guidance applies only to Rails projects.","master","e9e4a19559669b1627b1ac5ed3f77b8e36cfad95","skills\u002Fprogramming-ruby",0,"https:\u002F\u002Fgithub.com\u002FMuvon\u002Foctomind-tap","https:\u002F\u002Foctomind.run\u002Ftap\u002F","https:\u002F\u002Fgithub.com\u002FMuvon","https:\u002F\u002Fmuvon.io","We bring ideas to life","2026-11-10 20:30:54",{"source":8,"skillName":5,"commands":67,"prompt":77,"zipAvailable":78},[68,71,74],{"tool":69,"command":70},"npx","npx skills add Muvon\u002Foctomind-tap --skill programming-ruby",{"tool":72,"command":73},"bunx","bunx skills add Muvon\u002Foctomind-tap --skill programming-ruby",{"tool":75,"command":76},"pnpm","pnpm dlx skills add Muvon\u002Foctomind-tap --skill programming-ruby","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FMuvon\u002Foctomind-tap\u002Fblob\u002Fmaster\u002Fskills\u002Fprogramming-ruby\u002FSKILL.md",true,[80],{"path":81,"resourceType":82,"resourceTypeDesc":83,"sizeBytes":84,"sourceHtmlUrl":85},"validate","OTHER","其他",176,"https:\u002F\u002Fgithub.com\u002FMuvon\u002Foctomind-tap\u002Fblob\u002Fmaster\u002Fskills\u002Fprogramming-ruby\u002Fvalidate",[87,123,149,169,193,219],{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":102,"publishedAt":46},"01M70SFC5CTHRKA9B97N1ARVZ2","seo-content-refresh","Finds decaying pages, picks update, merge, redirect or remove, and briefs each refresh. Use to prioritize existing content and judge whether it helped.","https:\u002F\u002Fgithub.com\u002FMuvon\u002Foctomind-tap\u002Fblob\u002Fmaster\u002Fskills\u002Fseo-content-refresh\u002FSKILL.md",[93,98,101],{"categoryNo":94,"categoryName":95,"taxonomyType":96,"taxonomyTypeDesc":97},"01JBSEEDCAT000000000000019","营销推广","SCENARIO","使用场景",{"categoryNo":99,"categoryName":100,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000035","市场营销",{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},[103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122],"seo content refresh","seo","seo content","content refresh","refresh","content","posts","remove","web search","performance","search","traffic","access","drop","websearch","revamp","merge","diagnosis","update","decay",{"skillNo":124,"name":125,"nameZh":6,"description":126,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":127,"categories":128,"keywords":131,"publishedAt":46},"01M70SBWQCHGH7HGS51Y0GTKKW","marketing-review-program","Plans how to ask real customers for honest public reviews: site choice, invitation copy, incentive and disclosure rules. Use to start a review program.","https:\u002F\u002Fgithub.com\u002FMuvon\u002Foctomind-tap\u002Fblob\u002Fmaster\u002Fskills\u002Fmarketing-review-program\u002FSKILL.md",[129,130],{"categoryNo":94,"categoryName":95,"taxonomyType":96,"taxonomyTypeDesc":97},{"categoryNo":99,"categoryName":100,"taxonomyType":20,"taxonomyTypeDesc":21},[132,133,134,135,136,137,111,113,138,139,140,43,141,142,143,144,145,146,147,148],"program","review","marketing review program","marketing","reviews","get","campaign","choice","how to","generated","ask","plan","product","generate","customer","how","request",{"skillNo":150,"name":151,"nameZh":6,"description":152,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":153,"categories":154,"keywords":155,"publishedAt":46},"01M70SBB65Z2FC71Q7DEAXGJBG","geo-source-actions","Turns AI citation findings into ranked per-source actions for Reddit threads, listicles, review sites and videos. Records only. Use after a GEO audit.","https:\u002F\u002Fgithub.com\u002FMuvon\u002Foctomind-tap\u002Fblob\u002Fmaster\u002Fskills\u002Fgeo-source-actions\u002FSKILL.md",[],[156,157,158,159,160,137,111,113,161,162,43,117,133,163,164,165,144,166,167,168],"actions","geo source actions","source","geo","sources","copilot","domains","llms","threads","youtube","audit","action","data",{"skillNo":170,"name":171,"nameZh":6,"description":172,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":173,"categories":174,"keywords":178,"publishedAt":46},"01M70S99D3Y6GF097GTXWBXHPW","commerce-ai-readiness","Audits product feeds, markup and live pages for AI shopping assistants, then lists exact fixes. Use to make a store catalog readable to AI shoppers.","https:\u002F\u002Fgithub.com\u002FMuvon\u002Foctomind-tap\u002Fblob\u002Fmaster\u002Fskills\u002Fcommerce-ai-readiness\u002FSKILL.md",[175],{"categoryNo":176,"categoryName":177,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000031","产品经理",[179,180,181,182,183,184,185,186,187,188,113,189,161,43,115,190,191,144,166,192],"ai readiness","commerce ai readiness","commerce","readiness","feeds","ready","show","shopping","discover","checkout","up","ecommerce","documentation","recommend",{"skillNo":194,"name":195,"nameZh":6,"description":196,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":197,"categories":198,"keywords":202,"publishedAt":46},"01M6DWSX45J42KTK6XASKJRGPA","tap-model-training","Train, evaluate and publish the octomind-embed model behind capability auto-activation. Use when capability triggers or skill semantic() phrases change.","https:\u002F\u002Fgithub.com\u002FMuvon\u002Foctomind-tap\u002Fblob\u002Fmaster\u002Fskills\u002Ftap-model-training\u002FSKILL.md",[199],{"categoryNo":200,"categoryName":201,"taxonomyType":96,"taxonomyTypeDesc":97},"01JBSEEDCAT000000000000023","Skill与智能体开发",[203,204,205,206,207,189,208,209,210,211,212,213,214,215,216,147,217,218,32,121],"model","training","tap","tap model training","scope","eval","uv","auto","dataset","activate","api","capabilities","publish","change","embedding","re",{"skillNo":220,"name":221,"nameZh":6,"description":222,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":223,"categories":224,"keywords":226,"publishedAt":46},"01M6DWSQB7NSW53Z86XM81R1W1","tap-deps-authoring","Write dep scripts for the octomind-tap registry: header comments, platform.sh, mcp vs dep types, npx\u002Fuvx pattern. Use when editing deps\u002F\u003Corg>\u002F\u003Ctool>.sh.","https:\u002F\u002Fgithub.com\u002FMuvon\u002Foctomind-tap\u002Fblob\u002Fmaster\u002Fskills\u002Ftap-deps-authoring\u002FSKILL.md",[225],{"categoryNo":200,"categoryName":201,"taxonomyType":96,"taxonomyTypeDesc":97},[227,205,228,229,230,231,232,233,234,235,236,237,238,239,240,241,32,242,243,244],"deps","tap deps authoring","authoring","DEP","MCP","run","scripts","pattern","install","registry","platform","repo","editing","tool","types","write","org","for"]