PYTHIA: the oracle needs Osiris already running, and it binds every interface by default
One local API call gives your agent the entire live state of the planet — every major world event at once, plus forecasts. 40+ free keyless feeds, runs entirely on Ollama. No cloud, no cost. Keyless live feeds into one global view and forecasts what’s likely next. No cloud, no keys, no cost. 1d,1w,1m,1y predictions by Mirofish.
At a glance
- What is it?
- A local world-forecast service that fuses a live global intelligence globe with a swarm prediction engine and a local model, and hands the result to an agent over HTTP or MCP. The configuration is where the caveats live: a second repository has to be up first, the engine listens on all interfaces out of the box, and interface choices silently outrank the seeded model list.
- Who is it for?
- PYTHIA suits someone who already runs a local model, already has a machine to leave open, and wants an agent to have one endpoint to ask about the world instead of wiring a dozen feeds themselves. It does not suit someone expecting a single install, because the globe half lives in another repository and has to be running first, and the swarm half silently swaps in a substitute council unless a memory key is configured.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 27 days ago.
- What is it written in?
- Mainly TypeScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 3, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The keyless oracle still needs a second repository running
The headline is that it runs entirely on your own hardware with no cloud, no API keys and no cost. The configuration file qualifies that in a way worth reading before the first run. `OSIRIS_URL=http://localhost:3000` is the address of a separate service, and the comment above it says defaults work out of the box if Ollama and Osiris are running. So the globe, the feed layer and the engine are three processes, two of which come from other repositories, and the engine is the only one in this tree. The model is a fourth dependency with a similar shape. The three model endpoint lines are left blank on purpose, and blank means reuse the model MiroFish has configured, read from a configuration file inside that other project rather than from this one. The result is a service that is genuinely free and genuinely local, and that also assumes a specific arrangement of software you did not install from here.
The engine binds every network interface by default
`ENGINE_HOST=0.0.0.0` and `ENGINE_PORT=8088` are the shipped defaults, so the service listens on every interface the machine has rather than on the loopback address. That is a deliberate-looking choice for a service whose stated purpose is to be called by an agent, and it is also the kind of default that matters more here than it would in most projects. The engine is built to accept natural-language questions about armed conflict, disasters, disease and displacement, and to return forecasts with reasoning attached, and the project's own framing is that an agent pointed at it gains a machine-readable view of the planet. Exposing that on all interfaces by default means the audience for a stray request is your network rather than your machine. The file makes changing it a one-line edit, and it is the first line most people should touch.
Thirty feeds or forty, depending on which page you read
The two headline descriptions disagree about the size of the feed layer. The project description says forty or more free keyless feeds. The overview section says the globe streams thirty or more live feeds. Neither number is attributed to a list you can count, and the enumerated sources that follow are a mix of named systems and categories: breaking news, geopolitics event data, armed conflict, storm and flood warning zones, a disaster event tracker, wildfires, earthquakes, cyber threats and critical infrastructure. Later additions push the count up again with regulatory filings, federal contract and grant data, energy grid intensity, wastewater surveillance and climate indices, plus two prediction markets as forecasting anchors. The useful reading is that the number is a moving target rather than a specification, and that a feed list this fluid is exactly the kind of thing the event cap and the salience ranking exist to manage.
MiroFish's real swarm needs a memory key; the shipped one is a substitute
The prediction engine this project is built around has a full multi-agent swarm, and this project does not always use it. The overview says it is designed to drive MiroFish's own swarm when a memory key from a commercial memory service is configured. Out of the box it does something else: it ships its own local council of specialist personas that deliberate every prediction and report both their consensus and their dissent. That is a substantive difference, not a branding one. A cloud-backed swarm with persistent memory and the local persona council are different systems producing the same shape of output. It also explains a feature that would otherwise look like decoration: the interface for watching the council vote one persona at a time and reading each argument is only interesting if there are genuinely separate voices disagreeing. The dissent surfacing is the part that survives without the key.
Swarm concurrency is really a hardware setting
Two numbers decide whether the council works on your machine. `SWARM_CONCURRENCY=1` is the shipped value and the comment calls it the safe default for one heavyweight model, with an explicit instruction to raise it to four only alongside a small council model on the same runtime. That is not a tuning knob, it is an admission that the personas are local model calls and that four concurrent ones will queue or stall on anything but a small model. The second number is `SWARM_MAX_TOKENS=2400`, described as a per-persona vote budget, with a warning to keep it generous because reasoning models truncate their votes. A truncated vote is not a short opinion, it is a missing one, and a council that silently drops members produces a consensus figure with no recorded dissent. Both defaults err toward slow and complete rather than fast and partial.
Interface choices outrank the configured model list
There is a precedence rule in the configuration that is easy to miss. `SWARM_MODELS` seeds which model each persona uses, in a form like a strategist on a large model and a skeptic on a small one. But picks made in the interface, described as moving from a deck to a hexagon, are written to a run file under the run directory and win over those seeds. So editing the environment file after you have used the interface changes nothing, which will look like the configuration being ignored. The same file holds another cap with a similar design. `EVENT_CAP=500` is the maximum events kept per sensing pass, ranked by salience, and the comment is unusually candid about the cost: raise it when quiet domains such as space weather or regional alert levels keep getting squeezed off the board, lower it to trim memory. Salience ranking plus a cap means rare signals lose to frequent ones by design.
Version 0.1.0, no releases, and a manifest that is not a package
The root project file names the project, reports version 0.1.0, requires Python 3.11 or newer, and declares six dependencies with lower bounds and no upper bounds: an async web framework, a server with the standard extra, an HTTP client, a dotenv loader, a validation library and a Model Context Protocol library. Three details follow from that list. The protocol library being required rather than optional means the agent interface is not only HTTP. The build tool is configured to not treat this as a package, so there is nothing to install from, which matches the absence of any tagged release. And the configuration section reserved for the project's own tooling is an empty placeholder with a comment saying so. The repository's declared primary language is TypeScript while this manifest and its lock file are Python, and the root also carries an application bundle directory and a double-clickable launcher, so the Python service is not the whole of what you get.
Signal rules put numeric thresholds in your hands
The alerting surface is a list of conditions with numbers in it, and the examples are specific: a quake at M6 or above, oil moving plus or minus three percent, a volatility index above 25, a forecast crossing 85 percent, or a keyword appearing. Each rule fires to three places, an in-app feed, browser notifications and webhooks, so the same trigger can page a person and feed a program. Two related features make the forecasts self-auditing. Drift charts put a sparkline on every forecast showing how its probability moved across passes and flag hard swings, which is the only built-in check on whether a prediction was stable or merely loud. And a global health score collapses everything the oracle intakes into a single one to one hundred read weighed across six domains. A single number derived from heterogeneous feeds is the most quotable output here and the one most likely to be quoted without its caveats.
Editorial conclusion
PYTHIA suits someone who already runs a local model, already has a machine to leave open, and wants an agent to have one endpoint to ask about the world instead of wiring a dozen feeds themselves. It does not suit someone expecting a single install, because the globe half lives in another repository and has to be running first, and the swarm half silently swaps in a substitute council unless a memory key is configured. Five things to check before you point an agent at it. Check whether you can run two services instead of one. Check the bind address before you run it on a shared network, since the default listens on every interface. Check which model the engine actually picks up, because blank settings defer to another project's configuration file. Check whether interface selections you made in the UI will survive a restart, because they are written to a run file that outranks the configured seeds. And check whether a quiet signal matters to you, because the event cap is ranked by salience. Licence is MIT, the manifest reports version 0.1.0, there are no tagged releases, and the default branch was pushed on 2026-09-06.
Frequently asked questions
What is PYTHIA in the Pythia AI project?
It fuses MiroFish, a swarm-intelligence prediction engine, with Osiris, a live global-intelligence globe, and adds a local LLM that reads the assembled world state and speaks the forecast. Forecasts are produced over four horizons: 24 hours, a week, a month and a year.
How do you install Pythia?
The repository publishes no package and has no tagged release, so there is nothing to install from. Setup is copying the example environment file, and its defaults assume Ollama and a separate Osiris instance on port 3000 are already running.
Does PYTHIA need API keys?
Not for its own operation: the stated design is no cloud, no keys and no cost. The three model endpoint lines ship blank so the engine reuses whatever model MiroFish has configured, and configuring a Zep memory key is what unlocks MiroFish's own multi-agent swarm instead of the local persona council.
What does ORACLE_TEMPERATURE change in PYTHIA?
It sets how far the oracle is willing to speculate, where 0 is cautious and 1 is imaginative. The shipped default is 0.5. The neighbouring ORACLE_TIMEOUT_SEC is 180, which is the ceiling on a single oracle call.
Why does PYTHIA only keep 500 events per pass?
EVENT_CAP is the maximum events kept per sensing pass, ranked by salience. The configuration comment says to raise it when quiet domains such as space weather or regional alert levels keep getting squeezed off the board, and to lower it to trim memory use.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/jangles-byte-pythia)