Updated 2026-10-08

System Overview

KALPOLY — what is actually running, 8 October 2026

Kalshi sells contracts on yes/no questions: will it rain in Miami tomorrow? will Bitcoin finish this hour above $X? A contract pays $1 if the answer is yes and $0 if it is no, so the price is the market's guess at the odds. 75¢ means "about a 75% chance."

KALPOLY is a set of small programs on this PC (e7) that watch those markets and, in a few narrow cases, place real orders on Ed's Kalshi account. Everything on this page was checked against the code, settings, the 30-minute job, Windows Task Scheduler and the running programs on 8 October 2026 — not copied from the old version of this page.

Live: Crypto maker, $140 Live: Weather lag, $60, 2°F Live: Rain incentive, $140, 80¢+, 3 days Armed but idle: Temperature maker, $100 Score only: Forecast scorecard Off: crypto taker, forecast booking, paper sleeves
Kalshi cash (12:13 PM ET)
$322.76
Crypto maker graded fills
537 / 537
Crypto maker avg per contract
+2.6¢
Kalshi "Rewards (Oct)"
$0.00
Master on/off switch: live\enabled.flag is present (live trading allowed). 30-minute job runs 8:08 AM to about 10:38 PM ET. Dashboard: https://kalpoly.seamansys.com (local port 8300); this page is its "About" button.

At a glance

Real money, pretend, and off

PieceStatusMoney limitOne-line description
Crypto makerLIVE$140, Kalshi pot 2 In the last 15 minutes of an hourly Bitcoin/Ethereum market, when the answer is already all but decided, it leaves a buy order slightly under the price and waits for someone to sell to it.
Weather lagLIVE$60 own cap (pot split 11 Oct), Kalshi pot 0 Buys a temperature or rain contract only after the weather station shows it has already happened, with a 2°F (or 0.05 in rain) safety margin.
Rain incentive (lip_maker)LIVE$140 own cap (pot split 11 Oct), Kalshi pot 0 Leaves buy orders on the strong favourite (80–90¢) in rain markets that Kalshi pays a bonus to support, 20 contracts each, markets closing within 3 days. Since 11 Oct it only posts when the rain forecast and the 30-year climate for that date agree with the side.
Temperature maker (maker)ARMED, IDLE$100, Kalshi pot 0 Still runs every 30 minutes, but has not posted since 5 September. Same 2°F rule, 10 contracts, 3¢ under the favourite.
Crypto takerKILLED— Buying at the asking price was shut down on 14 September. Only the read-only price recorder (the "tape") still runs.
ForecastSCORE ONLY$75 scaffold, disarmed Paper betting closed 7 October. A once-a-day scorecard grades the forecast against Kalshi's own prices and books nothing. The $75 live program exists but has no on-switch.
Paper sleevesOFF— All pretend strategy sleeves retired (A1/B1/C3/W2 removed 5 October, the rest 6 October).
Venue lag, Thesis AGONE— Retired. No scheduled task, not in the 30-minute job. Do not revive.
"Maker" means the bot leaves a buy order and waits for someone else to sell into it, instead of paying the asking price. Every live order is "post-only": Kalshi itself rejects it if it would pay the asking price. That keeps fees at a quarter of the normal rate.

What runs, and how often

Four watchers (every 15 seconds)

These are programs that stay running all the time. A Windows task checks every 5 minutes and restarts one only if it has stopped.

WatcherPlaces orders?What it doesRunning now
crypto_lagNo (tape only) Records Coinbase's Bitcoin/Ethereum price next to every nearby Kalshi hourly contract, every 15 seconds, into logs\crypto_lag.jsonl. The crypto maker reads this to judge how volatile the market is. Yes, PID 25752, since 5 Oct. Task \KALPOLY\Crypto_Lag.
crypto_makerYes — live The crypto maker described below. Yes, PID 4124, since 6 Oct. Task \KALPOLY\Crypto_Maker.
weather_lagYes — live Refreshes the station readings (highs, lows, rain so far today) and runs the weather-lag check. Sleeps 11 PM to 8 AM ET. Yes, PID 33384, restarted 8 Oct 12:15 PM ET after the fix. Task \KALPOLY\Weather_Lag.
crypto_venueNo (tape only) Records Kalshi vs Polymarket vs Coinbase crypto prices into logs\crypto_venue.jsonl. Nothing trades on it. Yes, PID 34056, since 6 Oct 5:16 PM. Its restart task \KALPOLY\Crypto_Venue is Disabled, so it will not come back after a reboot.

The 30-minute job (run_scan.cmd)

Task \KALPOLY\Weather_Scan runs it every 30 minutes from 8:08 AM ET for 15 hours (last start about 10:38 PM). If one is still running when the next is due, the new one is skipped. On 8 October each run took about 3½ to 5½ minutes, well inside the 30.

