Skip to main content

Oddsky: ASASSN-21qj, infrared and optical on one time axis

oddsky

The universe is an open question.

An open observatory your AI agent can use. Point Claude Code, Codex, Cursor or a local model at real telescope data on strange stars. What comes back is an investigation you can check: every claim is tagged with how we know it, every number has a receipt you can replay, and every prediction is sealed and then graded by the sky.

Oddsky ships the observatory, not the AI. It costs nothing to run, needs no account or API key, and works with whatever agent you already have.

Live at oddsky.ai. The fastest way in is the hosted observatory:

claude mcp add --transport http oddsky https://oddsky.ai/mcp

The first time your agent uses it, your browser opens to sign in (GitHub, Google or a passkey) and choose an observer code. No key to copy.

Predictions sealed there go on the public, hash-chained Sky Ledger and are graded by the archives. Or run everything locally:

claude mcp add oddsky -- uvx --from git+https://github.com/AlanShortz/oddsky oddsky mcp
# or from a clone:
claude mcp add oddsky -- uv run --directory /path/to/oddsky oddsky mcp

Then ask: "Open Oddsky case OS-0001. Run the skeptic first, then try to break the leading hypothesis. Tag every claim honestly."

The first case: the star that glowed before it dimmed

ASASSN-21qj is a Sun-like star 1,850 light-years away. NEOWISE shows its infrared switching on between November 2017 and April 2018: W2 brightened 0.8 mag, and the excess has a colour temperature of about 1,000 K. Three years later the visible star began to flicker and fade by up to 2 magnitudes, more in blue than in red, which is what small dust grains do. The first Oddsky investigation (write-up) was done entirely through Oddsky tools: 95 logged tool calls, 17 tagged claims, 6 competing hypotheses. It also found two things no paper has reported, because they happened after the papers were written:

  • the star has been back at its pre-event brightness, and flat to 0.005 mag, since early 2025;
  • an apparent 2025 "recovery" in the I and R bands is a step change on one night, a calibration artifact in the only optical record.

It then sealed three predictions for 2027 with probabilities attached. The sky will grade them.

The optical light curve is 7,115 measurements by one amateur astronomer, Franz-Josef Hambsch (AAVSO code HMB). Oddsky credits observers by name, and the Skeptic warns that a single observer is a single point of failure.

What's in the box

The observatory 25 MCP tools: case overview, light curves, changepoints, excursions (dips and flares), Lomb-Scargle with spectral-window alias flags, microlensing fits (point lens with annual parallax, profile ranges), cross-band colour slopes, WISE colour and infrared-excess temperature, Gaia neighbours, and tools for recording claims, hypotheses and predictions. oddsky tools lists them.
Archives Gaia DR3 (context, neighbours, variability), NEOWISE 2014-2024 (quality-cut, visit-binned), AAVSO (a century of amateur photometry), TESS (SPOC/QLP), ZTF, ATLAS (whole-sky forced photometry, 2015-), ASAS-SN. Every cut is written to provenance.
The Skeptic Deterministic artifact checks: blends inside each survey's beam, saturation, single-observer data, series that start mid-event (against Gaia's baseline), colour coherence across bands, survey-rhythm aliases, unobserved onsets, TESS dips on momentum dumps and sector edges, RUWE. It is code, so it cannot be talked out of a warning.
Cases A case is a directory (cases/OS-0001/): case.yaml holds the argument, data/ the evidence, and ledger.jsonl every tool call with a digest of its result. Fork = fork. Review = pull request. oddsky replay OS-0001 re-runs the ledger.
Trials Blind (identity, coordinates and dates scrubbed; name the explanation), hindsight (data cut at a date; forecast what happens next, graded against what actually happened), and salted (real data with planted spacecraft artifacts). Answers are sha256-sealed before anyone runs.
The viewer web/: zero-build static site. The shared time axis, tagged claims with receipts, hypotheses, sealed predictions, the Skeptic report, provenance. Red-light mode for the observatory at night.

First hunts: what Oddsky found, and what it got wrong

