Milo is a Python framework where every CLI is simultaneously a terminal app, a command-line tool, and an MCP server. Write one function with type annotations — Milo generates the argparse subcommand, the MCP tool schema, and the llms.txt entry automatically. Built on the Elm Architecture with Kida templates and generator-based sagas, targeting Python 3.14t free-threading.
from milo import App
def reducer(state, action):
if state is None:
return {"count": 0}
if action.type == "@@KEY" and action.payload.char == " ":
return {**state, "count": state["count"] + 1}
return state
app = App(template="counter.kida", reducer=reducer, initial_state=None)
app.run()
The Bengal Ecosystem
A structured reactive stack — every layer written in pure Python for 3.14t free-threading.
| ᓚᘏᗢ | Bengal | Static site generator | Docs |
| ∿∿ | Purr | Content runtime | — |
| ⌁⌁ | Chirp | Web framework | Docs |
| =^..^= | Pounce | ASGI server | Docs |
| )彡 | Kida | Template engine | Docs |
| ฅᨐฅ | Patitas | Markdown parser | Docs |
| ⌾⌾⌾ | Rosettes | Syntax highlighter | Docs |
| ᗣᗣ | Milo (PyPI:milo-cli) |
CLI framework ← You are here | Docs |
Python-native. Free-threading ready. No npm required.