| name | pkpd-translation |
| description | Turn in vitro potency and animal pharmacokinetics into a defensible human dose projection — the arithmetic that decides whether a compound can reach its target concentration safely. Use this skill for non-compartmental analysis of a concentration-time profile (AUC, Cmax, terminal half-life, clearance, volume of distribution), one- and two-compartment simulation of a dosing regimen, interspecies allometric scaling, human-equivalent dose conversion by body surface area, and the exposure margin between a projected therapeutic concentration and a toxicology no-effect level. Also trigger on non-compartmental analysis, AUC, clearance, volume of distribution, allometric scaling, human equivalent dose, first-in-human, NOAEL, therapeutic index, or exposure margin. |
| license | MIT |
| allowed-tools | Read Write Edit Bash |
| compatibility | Requires Python 3.10+ only. Every calculation is closed-form or a fixed-step numerical integration implemented in the standard library, so there is no install, no network access, and no API key. Results are planning arithmetic, not a regulatory submission. |
| metadata | {"version":"1.0","skill-author":"K-Dense Inc.","openclaw":{"emoji":"📈","homepage":"https://www.fda.gov/media/72309/download"},"hermes":{"category":"research"}} |
PK/PD Translation
The arithmetic between a number on a plate and a number on a label. It decides whether a compound
can reach its target concentration at a dose people can tolerate — and it is where a surprising
number of programmes discover, late, that it cannot.
No installation, no network, no key. Every calculation here is closed-form or a fixed-step
numerical integration in the standard library.
Reference: FDA, Estimating the Maximum Safe Starting Dose in Initial Clinical Trials for
Therapeutics in Adult Healthy Volunteers (2005) — the Km factors are its Table 1.
Read references/nca-and-parameters.md before quoting a PK
parameter, references/interspecies-scaling.md before
converting a dose between species, and
references/translating-potency-to-dose.md before
turning an IC50 into a dose — that one is judgement, not syntax.
The four scripts
| Script | Answers |
|---|
nca.py | What are this profile's clearance, volume, and half-life? |
pk_compartmental.py | What does this regimen look like at steady state? |
allometry.py | What is the human equivalent of this animal dose? |
exposure_margin.py | Does the projected exposure cover the target, and is it safe? |
Free drug, or the answer is wrong by 1/fu
This is the one to get right. Only unbound drug engages the target. Comparing a total plasma
concentration against a free-drug IC50 is the most common translation error, and at 99% protein
binding it is a hundredfold error in the dangerous direction:
C_free = C_total x fu 1000 nM total at fu = 0.01 -> 10 nM free
Against a 100 nM IC50 that is tenfold under-coverage, not the tenfold coverage the total number
suggests. exposure_margin.py coverage takes --fu and reports both.
A related trap: 50% inhibition is rarely enough. Occupancy is C/(C+Ki), so 90% needs nine times
Ki and 95% needs nineteen. Ask what fraction the biology requires, and for how long.
Non-compartmental analysis
python skills/pkpd-translation/scripts/nca.py --times 0.25,0.5,1,2,4,6,8,12,18,24,36,48 \
--conc 9.75,9.51,9.05,8.19,6.70,5.49,4.49,3.01,1.65,0.91,0.27,0.08 --dose 100 --route iv