[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6XGK868PA40EZ8EZRGMM7P0":3,"skill-same:01M6XGK868PA40EZ8EZRGMM7P0":77},{"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":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":57,"commitSha":58,"skillDirectory":59,"forksCount":14,"repositoryHtmlUrl":60,"repositoryHomepageUrl":6,"ownerHtmlUrl":61,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":62,"install":63,"resources":76},"01M6XGK868PA40EZ8EZRGMM7P0","conservation-law-discovery",null,"Discover conserved quantities and symmetries from trajectory data. Identifies energy, momentum, angular momentum, and custom invariants using neural networks and symbolic methods. Inspired by Noether's theorem.","fadrienne\u002FMyGitHub","fadrienne","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F197874571?v=4","01M6X64V8VWCRSMFZ4EPS2BWXG","Francesca Adrienne","01M6X64VD5MW4F9PHDWQKS7ZAF",0,"MIT","https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002Fopenscience\u002Fbackend\u002Fcli\u002Fskills\u002Fphysics\u002Fconservation-law-discovery\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"conservation","conservation law discovery","discovery","synthetic","angular","Physics Discovery","Symmetry","Noether","Conservation Laws","energy","custom","trajectory","networks","neural networks","discover","physics","scipy","numpy","methods","Neural","2026-11-10 10:12:30",false,"---\nname: conservation-law-discovery\ndescription: Discover conserved quantities and symmetries from trajectory data. Identifies energy, momentum, angular momentum, and custom invariants using neural networks and symbolic methods. Inspired by Noether's theorem.\ncategory: physics\nversion: 1.0.0\nauthor: Synthetic Sciences\nlicense: MIT\ntags: [Conservation Laws, Noether, Symmetry, Invariants, Physics Discovery]\ndependencies: [\"scipy>=1.11.0\", \"numpy>=1.24.0\", \"matplotlib>=3.7.0\"]\n---\n\n# Conservation Law Discovery\n\n## Overview\n\nDiscover conserved quantities from trajectory data without knowing the governing equations. Uses numerical methods to find functions I(x) such that dI\u002Fdt = 0 along trajectories.\n\n## When to Use\n\n- You have trajectory data and want to find conserved quantities\n- Verifying energy\u002Fmomentum conservation in simulation output\n- Discovering hidden symmetries in dynamical systems\n- Identifying integrals of motion for Hamiltonian systems\n\n## Core Workflows\n\n### 1. Numerical Conservation Check\n\n```python\nimport numpy as np\nfrom scipy.integrate import solve_ivp\nimport matplotlib.pyplot as plt\n\n# Example: Kepler problem (should conserve E, L, and Laplace-Runge-Lenz)\ndef kepler(t, y):\n    x, y_pos, vx, vy = y\n    r = np.sqrt(x**2 + y_pos**2)\n    return [vx, vy, -x\u002Fr**3, -y_pos\u002Fr**3]\n\nsol = solve_ivp(kepler, (0, 50), [1.0, 0.0, 0.0, 0.8],\n                t_eval=np.linspace(0, 50, 5000), rtol=1e-12, atol=1e-14)\nx, y_pos, vx, vy = sol.y\n\n# Known conserved quantities\nE = 0.5*(vx**2 + vy**2) - 1\u002Fnp.sqrt(x**2 + y_pos**2)  # energy\nL = x*vy - y_pos*vx  # angular momentum\n\nfig, axes = plt.subplots(3, 1, figsize=(10, 8))\naxes[0].plot(sol.t, E - E[0], 'b-', linewidth=0.5)\naxes[0].set_ylabel(r'$\\Delta E$')\naxes[0].set_title('Conservation Check')\naxes[0].ticklabel_format(style='sci', axis='y', scilimits=(-3,3))\n\naxes[1].plot(sol.t, L - L[0], 'r-', linewidth=0.5)\naxes[1].set_ylabel(r'$\\Delta L$')\naxes[1].ticklabel_format(style='sci', axis='y', scilimits=(-3,3))\n\n# Laplace-Runge-Lenz vector (Kepler-specific)\nr_vec = np.sqrt(x**2 + y_pos**2)\nA_x = vy*L - x\u002Fr_vec\nA_y = -vx*L - y_pos\u002Fr_vec\nA_mag = np.sqrt(A_x**2 + A_y**2)\naxes[2].plot(sol.t, A_mag - A_mag[0], 'g-', linewidth=0.5)\naxes[2].set_ylabel(r'$\\Delta |A|$ (LRL)')\naxes[2].set_xlabel('Time')\naxes[2].ticklabel_format(style='sci', axis='y', scilimits=(-3,3))\n\nfor ax in axes:\n    ax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('conservation_check.png', dpi=150, bbox_inches='tight')\n```\n\n### 2. Discover Conserved Quantities via Polynomial Fitting\n\n```python\ndef find_polynomial_invariant(trajectory, dt, max_degree=3):\n    \"\"\"\n    Search for polynomial conserved quantities I(x) such that dI\u002Fdt ≈ 0.\n\n    Method: Construct polynomial features, then find the null space of\n    the time-derivative matrix.\n    \"\"\"\n    from itertools import combinations_with_replacement\n\n    n_samples, n_vars = trajectory.shape\n\n    # Build polynomial feature matrix\n    def poly_features(x, degree):\n        \"\"\"Generate all monomials up to given degree.\"\"\"\n        features = [np.ones(len(x))]\n        names = ['1']\n        for d in range(1, degree + 1):\n            for combo in combinations_with_replacement(range(n_vars), d):\n                feat = np.ones(len(x))\n                name_parts = []\n                for idx in combo:\n                    feat *= x[:, idx]\n                    name_parts.append(f'x{idx}')\n                features.append(feat)\n                names.append('*'.join(name_parts))\n        return np.column_stack(features), names\n\n    Phi, names = poly_features(trajectory, max_degree)\n\n    # Compute time derivatives of features using finite differences\n    dPhi_dt = np.gradient(Phi, dt, axis=0)\n\n    # Find coefficients c such that dPhi\u002Fdt · c ≈ 0 (null space)\n    # Use SVD\n    U, S, Vt = np.linalg.svd(dPhi_dt[10:-10], full_matrices=True)  # trim edges\n\n    # Small singular values indicate conserved quantities\n    print(\"Singular values (smallest = most conserved):\")\n    for i in range(min(10, len(S))):\n        print(f\"  σ_{len(S)-1-i} = {S[-(i+1)]:.6e}\")\n\n    # The last row of Vt corresponds to the smallest singular value\n    n_conserved = np.sum(S \u003C 1e-6 * S[0])\n    print(f\"\\nFound {n_conserved} candidate conserved quantities (σ \u003C 1e-6 * σ_max)\")\n\n    invariants = []\n    for i in range(max(1, n_conserved)):\n        coeffs = Vt[-(i+1)]\n        # Construct the invariant\n        I_values = Phi @ coeffs\n        # Check conservation quality\n        relative_variation = np.std(I_values) \u002F (np.abs(np.mean(I_values)) + 1e-15)\n\n        # Print the invariant expression\n        terms = []\n        for j, (c, name) in enumerate(zip(coeffs, names)):\n            if abs(c) > 1e-8:\n                terms.append(f\"{c:+.4f}·{name}\")\n        expr = \" \".join(terms[:10])  # show first 10 terms\n        if len(terms) > 10:\n            expr += \" + ...\"\n\n        print(f\"\\n  Invariant {i+1}: relative variation = {relative_variation:.2e}\")\n        print(f\"    I = {expr}\")\n        invariants.append((coeffs, I_values, relative_variation))\n\n    return invariants, names\n\n# Example: find conserved quantities in Kepler data\ntrajectory = np.column_stack([x, y_pos, vx, vy])\ninvariants, names = find_polynomial_invariant(trajectory, dt=sol.t[1]-sol.t[0], max_degree=2)\n```\n\n### 3. Time-Derivative Test for Candidate Invariants\n\n```python\ndef test_conservation(trajectory, dt, candidate_func, name=\"I\"):\n    \"\"\"Test whether a candidate function is conserved along the trajectory.\"\"\"\n    I_values = candidate_func(trajectory)\n    dI_dt = np.gradient(I_values, dt)\n\n    mean_I = np.mean(I_values)\n    std_I = np.std(I_values)\n    max_dI = np.max(np.abs(dI_dt[10:-10]))  # trim edge artifacts\n\n    print(f\"{name}:\")\n    print(f\"  Mean value: {mean_I:.6f}\")\n    print(f\"  Std dev:    {std_I:.2e}\")\n    print(f\"  Max |dI\u002Fdt|: {max_dI:.2e}\")\n    print(f\"  Relative variation: {std_I\u002Fabs(mean_I):.2e}\")\n    conserved = std_I \u002F abs(mean_I) \u003C 1e-6\n    print(f\"  Conserved: {'YES' if conserved else 'NO'}\")\n    return I_values, conserved\n\n# Test known invariants\ndef energy(traj):\n    x, y, vx, vy = traj.T\n    return 0.5*(vx**2 + vy**2) - 1\u002Fnp.sqrt(x**2 + y**2)\n\ndef angular_momentum(traj):\n    x, y, vx, vy = traj.T\n    return x*vy - y*vx\n\ndt = sol.t[1] - sol.t[0]\ntest_conservation(trajectory, dt, energy, \"Energy\")\ntest_conservation(trajectory, dt, angular_momentum, \"Angular Momentum\")\n```\n\n## Method Summary\n\n| Method | Pros | Cons |\n|---|---|---|\n| Polynomial null space | Simple, interpretable | Limited to polynomial invariants |\n| Neural network (autoencoder) | Finds arbitrary invariants | Hard to interpret, needs training |\n| SINDy + conservation constraint | Sparse, interpretable | Requires good library |\n| Symbolic regression (PySR) | General, human-readable | Slow, may not converge |\n\n## Tips\n\n1. **Start with known physics**: Check energy, momentum, angular momentum first\n2. **Use high-precision trajectories**: Conservation discovery is sensitive to numerical error in the trajectory itself\n3. **Trim edge data**: Finite differences are unreliable at trajectory endpoints\n4. **Normalize**: Scale variables to O(1) for better numerical conditioning\n5. **Cross-validate**: Check discovered invariants on a separate trajectory segment\n","# Conservation Law Discovery\n\n## Overview\n\nDiscover conserved quantities from trajectory data without knowing the governing equations. Uses numerical methods to find functions I(x) such that dI\u002Fdt = 0 along trajectories.\n\n## When to Use\n\n- You have trajectory data and want to find conserved quantities\n- Verifying energy\u002Fmomentum conservation in simulation output\n- Discovering hidden symmetries in dynamical systems\n- Identifying integrals of motion for Hamiltonian systems\n\n## Core Workflows\n\n### 1. Numerical Conservation Check\n\n```python\nimport numpy as np\nfrom scipy.integrate import solve_ivp\nimport matplotlib.pyplot as plt\n\n# Example: Kepler problem (should conserve E, L, and Laplace-Runge-Lenz)\ndef kepler(t, y):\n    x, y_pos, vx, vy = y\n    r = np.sqrt(x**2 + y_pos**2)\n    return [vx, vy, -x\u002Fr**3, -y_pos\u002Fr**3]\n\nsol = solve_ivp(kepler, (0, 50), [1.0, 0.0, 0.0, 0.8],\n                t_eval=np.linspace(0, 50, 5000), rtol=1e-12, atol=1e-14)\nx, y_pos, vx, vy = sol.y\n\n# Known conserved quantities\nE = 0.5*(vx**2 + vy**2) - 1\u002Fnp.sqrt(x**2 + y_pos**2)  # energy\nL = x*vy - y_pos*vx  # angular momentum\n\nfig, axes = plt.subplots(3, 1, figsize=(10, 8))\naxes[0].plot(sol.t, E - E[0], 'b-', linewidth=0.5)\naxes[0].set_ylabel(r'$\\Delta E$')\naxes[0].set_title('Conservation Check')\naxes[0].ticklabel_format(style='sci', axis='y', scilimits=(-3,3))\n\naxes[1].plot(sol.t, L - L[0], 'r-', linewidth=0.5)\naxes[1].set_ylabel(r'$\\Delta L$')\naxes[1].ticklabel_format(style='sci', axis='y', scilimits=(-3,3))\n\n# Laplace-Runge-Lenz vector (Kepler-specific)\nr_vec = np.sqrt(x**2 + y_pos**2)\nA_x = vy*L - x\u002Fr_vec\nA_y = -vx*L - y_pos\u002Fr_vec\nA_mag = np.sqrt(A_x**2 + A_y**2)\naxes[2].plot(sol.t, A_mag - A_mag[0], 'g-', linewidth=0.5)\naxes[2].set_ylabel(r'$\\Delta |A|$ (LRL)')\naxes[2].set_xlabel('Time')\naxes[2].ticklabel_format(style='sci', axis='y', scilimits=(-3,3))\n\nfor ax in axes:\n    ax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('conservation_check.png', dpi=150, bbox_inches='tight')\n```\n\n### 2. Discover Conserved Quantities via Polynomial Fitting\n\n```python\ndef find_polynomial_invariant(trajectory, dt, max_degree=3):\n    \"\"\"\n    Search for polynomial conserved quantities I(x) such that dI\u002Fdt ≈ 0.\n\n    Method: Construct polynomial features, then find the null space of\n    the time-derivative matrix.\n    \"\"\"\n    from itertools import combinations_with_replacement\n\n    n_samples, n_vars = trajectory.shape\n\n    # Build polynomial feature matrix\n    def poly_features(x, degree):\n        \"\"\"Generate all monomials up to given degree.\"\"\"\n        features = [np.ones(len(x))]\n        names = ['1']\n        for d in range(1, degree + 1):\n            for combo in combinations_with_replacement(range(n_vars), d):\n                feat = np.ones(len(x))\n                name_parts = []\n                for idx in combo:\n                    feat *= x[:, idx]\n                    name_parts.append(f'x{idx}')\n                features.append(feat)\n                names.append('*'.join(name_parts))\n        return np.column_stack(features), names\n\n    Phi, names = poly_features(trajectory, max_degree)\n\n    # Compute time derivatives of features using finite differences\n    dPhi_dt = np.gradient(Phi, dt, axis=0)\n\n    # Find coefficients c such that dPhi\u002Fdt · c ≈ 0 (null space)\n    # Use SVD\n    U, S, Vt = np.linalg.svd(dPhi_dt[10:-10], full_matrices=True)  # trim edges\n\n    # Small singular values indicate conserved quantities\n    print(\"Singular values (smallest = most conserved):\")\n    for i in range(min(10, len(S))):\n        print(f\"  σ_{len(S)-1-i} = {S[-(i+1)]:.6e}\")\n\n    # The last row of Vt corresponds to the smallest singular value\n    n_conserved = np.sum(S \u003C 1e-6 * S[0])\n    print(f\"\\nFound {n_conserved} candidate conserved quantities (σ \u003C 1e-6 * σ_max)\")\n\n    invariants = []\n    for i in range(max(1, n_conserved)):\n        coeffs = Vt[-(i+1)]\n        # Construct the invariant\n        I_values = Phi @ coeffs\n        # Check conservation quality\n        relative_variation = np.std(I_values) \u002F (np.abs(np.mean(I_values)) + 1e-15)\n\n        # Print the invariant expression\n        terms = []\n        for j, (c, name) in enumerate(zip(coeffs, names)):\n            if abs(c) > 1e-8:\n                terms.append(f\"{c:+.4f}·{name}\")\n        expr = \" \".join(terms[:10])  # show first 10 terms\n        if len(terms) > 10:\n            expr += \" + ...\"\n\n        print(f\"\\n  Invariant {i+1}: relative variation = {relative_variation:.2e}\")\n        print(f\"    I = {expr}\")\n        invariants.append((coeffs, I_values, relative_variation))\n\n    return invariants, names\n\n# Example: find conserved quantities in Kepler data\ntrajectory = np.column_stack([x, y_pos, vx, vy])\ninvariants, names = find_polynomial_invariant(trajectory, dt=sol.t[1]-sol.t[0], max_degree=2)\n```\n\n### 3. Time-Derivative Test for Candidate Invariants\n\n```python\ndef test_conservation(trajectory, dt, candidate_func, name=\"I\"):\n    \"\"\"Test whether a candidate function is conserved along the trajectory.\"\"\"\n    I_values = candidate_func(trajectory)\n    dI_dt = np.gradient(I_values, dt)\n\n    mean_I = np.mean(I_values)\n    std_I = np.std(I_values)\n    max_dI = np.max(np.abs(dI_dt[10:-10]))  # trim edge artifacts\n\n    print(f\"{name}:\")\n    print(f\"  Mean value: {mean_I:.6f}\")\n    print(f\"  Std dev:    {std_I:.2e}\")\n    print(f\"  Max |dI\u002Fdt|: {max_dI:.2e}\")\n    print(f\"  Relative variation: {std_I\u002Fabs(mean_I):.2e}\")\n    conserved = std_I \u002F abs(mean_I) \u003C 1e-6\n    print(f\"  Conserved: {'YES' if conserved else 'NO'}\")\n    return I_values, conserved\n\n# Test known invariants\ndef energy(traj):\n    x, y, vx, vy = traj.T\n    return 0.5*(vx**2 + vy**2) - 1\u002Fnp.sqrt(x**2 + y**2)\n\ndef angular_momentum(traj):\n    x, y, vx, vy = traj.T\n    return x*vy - y*vx\n\ndt = sol.t[1] - sol.t[0]\ntest_conservation(trajectory, dt, energy, \"Energy\")\ntest_conservation(trajectory, dt, angular_momentum, \"Angular Momentum\")\n```\n\n## Method Summary\n\n| Method | Pros | Cons |\n|---|---|---|\n| Polynomial null space | Simple, interpretable | Limited to polynomial invariants |\n| Neural network (autoencoder) | Finds arbitrary invariants | Hard to interpret, needs training |\n| SINDy + conservation constraint | Sparse, interpretable | Requires good library |\n| Symbolic regression (PySR) | General, human-readable | Slow, may not converge |\n\n## Tips\n\n1. **Start with known physics**: Check energy, momentum, angular momentum first\n2. **Use high-precision trajectories**: Conservation discovery is sensitive to numerical error in the trajectory itself\n3. **Trim edge data**: Finite differences are unreliable at trajectory endpoints\n4. **Normalize**: Scale variables to O(1) for better numerical conditioning\n5. **Cross-validate**: Check discovered invariants on a separate trajectory segment\n",{"name":5,"tags":49,"author":51,"license":15,"version":52,"category":39,"description":7,"dependencies":53},[32,31,30,50,29],"Invariants","Synthetic Sciences","1.0.0",[54,55,56],"scipy>=1.11.0","numpy>=1.24.0","matplotlib>=3.7.0","main","4aa39efd1cdab0b4657ecee16c92a92011a5b10f","openscience\u002Fbackend\u002Fcli\u002Fskills\u002Fphysics\u002Fconservation-law-discovery","https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub","https:\u002F\u002Fgithub.com\u002Ffadrienne","2026-10-28 00:43:09",{"source":8,"skillName":5,"commands":64,"prompt":74,"zipAvailable":75},[65,68,71],{"tool":66,"command":67},"npx","npx skills add fadrienne\u002FMyGitHub --skill conservation-law-discovery",{"tool":69,"command":70},"bunx","bunx skills add fadrienne\u002FMyGitHub --skill conservation-law-discovery",{"tool":72,"command":73},"pnpm","pnpm dlx skills add fadrienne\u002FMyGitHub --skill conservation-law-discovery","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002Fopenscience\u002Fbackend\u002Fcli\u002Fskills\u002Fphysics\u002Fconservation-law-discovery\u002FSKILL.md",true,[],[78,109,136,168,195,222],{"skillNo":79,"name":80,"nameZh":6,"description":81,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":82,"categories":83,"keywords":89,"publishedAt":44},"01M7167B28PK20HP7R7ZED2DY0","statistical-power","Sample size calculation, power analysis, and effect size conversion for scientific studies. Use BEFORE data collection (a priori) to determine required N, or after (post-hoc) to compute achieved power. Covers parametric tests (t-test, ANOVA, chi-square, proportions, correlation, regression), simulation-based power for complex\u002Fclustered\u002Fnested designs, and power curves. Use this skill when someone asks 'how many samples do I need', 'what is my power', 'what effect size can I detect', or any variant. Pairs with \u002Fexperimental-design (choose design first, then compute power) and \u002Fstatistical-analysis (analyze data after collection).","https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002Fscientific-agent-skills\u002Fskills\u002Fstatistical-power\u002FSKILL.md",[84],{"categoryNo":85,"categoryName":86,"taxonomyType":87,"taxonomyTypeDesc":88},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[90,91,92,40,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108],"power","statistical power","effect","regression","choose","design","uv","when","Bash","collection","analysis","calculation","ANOVA","conversion","analyze","t-test","chi-square","simulation","sample",{"skillNo":110,"name":111,"nameZh":6,"description":112,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":118,"publishedAt":44},"01M71677EBCM8EPCE9BZCK8505","statistical-analysis","Guided statistical analysis with test selection and reporting. Use when you need help choosing appropriate tests for your data, assumption checking, power analysis, and APA-formatted results. Best for academic research reporting, test selection guidance. For implementing specific models programmatically use statsmodels.","https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002Fscientific-agent-skills\u002Fskills\u002Fstatistical-analysis\u002FSKILL.md",[115],{"categoryNo":116,"categoryName":117,"taxonomyType":87,"taxonomyTypeDesc":88},"01JBSEEDCAT000000000000008","测试与质量",[100,119,90,120,121,122,97,123,124,125,126,127,128,129,130,131,132,133,134,135],"statistical analysis","academic research","implementing","selection","you","reporting","data","for","tests","use","with","test","research","results","statsmodels","models","help",{"skillNo":137,"name":138,"nameZh":6,"description":139,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":140,"categories":141,"keywords":149,"publishedAt":44},"01M71673R93XAHFH81DBNVNG7H","scientific-writing","Core skill for the deep research and writing tool. Write scientific manuscripts in full paragraphs (never bullet points). Use two-stage process with (1) section outlines with key points using research-lookup then (2) convert to flowing prose. IMRAD structure, citations (APA\u002FAMA\u002FVancouver), figures\u002Ftables, reporting guidelines (CONSORT\u002FSTROBE\u002FPRISMA), for research papers and journal submissions.","https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002Fscientific-agent-skills\u002Fskills\u002Fscientific-writing\u002FSKILL.md",[142,145,146],{"categoryNo":143,"categoryName":144,"taxonomyType":87,"taxonomyTypeDesc":88},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":85,"categoryName":86,"taxonomyType":87,"taxonomyTypeDesc":88},{"categoryNo":147,"categoryName":148,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000036","内容创作者",[150,151,152,153,154,155,156,157,158,159,98,160,161,162,163,164,165,166,124,167],"writing","scientific","scientific writing","Citations","deep","deep research","never","papers","journal","false","api","prisma","structure","openrouter","Outlines","core skill","read","features",{"skillNo":169,"name":170,"nameZh":6,"description":171,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":172,"categories":173,"keywords":178,"publishedAt":44},"01M7166ZPKXBF4EBPHVTJPQBB1","scientific-visualization","Meta-skill for publication-ready figures. Use when creating journal submission figures requiring multi-panel layouts, significance annotations, error bars, colorblind-safe palettes, and specific journal formatting (Nature, Science, Cell). Orchestrates matplotlib\u002Fseaborn\u002Fplotly with publication styles. For quick exploration use seaborn or plotly directly.","https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002Fscientific-agent-skills\u002Fskills\u002Fscientific-visualization\u002FSKILL.md",[174,177],{"categoryNo":175,"categoryName":176,"taxonomyType":87,"taxonomyTypeDesc":88},"01JBSEEDCAT000000000000013","分析与可视化",{"categoryNo":85,"categoryName":86,"taxonomyType":87,"taxonomyTypeDesc":88},[179,151,180,181,182,183,184,185,186,158,97,187,188,189,190,191,192,193,126,194],"visualization","scientific visualization","error","ready","quick","exploration","meta-skill","Meta","safe","plotly","annotations","formatting","Publication","figures","panel","submission",{"skillNo":196,"name":197,"nameZh":6,"description":198,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":199,"categories":200,"keywords":207,"publishedAt":44},"01M7166VXJWQSSC3RQZP60WBGR","research-code","Debug, profile, review, and restructure Python research and analysis code. Use when analysis scripts crash, produce wrong results, run too slowly, or need a correctness review. Covers: reading tracebacks and diagnosing root causes, hypothesis-driven debugging, reviewing code for common statistical\u002Fnumerical errors, profiling data pipelines, improving reproducibility (seeds, environments, determinism), and structuring analysis scripts for sharing. Distinct from \u002Fexploratory-data-analysis (which understands data) and \u002Fstatistical-analysis (which chooses and runs tests) — this skill focuses on the code itself.","https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002Fscientific-agent-skills\u002Fskills\u002Fresearch-code\u002FSKILL.md",[201,204],{"categoryNo":202,"categoryName":203,"taxonomyType":87,"taxonomyTypeDesc":88},"01JBSEEDCAT000000000000021","资料检索与研究",{"categoryNo":205,"categoryName":206,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000030","开发工程师",[208,209,131,210,211,212,213,96,214,97,98,100,215,216,217,218,219,220,166,221],"code","research code","which","memory","data-analysis","errors","debugging","common","review","data pipelines","run","scripts","line","write",{"skillNo":223,"name":224,"nameZh":6,"description":225,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":226,"licenseFileUrl":6,"sourceHtmlUrl":227,"categories":228,"keywords":235,"publishedAt":44},"01M7166CF5HSR7SVZYZFWTDX55","markdown-mermaid-writing","Comprehensive markdown and Mermaid diagram writing skill. Use when creating any scientific document, report, analysis, or visualization. Establishes text-based diagrams as the default documentation standard with full style guides (markdown + mermaid), 24 diagram type references, and 9 document templates.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002Fscientific-agent-skills\u002Fskills\u002Fmarkdown-mermaid-writing\u002FSKILL.md",[229,232,233,234],{"categoryNo":230,"categoryName":231,"taxonomyType":87,"taxonomyTypeDesc":88},"01JBSEEDCAT000000000000002","文档处理",{"categoryNo":143,"categoryName":144,"taxonomyType":87,"taxonomyTypeDesc":88},{"categoryNo":85,"categoryName":86,"taxonomyType":87,"taxonomyTypeDesc":88},{"categoryNo":147,"categoryName":148,"taxonomyType":21,"taxonomyTypeDesc":22},[150,236,237,238,239,240,179,241,242,97,98,100,243,244,245,246,247,248,151,166],"markdown mermaid writing","mermaid","markdown","community","diagrams","project","default","team","guides","text","documentation","references","diagram"]