[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EB3PZXK9J0JD9D4307X1MZ":3,"skill-same:01M6EB3PZXK9J0JD9D4307X1MZ":80},{"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":30,"linkOnly":31,"markdownContent":32,"markdownBody":33,"frontMatter":34,"refName":35,"commitSha":36,"skillDirectory":37,"forksCount":38,"repositoryHtmlUrl":39,"repositoryHomepageUrl":40,"ownerHtmlUrl":41,"ownerBlogUrl":6,"ownerDescription":42,"updatedAt":43,"install":44,"resources":57},"01M6EB3PZXK9J0JD9D4307X1MZ","angular-state-management",null,"Signals-based state management and NgRx Signal Store. Use when managing application state with Angular Signals or NgRx Signal Store. (triggers: **\u002F*.store.ts, **\u002Fstate\u002F**, angular signals, signal store, computed, effect, linkedSignal)","ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHoangNguyen0403\u002Fagent-skills-standard\u002Fangular-state-management\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29],"state management","state","angular","management","angular state management","effect","use","application","signals","triggers","store","2026-11-10 10:12:30",false,"---\nname: angular-state-management\ndescription: 'Signals-based state management and NgRx Signal Store. Use when managing application state with Angular Signals or NgRx Signal Store. (triggers: **\u002F*.store.ts, **\u002Fstate\u002F**, angular signals, signal store, computed, effect, linkedSignal)'\n---\n\n# State Management\n\n## **Priority: P1 (HIGH)**\n\n## Principles\n\n- **Signals First**: Use **signal()** for all local and shared state. Keep internal signals private: `private _user = signal\u003CUser | null>(null)`.\n- **Computed**: Derive state declaratively using **computed() for derived state** (totals, filtered lists) — it's pure and **cached**.\n- **Services**: For simple apps, a service with signal properties is sufficient. Expose publicly **asReadonly()** (e.g., `user = this._user.asReadonly()`). This **enforces that only the service mutates** state while consumers can still react to changes.\n- **Signal Store**: For complex features, use **@ngrx\u002Fsignals** (**signalStore**) with **withState**, **withComputed**, **withMethods**, and **withEntities()** for normalized collections.\n\n## Modern Signal APIs\n\n- **`linkedSignal(() => source())`**: For dependent **writable** state that **resets when source changes** (e.g., reset selected item when list changes).\n- **`asReadonly()`**: Expose public readonly signals from private writable signals in services.\n- **`untracked()`**: Read a signal inside `computed()`\u002F`effect()` without creating a dependency.\n\n## Guidelines\n\n- **Immutability**: Treat signal values as immutable. **Never mutate state directly** — update using **.set()** or **.update(v => v + 1)**.\n- **Effects**: Use **effect() only for side effects** (e.g., logging, **localStorage sync**, manual DOM manipulation). **Never update signals inside effect()** — this causes circular dependency and is an anti-pattern.\n\n## Anti-Patterns\n\n- **No state logic in components**: Delegate to a Signal Store or Service instead.\n- **No `BehaviorSubject` for state**: Use Signals; keep RxJS only for complex event streams.\n\n## References\n\n- [Signal Store Pattern](references\u002Fsignal-store.md)\n\n","# State Management\n\n## **Priority: P1 (HIGH)**\n\n## Principles\n\n- **Signals First**: Use **signal()** for all local and shared state. Keep internal signals private: `private _user = signal\u003CUser | null>(null)`.\n- **Computed**: Derive state declaratively using **computed() for derived state** (totals, filtered lists) — it's pure and **cached**.\n- **Services**: For simple apps, a service with signal properties is sufficient. Expose publicly **asReadonly()** (e.g., `user = this._user.asReadonly()`). This **enforces that only the service mutates** state while consumers can still react to changes.\n- **Signal Store**: For complex features, use **@ngrx\u002Fsignals** (**signalStore**) with **withState**, **withComputed**, **withMethods**, and **withEntities()** for normalized collections.\n\n## Modern Signal APIs\n\n- **`linkedSignal(() => source())`**: For dependent **writable** state that **resets when source changes** (e.g., reset selected item when list changes).\n- **`asReadonly()`**: Expose public readonly signals from private writable signals in services.\n- **`untracked()`**: Read a signal inside `computed()`\u002F`effect()` without creating a dependency.\n\n## Guidelines\n\n- **Immutability**: Treat signal values as immutable. **Never mutate state directly** — update using **.set()** or **.update(v => v + 1)**.\n- **Effects**: Use **effect() only for side effects** (e.g., logging, **localStorage sync**, manual DOM manipulation). **Never update signals inside effect()** — this causes circular dependency and is an anti-pattern.\n\n## Anti-Patterns\n\n- **No state logic in components**: Delegate to a Signal Store or Service instead.\n- **No `BehaviorSubject` for state**: Use Signals; keep RxJS only for complex event streams.\n\n## References\n\n- [Signal Store Pattern](references\u002Fsignal-store.md)\n\n",{"name":5,"description":7},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002FHoangNguyen0403\u002Fagent-skills-standard\u002Fangular-state-management",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":8,"skillName":5,"commands":45,"prompt":55,"zipAvailable":56},[46,49,52],{"tool":47,"command":48},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill angular-state-management",{"tool":50,"command":51},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill angular-state-management",{"tool":53,"command":54},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill angular-state-management","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHoangNguyen0403\u002Fagent-skills-standard\u002Fangular-state-management\u002FSKILL.md",true,[58,64,68,72,76],{"path":59,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":62,"sourceHtmlUrl":63},"references\u002Fepistemic_protocol.md","REFERENCE","参考文档",3505,"https:\u002F\u002Fgithub.com\u002Fvitalikpestov\u002FSkills-Catalog\u002Fblob\u002Fmain\u002F_AI-Automation\u002Fclaude-code-skills-levnikolaevich\u002Fplugins\u002Fagile-workflow\u002Fskills\u002Fln-311-review-research-worker\u002Freferences\u002Fepistemic_protocol.md",{"path":65,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":66,"sourceHtmlUrl":67},"references\u002Fevaluation_research_contract.md",2033,"https:\u002F\u002Fgithub.com\u002Fvitalikpestov\u002FSkills-Catalog\u002Fblob\u002Fmain\u002F_AI-Automation\u002Fclaude-code-skills-levnikolaevich\u002Fplugins\u002Fagile-workflow\u002Fskills\u002Fln-311-review-research-worker\u002Freferences\u002Fevaluation_research_contract.md",{"path":69,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":70,"sourceHtmlUrl":71},"references\u002Fevaluation_summary_contract.md",1888,"https:\u002F\u002Fgithub.com\u002Fvitalikpestov\u002FSkills-Catalog\u002Fblob\u002Fmain\u002F_AI-Automation\u002Fclaude-code-skills-levnikolaevich\u002Fplugins\u002Fagile-workflow\u002Fskills\u002Fln-311-review-research-worker\u002Freferences\u002Fevaluation_summary_contract.md",{"path":73,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":74,"sourceHtmlUrl":75},"references\u002Fevaluation_worker_runtime_contract.md",2010,"https:\u002F\u002Fgithub.com\u002Fvitalikpestov\u002FSkills-Catalog\u002Fblob\u002Fmain\u002F_AI-Automation\u002Fclaude-code-skills-levnikolaevich\u002Fplugins\u002Fagile-workflow\u002Fskills\u002Fln-311-review-research-worker\u002Freferences\u002Fevaluation_worker_runtime_contract.md",{"path":77,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":78,"sourceHtmlUrl":79},"references\u002Fresearchgraph_mcp_usage.md",2981,"https:\u002F\u002Fgithub.com\u002Fvitalikpestov\u002FSkills-Catalog\u002Fblob\u002Fmain\u002F_AI-Automation\u002Fclaude-code-skills-levnikolaevich\u002Fplugins\u002Fagile-workflow\u002Fskills\u002Fln-311-review-research-worker\u002Freferences\u002Fresearchgraph_mcp_usage.md",[81,95,105,114,120,127],{"skillNo":82,"name":83,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":91,"publishedAt":30},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[86],{"categoryNo":87,"categoryName":88,"taxonomyType":89,"taxonomyTypeDesc":90},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[92,93,94],"model","model hierarchy","model hierarchy skill",{"skillNo":96,"name":97,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":101,"publishedAt":30},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[100],{"categoryNo":87,"categoryName":88,"taxonomyType":89,"taxonomyTypeDesc":90},[102,103,104],"MCP","zoom","zoom mcp",{"skillNo":106,"name":107,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":110,"publishedAt":30},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[111,112,113,103],"sdk","zoom apps sdk","apps",{"skillNo":115,"name":116,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":119,"publishedAt":30},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[116],{"skillNo":121,"name":122,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":123,"categories":124,"keywords":126,"publishedAt":30},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[125],{"categoryNo":87,"categoryName":88,"taxonomyType":89,"taxonomyTypeDesc":90},[122],{"skillNo":128,"name":129,"nameZh":6,"description":6,"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":30},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[129]]