Mithraeum · Agora

Ownership

What stays yours

The previous section is about controlling what the software does. This one is about what it knows, where that lives, and what the answer is to the question "what could the operator see if they wanted to?"

The short answer is: nothing about your trading. Not because of a policy commitment, but because the internet-facing services were never given a way to ask. That is a structural property of how the four programs are separated, and it is not something a future version can quietly relax without rewriting the boundary itself.

Local-first, in the strict sense

Market history, strategies, custom indicators, saved searches, positions, orders, the audit trail and every note you have written are files on your own disk. There is no account-linked storage, no sync, no telemetry and no server-side copy of any of it — because there is no server that holds books.

Lives on your machineCrosses the network
Price and volume history A sign-in, to prove who you are
Every strategy and custom formula A signed statement of what your account may use
Search results and saved universes "Is there a newer version?", answered with a signed manifest
Positions, orders, balances, the audit trail A support message, only if you write one
Broker and data credentials A diagnostic bundle, only if you attach one

The diagnostic bundle is an allowlist

If you file a support ticket you may attach diagnostics. What they can contain is a list of fields that were each deliberately declared — and the distinction between an allowlist and a denylist is the entire design.

EVERYTHING THE APP KNOWS positions · orders · balances strategies · notes · history credentials · the audit trail exception messages with values interpolated in AND WHATEVER A LATER VERSION ADDS The allowlist only declared fields pass UNDECLARED = DROPPED, NOT SANITISED A BUNDLE MAY CARRY build and platform identity configuration flags counts of things error types and code locations the audit trail's length, only symbols, values, messages — dropped before anything is sent ASSEMBLED ON YOUR MACHINE · SHOWN TO YOU IN FULL · SENT ONLY IF YOU SAY SO · RE-CHECKED ON ARRIVAL
Why an allowlist and not a denylist. A denylist removes the hazards somebody thought of; an allowlist admits only what somebody declared. The left box can grow forever without the right box changing — that asymmetry is the design.
A field nobody declared is dropped, not sanitisedprinciple

A denylist removes the things you thought of. An allowlist keeps only the things you named, so a data structure that grows a new field later does not leak it by default. Adding anything to a bundle is a deliberate edit, reviewed as such.

Guards against: the most common privacy failure in software — a payload that quietly grew.

Exception messages are discarded entirelyprinciple

Programming languages interpolate values into error text. An error about a missing key can contain the symbol you were trading; one about a bad number can contain a position size. So the bundle keeps the error type and the code location, and throws the message away.

There is deliberately no setting to retain messages. A flag like that gets turned on during a difficult debugging session and never turned off again.

Guards against: the exact leak that makes ordinary crash reporting dangerous in a financial application.

Credentials are structurally out of reachprinciple

The bundle reads the connections file for the selected data provider's identity only, and never the configuration or profile sections — which is precisely where a broker key would be. It is not a filter applied over the whole file; it is a read of two named things.

Guards against: a redaction rule that misses a case. There is nothing to miss if the sensitive section is never opened.

Redaction happens before transmission, on your machineprinciple

The bundle is assembled through the allowlist locally. Sending everything and filtering on arrival would be theatre — by then it has already arrived, and the filtering is a promise rather than a mechanism.

The same allowlist is then applied a second time on receipt. The application runs on a machine the operator does not control, so the receiving end validates rather than trusts.

Guards against: a modified or malfunctioning client sending more than it should.

You read the whole bundle before it is sentprinciple

The compose page renders the entire bundle as plain text before anything is transmitted. Not a summary of what it contains — the content itself, in full.

Guards against: having to take any of the above on trust.

The audit trail is measured, never carriedprinciple

The audit trail is named in the legal terms as something the operator never holds. A bundle may therefore report its length and nothing else — the number of entries, never an entry.

Guards against: the most revealing single file in the application being collected because it happened to be useful for debugging.

Several people, one install

The application is multi-tenant per login. Strategies, books, deployments, saved runs, notes and audit entries are scoped to the account that created them, and there is no administrative view that reads across accounts — the exception that used to exist was deliberately retired. A shared machine does not mean a shared book.

Entitlement that works offline

Licensing is a signed statement with a validity period, verified against a key the application has already pinned — not a permission checked over the network at the moment you need it.

Closing your account actually closes it

Self-service, password-confirmed, and blocked by nothing — no "contact support", no cooling-off period, no retention hold. Your posts and contributions are destroyed rather than hidden. One anonymous row survives, containing no name, no address and no content; it exists for a commercial reason which is explained in full in the Agora section rather than glossed over here.

What the software will not do

This page describes how the software is built — what the application holds and what the services behind it can reach. It is not this website's privacy notice. How this site treats you is a much shorter story and it is told in two places: the standing note at the foot of every page, and in full on the contact page, beside the form that is the only thing here able to collect anything. This page is not a term of service, a warranty or a contractual commitment, and nothing on this site is investment advice or an offer of any product or service.

A personal project. Not advice. Nothing for sale.

This site describes a personal engineering project, written and run by one person in their own time and published under the name Mithraeum Agora. There is no company behind it, no team and no other contributor. It is not a product and not a business. Nothing here is for sale — there is no account to open, nothing to buy, no subscription, no waiting list, and no service is being offered or solicited. Sending a message through the note form creates no customer, client or contractual relationship of any kind. The note form on the contact page is the way to reach me, and it is the only one.

Nothing on this site is investment advice, financial advice, tax advice, or a recommendation, solicitation or offer to buy or sell any security or financial instrument. I am not a financial adviser, a broker, an investment manager or a regulated firm, and nothing here should be relied on as though I were. If you are making decisions about money, take advice from someone qualified and regulated to give it.

Figures do appear on this site, inside screenshots, and none of them is a performance claim. Every one is a demonstration instance's own arithmetic over price series the application generated itself — synthetic data, with no real market behind it — shown to illustrate what the tools display. They are hypothetical and simulated: no capital was at risk, no orders were placed, and a result computed over history with the benefit of hindsight carries limitations that live trading does not forgive. Hypothetical results are not indicative of future returns, and past performance — real or simulated — predicts nothing.

No brokerage, market-data vendor or other company is named anywhere on this site, and where a name appeared inside a screenshot it has been redacted out of the image. Nothing here states or implies that any company is associated with this project, endorses it, sponsors it, supplies it or has reviewed it. None is, and none has.

What this site collects. Nothing, unless you write to me. There is no analytics, no tracking, no advertising, and nothing at all is loaded from another domain. If you use the note form it takes the name, address and message you type, stores them privately where only I can read them, and keeps them for up to a year before they are deleted — sooner if you ask, and you do not have to give a reason. Your IP address is not kept. One thing is stored on your own device: the colour theme you pick, remembered by your browser so the site does not change appearance every time you arrive. It is written only when you choose a theme, and it identifies nothing and nobody. The preference itself never leaves your browser, but the screenshots follow it, so the pictures your browser fetches from this site are the ones drawn in that palette. The contact page answers all of this in more detail.

Terms of use. This site is provided as is and as available, with no warranty of any kind, express or implied. It describes software under active development: anything here may be incomplete, out of date or simply wrong, and it may change or disappear without notice. Nothing on it is a contract, a term of service for any product, or a promise that anything described will be built, released or kept running. To the fullest extent the law allows, I accept no liability for any loss or damage arising from use of this site or from reliance on anything it says. Nothing here excludes or limits any liability that cannot lawfully be excluded or limited.

Trading involves risk of loss.