[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6N09Y7Q4AVHAG40GKAF7ECH":3,"skill-same:01M6N09Y7Q4AVHAG40GKAF7ECH":88},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":40,"linkOnly":41,"markdownContent":42,"markdownBody":43,"frontMatter":44,"refName":59,"commitSha":60,"skillDirectory":61,"forksCount":62,"repositoryHtmlUrl":63,"repositoryHomepageUrl":6,"ownerHtmlUrl":64,"ownerBlogUrl":65,"ownerDescription":66,"updatedAt":67,"install":68,"resources":81},"01M6N09Y7Q4AVHAG40GKAF7ECH","measure-before-you-fix",null,"Before fixing a slow\u002Fstale\u002Ftimeout alert, measure the step yourself.\nKill the theory with a stopwatch, not a code change. Measure-first ops\ntriage for temporal alerts (stale, timeout, freshness, wedged, N hours\nbehind) from gbrain doctor, autopilot, sync, and cron monitors — runs\nBEFORE any timeout raise, threshold change, or pipeline rewrite.","garrytan\u002Fgbrain","garrytan","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F19957?v=4","01M6DJCCDDG53MTYYRTXAXFG17","Garry Tan","01M6MZQZCEN3RRMD33E1X9ZZR9",32847,"MIT","https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgbrain\u002Fblob\u002Fmaster\u002Fplugin\u002Fskills\u002Fmeasure-before-you-fix\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39],"measure before you fix","you","fix","alerts","when","for","with","temporal","timing","rewrite","gbrain","false","change","alert","use","ops","why","first","pipeline","doctor","code","2026-11-10 10:12:30",false,"---\nname: measure-before-you-fix\nversion: 1.0.0\ndescription: |\n  Before fixing a slow\u002Fstale\u002Ftimeout alert, measure the step yourself.\n  Kill the theory with a stopwatch, not a code change. Measure-first ops\n  triage for temporal alerts (stale, timeout, freshness, wedged, N hours\n  behind) from gbrain doctor, autopilot, sync, and cron monitors — runs\n  BEFORE any timeout raise, threshold change, or pipeline rewrite.\ntriggers:\n  - \"keeps timing out\"\n  - \"ETIMEDOUT\"\n  - \"why is this data stale\"\n  - \"freshness alert\"\n  - \"wedged\"\n  - \"job is slow\"\n  - \"sync is stuck\"\n  - \"raise the timeout\"\nmutating: false\nwrites_pages: false\nwrites_to: []\nupstream: measure-before-you-fix@fc834ee\nwhen_to_use: \"Use when the user asks: \\\"keeps timing out\\\", \\\"ETIMEDOUT\\\", \\\"why is this data stale\\\", \\\"freshness alert\\\", \\\"wedged\\\".\"\n---\n\n# Measure Before You Fix\n\n> **Convention:** see [conventions\u002Fbrain-first.md](..\u002Fconventions\u002Fbrain-first.md) —\n> before re-deriving a diagnosis, `search` the brain for prior incidents of\n> the same alert. A recurring alert usually has a recorded verdict already.\n\nRoute here on any alert whose claim is **temporal** — \"X is stale\", \"step\ntimed out\", \"pipeline wedged\", \"job is slow\", \"N hours behind\". These alerts\ninvite an immediate structural fix (raise the timeout, split the step,\nreorder the pipeline). Do the measurement first. It is almost always cheaper\nthan the fix, and it frequently invalidates it. (Routing is a harness\nconvention, not a mechanical guarantee — the contract below is the\ndiscipline that makes it stick.)\n\nOn gbrain surfaces this covers: `gbrain doctor` staleness checks (e.g. sync\nfreshness, cycle freshness), autopilot cycle alerts, the sync stall watchdog\n(`reason: 'stall_timeout'`), and any cron monitor built on top of them.\n\n## The rule\n\n**One stopwatch measurement of the suspect step, before any code change.**\n\nIf you cannot state the measured duration of the thing you claim is slow, you\ndo not yet know the root cause, and any fix you write is a guess wearing a diff.\n\n## Contract\n\nThis skill guarantees:\n\n- No structural fix (timeout raise, step split, pipeline reorder, wrapper\n  rewrite) is proposed before a measured duration of the blamed step exists.\n- The measurement targets the *specific* entity the alert named, not the\n  aggregate (`--all` hides which member is slow).\n- The alert's threshold is compared against the authoritative one\n  (`gbrain doctor`'s warn\u002Ffail lines) before the system is declared unhealthy.\n- The verdict explicitly distinguishes \"needs more time\" from \"is wedged\" —\n  they have opposite fixes.\n- Read-only: this skill changes no timeouts, thresholds, or code. It produces\n  a measurement verdict that sizes the fix; the fix itself is a separate,\n  now-informed change.\n\n## Procedure\n\n1. **Read the alert's own numbers.** They often contradict the theory already.\n   (`Locks: none` means it isn't lock contention. Note it and drop that branch.)\n\n2. **Time the suspect step directly.** Isolate the smallest unit that the alert\n   blames, and run it with a clock:\n\n   ```bash\n   time gbrain sync --source source-a --no-embed\n   ```\n\n   Run it on the *specific* named entity, not the aggregate. A whole-brain run\n   hides which member is slow; `--source source-a` answers the question.\n   Cross-check state with `gbrain sources status` (per-source sync lag).\n\n3. **Compare measured vs. budgeted.** Grep every timeout in the wrapper, not\n   just the default in the helper signature:\n\n   ```bash\n   grep -n \"timeoutMs\\|timeout:\" \u003Cthe wrapper or cron script>\n   ```\n\n   A generous per-call override makes the helper's default irrelevant. Check the\n   call site before blaming the default.\n\n4. **Check the alert threshold against the authoritative one.** Before\n   concluding the system is broken, confirm the alerter and the audit agree on\n   what \"bad\" means. `gbrain doctor`'s sync-freshness check defaults to\n   24h warn \u002F 72h fail (env-overridable via `GBRAIN_SYNC_FRESHNESS_WARN_HOURS`\n   \u002F `GBRAIN_SYNC_FRESHNESS_FAIL_HOURS`); a cron monitor paging at 12h is\n   speaking below the authoritative warn line. A monitor that *acts* early is\n   correct; a monitor that *speaks* at its act-line is a false-positive\n   generator.\n\n5. **Only now design the fix** — against the number you measured.\n\n## The threshold-mismatch failure mode\n\nA cron monitor legitimately acts earlier than the doctor fails, to keep drift\nout of FAIL territory. That is good design. The bug is reusing the\nact-threshold as the alert-threshold: everything between \"act\" and \"warn\"\nbecomes a recurring page about a healthy system.\n\n**Separate the two constants.** Act at the aggressive line, speak at the\nauthoritative one:\n\n```js\nconst ACT_HOURS = Number(env.MONITOR_ACT_HOURS || 12);      \u002F\u002F act early — fine\nconst ALERT_HOURS = Math.max(ACT_HOURS, DOCTOR_WARN_HOURS); \u002F\u002F speak at the audit's line\n```\n\nSymptom to recognize instantly: **a repeating alert whose numbers sit below the\ndoctor's own warn line**, while the underlying resource looks fine when queried\ndirectly.\n\n## Red flags that you are theorizing, not diagnosing\n\n- You have a root cause but no measured duration.\n- Your fix is a rewrite and you have not run the step once.\n- You revise the theory twice without taking a new measurement between revisions.\n- The alert says \"no recovery in flight\" — verify whether recovery is in fact\n  running before believing it (`ps` for the worker; check the launch flag;\n  `gbrain jobs list` for queued work).\n- \"Already up to date\" in the step output. That step is not your bottleneck.\n\n## When it fails\n\nFollow the [agent operator protocol](..\u002Fconventions\u002Fagent-operator-protocol.md) for any gbrain error `code`, exit code, `[AGENT]` block or notice block. Specific to this skill:\n\n- `gbrain doctor` warns or fails: record the exact check and threshold before declaring the system unhealthy; the doctor's 24h\u002F72h sync-freshness thresholds may differ from a cron monitor's.\n- `gbrain sources status` shows held items or `lock_busy`: that is the measured cause; fix it and re-measure instead of raising timeouts.\n\n## Anti-Patterns\n\n- **Raising a timeout to fix a stall.** If the step is genuinely hung, a bigger\n  budget just hangs longer. Measure, then decide between \"needs more time\" and\n  \"is wedged\" — they have opposite fixes. (gbrain's sync stall watchdog makes\n  the same distinction natively: it keys on forward progress, not elapsed time.)\n- **Rewriting a pipeline on an unmeasured starvation theory.** Splitting steps to\n  fix starvation that does not exist adds surface area and fixes nothing.\n- **Trusting the alert's causal claim.** Alerts report symptoms accurately and\n  causes badly. The staleness number is real; the reason attached to it is a guess.\n- **Skillifying or persisting a root cause you have not measured.** A confident\n  wrong diagnosis baked into a playbook is worse than the original bug.\n\n## Known failure modes handled\n\n- **Triple-wrong diagnosis on a freshness alert.** A cron monitor paged\n  repeatedly about two sources (`source-a`, `source-b`) reported hours-stale.\n  Three successive root causes were asserted and a wrapper rewrite approved —\n  before any measurement. The measurement:\n  `time gbrain sync --source source-a --no-embed` finished in single-digit\n  seconds with \"Already up to date\" (same for `source-b`), and\n  `gbrain sources status` showed every source synced that morning. Every\n  theory died at once. Actual cause: the monitor alerted at its\n  act-threshold, hours below `gbrain doctor`'s authoritative warn line. The\n  fix was two lines (`ALERT_HOURS = max(ACT_HOURS, WARN_HOURS)`), not a\n  rewrite. Lesson: when a page repeats about a system that measures healthy,\n  suspect the thresholds before the system.\n- **Contention-theory corollary caught in the same pass:** a CPU-contention\n  worry about a deprioritized (`nice`'d) step was equally unfounded — the step\n  finished in seconds while the host was under sustained concurrent load.\n  Contention theories need the same stopwatch as staleness theories.\n\n## Output Format\n\nThe output is a measurement verdict (conversation-level; this skill writes no\nbrain pages). Only after the verdict is a fix proposed, sized against the\nmeasured number:\n\n```\n## Measurement verdict\n- Alert:      \u003Cthe alert text and which monitor emitted it>\n- Claim:      \u003Cthe temporal claim, e.g. \"source-a 14h stale\">\n- Measured:   \u003Cexact command> → \u003Cduration> (\u003Ckey output, e.g. \"Already up to date\">)\n- Budgeted:   \u003Ctimeout constant + any call-site override, file:line>\n- Thresholds: monitor act-line \u003CX>h vs doctor warn-line \u003CY>h → \u003Cmatch | MISMATCH>\n- Verdict:    false page on healthy system | needs more time | wedged | genuine regression\n- Fix:        \u003Cthe change, justified by the measured number — or \"none; adjust the alert line\">\n```\n\n## Dedup (sharp boundaries)\n\n- **GStack `investigate`** — systematic debugging of code bugs (\"why is this\n  broken\", 500 errors, wrong output). Boundary: `investigate` root-causes code\n  *behavior*; this skill is the measure-first gate for temporal *ops alerts*\n  (stale\u002Ftimeout\u002Ffreshness\u002Fwedged) that runs before any timeout or threshold\n  is touched. If the stopwatch confirms a genuine slowness or regression, hand\n  off to `investigate` with the measured number.\n- **`skills\u002Fmaintain\u002FSKILL.md`** — runs brain health checks and repairs\n  (doctor, extraction, dream cycle). Boundary: maintain *emits and acts on*\n  health output; this skill governs how to respond when one of those checks\n  pages, before budgets or wrappers change.\n- **smoke-test (host-side)** — binary post-restart health checks with\n  auto-fix. Boundary: smoke-test answers \"is it up after a restart\"; this\n  skill answers \"is this slow\u002Fstale claim even true\".\n- **`skills\u002Fcron-scheduler\u002FSKILL.md`** — schedules monitors and jobs.\n  Boundary: cron-scheduler decides *when* monitors run; this skill supplies\n  the act-line vs alert-line rule their thresholds must encode.\n- **`skills\u002Fconventions\u002Ftest-before-bulk.md`** — trial-before-bulk for\n  mutations. Same spirit (evidence before action), different object: that\n  convention gates bulk *writes*; this skill gates timeout\u002Fthreshold\u002Fpipeline\n  *changes*.\n","# Measure Before You Fix\n\n> **Convention:** see [conventions\u002Fbrain-first.md](..\u002Fconventions\u002Fbrain-first.md) —\n> before re-deriving a diagnosis, `search` the brain for prior incidents of\n> the same alert. A recurring alert usually has a recorded verdict already.\n\nRoute here on any alert whose claim is **temporal** — \"X is stale\", \"step\ntimed out\", \"pipeline wedged\", \"job is slow\", \"N hours behind\". These alerts\ninvite an immediate structural fix (raise the timeout, split the step,\nreorder the pipeline). Do the measurement first. It is almost always cheaper\nthan the fix, and it frequently invalidates it. (Routing is a harness\nconvention, not a mechanical guarantee — the contract below is the\ndiscipline that makes it stick.)\n\nOn gbrain surfaces this covers: `gbrain doctor` staleness checks (e.g. sync\nfreshness, cycle freshness), autopilot cycle alerts, the sync stall watchdog\n(`reason: 'stall_timeout'`), and any cron monitor built on top of them.\n\n## The rule\n\n**One stopwatch measurement of the suspect step, before any code change.**\n\nIf you cannot state the measured duration of the thing you claim is slow, you\ndo not yet know the root cause, and any fix you write is a guess wearing a diff.\n\n## Contract\n\nThis skill guarantees:\n\n- No structural fix (timeout raise, step split, pipeline reorder, wrapper\n  rewrite) is proposed before a measured duration of the blamed step exists.\n- The measurement targets the *specific* entity the alert named, not the\n  aggregate (`--all` hides which member is slow).\n- The alert's threshold is compared against the authoritative one\n  (`gbrain doctor`'s warn\u002Ffail lines) before the system is declared unhealthy.\n- The verdict explicitly distinguishes \"needs more time\" from \"is wedged\" —\n  they have opposite fixes.\n- Read-only: this skill changes no timeouts, thresholds, or code. It produces\n  a measurement verdict that sizes the fix; the fix itself is a separate,\n  now-informed change.\n\n## Procedure\n\n1. **Read the alert's own numbers.** They often contradict the theory already.\n   (`Locks: none` means it isn't lock contention. Note it and drop that branch.)\n\n2. **Time the suspect step directly.** Isolate the smallest unit that the alert\n   blames, and run it with a clock:\n\n   ```bash\n   time gbrain sync --source source-a --no-embed\n   ```\n\n   Run it on the *specific* named entity, not the aggregate. A whole-brain run\n   hides which member is slow; `--source source-a` answers the question.\n   Cross-check state with `gbrain sources status` (per-source sync lag).\n\n3. **Compare measured vs. budgeted.** Grep every timeout in the wrapper, not\n   just the default in the helper signature:\n\n   ```bash\n   grep -n \"timeoutMs\\|timeout:\" \u003Cthe wrapper or cron script>\n   ```\n\n   A generous per-call override makes the helper's default irrelevant. Check the\n   call site before blaming the default.\n\n4. **Check the alert threshold against the authoritative one.** Before\n   concluding the system is broken, confirm the alerter and the audit agree on\n   what \"bad\" means. `gbrain doctor`'s sync-freshness check defaults to\n   24h warn \u002F 72h fail (env-overridable via `GBRAIN_SYNC_FRESHNESS_WARN_HOURS`\n   \u002F `GBRAIN_SYNC_FRESHNESS_FAIL_HOURS`); a cron monitor paging at 12h is\n   speaking below the authoritative warn line. A monitor that *acts* early is\n   correct; a monitor that *speaks* at its act-line is a false-positive\n   generator.\n\n5. **Only now design the fix** — against the number you measured.\n\n## The threshold-mismatch failure mode\n\nA cron monitor legitimately acts earlier than the doctor fails, to keep drift\nout of FAIL territory. That is good design. The bug is reusing the\nact-threshold as the alert-threshold: everything between \"act\" and \"warn\"\nbecomes a recurring page about a healthy system.\n\n**Separate the two constants.** Act at the aggressive line, speak at the\nauthoritative one:\n\n```js\nconst ACT_HOURS = Number(env.MONITOR_ACT_HOURS || 12);      \u002F\u002F act early — fine\nconst ALERT_HOURS = Math.max(ACT_HOURS, DOCTOR_WARN_HOURS); \u002F\u002F speak at the audit's line\n```\n\nSymptom to recognize instantly: **a repeating alert whose numbers sit below the\ndoctor's own warn line**, while the underlying resource looks fine when queried\ndirectly.\n\n## Red flags that you are theorizing, not diagnosing\n\n- You have a root cause but no measured duration.\n- Your fix is a rewrite and you have not run the step once.\n- You revise the theory twice without taking a new measurement between revisions.\n- The alert says \"no recovery in flight\" — verify whether recovery is in fact\n  running before believing it (`ps` for the worker; check the launch flag;\n  `gbrain jobs list` for queued work).\n- \"Already up to date\" in the step output. That step is not your bottleneck.\n\n## When it fails\n\nFollow the [agent operator protocol](..\u002Fconventions\u002Fagent-operator-protocol.md) for any gbrain error `code`, exit code, `[AGENT]` block or notice block. Specific to this skill:\n\n- `gbrain doctor` warns or fails: record the exact check and threshold before declaring the system unhealthy; the doctor's 24h\u002F72h sync-freshness thresholds may differ from a cron monitor's.\n- `gbrain sources status` shows held items or `lock_busy`: that is the measured cause; fix it and re-measure instead of raising timeouts.\n\n## Anti-Patterns\n\n- **Raising a timeout to fix a stall.** If the step is genuinely hung, a bigger\n  budget just hangs longer. Measure, then decide between \"needs more time\" and\n  \"is wedged\" — they have opposite fixes. (gbrain's sync stall watchdog makes\n  the same distinction natively: it keys on forward progress, not elapsed time.)\n- **Rewriting a pipeline on an unmeasured starvation theory.** Splitting steps to\n  fix starvation that does not exist adds surface area and fixes nothing.\n- **Trusting the alert's causal claim.** Alerts report symptoms accurately and\n  causes badly. The staleness number is real; the reason attached to it is a guess.\n- **Skillifying or persisting a root cause you have not measured.** A confident\n  wrong diagnosis baked into a playbook is worse than the original bug.\n\n## Known failure modes handled\n\n- **Triple-wrong diagnosis on a freshness alert.** A cron monitor paged\n  repeatedly about two sources (`source-a`, `source-b`) reported hours-stale.\n  Three successive root causes were asserted and a wrapper rewrite approved —\n  before any measurement. The measurement:\n  `time gbrain sync --source source-a --no-embed` finished in single-digit\n  seconds with \"Already up to date\" (same for `source-b`), and\n  `gbrain sources status` showed every source synced that morning. Every\n  theory died at once. Actual cause: the monitor alerted at its\n  act-threshold, hours below `gbrain doctor`'s authoritative warn line. The\n  fix was two lines (`ALERT_HOURS = max(ACT_HOURS, WARN_HOURS)`), not a\n  rewrite. Lesson: when a page repeats about a system that measures healthy,\n  suspect the thresholds before the system.\n- **Contention-theory corollary caught in the same pass:** a CPU-contention\n  worry about a deprioritized (`nice`'d) step was equally unfounded — the step\n  finished in seconds while the host was under sustained concurrent load.\n  Contention theories need the same stopwatch as staleness theories.\n\n## Output Format\n\nThe output is a measurement verdict (conversation-level; this skill writes no\nbrain pages). Only after the verdict is a fix proposed, sized against the\nmeasured number:\n\n```\n## Measurement verdict\n- Alert:      \u003Cthe alert text and which monitor emitted it>\n- Claim:      \u003Cthe temporal claim, e.g. \"source-a 14h stale\">\n- Measured:   \u003Cexact command> → \u003Cduration> (\u003Ckey output, e.g. \"Already up to date\">)\n- Budgeted:   \u003Ctimeout constant + any call-site override, file:line>\n- Thresholds: monitor act-line \u003CX>h vs doctor warn-line \u003CY>h → \u003Cmatch | MISMATCH>\n- Verdict:    false page on healthy system | needs more time | wedged | genuine regression\n- Fix:        \u003Cthe change, justified by the measured number — or \"none; adjust the alert line\">\n```\n\n## Dedup (sharp boundaries)\n\n- **GStack `investigate`** — systematic debugging of code bugs (\"why is this\n  broken\", 500 errors, wrong output). Boundary: `investigate` root-causes code\n  *behavior*; this skill is the measure-first gate for temporal *ops alerts*\n  (stale\u002Ftimeout\u002Ffreshness\u002Fwedged) that runs before any timeout or threshold\n  is touched. If the stopwatch confirms a genuine slowness or regression, hand\n  off to `investigate` with the measured number.\n- **`skills\u002Fmaintain\u002FSKILL.md`** — runs brain health checks and repairs\n  (doctor, extraction, dream cycle). Boundary: maintain *emits and acts on*\n  health output; this skill governs how to respond when one of those checks\n  pages, before budgets or wrappers change.\n- **smoke-test (host-side)** — binary post-restart health checks with\n  auto-fix. Boundary: smoke-test answers \"is it up after a restart\"; this\n  skill answers \"is this slow\u002Fstale claim even true\".\n- **`skills\u002Fcron-scheduler\u002FSKILL.md`** — schedules monitors and jobs.\n  Boundary: cron-scheduler decides *when* monitors run; this skill supplies\n  the act-line vs alert-line rule their thresholds must encode.\n- **`skills\u002Fconventions\u002Ftest-before-bulk.md`** — trial-before-bulk for\n  mutations. Same spirit (evidence before action), different object: that\n  convention gates bulk *writes*; this skill gates timeout\u002Fthreshold\u002Fpipeline\n  *changes*.\n",{"name":5,"version":45,"mutating":41,"triggers":46,"upstream":55,"writes_to":56,"description":57,"when_to_use":58,"writes_pages":41},"1.0.0",[47,48,49,50,51,52,53,54],"keeps timing out","ETIMEDOUT","why is this data stale","freshness alert","wedged","job is slow","sync is stuck","raise the timeout","measure-before-you-fix@fc834ee",[],"Before fixing a slow\u002Fstale\u002Ftimeout alert, measure the step yourself.\nKill the theory with a stopwatch, not a code change. Measure-first ops\ntriage for temporal alerts (stale, timeout, freshness, wedged, N hours\nbehind) from gbrain doctor, autopilot, sync, and cron monitors — runs\nBEFORE any timeout raise, threshold change, or pipeline rewrite.\n","Use when the user asks: \"keeps timing out\", \"ETIMEDOUT\", \"why is this data stale\", \"freshness alert\", \"wedged\".","master","074ec301549ded4930f04d2c3b22d709a6c095cc","plugin\u002Fskills\u002Fmeasure-before-you-fix",4902,"https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgbrain","https:\u002F\u002Fgithub.com\u002Fgarrytan","https:\u002F\u002Fblog.garrytan.com","Writes software, dreams. ","2026-11-14 04:11:30",{"source":8,"skillName":5,"commands":69,"prompt":79,"zipAvailable":80},[70,73,76],{"tool":71,"command":72},"npx","npx skills add garrytan\u002Fgbrain --skill measure-before-you-fix",{"tool":74,"command":75},"bunx","bunx skills add garrytan\u002Fgbrain --skill measure-before-you-fix",{"tool":77,"command":78},"pnpm","pnpm dlx skills add garrytan\u002Fgbrain --skill measure-before-you-fix","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgbrain\u002Fblob\u002Fmaster\u002Fplugin\u002Fskills\u002Fmeasure-before-you-fix\u002FSKILL.md",true,[82],{"path":83,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":86,"sourceHtmlUrl":87},"routing-eval.jsonl","OTHER","其他",1475,"https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgbrain\u002Fblob\u002Fmaster\u002Fplugin\u002Fskills\u002Fmeasure-before-you-fix\u002Frouting-eval.jsonl",[89,101,107,128,153,167],{"skillNo":90,"name":91,"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":92,"categories":93,"keywords":94,"publishedAt":40},"01M6N109FNGH1PK49T734PZXGB","query-helper","https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgbrain\u002Fblob\u002Fmaster\u002Ftest\u002Ffixtures\u002Fskill-catalog\u002Fskills\u002Fquery-helper\u002FSKILL.md",[],[95,96,97,98,99,100,30],"query helper","helper","query","search","page","find",{"skillNo":102,"name":103,"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":104,"categories":105,"keywords":106,"publishedAt":40},"01M6N108A23GW6NGQEQ0E7GV0A","broken","https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgbrain\u002Fblob\u002Fmaster\u002Ftest\u002Ffixtures\u002Fskill-catalog\u002Fskills\u002Fbroken\u002FSKILL.md",[],[103],{"skillNo":108,"name":109,"nameZh":6,"description":110,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":113,"publishedAt":40},"01M6N105E88C5K2H03H0CC79G1","brain-ops","Read, enrich, and write brain pages with source attribution.","https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgbrain\u002Fblob\u002Fmaster\u002Ftest\u002Ffixtures\u002Fskill-catalog\u002Fskills\u002Fbrain-ops\u002FSKILL.md",[],[114,115,34,116,117,99,118,119,120,121,97,122,123,25,124,125,126,127,98],"brain ops","brain","true","attribution","read","write","up","look","pages","people","enrich","web","path","source",{"skillNo":129,"name":130,"nameZh":6,"description":131,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":132,"categories":133,"keywords":139,"publishedAt":40},"01M6N102GRMF22TVCNT6RK5MRD","meeting-prep","Build a briefing before you meet someone, from their recent threads, open loops and what they care about.","https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgbrain\u002Fblob\u002Fmaster\u002Ftest\u002Ffixtures\u002Fskill-catalog-query\u002Fskills\u002Fmeeting-prep\u002FSKILL.md",[134],{"categoryNo":135,"categoryName":136,"taxonomyType":137,"taxonomyTypeDesc":138},"01JBSEEDCAT000000000000034","行政与办公人员","PROFESSION","适用职业",[140,141,142,143,144,98,145,146,147,97,30,148,149,20,150,151,24,152],"meeting","prep","meeting prep","me","prepare","brief","open","build","loops","about","briefing","threads","Meet",{"skillNo":154,"name":155,"nameZh":6,"description":156,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":157,"categories":158,"keywords":159,"publishedAt":40},"01M6N1005QK7REHX5KGMNR5PF0","inbox-zero","Triage the inbox into replies, delegations and archives.","https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgbrain\u002Fblob\u002Fmaster\u002Ftest\u002Ffixtures\u002Fskill-catalog-query\u002Fskills\u002Finbox-zero\u002FSKILL.md",[],[160,161,162,98,163,30,164,165,166],"inbox zero","ZeRO","inbox","clear","replies","my","triage",{"skillNo":168,"name":169,"nameZh":6,"description":170,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":171,"categories":172,"keywords":173,"publishedAt":40},"01M6N0ZXQ8RRRW71PNV61T57GP","deal-memo","Draft an investment memo from the deal pages and the founder history already in the brain.","https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgbrain\u002Fblob\u002Fmaster\u002Ftest\u002Ffixtures\u002Fskill-catalog-query\u002Fskills\u002Fdeal-memo\u002FSKILL.md",[],[174,175,176,122,115,177,178,119,179,116,98,180],"deal memo","deal","memo","draft","investment","history","founder"]