weather-lag
filter
→
exit
check
→
temperature
maker
→
book maker
fills
→
rain
incentive
→
settle
→
dashboard
pages
StepStateWhat it does
live_trading.filterON30-minute backup for weather lag (the 15-second watcher is the main path). Can place real orders.
live_trading.exitONIf a newer station reading contradicts why a weather-lag bet was made, it sells the position. Never sells just because the price moved. Can place real orders.
live_trading.makerON (idle)Temperature maker. Real orders, but has not posted since 5 Sep.
live_trading.maker_bookONCopies maker fills into the live ledger so settle and the reports can see them.
live_trading.lip_makerONRain incentive bot. Real orders.
live_trading.forecast_makerREM'd (off)$75 forecast pilot. Also needs live\forecast_maker.enabled.flag, which does not exist.
weather.runREM'd (off)Old forecast paper cycle (plus GDP/CPI pages). Off since 7 Oct afternoon.
closebook, makerpaper, crypto_lag snapshot, crypto_edge_report, lip_shadow, venue_lag, crypto_venue, paper_sleeves run_batchREM'd (off)Old notebooks and tapes removed on 6 Oct to stop the scan running past 30 minutes. The crypto edge table now has its own 7 AM task.
live_trading.settleONCloses finished bets using Kalshi's official result.
report, maker_report, crypto_maker_report, fleet_report, balance_reportONRebuild the dashboard pages and log the Kalshi balances. Read-only.

Windows scheduled tasks

TaskWhenWhat it runs
\KALPOLY\Weather_ScanEvery 30 min, 8:08 AM ET for 15 hrun_scan.cmd (above)
\KALPOLY\Crypto_MakerEvery 5 min (keep-alive)start_crypto_maker.cmd
\KALPOLY\Crypto_LagEvery 5 min (keep-alive)start_crypto_lag.cmd
\KALPOLY\Weather_LagEvery 5 min (keep-alive)start_weather_lag.cmd
\KALPOLY\Crypto_VenueDisabledstart_crypto_venue.cmd
\KALPOLY\Crypto_EdgeDaily 7:00 AMrun_crypto_edge.cmd — rebuilds live\crypto_edge.json, the crypto maker's price table and kill checks. If this misses a day, the crypto maker stops posting (it refuses a table older than 24 hours).
\KalpolyForecastScorecardWeekdays 8:21 AMrun_forecast_scorecard.cmd — grades the forecast, books nothing.
\KALPOLY\FastAPI_KeepAliveEvery 5 min (keep-alive)start_live_trading.cmd — the dashboard web service.
\KALPOLY\DayAhead_NOEvery 15 min, 9:30 AM–11:45 PM ETrun_dayahead_no.cmd — day-before temperature NO bets (below).
\KALPOLY\Verify_CriticalHourlyscripts\verify_critical_files.ps1 — checks the key launcher and live files listed in CRITICAL_PATHS.txt still exist and restores a missing one from git. Never resets settings.

The dashboard

A small web service (uvicorn, one worker, port 8300 on this PC, PID 25244) serves the pages at https://kalpoly.seamansys.com. It only shows pages the 30-minute job has already built; the one exception is the confirm link in old-style phone alerts. It must stay at one worker: the protection against sending the same order twice only works inside one process.

Menu: Paper (Report, Account, Fillable, Forecast, Strategy sleeves — all frozen, nothing rebuilds the paper ones), Live (Report, Venue lag — stale, Status, Exchange balances, About = this page), Market Maker (temperature maker desk), Crypto Maker desk, Rain Incentive desk.

The live bots in detail

Crypto maker — $140, Kalshi pot 2

File live_trading\crypto_maker.py, runs every 15 seconds.

Weather lag — $60, Kalshi pot 0

Files live_trading\weather_lag.py (15-second watcher) and live_trading\filter.py (the rules). Places orders automatically; the phone alert comes after.

Rain incentive (lip_maker) — $140, Kalshi pot 0

File live_trading\lip_maker.py, runs in the 30-minute job. Kalshi runs a "liquidity incentive" on some rain markets: it promises a share of a prize pool to people who leave buy orders on the book. This bot joins the best buy price on the favourite side and does not use any forecast.

Day-before temperature NO (dayahead_no) — $5 a bet, up to $100, Kalshi pot 0

File live_trading\dayahead_no.py, live since 11 Oct 2026 (Ed approved at 10:52 PM ET). Runs every 15 minutes, 9:30 AM–11:45 PM ET.

Temperature maker (maker) — $100, armed but idle

File live_trading\maker.py. Still in the 30-minute job and able to place orders: same-day temperature only, 10 contracts, rests 3¢ under a 90¢+ favourite (or joins the bid if that market pays an incentive), only after the station is 2°F through the line, highs only after 2 PM local, skips a queue longer than 50. Its last post was 5 September. Its $100 is still a separate cap in code, even though the rain bot's comment says the rain cap was raised to $200 using this drawer's unused budget.