We pointed Oddsky at the whole Gaia DR3 sky and asked for Sun-like stars that faded (hunt H-0001). 22,125 stars → 2,020 not already eclipsing binaries → 18 with deep, confirmed dips → 3 not explained by any catalogue.

  • Two new eclipsing binaries. OS-0011 (P = 2.52961 d, an Algol-type pair) and OS-0012 (P = 11.9008 d, two K dwarfs). Gaia and ZTF agree on both over an 11-year baseline. Gaia's pipeline had given them periods of 53 and 36 minutes, VSX inherited those, and nobody checked again. Small and new: a VSX submission, not a press release.
  • The invisible companion that wasn't. We first folded OS-0012 at 2.38 days, a fifth of its true period. That stacked the secondary eclipse onto the primary, so it looked as if a Sun-sized, perfectly dark object blocked 58% of the star every 2.38 days. We had written it up as a candidate opaque disk. An Oddsky referee agent was told to break it. It counted which cycles actually showed eclipses, found that only every fifth one did, pulled TESS sector 80 to confirm, and fitted an ordinary two-star model (reduced chi² 1.16). It took 30 minutes, and nothing was announced. The tool that fooled us now runs a missing-eclipse test automatically.
  • EE Cep's 2025 eclipse (OS-0003) was 1.44 ± 0.03 mag deep in V, twice 2014's depth (73% of the light blocked against 48%), measured by eight independent AAVSO observers. The referee corrected five overstatements, including the novelty claim: professional-led AAVSO campaigns observed it and plan to publish. Ours is an early independent measurement, labelled as such.
  • NSV 1302 (OS-0010): a "suspected variable" since the photographic era, characterised as an irregular young-star dipper in Per OB2.
  • The whole infrared sky, then a star that vanished (hunt H-0002). We read all 146.6 billion NEOWISE detections (2014-2024) for 164.7 million stars (Galactic latitude ≥ 10°) on Google Cloud in under two hours, for a few dollars. The question was which Sun-like stars suddenly grew hot dust, as ASASSN-21qj did. The pipeline recovered ASASSN-21qj blind at 46σ. After Skeptic and referee vetting, two of the 314 flags survive. In OS-0014, a G dwarf 420 pc away vanished for ~95 days in 2017, more than 99% of its light blocked at the deepest, nearly grey across four optical filters. ASAS-SN, SkyMapper and NEOWISE saw it independently, and comparison stars stayed steady. Afterwards a warm infrared glow appeared, and it was still there in 2024. As far as SIMBAD, VSX, the alert streams and the literature show, nobody has reported it. In OS-0013, a K dwarf grew ~1000 K dust between two visits in 2018.
  • Hunt H-0004, stars that go dark (hunts/H-0004): the 2,356 WISE-selected R CrB candidates of Tisserand+2020, re-examined in 2018-2026 ZTF and ATLAS data for their first recorded decline. The classifier was calibrated on real R CrB stars first (14 of 14 that declined, 0 of 12 that never do). In the north every star that fades like an R CrB star and is bright enough for ZTF was already in a catalogue, which is a result. What nobody had reported: OS-0015, a dust-shrouded star near a star-forming region that goes dark for two to three weeks every 385.7 days, four times in four years, deeper in blue, with no secondary eclipse: a translucent dust structure on a one-year orbit. Periodogram-based classifiers never saw it because each eclipse lasts 4% of the orbit. The referee found a fourth eclipse we had missed and removed our "red giant" framing before it went anywhere. ATLAS then showed the same eclipses on the same ephemeris, including a 2023 one ZTF had missed, so the case stands at "reproduced". Two predictions are sealed for 2027-2028. The southern half of the candidate list is still queued on the ATLAS server.
  • One night in the infrared (hunt H-0007): which of 79,191 bright stars were dramatically brighter or fainter on just one of NEOWISE's day-long visits, equally at 3.4 and 4.6 µm? Blind, the search found OS-0014, a dozen dwarf novae in outburst and two microlensing events Gaia had already caught. New: OS-0016, a red giant 3 kpc away toward the Galactic anticentre that brightened sevenfold for a few weeks in 2017. NEOWISE and ATLAS saw it on the same night. It is a gravitational microlensing event: a foreground star, probably a faint M dwarf, passed almost exactly in front of it. Two referees checked it. The second cut our parallax claim down: the light curve is lopsided as parallax predicts, but the lens mass is not measured. Gaia DR4 (December 2026) scanned the star three times during the event, and a sealed prediction says what it will show. A second pass over fainter stars found another: OS-0017, a halo giant more than 6 kpc away that brightened at least 2.4 times in March 2020, seen by NEOWISE, ATLAS and ZTF.
  • The lensing sky (hunt H-0008): the same question for every star in the sky, the Galactic plane included. The search read 106.7 billion NEOWISE detections of 195 million stars on Google Cloud in about three hours. Without being told where to look, it recovered 64 microlensing events that KMTNet, OGLE, Gaia and ZTF had already found. Our first draft claimed four new events; the referee found three of them in an online-only ZTF table and on TNS. Of the two that survived, ATLAS caught one whole: OS-0018, a reddened giant beyond 5 kpc that brightened 5.4 times on 2022 Sep 19 over about four months, a textbook microlensing event that nobody seems to have reported. The other, OS-0019, brightened once by 60% but no simple lens fits it, so it stays a candidate. Fitting these events by hand became a tool any agent can call: lens_fit.
  • The long lenses (hunt H-0009): the lensing-sky search again, without its blind spots (saturated peaks, multi-visit events, stars beside bright neighbours or blended with others). It finds 118 known microlensing events instead of 64; most of the gain comes from stars the first pass never searched. Its 122 strong unexplained brightenings, where a black-hole lens would hide, are not yet followed up.
  • One hunt parked: new R CrB stars (H-0003). Gaia DR3 has already been mined by the experts, and our candidates were a VY Scl binary, a Mira, an S star and a T Tauri star.

