Geo DatabaseSAFE
The largest open-source medical AI skills library for OpenClaw🦞.
Overview
The largest open-source medical AI skills library for OpenClaw🦞.
29f31a89230cOBSERVED · 2026-10-08Install
Commands as the repository documents them. They are shown, not run.
uv pip install GEOparse
uv pip install GEOparse
uv pip install biopython
uv pip install pandas numpy scipy
uv pip install matplotlib seaborn
uv pip install statsmodels scikit-learn
What it tells the agent
The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.
--- name: geo-database description: "Access NCBI GEO for gene expression/genomics data. Search/download microarray and RNA-seq datasets (GSE, GSM, GPL), retrieve SOFT/Matrix files, for transcriptomics and expression analysis." --- # GEO Database ## Overview The Gene Expression Omnibus (GEO) is NCBI's public repository for high-throughput gene expression and functional genomics data. GEO contains over 264,000 studies with more than 8 million samples from both array-based and sequence-based experiments. ## When to Use This Skill This skill should be used when searching for gene expression datasets, retrieving experimental data, downloading raw and processed files, querying expression profiles, or integrating GEO data into computational analysis workflows. ## Core Capabilities ### 1. Understanding GEO Data Organization GEO organizes data hierarchically using different accession types: **Series (GSE):** A complete experiment with a set of related samples - Example: GSE123456 - Contains experimental design, samples, and overall study information - Largest organizational unit in GEO - Current count: 264,928+ series **Sample (GSM):** A single experimental sample or biological replicate - Example: GSM987654 - Contains individual sample data, protocols, and metadata - Linked to platforms and series - Current count: 8,068,632+ samples **Platform (GPL):** The microarray or sequencing platform used - Example: GPL570 (Affymetrix Human Genome U133 Plus 2.0 Array) - Describes the technology and probe/feature annotations - Shared across multiple experiments - Current count: 27,739+ platforms **DataSet (GDS):** Curated collections with consistent formatting - Example: GDS5678 - Experimentally-comparable samples organized by study design - Processed for differential analysis - Subset of GEO data (4,348 curated datasets) - Ideal for quick comparative analyses **Profiles:** Gene-specific expression data linked to sequence features - Queryable by gene name or annotation - Cross-references to Entrez Gene - Enables gene-centric searches across all studies ### 2. Searching GEO Data **GEO DataSets Search:** Search for studies by keywords, organism, or experimental conditions: ```python from Bio import Entrez # Configure Entrez (required) Entrez.email = "[email protected]" # Search for datasets def search_geo_datasets(query, retmax=20): """Search GEO DataSets database""" handle = Entrez.esearch( db="gds", term=query, retmax=retmax, usehistory="y" ) results = Entrez.read(handle) handle.close() return results # Example searches results = search_geo_datasets("breast cancer[MeSH] AND Homo sapiens[Organism]") print(f"Found {results['Count']} datasets") # Search by specific platform results = search_geo_datasets("GPL570[Accession]") # Search by study type results = search_geo_datasets("expression profiling by array[DataSet Type]") ``` **GEO Profiles Search:** Find gene-specific expression patterns: ```python # Search for gene expression profiles def search_geo_profiles(gene_name, organism="Homo sapiens", retmax=100): """Search GEO Profiles for a specific gene""" query = f"{gene_name}[Gene Name] AND {organism}[Organism]" handle = Entrez.esearch( db="geoprofiles", term=query, retmax=retmax ) results = Entrez.read(handle) handle.close() return results # Find TP53 expression across studies tp53_results = search_geo_profiles("TP53", organism="Homo sapiens") print(f"Found {tp53_results['Count']} expression profiles for TP53") ``` **Advanced Search Patterns:** ```python # Combine multiple search terms def advanced_geo_search(terms, operator="AND"): """Build complex search queries""" query = f" {operator} ".join(terms) return search_geo_datasets(query) # Find recent high-throughput studies search_terms = [ "RNA-seq[DataSet Type]", "Homo sapiens[Organism]", "2024[Publication Date]" ] results = advanced_geo_search(search_terms) # Search by author and condition search_terms = [ "Smith[Author]", "diabetes[Disease]" ] results = advanced_geo_search(search_terms) ``` ### 3. Retrieving GEO Data with GEOparse (Recommended) **GEOparse** is the primary Python library for accessing GEO data: **Installation:** ```bash uv pip install GEOparse ``` **Basic Usage:** ```python import GEOparse # Download and parse a GEO Series gse = GEOparse.get_GEO(geo="GSE123456", destdir="./data") # Access series metadata print(gse.metadata['title']) print(gse.metadata['summary']) print(gse.metadata['overall_design']) # Access sample information for gsm_name, gsm in gse.gsms.items(): print(f"Sample: {gsm_name}") print(f" Title: {gsm.metadata['title'][0]}") print(f" Source: {gsm.metadata['source_name_ch1'][0]}") print(f" Characteristics: {gsm.metadata.get('characteristics_ch1', [])}") # Access platform information for gpl_name, gpl in gse.gpls.items(): print(f"Platform: {gpl_name}") print(f" Title: {gpl.metadata['title'][0]}") print(f" Organism: {gpl.metadata['organism'][0]}") ``` **Working with Expression Data:** ```python import GEOparse import pandas as pd # Get expression data from series gse = GEOparse.get_GEO(geo="GSE123456", destdir="./data") # Extract expression matrix # Method 1: From series matrix file (fastest) if hasattr(gse, 'pivot_samples'): expression_df = gse.pivot_samples('VALUE') print(expression_df.shape) # genes x samples # Method 2: From individual samples expression_data = {} for gsm_name, gsm in gse.gsms.items(): if hasattr(gsm, 'table'): expression_data[gsm_name] = gsm.table['VALUE'] expression_df = pd.DataFrame(expression_data) print(f"Expression matrix: {expression_df.shape}") ``` **Accessing Supplementary Files:** ```python import GEOparse gse = GEOparse.get_GEO(geo="GSE123456", destdir="./data") # Download supplementary files gse.download_supplementary_files( directory="./data/GSE12345
Trust audit
SAFEgrade B · trust 89/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | NA |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- none-observed
- Network
- none-observed
- Shell
- none-observed
- Dependencies
- pinned
- Secrets in source
- none-found
Findings (0)
No findings outside the package's declared scope.
Gates applied: no_behavioural_pass.
29f31a89230cfull audit observations/trust-audit/skill/freedomintelligence__geo-database.json · Report an issue / request a re-scanAudit history
Every audit this skill has had.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-08 | 29f31a89230c | SAFE | B | 89 | first audit |
Questions
What does the Geo Database skill do?
The largest open-source medical AI skills library for OpenClaw🦞.
Is Geo Database safe to install?
The audit found nothing in the source that contradicts what it says it does, and graded it B (89/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean skill reads B.
What can Geo Database access on my machine?
The audit observed no filesystem, network or shell use at all in its source.
How current is this page?
The grade is for one exact copy of the source (29f31a89230c), read on 2026-10-08. The repository is watched, and a new audit runs when it changes — this is the first audit.