Forecast — scoring only

What is off

Paper booking closed 7 Oct (FORECAST_PAPER_BOOK = False in weather\config.py). The 30-ticket sample (2–6 Oct) finished 17 wins / 13 losses, +$121 pretend, with Phoenix +$74 and Dallas −$86 doing most of it. Verdict: not ready. weather.run is out of the 30-minute job.

What runs

The scorecard (weather\forecast_scorecard.py), weekdays 8:21 AM. It writes a forecast chance for every temperature bucket in every city, then compares it to Kalshi's own price once the day settles. It places nothing, pretend or real. Rules are fixed in advance in paper\forecast_scorecard_PROTOCOL.md.

Pass bar: after at least 20 settled city-days, the forecast's error score (Brier — lower is better) must beat Kalshi's prices on all buckets and the forecast high must be within 2°F on average. 8 Oct result, 23 city-days: forecast 0.135 vs Kalshi 0.090, average miss 2.16°F → fails. Kalshi's prices are currently the better forecast. Until it passes, no paper restart and no live forecast.

The $75 live forecast program (live_trading\forecast_maker.py, 10 contracts, post-only) exists only as a disarmed shell. It needs both the REM'd line in run_scan.cmd uncommented and live\forecast_maker.enabled.flag to exist. Neither is the case, and Ed has said not to do either.

Kalshi account — the four pots

Kalshi splits one account into separate cash pots called "exchange indexes". An order can only use the pot its market belongs to, and the total on the website hides the split. Money is moved between pots only by Ed, using scripts\kalshi_allocate.py; the bots never move it.

PotUsed forWho uses it hereCash at 12:13 PM ET 8 Oct
0Default: weather, rain, gas, most sportsWeather lag, rain incentive, temperature maker$116.17
1CombosNothing$0.02
2Crypto and commoditiesCrypto maker$145.83
3Tennis, baseball, basketballNothing in KALPOLY$60.75
Total cash (positions not included)$322.76

Source: the last line of live\exchange_balances.jsonl, written by the 30-minute job. The code also has an overall ceiling, LIVE_TOTAL_RISK = $495, set when cash was $495.60 on 14 Sep; nothing adds the four caps up against it before an order.

Phone alerts

Order alerts go to Ed's phone through ntfy.sh (a free push-notification service). The channel name is kept in secrets\ntfy_kalpoly_topic.txt and is not written here. That file went missing and was restored on 7 Oct 6:18 PM ET; a test push ("TEST alerts restored") reached Ed's phone. Alerts are sent by the crypto maker, weather lag, the exit step, the rain bot and the temperature maker when they place or close real orders. Weather-lag orders go through automatically; the alert is a heads-up after the fact.

Stop rules

Applies toStops when
EverythingDelete live\enabled.flag. Every live program checks it and places nothing without it. This is the one switch that stops all real orders at once.
Crypto maker(1) 7 days with zero fills; (2) 20+ graded fills with an average result after fees of zero or worse; (3) the daily table is older than 24 hours (pauses until refreshed). On 8 Oct both written kills read "not fired".
Bounded test (all live bots)Hard stop 31 Oct (extended by Ed on 8 Oct; was 13 Oct). If Kalshi's actual rain rewards plus real trading results are not clearly positive by then, every live bot gets turned off. The rain bot stops itself; the others are switched off by hand.
Rain incentive(1) From 31 Oct, credited rewards under half the bot's own estimate — only if a number has been entered in live\lip_rewards.json; blank is just a warning; (2) from 31 Oct: 200+ filled contracts averaging worse than −2¢ each after fees (before 31 Oct this is only a warning in the log; deferred to 31 Oct per Ed 9 Oct, after it shut the bot off at 8:38 AM that day on 217 contracts averaging −8.5¢, mostly the 8 Oct Miami loss); (3) from 31 Oct, rewards plus settled results zero or worse. Nothing stops the rain bot automatically before 31 Oct. (The two date checks were 16 and 20 Oct until 8 Oct.)
Weather lagNo calendar kill. Guarded by the 2°F / 0.05 in margins, quiet hours, the 15-minute freshness check, and the exit step that sells a contradicted position.
Temperature makerIts $100 cap is the whole downside; every order expires at the market close.
ForecastStays off until the scorecard pass bar is met and Ed approves.

Ed's standing rules