OS-0014 is the first result here that a professional might call a discovery, pending their check, spectra and Gaia DR4. The pipeline also caught our own false positive before the internet did. Feynman would have liked that part best.

Strange Stars Trial 001

Ten packets of real archive data with names, coordinates and dates removed, including one ordinary star and one quiet star with planted spacecraft artifacts. Two are hindsight packets, cut at a date. The answers were sealed (sha256 4608af90…, committed in eac42b3) before any investigator ran, then revealed and verified (oddsky trial verify trials/strange-stars-001). Two agents used the same tools and the same prompt:

top-1 Brier (lower is better) mean p(truth) hindsight forecasts
claude-opus-5.5 10/10 0.10 0.77 7 of 8 true (the miss was rated 8%); Brier 0.09
claude-haiku-5.5 5/10 0.71 0.38 2 of 3 resolved true; 3 still pending
claude-fable-5.2 (run 2026-11-10, after the reveal) 9/10 0.20 0.75 5 of 8 true; Brier 0.11
uniform guessing 0.9/10 0.91 0.09

What's worth knowing, including the parts that don't flatter anyone:

  • Opus recognised 8 of the 10 packets (self-reported, tagged as speculation): R CrB, SS Cyg, EE Cep, ASASSN-21qj and others. Blinding hides names, not physics. On the two packets it did not recognise (the ordinary star and the salted one) it went 2/2. Trial 002 (below) was built to have no famous stars.

  • EE Cep, from data cut a year before its 2025 eclipse: Opus timed the next eclipse from the previous six (period 2048 d) and registered four forecasts. All four came true, including the one it had rated at 45%. Haiku called the star a pulsator.

  • The salted packet nearly fooled Opus: artifact 0.33 against dust 0.30. Its reason is a fair criticism of us: our planted dips were smoother and longer than real momentum-dump glitches. Haiku missed them entirely and called the star normal.

  • We found a bug in our own grader. "Brightest" was the 2nd percentile of all points, so dense quiescent sampling hid real SS Cyg outbursts and two correct forecasts were graded false. v2 uses nightly medians. Because the change came after the reveal, both gradings are published in the scorecards.

  • Fable 5.2, two weeks later: same packets, prompt and tool version. It said it recognised the same eight packets and missed one: it saw that every dip in the salted packet sat on a momentum dump and then called the star normal (0.80) instead of an instrumental artifact (0.10).

Every claim, hypothesis and prediction the agents made is in trials/strange-stars-001/runs/, and every tool call in it replays.

Strange Stars Trial 002

Trial 001 could not tell skill from memory, so Trial 002 uses eight stars from Oddsky's own casebook: none famous, several catalogued, none with a paper describing what it does. Five have a scored answer (Oddsky's own, and Opus 5.5 contributed to the casebook it comes from); three are open questions where only the forecasts are graded, against held-back data. Sealed sha256 acd28697… in 00d4310.

matched the key Brier forecasts true forecast Brier
claude-haiku-5.5 2/5 0.71 2 of 7 0.25
claude-opus-5.5 5/5 0.06 8 of 10 0.23
claude-fable-5.2 5/5 0.08 13 of 15 0.17

