[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6HRZ1TSPZP5KA9JYST8MBWJ":3,"skill-same:01M6HRZ1TSPZP5KA9JYST8MBWJ":85},{"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":35,"linkOnly":36,"markdownContent":37,"markdownBody":38,"frontMatter":39,"refName":44,"commitSha":45,"skillDirectory":5,"forksCount":46,"repositoryHtmlUrl":47,"repositoryHomepageUrl":6,"ownerHtmlUrl":48,"ownerBlogUrl":6,"ownerDescription":49,"updatedAt":50,"install":51,"resources":64},"01M6HRZ1TSPZP5KA9JYST8MBWJ","connect-query",null,"Build typed ConnectRPC data flows with Connect Query and Protobuf v2. Use for API calls, mutations, query hooks, transports, invalidation, or generated clients.","malinskibeniamin\u002Fskills","malinskibeniamin","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F9860550?v=4","01M6HR395Z9MM67BCKMW1WKTJS","Beniamin Malinski","01M6HR39AP95WH9NHANQ91FAJ0",4,"MIT","https:\u002F\u002Fgithub.com\u002Fmalinskibeniamin\u002Fskills\u002Fblob\u002Fmain\u002Fconnect-query\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34],"connect","query","connect query","protobuf","data","api","generated","use","hooks","mutations","build","clients","flows","with","calls","for","2026-11-10 10:12:30",false,"---\nname: connect-query\ndescription: Build typed ConnectRPC data flows with Connect Query and Protobuf v2. Use for API calls, mutations, query hooks, transports, invalidation, or generated clients.\npaths:\n  - \"**\u002F*_connectquery*\"\n  - \"**\u002F*_pb*\"\n  - \"**\u002Fgen\u002F**\"\n---\n\nRun `\u002Fread-the-damn-docs` before current ConnectRPC\u002FConnect Query\u002FProtobuf API guidance.\n\n## Enforce\n\n- In ConnectRPC files, ban raw TanStack `useQuery`\u002F`useMutation`; use Connect Query, except `useTransport`\u002F`callUnaryMethod`.\n- `invalidateQueries()` needs a query key.\n- Prefer ConnectRPC transport over `axios`\u002F`fetch`.\n- Protobuf v2: `create(Schema)`, not `new Message()`; `MessageShape`\u002F`MessageInitShape`, not `PlainMessage`\u002F`PartialMessage`; no manual `$typeName`.\n\nEscape: `\u002F\u002F allow: direct-query [reason]`.\n\n## Query discipline\n\n- Define 2-3 semantic cache constants centrally; `Infinity` only when own invalidation is exclusive. QueryClient owns retry: retry network\u002F5xx, never 4xx.\n- Hook `transform`\u002F`select` returns display-ready data and enforces page size; components do not parse.\n- Invalidate rather than refetch and always await it. Keys are service\u002Fmethod broad but cardinality-aware.\n- Loader and hook use identical query keys; test parity to prevent double fetches.\n- One hook per RPC; split multi-RPC pages. Mutation names end `Mutation`, or `WithToast` when owning toasts.\n- Client protovalidate checks sent data, not server-validated responses.\n- Proto optionals use `undefined`, never `null`; unbounded lists use infinite query\u002Fload-more; polling uses `refetchInterval`.\n\nEditable query data: read [writable derived state](..\u002Ffrontend-invariants\u002FWRITABLE-DERIVED-STATE.md)\nfor local overrides and save\u002Frefetch handoff; keep server truth in the query cache.\n\nTimestamp, Duration, Any, caches: [REFERENCE.md](REFERENCE.md). Install: [SETUP.md](SETUP.md).\n","Run `\u002Fread-the-damn-docs` before current ConnectRPC\u002FConnect Query\u002FProtobuf API guidance.\n\n## Enforce\n\n- In ConnectRPC files, ban raw TanStack `useQuery`\u002F`useMutation`; use Connect Query, except `useTransport`\u002F`callUnaryMethod`.\n- `invalidateQueries()` needs a query key.\n- Prefer ConnectRPC transport over `axios`\u002F`fetch`.\n- Protobuf v2: `create(Schema)`, not `new Message()`; `MessageShape`\u002F`MessageInitShape`, not `PlainMessage`\u002F`PartialMessage`; no manual `$typeName`.\n\nEscape: `\u002F\u002F allow: direct-query [reason]`.\n\n## Query discipline\n\n- Define 2-3 semantic cache constants centrally; `Infinity` only when own invalidation is exclusive. QueryClient owns retry: retry network\u002F5xx, never 4xx.\n- Hook `transform`\u002F`select` returns display-ready data and enforces page size; components do not parse.\n- Invalidate rather than refetch and always await it. Keys are service\u002Fmethod broad but cardinality-aware.\n- Loader and hook use identical query keys; test parity to prevent double fetches.\n- One hook per RPC; split multi-RPC pages. Mutation names end `Mutation`, or `WithToast` when owning toasts.\n- Client protovalidate checks sent data, not server-validated responses.\n- Proto optionals use `undefined`, never `null`; unbounded lists use infinite query\u002Fload-more; polling uses `refetchInterval`.\n\nEditable query data: read [writable derived state](..\u002Ffrontend-invariants\u002FWRITABLE-DERIVED-STATE.md)\nfor local overrides and save\u002Frefetch handoff; keep server truth in the query cache.\n\nTimestamp, Duration, Any, caches: [REFERENCE.md](REFERENCE.md). Install: [SETUP.md](SETUP.md).\n",{"name":5,"paths":40,"description":7},[41,42,43],"**\u002F*_connectquery*","**\u002F*_pb*","**\u002Fgen\u002F**","main","06d495a3ad2db01f025029eda11f21a2c29988c9",1,"https:\u002F\u002Fgithub.com\u002Fmalinskibeniamin\u002Fskills","https:\u002F\u002Fgithub.com\u002Fmalinskibeniamin","Software Engineer ","2026-11-12 04:21:00",{"source":8,"skillName":5,"commands":52,"prompt":62,"zipAvailable":63},[53,56,59],{"tool":54,"command":55},"npx","npx skills add malinskibeniamin\u002Fskills --skill connect-query",{"tool":57,"command":58},"bunx","bunx skills add malinskibeniamin\u002Fskills --skill connect-query",{"tool":60,"command":61},"pnpm","pnpm dlx skills add malinskibeniamin\u002Fskills --skill connect-query","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmalinskibeniamin\u002Fskills\u002Fblob\u002Fmain\u002Fconnect-query\u002FSKILL.md",true,[65,71,77,81],{"path":66,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":69,"sourceHtmlUrl":70},"REFERENCE.md","REFERENCE","参考文档",5037,"https:\u002F\u002Fgithub.com\u002Fmalinskibeniamin\u002Fskills\u002Fblob\u002Fmain\u002Fconnect-query\u002FREFERENCE.md",{"path":72,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":75,"sourceHtmlUrl":76},"scripts\u002F_hook-lib.sh","SCRIPT","脚本",24,"https:\u002F\u002Fgithub.com\u002Fmalinskibeniamin\u002Fskills\u002Fblob\u002Fmain\u002Fconnect-query\u002Fscripts\u002F_hook-lib.sh",{"path":78,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":79,"sourceHtmlUrl":80},"scripts\u002Fconnect-query-check.sh",5334,"https:\u002F\u002Fgithub.com\u002Fmalinskibeniamin\u002Fskills\u002Fblob\u002Fmain\u002Fconnect-query\u002Fscripts\u002Fconnect-query-check.sh",{"path":82,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":83,"sourceHtmlUrl":84},"SETUP.md",3511,"https:\u002F\u002Fgithub.com\u002Fmalinskibeniamin\u002Fskills\u002Fblob\u002Fmain\u002Fconnect-query\u002FSETUP.md",[86,106,128,133,138,162],{"skillNo":87,"name":88,"nameZh":6,"description":89,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":35},"01M70WY35N42VJT16W9MA8CCGX","hill-climb","Optimize a defined outcome through bounded evaluation loops. Use for hill-climb requests or repeated improvement against an executable eval, benchmark, or visual comparison; not a one-pass review.","https:\u002F\u002Fgithub.com\u002Fmalinskibeniamin\u002Fskills\u002Fblob\u002Fmain\u002Fhill-climb\u002FSKILL.md",[],[93,94,95,96,97,98,26,99,100,101,102,34,103,104,105],"hill climb","bounded","improvement","review","visual","comparison","eval","benchmark","Evaluation","outcome","requests","optimize","loops",{"skillNo":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":110,"sourceHtmlUrl":111,"categories":112,"keywords":113,"publishedAt":35},"01M70WXTA2JQ9SN3QZPHHCYB90","gestures","Build or fix web drag, swipe, sheet, reorder, and hold interactions: direct tracking, rubber banding, release velocity, momentum, snap points, and interruption. Not native React Native or Swift.","https:\u002F\u002Fgithub.com\u002Fmalinskibeniamin\u002Fskills\u002Fblob\u002Fmain\u002Fgestures\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fmalinskibeniamin\u002Fskills\u002Fblob\u002Fmain\u002Fgestures\u002FSKILL.md",[],[108,29,114,115,116,117,118,119,120,121,122,123,124,125,126,127],"native","velocity","web","drag","react native","snap","release","swift","react","swipe","direct","tracking","fix","sheet",{"skillNo":129,"name":88,"nameZh":6,"description":89,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":132,"publishedAt":35},"01M70WKSB2PTJGVH7C9XC1FEED","https:\u002F\u002Fgithub.com\u002Fmalinskibeniamin\u002Fskills\u002Fblob\u002Fmain\u002Fcodex-skills\u002Fhill-climb\u002FSKILL.md",[],[93,34,94,96,97,98,26,99,100,102,101,95,104,105,103],{"skillNo":134,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":135,"categories":136,"keywords":137,"publishedAt":35},"01M70WKGYKGN1J786GK8N3RGH1","https:\u002F\u002Fgithub.com\u002Fmalinskibeniamin\u002Fskills\u002Fblob\u002Fmain\u002Fcodex-skills\u002Fgestures\u002FSKILL.md",[],[108,120,121,122,123,124,125,126,127,29,114,115,116,117,118,119],{"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":142,"sourceHtmlUrl":143,"categories":144,"keywords":145,"publishedAt":35},"01M6HS2326AZFPF8G9C2KW4AT0","improve-animations","Audit existing web UI motion and prioritize concrete improvements or self-contained implementation plans. Use for a motion roadmap; animate owns implementation and diff review.","https:\u002F\u002Fgithub.com\u002Fmalinskibeniamin\u002Fskills\u002Fblob\u002Fmain\u002Fimprove-animations\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fmalinskibeniamin\u002Fskills\u002Fblob\u002Fmain\u002Fimprove-animations\u002FSKILL.md",[],[146,147,34,148,149,150,26,151,152,153,154,155,156,157,158,159,116,160,161,96],"improve animations","improve","ui","roadmap","Existing","animate","motion","implementation","plans","diff review","prioritize","web ui","audit","diff","self","ui motion",{"skillNo":163,"name":164,"nameZh":6,"description":165,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":166,"sourceHtmlUrl":167,"categories":168,"keywords":169,"publishedAt":35},"01M6HS0AADDXBB0S8B42R0G82K","effect-ts","Use when setting up a repository that uses the Effect TypeScript library.","https:\u002F\u002Fgithub.com\u002Fmalinskibeniamin\u002Fskills\u002Fblob\u002Fmain\u002Feffect-ts\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fmalinskibeniamin\u002Fskills\u002Fblob\u002Fmain\u002Feffect-ts\u002FSKILL.md",[],[170,171,172,26,173,174,175],"effect ts","effect","library","typescript","up","repository"]