# Enrich Desk > Paste the results table of a pathway or gene-set enrichment analysis and get it checked and > read. The browser reads Enrichr, gseapy (enrichr and prerank), g:Profiler, clusterProfiler > (enrichGO/enrichKEGG and gseGO/gseKEGG), DAVID, fgsea and Broad GSEA report tables as the > tool wrote them. It re-derives what can be re-derived, flags the known pitfalls and groups > redundant terms into themes by shared genes, all free and before sign-in. A metered reading > (gpt-terra) then names each theme in plain biology, answers every flag and writes a results > and a methods paragraph. Every number it writes is checked against the table. URL: https://enrich-desk.skillsafe.ai/ API: https://enrich-desk.skillsafe.ai/api.html Derived from: @k-dense-ai/pathway-enrichment (K-Dense-AI/scientific-agent-skills, MIT) - https://skillsafe.ai/skill/@k-dense-ai/pathway-enrichment ## Who it is for A researcher who has just run an enrichment analysis after a differential-expression analysis, a CRISPR screen or a clustering. They are holding the tool's results table and need to know three things: whether it can be trusted, what the biology is under forty redundant GO terms, and what to write in the paper. ## What the browser computes (free, no model) - Format detection from the header row: comma, tab, semicolon or pipe separated, R row names, quoted cells. - The one-sided hypergeometric p-value from each row's own k, K, n and N (clusterProfiler's GeneRatio and BgRatio, DAVID's counts; DAVID's EASE score uses k-1). A reported p-value that the counts do not reproduce is flagged. - Benjamini-Hochberg within each library over the rows pasted. BH over the full set of tests can only be larger, so a reported BH value below it is impossible and is flagged. Adjusted values below the raw p-value, and a column that simply copies the raw p-values, are flagged too. - Significance at the chosen cutoff on adjusted p (raw only when no adjusted column exists, which is itself flagged). - Flags: none_significant, no_adjusted, padj_is_raw, padj_below_p, padj_too_small, id_namespace, genes_not_in_list, list_small, rank_list_short (high); p_mismatch, multi_library, tiny_sets (set under 10 genes), thin_overlap (under 3 genes), list_large (over 2000), case_mismatch, fixed_background (Enrichr), background_unstated, gsea_lenient_cutoff (medium); count_mismatch, fold_mismatch, redundancy, huge_sets (over 500), gsea_zero_p (low). - Themes: significant terms grouped by leader clustering on shared genes, where a term joins a theme when its Jaccard index with the lead is at least 0.5, or it shares at least 80% of the smaller set with at least 3 genes. Terms without genes are grouped by term-name words. GSEA themes never mix up and down. - Hub genes: genes shared by the most significant terms. - Cutoff ladder: significant terms and themes at adjusted p 0.001, 0.01, 0.05 and 0.25 (and the chosen cutoff), so it is visible which themes survive a stricter threshold. - Write-up draft: a results sentence and a methods paragraph built from the table alone (tool, libraries, cutoff, background, organism, the grouping rule). Every detail the table does not state is a [bracketed placeholder], never a guess. The paid reading writes the full version. - Compare with an earlier run: pin one table as a baseline on this device, re-run the tool (custom background, mapped IDs, stricter cutoff) and paste the new table. The page lists flags resolved and new, themes kept, gone and new (matched by lead term or at least half their genes), and the change in each theme's best adjusted p. - Exports: table facts as Markdown, significant terms and themes as CSV, and the themes as a table that pastes into Word, Google Docs or Sheets. ## The paid lane: interpret Input (all strings): task = "interpret", facts (JSON-encoded output of Enrich.buildFacts), comparison, organism, background, question, optional retry_note. Output, one JSON object: lane, verdict (clear | qualified | rerun), headline, method_read, themes [{theme_ids, label, direction, representative, reading, key_genes, confidence, caveat}], set_aside [{theme_ids, reason}], pitfalls [{code, severity, finding, fix}], next_steps, results_text, methods_text (with a [bracketed placeholder] for every unstated detail), summary. Verdict rules: rerun when padj_is_raw, padj_below_p, padj_too_small, no_adjusted, id_namespace, genes_not_in_list or rank_list_short is flagged, or when list_small is flagged and every theme's representative is flagged. Qualified when any other high or medium flag stands, or nothing is significant. Clear otherwise. ## Reconciliation The page checks the reading against the facts it sent. Every theme id must appear exactly once. Each representative must be a member of its theme, and each key gene must be in the theme's genes. The reading may cite only its theme's own rows and libraries. Directions must match. Every high or medium flag must be answered by a pitfall with the same code, and the verdict must follow the rules. Every p-value, NES and overlap in the prose must be in the table. Disagreements are shown to the user. ## Limits It does not re-run enrichment and holds no gene-set database. The reading explains what a gene set usually means from general knowledge. It does not cite papers or claim a pathway is activated; enrichment is association. The bundled examples are illustrative tables whose p-values were computed exactly from their counts. They are not data from a real experiment.