[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6GSXZ5K5FP8GAQSCD9TTPYE":3,"skill-same:01M6GSXZ5K5FP8GAQSCD9TTPYE":87},{"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":16,"sourceHtmlUrl":17,"categories":18,"keywords":19,"publishedAt":36,"linkOnly":37,"markdownContent":38,"markdownBody":39,"frontMatter":40,"refName":50,"commitSha":51,"skillDirectory":52,"forksCount":53,"repositoryHtmlUrl":54,"repositoryHomepageUrl":6,"ownerHtmlUrl":55,"ownerBlogUrl":56,"ownerDescription":57,"updatedAt":58,"install":59,"resources":72},"01M6GSXZ5K5FP8GAQSCD9TTPYE","recipe-playground-dca-triggered",null,"Example driver: dip-triggered dollar-cost-averaging on a live WebSocket stream, recorded to a session.","jiayaoqijia\u002Fcryptoskill","jiayaoqijia","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1453879?v=4","01M6GMYTX7Q7S504VC6E756ENR","YQ","01M6GMYV1QKJ1CC75MTTGT9PR0",81,"MIT","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fkraken-official-recipe-playground-dca-triggered\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fkraken-official-recipe-playground-dca-triggered\u002FSKILL.md",[],[20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35],"playground","dca","recipe","recipe playground dca triggered","recipe playground dca","sessions","streaming","websocket","strategy","session","example","cost","kraken","live","driver","stream","2026-11-10 10:12:30",false,"---\nname: recipe-playground-dca-triggered\nversion: 1.0.0\ndescription: \"Example driver: dip-triggered dollar-cost-averaging on a live WebSocket stream, recorded to a session.\"\nmetadata:\n  openclaw:\n    category: \"recipe\"\n    domain: \"sessions\"\n  requires:\n    bins: [\"kraken\"]\n    skills: [\"kraken-playground\", \"kraken-dca-strategy\", \"kraken-ws-streaming\"]\n---\n\n# Playground: DCA (Dip-Triggered)\n\n> **PREREQUISITE:** Load `kraken-playground`, `kraken-dca-strategy`, and `kraken-ws-streaming` to run this recipe.\n> **This recipe is an example, not a boundary.** Adapt the steps to your hypothesis, or write your own driver (see `kraken-playground` → Driving Your Own Hypothesis).\n\nBuy the instant price dips below a short-term average, not on a fixed clock. A WebSocket ticker stream drives the loop and every qualifying tick is a candidate buy, rate-limited so buys stay spaced. Record every buy and skip into one session for later replay and P&L.\n\nUse this skill for:\n- catching an intra-interval dip that a time-based sampler would miss\n- event-driven DCA where the trigger is a price condition, not a clock\n- recording a streamed decision loop for replay\n\n## Important\n\nThis recipe records a session inside a paper workspace. With that workspace named on every session and order call and checked before the stream starts (see Hard Rules), it never places a live order. Paper results may overstate live performance: fees and slippage are simulated and there are no partial fills (see `kraken-paper-strategy`).\n\nThe stream is the loop, not `\u002Floop`. A `while read` over a stream is a long-lived process that holds state (the reference average, the last-buy time) in memory across events. This is a deliberate exception to the stateless-round model (see `kraken-playground` → Running over a Window); keep the session short and the state minimal.\n\nThe stream is blind during reconnect gaps. The CLI reconnects a spot stream with exponential backoff (each delay capped at 30 seconds, plus jitter) until you stop it, and any dip inside a gap is missed. The recorder tolerates gaps; a decision loop does not.\n\n## Params\n\nEvery number that gates a buy goes in `--strategy-params`:\n\n- `dollars_per_buy`: quote currency deployed per triggered buy\n- `dip_threshold_pct`: buy when price is at least this far below the short-term average\n- `min_spacing_s`: minimum seconds between buys; the rate limit on the trigger. The loop keeps the last-buy time in memory and skips the trigger until `min_spacing_s` has passed\n- `max_buys`: session length in buys; stop after this many\n- `sma_refresh_s`: how often to refresh the reference average from REST\n\n## Quick Start\n\nNatural language:\n\n```\nDollar-cost-average into Bitcoin. Watch the live price and buy $100 whenever\nit dips more than 0.10% below the 1-hour SMA, but no more than once every\n20 minutes, up to 10 buys. Record all buys and skips. At the end, show P&L.\n```\n\n## Start the Session\n\nWork inside a paper workspace (create one once: `kraken workspace create dcatrig --capital 10000 --mode paper`). Every session and order command below names it with `--workspace dcatrig`. An exported `KRAKEN_WORKSPACE` does not reach a stream started from another shell, and without a workspace `kraken order buy` trades the real account.\n\n```bash\nkraken --workspace dcatrig session start \\\n  --symbols BTC\u002FUSD --channels ticker,trade --to duckdb,jsonl \\\n  --label dcatrig-btc-$(date +%Y%m%d-%H%M%S) \\\n  --strategy recipe-playground-dca-triggered \\\n  --strategy-params '{\"dollars_per_buy\":100,\"dip_threshold_pct\":-0.10,\"min_spacing_s\":1200,\"max_buys\":10,\"sma_refresh_s\":300}' \\\n  -o json 2>\u002Fdev\u002Fnull &\n\n# The session_started stdout line carries the id: {\"type\":\"session_started\",\"session\":\"s\u003Cn>\",...}\n```\n\nPrint the session id to the user right after starting, and again in the final report — it is the handle for checking `kraken session show` and locating the artifacts.\n\n## Stream and Decide\n\nSubscribe to the ticker with the BBO trigger to cut noise, and act on each tick. Hold the reference average and the last-buy time in the loop; refresh the average from REST every `sma_refresh_s`, not on the tick rate.\n\nBind the gating numbers to the same `--strategy-params` you recorded, so the loop runs the hypothesis you started — never hardcode them into the arithmetic:\n\n```bash\nDOLLARS_PER_BUY=100\nDIP_THRESHOLD_PCT=-0.10\nMIN_SPACING_S=1200\nMAX_BUYS=10\nSMA_REFRESH_S=300\n\n# The buys below are simulated only while dcatrig is a paper workspace.\n[ \"$(kraken workspace show dcatrig -o json 2>\u002Fdev\u002Fnull | jq -r '.mode')\" = paper ] \\\n  || { echo \"workspace dcatrig is missing or not paper; not streaming\" >&2; exit 1; }\n\n# True 1h SMA: last twelve 5-minute closes. (--interval 60 would average the\n# whole returned window — a multi-day mean, not 1h.)\nSMA=$(kraken ohlc BTCUSD --interval 5 -o json 2>\u002Fdev\u002Fnull | jq '[.candles[-12:][].close] | add\u002Flength')\nSMA_TS=$(date +%s)\nLAST_BUY=0\nBUYS=0\n\nkraken ws ticker BTC\u002FUSD --event-trigger bbo -o json 2>\u002Fdev\u002Fnull | while read -r line; do\n  PRICE=$(echo \"$line\" | jq -r '.data[0].last \u002F\u002F empty'); [ -z \"$PRICE\" ] && continue\n  NOW=$(date +%s)\n\n  # Refresh SMA on its own cadence, not per tick\n  if [ $((NOW - SMA_TS)) -ge $SMA_REFRESH_S ]; then\n    SMA=$(kraken ohlc BTCUSD --interval 5 -o json 2>\u002Fdev\u002Fnull | jq '[.candles[-12:][].close] | add\u002Flength')\n    SMA_TS=$NOW\n  fi\n\n  # Fail loud, never fabricate: a broken READ must not gate a buy or write a reason.\n  if [ -z \"$PRICE\" ] || [ -z \"$SMA\" ]; then\n    kraken --workspace dcatrig session note --kind alert --symbol BTC\u002FUSD \\\n      --reason \"tick skipped: READ failed (price='$PRICE' sma='$SMA')\" -o json 2>\u002Fdev\u002Fnull\n    continue\n  fi\n  VS_SMA=$(echo \"scale=6; (($PRICE - $SMA) \u002F $SMA) * 100\" | bc -l)\n\n  # THINK: dip tripped AND rate limit satisfied?\n  if (( $(echo \"$VS_SMA \u003C= $DIP_THRESHOLD_PCT\" | bc -l) )) && [ $((NOW - LAST_BUY)) -ge $MIN_SPACING_S ]; then\n    VOL=$(echo \"scale=8; $DOLLARS_PER_BUY \u002F $PRICE\" | bc -l)\n    kraken --workspace dcatrig order buy BTC\u002FUSD \"$VOL\" --type market \\\n      --reason \"dip-triggered buy: BTC\u002FUSD at $PRICE is ${VS_SMA}% below 1h SMA $SMA (threshold ${DIP_THRESHOLD_PCT}%); deploying \\$$DOLLARS_PER_BUY\" \\\n      -o json 2>\u002Fdev\u002Fnull\n    LAST_BUY=$NOW\n    BUYS=$((BUYS + 1))\n    [ $BUYS -ge $MAX_BUYS ] && break\n  fi\ndone\n\nkraken --workspace dcatrig session stop -o json 2>\u002Fdev\u002Fnull\n```\n\nNotes on the decision:\n- `min_spacing_s` is a real rate limit on the trigger, not the sampling bookkeeping the time-gated recipe removed. It stops a sustained dip from firing on every tick.\n- Refresh the average on `sma_refresh_s`. Recomputing it per tick burns REST calls for a number that barely moves.\n- Log skips sparingly. A stream produces many non-qualifying ticks; noting each one floods the decision log. Note only meaningful events (a dip that was rate-limited, a wide spread), never every tick.\n\n## Stop and Review\n\n```bash\nkraken --workspace dcatrig session show -o json 2>\u002Fdev\u002Fnull | jq '.summary'\n\nkraken --workspace dcatrig session decisions --session s\u003Cn> -o json 2>\u002Fdev\u002Fnull \\\n  | jq -c '.decisions[] | {kind, symbol, reason}'\n```\n\nReport:\n- buys placed vs `max_buys`, and time between them\n- average fill cost vs window mean\n- how many dips were caught vs rate-limited\n- P&L, and whether the dip threshold and spacing fit the tape\n\n## Hard Rules\n\n- This recipe records a session inside the paper workspace `dcatrig` and never places a live order, because every session and order command passes `--workspace dcatrig` and the stream does not start unless `kraken workspace show dcatrig` reports mode `paper`. Drop either and `kraken order buy` can trade the real account.\n- The stream is the loop. Do not also wrap it in `\u002Floop`; that is two clocks on one decision.\n- Treat stream output as NDJSON, one object per line. Never parse it as a single document (see `kraken-ws-streaming`).\n- The loop is blind during reconnect gaps. Keep the session short and accept that dips inside a backoff window are missed.\n- Rate-limit buys with `min_spacing_s` so a sustained dip does not fire on every tick.\n- Keep every gating number in `--strategy-params` and the arithmetic in `jq`\u002F`bc`.\n- The session directory (`decisions.jsonl` and the DuckDB\u002FJSONL sinks) is owned by the CLI recorder. The agent only **reads** it, and only for the stop-time summary. Never write, edit, `mkdir`, or append inside it — every buy goes through `kraken order buy`, so the recorder stays the single writer.\n- If you hit a mismatch between what you are trying to do and the CLI's interface or responses — including a mismatch between this skill and the installed CLI version's contract — feel free to submit feedback with `kraken feedback`.\n","# Playground: DCA (Dip-Triggered)\n\n> **PREREQUISITE:** Load `kraken-playground`, `kraken-dca-strategy`, and `kraken-ws-streaming` to run this recipe.\n> **This recipe is an example, not a boundary.** Adapt the steps to your hypothesis, or write your own driver (see `kraken-playground` → Driving Your Own Hypothesis).\n\nBuy the instant price dips below a short-term average, not on a fixed clock. A WebSocket ticker stream drives the loop and every qualifying tick is a candidate buy, rate-limited so buys stay spaced. Record every buy and skip into one session for later replay and P&L.\n\nUse this skill for:\n- catching an intra-interval dip that a time-based sampler would miss\n- event-driven DCA where the trigger is a price condition, not a clock\n- recording a streamed decision loop for replay\n\n## Important\n\nThis recipe records a session inside a paper workspace. With that workspace named on every session and order call and checked before the stream starts (see Hard Rules), it never places a live order. Paper results may overstate live performance: fees and slippage are simulated and there are no partial fills (see `kraken-paper-strategy`).\n\nThe stream is the loop, not `\u002Floop`. A `while read` over a stream is a long-lived process that holds state (the reference average, the last-buy time) in memory across events. This is a deliberate exception to the stateless-round model (see `kraken-playground` → Running over a Window); keep the session short and the state minimal.\n\nThe stream is blind during reconnect gaps. The CLI reconnects a spot stream with exponential backoff (each delay capped at 30 seconds, plus jitter) until you stop it, and any dip inside a gap is missed. The recorder tolerates gaps; a decision loop does not.\n\n## Params\n\nEvery number that gates a buy goes in `--strategy-params`:\n\n- `dollars_per_buy`: quote currency deployed per triggered buy\n- `dip_threshold_pct`: buy when price is at least this far below the short-term average\n- `min_spacing_s`: minimum seconds between buys; the rate limit on the trigger. The loop keeps the last-buy time in memory and skips the trigger until `min_spacing_s` has passed\n- `max_buys`: session length in buys; stop after this many\n- `sma_refresh_s`: how often to refresh the reference average from REST\n\n## Quick Start\n\nNatural language:\n\n```\nDollar-cost-average into Bitcoin. Watch the live price and buy $100 whenever\nit dips more than 0.10% below the 1-hour SMA, but no more than once every\n20 minutes, up to 10 buys. Record all buys and skips. At the end, show P&L.\n```\n\n## Start the Session\n\nWork inside a paper workspace (create one once: `kraken workspace create dcatrig --capital 10000 --mode paper`). Every session and order command below names it with `--workspace dcatrig`. An exported `KRAKEN_WORKSPACE` does not reach a stream started from another shell, and without a workspace `kraken order buy` trades the real account.\n\n```bash\nkraken --workspace dcatrig session start \\\n  --symbols BTC\u002FUSD --channels ticker,trade --to duckdb,jsonl \\\n  --label dcatrig-btc-$(date +%Y%m%d-%H%M%S) \\\n  --strategy recipe-playground-dca-triggered \\\n  --strategy-params '{\"dollars_per_buy\":100,\"dip_threshold_pct\":-0.10,\"min_spacing_s\":1200,\"max_buys\":10,\"sma_refresh_s\":300}' \\\n  -o json 2>\u002Fdev\u002Fnull &\n\n# The session_started stdout line carries the id: {\"type\":\"session_started\",\"session\":\"s\u003Cn>\",...}\n```\n\nPrint the session id to the user right after starting, and again in the final report — it is the handle for checking `kraken session show` and locating the artifacts.\n\n## Stream and Decide\n\nSubscribe to the ticker with the BBO trigger to cut noise, and act on each tick. Hold the reference average and the last-buy time in the loop; refresh the average from REST every `sma_refresh_s`, not on the tick rate.\n\nBind the gating numbers to the same `--strategy-params` you recorded, so the loop runs the hypothesis you started — never hardcode them into the arithmetic:\n\n```bash\nDOLLARS_PER_BUY=100\nDIP_THRESHOLD_PCT=-0.10\nMIN_SPACING_S=1200\nMAX_BUYS=10\nSMA_REFRESH_S=300\n\n# The buys below are simulated only while dcatrig is a paper workspace.\n[ \"$(kraken workspace show dcatrig -o json 2>\u002Fdev\u002Fnull | jq -r '.mode')\" = paper ] \\\n  || { echo \"workspace dcatrig is missing or not paper; not streaming\" >&2; exit 1; }\n\n# True 1h SMA: last twelve 5-minute closes. (--interval 60 would average the\n# whole returned window — a multi-day mean, not 1h.)\nSMA=$(kraken ohlc BTCUSD --interval 5 -o json 2>\u002Fdev\u002Fnull | jq '[.candles[-12:][].close] | add\u002Flength')\nSMA_TS=$(date +%s)\nLAST_BUY=0\nBUYS=0\n\nkraken ws ticker BTC\u002FUSD --event-trigger bbo -o json 2>\u002Fdev\u002Fnull | while read -r line; do\n  PRICE=$(echo \"$line\" | jq -r '.data[0].last \u002F\u002F empty'); [ -z \"$PRICE\" ] && continue\n  NOW=$(date +%s)\n\n  # Refresh SMA on its own cadence, not per tick\n  if [ $((NOW - SMA_TS)) -ge $SMA_REFRESH_S ]; then\n    SMA=$(kraken ohlc BTCUSD --interval 5 -o json 2>\u002Fdev\u002Fnull | jq '[.candles[-12:][].close] | add\u002Flength')\n    SMA_TS=$NOW\n  fi\n\n  # Fail loud, never fabricate: a broken READ must not gate a buy or write a reason.\n  if [ -z \"$PRICE\" ] || [ -z \"$SMA\" ]; then\n    kraken --workspace dcatrig session note --kind alert --symbol BTC\u002FUSD \\\n      --reason \"tick skipped: READ failed (price='$PRICE' sma='$SMA')\" -o json 2>\u002Fdev\u002Fnull\n    continue\n  fi\n  VS_SMA=$(echo \"scale=6; (($PRICE - $SMA) \u002F $SMA) * 100\" | bc -l)\n\n  # THINK: dip tripped AND rate limit satisfied?\n  if (( $(echo \"$VS_SMA \u003C= $DIP_THRESHOLD_PCT\" | bc -l) )) && [ $((NOW - LAST_BUY)) -ge $MIN_SPACING_S ]; then\n    VOL=$(echo \"scale=8; $DOLLARS_PER_BUY \u002F $PRICE\" | bc -l)\n    kraken --workspace dcatrig order buy BTC\u002FUSD \"$VOL\" --type market \\\n      --reason \"dip-triggered buy: BTC\u002FUSD at $PRICE is ${VS_SMA}% below 1h SMA $SMA (threshold ${DIP_THRESHOLD_PCT}%); deploying \\$$DOLLARS_PER_BUY\" \\\n      -o json 2>\u002Fdev\u002Fnull\n    LAST_BUY=$NOW\n    BUYS=$((BUYS + 1))\n    [ $BUYS -ge $MAX_BUYS ] && break\n  fi\ndone\n\nkraken --workspace dcatrig session stop -o json 2>\u002Fdev\u002Fnull\n```\n\nNotes on the decision:\n- `min_spacing_s` is a real rate limit on the trigger, not the sampling bookkeeping the time-gated recipe removed. It stops a sustained dip from firing on every tick.\n- Refresh the average on `sma_refresh_s`. Recomputing it per tick burns REST calls for a number that barely moves.\n- Log skips sparingly. A stream produces many non-qualifying ticks; noting each one floods the decision log. Note only meaningful events (a dip that was rate-limited, a wide spread), never every tick.\n\n## Stop and Review\n\n```bash\nkraken --workspace dcatrig session show -o json 2>\u002Fdev\u002Fnull | jq '.summary'\n\nkraken --workspace dcatrig session decisions --session s\u003Cn> -o json 2>\u002Fdev\u002Fnull \\\n  | jq -c '.decisions[] | {kind, symbol, reason}'\n```\n\nReport:\n- buys placed vs `max_buys`, and time between them\n- average fill cost vs window mean\n- how many dips were caught vs rate-limited\n- P&L, and whether the dip threshold and spacing fit the tape\n\n## Hard Rules\n\n- This recipe records a session inside the paper workspace `dcatrig` and never places a live order, because every session and order command passes `--workspace dcatrig` and the stream does not start unless `kraken workspace show dcatrig` reports mode `paper`. Drop either and `kraken order buy` can trade the real account.\n- The stream is the loop. Do not also wrap it in `\u002Floop`; that is two clocks on one decision.\n- Treat stream output as NDJSON, one object per line. Never parse it as a single document (see `kraken-ws-streaming`).\n- The loop is blind during reconnect gaps. Keep the session short and accept that dips inside a backoff window are missed.\n- Rate-limit buys with `min_spacing_s` so a sustained dip does not fire on every tick.\n- Keep every gating number in `--strategy-params` and the arithmetic in `jq`\u002F`bc`.\n- The session directory (`decisions.jsonl` and the DuckDB\u002FJSONL sinks) is owned by the CLI recorder. The agent only **reads** it, and only for the stop-time summary. Never write, edit, `mkdir`, or append inside it — every buy goes through `kraken order buy`, so the recorder stays the single writer.\n- If you hit a mismatch between what you are trying to do and the CLI's interface or responses — including a mismatch between this skill and the installed CLI version's contract — feel free to submit feedback with `kraken feedback`.\n",{"name":5,"version":41,"metadata":42,"description":7},"1.0.0",{"openclaw":43,"requires":44},{"domain":25,"category":22},{"bins":45,"skills":46},[32],[47,48,49],"kraken-playground","kraken-dca-strategy","kraken-ws-streaming","main","3df1d0d67b30ff15236561f8c0f9f06d33f42dfd","skills\u002Fexchanges\u002Fkraken-official-recipe-playground-dca-triggered",17,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia","https:\u002F\u002Feth2030.com","Hardcore infra. Building @alt-research and applied cryptography.","2026-11-13 02:31:19",{"source":8,"skillName":5,"commands":60,"prompt":70,"zipAvailable":71},[61,64,67],{"tool":62,"command":63},"npx","npx skills add jiayaoqijia\u002Fcryptoskill --skill recipe-playground-dca-triggered",{"tool":65,"command":66},"bunx","bunx skills add jiayaoqijia\u002Fcryptoskill --skill recipe-playground-dca-triggered",{"tool":68,"command":69},"pnpm","pnpm dlx skills add jiayaoqijia\u002Fcryptoskill --skill recipe-playground-dca-triggered","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fkraken-official-recipe-playground-dca-triggered\u002FSKILL.md",true,[73,77,83],{"path":74,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":76,"sourceHtmlUrl":16},"LICENSE","许可证",1074,{"path":78,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":81,"sourceHtmlUrl":82},"SOURCE.md","REFERENCE","参考文档",356,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fkraken-official-recipe-playground-dca-triggered\u002FSOURCE.md",{"path":84,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":85,"sourceHtmlUrl":86},"TRUST.auto.yaml",2197,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fkraken-official-recipe-playground-dca-triggered\u002FTRUST.auto.yaml",[88,115,137,155,168,178],{"skillNo":89,"name":90,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":92,"sourceHtmlUrl":93,"categories":94,"keywords":95,"publishedAt":36},"01M712C436EQYE43342Q4E7GG1","recipe-performance","Diagnose a specific MetaMask user flow's real-app performance and Sentry critical-user-flow telemetry with deterministic mm-harness recipes. Use for CUF boundaries, cold\u002Fwarm\u002Fbackground-resume behavior, latency regressions, lifecycle tags, duplicate or blocking network requests, long tasks, layout\u002Fpaint cost, screen redraws, React rerenders, or browser trace analysis where tests alone cannot prove the real app.","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fwallets\u002Fmetamask-official-recipe-performance\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fwallets\u002Fmetamask-official-recipe-performance\u002FSKILL.md",[],[96,97,22,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114],"performance","recipe performance","mm","sentry","harness","app","deterministic","recipes","flow","cold","critical","analysis","tasks","react","browser","layout","screen","network","metamask",{"skillNo":116,"name":117,"nameZh":6,"description":118,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":119,"licenseFileUrl":120,"sourceHtmlUrl":121,"categories":122,"keywords":123,"publishedAt":36},"01M70XT2F8A5CQZ81JBP98KSW3","mexc-spot-websocket","MEXC Spot WebSocket workflows for public streams, protobuf handling, depth maintenance, listen keys, and private streams without exposing API keys.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-spot-websocket\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-spot-websocket\u002FSKILL.md",[],[124,125,27,126,127,128,129,130,131,132,133,134,135,136],"mexc spot websocket","spot","api","workflows","public","listen","streams","depth","keys","for","api keys","maintenance","protobuf",{"skillNo":138,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":119,"licenseFileUrl":141,"sourceHtmlUrl":142,"categories":143,"keywords":144,"publishedAt":36},"01M70XT0MBXN3WZY1BKN0CPNKR","mexc-spot-rest","MEXC Spot REST workflows for public data, signed account requests, orders, wallet\u002Fadmin actions, and secure signing without exposing API keys.","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-spot-rest\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-spot-rest\u002FSKILL.md",[],[145,125,146,147,148,149,150,134,133,132,151,152,153,128,154,127,126],"mexc spot rest","REST","admin","signing","Wallet","requests","actions","secure","data","orders",{"skillNo":156,"name":157,"nameZh":6,"description":158,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":119,"licenseFileUrl":159,"sourceHtmlUrl":160,"categories":161,"keywords":162,"publishedAt":36},"01M70XSYSVZ2N0N91XCAR2CAK0","mexc-futures-websocket","MEXC Futures WebSocket workflows for public streams, private account\u002Forder\u002Fposition streams, ping\u002Fpong, subscriptions, and depth maintenance.","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-futures-websocket\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-futures-websocket\u002FSKILL.md",[],[163,164,27,165,166,135,133,167,131,130,128,127],"mexc futures websocket","futures","position","ping","subscriptions",{"skillNo":169,"name":170,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":171,"sourceHtmlUrl":172,"categories":173,"keywords":174,"publishedAt":36},"01M6H0ZWHVE5W04WG2DKQE2SQC","0xklen-version-and-refresh-sanctions-lists","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-version-and-refresh-sanctions-lists\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-version-and-refresh-sanctions-lists\u002FSKILL.md",[],[175,176,177],"refresh","0xklen version and refresh sanctions lists","version",{"skillNo":179,"name":180,"nameZh":6,"description":181,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":182,"sourceHtmlUrl":183,"categories":184,"keywords":185,"publishedAt":36},"01M6H0Z28Q3R8J0S799GJQWXM3","verify-tests-cover-changed-lines","Use when a PR adds code that the existing suite may not exercise. Measures patch coverage — the share of newly changed lines hit by tests — before approving.","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-verify-tests-cover-changed-lines\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-verify-tests-cover-changed-lines\u002FSKILL.md",[],[186,187,188,189,190,191,192,193,194,195,196],"tests","cover","verify tests cover changed lines","verify","coverage","pr","exercise","use","patch","code","share"]