This project has been archived by its maintainers, and is no longer receiving any updates.
gallop
Routes a product question to the method it deserves, then runs that method with checks in place.
A product data science system, packaged as agent skills. Most questions leave at intake without an analysis. The ones that stay get the method that matches how treatment was assigned, and the checks that decide whether the result is a result. What they teach is written back, so the next question starts smaller.
The map
A question enters at the left and leaves as a decision. Measurement is a foundation rather than a phase, because what ships changes the data. Theory is a ceiling rather than a report, because what you learn has to outlive the test that produced it.
Three method buckets, a floor underneath them, a memory above them, and a layer of judgment on top. Each bucket has its own question, its own output, and its own failure mode:
| Bucket | Asks | Hands back | Fails by |
|---|---|---|---|
| Description | What happened? | A hypothesis | Being mistaken for causation |
| Causation | Did this change cause that? | An effect size | An invalid comparison group |
| Prediction | What will happen? Who gets what? | A forecast, a ranking, an allocation | Breaking the moment you intervene |
Experimentation and causal inference share all three, so they are one bucket separated only by who did the randomising: you, or the world.
Read the full map · Read the intake algorithm
Install
# Claude Code
/plugin marketplace add 0trm/gallop
/plugin install gallop@gallop
# any other agent, or none: a skill is a directory of markdown
cp -r gallop/skills/reading-experiments .claude/skills/
# the package; the import name is gallop
pip install gallop-pds
The five-minute path
One command, one synthetic dataset, every check once:
python -m gallop.examples.quickstart
Fifteen seconds of runtime: an MDE, an SRM verdict, an exposure ratio, a
CUPED-adjusted effect with an always-valid interval, and the same effect shrunk
toward a seeded prior store. The full loop, from a question arriving to the
prior store changing on disk, is python examples/end-to-end/run_loop.py.
The skills
| Skill | What it decides | Reach for it when |
|---|---|---|
routing-questions |
Whether this becomes work at all, and which skill it becomes | a product, analytics, or experimentation request first arrives, when someone asks for a deep dive or a dashboard, or before opening a query editor on any question about impact, lift, or whether something worked |
defining-metrics |
A metric turned into a computation, a source of truth, and a statement of how it will be gamed | defining a north-star or guardrail metric, when two dashboards disagree on the same number, when arbitrating between conflicting metric definitions, or when a readout depends on a metric nobody has validated |
designing-experiments |
The four choices that cannot be repaired after launch, with the MDE from the prior store | planning, powering, or pre-registering an experiment, when deciding whether a question is testable at the available traffic, or when a feature is about to ship without a flag |
reading-experiments |
Whether the result is a result: SRM, exposure, the sequential bound, CUPED, shrinkage | analysing or reviewing A/B test results, when a test looks like a winner, when someone reports a lift, or when deciding whether to ship on an experiment readout |
choosing-causal-designs |
The method that matches how assignment happened, and the exit that says there is no comparison group | measuring the impact of something already rolled out, a launch, a migration, a pricing change, or a campaign that reached everyone at once |
automating-decisions |
Whether a repeated decision belongs to a model, validated out of time, and the holdout that measures its impact | someone asks for a churn, propensity, LTV, scoring, forecasting, uplift, recommendation or allocation model, when a model's offline accuracy is offered as evidence that something worked, or when deciding who gets an offer, a discount or an intervention |
writing-readouts |
The decision rule first, the result last; the belief filed where the next question starts | a test finishes, when documenting a shipped or killed decision, when writing up a null result or a rollback, or when a question needs an entry someone can find in a year |
What this is not
Not an experimentation platform. It does not assign traffic, hold flags, or replace your warehouse. It assumes those exist and writes the part that decides whether the number they produced is true.
More
The site renders the skills and the two arguments: the map · the intake · the theory layer · install
Licence
MIT, see LICENSE.
Metadata
Release files for gallop-pds 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| gallop_pds-0.2.0.tar.gz | 32.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| gallop_pds-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 60.1 kB
Release files / gallop_pds-0.2.0.tar.gz
| Download URL | gallop_pds-0.2.0.tar.gz |
|---|---|
| Size | 32.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b63230add38b539c0803b5f5943172f631a715d27ac70db41530a972ce185dc0
|
|
BLAKE2b-256 checksum How to use checksums |
300573487f2f8dbac7a096be28cef7502da5308e5a68ff586803ec22a6ea8bed
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 4, 2026.
Transparency logRelease files / gallop_pds-0.2.0-py3-none-any.whl
| Download URL | gallop_pds-0.2.0-py3-none-any.whl |
|---|---|
| Size | 28.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
42f3379aa26dbc3aad2ae633ac5ed0650a590b70029c6c1504e9cdd9cdaf4c9f
|
|
BLAKE2b-256 checksum How to use checksums |
f88c1c22b57dc745a26f7ba6670be6c265bdb14ec6d1ad4be1d821eb4398bf36
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 4, 2026.
Transparency log