Agent skill

Bio Chipseq Differential Binding

by GPTomics in GPTomics/bioSkills

Identifies differentially bound ChIP-seq regions between conditions using DiffBind, csaw (sliding windows), DESeq2/edgeR/PyDESeq2 on count matrices, NormR (control-aware), or MAnorm2.

MITAuto-check passedResearch & Science

Install Bio Chipseq Differential Binding

skills CLI
$ npx skills add GPTomics/bioSkills --skill bio-chipseq-differential-binding -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install GPTomics/bioSkills bio-chipseq-differential-binding --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/GPTomics/bioSkills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/chip-seq/differential-binding .claude/skills/bio-chipseq-differential-binding && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
bio-chipseq-differential-binding
GitHub stars
1.2k
Used in
2 other repos
Token cost
~5.1k tokens
SKILL.md length
1,980 words
Files
6
Skills in repo
552
Repo updated
First seen
Licence
MIT

At a glance

Identifies differentially bound ChIP-seq regions between conditions using DiffBind, csaw (sliding windows), DESeq2/edgeR/PyDESeq2 on count matrices, NormR (control-aware), or MAnorm2.

  • Comparing ChIP-seq binding between experimental conditions
  • SKILL.md covers Version Compatibility, The Three Distinct…, Algorithmic Taxonomy and Decision Tree: Choosing…, plus 9 more sections
  • Runs R and Python scripts from its folder
  • Choosing normalization for global vs local changes

What it does

Bio Chipseq Differential Binding is an agent skill from GPTomics/bioSkills. Identifies differentially bound ChIP-seq regions between conditions using DiffBind, csaw (sliding windows), DESeq2/edgeR/PyDESeq2 on count matrices, NormR (control-aware), or MAnorm2. Distinguishes three distinct normalization problems (composition bias, trended bias, global shifts) and matches each to its appropriate fix including spike-in scaling. Use when comparing ChIP-seq binding between experimental conditions, choosing normalization for global vs local changes, integrating spike-in data, or reconciling…

Its SKILL.md is about 5.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files (for example `examples/pydeseq2_from_counts.py` and `usage-guide.md`).

It sits in Research & Science, covering Bioinformatics and Database schema design. The repository describes itself as: a set of SKILLS.md for doing bioinformatics with agents like claude code. The licence is MIT.

When your agent uses it

  • Comparing ChIP-seq binding between experimental conditions
  • Choosing normalization for global vs local changes
  • Integrating spike-in data
  • Reconciling DiffBind/DESeq2 disagreement

