# Odds Desk > Paste one basket of prediction-market legs and run one of four worksheets over it: the resolution > read, the sizing worksheet, the execution plan, or the risk review. A free in-browser engine does > the payoff, edge, expected-value and Kelly arithmetic first, and the worksheet that comes back is > reconciled against it. Non-advisory by construction: Odds Desk documents the consequences of the > numbers you supply and never recommends, endorses or discourages a position. Live at https://odds-desk.skillsafe.ai/ · API docs at https://odds-desk.skillsafe.ai/api.html ## What it is for One user, one basket, one sitting. You hold a set of binary prediction-market contracts you are thinking about entering — the market questions, the venue, the side, the quote, the stake you have in mind, your own fair probability, the resolution date, what settles it, and how the legs correlate. Odds Desk turns that paste into a documented worksheet you can hand to someone else, in four passes that run in the order a person actually works: 1. **Resolution read** (inspect) — what each leg actually settles on, where the question has more than one reading, what the quote implies next to your own fair value, and which dated, checkable evidence would move it. 2. **Sizing worksheet** (decide) — the planned stake against full and fractional Kelly, a band rather than a single number, cap status per leg, and where the concentration really sits once correlated legs are treated as one bet. 3. **Execution plan** (produce) — prerequisites, a price limit per leg written in the notation you pasted, what invalidates each leg, how it exits or settles, and one dated monitoring calendar. Nothing in it places an order. 4. **Risk review** (verify) — resolution-source integrity and manipulation surface, the quality of the inputs, privacy of what you pasted, venue and counterparty concentration, execution and settlement risk, automation authority limits, and a go / hold / revise gate with its condition attached. Each lane's result carries a button that runs the next lane on it, so the sizing runs on the read and the risk review runs on the plan. The basket never changes — that is what makes these four lanes one app rather than four apps sharing a header. ## What is free, and what costs credits **Free, in your browser, before sign-in and before any run:** - Reads the basket in whatever shape it arrived: pipe, tab, comma and semicolon tables, markdown tables, and `key: value` blocks. Columns are matched by name and by alias, not by position. - Normalises every quote notation into one implied probability: cents (`62c`), decimals (`0.62`), percentages (`62%`), American odds (`+150`, `-200`) and fractional odds (`3/2`). - Payoff arithmetic per leg: contracts bought, profit if the leg wins, loss if it loses, break-even probability, and return on capital. - Edge and expected value against **your own** stated fair probability. A leg with no stated fair value has no edge, no expected value and no Kelly size, and the app says so instead of substituting the market price for your belief. - Full Kelly and fractional Kelly per leg, with the stake your chosen fraction allows and an explicit zero for negative-edge legs. - Exposure aggregated by correlation theme, by venue and by resolution month, with the worst single theme's simultaneous loss named. - Deterministic flags with unique keys: unreadable quotes, missing stakes and fair values, negative edge, Kelly at or below zero, per-leg and theme cap breaches, stake beyond quoted depth, duplicate legs, both sides of one market with the overround or the apparent arbitrage priced, missing or past resolution dates, missing or unverifiable resolution sources. - Legs CSV, flags CSV and a Markdown read of the whole basket. **Metered (a signed-in account, `gpt-terra`):** the four worksheets. `POST /estimate` prices a run for free and returns `hold_credits` as a *reservation*, not a price — settlement is usually far lower. `hold_credits` differs per lane, so the app re-prices on every lane switch. ## The contract Input is a JSON object. `task` is the lane (`read`, `size`, `plan`, `risk`) and `basket` is the paste. `bankroll`, `currency`, `kelly_fraction`, `per_leg_cap_pct` and `theme_cap_pct` carry your own risk frame; `context` is free text; `handoff` carries a previous lane's verdict and notes; `engine_facts` carries the browser's arithmetic as ground truth. Output is one JSON object with the same envelope in every lane: `lane`, `basket_name`, `posture` (`clear` / `caution` / `blocked`), `verdict`, `exec_summary`, `legs[]`, `findings[]`, `checks[]`, `actions[]`, `coverage_check[]`, `assumptions[]`, `open_questions[]`, `evidence_gaps[]`, `summary`. Each `legs[]` entry carries `ref`, `market`, `headline`, `detail`, `severity` and its own lane's keys — `resolves_on` / `ambiguity` / `implied_read` / `movers` for the read, `stake_note` / `suggested_band` / `cap_status` / `concentration_note` for the sizing, `entry_condition` / `invalidation` / `exit` / `monitor` for the plan, `risk_type` / `data_quality` / `settlement_risk` for the review. The read lane names six checks, the sizing and plan lanes seven each, and the review lane eight, always in a fixed order. `coverage_check` is the accountability device: it must carry one entry per engine flag key, and the app verifies that itself. A flag the worksheet never mentioned is shown to you as unmentioned, and a reconciliation entry naming a flag the browser never raised is shown as invented. ## The conventions it holds itself to - One convention decides how every number reads: **a leg's quote is the cost of the side you named, and its fair value is your probability of that same side.** A NO leg at 45c with a 60% fair value is a stated 15-point edge on NO. - Idempotency keys include the lane, so two lanes over one basket are two runs that cannot collide. The one automatic reformat retry reuses a key derived from the same input and says out loud that it is one extra run. - The run button is disabled with the shortfall named when the balance cannot cover the hold. A 402 after submit would be a failure of the interface, not of the user. - The input is clipped on whole-row boundaries with the header kept, and the size of the cut is shown before you pay for the run — never a blind character slice through the middle of a leg. - A stream that dies keeps whatever parsed, and a salvaged worksheet is saved to history like any other, because the run was billed. - Worksheets are saved to your SkillSafe account in a declared collection with semantic search over past baskets, mirrored in this browser for instant paint. There is no backfill on the vector index, so only runs made after launch are searchable. - Every lane ships a replayable saved run, reachable before sign-in for zero credits. ## What it will not do It will not tell you what to trade. It will not predict an outcome. It will not invent a price, a volume, a news item, a poll or a base rate that is not in your paste. It will not name a plausible resolution source for a leg that has none. It will not state that a market is or is not permitted for you — prediction-market eligibility and tax treatment differ by jurisdiction and nothing here establishes yours. ## Sources A derived work built on four community skills from the SkillSafe registry, credited in full: - `@affaan-m/ito-trade-planner` — the primary skill, and the non-advisory trade planning worksheet behind the execution plan lane. - `@affaan-m/ito-market-intelligence` — source-grounded, read-only market and resolution reading behind the resolution read lane. - `@joellewis/bet-sizing` — Kelly, fractional Kelly, risk budgeting and conviction weighting behind the sizing lane. - `@affaan-m/prediction-market-risk-review` — compliance, safety, data-quality, privacy and execution risk behind the risk review lane. Built and published on SkillSafe (https://skillsafe.ai/). Not investment advice.