# RELSA Desk > Paste a laboratory-animal welfare cohort - one row per animal per time point, with readouts such > as body weight, temperature, a clinical score or a biomarker - and get RELSA (RELative Severity > Assessment) scores computed in the browser exactly as the relsa-severity-assessment agent skill's > scripts compute them, plus kernel-density severity zones with a bandwidth sweep. Then a metered > reading explains what the scores support against the skill's reporting checklist, or writes the > Python script that reproduces them with the skill's own functions. URL: https://relsa-desk.skillsafe.ai/ API: https://relsa-desk.skillsafe.ai/api.html Model: gpt-terra ยท publisher markup 1000 bps (10%) ## The free engine (in the browser, no account) - Reads CSV or TSV: an id column, a time column (time, day, days, hour, hours, timepoint or t, or a named one), optional treatment and condition labels, then one column per readout. Up to 20,000 rows (a longer table is refused, never cut). Missing values are left out of the score, never imputed. - Spreadsheet pastes: tab or semicolon tables, decimal commas, spaces around cells, a trailing delimiter and an "Animal"/"Mouse"/"Subject" id header are tidied before scoring and every change is listed; non-numeric cells in a readout column are named. A name typed into a decision field that is not a column, a baseline time not in the table or a reference group matching no row is refused with the columns or values that do exist. - The four decisions: which variables rise under worsening ("turned"); which are normalized to each animal's own baseline (a time point, a window averaged, or the first row); ordinal scores mapped onto the percent scale (healthy 100%, worst 200%); the reference set (a column=value group, or a saved reference.json). - Computes: the reference model (max reached and max delta per variable), each variable's weight (deviation from baseline over the max delta, floored at 0, rounded to 2 decimals as the R package does), the RELSA score (root mean square of the available weights; 0 = baseline, 1 = the reference set's maximum deviation), per-animal peaks and last scores, and KDE severity zones (Gaussian kernel, R's bw.nrd0 bandwidth, 512-point grid, density minima, thin-zone filter) with a sweep from 0.7 to 1.25 x bw.nrd0. - Flags: variables deviating only against their declared direction, variables neither normalized nor score-mapped yet off the percent scale, missing or zero baselines, variables appearing or disappearing along a trajectory, animals above the reference maximum, a cohort-wide or tiny reference set, bandwidth-sensitive or absent thresholds, few scores, baseline zeros in the density. - Checked against the skill's own relsa_score.py and kde_thresholds.py (numpy 2.5.3, pandas 3.0.6, scipy 1.18.1) on 1,400 random cohorts: about 230,000 compared values, scores CSV and reference JSON byte-identical; the only differences were 4 KDE thresholds at exactly symmetric density ties. - Exports: animals.csv and a copyable tab-separated animal table (one row per animal: peak and last score with their times, zones, largest weight, and an empty column for the assessor's own actual-severity call), cohort.csv (the table analysed, after tidying), relsa_scores.csv and reference.json and zones.json in the scripts' own formats, scores with zones, the skill's command lines, a Markdown summary. ## The metered lanes (input field `task`) - `interpret` - a reading of each metric, the animals the scores single out, the zones and the sweep, the skill's eight-item reporting checklist (directionality, baseline, score mapping, reference set, humane endpoint criteria, forecasting, thresholds, software), a methods draft with [AUTHOR_INPUT_NEEDED] markers, the user's claims judged against the facts, and cautions. Verdict sound / caveated / unreliable, never looser than the browser's read unless its flags are dismissed. - `script` - a Python script that reads cohort.csv with read_relsa_table, applies score_to_percent, prepare, build_reference (or ReferenceModel.from_json), relsa_scores and find_thresholds from the skill's scripts, checks every expected value with math.isclose, and runs follow-up checks (drop or flip a variable, another reference group, the bandwidth sweep, excluding baseline scores, a forecast_relsa forecast for a named animal). Every reply is reconciled on the page: every flag answered, every number found in the browser's facts or the user's notes, no mapping of scores or zones onto the EU Directive 2010/63/EU severity categories, no prediction of an animal's fate, script paths, imports and expected values checked. Only the analysis is sent, never the pasted table. RELSA is an aid to severity assessment, not a decision rule. ## Sources - Derived from the agent skill @k-dense-ai/relsa-severity-assessment (https://skillsafe.ai/skill/@k-dense-ai/relsa-severity-assessment), k-dense-ai/scientific-agent-skills by K-Dense Inc. (arXiv:2609.00065). - Talbot, S. R. et al. (2022). RELSA - a multidimensional procedure for the comparative assessment of well-being and the quantitative determination of severity in experimental procedures. Front. Vet. Sci. 9:937711. doi:10.3389/fvets.2022.937711 - Lutscher, S. et al. (2026). Refining humane endpoint detection by time-series forecasting and threshold definition using a multivariate severity score. Front. Physiol. 17:1869563. doi:10.3389/fphys.2026.1869563 - Notice: https://relsa-desk.skillsafe.ai/NOTICE.txt