[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6WM7KXD85Q10MSP1VF0WKBF":3,"skill-same:01M6WM7KXD85Q10MSP1VF0WKBF":61},{"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":22,"publishedAt":35,"linkOnly":36,"markdownContent":37,"markdownBody":38,"frontMatter":39,"refName":40,"commitSha":41,"skillDirectory":42,"forksCount":43,"repositoryHtmlUrl":44,"repositoryHomepageUrl":6,"ownerHtmlUrl":45,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":46,"install":47,"resources":60},"01M6WM7KXD85Q10MSP1VF0WKBF","local-dev-server",null,"How to start a local development server for Your Project","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\u002Fplugins\u002Fworldarchitect\u002Fskills\u002Flocal-dev-server\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33,34],"local dev","dev","server","local dev server","local","development","start","how","project","how to","local development","for","2026-11-10 10:12:30",false,"---\nname: local-dev-server\ndescription: How to start a local development server for Your Project\n---\n\n# Running the Local Development Server\n\nUse the current repository's server entrypoint, provider setup, shared environment,\nand test-account policy. The examples below apply to a repository that provides\n`run_local_server.sh`; inspect its instructions before adopting ports or auth flags.\n\n## Quick Start\n\n```bash\n# Default: random port, background mode, logs in current terminal\n.\u002Frun_local_server.sh\n\n# Non-default port, no log streaming (best for agents\u002FCI)\n.\u002Frun_local_server.sh --no-log-stream\n\n# Force default ports (8081 Flask, 3002 React)\n.\u002Frun_local_server.sh --force-default-port\n\n# Interactive cleanup of existing servers\n.\u002Frun_local_server.sh --cleanup\n```\n\n## What It Does\n\n1. Uses the documented repository environment; preserve shared-venv links and bootstrap requirements\n2. Loads API keys from Google Secret Manager (Gemini, Cerebras, OpenRouter)\n3. Picks available ports (branch-hash or random in 8100–8199 range)\n4. Cache-busts frontend assets to a temp dir (`\u002Fvar\u002Ffolders\u002F...\u002Ffrontend_v1_cache_bust.*`)\n5. Starts Flask backend + MCP server in background\n6. Validates both servers are healthy\n\n## Server URLs\n\nAfter startup, the script prints the URLs:\n\n| Service | Default Port | Random Port Range |\n|---------|-------------|-------------------|\n| Flask Backend (serves V1 frontend) | 8081 | 8100–8199 |\n| MCP Server | 8001 | 8100–8199 |\n| React Frontend (V2) | DISABLED | — |\n\n## Auth Bypass for Development\n\nAppend URL params to bypass Firebase auth:\n```\nhttp:\u002F\u002Flocalhost:\u003CPORT>\u002F?test_mode=true&test_user_id=test-user-123\n```\n\nWith fantasy theme:\n```\nhttp:\u002F\u002Flocalhost:\u003CPORT>\u002F?test_mode=true&test_user_id=test-user-123&test_theme=fantasy\n```\n\n## Log Files\n\n```bash\n# Resolve canonical log directory via ${CLAUDE_HOME:-$HOME\u002F.claude}\u002Fskills\u002Fscratch-space\u002FSKILL.md\nLOG_DIR=\"$(${CLAUDE_HOME:-$HOME\u002F.claude}\u002Fskills\u002Fscratch-space\u002Fscripts\u002Fscratch-dir.sh \"\u003Crepo-name>\u002F\u003Cbranch-name>\")\"\n\n# Flask logs\ncat \"${LOG_DIR}\u002Fflask_backend.log\"\n\n# Tail live\ntail -f \"${LOG_DIR}\u002Fflask_backend.log\"\n\n# Find errors\ngrep -i \"error\\|500\\|traceback\" \"${LOG_DIR}\u002Fflask_backend.log\" | tail -20\n```\n\n## Hot-swapping CSS for Testing\n\nThe server serves from a cache-bust temp dir. To test CSS changes without restarting:\n\n```bash\n# Find the active temp dir\nfind $TMPDIR -maxdepth 1 -name 'frontend_v1_cache_bust.*' -type d\n\n# Copy new CSS into it (server picks up changes immediately — no cache)\ncp $PROJECT_ROOT\u002Ffrontend_v1\u002Fthemes\u002Ffantasy.css \u002Fvar\u002Ffolders\u002F...\u002Ffrontend_v1_cache_bust.XXXXXX\u002Fthemes\u002Ffantasy.css\n```\n\n## Stopping Servers\n\nUse the PID files from this task's launch and verify that each live PID still\nbelongs to the expected server\u002Fworktree before stopping it. A reused PID or an\noccupied port does not establish ownership. Use the repository's cleanup helper\nonly after inspecting its affected processes; preserve other tasks' servers.\n\n## Capturing Screenshots from Live Server\n\nUse Playwright to capture themed screenshots:\n\n```python\nimport os\nimport subprocess\nfrom playwright.sync_api import sync_playwright\n\nscratch_dir = subprocess.check_output(\n    [os.path.join(os.environ.get(\"CLAUDE_HOME\", os.path.expanduser(\"~\u002F.claude\")), \"skills\u002Fscratch-space\u002Fscripts\u002Fscratch-dir.sh\"), \"tmp\"],\n    text=True,\n).strip()\n\nwith sync_playwright() as p:\n    browser = p.chromium.launch(headless=True)\n    page = browser.new_page(viewport={\"width\": 1280, \"height\": 720})\n    page.goto(\"http:\u002F\u002Flocalhost:8054\u002F?test_theme=fantasy&test_mode=true&test_user_id=screenshot-user\")\n    page.wait_for_timeout(2000)\n    page.screenshot(path=os.path.join(scratch_dir, \"screenshot.png\"))\n    browser.close()\n```\n\nOr use the smoke test runner:\n```bash\n# Against the live server (may hang if theme detection differs)\nTEST_BASE_URL=http:\u002F\u002Flocalhost:8054 python3 testing_ui\u002Ftest_smoke_fantasy.py\n\n# Start its own server (most reliable)\npython3 testing_ui\u002Ftest_smoke_fantasy.py\n```\n\n## Troubleshooting\n\n| Issue | Solution |\n|-------|---------|\n| Port in use | Inspect the listener; stop only this task's server or use an available port |\n| Missing API keys | Ensure `gcloud` is configured with the `$GCP_PROJECT_ID` project |\n| Venv setup fails | Inspect the environment path or shared-venv symlink and use the documented bootstrap; preserve shared environments |\n| CSS changes not showing | Server serves from cache-bust temp dir; either hot-swap or restart |\n| Smoke test hangs on live server | Use direct Playwright script instead (theme detection race condition) |\n","# Running the Local Development Server\n\nUse the current repository's server entrypoint, provider setup, shared environment,\nand test-account policy. The examples below apply to a repository that provides\n`run_local_server.sh`; inspect its instructions before adopting ports or auth flags.\n\n## Quick Start\n\n```bash\n# Default: random port, background mode, logs in current terminal\n.\u002Frun_local_server.sh\n\n# Non-default port, no log streaming (best for agents\u002FCI)\n.\u002Frun_local_server.sh --no-log-stream\n\n# Force default ports (8081 Flask, 3002 React)\n.\u002Frun_local_server.sh --force-default-port\n\n# Interactive cleanup of existing servers\n.\u002Frun_local_server.sh --cleanup\n```\n\n## What It Does\n\n1. Uses the documented repository environment; preserve shared-venv links and bootstrap requirements\n2. Loads API keys from Google Secret Manager (Gemini, Cerebras, OpenRouter)\n3. Picks available ports (branch-hash or random in 8100–8199 range)\n4. Cache-busts frontend assets to a temp dir (`\u002Fvar\u002Ffolders\u002F...\u002Ffrontend_v1_cache_bust.*`)\n5. Starts Flask backend + MCP server in background\n6. Validates both servers are healthy\n\n## Server URLs\n\nAfter startup, the script prints the URLs:\n\n| Service | Default Port | Random Port Range |\n|---------|-------------|-------------------|\n| Flask Backend (serves V1 frontend) | 8081 | 8100–8199 |\n| MCP Server | 8001 | 8100–8199 |\n| React Frontend (V2) | DISABLED | — |\n\n## Auth Bypass for Development\n\nAppend URL params to bypass Firebase auth:\n```\nhttp:\u002F\u002Flocalhost:\u003CPORT>\u002F?test_mode=true&test_user_id=test-user-123\n```\n\nWith fantasy theme:\n```\nhttp:\u002F\u002Flocalhost:\u003CPORT>\u002F?test_mode=true&test_user_id=test-user-123&test_theme=fantasy\n```\n\n## Log Files\n\n```bash\n# Resolve canonical log directory via ${CLAUDE_HOME:-$HOME\u002F.claude}\u002Fskills\u002Fscratch-space\u002FSKILL.md\nLOG_DIR=\"$(${CLAUDE_HOME:-$HOME\u002F.claude}\u002Fskills\u002Fscratch-space\u002Fscripts\u002Fscratch-dir.sh \"\u003Crepo-name>\u002F\u003Cbranch-name>\")\"\n\n# Flask logs\ncat \"${LOG_DIR}\u002Fflask_backend.log\"\n\n# Tail live\ntail -f \"${LOG_DIR}\u002Fflask_backend.log\"\n\n# Find errors\ngrep -i \"error\\|500\\|traceback\" \"${LOG_DIR}\u002Fflask_backend.log\" | tail -20\n```\n\n## Hot-swapping CSS for Testing\n\nThe server serves from a cache-bust temp dir. To test CSS changes without restarting:\n\n```bash\n# Find the active temp dir\nfind $TMPDIR -maxdepth 1 -name 'frontend_v1_cache_bust.*' -type d\n\n# Copy new CSS into it (server picks up changes immediately — no cache)\ncp $PROJECT_ROOT\u002Ffrontend_v1\u002Fthemes\u002Ffantasy.css \u002Fvar\u002Ffolders\u002F...\u002Ffrontend_v1_cache_bust.XXXXXX\u002Fthemes\u002Ffantasy.css\n```\n\n## Stopping Servers\n\nUse the PID files from this task's launch and verify that each live PID still\nbelongs to the expected server\u002Fworktree before stopping it. A reused PID or an\noccupied port does not establish ownership. Use the repository's cleanup helper\nonly after inspecting its affected processes; preserve other tasks' servers.\n\n## Capturing Screenshots from Live Server\n\nUse Playwright to capture themed screenshots:\n\n```python\nimport os\nimport subprocess\nfrom playwright.sync_api import sync_playwright\n\nscratch_dir = subprocess.check_output(\n    [os.path.join(os.environ.get(\"CLAUDE_HOME\", os.path.expanduser(\"~\u002F.claude\")), \"skills\u002Fscratch-space\u002Fscripts\u002Fscratch-dir.sh\"), \"tmp\"],\n    text=True,\n).strip()\n\nwith sync_playwright() as p:\n    browser = p.chromium.launch(headless=True)\n    page = browser.new_page(viewport={\"width\": 1280, \"height\": 720})\n    page.goto(\"http:\u002F\u002Flocalhost:8054\u002F?test_theme=fantasy&test_mode=true&test_user_id=screenshot-user\")\n    page.wait_for_timeout(2000)\n    page.screenshot(path=os.path.join(scratch_dir, \"screenshot.png\"))\n    browser.close()\n```\n\nOr use the smoke test runner:\n```bash\n# Against the live server (may hang if theme detection differs)\nTEST_BASE_URL=http:\u002F\u002Flocalhost:8054 python3 testing_ui\u002Ftest_smoke_fantasy.py\n\n# Start its own server (most reliable)\npython3 testing_ui\u002Ftest_smoke_fantasy.py\n```\n\n## Troubleshooting\n\n| Issue | Solution |\n|-------|---------|\n| Port in use | Inspect the listener; stop only this task's server or use an available port |\n| Missing API keys | Ensure `gcloud` is configured with the `$GCP_PROJECT_ID` project |\n| Venv setup fails | Inspect the environment path or shared-venv symlink and use the documented bootstrap; preserve shared environments |\n| CSS changes not showing | Server serves from cache-bust temp dir; either hot-swap or restart |\n| Smoke test hangs on live server | Use direct Playwright script instead (theme detection race condition) |\n",{"name":5,"description":7},"main","8144f00ebafc4306264c63239e4b9fa42e48a90e","plugins\u002Fworldarchitect\u002Fskills\u002Flocal-dev-server",0,"https:\u002F\u002Fgithub.com\u002Fjleechanorg\u002Fjleechan-skills","https:\u002F\u002Fgithub.com\u002Fjleechanorg","2026-11-11 09:18:40",{"source":8,"skillName":5,"commands":48,"prompt":58,"zipAvailable":59},[49,52,55],{"tool":50,"command":51},"npx","npx skills add jleechanorg\u002Fjleechan-skills --skill local-dev-server",{"tool":53,"command":54},"bunx","bunx skills add jleechanorg\u002Fjleechan-skills --skill local-dev-server",{"tool":56,"command":57},"pnpm","pnpm dlx skills add jleechanorg\u002Fjleechan-skills --skill local-dev-server","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjleechanorg\u002Fjleechan-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fworldarchitect\u002Fskills\u002Flocal-dev-server\u002FSKILL.md",true,[],[62,80,101,115,129,145],{"skillNo":63,"name":64,"nameZh":6,"description":65,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":66,"categories":67,"keywords":68,"publishedAt":35},"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",[],[64,69,70,71,72,73,74,75,76,77,78,79],"user","when","replies","check","use","identity","whatsapp","gmail","read","message","ask",{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":91,"publishedAt":35},"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",[86],{"categoryNo":87,"categoryName":88,"taxonomyType":89,"taxonomyTypeDesc":90},"01JBSEEDCAT000000000000038","人力资源","PROFESSION","适用职业",[82,92,93,94,34,95,96,97,98,99,100],"resume","compatibility","provenance","history","produce","alias","briefing","state","fresh",{"skillNo":102,"name":103,"nameZh":6,"description":104,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":105,"categories":106,"keywords":108,"publishedAt":35},"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",[107],{"categoryNo":87,"categoryName":88,"taxonomyType":89,"taxonomyTypeDesc":90},[95,92,109,110,69,111,98,112,34,113,114,99,100],"history resume","branch","analysis","repository","worktree","sources",{"skillNo":116,"name":117,"nameZh":6,"description":118,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":121,"publishedAt":35},"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",[],[117,122,123,124,34,125,97,126,127,128],"dot","bot","workflow","canonical","conversation","browser","grokbot",{"skillNo":130,"name":131,"nameZh":6,"description":132,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":133,"categories":134,"keywords":135,"publishedAt":35},"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",[],[136,137,138,73,139,34,140,141,142,143,144],"codexa bench","work","split","default","duplicate","task","compare","normal","codex",{"skillNo":146,"name":147,"nameZh":6,"description":148,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":149,"licenseFileUrl":150,"sourceHtmlUrl":151,"categories":152,"keywords":162,"publishedAt":35},"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",[153,156,159],{"categoryNo":154,"categoryName":155,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000009","前端开发",{"categoryNo":157,"categoryName":158,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":160,"categoryName":161,"taxonomyType":89,"taxonomyTypeDesc":90},"01JBSEEDCAT000000000000032","设计师",[163,164,165,73,166,167,168,69,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,70,187],"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"]