RELSA Desk - notice The app's agent prompt is derived from the agent skill "relsa-severity-assessment" (@k-dense-ai/relsa-severity-assessment, skill version 1.1) and its scripts scripts/_common.py, scripts/relsa_score.py and scripts/kde_thresholds.py, in the repository k-dense-ai/scientific-agent-skills by K-Dense Inc. https://github.com/k-dense-ai/scientific-agent-skills (skills/relsa-severity-assessment) The skill's front matter declares the MIT license. No text of the skill is redistributed verbatim; the prompt was rewritten for this app. Kassis, T., Agarwal, V., He, Y., Patel, D. & Brueckner, A. M. (2026). Scientific Agent Skills: A Library of Procedural Knowledge for Research Agents. arXiv:2609.00065. https://doi.org/10.48550/arXiv.2609.00065 The in-browser analysis (relsa.js, relsakit.js) is an independent JavaScript implementation of what those scripts compute: read_relsa_table/canonicalize (pandas.read_csv type inference and NA strings), validate, score_to_percent, percent_of_baseline, build_reference, relsa_weights and relsa_scores (including the two-decimal rounding of the R package mytalbot/RELSA, reproduced with NumPy's round-half-even), the ReferenceModel JSON format, bw_nrd0 (R's bw.nrd0 with NumPy's linear percentile), density_curve (scipy.stats.gaussian_kde on R's stats::density grid), find_thresholds with the thin-zone filter, and the zones JSON. No code of the skill, NumPy, pandas, SciPy or R is included. It was checked against the skill's own scripts (run as their command-line tools, numpy 2.5.3, pandas 3.0.6, scipy 1.18.1, Python 3.12) on 1,400 randomly generated cohorts - integer, string and mixed animal ids, float and integer time axes, missing values, zero and missing baselines, animals without a baseline row, duplicate rows, score scales with healthy values other than 0, wrong-direction variables, reference groups that select nothing, dropped variables, full precision, and KDE options - comparing the scores CSV and reference JSON byte for byte, the warnings, the error messages and the zones JSON: about 230,000 compared values. The only disagreements were four KDE results where two grid points had exactly equal density by symmetry and floating-point noise decided which one is the minimum; the page flags scores within one grid step of a threshold. Deliberate differences: an empty animal id is refused with an explanation (pandas would carry it as a missing key), and an id or time column both present under two names is refused rather than silently shadowed. ARIMA forecasting (forecast_relsa.py) is not run in the browser. Example data: the "cohort" and "raw" examples use the skill's synthetic assets/example_cohort.csv (MIT); the "clp" examples use a synthetic 22-mouse cohort generated for this page. Neither is data from real animals. Methods: Talbot, S. R., Struve, B., Wassermann, L., Heider, M., Weegh, N., Knape, T., et al. (2022). RELSA - A multidimensional procedure for the comparative assessment of well-being and the quantitative determination of severity in experimental procedures. Frontiers in Veterinary Science 9, 937711. https://doi.org/10.3389/fvets.2022.937711 Lutscher, S., Goral, L., Haeger, C., Munk, A., Heider, M., Weegh, N., et al. (2026). Refining humane endpoint detection by time-series forecasting and threshold definition using a multivariate severity score. Frontiers in Physiology 17, 1869563. https://doi.org/10.3389/fphys.2026.1869563 Directive 2010/63/EU of the European Parliament and of the Council on the protection of animals used for scientific purposes. https://eur-lex.europa.eu/eli/dir/2010/63/oj