[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CABJPBDCNXTBCZQ2QPF0ED":3,"skill-same:01M6CABJPBDCNXTBCZQ2QPF0ED":59},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":33,"linkOnly":34,"markdownContent":35,"markdownBody":36,"frontMatter":37,"refName":38,"commitSha":39,"skillDirectory":40,"forksCount":41,"repositoryHtmlUrl":42,"repositoryHomepageUrl":6,"ownerHtmlUrl":43,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":44,"install":45,"resources":58},"01M6CABJPBDCNXTBCZQ2QPF0ED","dropped-messages",null,"Diagnose and recover dropped Jeffrey messages — threads or standalone messages that got no response within 30 min. Use when Jeffrey asks about missed messages, the script reports drops, or you need to understand why a message was unanswered.","jleechanorg\u002Fjleechan-skills","jleechanorg","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F221404966?v=4","01M6C1VJ99XG950X1DWPEBCBGX","01M6C1VJDK5YVDNT3362RT5WSB",6,"MIT","https:\u002F\u002Fgithub.com\u002Fjleechanorg\u002Fjleechan-skills\u002Fblob\u002Fmain\u002Fhermes\u002Fskills\u002Fhermes-imports\u002Fdropped-messages\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32],"messages","dropped messages","diagnose","why","use","reports","message","missed","understand","about","script","you","threads","standalone","when","2026-11-10 10:12:30",false,"---\nname: dropped-messages\ndescription: \"Diagnose and recover dropped Jeffrey messages — threads or standalone messages that got no response within 30 min. Use when Jeffrey asks about missed messages, the script reports drops, or you need to understand why a message was unanswered.\"\n---\n\n# Dropped Messages — Diagnosis & Recovery\n\n## Operator contract (harness clarity)\n\n- **Not config drift:** Changes to this script’s heuristics live in **`scripts\u002Fdropped-thread-followup.sh`** (git-tracked). They do **not** rewrite **`config.yaml`**, **`~\u002F.cursor\u002Fmcp.json`**, or Slack tokens unless an operator edits those files.\n- **Overrides:** Prefix the script with env vars (`DROP_LOOKBACK_HOURS`, `DROP_THREAD_REPLY_LIMIT`, `DROP_EXCLUDE_CHANNELS`, `DROP_JEFFREY_ONLY_CHANNELS`, …). LaunchAgent \u002F plist can set them for stable “my settings.”\n- **Audit trail:** `git log -p -- scripts\u002Fdropped-thread-followup.sh` is the source of truth for why default behavior changed.\n\n## When to invoke this skill\n\n- Jeffrey asks \"why didn't you respond to X?\" or \"did you miss my message?\"\n- The dropped-thread-followup script found drops (actioned > 0)\n- You want to proactively audit for coverage gaps\n- A thread shows a very long gap before the agent replied\n\n## Coverage model\n\nThe script `~\u002F.hermes\u002Fscripts\u002Fdropped-thread-followup.sh` monitors two classes:\n\n### Class A — Threaded (reply_count > 0)\nMessages that started a thread. These ARE visible to the script. A drop occurs when:\n- Jeffrey's message is the **last** in the thread with no bot follow-up (≥30 min)\n- Thread went cold: >2h old, no result indicators (PR link, \"done\", etc.)\n- Bot admitted it didn't execute (\"did not execute\", \"only sent an ack\", etc.)\n- **Bot replied with a timeout\u002Foverload error** (`request timed out`, `timed out before`, `deadline exceeded`, `high load` \u002F 2064-style messages) — counted as **`timeout-failure`** (dropped run), not a resolved answer\n\n### Class B — Standalone (reply_count == 0)\nMessages Jeffrey posted without any thread forming. These were **invisible** before the fix. A drop occurs when:\n- Jeffrey posted a root message\n- Bot added only a reaction (?) but no text reply in the channel within 30 min\n- Message is >30 min old\n\n### Class C — DM channel\n`D0AFTLEJGJU` is not in `config.yaml` channel maps; the script appends `$JLEECHAN_DM_CHANNEL` (default `D0AFTLEJGJU`) to the scan list after resolving C-channels.\n\n### Class D — `#all-$USER-ai` (`C09GRLXF9GR`)\nNot in the default C-channel fallback (`C0AKALZ4CKW` + `C0AJQ5M0A0Y`); add IDs via `config.yaml` or `DROP_CHANNELS`. When `C09GRLXF9GR` is in the resolved channel list, it is **skipped** unless you override `DROP_EXCLUDE_CHANNELS` (default is that ID, to avoid nudging a high-churn channel). Clearing exclusions: `DROP_EXCLUDE_CHANNELS=\"\"` excludes **nothing** (the script handles empty explicitly, unlike bash `:-`).\n\n## Quick diagnosis steps\n\n### 1. Run dry-mode audit (non-destructive)\n```bash\nDRY_RUN=1 DROP_LOOKBACK_HOURS=48 bash ~\u002F.hermes\u002Fscripts\u002Fdropped-thread-followup.sh\n```\nLook for `DRY_RUN: would nudge` lines. Each is a **candidate** drop (review for false positives, e.g. boilerplate intros).\n\n### 1b. Include `#all-$USER-ai` in the audit\n```bash\nDRY_RUN=1 DROP_LOOKBACK_HOURS=48 \\\n  DROP_CHANNELS=\"C0AKALZ4CKW C0AJQ5M0A0Y C09GRLXF9GR\" DROP_EXCLUDE_CHANNELS=\"\" \\\n  bash ~\u002F.hermes\u002Fscripts\u002Fdropped-thread-followup.sh\n```\n\n### 2. Check DM channel specifically\n```bash\nDRY_RUN=1 DROP_CHANNELS=\"D0AFTLEJGJU\" DROP_LOOKBACK_HOURS=48 \\\n  bash ~\u002F.hermes\u002Fscripts\u002Fdropped-thread-followup.sh\n```\n\n### 3. Manual Slack scan (when script can't reach a channel)\nUse MCP: `mcp__slack__conversations_history(channel_id=\"C09GRLXF9GR\", limit=\"2d\")`\nFilter for rows where UserID=U09GH5BR3QU (Jeffrey) and ThreadTs==MsgID (root messages).\n\n### 4. Check session lock drops (silent HTTP 200 drops)\n```bash\ngrep \"session file locked\" ~\u002F.hermes\u002Flogs\u002Fgateway.err.log | tail -20\n```\nIf found: the gateway processed the HTTP request but silently dropped the message before\nthe agent saw it. Fix: clear stale `.lock` files and restart gateway.\n\n## Root causes & fixes\n\n| Symptom | Root cause | Fix |\n|---------|-----------|-----|\n| DM never scanned | D-prefix not in resolve_channels() | Set `$JLEECHAN_DM_CHANNEL` (hardcoded D0AFTLEJGJU fallback) |\n| Standalone msg missed | reply_count==0 invisible to thread scan | fetch_standalone_user_messages() — now active |\n| Thread replied with timeout | Gateway timeout (timeoutSeconds too low) | Keep timeoutSeconds≤600, maxConcurrent≤3 |\n| Session lock | Dead PID holding .lock file | Clear locks + restart (see CLAUDE.md gateway section) |\n| Work done, no ack | Agent completed task but didn't post thread reply | Always post in-thread ack after completing work |\n| Script LOOKBACK too short | Default 8h window misses older drops | Set DROP_LOOKBACK_HOURS=48 for full audits |\n| `#all-$USER` never audited | Not in default fallback; also excluded when listed | `DROP_CHANNELS` including `C09GRLXF9GR` and `DROP_EXCLUDE_CHANNELS=\"\"` |\n| Long threads misclassified | Default was 20 replies fetched | `DROP_THREAD_REPLY_LIMIT` (default **200**) |\n| Bare word “done” suppressed nudges | Substring `done` matched tiny replies | Strong phrases + weak words only if agent text is **≥80** chars |\n| Bug hunt \u002F automation noise | Root posts look like unanswered work | Roots matching `*Daily Bug Hunt*`, `*Repos scanned:*`, etc. skip cold\u002Fstale |\n| `#all-$USER` teammate threads | Nudges on threads Jeffrey never joined | `DROP_JEFFREY_ONLY_CHANNELS` (default `C09GRLXF9GR`); set to `\"\"` to disable |\n| Nudge cites wrong line | Used first human message (often boilerplate) | Nudge **Original request** prefers Jeffrey’s **latest** message, else latest human |\n\n## Recovery workflow\n\nWhen you find a dropped thread, reply in-thread immediately:\n1. Acknowledge: \"I missed this message at [time] — sorry for the delay.\"\n2. Do the work OR explain the blocker\n3. Post proof (PR link \u002F commit \u002F result)\n4. Record nudge to prevent double-nudging: the script handles this via state file\n\n## Preventing future drops\n\nThe cron for `dropped-thread-followup.sh` runs every 4h by default. After this fix:\n- DM channel is always scanned\n- Standalone messages are caught if bot doesn't reply within 30 min\n- The state file `~\u002F.hermes\u002Flogs\u002Fdropped-thread-state.json` tracks nudged threads\n\nTo verify the cron is wired:\n```bash\ngrep -r \"dropped-thread\" ~\u002F.hermes\u002Fcron\u002F\n```\n","# Dropped Messages — Diagnosis & Recovery\n\n## Operator contract (harness clarity)\n\n- **Not config drift:** Changes to this script’s heuristics live in **`scripts\u002Fdropped-thread-followup.sh`** (git-tracked). They do **not** rewrite **`config.yaml`**, **`~\u002F.cursor\u002Fmcp.json`**, or Slack tokens unless an operator edits those files.\n- **Overrides:** Prefix the script with env vars (`DROP_LOOKBACK_HOURS`, `DROP_THREAD_REPLY_LIMIT`, `DROP_EXCLUDE_CHANNELS`, `DROP_JEFFREY_ONLY_CHANNELS`, …). LaunchAgent \u002F plist can set them for stable “my settings.”\n- **Audit trail:** `git log -p -- scripts\u002Fdropped-thread-followup.sh` is the source of truth for why default behavior changed.\n\n## When to invoke this skill\n\n- Jeffrey asks \"why didn't you respond to X?\" or \"did you miss my message?\"\n- The dropped-thread-followup script found drops (actioned > 0)\n- You want to proactively audit for coverage gaps\n- A thread shows a very long gap before the agent replied\n\n## Coverage model\n\nThe script `~\u002F.hermes\u002Fscripts\u002Fdropped-thread-followup.sh` monitors two classes:\n\n### Class A — Threaded (reply_count > 0)\nMessages that started a thread. These ARE visible to the script. A drop occurs when:\n- Jeffrey's message is the **last** in the thread with no bot follow-up (≥30 min)\n- Thread went cold: >2h old, no result indicators (PR link, \"done\", etc.)\n- Bot admitted it didn't execute (\"did not execute\", \"only sent an ack\", etc.)\n- **Bot replied with a timeout\u002Foverload error** (`request timed out`, `timed out before`, `deadline exceeded`, `high load` \u002F 2064-style messages) — counted as **`timeout-failure`** (dropped run), not a resolved answer\n\n### Class B — Standalone (reply_count == 0)\nMessages Jeffrey posted without any thread forming. These were **invisible** before the fix. A drop occurs when:\n- Jeffrey posted a root message\n- Bot added only a reaction (?) but no text reply in the channel within 30 min\n- Message is >30 min old\n\n### Class C — DM channel\n`D0AFTLEJGJU` is not in `config.yaml` channel maps; the script appends `$JLEECHAN_DM_CHANNEL` (default `D0AFTLEJGJU`) to the scan list after resolving C-channels.\n\n### Class D — `#all-$USER-ai` (`C09GRLXF9GR`)\nNot in the default C-channel fallback (`C0AKALZ4CKW` + `C0AJQ5M0A0Y`); add IDs via `config.yaml` or `DROP_CHANNELS`. When `C09GRLXF9GR` is in the resolved channel list, it is **skipped** unless you override `DROP_EXCLUDE_CHANNELS` (default is that ID, to avoid nudging a high-churn channel). Clearing exclusions: `DROP_EXCLUDE_CHANNELS=\"\"` excludes **nothing** (the script handles empty explicitly, unlike bash `:-`).\n\n## Quick diagnosis steps\n\n### 1. Run dry-mode audit (non-destructive)\n```bash\nDRY_RUN=1 DROP_LOOKBACK_HOURS=48 bash ~\u002F.hermes\u002Fscripts\u002Fdropped-thread-followup.sh\n```\nLook for `DRY_RUN: would nudge` lines. Each is a **candidate** drop (review for false positives, e.g. boilerplate intros).\n\n### 1b. Include `#all-$USER-ai` in the audit\n```bash\nDRY_RUN=1 DROP_LOOKBACK_HOURS=48 \\\n  DROP_CHANNELS=\"C0AKALZ4CKW C0AJQ5M0A0Y C09GRLXF9GR\" DROP_EXCLUDE_CHANNELS=\"\" \\\n  bash ~\u002F.hermes\u002Fscripts\u002Fdropped-thread-followup.sh\n```\n\n### 2. Check DM channel specifically\n```bash\nDRY_RUN=1 DROP_CHANNELS=\"D0AFTLEJGJU\" DROP_LOOKBACK_HOURS=48 \\\n  bash ~\u002F.hermes\u002Fscripts\u002Fdropped-thread-followup.sh\n```\n\n### 3. Manual Slack scan (when script can't reach a channel)\nUse MCP: `mcp__slack__conversations_history(channel_id=\"C09GRLXF9GR\", limit=\"2d\")`\nFilter for rows where UserID=U09GH5BR3QU (Jeffrey) and ThreadTs==MsgID (root messages).\n\n### 4. Check session lock drops (silent HTTP 200 drops)\n```bash\ngrep \"session file locked\" ~\u002F.hermes\u002Flogs\u002Fgateway.err.log | tail -20\n```\nIf found: the gateway processed the HTTP request but silently dropped the message before\nthe agent saw it. Fix: clear stale `.lock` files and restart gateway.\n\n## Root causes & fixes\n\n| Symptom | Root cause | Fix |\n|---------|-----------|-----|\n| DM never scanned | D-prefix not in resolve_channels() | Set `$JLEECHAN_DM_CHANNEL` (hardcoded D0AFTLEJGJU fallback) |\n| Standalone msg missed | reply_count==0 invisible to thread scan | fetch_standalone_user_messages() — now active |\n| Thread replied with timeout | Gateway timeout (timeoutSeconds too low) | Keep timeoutSeconds≤600, maxConcurrent≤3 |\n| Session lock | Dead PID holding .lock file | Clear locks + restart (see CLAUDE.md gateway section) |\n| Work done, no ack | Agent completed task but didn't post thread reply | Always post in-thread ack after completing work |\n| Script LOOKBACK too short | Default 8h window misses older drops | Set DROP_LOOKBACK_HOURS=48 for full audits |\n| `#all-$USER` never audited | Not in default fallback; also excluded when listed | `DROP_CHANNELS` including `C09GRLXF9GR` and `DROP_EXCLUDE_CHANNELS=\"\"` |\n| Long threads misclassified | Default was 20 replies fetched | `DROP_THREAD_REPLY_LIMIT` (default **200**) |\n| Bare word “done” suppressed nudges | Substring `done` matched tiny replies | Strong phrases + weak words only if agent text is **≥80** chars |\n| Bug hunt \u002F automation noise | Root posts look like unanswered work | Roots matching `*Daily Bug Hunt*`, `*Repos scanned:*`, etc. skip cold\u002Fstale |\n| `#all-$USER` teammate threads | Nudges on threads Jeffrey never joined | `DROP_JEFFREY_ONLY_CHANNELS` (default `C09GRLXF9GR`); set to `\"\"` to disable |\n| Nudge cites wrong line | Used first human message (often boilerplate) | Nudge **Original request** prefers Jeffrey’s **latest** message, else latest human |\n\n## Recovery workflow\n\nWhen you find a dropped thread, reply in-thread immediately:\n1. Acknowledge: \"I missed this message at [time] — sorry for the delay.\"\n2. Do the work OR explain the blocker\n3. Post proof (PR link \u002F commit \u002F result)\n4. Record nudge to prevent double-nudging: the script handles this via state file\n\n## Preventing future drops\n\nThe cron for `dropped-thread-followup.sh` runs every 4h by default. After this fix:\n- DM channel is always scanned\n- Standalone messages are caught if bot doesn't reply within 30 min\n- The state file `~\u002F.hermes\u002Flogs\u002Fdropped-thread-state.json` tracks nudged threads\n\nTo verify the cron is wired:\n```bash\ngrep -r \"dropped-thread\" ~\u002F.hermes\u002Fcron\u002F\n```\n",{"name":5,"description":7},"main","05df7380981a2c4af868ce0fa57962ae0eea62a9","hermes\u002Fskills\u002Fhermes-imports\u002Fdropped-messages",0,"https:\u002F\u002Fgithub.com\u002Fjleechanorg\u002Fjleechan-skills","https:\u002F\u002Fgithub.com\u002Fjleechanorg","2026-11-11 22:19:36",{"source":8,"skillName":5,"commands":46,"prompt":56,"zipAvailable":57},[47,50,53],{"tool":48,"command":49},"npx","npx skills add jleechanorg\u002Fjleechan-skills --skill dropped-messages",{"tool":51,"command":52},"bunx","bunx skills add jleechanorg\u002Fjleechan-skills --skill dropped-messages",{"tool":54,"command":55},"pnpm","pnpm dlx skills add jleechanorg\u002Fjleechan-skills --skill dropped-messages","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjleechanorg\u002Fjleechan-skills\u002Fblob\u002Fmain\u002Fhermes\u002Fskills\u002Fhermes-imports\u002Fdropped-messages\u002FSKILL.md",true,[],[60,75,97,111,125,141],{"skillNo":61,"name":62,"nameZh":6,"description":63,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":64,"categories":65,"keywords":66,"publishedAt":33},"01M716Y5MTJ6GYJZ2ATXCJK8G4","instinct","Use when the user invokes \u002Finstinct or \u002Fin, or asks to \"message Instinct\", \"ask Instinct\", \"tell Instinct\", \"check Instinct\", or read replies from the configured peer assistant. iMessage first, WhatsApp Web as fallback.","https:\u002F\u002Fgithub.com\u002Fjleechanorg\u002Fjleechan-skills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Finstinct\u002FSKILL.md",[],[62,67,32,68,69,22,70,71,72,73,24,74],"user","replies","check","identity","whatsapp","gmail","read","ask",{"skillNo":76,"name":77,"nameZh":6,"description":78,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":86,"publishedAt":33},"01M716Y4HF7FVVMJSA2CCVN5VF","hr","Compatibility alias for history-resume; produce the same fresh-state, provenance-aware resume briefing.","https:\u002F\u002Fgithub.com\u002Fjleechanorg\u002Fjleechan-skills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fhr\u002FSKILL.md",[81],{"categoryNo":82,"categoryName":83,"taxonomyType":84,"taxonomyTypeDesc":85},"01JBSEEDCAT000000000000038","人力资源","PROFESSION","适用职业",[77,87,88,89,90,91,92,93,94,95,96],"resume","compatibility","provenance","for","history","produce","alias","briefing","state","fresh",{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":104,"publishedAt":33},"01M716Y1FFNFKFJYYKF8HQA6T8","history-resume","Resume briefing for the current repository branch or worktree using fresh state and admitted history sources.","https:\u002F\u002Fgithub.com\u002Fjleechanorg\u002Fjleechan-skills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fhistory-resume\u002FSKILL.md",[103],{"categoryNo":82,"categoryName":83,"taxonomyType":84,"taxonomyTypeDesc":85},[91,87,105,106,67,107,94,108,90,109,110,95,96],"history resume","branch","analysis","repository","worktree","sources",{"skillNo":112,"name":113,"nameZh":6,"description":114,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":115,"categories":116,"keywords":117,"publishedAt":33},"01M716XWXJ8EPHK4RH9T14TR85","grok","Alias for the canonical grokbot browser conversation workflow; \u002Fgrok talks to the Grok bot the same way \u002Fdot talks to Dot.","https:\u002F\u002Fgithub.com\u002Fjleechanorg\u002Fjleechan-skills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fgrok\u002FSKILL.md",[],[113,118,119,120,90,121,93,122,123,124],"dot","bot","workflow","canonical","conversation","browser","grokbot",{"skillNo":126,"name":127,"nameZh":6,"description":128,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":129,"categories":130,"keywords":131,"publishedAt":33},"01M70N9Q07DTE0EW5KFXMMMSJ0","codexa-bench","Compare `codexa` and normal `codex` on a fair split of comparable work by default; use `--strict` for duplicate runs of the exact same task.","https:\u002F\u002Fgithub.com\u002Fjleechanorg\u002Fjleechan-skills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fcodexa-bench\u002FSKILL.md",[],[132,133,134,22,135,90,136,137,138,139,140],"codexa bench","work","split","default","duplicate","task","compare","normal","codex",{"skillNo":142,"name":143,"nameZh":6,"description":144,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":145,"licenseFileUrl":146,"sourceHtmlUrl":147,"categories":148,"keywords":160,"publishedAt":33},"01M6C24S2X60SP8BBFGAEKPEGW","frontend-design","Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, artifacts, posters, or applications (examples include websites, landing pages, dashboards, React components, HTML\u002FCSS layouts, or when styling\u002Fbeautifying any web UI). Generates creative, polished code and UI design that avoids generic AI aesthetics.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fjleechanorg\u002Fjleechan-skills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ffrontend-design\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fjleechanorg\u002Fjleechan-skills\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ffrontend-design\u002FSKILL.md",[149,154,157],{"categoryNo":150,"categoryName":151,"taxonomyType":152,"taxonomyTypeDesc":153},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",{"categoryNo":155,"categoryName":156,"taxonomyType":152,"taxonomyTypeDesc":153},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":158,"categoryName":159,"taxonomyType":84,"taxonomyTypeDesc":85},"01JBSEEDCAT000000000000032","设计师",[161,162,163,22,164,165,166,67,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,32,185],"frontend","design","frontend design","generic","ui design","react","html","components","code","artifacts","ui","aesthetics","Production","web components","landing","applications","quality","web","css","create","examples","with","react components","web ui","pages"]