One run each, forecasts on the same star are not independent, Fable's run was interrupted by a full disk, and two grader rules changed after the reveal. All of that, and every number above, is on the Trials page and recomputed by oddsky paper-check trials/page_claims.py.

Run it locally

git clone https://github.com/AlanShortz/oddsky && cd oddsky
uv sync --all-extras                       # Python 3.11-3.14
uv run oddsky skeptic OS-0001              # the Skeptic's report on the first case
uv run oddsky call ir_excess '{"case":"OS-0001","baseline_start":"2014-01-01","baseline_end":"2017-12-31","start":"2018-03-01","end":"2020-12-31"}'
uv run oddsky open "V838 Mon" --hook "..." # open a new case on any star and fetch its data
uv run oddsky export-web && python -m http.server -d web 8765

Blind trial over MCP: claude mcp add oddsky-trial -- uv run oddsky mcp --blind trials/strange-stars-001/packets/T03.

Seed cases

case star status
OS-0001 ASASSN-21qj: the star that glowed before it dimmed reproduced
OS-0002 KIC 8462852 (Boyajian's Star) observation
OS-0003 EE Cep: the 2025 eclipse, twice as deep reproduced
OS-0004 R CrB: the star that smokes observation
OS-0005 R Cyg: a Mira, strange to the eye and ordinary to astrophysics observation
OS-0006 SS Cyg: the prototype dwarf nova observation
OS-0007 AA Tau: the young star that went dark in 2011 observation
OS-0008/9 two quiet control stars in the TESS continuous viewing zone trial controls
OS-0010 NSV 1302: the young star nobody classified interpreted
OS-0011 a new Algol-type binary, P = 2.52961 d interpreted
OS-0012 the invisible companion that wasn't: a new K+K binary, P = 11.9008 d closed
OS-0013 an infrared excess that appeared in 2018 (K dwarf) anomaly
OS-0014 the star that vanished for three months (G dwarf, 2017) anomaly
OS-0015 a dust-shrouded star that goes dark for two to three weeks every 385.7 days reproduced

Each one is an open invitation to investigate.

Philosophy

"The first principle is that you must not fool yourself, and you are the easiest person to fool." — Richard Feynman, Cargo Cult Science (1974)

"There must be no barriers to freedom of inquiry." — J. Robert Oppenheimer (1949)

AI agents are tireless and fluent, and that makes them dangerous in science, because they produce convincing nonsense without effort. Oddsky's answer is structural rather than a matter of tone: epistemic tags, receipts, a Skeptic that is code, predictions sealed in advance, and trials with sealed answers. Read the manifesto and how Oddsky keeps itself honest.

Credits

Built by Alan Shortz, with Claude. The data come from ESA Gaia, NASA/IPAC NEOWISE, the AAVSO International Database and its observers worldwide, NASA TESS via MAST, ZTF, and ASAS-SN. MIT licensed. See CONTRIBUTING and, for the scientific defaults that are still open questions, docs/OPEN_QUESTIONS.md.

Metadata

Release files for oddsky 0.3.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for oddsky 0.3.1
File Size Uploaded Provenance Actions
oddsky-0.3.1.tar.gz 260.8 kB With provenance Details for oddsky-0.3.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for oddsky 0.3.1
File Interpreter ABI Platform Actions
oddsky-0.3.1-py3-none-any.whl Python 3 none any Details for oddsky-0.3.1-py3-none-any.whl

Total release size: 565.5 kB

Release files / oddsky-0.3.1.tar.gz

Download URL oddsky-0.3.1.tar.gz
Size 260.8 kB
Tags Source
SHA-256 checksum
How to use checksums
c8f51b268bd839f53cc98ea99df884f42bfddac9e535142dc6d28e86f638b1e1
BLAKE2b-256 checksum
How to use checksums
0f0a1506a5a0484098238924fd5aaf7afac811971ee012736370f715e583b524
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 12, 2026.

Transparency log

Release files / oddsky-0.3.1-py3-none-any.whl

Download URL oddsky-0.3.1-py3-none-any.whl
Size 304.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
91b91eb1aed240fa8e61f10cb6b0748da981d89bc2b0e0dda28edacf861c5b27
BLAKE2b-256 checksum
How to use checksums
c3e998ec90d945975e93417d17b0f5451fcd1e6a80431069a3f5c4f76d3a66ff
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 12, 2026.

Transparency log

Security for oddsky 0.3.1

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.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for oddsky-0.3.1.tar.gz

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 Nov 12, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.3.1 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page