[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CVQTC883K58NHRMTS3DRF8":3,"skill-same:01M6CVQTC883K58NHRMTS3DRF8":71},{"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":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":43,"commitSha":44,"skillDirectory":45,"forksCount":46,"repositoryHtmlUrl":47,"repositoryHomepageUrl":6,"ownerHtmlUrl":48,"ownerBlogUrl":49,"ownerDescription":6,"updatedAt":50,"install":51,"resources":64},"01M6CVQTC883K58NHRMTS3DRF8","harden",null,"Ship one learning's structural_mitigation_candidate as a real test, then mark the learning's mitigation_type structural. Picks a learning in .living\u002Flearnings.md that is still ambient-awareness but names a concrete check, writes the test in the repository's own test setup, proves it fails when the learning's problem is present and passes on the current code, and updates only that entry after the user confirms. Use when the user asks to harden, enforce, or turn a learning, gotcha, or lesson into a test or structural mitigation. Do not use for recording a new learning, promoting learnings to conventions, adding checks inside analysis code, or changing Mycelium itself.","arjunrajlaboratory\u002Fmycelium","arjunrajlaboratory","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F59969125?v=4","01M6CVPTM66Z3J8E20GYXJ1RQJ","Arjun Raj's systems biology lab","01M6CVPTRFA9TWRGGB81YN4AP0",72,"MIT","https:\u002F\u002Fgithub.com\u002Farjunrajlaboratory\u002Fmycelium\u002Fblob\u002Fmain\u002Fskills\u002Fharden\u002FSKILL.md",[],[5,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"only","mycelium","conventions","enforce","lesson","but","learnings","do","test setup","test","use","user","learning","ship","analysis","awareness","repository","code","setup","2026-11-10 10:12:30",false,"---\nname: harden\ndescription: >\n  Ship one learning's structural_mitigation_candidate as a real test, then mark\n  the learning's mitigation_type structural. Picks a learning in\n  .living\u002Flearnings.md that is still ambient-awareness but names a concrete\n  check, writes the test in the repository's own test setup, proves it fails\n  when the learning's problem is present and passes on the current code, and\n  updates only that entry after the user confirms. Use when the user asks to harden, enforce, or\n  turn a learning, gotcha, or lesson into a test or structural mitigation. Do\n  not use for recording a new learning, promoting learnings to conventions,\n  adding checks inside analysis code, or changing Mycelium itself.\n---\n\n\u003C!--\nAdapted from the harden skill in mycelium-extra\n(https:\u002F\u002Fgithub.com\u002Fmdmanurung\u002Fmycelium-extra), Copyright (c) 2026 Mikhael\nManurung, MIT License. See issue #91.\n-->\n\n# Mycelium — Harden\n\nResolve `.living\u002F` and test paths relative to the user's working repository.\n\nTurn a learning the project keeps having to remember into a test that\nremembers it. A learning counts as `structural` only once its check has\nshipped (`skills\u002Fcore\u002Ftemplates\u002Flearning-entry.md`); until then it stays\n`ambient-awareness`, the weakest kind. This skill ships the check. Harden one\nlearning per run.\n\n## 1. Find a candidate\n\n- Requires `.living\u002Flearnings.md`. Without it, say so and stop.\n- Search it for `structural_mitigation_candidate`, then read each matching\n  entry. An entry starts at the `### [YYYY-MM-DD]` heading above the match;\n  older projects may use a legacy `## [YYYY-MM-DD]` heading.\n- Keep entries whose `mitigation_type` is `ambient-awareness` and whose\n  candidate names a concrete check: a function, file, column, or assertion.\n  Skip the template placeholder and vague candidates (\"be careful with X\").\n  Leave `convention` entries and entries with no `mitigation_type` alone: a\n  convention entry is already enforced, so harden does not take it, and an\n  untyped entry needs its type derived first. An entry marked `structural`\n  whose check never shipped re-derives to `ambient-awareness`, which makes it\n  a candidate here. The type follows the rule in\n  `skills\u002Fcore\u002Ftemplates\u002Flearning-entry.md`; harden only ships a check, after\n  which that rule makes the entry `structural`.\n- A candidate that places its check in analysis code (\"In\n  `analysis\u002F...\u002Fx.py`, assert ...\") still qualifies when the check reads a file\n  a test can read too: show it with \"(check moves to a test)\". If it checks a\n  value only the running script holds, skip it and say why: it needs a code\n  change and a re-run through `$mycelium:analyze`.\n- Show at most five, newest first: date, title, and the candidate in one line.\n  The user picks one. If none qualifies, say so and stop.\n\n## 2. Place the test\n\n- Follow the repository's test setup: `pytest.ini`, `[tool.pytest]` in\n  `pyproject.toml`, `tests\u002Ftestthat\u002F`, or existing `test_*.py` files and how\n  they are run (check `README`, `MYCELIUM.md`, `AGENTS.md`, `CLAUDE.md`).\n- With no setup, create `tests\u002Ftest_\u003Cslug>.py` (stdlib `assert`, runnable with\n  `python3`) or `tests\u002Ftestthat\u002Ftest-\u003Cslug>.R`.\n- Never edit analysis code, and never place the test under `analysis\u002F`, a\n  notebook directory, or any path listed in `ANALYSIS_MANIFEST.md`. A check\n  inside analysis code changes what ran, so it belongs to a new analysis run,\n  not to this skill. For a candidate placed in analysis code, write the same\n  assertion in the test, reading the file the analysis reads or writes, and\n  leave the script as it is.\n- Name the test after the learning and cite it in a one-line comment:\n  `# Guards learning \"\u003Ctitle>\" (.living\u002Flearnings.md, \u003Cdate>).`\n\n## 3. Prove it guards something\n\nA test guards something only if it fails when the learning's problem is\npresent and passes now. How to make the problem present depends on what the\ntest checks:\n\n- **A data check** (a column, a sample count, a file format) asserts a property\n  of a file. Its red run feeds the same assertion a small fixture, built in the\n  test or a temporary file, that recreates the bad data. It must fail there.\n- **A code check** (a function's behavior) passes on the problematic input once\n  the fix is in. Its red run is against the unmitigated implementation: the\n  commit before the fix, checked out in a temporary `git worktree` (it holds\n  only tracked files, so copy the new test into it), or the fix monkeypatched\n  out inside a throwaway run. It must fail there, on its targeted assertion: a\n  missing test, import error, or collection failure is not a red run. Then\n  remove the worktree with `git worktree remove --force \u003Cpath>` (`--force`\n  because the copied test leaves it dirty), which also clears its Git\n  metadata; deleting the directory alone does not. Never edit the\n  repository's code to stage the red run, and never keep a test that fails on\n  the input it is meant to handle.\n\nThen the green run: the test must pass on the current code or data. Show both\nruns.\n\nIf it cannot be made to fail in its red run, it guards nothing: stop, and\nleave the entry `ambient-awareness`. If it fails on the current code, the\nproblem is live: report it, and do not mark the learning structural.\n\nFor a data learning (a column, a sample count, a file format), the test may\nread the repository's data file. If that file is large or git-ignored, say the\ntest only runs where the data exists.\n\n## 4. Record, after the user confirms\n\nShow the test path, both runs, and the exact edit, then ask. After the user\nconfirms, edit only that entry:\n\n- `**mitigation_type**: structural`\n- `**structural_mitigation_candidate**: \u003Cunchanged text> Shipped: \u003Ctest path> (YYYY-MM-DD).`\n\nAppend the `Shipped:` note to the end of the existing candidate text, even\nwhen that text wraps over several lines. Change no other field or entry, and\ndo not commit. If Mycelium's Stop hook asks for `.living\u002F` updates afterwards,\nfollow it. End with one line: the learning, the test path, and how to run it.\n","\u003C!--\nAdapted from the harden skill in mycelium-extra\n(https:\u002F\u002Fgithub.com\u002Fmdmanurung\u002Fmycelium-extra), Copyright (c) 2026 Mikhael\nManurung, MIT License. See issue #91.\n-->\n\n# Mycelium — Harden\n\nResolve `.living\u002F` and test paths relative to the user's working repository.\n\nTurn a learning the project keeps having to remember into a test that\nremembers it. A learning counts as `structural` only once its check has\nshipped (`skills\u002Fcore\u002Ftemplates\u002Flearning-entry.md`); until then it stays\n`ambient-awareness`, the weakest kind. This skill ships the check. Harden one\nlearning per run.\n\n## 1. Find a candidate\n\n- Requires `.living\u002Flearnings.md`. Without it, say so and stop.\n- Search it for `structural_mitigation_candidate`, then read each matching\n  entry. An entry starts at the `### [YYYY-MM-DD]` heading above the match;\n  older projects may use a legacy `## [YYYY-MM-DD]` heading.\n- Keep entries whose `mitigation_type` is `ambient-awareness` and whose\n  candidate names a concrete check: a function, file, column, or assertion.\n  Skip the template placeholder and vague candidates (\"be careful with X\").\n  Leave `convention` entries and entries with no `mitigation_type` alone: a\n  convention entry is already enforced, so harden does not take it, and an\n  untyped entry needs its type derived first. An entry marked `structural`\n  whose check never shipped re-derives to `ambient-awareness`, which makes it\n  a candidate here. The type follows the rule in\n  `skills\u002Fcore\u002Ftemplates\u002Flearning-entry.md`; harden only ships a check, after\n  which that rule makes the entry `structural`.\n- A candidate that places its check in analysis code (\"In\n  `analysis\u002F...\u002Fx.py`, assert ...\") still qualifies when the check reads a file\n  a test can read too: show it with \"(check moves to a test)\". If it checks a\n  value only the running script holds, skip it and say why: it needs a code\n  change and a re-run through `$mycelium:analyze`.\n- Show at most five, newest first: date, title, and the candidate in one line.\n  The user picks one. If none qualifies, say so and stop.\n\n## 2. Place the test\n\n- Follow the repository's test setup: `pytest.ini`, `[tool.pytest]` in\n  `pyproject.toml`, `tests\u002Ftestthat\u002F`, or existing `test_*.py` files and how\n  they are run (check `README`, `MYCELIUM.md`, `AGENTS.md`, `CLAUDE.md`).\n- With no setup, create `tests\u002Ftest_\u003Cslug>.py` (stdlib `assert`, runnable with\n  `python3`) or `tests\u002Ftestthat\u002Ftest-\u003Cslug>.R`.\n- Never edit analysis code, and never place the test under `analysis\u002F`, a\n  notebook directory, or any path listed in `ANALYSIS_MANIFEST.md`. A check\n  inside analysis code changes what ran, so it belongs to a new analysis run,\n  not to this skill. For a candidate placed in analysis code, write the same\n  assertion in the test, reading the file the analysis reads or writes, and\n  leave the script as it is.\n- Name the test after the learning and cite it in a one-line comment:\n  `# Guards learning \"\u003Ctitle>\" (.living\u002Flearnings.md, \u003Cdate>).`\n\n## 3. Prove it guards something\n\nA test guards something only if it fails when the learning's problem is\npresent and passes now. How to make the problem present depends on what the\ntest checks:\n\n- **A data check** (a column, a sample count, a file format) asserts a property\n  of a file. Its red run feeds the same assertion a small fixture, built in the\n  test or a temporary file, that recreates the bad data. It must fail there.\n- **A code check** (a function's behavior) passes on the problematic input once\n  the fix is in. Its red run is against the unmitigated implementation: the\n  commit before the fix, checked out in a temporary `git worktree` (it holds\n  only tracked files, so copy the new test into it), or the fix monkeypatched\n  out inside a throwaway run. It must fail there, on its targeted assertion: a\n  missing test, import error, or collection failure is not a red run. Then\n  remove the worktree with `git worktree remove --force \u003Cpath>` (`--force`\n  because the copied test leaves it dirty), which also clears its Git\n  metadata; deleting the directory alone does not. Never edit the\n  repository's code to stage the red run, and never keep a test that fails on\n  the input it is meant to handle.\n\nThen the green run: the test must pass on the current code or data. Show both\nruns.\n\nIf it cannot be made to fail in its red run, it guards nothing: stop, and\nleave the entry `ambient-awareness`. If it fails on the current code, the\nproblem is live: report it, and do not mark the learning structural.\n\nFor a data learning (a column, a sample count, a file format), the test may\nread the repository's data file. If that file is large or git-ignored, say the\ntest only runs where the data exists.\n\n## 4. Record, after the user confirms\n\nShow the test path, both runs, and the exact edit, then ask. After the user\nconfirms, edit only that entry:\n\n- `**mitigation_type**: structural`\n- `**structural_mitigation_candidate**: \u003Cunchanged text> Shipped: \u003Ctest path> (YYYY-MM-DD).`\n\nAppend the `Shipped:` note to the end of the existing candidate text, even\nwhen that text wraps over several lines. Change no other field or entry, and\ndo not commit. If Mycelium's Stop hook asks for `.living\u002F` updates afterwards,\nfollow it. End with one line: the learning, the test path, and how to run it.\n",{"name":5,"description":7},"main","2c9d7a461b75b93020c274bff2a508697dc05caa","skills\u002Fharden",2,"https:\u002F\u002Fgithub.com\u002Farjunrajlaboratory\u002Fmycelium","https:\u002F\u002Fgithub.com\u002Farjunrajlaboratory","https:\u002F\u002Frajlab.seas.upenn.edu\u002F","2026-11-08 03:57:58",{"source":8,"skillName":5,"commands":52,"prompt":62,"zipAvailable":63},[53,56,59],{"tool":54,"command":55},"npx","npx skills add arjunrajlaboratory\u002Fmycelium --skill harden",{"tool":57,"command":58},"bunx","bunx skills add arjunrajlaboratory\u002Fmycelium --skill harden",{"tool":60,"command":61},"pnpm","pnpm dlx skills add arjunrajlaboratory\u002Fmycelium --skill harden","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Farjunrajlaboratory\u002Fmycelium\u002Fblob\u002Fmain\u002Fskills\u002Fharden\u002FSKILL.md",true,[65],{"path":66,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":69,"sourceHtmlUrl":70},"agents\u002Fopenai.yaml","REFERENCE","参考文档",254,"https:\u002F\u002Fgithub.com\u002Farjunrajlaboratory\u002Fmycelium\u002Fblob\u002Fmain\u002Fskills\u002Fharden\u002Fagents\u002Fopenai.yaml",[72,86,108,138,159,181],{"skillNo":73,"name":74,"nameZh":6,"description":75,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":78,"publishedAt":38},"01M6CVRE72Z220BXQCRXZT2481","transfer","Cross-pollinate learnings across Science subprojects by scanning recent .living\u002Flearnings.md entries and identifying actionable knowledge transfers. Use when user says \"transfer knowledge\", \"cross-pollinate\", \"sync learnings\", or \"knowledge transfer\".","https:\u002F\u002Fgithub.com\u002Farjunrajlaboratory\u002Fmycelium\u002Fblob\u002Fmain\u002Fskills\u002Ftransfer\u002FSKILL.md",[],[74,79,80,81,30,29,82,83,25,84,85],"sync","science","knowledge","scanning","knowledge transfer","across","entries",{"skillNo":87,"name":88,"nameZh":6,"description":89,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":38},"01M6CVRAK8SNRVYV5Q6FPMSK06","review","Review or audit analytical code and scientific changes in statistics, ML, bioinformatics, or data pipelines. Use for PRs, commits, diffs, sanity checks, correctness questions, pre-merge review, tripwire testing, or conversational grill mode. Consult the bundled statistical, leakage, bioinformatics, documentation, LLM-failure, and code-quality checklists; synthesize prioritized findings. Do not use for writing new analysis, reports, brainstorming, project initialization, or pure software review with no analytical component.","https:\u002F\u002Fgithub.com\u002Farjunrajlaboratory\u002Fmycelium\u002Fblob\u002Fmain\u002Fskills\u002Freview\u002FSKILL.md",[],[88,93,94,95,96,97,98,99,36,100,101,33,102,103,104,29,105,106,26,107],"testing","writing","diffs","component","documentation","brainstorming","ml","audit","tripwire","commits","consult","code-quality","reports","grill","synthesize",{"skillNo":109,"name":110,"nameZh":6,"description":111,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":112,"categories":113,"keywords":124,"publishedAt":38},"01M6CVR761ZN49KWQXV3NG5AGA","report","Create a shareable report — a PDF, or a self-contained HTML report with a companion slide deck — a manuscript section, or a structured writeup from completed Mycelium analyses. Load the project's report templates, provenance, section guidance, and QC checklist. Use when the user wants a document artifact for collaborators or publication. Do not use for conversational explanation, standalone figures, performing analysis, ingestion, setup, or brainstorming.","https:\u002F\u002Fgithub.com\u002Farjunrajlaboratory\u002Fmycelium\u002Fblob\u002Fmain\u002Fskills\u002Freport\u002FSKILL.md",[114,119],{"categoryNo":115,"categoryName":116,"taxonomyType":117,"taxonomyTypeDesc":118},"01JBSEEDCAT000000000000002","文档处理","SCENARIO","使用场景",{"categoryNo":120,"categoryName":121,"taxonomyType":122,"taxonomyTypeDesc":123},"01JBSEEDCAT000000000000034","行政与办公人员","PROFESSION","适用职业",[110,125,37,98,126,127,128,129,33,130,29,131,132,133,134,135,26,136,137,20],"PDF","create","templates","report templates","provenance","html report","deck","ingestion","guidance","checklist","document","artifact","self",{"skillNo":139,"name":140,"nameZh":6,"description":141,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":142,"categories":143,"keywords":144,"publishedAt":38},"01M6CVR3VBVQ7GCR6C2WD1BEZS","lifecycle-audit","Run a black-box Mycelium lifecycle smoke test through a real Claude Code or Codex CLI task. Use after plugin installation, hook, SessionStart, PostToolUse, Stop, activity tracking, handoff, or data-lineage changes; when automatic hooks appear not to fire; or before merging cross-host lifecycle work. Verify installed-build identity, natural dispatch, state transitions, positive and negative probes, and scientific-tree isolation. Do not use as a substitute for unit tests or for ordinary scientific analysis.","https:\u002F\u002Fgithub.com\u002Farjunrajlaboratory\u002Fmycelium\u002Fblob\u002Fmain\u002Fskills\u002Flifecycle-audit\u002FSKILL.md",[],[100,145,146,147,148,28,149,150,151,36,152,153,33,154,29,155,156,157,26,158],"lifecycle","lifecycle audit","cli","codex","unit tests","codex cli","plugin","state","lineage","work","smoke","hooks","smoke test","task",{"skillNo":160,"name":161,"nameZh":6,"description":162,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":163,"categories":164,"keywords":168,"publishedAt":38},"01M6CVR0XNRWMMXX1N32741VE8","ingest","Add or import files and datasets into a Mycelium project with metadata, provenance, validation, and DATA_MANIFEST updates. Use for collaborator or facility outputs and formats such as CSV, FASTQ, XLSX, TIFF, JSON, FCS, TSV, or images. Do not use for analyzing existing data, listing datasets, deleting data, downloading URLs, or editing code.","https:\u002F\u002Fgithub.com\u002Farjunrajlaboratory\u002Fmycelium\u002Fblob\u002Fmain\u002Fskills\u002Fingest\u002FSKILL.md",[165],{"categoryNo":166,"categoryName":167,"taxonomyType":117,"taxonomyTypeDesc":118},"01JBSEEDCAT000000000000004","电子表格",[161,169,36,170,171,172,173,174,175,129,176,177,29,178,179,180,26,20],"xlsx","validation","metadata","csv","analyzing","data","manifest","json","editing","images","files","datasets",{"skillNo":182,"name":183,"nameZh":6,"description":184,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":185,"categories":186,"keywords":187,"publishedAt":38},"01M6CVQY7YVDS8PW82J1C67XJ3","ideas","Brainstorm research ideas using installed persona and ideation conventions. Use for fresh perspectives, creative angles, new analysis directions, expert viewpoints, \"what are we missing?\", or other open-ended exploration. Do not use for a defined analysis, code fix, project setup, or data ingestion task.","https:\u002F\u002Fgithub.com\u002Farjunrajlaboratory\u002Fmycelium\u002Fblob\u002Fmain\u002Fskills\u002Fideas\u002FSKILL.md",[],[183,188,37,189,174,33,190,191,192,193,194,29,132,195,196,197,198,26,199,21],"research","data ingestion","open","persona","brainstorm","perspectives","fix","ideation","creative","project setup","expert","exploration"]