[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EQYEV2VJ66M586QX14REK5":3,"skill-same:01M6EQYEV2VJ66M586QX14REK5":370},{"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":30,"linkOnly":31,"markdownContent":32,"markdownBody":33,"frontMatter":34,"refName":35,"commitSha":36,"skillDirectory":37,"forksCount":38,"repositoryHtmlUrl":39,"repositoryHomepageUrl":40,"ownerHtmlUrl":41,"ownerBlogUrl":6,"ownerDescription":42,"updatedAt":43,"install":44,"resources":57},"01M6EQYEV2VJ66M586QX14REK5","cobrapy",null,"Constraint-based metabolic modeling (COBRA). FBA, FVA, gene knockouts, flux sampling, SBML models, for systems biology and metabolic engineering analysis.","ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fdavila7\u002Fcobrapy\u002FSKILL.md",[],[5,19,20,21,22,23,24,25,26,27,28,29],"engineering","analysis","sampling","models","flux","modeling","systems biology","systems","biology","metabolic engineering","cobra","2026-11-10 10:12:30",false,"---\nname: cobrapy\ndescription: \"Constraint-based metabolic modeling (COBRA). FBA, FVA, gene knockouts, flux sampling, SBML models, for systems biology and metabolic engineering analysis.\"\n---\n\n# COBRApy - Constraint-Based Reconstruction and Analysis\n\n## Overview\n\nCOBRApy is a Python library for constraint-based reconstruction and analysis (COBRA) of metabolic models, essential for systems biology research. Work with genome-scale metabolic models, perform computational simulations of cellular metabolism, conduct metabolic engineering analyses, and predict phenotypic behaviors.\n\n## Core Capabilities\n\nCOBRApy provides comprehensive tools organized into several key areas:\n\n### 1. Model Management\n\nLoad existing models from repositories or files:\n```python\nfrom cobra.io import load_model\n\n# Load bundled test models\nmodel = load_model(\"textbook\")  # E. coli core model\nmodel = load_model(\"ecoli\")     # Full E. coli model\nmodel = load_model(\"salmonella\")\n\n# Load from files\nfrom cobra.io import read_sbml_model, load_json_model, load_yaml_model\nmodel = read_sbml_model(\"path\u002Fto\u002Fmodel.xml\")\nmodel = load_json_model(\"path\u002Fto\u002Fmodel.json\")\nmodel = load_yaml_model(\"path\u002Fto\u002Fmodel.yml\")\n```\n\nSave models in various formats:\n```python\nfrom cobra.io import write_sbml_model, save_json_model, save_yaml_model\nwrite_sbml_model(model, \"output.xml\")  # Preferred format\nsave_json_model(model, \"output.json\")  # For Escher compatibility\nsave_yaml_model(model, \"output.yml\")   # Human-readable\n```\n\n### 2. Model Structure and Components\n\nAccess and inspect model components:\n```python\n# Access components\nmodel.reactions      # DictList of all reactions\nmodel.metabolites    # DictList of all metabolites\nmodel.genes          # DictList of all genes\n\n# Get specific items by ID or index\nreaction = model.reactions.get_by_id(\"PFK\")\nmetabolite = model.metabolites[0]\n\n# Inspect properties\nprint(reaction.reaction)        # Stoichiometric equation\nprint(reaction.bounds)          # Flux constraints\nprint(reaction.gene_reaction_rule)  # GPR logic\nprint(metabolite.formula)       # Chemical formula\nprint(metabolite.compartment)   # Cellular location\n```\n\n### 3. Flux Balance Analysis (FBA)\n\nPerform standard FBA simulation:\n```python\n# Basic optimization\nsolution = model.optimize()\nprint(f\"Objective value: {solution.objective_value}\")\nprint(f\"Status: {solution.status}\")\n\n# Access fluxes\nprint(solution.fluxes[\"PFK\"])\nprint(solution.fluxes.head())\n\n# Fast optimization (objective value only)\nobjective_value = model.slim_optimize()\n\n# Change objective\nmodel.objective = \"ATPM\"\nsolution = model.optimize()\n```\n\nParsimonious FBA (minimize total flux):\n```python\nfrom cobra.flux_analysis import pfba\nsolution = pfba(model)\n```\n\nGeometric FBA (find central solution):\n```python\nfrom cobra.flux_analysis import geometric_fba\nsolution = geometric_fba(model)\n```\n\n### 4. Flux Variability Analysis (FVA)\n\nDetermine flux ranges for all reactions:\n```python\nfrom cobra.flux_analysis import flux_variability_analysis\n\n# Standard FVA\nfva_result = flux_variability_analysis(model)\n\n# FVA at 90% optimality\nfva_result = flux_variability_analysis(model, fraction_of_optimum=0.9)\n\n# Loopless FVA (eliminates thermodynamically infeasible loops)\nfva_result = flux_variability_analysis(model, loopless=True)\n\n# FVA for specific reactions\nfva_result = flux_variability_analysis(\n    model,\n    reaction_list=[\"PFK\", \"FBA\", \"PGI\"]\n)\n```\n\n### 5. Gene and Reaction Deletion Studies\n\nPerform knockout analyses:\n```python\nfrom cobra.flux_analysis import (\n    single_gene_deletion,\n    single_reaction_deletion,\n    double_gene_deletion,\n    double_reaction_deletion\n)\n\n# Single deletions\ngene_results = single_gene_deletion(model)\nreaction_results = single_reaction_deletion(model)\n\n# Double deletions (uses multiprocessing)\ndouble_gene_results = double_gene_deletion(\n    model,\n    processes=4  # Number of CPU cores\n)\n\n# Manual knockout using context manager\nwith model:\n    model.genes.get_by_id(\"b0008\").knock_out()\n    solution = model.optimize()\n    print(f\"Growth after knockout: {solution.objective_value}\")\n# Model automatically reverts after context exit\n```\n\n### 6. Growth Media and Minimal Media\n\nManage growth medium:\n```python\n# View current medium\nprint(model.medium)\n\n# Modify medium (must reassign entire dict)\nmedium = model.medium\nmedium[\"EX_glc__D_e\"] = 10.0  # Set glucose uptake\nmedium[\"EX_o2_e\"] = 0.0       # Anaerobic conditions\nmodel.medium = medium\n\n# Calculate minimal media\nfrom cobra.medium import minimal_medium\n\n# Minimize total import flux\nmin_medium = minimal_medium(model, minimize_components=False)\n\n# Minimize number of components (uses MILP, slower)\nmin_medium = minimal_medium(\n    model,\n    minimize_components=True,\n    open_exchanges=True\n)\n```\n\n### 7. Flux Sampling\n\nSample the feasible flux space:\n```python\nfrom cobra.sampling import sample\n\n# Sample using OptGP (default, supports parallel processing)\nsamples = sample(model, n=1000, method=\"optgp\", processes=4)\n\n# Sample using ACHR\nsamples = sample(model, n=1000, method=\"achr\")\n\n# Validate samples\nfrom cobra.sampling import OptGPSampler\nsampler = OptGPSampler(model, processes=4)\nsampler.sample(1000)\nvalidation = sampler.validate(sampler.samples)\nprint(validation.value_counts())  # Should be all 'v' for valid\n```\n\n### 8. Production Envelopes\n\nCalculate phenotype phase planes:\n```python\nfrom cobra.flux_analysis import production_envelope\n\n# Standard production envelope\nenvelope = production_envelope(\n    model,\n    reactions=[\"EX_glc__D_e\", \"EX_o2_e\"],\n    objective=\"EX_ac_e\"  # Acetate production\n)\n\n# With carbon yield\nenvelope = production_envelope(\n    model,\n    reactions=[\"EX_glc__D_e\", \"EX_o2_e\"],\n    carbon_sources=\"EX_glc__D_e\"\n)\n\n# Visualize (use matplotlib or pandas plotting)\nimport matplotlib.pyplot as plt\nenvelope.plot(x=\"EX_glc__D_e\", y=\"EX_o2_e\", kind=\"scatter\")\nplt.show()\n```\n\n### 9. Gapfilling\n\nAdd reactions to make models feasible:\n```python\nfrom cobra.flux_analysis import gapfill\n\n# Prepare universal model with candidate reactions\nuniversal = load_model(\"universal\")\n\n# Perform gapfilling\nwith model:\n    # Remove reactions to create gaps for demonstration\n    model.remove_reactions([model.reactions.PGI])\n\n    # Find reactions needed\n    solution = gapfill(model, universal)\n    print(f\"Reactions to add: {solution}\")\n```\n\n### 10. Model Building\n\nBuild models from scratch:\n```python\nfrom cobra import Model, Reaction, Metabolite\n\n# Create model\nmodel = Model(\"my_model\")\n\n# Create metabolites\natp_c = Metabolite(\"atp_c\", formula=\"C10H12N5O13P3\",\n                   name=\"ATP\", compartment=\"c\")\nadp_c = Metabolite(\"adp_c\", formula=\"C10H12N5O10P2\",\n                   name=\"ADP\", compartment=\"c\")\npi_c = Metabolite(\"pi_c\", formula=\"HO4P\",\n                  name=\"Phosphate\", compartment=\"c\")\n\n# Create reaction\nreaction = Reaction(\"ATPASE\")\nreaction.name = \"ATP hydrolysis\"\nreaction.subsystem = \"Energy\"\nreaction.lower_bound = 0.0\nreaction.upper_bound = 1000.0\n\n# Add metabolites with stoichiometry\nreaction.add_metabolites({\n    atp_c: -1.0,\n    adp_c: 1.0,\n    pi_c: 1.0\n})\n\n# Add gene-reaction rule\nreaction.gene_reaction_rule = \"(gene1 and gene2) or gene3\"\n\n# Add to model\nmodel.add_reactions([reaction])\n\n# Add boundary reactions\nmodel.add_boundary(atp_c, type=\"exchange\")\nmodel.add_boundary(adp_c, type=\"demand\")\n\n# Set objective\nmodel.objective = \"ATPASE\"\n```\n\n## Common Workflows\n\n### Workflow 1: Load Model and Predict Growth\n\n```python\nfrom cobra.io import load_model\n\n# Load model\nmodel = load_model(\"ecoli\")\n\n# Run FBA\nsolution = model.optimize()\nprint(f\"Growth rate: {solution.objective_value:.3f} \u002Fh\")\n\n# Show active pathways\nprint(solution.fluxes[solution.fluxes.abs() > 1e-6])\n```\n\n### Workflow 2: Gene Knockout Screen\n\n```python\nfrom cobra.io import load_model\nfrom cobra.flux_analysis import single_gene_deletion\n\n# Load model\nmodel = load_model(\"ecoli\")\n\n# Perform single gene deletions\nresults = single_gene_deletion(model)\n\n# Find essential genes (growth \u003C threshold)\nessential_genes = results[results[\"growth\"] \u003C 0.01]\nprint(f\"Found {len(essential_genes)} essential genes\")\n\n# Find genes with minimal impact\nneutral_genes = results[results[\"growth\"] > 0.9 * solution.objective_value]\n```\n\n### Workflow 3: Media Optimization\n\n```python\nfrom cobra.io import load_model\nfrom cobra.medium import minimal_medium\n\n# Load model\nmodel = load_model(\"ecoli\")\n\n# Calculate minimal medium for 50% of max growth\ntarget_growth = model.slim_optimize() * 0.5\nmin_medium = minimal_medium(\n    model,\n    target_growth,\n    minimize_components=True\n)\n\nprint(f\"Minimal medium components: {len(min_medium)}\")\nprint(min_medium)\n```\n\n### Workflow 4: Flux Uncertainty Analysis\n\n```python\nfrom cobra.io import load_model\nfrom cobra.flux_analysis import flux_variability_analysis\nfrom cobra.sampling import sample\n\n# Load model\nmodel = load_model(\"ecoli\")\n\n# First check flux ranges at optimality\nfva = flux_variability_analysis(model, fraction_of_optimum=1.0)\n\n# For reactions with large ranges, sample to understand distribution\nsamples = sample(model, n=1000)\n\n# Analyze specific reaction\nreaction_id = \"PFK\"\nimport matplotlib.pyplot as plt\nsamples[reaction_id].hist(bins=50)\nplt.xlabel(f\"Flux through {reaction_id}\")\nplt.ylabel(\"Frequency\")\nplt.show()\n```\n\n### Workflow 5: Context Manager for Temporary Changes\n\nUse context managers to make temporary modifications:\n```python\n# Model remains unchanged outside context\nwith model:\n    # Temporarily change objective\n    model.objective = \"ATPM\"\n\n    # Temporarily modify bounds\n    model.reactions.EX_glc__D_e.lower_bound = -5.0\n\n    # Temporarily knock out genes\n    model.genes.b0008.knock_out()\n\n    # Optimize with changes\n    solution = model.optimize()\n    print(f\"Modified growth: {solution.objective_value}\")\n\n# All changes automatically reverted\nsolution = model.optimize()\nprint(f\"Original growth: {solution.objective_value}\")\n```\n\n## Key Concepts\n\n### DictList Objects\nModels use `DictList` objects for reactions, metabolites, and genes - behaving like both lists and dictionaries:\n```python\n# Access by index\nfirst_reaction = model.reactions[0]\n\n# Access by ID\npfk = model.reactions.get_by_id(\"PFK\")\n\n# Query methods\natp_reactions = model.reactions.query(\"atp\")\n```\n\n### Flux Constraints\nReaction bounds define feasible flux ranges:\n- **Irreversible**: `lower_bound = 0, upper_bound > 0`\n- **Reversible**: `lower_bound \u003C 0, upper_bound > 0`\n- Set both bounds simultaneously with `.bounds` to avoid inconsistencies\n\n### Gene-Reaction Rules (GPR)\nBoolean logic linking genes to reactions:\n```python\n# AND logic (both required)\nreaction.gene_reaction_rule = \"gene1 and gene2\"\n\n# OR logic (either sufficient)\nreaction.gene_reaction_rule = \"gene1 or gene2\"\n\n# Complex logic\nreaction.gene_reaction_rule = \"(gene1 and gene2) or (gene3 and gene4)\"\n```\n\n### Exchange Reactions\nSpecial reactions representing metabolite import\u002Fexport:\n- Named with prefix `EX_` by convention\n- Positive flux = secretion, negative flux = uptake\n- Managed through `model.medium` dictionary\n\n## Best Practices\n\n1. **Use context managers** for temporary modifications to avoid state management issues\n2. **Validate models** before analysis using `model.slim_optimize()` to ensure feasibility\n3. **Check solution status** after optimization - `optimal` indicates successful solve\n4. **Use loopless FVA** when thermodynamic feasibility matters\n5. **Set fraction_of_optimum** appropriately in FVA to explore suboptimal space\n6. **Parallelize** computationally expensive operations (sampling, double deletions)\n7. **Prefer SBML format** for model exchange and long-term storage\n8. **Use slim_optimize()** when only objective value needed for performance\n9. **Validate flux samples** to ensure numerical stability\n\n## Troubleshooting\n\n**Infeasible solutions**: Check medium constraints, reaction bounds, and model consistency\n**Slow optimization**: Try different solvers (GLPK, CPLEX, Gurobi) via `model.solver`\n**Unbounded solutions**: Verify exchange reactions have appropriate upper bounds\n**Import errors**: Ensure correct file format and valid SBML identifiers\n\n## References\n\nFor detailed workflows and API patterns, refer to:\n- `references\u002Fworkflows.md` - Comprehensive step-by-step workflow examples\n- `references\u002Fapi_quick_reference.md` - Common function signatures and patterns\n\nOfficial documentation: https:\u002F\u002Fcobrapy.readthedocs.io\u002Fen\u002Flatest\u002F\n","# COBRApy - Constraint-Based Reconstruction and Analysis\n\n## Overview\n\nCOBRApy is a Python library for constraint-based reconstruction and analysis (COBRA) of metabolic models, essential for systems biology research. Work with genome-scale metabolic models, perform computational simulations of cellular metabolism, conduct metabolic engineering analyses, and predict phenotypic behaviors.\n\n## Core Capabilities\n\nCOBRApy provides comprehensive tools organized into several key areas:\n\n### 1. Model Management\n\nLoad existing models from repositories or files:\n```python\nfrom cobra.io import load_model\n\n# Load bundled test models\nmodel = load_model(\"textbook\")  # E. coli core model\nmodel = load_model(\"ecoli\")     # Full E. coli model\nmodel = load_model(\"salmonella\")\n\n# Load from files\nfrom cobra.io import read_sbml_model, load_json_model, load_yaml_model\nmodel = read_sbml_model(\"path\u002Fto\u002Fmodel.xml\")\nmodel = load_json_model(\"path\u002Fto\u002Fmodel.json\")\nmodel = load_yaml_model(\"path\u002Fto\u002Fmodel.yml\")\n```\n\nSave models in various formats:\n```python\nfrom cobra.io import write_sbml_model, save_json_model, save_yaml_model\nwrite_sbml_model(model, \"output.xml\")  # Preferred format\nsave_json_model(model, \"output.json\")  # For Escher compatibility\nsave_yaml_model(model, \"output.yml\")   # Human-readable\n```\n\n### 2. Model Structure and Components\n\nAccess and inspect model components:\n```python\n# Access components\nmodel.reactions      # DictList of all reactions\nmodel.metabolites    # DictList of all metabolites\nmodel.genes          # DictList of all genes\n\n# Get specific items by ID or index\nreaction = model.reactions.get_by_id(\"PFK\")\nmetabolite = model.metabolites[0]\n\n# Inspect properties\nprint(reaction.reaction)        # Stoichiometric equation\nprint(reaction.bounds)          # Flux constraints\nprint(reaction.gene_reaction_rule)  # GPR logic\nprint(metabolite.formula)       # Chemical formula\nprint(metabolite.compartment)   # Cellular location\n```\n\n### 3. Flux Balance Analysis (FBA)\n\nPerform standard FBA simulation:\n```python\n# Basic optimization\nsolution = model.optimize()\nprint(f\"Objective value: {solution.objective_value}\")\nprint(f\"Status: {solution.status}\")\n\n# Access fluxes\nprint(solution.fluxes[\"PFK\"])\nprint(solution.fluxes.head())\n\n# Fast optimization (objective value only)\nobjective_value = model.slim_optimize()\n\n# Change objective\nmodel.objective = \"ATPM\"\nsolution = model.optimize()\n```\n\nParsimonious FBA (minimize total flux):\n```python\nfrom cobra.flux_analysis import pfba\nsolution = pfba(model)\n```\n\nGeometric FBA (find central solution):\n```python\nfrom cobra.flux_analysis import geometric_fba\nsolution = geometric_fba(model)\n```\n\n### 4. Flux Variability Analysis (FVA)\n\nDetermine flux ranges for all reactions:\n```python\nfrom cobra.flux_analysis import flux_variability_analysis\n\n# Standard FVA\nfva_result = flux_variability_analysis(model)\n\n# FVA at 90% optimality\nfva_result = flux_variability_analysis(model, fraction_of_optimum=0.9)\n\n# Loopless FVA (eliminates thermodynamically infeasible loops)\nfva_result = flux_variability_analysis(model, loopless=True)\n\n# FVA for specific reactions\nfva_result = flux_variability_analysis(\n    model,\n    reaction_list=[\"PFK\", \"FBA\", \"PGI\"]\n)\n```\n\n### 5. Gene and Reaction Deletion Studies\n\nPerform knockout analyses:\n```python\nfrom cobra.flux_analysis import (\n    single_gene_deletion,\n    single_reaction_deletion,\n    double_gene_deletion,\n    double_reaction_deletion\n)\n\n# Single deletions\ngene_results = single_gene_deletion(model)\nreaction_results = single_reaction_deletion(model)\n\n# Double deletions (uses multiprocessing)\ndouble_gene_results = double_gene_deletion(\n    model,\n    processes=4  # Number of CPU cores\n)\n\n# Manual knockout using context manager\nwith model:\n    model.genes.get_by_id(\"b0008\").knock_out()\n    solution = model.optimize()\n    print(f\"Growth after knockout: {solution.objective_value}\")\n# Model automatically reverts after context exit\n```\n\n### 6. Growth Media and Minimal Media\n\nManage growth medium:\n```python\n# View current medium\nprint(model.medium)\n\n# Modify medium (must reassign entire dict)\nmedium = model.medium\nmedium[\"EX_glc__D_e\"] = 10.0  # Set glucose uptake\nmedium[\"EX_o2_e\"] = 0.0       # Anaerobic conditions\nmodel.medium = medium\n\n# Calculate minimal media\nfrom cobra.medium import minimal_medium\n\n# Minimize total import flux\nmin_medium = minimal_medium(model, minimize_components=False)\n\n# Minimize number of components (uses MILP, slower)\nmin_medium = minimal_medium(\n    model,\n    minimize_components=True,\n    open_exchanges=True\n)\n```\n\n### 7. Flux Sampling\n\nSample the feasible flux space:\n```python\nfrom cobra.sampling import sample\n\n# Sample using OptGP (default, supports parallel processing)\nsamples = sample(model, n=1000, method=\"optgp\", processes=4)\n\n# Sample using ACHR\nsamples = sample(model, n=1000, method=\"achr\")\n\n# Validate samples\nfrom cobra.sampling import OptGPSampler\nsampler = OptGPSampler(model, processes=4)\nsampler.sample(1000)\nvalidation = sampler.validate(sampler.samples)\nprint(validation.value_counts())  # Should be all 'v' for valid\n```\n\n### 8. Production Envelopes\n\nCalculate phenotype phase planes:\n```python\nfrom cobra.flux_analysis import production_envelope\n\n# Standard production envelope\nenvelope = production_envelope(\n    model,\n    reactions=[\"EX_glc__D_e\", \"EX_o2_e\"],\n    objective=\"EX_ac_e\"  # Acetate production\n)\n\n# With carbon yield\nenvelope = production_envelope(\n    model,\n    reactions=[\"EX_glc__D_e\", \"EX_o2_e\"],\n    carbon_sources=\"EX_glc__D_e\"\n)\n\n# Visualize (use matplotlib or pandas plotting)\nimport matplotlib.pyplot as plt\nenvelope.plot(x=\"EX_glc__D_e\", y=\"EX_o2_e\", kind=\"scatter\")\nplt.show()\n```\n\n### 9. Gapfilling\n\nAdd reactions to make models feasible:\n```python\nfrom cobra.flux_analysis import gapfill\n\n# Prepare universal model with candidate reactions\nuniversal = load_model(\"universal\")\n\n# Perform gapfilling\nwith model:\n    # Remove reactions to create gaps for demonstration\n    model.remove_reactions([model.reactions.PGI])\n\n    # Find reactions needed\n    solution = gapfill(model, universal)\n    print(f\"Reactions to add: {solution}\")\n```\n\n### 10. Model Building\n\nBuild models from scratch:\n```python\nfrom cobra import Model, Reaction, Metabolite\n\n# Create model\nmodel = Model(\"my_model\")\n\n# Create metabolites\natp_c = Metabolite(\"atp_c\", formula=\"C10H12N5O13P3\",\n                   name=\"ATP\", compartment=\"c\")\nadp_c = Metabolite(\"adp_c\", formula=\"C10H12N5O10P2\",\n                   name=\"ADP\", compartment=\"c\")\npi_c = Metabolite(\"pi_c\", formula=\"HO4P\",\n                  name=\"Phosphate\", compartment=\"c\")\n\n# Create reaction\nreaction = Reaction(\"ATPASE\")\nreaction.name = \"ATP hydrolysis\"\nreaction.subsystem = \"Energy\"\nreaction.lower_bound = 0.0\nreaction.upper_bound = 1000.0\n\n# Add metabolites with stoichiometry\nreaction.add_metabolites({\n    atp_c: -1.0,\n    adp_c: 1.0,\n    pi_c: 1.0\n})\n\n# Add gene-reaction rule\nreaction.gene_reaction_rule = \"(gene1 and gene2) or gene3\"\n\n# Add to model\nmodel.add_reactions([reaction])\n\n# Add boundary reactions\nmodel.add_boundary(atp_c, type=\"exchange\")\nmodel.add_boundary(adp_c, type=\"demand\")\n\n# Set objective\nmodel.objective = \"ATPASE\"\n```\n\n## Common Workflows\n\n### Workflow 1: Load Model and Predict Growth\n\n```python\nfrom cobra.io import load_model\n\n# Load model\nmodel = load_model(\"ecoli\")\n\n# Run FBA\nsolution = model.optimize()\nprint(f\"Growth rate: {solution.objective_value:.3f} \u002Fh\")\n\n# Show active pathways\nprint(solution.fluxes[solution.fluxes.abs() > 1e-6])\n```\n\n### Workflow 2: Gene Knockout Screen\n\n```python\nfrom cobra.io import load_model\nfrom cobra.flux_analysis import single_gene_deletion\n\n# Load model\nmodel = load_model(\"ecoli\")\n\n# Perform single gene deletions\nresults = single_gene_deletion(model)\n\n# Find essential genes (growth \u003C threshold)\nessential_genes = results[results[\"growth\"] \u003C 0.01]\nprint(f\"Found {len(essential_genes)} essential genes\")\n\n# Find genes with minimal impact\nneutral_genes = results[results[\"growth\"] > 0.9 * solution.objective_value]\n```\n\n### Workflow 3: Media Optimization\n\n```python\nfrom cobra.io import load_model\nfrom cobra.medium import minimal_medium\n\n# Load model\nmodel = load_model(\"ecoli\")\n\n# Calculate minimal medium for 50% of max growth\ntarget_growth = model.slim_optimize() * 0.5\nmin_medium = minimal_medium(\n    model,\n    target_growth,\n    minimize_components=True\n)\n\nprint(f\"Minimal medium components: {len(min_medium)}\")\nprint(min_medium)\n```\n\n### Workflow 4: Flux Uncertainty Analysis\n\n```python\nfrom cobra.io import load_model\nfrom cobra.flux_analysis import flux_variability_analysis\nfrom cobra.sampling import sample\n\n# Load model\nmodel = load_model(\"ecoli\")\n\n# First check flux ranges at optimality\nfva = flux_variability_analysis(model, fraction_of_optimum=1.0)\n\n# For reactions with large ranges, sample to understand distribution\nsamples = sample(model, n=1000)\n\n# Analyze specific reaction\nreaction_id = \"PFK\"\nimport matplotlib.pyplot as plt\nsamples[reaction_id].hist(bins=50)\nplt.xlabel(f\"Flux through {reaction_id}\")\nplt.ylabel(\"Frequency\")\nplt.show()\n```\n\n### Workflow 5: Context Manager for Temporary Changes\n\nUse context managers to make temporary modifications:\n```python\n# Model remains unchanged outside context\nwith model:\n    # Temporarily change objective\n    model.objective = \"ATPM\"\n\n    # Temporarily modify bounds\n    model.reactions.EX_glc__D_e.lower_bound = -5.0\n\n    # Temporarily knock out genes\n    model.genes.b0008.knock_out()\n\n    # Optimize with changes\n    solution = model.optimize()\n    print(f\"Modified growth: {solution.objective_value}\")\n\n# All changes automatically reverted\nsolution = model.optimize()\nprint(f\"Original growth: {solution.objective_value}\")\n```\n\n## Key Concepts\n\n### DictList Objects\nModels use `DictList` objects for reactions, metabolites, and genes - behaving like both lists and dictionaries:\n```python\n# Access by index\nfirst_reaction = model.reactions[0]\n\n# Access by ID\npfk = model.reactions.get_by_id(\"PFK\")\n\n# Query methods\natp_reactions = model.reactions.query(\"atp\")\n```\n\n### Flux Constraints\nReaction bounds define feasible flux ranges:\n- **Irreversible**: `lower_bound = 0, upper_bound > 0`\n- **Reversible**: `lower_bound \u003C 0, upper_bound > 0`\n- Set both bounds simultaneously with `.bounds` to avoid inconsistencies\n\n### Gene-Reaction Rules (GPR)\nBoolean logic linking genes to reactions:\n```python\n# AND logic (both required)\nreaction.gene_reaction_rule = \"gene1 and gene2\"\n\n# OR logic (either sufficient)\nreaction.gene_reaction_rule = \"gene1 or gene2\"\n\n# Complex logic\nreaction.gene_reaction_rule = \"(gene1 and gene2) or (gene3 and gene4)\"\n```\n\n### Exchange Reactions\nSpecial reactions representing metabolite import\u002Fexport:\n- Named with prefix `EX_` by convention\n- Positive flux = secretion, negative flux = uptake\n- Managed through `model.medium` dictionary\n\n## Best Practices\n\n1. **Use context managers** for temporary modifications to avoid state management issues\n2. **Validate models** before analysis using `model.slim_optimize()` to ensure feasibility\n3. **Check solution status** after optimization - `optimal` indicates successful solve\n4. **Use loopless FVA** when thermodynamic feasibility matters\n5. **Set fraction_of_optimum** appropriately in FVA to explore suboptimal space\n6. **Parallelize** computationally expensive operations (sampling, double deletions)\n7. **Prefer SBML format** for model exchange and long-term storage\n8. **Use slim_optimize()** when only objective value needed for performance\n9. **Validate flux samples** to ensure numerical stability\n\n## Troubleshooting\n\n**Infeasible solutions**: Check medium constraints, reaction bounds, and model consistency\n**Slow optimization**: Try different solvers (GLPK, CPLEX, Gurobi) via `model.solver`\n**Unbounded solutions**: Verify exchange reactions have appropriate upper bounds\n**Import errors**: Ensure correct file format and valid SBML identifiers\n\n## References\n\nFor detailed workflows and API patterns, refer to:\n- `references\u002Fworkflows.md` - Comprehensive step-by-step workflow examples\n- `references\u002Fapi_quick_reference.md` - Common function signatures and patterns\n\nOfficial documentation: https:\u002F\u002Fcobrapy.readthedocs.io\u002Fen\u002Flatest\u002F\n",{"name":5,"description":7},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Faiskillstore\u002Fmarketplace\u002Fdavila7\u002Fcobrapy",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":8,"skillName":5,"commands":45,"prompt":55,"zipAvailable":56},[46,49,52],{"tool":47,"command":48},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill cobrapy",{"tool":50,"command":51},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill cobrapy",{"tool":53,"command":54},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill cobrapy","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fdavila7\u002Fcobrapy\u002FSKILL.md",true,[58,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192,196,200,204,208,212,216,219,223,227,231,235,239,243,247,251,255,259,263,267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327,331,335,339,343,347,351,355,358,362,366],{"path":59,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":62,"sourceHtmlUrl":63},"AGENTS.md","REFERENCE","参考文档",108261,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002FAGENTS.md",{"path":65,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":66,"sourceHtmlUrl":67},"metadata.json",921,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Fmetadata.json",{"path":69,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":70,"sourceHtmlUrl":71},"README.md",3360,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002FREADME.md",{"path":73,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":74,"sourceHtmlUrl":75},"references\u002Fapi_quick_reference.md",16036,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fdavila7\u002Fcobrapy\u002Freferences\u002Fapi_quick_reference.md",{"path":77,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":78,"sourceHtmlUrl":79},"references\u002Fworkflows.md",21741,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fdavila7\u002Fcobrapy\u002Freferences\u002Fworkflows.md",{"path":81,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":82,"sourceHtmlUrl":83},"rules\u002F_sections.md",1554,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002F_sections.md",{"path":85,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":86,"sourceHtmlUrl":87},"rules\u002F_template.md",631,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002F_template.md",{"path":89,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":90,"sourceHtmlUrl":91},"rules\u002Fadvanced-effect-event-deps.md",1802,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fadvanced-effect-event-deps.md",{"path":93,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":94,"sourceHtmlUrl":95},"rules\u002Fadvanced-event-handler-refs.md",1483,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fadvanced-event-handler-refs.md",{"path":97,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":98,"sourceHtmlUrl":99},"rules\u002Fadvanced-init-once.md",958,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fadvanced-init-once.md",{"path":101,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":102,"sourceHtmlUrl":103},"rules\u002Fadvanced-use-latest.md",1072,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fadvanced-use-latest.md",{"path":105,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":106,"sourceHtmlUrl":107},"rules\u002Fasync-api-routes.md",1125,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fasync-api-routes.md",{"path":109,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":110,"sourceHtmlUrl":111},"rules\u002Fasync-cheap-condition-before-await.md",1220,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fasync-cheap-condition-before-await.md",{"path":113,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":114,"sourceHtmlUrl":115},"rules\u002Fasync-defer-await.md",2208,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fasync-defer-await.md",{"path":117,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":118,"sourceHtmlUrl":119},"rules\u002Fasync-dependencies.md",1293,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fasync-dependencies.md",{"path":121,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":122,"sourceHtmlUrl":123},"rules\u002Fasync-parallel.md",654,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fasync-parallel.md",{"path":125,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":126,"sourceHtmlUrl":127},"rules\u002Fasync-suspense-boundaries.md",2510,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fasync-suspense-boundaries.md",{"path":129,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":130,"sourceHtmlUrl":131},"rules\u002Fbundle-analyzable-paths.md",2382,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fbundle-analyzable-paths.md",{"path":133,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":134,"sourceHtmlUrl":135},"rules\u002Fbundle-barrel-imports.md",2795,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fbundle-barrel-imports.md",{"path":137,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":138,"sourceHtmlUrl":139},"rules\u002Fbundle-conditional.md",949,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fbundle-conditional.md",{"path":141,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":142,"sourceHtmlUrl":143},"rules\u002Fbundle-defer-third-party.md",920,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fbundle-defer-third-party.md",{"path":145,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":146,"sourceHtmlUrl":147},"rules\u002Fbundle-dynamic-imports.md",791,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fbundle-dynamic-imports.md",{"path":149,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":150,"sourceHtmlUrl":151},"rules\u002Fbundle-preload.md",1149,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fbundle-preload.md",{"path":153,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":154,"sourceHtmlUrl":155},"rules\u002Fclient-event-listeners.md",1969,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fclient-event-listeners.md",{"path":157,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":158,"sourceHtmlUrl":159},"rules\u002Fclient-localstorage-schema.md",1950,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fclient-localstorage-schema.md",{"path":161,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":162,"sourceHtmlUrl":163},"rules\u002Fclient-passive-event-listeners.md",1644,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fclient-passive-event-listeners.md",{"path":165,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":166,"sourceHtmlUrl":167},"rules\u002Fclient-swr-dedup.md",1159,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fclient-swr-dedup.md",{"path":169,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":170,"sourceHtmlUrl":171},"rules\u002Fjs-batch-dom-css.md",3266,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fjs-batch-dom-css.md",{"path":173,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":174,"sourceHtmlUrl":175},"rules\u002Fjs-cache-function-results.md",1949,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fjs-cache-function-results.md",{"path":177,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":178,"sourceHtmlUrl":179},"rules\u002Fjs-cache-property-access.md",532,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fjs-cache-property-access.md",{"path":181,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":182,"sourceHtmlUrl":183},"rules\u002Fjs-cache-storage.md",1651,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fjs-cache-storage.md",{"path":185,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":186,"sourceHtmlUrl":187},"rules\u002Fjs-combine-iterations.md",753,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fjs-combine-iterations.md",{"path":189,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":190,"sourceHtmlUrl":191},"rules\u002Fjs-early-exit.md",1133,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fjs-early-exit.md",{"path":193,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":194,"sourceHtmlUrl":195},"rules\u002Fjs-flatmap-filter.md",1411,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fjs-flatmap-filter.md",{"path":197,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":198,"sourceHtmlUrl":199},"rules\u002Fjs-hoist-regexp.md",1028,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fjs-hoist-regexp.md",{"path":201,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":202,"sourceHtmlUrl":203},"rules\u002Fjs-index-maps.md",837,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fjs-index-maps.md",{"path":205,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":206,"sourceHtmlUrl":207},"rules\u002Fjs-length-check-first.md",1747,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fjs-length-check-first.md",{"path":209,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":210,"sourceHtmlUrl":211},"rules\u002Fjs-min-max-loop.md",2290,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fjs-min-max-loop.md",{"path":213,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":214,"sourceHtmlUrl":215},"rules\u002Fjs-request-idle-callback.md",2647,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fjs-request-idle-callback.md",{"path":217,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":178,"sourceHtmlUrl":218},"rules\u002Fjs-set-map-lookups.md","https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fjs-set-map-lookups.md",{"path":220,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":221,"sourceHtmlUrl":222},"rules\u002Fjs-tosorted-immutable.md",1782,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fjs-tosorted-immutable.md",{"path":224,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":225,"sourceHtmlUrl":226},"rules\u002Frendering-activity.md",564,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frendering-activity.md",{"path":228,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":229,"sourceHtmlUrl":230},"rules\u002Frendering-animate-svg-wrapper.md",1185,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frendering-animate-svg-wrapper.md",{"path":232,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":233,"sourceHtmlUrl":234},"rules\u002Frendering-conditional-render.md",980,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frendering-conditional-render.md",{"path":236,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":237,"sourceHtmlUrl":238},"rules\u002Frendering-content-visibility.md",815,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frendering-content-visibility.md",{"path":240,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":241,"sourceHtmlUrl":242},"rules\u002Frendering-hoist-jsx.md",1039,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frendering-hoist-jsx.md",{"path":244,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":245,"sourceHtmlUrl":246},"rules\u002Frendering-hydration-no-flicker.md",2308,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frendering-hydration-no-flicker.md",{"path":248,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":249,"sourceHtmlUrl":250},"rules\u002Frendering-hydration-suppress-warning.md",872,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frendering-hydration-suppress-warning.md",{"path":252,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":253,"sourceHtmlUrl":254},"rules\u002Frendering-resource-hints.md",2549,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frendering-resource-hints.md",{"path":256,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":257,"sourceHtmlUrl":258},"rules\u002Frendering-script-defer-async.md",1868,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frendering-script-defer-async.md",{"path":260,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":261,"sourceHtmlUrl":262},"rules\u002Frendering-svg-precision.md",588,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frendering-svg-precision.md",{"path":264,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":265,"sourceHtmlUrl":266},"rules\u002Frendering-usetransition-loading.md",2074,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frendering-usetransition-loading.md",{"path":268,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":269,"sourceHtmlUrl":270},"rules\u002Frerender-defer-reads.md",973,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frerender-defer-reads.md",{"path":272,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":273,"sourceHtmlUrl":274},"rules\u002Frerender-dependencies.md",824,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frerender-dependencies.md",{"path":276,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":277,"sourceHtmlUrl":278},"rules\u002Frerender-derived-state-no-effect.md",1201,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frerender-derived-state-no-effect.md",{"path":280,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":281,"sourceHtmlUrl":282},"rules\u002Frerender-derived-state.md",728,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frerender-derived-state.md",{"path":284,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":285,"sourceHtmlUrl":286},"rules\u002Frerender-functional-setstate.md",2968,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frerender-functional-setstate.md",{"path":288,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":289,"sourceHtmlUrl":290},"rules\u002Frerender-lazy-state-init.md",2016,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frerender-lazy-state-init.md",{"path":292,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":293,"sourceHtmlUrl":294},"rules\u002Frerender-memo-with-default-value.md",1173,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frerender-memo-with-default-value.md",{"path":296,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":297,"sourceHtmlUrl":298},"rules\u002Frerender-memo.md",1148,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frerender-memo.md",{"path":300,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":301,"sourceHtmlUrl":302},"rules\u002Frerender-move-effect-to-event.md",1268,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frerender-move-effect-to-event.md",{"path":304,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":305,"sourceHtmlUrl":306},"rules\u002Frerender-no-inline-components.md",2135,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frerender-no-inline-components.md",{"path":308,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":309,"sourceHtmlUrl":310},"rules\u002Frerender-simple-expression-in-memo.md",1018,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frerender-simple-expression-in-memo.md",{"path":312,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":313,"sourceHtmlUrl":314},"rules\u002Frerender-split-combined-hooks.md",1844,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frerender-split-combined-hooks.md",{"path":316,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":317,"sourceHtmlUrl":318},"rules\u002Frerender-transitions.md",1055,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frerender-transitions.md",{"path":320,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":321,"sourceHtmlUrl":322},"rules\u002Frerender-use-deferred-value.md",1846,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frerender-use-deferred-value.md",{"path":324,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":325,"sourceHtmlUrl":326},"rules\u002Frerender-use-ref-transient-values.md",1742,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Frerender-use-ref-transient-values.md",{"path":328,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":329,"sourceHtmlUrl":330},"rules\u002Fserver-after-nonblocking.md",2012,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fserver-after-nonblocking.md",{"path":332,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":333,"sourceHtmlUrl":334},"rules\u002Fserver-auth-actions.md",2649,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fserver-auth-actions.md",{"path":336,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":337,"sourceHtmlUrl":338},"rules\u002Fserver-cache-lru.md",1353,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fserver-cache-lru.md",{"path":340,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":341,"sourceHtmlUrl":342},"rules\u002Fserver-cache-react.md",2228,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fserver-cache-react.md",{"path":344,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":345,"sourceHtmlUrl":346},"rules\u002Fserver-dedup-props.md",2060,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fserver-dedup-props.md",{"path":348,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":349,"sourceHtmlUrl":350},"rules\u002Fserver-hoist-static-io.md",4423,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fserver-hoist-static-io.md",{"path":352,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":353,"sourceHtmlUrl":354},"rules\u002Fserver-no-shared-module-state.md",1766,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fserver-no-shared-module-state.md",{"path":356,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":82,"sourceHtmlUrl":357},"rules\u002Fserver-parallel-fetching.md","https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fserver-parallel-fetching.md",{"path":359,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":360,"sourceHtmlUrl":361},"rules\u002Fserver-parallel-nested-fetching.md",992,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fserver-parallel-nested-fetching.md",{"path":363,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":364,"sourceHtmlUrl":365},"rules\u002Fserver-serialization.md",996,"https:\u002F\u002Fgithub.com\u002Fgertsio\u002Fkalshi-ai-research\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002Frules\u002Fserver-serialization.md",{"path":367,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":368,"sourceHtmlUrl":369},"skill-report.json",10448,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fdavila7\u002Fcobrapy\u002Fskill-report.json",[371,385,395,404,410,417],{"skillNo":372,"name":373,"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":374,"categories":375,"keywords":381,"publishedAt":30},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[376],{"categoryNo":377,"categoryName":378,"taxonomyType":379,"taxonomyTypeDesc":380},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[382,383,384],"model","model hierarchy","model hierarchy skill",{"skillNo":386,"name":387,"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":388,"categories":389,"keywords":391,"publishedAt":30},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[390],{"categoryNo":377,"categoryName":378,"taxonomyType":379,"taxonomyTypeDesc":380},[392,393,394],"MCP","zoom","zoom mcp",{"skillNo":396,"name":397,"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":398,"categories":399,"keywords":400,"publishedAt":30},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[401,402,403,393],"sdk","zoom apps sdk","apps",{"skillNo":405,"name":406,"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":407,"categories":408,"keywords":409,"publishedAt":30},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[406],{"skillNo":411,"name":412,"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":413,"categories":414,"keywords":416,"publishedAt":30},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[415],{"categoryNo":377,"categoryName":378,"taxonomyType":379,"taxonomyTypeDesc":380},[412],{"skillNo":418,"name":419,"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":420,"categories":421,"keywords":422,"publishedAt":30},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[419]]