Example prompts

  • “Use the bio-chipseq-differential-binding skill to identify differentially bound ChIP-seq regions between conditions using DiffBind, csaw (sliding…”
  • “/bio-chipseq-differential-binding”

Requirements

  • Python 3

What it can do on your machine

Read from SKILL.md and the folder at commit d91ed3d. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships script files (R and Python), which the agent can run.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Bio Chipseq Differential Binding loads about 5.1k tokens when it runs. Until then it costs about 144 tokens; SKILL.md has 1,980 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~144
When it runs · the whole SKILL.md, loaded when a task matches
~5.1k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from GPTomics/bioSkills at commit d91ed3d, republished under its MIT licence (© GPTomics). 1,980 words, ~5,141 tokens.

Download SKILL.mdSave it as .claude/skills/bio-chipseq-differential-binding/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.
name
bio-chipseq-differential-binding
description
Identifies differentially bound ChIP-seq regions between conditions using DiffBind, csaw (sliding windows), DESeq2/edgeR/PyDESeq2 on count matrices, NormR (control-aware), or MAnorm2. Distinguishes three distinct normalization problems (composition bias, trended bias, global shifts) and matches each to its appropriate fix including spike-in scaling. Use when comparing ChIP-seq binding between experimental conditions, choosing normalization for global vs local changes, integrating spike-in data, or reconciling DiffBind/DESeq2 disagreement.
tool_type
mixed
primary_tool
DiffBind

Version Compatibility

Reference examples tested with: DiffBind 3.20+, DESeq2 1.42+, edgeR 4.0+, csaw 1.36+, PyDESeq2 0.5+, NormR 1.28+, MAnorm2 1.2+, ChIPseqSpikeInFree 1.6+.

DiffBind 3.0+ changed defaults: summits=200 (was FALSE), dba.normalize() now required, blacklist filtering on by default, full library size normalization replaces reads-in-peaks. Always run packageVersion('DiffBind') and inspect dba.normalize(obj, bRetrieve=TRUE) to confirm what was applied.

Differential ChIP-seq Binding

"Compare protein-DNA binding between experimental conditions" -> Identify regions where IP signal changes significantly, accounting for sequencing depth, composition bias, trended biases, and global shifts that confound naive normalization.

  • R (BAM + peaks): DiffBind::dba() -> dba.count() -> dba.normalize() -> dba.analyze()
  • R (count matrix): DESeq2::DESeq() or edgeR::glmQLFTest() on a peaks-by-samples matrix
  • R (windows-based, global-shift-robust): csaw::windowCounts() -> csaw::normFactors() -> edgeR::glmQLFTest()
  • R (control-aware): normr::diffR(chip1.bam, chip2.bam, genome) joint binomial mixture
  • Python (count matrix): pydeseq2.DeseqDataSet()

Choice of normalization matters more than choice of test statistic (RLE vs TMM vs csaw bin-TMM on the same reference reads produce nearly identical results). Choose by which of the three normalization problems applies.

The Three Distinct Normalization Problems

ProblemSymptom on MA plotCauseFix
Composition biasLoess shifts off y=0 systematicallyFew high-signal peaks dominate read counts; small fold changes look large or invertedTMM on background 10 kb bins (csaw / DiffBind background=TRUE); NOT reads-in-peaks
Trended bias (intensity-dependent)Loess curve sweeps from + to - across abundanceLibrary-prep efficiency varies with fragment abundanceNon-linear loess offsets (csaw normOffsets); use cautiously — can over-normalize biology
Global shift (treatment changes most peaks)Loess entirely shifted off y=0; mean log2FC ≠ 0Drug/perturbation changes the genome-wide level of binding (HDACi, BETi, EZH2i, target KD)Spike-in scaling (ChIP-Rx); no algorithmic fix works

Why this matters: Most published ChIP-seq differential analyses default to RLE/TMM on reads-in-peaks, which assumes "most peaks are unchanged." For HDAC inhibitors, BET inhibitors, EZH2 inhibitors, or any large dosage / target-knockdown experiment, this assumption is violated. The algorithm forces the median log2FC to zero, hides the real effect, and amplifies noise around the new "zero." The result can have the wrong sign.

Diagnostic: Plot MA loess on differential results. A loess curve that sweeps abundance indicates trended bias. A uniformly shifted loess indicates a global shift. Both patterns together indicate normalization is failing in two ways simultaneously.

Algorithmic Taxonomy

ToolTreatsStatistical modelStrengthFails when
DiffBind 3.20+Consensus peaks summit ± 200 bp (default)DESeq2 or edgeR backendMature; integrated counting/normalization; spike-in support; blacklist filter onDefault summits=200 recenters peaks (wrong for broad marks); DBA_NORM_LIB is conservative but misses global shifts unless background=TRUE
DESeq2 (direct)Predefined peaksNB GLMFamiliar; transparentRLE on reads-in-peaks fails for global shifts
edgeR (direct)Predefined peaksNB GLM with TMM; quasi-likelihood F-testCleaner small-sample inference; QL-F controls type-I errorTMM on peak counts unstable if peaks globally shifting
csaw (Lun & Smyth 2016)Sliding windows (typically 150 bp width, 50 bp shift)edgeR QL-FGold-standard for global shifts; bin-TMM composition bias; loess for trended biasesSlower; requires BAMs not count matrix; window-merge step adds complexity
NormR (Helmuth 2016)Genomic binsBinomial mixture (background + enriched)Control-aware; identifies enrichment/depletion/background simultaneouslyBin-level not peak-level; older codebase; less integration with downstream tools
MAnorm2 (Tu 2021)PeaksHierarchical model with mean-variance trendDesigned for cross-condition with replicatesLess widely adopted; sparse maintenance
SpikChIP (Blanco 2021)PeaksSpike-in-awareMulti-sample spike-in comparisonNiche; specific spike-in protocol assumed
SpikeFlow (2024)End-to-endSnakemake pipeline: MACS2/EPIC2/EDD peaks + DESeq2 with spike-in size factorsAutomated; multiple normalization options (RPM/RRPM/Rx-Input/downsampling)Inherits experimental-design errors upstream
ChIPComp (Chen 2015)PeaksJoint Poisson with inputControl-awareOlder; less maintained
ChIPseqSpikeInFree (Jin 2020)Peaks (post-hoc)Distribution-shape inferenceDetects global shift WITHOUT spike-inPost-hoc heuristic only; not definitive; sanity check

Decision Tree: Choosing Normalization

ScenarioRecommendedTool / parameter
Standard TF ChIP, local changes expected, balanced gain/lossRLE on reads-in-peaksDESeq2 default; DiffBind DBA_NORM_RLE
Histone marks, broad domains, local changesTMM on background 10 kb binscsaw normFactors; DiffBind background=TRUE
HDAC / BET / EZH2 inhibitor (global change)Spike-in scalingDiffBind spikein=TRUE; SpikeFlow; manual sizeFactors() from spike reads
Dosage titration, cell-cycle synchronizationSpike-in scalingSame
ChIP target knockdown / degronSpike-in or matched-input control subtractionSpike-in preferred; bamCompare log2 ratio next
CUT&RUN/CUT&Tag standardE. coli spike-in (carryover)DiffBind custom scaling; see cut-and-run-tag
No spike-in available; suspect global shiftChIPseqSpikeInFreePost-hoc distribution-shape inference
Suspected trended (abundance-dependent) biasNon-linear loesscsaw normOffsets
Genome-wide enrichment/depletion analysisNormRBinomial mixture
Many conditions, large peak setedgeR QL-F or DiffBind+edgeRBetter type-I control than DESeq2 Wald

Spike-In Scaling Factor Calculation

ChIP-Rx (Orlando 2014) uses Drosophila chromatin spike-in added at fixed concentration BEFORE IP. Egan 2016 adds a fixed MASS of Drosophila S2 chromatin (matched to target chromatin by the ~27:1 human:fly genome-size ratio), not a fixed cell count.

RRPM (reference-adjusted reads per million):

scale_factor_i = min(N_spike_sample) / N_spike_sample_i

Apply to read counts pre-test, OR pass as sizeFactors() to DESeq2 / normFactors() to edgeR / a numeric library-size vector to DiffBind's dba.normalize(..., library=...):

r
spike_in_reads <- c(120000, 145000, 110000, 95000)  # per-sample Drosophila read count
sample_names <- c('ctrl_1', 'ctrl_2', 'treat_1', 'treat_2')
scale_factors <- min(spike_in_reads) / spike_in_reads
names(scale_factors) <- sample_names

# DESeq2 with spike-in size factors
sizeFactors(dds) <- 1 / scale_factors  # DESeq2 expects inverse convention

# Or directly via DiffBind 3.x (spikein = TRUE forces library = DBA_LIBSIZE_BACKGROUND internally)
dba_obj <- dba.normalize(dba_obj, spikein = TRUE,
                          normalize = DBA_NORM_LIB)

Rx-Input variant (Fursova 2019): additionally scale by input spike-in to correct IP efficiency variation.

Internal-control sanity check: After spike-in normalization, blacklist regions and constitutive housekeeping sites (U6 promoter, rRNA processing factors that are stable) should show no signal change. If they do, the normalization is broken — common causes:

  • Spike-in scaling applied to peak counts instead of read counts
  • Spike-in reads not deduplicated before scaling
  • Spike-in genome not filtered for high-mapq before scaling
  • Spike-in saturated (always 100k+ reads); check titration linearity

Per the Patel et al 2024 Nat Biotechnol survey, improper spike-in normalization is common: of 53 datasets examined, only 27 (~51%) had adequate matched input controls across conditions.

DiffBind Workflow (BAMs + Peaks)

Goal: Run DiffBind from a sample sheet to consensus peaks, normalized counts, and tested differential binding.

Approach: Build sample sheet, count reads in consensus peaks (summit-centered for narrow marks, full peak width for broad), choose normalization based on the three-problem framework above, then test with DESeq2 or edgeR backend.

r
library(DiffBind)

# Sample sheet: SampleID, Condition, Replicate, bamReads, bamControl, Peaks, PeakCaller
dba_obj <- dba(sampleSheet = 'samples.csv')

# Counting: summits=250 (narrow); FALSE for broad histones (use full peak width)
dba_obj <- dba.count(dba_obj, summits = 250, minOverlap = 2, bParallel = TRUE)

# Normalization — choose per the three-problem framework
dba_obj <- dba.normalize(dba_obj,                      # default: full library size
                          method = DBA_DESEQ2,
                          normalize = DBA_NORM_LIB,
                          library = DBA_LIBSIZE_FULL)

# Background bin TMM for composition bias / broad marks
# dba_obj <- dba.normalize(dba_obj, background = TRUE)

# Spike-in scaling for global shifts
# dba_obj <- dba.normalize(dba_obj, spikein = TRUE)

dba_obj <- dba.contrast(dba_obj, design = '~ Condition')
dba_obj <- dba.analyze(dba_obj, method = DBA_DESEQ2)

# Always inspect what was actually applied
dba.normalize(dba_obj, bRetrieve = TRUE)

DiffBind 3.20+ defaults (verified via bRetrieve):

  • summits = 200 — narrow recentering (set FALSE for broad histones)
  • library = DBA_LIBSIZE_FULL — full library, conservative
  • normalize = DBA_NORM_LIB — library size only, not reads-in-peaks RLE
  • Blacklist filtering on
  • background = FALSE — set TRUE for composition bias

csaw Workflow (Windows-Based)

Goal: Detect differential binding from sliding windows without committing to predefined peaks; robust to composition bias via background bin TMM.

Approach: Count reads in overlapping windows, normalize on 10 kb bins (composition bias) and/or loess (trended bias), test with edgeR QL-F, then merge significant windows into regions.

r
library(csaw)
library(edgeR)

bam_files <- c('ctrl_1.bam', 'ctrl_2.bam', 'treat_1.bam', 'treat_2.bam')
condition <- factor(c('ctrl', 'ctrl', 'treat', 'treat'))

# Window counts: 150 bp window, 50 bp spacing (sharp marks); 1-2 kb for broad
param <- readParam(minq = 30, pe = 'both', dedup = TRUE,
                    discard = import('hg38-blacklist.v2.bed'))
windows <- windowCounts(bam_files, width = 150, ext = 200, param = param)

# Composition bias via 10 kb bins (always applied for ChIP-seq)
bg_bins <- windowCounts(bam_files, bin = TRUE, width = 10000, param = param)
windows <- normFactors(bg_bins, se.out = windows)

# Optional: trended bias via non-linear loess (use cautiously)
# windows <- normOffsets(windows, se.out = TRUE)

# edgeR QL-F test
y <- asDGEList(windows)
design <- model.matrix(~condition)
y <- estimateDisp(y, design)
fit <- glmQLFit(y, design, robust = TRUE)
results <- glmQLFTest(fit, coef = 2)

# Merge significant windows within 1 kb into regions
merged <- mergeResults(windows, results$table, tol = 1000, merge.args = list(max.width = 5000))

For broad marks, increase window width to 1-2 kb and merge tolerance to 5 kb. For TFs, 150 bp window + 50 bp spacing is standard.

DESeq2 from Count Matrix

r
library(DESeq2)

counts <- read.delim('counts.tsv', row.names = 1, check.names = FALSE)
coldata <- data.frame(
    condition = factor(c('ctrl', 'ctrl', 'ctrl', 'treat', 'treat', 'treat')),
    row.names = colnames(counts)
)

dds <- DESeqDataSetFromMatrix(countData = counts, colData = coldata, design = ~ condition)

# Pre-filtering for ChIP-seq is LESS aggressive than RNA-seq (peaks already enriched)
keep <- rowSums(counts(dds)) >= 1  # remove only all-zero
dds <- dds[keep, ]
dds$condition <- relevel(dds$condition, ref = 'ctrl')

dds <- DESeq(dds)
res <- results(dds, alpha = 0.05)  # match independent-filtering optimization

# Optional: LFC shrinkage for ranking/visualization only — does NOT change padj
library(apeglm)
resLFC <- lfcShrink(dds, coef = 'condition_treat_vs_ctrl', type = 'apeglm')

For spike-in normalization, set sizeFactors(dds) from scaling factors before DESeq(dds). For background-bin TMM (composition bias) use csaw to compute size factors, then transfer.

Per-Tool Failure Modes

DiffBind -- summits=200 default destroys broad marks

Trigger: Default DiffBind 3.x call with histone broad marks (H3K27me3, H3K9me3).

Mechanism: summits=200 re-centers peaks to summit ± 200 bp, throwing away most of a 10-100 kb broad domain.

Symptom: Differential count for broad marks much lower than expected; signal concentrated at narrow centers of broad regions.

Fix: dba.count(obj, summits = FALSE, ...) for broad marks; OR use full-width consensus peaks; OR switch to csaw with 1-2 kb windows.

Show full SKILL.md (824 more words)Show less
DiffBind -- DBA_NORM_RLE reads-in-peaks default reverses global shifts

Trigger: Default (legacy DiffBind < 3.0) OR explicitly setting normalize = DBA_NORM_RLE on a global-shift experiment.

Mechanism: RLE on reads-in-peaks assumes most peaks unchanged. If 80% of peaks lose signal (e.g., EZH2 inhibitor on H3K27me3), the size factors compensate by inflating the "lost" peaks' normalized values toward control levels.

Symptom: Differential results show fewer peaks changed than visually obvious; or signs are wrong (gain reported where loss occurred).

Fix: Switch to background = TRUE (bin TMM); for definitive analysis use spikein = TRUE with ChIP-Rx.

DESeq2 -- Pre-filtering removes condition-specific peaks

Trigger: Applying RNA-seq-style filter rowSums(counts) >= 10 to ChIP-seq counts.

Mechanism: A peak present in treatment but absent in control has near-zero control counts. Aggressive filtering removes truly differential peaks.

Symptom: Significantly differential gains-of-binding peaks missing from results.

Fix: rowSums(counts) >= 1 only (remove all-zero rows); accept the loss of statistical power vs. recovering true differential peaks.

csaw -- Trended bias loess over-normalizes biology

Trigger: Applying normOffsets() (loess) when the abundance-dependent shift IS the biology.

Mechanism: Loess fits a smooth curve to the MA-plot trend; if treatment uniformly increases binding at low-signal peaks (which is biology), loess interprets it as a technical trend and removes it.

Symptom: No differential peaks detected despite obvious treatment effect.

Fix: Use bin-TMM only (composition bias); apply loess only after confirming the trend is technical (e.g., it appears in IgG-only samples).

Spike-in normalization -- Scaling factor applied to wrong layer

Trigger: Multiplying peak counts by spike-in scaling factor.

Mechanism: Spike-in factors are for read-level normalization; applied to peak counts they double-correct (peak counts already reflect mapped reads).

Symptom: Effect sizes shifted by 2-10× from expected biology; internal-control regions show artifactual signal change.

Fix: Apply spike-in via sizeFactors(dds) (DESeq2) or normFactors (edgeR) BEFORE the test; or via bamCoverage --scaleFactor for browser tracks. Never multiply peak-level counts.

IDR-passing peaks not used as differential input

Trigger: Using per-replicate MACS calls (loose -p 1e-2) as DiffBind peak input.

Mechanism: Loose ENCODE-pattern peaks include many low-confidence calls; DiffBind's minOverlap = 2 may not filter aggressively enough.

Symptom: Differential results dominated by noise at marginal peaks; high false-positive rate.

Fix: Pre-filter peak input to IDR-passing peaks (TF) or naive-overlap-passing peaks (histone) before DiffBind ingestion.

Reconciliation: When Methods Disagree

PatternLikely causeAction
DiffBind + DESeq2 directly differ wildlyDifferent normalization (DiffBind default = library size; DESeq2 default = RLE)Force same normalization; differences should shrink to <5%
csaw windows + DiffBind peaks disagreecsaw catches sub-peak local maxima or wider regions DiffBind missedInspect IGV; csaw windows-based often more sensitive to broad/diffuse changes
Spike-in scaled + non-scaled give opposite signsGlobal shift presentSpike-in is correct; non-scaled is fooled by composition bias
DiffBind run twice gives different resultsDifferent summits or minOverlap settingsVerify via dba.normalize(obj, bRetrieve=TRUE); pin parameters in script
Few replicates, large fold changes, low padjDESeq2 dispersion estimate unstable with n=2Switch to edgeR QL-F or DiffBind with edgeR backend
Different fold changes in DiffBind 3.x vs 2.xDefault normalization changedMatch settings explicitly; document version in methods

Operational rule for publication-grade: Run on ENCODE-pattern peaks (IDR or naive overlap-passing), normalize with both reads-in-peaks AND background-bin AND spike-in if available; require concordance across at least two methods. For global-shift experiments, spike-in is mandatory.

Common Errors

Error / symptomCauseSolution
Error: dba.normalize() must be called before dba.analyze()DiffBind 3.x change; not in older docsAdd dba.normalize(obj) step
DiffBind very slow on many samplesSequential countingdba.count(obj, bParallel = TRUE)
Error in DESeq() with few replicatesDispersion estimation unstableUse DESeq(dds, fitType = 'parametric', sfType = 'poscounts') or switch to edgeR
Spike-in size factors mostly NASpike-in reads not in sample sheet or wrong BAM pathVerify spike-in BAM exists; load via DiffBind spikein field
All padj = NAIndependent filtering too aggressiveLower alpha in results() to match intended threshold
Volcano plot inverted (down peaks on right)Contrast direction reversedcontrast = c('condition', 'treat', 'ctrl') for positive log2FC = up in treat

References

  • Stark R & Brown G 2011 Bioconductor (DiffBind)
  • Lun ATL & Smyth GK 2016 Nucleic Acids Res 44:e45 (csaw)
  • Love MI et al 2014 Genome Biol 15:550 (DESeq2)
  • Robinson MD et al 2010 Bioinformatics 26:139 (edgeR; TMM)
  • Helmuth J et al 2016 bioRxiv (NormR)
  • Tu S et al 2021 Genome Res 31:131 (MAnorm2)
  • Orlando DA et al 2014 Cell Rep 9:1163 (ChIP-Rx framework)
  • Egan B et al 2016 PLoS One 11:e0166438 (ChIP-Rx protocol)
  • Fursova NA et al 2019 Mol Cell 74:1020 (Rx-Input scaling)
  • Jin H et al 2020 Bioinformatics 36:1270 (ChIPseqSpikeInFree)
  • Blanco E et al 2021 NAR Genom Bioinform 3:lqab064 (SpikChIP)
  • Patel L, Cao Y, Mendenhall EM, Benner C, Goren A 2024 Nat Biotechnol 42:1343 (review of spike-in normalization failure modes; PMC12266361)
  • Bressan D et al 2024 NAR Genom Bioinform 6:lqae118 (SpikeFlow Snakemake pipeline)
  • chip-seq/peak-calling - Upstream peak calling for DiffBind input
  • chip-seq/chipseq-qc - Replicate concordance required before differential
  • chip-seq/spike-in-normalization - Detailed spike-in workflow and scaling factor calculation
  • chip-seq/cut-and-run-tag - CUT&RUN/CUT&Tag uses E. coli spike-in (different from Drosophila ChIP-Rx)
  • chip-seq/peak-annotation - Annotate differential peaks to genes/cCREs
  • differential-expression/deseq2-basics - DESeq2 fundamentals
  • differential-expression/edger-basics - edgeR quasi-likelihood framework
  • atac-seq/differential-accessibility - Parallel ATAC differential workflow

© GPTomics, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 5 other files in chip-seq/differential-binding of GPTomics/bioSkills.

  • SKILL.md
  • examples/csaw_windows_diff.R
  • examples/deseq2_from_counts.R
  • examples/diffbind_analysis.R
  • examples/pydeseq2_from_counts.py
  • usage-guide.md

Open the folder on GitHubat commit d91ed3d

Used in 2 other repositories

We found 2 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 2 other GitHub owners. This page covers the copy in GPTomics/bioSkills, which our catalogue first saw on October 7, 2026.

Compare with similar skills

Bio Chipseq Differential Binding next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Bio Chipseq Differential Binding compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Bio Chipseq Differential Binding this skillGPTomics/bioSkills1.2k2 repos~5.1kAutomated safety check: PassMIT
Tooluniverse Metabolomics Analysiswu-yc/LabClaw1.1k2 repos~5.9kAutomated safety check: PassNone
Bio Geo Datamajiayu000/claude-skill-registry6663 repos~4.4kAutomated safety check: PassMIT
Gene Protein Expression Matrix Normalizationaipoch/medical-research-skills2k—~1.5kAutomated safety check: PassMIT
Bio Spatial Transcriptomics Spatial Preprocessingmajiayu000/claude-skill-registry6662 repos~1.3kAutomated safety check: PassMIT
Bio Crispr Screens Batch Correctionmajiayu000/claude-skill-registry6661 repos~2.3kAutomated safety check: PassMIT

Similar skills

  • Analyze metabolomics data including metabolite identification, quantification, pathway analysis, and metabolic flux.

    1.1k GitHub starsUsed in 2 repos~5.9k tokens
    Research & ScienceAuto-check passed
  • Bio Geo Data

    majiayu000/claude-skill-registry

    Query and download from NCBI Gene Expression Omnibus (GEO) and EMBL-EBI's BioStudies/ArrayExpress mirror.

    666 GitHub starsUsed in 3 repos~4.4k tokens
    Research & ScienceAuto-check passed
  • Gene Protein Expression Matrix Normalization

    aipoch/medical-research-skills

    A skill your agent uses when normalizing bulk gene or protein expression matrices with log2 transform, z-score standardization, or min-max scaling before downstream visualization or exploratory…

    2k GitHub stars~1.5k tokensUpdated 21 days ago
    Research & ScienceAuto-check passed
  • Quality control, filtering, normalization, and feature selection for spatial transcriptomics data.

    666 GitHub starsUsed in 2 repos~1.3k tokens
    Research & ScienceAuto-check passed
  • Bio Crispr Screens Batch Correction

    majiayu000/claude-skill-registry

    Batch effect correction for CRISPR screens. An agent skill from majiayu000/claude-skill-registry.

    666 GitHub starsUsed in 1 repo~2.3k tokens
    Research & ScienceAuto-check passed
  • Production-ready RNA-seq differential expression analysis using PyDESeq2.

    1.1k GitHub starsUsed in 2 repos~4.5k tokens
    Research & ScienceAuto-check passed

More from GPTomics/bioSkills

All 552 skills in this repo
  • Bio Alignment Io

    GPTomics/bioSkills

    Read, write, and convert multiple sequence alignment files using Biopython Bio.AlignIO.

    1.2k GitHub starsUsed in 3 repos~4.9k tokens
    Auto-check passed
  • bioSkills Installer

    GPTomics/bioSkills

    Installs the bioSkills collection of 425 bioinformatics skills in one step, or only chosen categories, so sequencing, RNA-seq, single-cell and variant tasks get specialized help.

    1.2k GitHub starsUsed in 1 repo~789 tokens
    Auto-check passed
  • Bio Write Sequences

    GPTomics/bioSkills

    Write biological sequences to files (FASTA, FASTQ, GenBank, EMBL) using Biopython Bio.SeqIO.

    1.2k GitHub starsUsed in 3 repos~2.1k tokens
    Auto-check passed
  • Amplicon Primer Clipping

    GPTomics/bioSkills

    Soft- or hard-clips PCR primer footprints from aligned amplicon BAMs so primer bases stop masquerading as confirmed reference sequence.

    1.2k GitHub starsUsed in 2 repos~2.2k tokens
    Auto-check passed
  • Bio Alignment Indexing

    GPTomics/bioSkills

    Create and use BAI/CSI indices for BAM/CRAM files using samtools and pysam.

    1.2k GitHub starsUsed in 2 repos~2.4k tokens
    Auto-check passed
  • Bio Alignment Sorting

    GPTomics/bioSkills

    Sort alignment files by coordinate or read name using samtools and pysam.

    1.2k GitHub starsUsed in 2 repos~2.6k tokens
    Auto-check passed

Questions about Bio Chipseq Differential Binding

What does Bio Chipseq Differential Binding do?

Identifies differentially bound ChIP-seq regions between conditions using DiffBind, csaw (sliding windows), DESeq2/edgeR/PyDESeq2 on count matrices, NormR (control-aware), or MAnorm2. Bio Chipseq Differential Binding is an agent skill from GPTomics/bioSkills. Identifies differentially bound ChIP-seq regions between conditions using DiffBind, csaw (sliding windows), DESeq2/edgeR/PyDESeq2 on count matrices, NormR (control-aware), or MAnorm2.

When should I use Bio Chipseq Differential Binding?

Bio Chipseq Differential Binding fits situations like: comparing ChIP-seq binding between experimental conditions; choosing normalization for global vs local changes; integrating spike-in data; reconciling DiffBind/DESeq2 disagreement.

How do I install Bio Chipseq Differential Binding in Claude Code?

Run `npx skills add GPTomics/bioSkills --skill bio-chipseq-differential-binding -a claude-code`. Or copy the skill folder (chip-seq/differential-binding in GPTomics/bioSkills) into .claude/skills/bio-chipseq-differential-binding in your project. Claude Code loads it when a task matches its description.

How do I install Bio Chipseq Differential Binding in Codex?

Run `npx skills add GPTomics/bioSkills --skill bio-chipseq-differential-binding -a codex`. Or copy the skill folder (chip-seq/differential-binding in GPTomics/bioSkills) into .agents/skills/bio-chipseq-differential-binding in your project. Codex loads it when a task matches its description.

Can I use Bio Chipseq Differential Binding in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add GPTomics/bioSkills --skill bio-chipseq-differential-binding -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/bio-chipseq-differential-binding, .gemini/skills/bio-chipseq-differential-binding, .github/skills/bio-chipseq-differential-binding and .opencode/skills/bio-chipseq-differential-binding in your project.

What does Bio Chipseq Differential Binding need to run?

Going by SKILL.md and its folder, Bio Chipseq Differential Binding needs R and Python for the scripts in its folder. Our summary lists: Python 3.

Does Bio Chipseq Differential Binding access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Bio Chipseq Differential Binding safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Bio Chipseq Differential Binding use?

Bio Chipseq Differential Binding is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Bio Chipseq Differential Binding use?

About 5.1k tokens (SKILL.md is roughly 21k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Bio Chipseq Differential Binding?

Skills that share tags, products or a category with Bio Chipseq Differential Binding: Tooluniverse Metabolomics Analysis (wu-yc/LabClaw, 1.1k stars), Bio Geo Data (majiayu000/claude-skill-registry, 666 stars), Gene Protein Expression Matrix Normalization (aipoch/medical-research-skills, 2k stars) and Bio Spatial Transcriptomics Spatial Preprocessing (majiayu000/claude-skill-registry, 666 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Bio Chipseq Differential Binding?

GPTomics (a GitHub organization) maintains it in GPTomics/bioSkills, which has 1,215 GitHub stars. The repository holds 552 skills in this directory. The repository was last updated on August 15, 2026.

Source: GPTomics/bioSkills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.