RuleWhere it lives
Do not raise crypto MAX_PAY (0.40).live_trading\crypto_lag.py (the old taker limit)
Do not lower the weather-lag 2°F margin.LIVE_LOCK_MARGIN_F in live_trading\config.py
Do not change MAX_QUEUE_AHEAD (stays 50).live_trading\crypto_maker.py
Crypto taker stays killed; tape only.—
Crypto maker stays live: $100, last 15 minutes, 50 contracts.live_trading\crypto_maker.py
Paper scanners never go live automatically.—
Do not revive venue lag or Thesis A.—
Do not create live\forecast_maker.enabled.flag; do not un-REM forecast_maker or weather.run in run_scan.cmd.run_scan.cmd
Retired paper sleeves (A1, B1, C3, W2 and the rest) stay retired.paper_sleeves\_archived\

Recent changes

DateChange
11 OctDay-before temperature NO bot went live at $5 a bet, with a forecast check (skips buckets within 2°F of the forecast high).
22 SepCrypto maker window widened from 10 to 15 minutes; crypto maker checks its own pot (2) before posting.
Late Sep – 2 OctClean-up. On 2 Oct some live files were wiped and restored; CRITICAL_PATHS.txt and the hourly Verify_Critical guard were added.
5 OctPaper sleeves A1, B1, C3, W2 shut down and archived.
11 Oct, nightRain bot weather check (Ed): posts only when the GFS MOS rain chance and 30-year climatology agree with the side; waiting orders that newly fail are cancelled, nothing sold. Caps, size, 80¢ floor, 3-day horizon and 31 Oct stop unchanged.
11 OctWeather pot split: rain incentive $120, weather lag $80, each counting only its own bets. Rain stops posting until its exposure is under $120; nothing was sold. Both still draw on Kalshi pot 0 cash. Later the same night (Ed) shifted again toward the already-happened bets: weather lag $140, rain $60. At 10:11 PM it was reversed after the replay showed weather lag finds only about 2 bets in 38 days: rain $140, weather lag $60.
6 OctRebuild: all remaining pretend sleeves retired; notebooks and tapes taken out of the 30-minute job (scan time down from 30–40 min to about 4–5); crypto edge table moved to its own 7 AM task; rain incentive bot went live, cap raised to $200.
7 OctForecast paper sample closed (30 tickets); weather.run removed from the 30-minute job; daily forecast scorecard started (weekdays 8:21); $75 forecast program built but left disarmed. Phone alert file restored and tested.
8 Oct, earlyParis rain order (Sep 2027, 50 at 45¢) cancelled, nothing filled.
8 Oct, 12:15 PMWeather lag fixed: freshness based on station readings, forecast rows dropped. Watcher restarted.
8 Oct, middayRain bot: markets must close within 3 days; favourites 80¢+ only; 20 contracts; 70 books per pass; missing reward data no longer shuts it off. Atlanta YES at 54¢ (posted 12:13 PM under the old rules) cancelled, nothing filled.
8 Oct, afternoonBounded-test hard stop moved from 13 Oct to 31 Oct (Ed). Rain bot's two date checks moved from 16 and 20 Oct to 31 Oct. Nothing else about trading changed.
9 OctRain bot's fill check shut it off at 8:38 AM (217 settled contracts, −8.5¢ average, mostly the Miami YES at 75¢). Ed had it turned back on; the fill check now waits for 31 Oct like the other two and only warns before then. Caps and sizes unchanged.
8 OctThis page rewritten from the actual system. Old version saved in OLD\bak_overview_20261008\.

Where to look

Settings and code

run_scan.cmd — the 30-minute job (what's on and off).
live_trading\config.py — master flag, 2°F margin, $60 lag budget, quiet hours, alert settings.
live_trading\crypto_maker.py — crypto maker rules and caps.
live_trading\lip_maker.py — rain bot rules, caps, stop rules.
live_trading\filter.py, weather_lag.py, exit.py — weather lag.
live_trading\maker.py — temperature maker.
live_trading\kalshi_live.py — the only code that can move money.
weather\config.py — forecast switches and city list.

Logs and records

logs\scan.log — every 30-minute run.
logs\crypto_maker_watch.log, weather_lag_watch.log — the live watchers.
logs\crypto_edge_report.log, forecast_scorecard.log — the daily tasks.
live\crypto_edge.json — crypto win/loss record and kill status.
live\crypto_maker_posts.json, live\lip_posts.json, live\maker_posts.json — every real post.
live\exchange_balances.jsonl — cash per pot, each scan.
paper\forecast_scorecard.jsonl — forecast grades.

Dashboard pages

https://kalpoly.seamansys.com: Crypto Maker desk, Rain Incentive desk, Live report, Exchange balances, Status, About (this page). Paper pages and Venue lag are frozen history.

Notes and decisions

paper\forecast_scorecard_PROTOCOL.md, paper\forecast_diligence_2026-10-07.md, paper\FORECAST_SAMPLE_CLOSED_2026-10-07.md, PROTECT_CRITICAL.md, paper_sleeves\_archived\, design notes in docs\superpowers\specs\.

Loose ends found while checking