[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F3EX8Z3E60EFB8EED0F68Y":3,"skill-same:01M6F3EX8Z3E60EFB8EED0F68Y":91},{"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":34,"publishedAt":55,"linkOnly":56,"markdownContent":57,"markdownBody":58,"frontMatter":59,"refName":68,"commitSha":69,"skillDirectory":70,"forksCount":71,"repositoryHtmlUrl":72,"repositoryHomepageUrl":73,"ownerHtmlUrl":74,"ownerBlogUrl":6,"ownerDescription":75,"updatedAt":76,"install":77,"resources":90},"01M6F3EX8Z3E60EFB8EED0F68Y","ux-sentinel",null,"Continuously detect recurring UI\u002FUX concepts during frontend discussions, track conversation-wide recurrence, and register repeated concepts as structured knowledge assets in a Notion database via MCP.","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\u002Fcomsky\u002Fremy-skill-recipes\u002Fux-sentinel\u002FSKILL.md",[18,23,26,29],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":30,"categoryName":31,"taxonomyType":32,"taxonomyTypeDesc":33},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54],"ux sentinel","ux","sentinel","system","notion mcp","detect","register","as","db","draft","conversation","recurring","frontend","knowledge","ui","database","code","automation","notion","MCP","2026-11-10 10:12:30",false,"---\nname: ux-sentinel\ndescription: >\n  Continuously detect recurring UI\u002FUX concepts during frontend discussions,\n  track conversation-wide recurrence, and register repeated concepts as\n  structured knowledge assets in a Notion database via MCP.\nlicense: MIT\ncompatibility:\n  - Claude Code\n  - Cursor\nmetadata:\n  type: system\n  category: automation\n  maturity: draft\n  activation: hybrid\n  state: external DB-backed\n  dependencies: Notion MCP\n---\n\n# Skill: UX Sentinel\n\n**Type:** System\n\n## Purpose\n\nContinuously detect UI\u002FUX concepts during frontend discussions,\ntrack global recurrence (conversation-wide),\nand convert repeated concepts into structured knowledge assets\nin a connected Notion database via MCP.\n\nRecurrence threshold: 2  \nManual override supported via @ux commands.  \nNotion lookup is always performed.\n\n---\n\n## Scope\n\nThis skill activates when:\n\n- UI\u002FUX terms, principles, heuristics, laws, patterns, or design concepts appear.\n- The user triggers a manual command such as `@ux save`.\n\nThis skill operates across the entire conversation history (global recurrence),\nnot per-project or per-feature.\n\n---\n\n## Inputs \u002F Signals\n\n- Conversation content (all messages in the current session)\n- Manual `@ux` commands from the user\n- Notion database state (`UI\u002FUX Knowledge Base` via MCP query)\n- Local recurrence counters (conversation-wide, in-memory)\n\n---\n\n## Core Behavior\n\n> **DETECTION FREQUENCY:** Concept detection runs on every user message\n> that contains **3 or more words related to UI, UX, design, layout,\n> interaction, or visual presentation**. Messages that are purely about\n> code logic, configuration, or non-frontend topics do not trigger\n> detection. This prevents unnecessary Notion queries during backend\n> or infrastructure discussions.\n\n### 0. Database Bootstrap (runs once per conversation)\n\n> **MCP COMPATIBILITY:** The tool names below (e.g., `API-post-search`,\n> `API-post-page`) follow the `@notionhq\u002Fnotion-mcp-server` convention.\n> If your MCP server uses different tool names, map them to the\n> equivalent Notion REST API endpoints (`POST \u002Fv1\u002Fsearch`, `POST \u002Fv1\u002Fpages`, etc.).\n\nBefore any concept detection, verify the Notion database exists:\n\n1. Search Notion for a database titled `UI\u002FUX Knowledge Base`\n   using `API-post-search` with `filter: { value: \"data_source\", property: \"object\" }`.\n2. If found → cache the `database_id` for the conversation and proceed.\n3. If NOT found → ask the user:\n\n   \"UI\u002FUX Knowledge Base database not found in Notion. Create it? (Yes \u002F No)\"\n\n   - If **Yes** → follow the **Database Creation** steps below.\n   - If **No** → fall back to local-only tracking for the rest of the conversation.\n     All concept detection still runs, proposals are still shown,\n     but no Notion reads\u002Fwrites occur. Log: \"Notion DB unavailable — local tracking only.\"\n\nCache the resolved `database_id` (or `null` if declined) for the conversation.\nDo NOT re-prompt on every concept detection.\n\n#### Database Creation\n\n**Known constraints** (as of Notion API 2025-09-03 \u002F Notion Internal Integration type):\n\n- Workspace-level page creation is blocked for Notion Internal Integrations (as opposed to Public OAuth Integrations).\n- The MCP `API-create-a-data-source` endpoint does not support\n  new database creation under API version 2025-09-03.\n\n**Procedure:**\n\n1. **Select a parent page**: Search for a suitable existing page\n   (e.g. the project's root page) using `API-post-search`.\n   Present candidate pages to the user and let them choose.\n\n2. **Create a dedicated container page** under the chosen parent\n   via MCP `API-post-page` (e.g. title \"UX Sentinel\", icon shield emoji).\n   **Do NOT create the inline database directly inside the parent page** —\n   the parent is typically an index page whose document structure would break.\n\n3. **Create the database via direct REST API** (Shell tool),\n   using the **container page ID** from step 2 as the parent:\n\n   ```bash\n   curl -s -X POST 'https:\u002F\u002Fapi.notion.com\u002Fv1\u002Fdatabases' \\\n     -H 'Authorization: Bearer $NOTION_TOKEN' \\\n     -H 'Content-Type: application\u002Fjson' \\\n     -H 'Notion-Version: 2022-06-28' \\\n     -d '{ \"parent\": { \"type\": \"page_id\", \"page_id\": \"\u003CCONTAINER_PAGE_ID>\" },\n            \"title\": [{\"type\":\"text\",\"text\":{\"content\":\"UI\u002FUX Knowledge Base\"}}],\n            \"is_inline\": true,\n            \"properties\": { \u003CSCHEMA — see Notion Database Requirements> } }'\n   ```\n\n   The `NOTION_TOKEN` can be retrieved from your MCP client's configuration.\n   Common locations:\n   - Cursor: `~\u002F.cursor\u002Fmcp.json` → `mcpServers.\u003Cyour-notion-server>.env.NOTION_TOKEN`\n   - Claude Desktop: `~\u002FLibrary\u002FApplication Support\u002FClaude\u002Fclaude_desktop_config.json`\n   - Other clients: check your MCP client's documentation\n\n4. **Cache the returned `database_id`** for the conversation.\n   After creation, all subsequent reads\u002Fwrites use MCP tools\n   (`API-query-data-source`, `API-post-page`, `API-patch-page`)\n   which work normally with the 2025-09-03 API version.\n\n---\n\n### 1. Concept Detection\n\n> **QUERY EFFICIENCY:** When querying Notion DB for an existing\n> concept, request only the `Title` and `Recurrence Count` properties\n> (not the full page content). Full page content is only needed when\n> updating `Trigger Context` or appending notes in Section 2.\n\nWhen a UI\u002FUX concept appears:\n\n1. Normalize concept name → `concept_key`\n   - lowercase\n   - remove apostrophes\u002Fspecial characters\n   - trim spaces\n   - apply alias mapping (e.g., \"Hick's Law\" = \"Hicks Law\")\n\n2. Query Notion DB (skip if database bootstrap resolved to local-only):\n   - Database: `UI\u002FUX Knowledge Base`\n   - Match by title or stored concept_key\n\n---\n\n### 2. If Concept Exists in Notion\n\n- Increment `Recurrence Count`\n- Update `Last Seen` (today)\n- Merge new `Trigger Context` tags if applicable\n- Optionally append short \"New evidence\u002Fcontext\" note\n\nNo proposal required.\n\n---\n\n### 3. If Concept Does Not Exist\n\n- Track local recurrence counter (conversation-wide)\n\nIf local recurrence >= 2:\n→ Propose registration.\n\nProposal must include:\n\n- Concept name\n- Suggested category\n- One-line definition\n- 2–3 actionable UI decision rules\n\nThen ask:\n\n\"Register to Notion? (Yes \u002F No)\"\n\nIf Yes → Create entry.\nIf No → Do nothing (keep counter).\n\n---\n\n## Manual Commands\n\nThe following commands override recurrence logic:\n\n### Save most recent detected concept\n\n`@ux save`\n\n### Save specific concept immediately\n\n`@ux save: \u003Cconcept>`\n\n### Skip current detection\u002Fproposal\n\n`@ux skip`\n\n### Create relation between concepts\n\n`@ux link: \u003CA> -> \u003CB>`\n\nManual save:\n\n- Ignores recurrence threshold\n- Sets `Maturity = Observed`\n- Initializes `Recurrence Count` with local count if available (minimum 1)\n\n---\n\n## Notion Database Requirements\n\nDatabase name:\nUI\u002FUX Knowledge Base\n\nRequired properties:\n\n| Property | Type | Options \u002F Notes |\n|---|---|---|\n| Concept | Title | Primary key |\n| Category | Select | Cognitive \u002F Visual \u002F Interaction \u002F IA |\n| Recurrence Count | Number | Incremented on each sighting |\n| First Seen | Date | Set on creation only |\n| Last Seen | Date | Updated on every sighting |\n| Trigger Context | Multi-select | e.g. \"pipeline-flicker\", \"route-transition\" |\n| UI Decision Rule | Rich text | 2-3 actionable rules |\n| Product Context | Rich text | Where\u002Fwhy this concept matters |\n| Maturity | Select | Observed \u002F Applied \u002F Internalized |\n| Related Concepts | Relation (self) | Links between related entries |\n\n### Manual Setup (fallback)\n\nIf direct REST API access is unavailable (e.g. no shell access,\ntoken not found in your MCP client configuration):\n\n1. Create a page under the chosen parent via MCP `API-post-page`.\n2. Print the property schema table above and instruct the user to\n   convert the page to an inline database in the Notion UI manually.\n3. Once converted, have the user provide the database ID to cache.\n\n---\n\n## Category Auto-Inference Rules\n\n- cognitive \u002F overload \u002F choice → Cognitive\n- hierarchy \u002F contrast \u002F alignment → Visual\n- click \u002F motor \u002F target \u002F feedback → Interaction\n- structure \u002F grouping \u002F navigation → IA\n\nUser may override at proposal stage.\n\n---\n\n## Notion Page Template (Concise Asset)\n\nWhen creating a new entry:\n\n### 1. One-Line Definition\n\n### 2. Why It Recurred in This Product\n\n### 3. UI Decision Rule\n\n-\n-\n-\n\n### 4. Implementation Pattern\n\n- Component:\n- Layout:\n- Code Hint:\n\n### 5. Anti-Pattern\n\n-\n\n### 6. Related Concepts\n\n---\n\n## Output \u002F Side Effects\n\nMessages shown to the user:\n\n- Concept detection notification (when recurrence threshold met)\n- Registration proposal with concept summary\n- Confirmation after Notion write\n\nExternal writes (Notion DB):\n\n- New page creation in `UI\u002FUX Knowledge Base` (concept registration)\n- Page property updates (`Recurrence Count`, `Last Seen`, `Trigger Context`)\n- Relation updates (`Related Concepts`)\n\nLocal state:\n\n- In-memory recurrence counters per concept (conversation-wide)\n- Cached `database_id` (conversation-wide)\n\n---\n\n## Guardrails\n\n- Do not create entries for vague generic words unless clearly tied to a recognized principle.\n- Normalize concept keys to prevent duplicates.\n- Re-query Notion before creation to avoid race-condition duplicates.\n- Keep entries concise and implementation-oriented.\n- If Notion DB is unavailable (user declined or MCP error), continue all detection\n  and proposal logic in local-only mode. Never silently skip concept tracking.\n- Database bootstrap prompt must appear at most once per conversation.\n\n---\n\n## Failure Patterns\n\n- Duplicate entries created due to alias mismatch (e.g., \"Hick's Law\" vs \"Hicks Law\" not normalized)\n- Over-triggering on generic terms that happen to overlap with UX vocabulary (e.g., \"contrast\" in a non-design context)\n- Missing updates because of overly strict title matching against Notion\n- Silent concept loss when Notion MCP errors are swallowed without falling back to local tracking\n- Proposing registration for concepts that already exist in Notion due to stale local cache\n- Category mis-inference when keyword heuristics conflict (e.g., \"navigation contrast\")\n\n---\n\n## Example 1 (Automatic Trigger)\n\n**Input (conversation snippet):**\n\nUser mentions \"cognitive load\" while discussing a complex form layout. Later in the same conversation, user references \"cognitive load\" again when reviewing a dashboard with too many metrics.\n\n**Expected behavior:**\n\n1. First mention: concept detected, `concept_key = \"cognitive load\"`, Notion queried — not found, local counter set to 1. No proposal.\n2. Second mention: local counter incremented to 2 (threshold met). Proposal shown:\n   - Concept: Cognitive Load\n   - Category: Cognitive\n   - Definition: \"The total mental effort required to process information in a UI.\"\n   - Decision rules: (1) Limit visible form fields to 5–7 per step, (2) Group related metrics under collapsible sections, (3) Use progressive disclosure for secondary actions.\n3. User confirms → entry created in Notion with `Recurrence Count = 2`, `First Seen = today`, `Maturity = Observed`.\n\n---\n\n## Example 2 (Manual Command)\n\n**Input command:**\n\nUser types `@ux save: Fitts's Law` after a single mention during a button sizing discussion.\n\n**Expected behavior:**\n\n1. Normalize: `concept_key = \"fittss law\"` → alias resolved to `\"fitts law\"`.\n2. Query Notion — not found.\n3. Skip recurrence threshold (manual save).\n4. Create entry immediately:\n   - Concept: Fitts's Law\n   - Category: Interaction (inferred from \"motor\u002Ftarget\" keywords)\n   - Recurrence Count: 1\n   - Maturity: Observed\n   - UI Decision Rule: (1) Increase tap target size for primary actions to minimum 44px, (2) Place frequently used buttons closer to natural cursor\u002Fthumb resting position.\n5. Confirm to user: \"Fitts's Law registered to UI\u002FUX Knowledge Base.\"\n\n---\n\n## Notes\n\n**FAST MODE** (only if explicitly requested):\n\n- Increase recurrence threshold to 3\n- Skip Notion query — use local-only tracking for the entire session\n- Manual `@ux save` commands still work in local-only mode\n\n---\n\n## Design Philosophy\n\nThis skill does not create a glossary.\n\nIt builds a decision-making memory system\nbased on repeated UI friction signals.\n\nFocus on:\n\n- Why it recurred\n- What rule it creates\n- How it affects implementation\n\n","# Skill: UX Sentinel\n\n**Type:** System\n\n## Purpose\n\nContinuously detect UI\u002FUX concepts during frontend discussions,\ntrack global recurrence (conversation-wide),\nand convert repeated concepts into structured knowledge assets\nin a connected Notion database via MCP.\n\nRecurrence threshold: 2  \nManual override supported via @ux commands.  \nNotion lookup is always performed.\n\n---\n\n## Scope\n\nThis skill activates when:\n\n- UI\u002FUX terms, principles, heuristics, laws, patterns, or design concepts appear.\n- The user triggers a manual command such as `@ux save`.\n\nThis skill operates across the entire conversation history (global recurrence),\nnot per-project or per-feature.\n\n---\n\n## Inputs \u002F Signals\n\n- Conversation content (all messages in the current session)\n- Manual `@ux` commands from the user\n- Notion database state (`UI\u002FUX Knowledge Base` via MCP query)\n- Local recurrence counters (conversation-wide, in-memory)\n\n---\n\n## Core Behavior\n\n> **DETECTION FREQUENCY:** Concept detection runs on every user message\n> that contains **3 or more words related to UI, UX, design, layout,\n> interaction, or visual presentation**. Messages that are purely about\n> code logic, configuration, or non-frontend topics do not trigger\n> detection. This prevents unnecessary Notion queries during backend\n> or infrastructure discussions.\n\n### 0. Database Bootstrap (runs once per conversation)\n\n> **MCP COMPATIBILITY:** The tool names below (e.g., `API-post-search`,\n> `API-post-page`) follow the `@notionhq\u002Fnotion-mcp-server` convention.\n> If your MCP server uses different tool names, map them to the\n> equivalent Notion REST API endpoints (`POST \u002Fv1\u002Fsearch`, `POST \u002Fv1\u002Fpages`, etc.).\n\nBefore any concept detection, verify the Notion database exists:\n\n1. Search Notion for a database titled `UI\u002FUX Knowledge Base`\n   using `API-post-search` with `filter: { value: \"data_source\", property: \"object\" }`.\n2. If found → cache the `database_id` for the conversation and proceed.\n3. If NOT found → ask the user:\n\n   \"UI\u002FUX Knowledge Base database not found in Notion. Create it? (Yes \u002F No)\"\n\n   - If **Yes** → follow the **Database Creation** steps below.\n   - If **No** → fall back to local-only tracking for the rest of the conversation.\n     All concept detection still runs, proposals are still shown,\n     but no Notion reads\u002Fwrites occur. Log: \"Notion DB unavailable — local tracking only.\"\n\nCache the resolved `database_id` (or `null` if declined) for the conversation.\nDo NOT re-prompt on every concept detection.\n\n#### Database Creation\n\n**Known constraints** (as of Notion API 2025-09-03 \u002F Notion Internal Integration type):\n\n- Workspace-level page creation is blocked for Notion Internal Integrations (as opposed to Public OAuth Integrations).\n- The MCP `API-create-a-data-source` endpoint does not support\n  new database creation under API version 2025-09-03.\n\n**Procedure:**\n\n1. **Select a parent page**: Search for a suitable existing page\n   (e.g. the project's root page) using `API-post-search`.\n   Present candidate pages to the user and let them choose.\n\n2. **Create a dedicated container page** under the chosen parent\n   via MCP `API-post-page` (e.g. title \"UX Sentinel\", icon shield emoji).\n   **Do NOT create the inline database directly inside the parent page** —\n   the parent is typically an index page whose document structure would break.\n\n3. **Create the database via direct REST API** (Shell tool),\n   using the **container page ID** from step 2 as the parent:\n\n   ```bash\n   curl -s -X POST 'https:\u002F\u002Fapi.notion.com\u002Fv1\u002Fdatabases' \\\n     -H 'Authorization: Bearer $NOTION_TOKEN' \\\n     -H 'Content-Type: application\u002Fjson' \\\n     -H 'Notion-Version: 2022-06-28' \\\n     -d '{ \"parent\": { \"type\": \"page_id\", \"page_id\": \"\u003CCONTAINER_PAGE_ID>\" },\n            \"title\": [{\"type\":\"text\",\"text\":{\"content\":\"UI\u002FUX Knowledge Base\"}}],\n            \"is_inline\": true,\n            \"properties\": { \u003CSCHEMA — see Notion Database Requirements> } }'\n   ```\n\n   The `NOTION_TOKEN` can be retrieved from your MCP client's configuration.\n   Common locations:\n   - Cursor: `~\u002F.cursor\u002Fmcp.json` → `mcpServers.\u003Cyour-notion-server>.env.NOTION_TOKEN`\n   - Claude Desktop: `~\u002FLibrary\u002FApplication Support\u002FClaude\u002Fclaude_desktop_config.json`\n   - Other clients: check your MCP client's documentation\n\n4. **Cache the returned `database_id`** for the conversation.\n   After creation, all subsequent reads\u002Fwrites use MCP tools\n   (`API-query-data-source`, `API-post-page`, `API-patch-page`)\n   which work normally with the 2025-09-03 API version.\n\n---\n\n### 1. Concept Detection\n\n> **QUERY EFFICIENCY:** When querying Notion DB for an existing\n> concept, request only the `Title` and `Recurrence Count` properties\n> (not the full page content). Full page content is only needed when\n> updating `Trigger Context` or appending notes in Section 2.\n\nWhen a UI\u002FUX concept appears:\n\n1. Normalize concept name → `concept_key`\n   - lowercase\n   - remove apostrophes\u002Fspecial characters\n   - trim spaces\n   - apply alias mapping (e.g., \"Hick's Law\" = \"Hicks Law\")\n\n2. Query Notion DB (skip if database bootstrap resolved to local-only):\n   - Database: `UI\u002FUX Knowledge Base`\n   - Match by title or stored concept_key\n\n---\n\n### 2. If Concept Exists in Notion\n\n- Increment `Recurrence Count`\n- Update `Last Seen` (today)\n- Merge new `Trigger Context` tags if applicable\n- Optionally append short \"New evidence\u002Fcontext\" note\n\nNo proposal required.\n\n---\n\n### 3. If Concept Does Not Exist\n\n- Track local recurrence counter (conversation-wide)\n\nIf local recurrence >= 2:\n→ Propose registration.\n\nProposal must include:\n\n- Concept name\n- Suggested category\n- One-line definition\n- 2–3 actionable UI decision rules\n\nThen ask:\n\n\"Register to Notion? (Yes \u002F No)\"\n\nIf Yes → Create entry.\nIf No → Do nothing (keep counter).\n\n---\n\n## Manual Commands\n\nThe following commands override recurrence logic:\n\n### Save most recent detected concept\n\n`@ux save`\n\n### Save specific concept immediately\n\n`@ux save: \u003Cconcept>`\n\n### Skip current detection\u002Fproposal\n\n`@ux skip`\n\n### Create relation between concepts\n\n`@ux link: \u003CA> -> \u003CB>`\n\nManual save:\n\n- Ignores recurrence threshold\n- Sets `Maturity = Observed`\n- Initializes `Recurrence Count` with local count if available (minimum 1)\n\n---\n\n## Notion Database Requirements\n\nDatabase name:\nUI\u002FUX Knowledge Base\n\nRequired properties:\n\n| Property | Type | Options \u002F Notes |\n|---|---|---|\n| Concept | Title | Primary key |\n| Category | Select | Cognitive \u002F Visual \u002F Interaction \u002F IA |\n| Recurrence Count | Number | Incremented on each sighting |\n| First Seen | Date | Set on creation only |\n| Last Seen | Date | Updated on every sighting |\n| Trigger Context | Multi-select | e.g. \"pipeline-flicker\", \"route-transition\" |\n| UI Decision Rule | Rich text | 2-3 actionable rules |\n| Product Context | Rich text | Where\u002Fwhy this concept matters |\n| Maturity | Select | Observed \u002F Applied \u002F Internalized |\n| Related Concepts | Relation (self) | Links between related entries |\n\n### Manual Setup (fallback)\n\nIf direct REST API access is unavailable (e.g. no shell access,\ntoken not found in your MCP client configuration):\n\n1. Create a page under the chosen parent via MCP `API-post-page`.\n2. Print the property schema table above and instruct the user to\n   convert the page to an inline database in the Notion UI manually.\n3. Once converted, have the user provide the database ID to cache.\n\n---\n\n## Category Auto-Inference Rules\n\n- cognitive \u002F overload \u002F choice → Cognitive\n- hierarchy \u002F contrast \u002F alignment → Visual\n- click \u002F motor \u002F target \u002F feedback → Interaction\n- structure \u002F grouping \u002F navigation → IA\n\nUser may override at proposal stage.\n\n---\n\n## Notion Page Template (Concise Asset)\n\nWhen creating a new entry:\n\n### 1. One-Line Definition\n\n### 2. Why It Recurred in This Product\n\n### 3. UI Decision Rule\n\n-\n-\n-\n\n### 4. Implementation Pattern\n\n- Component:\n- Layout:\n- Code Hint:\n\n### 5. Anti-Pattern\n\n-\n\n### 6. Related Concepts\n\n---\n\n## Output \u002F Side Effects\n\nMessages shown to the user:\n\n- Concept detection notification (when recurrence threshold met)\n- Registration proposal with concept summary\n- Confirmation after Notion write\n\nExternal writes (Notion DB):\n\n- New page creation in `UI\u002FUX Knowledge Base` (concept registration)\n- Page property updates (`Recurrence Count`, `Last Seen`, `Trigger Context`)\n- Relation updates (`Related Concepts`)\n\nLocal state:\n\n- In-memory recurrence counters per concept (conversation-wide)\n- Cached `database_id` (conversation-wide)\n\n---\n\n## Guardrails\n\n- Do not create entries for vague generic words unless clearly tied to a recognized principle.\n- Normalize concept keys to prevent duplicates.\n- Re-query Notion before creation to avoid race-condition duplicates.\n- Keep entries concise and implementation-oriented.\n- If Notion DB is unavailable (user declined or MCP error), continue all detection\n  and proposal logic in local-only mode. Never silently skip concept tracking.\n- Database bootstrap prompt must appear at most once per conversation.\n\n---\n\n## Failure Patterns\n\n- Duplicate entries created due to alias mismatch (e.g., \"Hick's Law\" vs \"Hicks Law\" not normalized)\n- Over-triggering on generic terms that happen to overlap with UX vocabulary (e.g., \"contrast\" in a non-design context)\n- Missing updates because of overly strict title matching against Notion\n- Silent concept loss when Notion MCP errors are swallowed without falling back to local tracking\n- Proposing registration for concepts that already exist in Notion due to stale local cache\n- Category mis-inference when keyword heuristics conflict (e.g., \"navigation contrast\")\n\n---\n\n## Example 1 (Automatic Trigger)\n\n**Input (conversation snippet):**\n\nUser mentions \"cognitive load\" while discussing a complex form layout. Later in the same conversation, user references \"cognitive load\" again when reviewing a dashboard with too many metrics.\n\n**Expected behavior:**\n\n1. First mention: concept detected, `concept_key = \"cognitive load\"`, Notion queried — not found, local counter set to 1. No proposal.\n2. Second mention: local counter incremented to 2 (threshold met). Proposal shown:\n   - Concept: Cognitive Load\n   - Category: Cognitive\n   - Definition: \"The total mental effort required to process information in a UI.\"\n   - Decision rules: (1) Limit visible form fields to 5–7 per step, (2) Group related metrics under collapsible sections, (3) Use progressive disclosure for secondary actions.\n3. User confirms → entry created in Notion with `Recurrence Count = 2`, `First Seen = today`, `Maturity = Observed`.\n\n---\n\n## Example 2 (Manual Command)\n\n**Input command:**\n\nUser types `@ux save: Fitts's Law` after a single mention during a button sizing discussion.\n\n**Expected behavior:**\n\n1. Normalize: `concept_key = \"fittss law\"` → alias resolved to `\"fitts law\"`.\n2. Query Notion — not found.\n3. Skip recurrence threshold (manual save).\n4. Create entry immediately:\n   - Concept: Fitts's Law\n   - Category: Interaction (inferred from \"motor\u002Ftarget\" keywords)\n   - Recurrence Count: 1\n   - Maturity: Observed\n   - UI Decision Rule: (1) Increase tap target size for primary actions to minimum 44px, (2) Place frequently used buttons closer to natural cursor\u002Fthumb resting position.\n5. Confirm to user: \"Fitts's Law registered to UI\u002FUX Knowledge Base.\"\n\n---\n\n## Notes\n\n**FAST MODE** (only if explicitly requested):\n\n- Increase recurrence threshold to 3\n- Skip Notion query — use local-only tracking for the entire session\n- Manual `@ux save` commands still work in local-only mode\n\n---\n\n## Design Philosophy\n\nThis skill does not create a glossary.\n\nIt builds a decision-making memory system\nbased on repeated UI friction signals.\n\nFocus on:\n\n- Why it recurred\n- What rule it creates\n- How it affects implementation\n\n",{"name":5,"license":15,"metadata":60,"description":64,"compatibility":65},{"type":38,"state":61,"category":52,"maturity":44,"activation":62,"dependencies":63},"external DB-backed","hybrid","Notion MCP","Continuously detect recurring UI\u002FUX concepts during frontend discussions, track conversation-wide recurrence, and register repeated concepts as structured knowledge assets in a Notion database via MCP.\n",[66,67],"Claude Code","Cursor","main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fcomsky\u002Fremy-skill-recipes\u002Fux-sentinel",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":78,"prompt":88,"zipAvailable":89},[79,82,85],{"tool":80,"command":81},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill ux-sentinel",{"tool":83,"command":84},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill ux-sentinel",{"tool":86,"command":87},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill ux-sentinel","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fcomsky\u002Fremy-skill-recipes\u002Fux-sentinel\u002FSKILL.md",true,[],[92,102,111,120,126,133],{"skillNo":93,"name":94,"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":95,"categories":96,"keywords":98,"publishedAt":55},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[97],{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},[99,100,101],"model","model hierarchy","model hierarchy skill",{"skillNo":103,"name":104,"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":105,"categories":106,"keywords":108,"publishedAt":55},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[107],{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},[54,109,110],"zoom","zoom mcp",{"skillNo":112,"name":113,"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":114,"categories":115,"keywords":116,"publishedAt":55},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[117,118,119,109],"sdk","zoom apps sdk","apps",{"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":125,"publishedAt":55},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[122],{"skillNo":127,"name":128,"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":129,"categories":130,"keywords":132,"publishedAt":55},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[131],{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},[128],{"skillNo":134,"name":135,"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":136,"categories":137,"keywords":138,"publishedAt":55},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[135]]