Skip to main content

Owl - Optimal wealth lab

CI Version PyPI Python License: GPL v3 Docker Streamlit App

Open-source retirement planning optimizer powered by Actual Intelligence — connect it to your AI assistant

Roth conversion optimizer · Social Security claiming strategy · Monte Carlo retirement simulator · Python retirement calculator · AI retirement planner · MCP retirement tool · Claude Gemini Cursor Zed VS Code


TL;DR

Owl is an open-source retirement planning tool that helps US retirees answer the hardest questions in retirement income planning: when to claim Social Security, how much to convert to Roth each year, which accounts to withdraw from first, and how to minimize lifetime taxes. It uses mixed-integer linear programming to optimize withdrawal strategies rather than merely simulate them, finding the mathematically best sequence of decisions across all accounts simultaneously.

Users can stress-test their plan with historical back-testing, Monte Carlo simulation with sequence-of-returns risk, or fixed rates derived from historical averages.

Owl covers the full US tax landscape: federal income tax, state income taxes for all 50 states and DC, long-term capital gains, NIIT, Medicare IRMAA surcharges, ACA marketplace premiums, RMDs, and Roth conversion rules — all embedded directly in the optimizer so that tax-efficient retirement income planning is built into every result, not applied as an afterthought.

Owl Savings Balance plot: tax-deferred accounts drawn down while Roth balances grow through optimized conversions
Optimized account balances over time (today's dollars): Owl draws down tax-deferred accounts while growing tax-free Roth balances through early-retirement conversions.


Key capabilities

  • Tax optimization — federal + state income tax (all 50 states + DC), LTCG brackets, NIIT, Medicare IRMAA, and ACA premiums all embedded in the optimizer

  • Account types — taxable, tax-deferred (401k/IRA), Roth, and HSA accounts with full contribution and withdrawal rules

  • Roth conversions — amounts and timing co-optimized with spending and bequest goals

  • Value of optimization — compare_to_baseline solves the same plan with and without the strategy (no Roth conversions, Social Security at stated ages, taxable-first withdrawal ordering) and reports the advantage in today's dollars — a mathematical lower bound from the optimizer itself, not a simulation estimate

  • Explainability — explain_results reads the LP shadow prices to report what each goal and rule costs at the margin, which tax brackets the plan deliberately fills (and why), and the order in which accounts are drawn down. Every recommendation is explained using the mathematics of the optimization itself: the AI interprets and narrates quantities computed by the solver — it does not find the answer

  • Social Security — own, spousal, and survivor benefits; optional MILP co-optimization of claiming age (monthly resolution, 62–70)

  • Pension & SPIA — pension income with survivor fractions; IRA-funded SPIA with optional CPI indexing and joint-and-survivor benefit

  • Two objectives — maximize net spending subject to a bequest floor, or maximize after-tax bequest subject to a spending floor

  • Spending profile — flat or smile-curve shape with survivorship factor; optional time-preference discounting to reduce end-of-life back-loading

  • Asset allocation — user-specified glide path (linear or s-curve) across four asset classes (equities, corporate bonds, T-notes, cash); per-account, per-individual, or household-wide

  • Stochastic analysis — Monte Carlo with optional longevity risk (mortality tables by sex and category: SSA, VBT, RP-2014, IAM-2012, Pub-2010); spending efficiency frontier tracing the optimal spending vs. shortfall-risk trade-off

  • Rate models — 14 models including historical replay, bootstrap, VAR, GARCH-DCC, HMM, GMM, and Gaussian copula

  • AI assistant — MCP server lets Claude Desktop, Claude Code, Gemini CLI, Cursor, Zed, VS Code (Copilot/Cline), and other MCP-compatible AI clients run optimizations, compute probability-of-success frontiers, quantify and explain strategies, and compare scenarios through natural conversation — eighteen tools plus a guided owl_intake interview prompt, with every assumption made for omitted inputs disclosed in the response (assumed_defaults). No TOML files required:

    "I'm 65, have $800k in my IRA and $200k taxable, $2,400/month Social Security at 67 — what can I safely spend each year with 90% historical probability of success?"

    Self-hosted installs can also enable a built-in Assistant chat page that reads the case open in the app (OWL_ASSISTANT=1); the Connect your AI page in the web UI generates the client configuration either way.

Among open-source retirement planning tools, Owl stands out for the breadth and rigor of its financial modeling. While the full API rewards those willing to invest time, the Streamlit web interface provides an accessible entry point for all users.

How to run Owl

There are four ways to run Owl (from easiest to more complex):

  1. Streamlit Hub: Run Owl remotely as hosted on the Streamlit Community Cloud at owlplanner.streamlit.app.

  2. Docker Container: Run Owl locally on your computer using a Docker image. Follow these instructions for using this option.

  3. Self-hosting: Run Owl locally on your computer using Python code and libraries. Follow these instructions to install from the source code and self-host on your own computer.

  4. AI assistant (MCP): Connect Owl as a tool to an AI assistant — Claude Desktop, Claude Code, Gemini CLI, Cursor, Zed, VS Code (Copilot or Cline), or any MCP-compatible client. The AI can discover cases, run optimizations, compute probability-of-success frontiers, and compare scenarios through natural conversation — no TOML files required. Requires a local installation; see info/mcp.md for setup. The Connect your AI page (under Tools in the web UI) generates the copy-paste configuration for Claude Desktop, Claude Code, Cursor, Gemini CLI, VS Code, and Zed.

Documentation

Document Description
📥 Installation Guide Installation, Python environment setup, and developer build steps
📋 Changelog Version history and changelog
🤝 Contributing Guidelines for contributing code, issues, and pull requests
📊 Modeling Capabilities Summary of modeled components, assumptions, and limitations
📖 User Guide Python API usage with examples for Jupyter notebooks and scripts
⚙️ Parameter Reference Complete reference for TOML case file parameters
📈 Rate Models Available rate models (historical, stochastic, bootstrap, etc.)
🤖 MCP Server MCP server setup for AI-native access via Claude, Gemini, Cursor, Zed, VS Code, and other clients
🖥️ Web App Guide Guide to the Streamlit web app user interface
📐 Mathematical Foundations The LP formulation paper (owl.pdf)

Credits and Acknowledgements

See CREDITS.md.

Bugs and Feature Requests

Please submit bugs and feature requests through GitHub if you have a GitHub account or directly by email. Or just drop me a line to report your experience with the tool.

Privacy

This app does not store or forward any information. All data entered is lost after a session is closed. However, you can choose to download selected parts of your own data to your computer before closing the session. These data will be stored strictly on your computer and can be used to reproduce a case at a later time.

The optional self-hosted Assistant page is disabled by default and never available on the hosted app; when you explicitly enable it, your conversation — including case data you ask about — is sent to the AI provider you configure. The optimizer itself always runs locally.

Licensing

Copyright © 2024-2026 Martin-D. Lacasse and The Owl Authors.

This project is distributed under three separate licenses depending on the type of file:

  • Source code (.py, .sh) is licensed under the GNU General Public License v3 (see LICENSE).
  • Documentation (.md, .qmd, .ipynb, .tex) is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 license, CC-BY-NC-SA-4.0 (see LICENSE-docs).
  • Name, logo, and image assets — the Owl - Optimal wealth lab name and the logo/icon image files in the assets/ directory — are all rights reserved, Copyright © 2024-2026 Martin-D. Lacasse. They are not covered by the GPLv3 and may not be reproduced or modified without permission (see assets/LICENSE).

Disclaimers

Owl is for educational and research purposes only. Nothing in this session constitutes financial, tax, or investment advice—consult a qualified professional for decisions specific to your situation.

Code output has been verified with analytical solutions when applicable, and comparative approaches otherwise. Nevertheless, accuracy of results is not guaranteed.

Metadata

Release files for owlplanner 2026.9.16

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

Source distribution (sdist)

Source distribution for owlplanner 2026.9.16
File Size Uploaded
owlplanner-2026.9.16.tar.gz 23.2 MB Details

Built distribution (wheel)

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

Total release size: 23.7 MB

Release files / owlplanner-2026.9.16.tar.gz

Download URL owlplanner-2026.9.16.tar.gz
Size 23.2 MB
Tags Source
SHA-256 checksum
How to use checksums
52917a8396be5991dad9aef93607771913d3279dff3d223eb53c34d660f8e82f
BLAKE2b-256 checksum
How to use checksums
d6141d98dc5d54b970fb398107b63fb76a4fc4725db232aa340ed80b15f06cff
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / owlplanner-2026.9.16-py3-none-any.whl

Download URL owlplanner-2026.9.16-py3-none-any.whl
Size 502.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
86202c5f92cdb896975bdfa2230659f5a2d0dcae4617d1bf58052b471390a565
BLAKE2b-256 checksum
How to use checksums
67e5c69d3b6c1c389a3700e5298f10fa5ed50ef925fb0b90843fc8dd7524949e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
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