Find the behavior that predicts conversion. Then prove it.
Six free agent skills for lifecycle teams: find your leading indicator, target it, and test it with a real holdout.
- MIT licensed
- Python standard library
- 136 passing tests
$ npx skills add sendlyr/skills
✓ 6 skills installed
> What should we track for our 7-day trial?
Primary signal goal_set ≥1 in 3 days
Converts if hit 36.4% if missed 3.2%
Lift +33.2pp [+30.8, +35.5]
Holdout check replicated
Predictive, not causal. Test it with a holdout.
Six skills, one honest loop.
Each skill is a plain-English playbook for your agent, plus one small Python script. Run them in order.
-
01finding-leading-indicators
Which early behavior predicts the outcome?
Scores every behavior by lift × coverage, with leakage, maturity and out-of-time checks.
score_signals.py -
02designing-lifecycle-states
Who needs which single ask?
Builds a small state model, then flags unreachable states, duplicate asks and distinctions that don’t matter.
state_audit.py -
03designing-state-journeys
When to send, and when to stop.
Caps, spacing and state checks enforced at send time, plus an audit of where your sends went.
audit_sends.py -
04grounding-lifecycle-emails
AI-written emails that stay true.
The model writes structured copy; rules catch false claims and guessed names before a person approves.
claim_check.py -
05designing-holdout-experiments
Seal the question before the answer.
Sample size from a minimum worthwhile effect, deterministic assignment, and a sealed plan.
holdout.py -
06writing-decision-readouts
Read it out honestly.
Delivery is checked first, then one evidence class. The readout is allowed to say no.
readout.py
Then the loop closes. The readout’s decision becomes the next sealed hypothesis, or a stop.
Our experiments showed nothing. Here is why.
We ran this with eReflect’s Typesy in 2026. These are the real numbers, published with permission.
“Neither experiment failed to show an effect. Neither was ever in a condition to measure one.”
Targeting
73% of emails went to people already past the key step.623 of 848 Typesy Homeschool sends reached households past the key step. The stuck ones converted at 4%.
Delivery
Nobody measured whether the treatment arm was treated.Only 80% of eligible treatment households got an email. The readouts counted sends, never reach.
Causation
We moved the behavior. Conversion did not move.Typesy VIP: the indicator rose 11.6 points; conversion moved 0.1, against a 77% baseline.
Every script has to find the planted answer.
The repo ships Practica, a synthetic trial app with traps built in. The tests fail if a script misses one.
-
The real cliff
Users who never set a goal almost never pay.
Ranked first: 36.4% converted after setting a goal, 3.2% without, and it replicated.
score_signals.py -
A confounded decoy
Motivated users open more email.
Email opens rank low. They track motivation, not a step that drives paying.
score_signals.py -
A leak
Billing pages get viewed after paying.
Counted only before the outcome, the “perfect” signal turns rare and weak.
score_signals.py -
The wrong actor
The system, not the learner, sends streak reminders.
Flagged not actionable. An email can only ask its reader to act.
score_signals.py -
A flawed state model
A legacy model with five planted problems.
All five found, including a state no user can ever reach.
state_audit.py -
A broken experiment
An outage, cap drift and control contamination.
Refused to learn: treatment reach was 51.5% against a 90% gate.
readout.py
One line in the agent you already use.
CSV in, report out. Python 3.11 or newer, no other installs, and raw rows never leave your machine.
-
1
Install
Claude Code
/plugin marketplace add sendlyr/skills /plugin install sendlyr@sendlyrCodex, Cursor, Gemini CLI and others
npx skills add sendlyr/skillsOr copy any folder under
skills/into your agent’s skills directory. Each one is self-contained. -
2
Run it on the bundled example
Terminal, from the repo root
python3 skills/finding-leading-indicators/scripts/score_signals.py \ --accounts examples/practica/observational/accounts.csv \ --events examples/practica/observational/events.csv \ --outcome-window-days 14 --decision-window-days 7 \ --email-actor learner --out /tmp/signals -
3
Or just ask your agent
Use finding-leading-indicators on examples/practica and tell me what to track.
Want us to run it with your data?
The Signal Validation Pilot takes one candidate behavior through analysis, a holdout and a readout, with your team.