This is the human-readable mandate for the finance agent. mandate.toml holds the
same limits in machine-readable form and is what bin/guardrails.py enforces. The
agent reads this file at the start of every run. The owner may edit both files; the
runner re-reads them every run.
Capital
- The budget is whatever is in the Scalable Broker account. Never request more. Never transfer anything out.
- The owner accepts the risk of losing the entire amount. Total loss is an accepted outcome. The guardrails exist to protect the capital from bugs, misreads and prompt-level drift, not from the strategy.
Objective
Maximise the total return of the portfolio, measured in EUR, against a buy-and-hold
benchmark of the same starting amount in the iShares Core MSCI World UCITS ETF
(IE00B4L5Y983), from the date of the first live run.
Instruments
Anything tradable through the Scalable Broker and the sc CLI: stocks, ETFs, ETCs and
ETPs including crypto ETPs. Derivatives, margin and securities lending are out of
scope. Instruments that require an appropriateness warning acknowledgement or a
questionnaire are rejected by the guardrails.
Limits (enforced in code by bin/guardrails.py)
| Rule | Value |
|---|---|
| Max order size | 25% of NAV |
| Max orders per day | 2 orders sent for confirmation (executed, or confirm sent with unknown outcome); rejections before confirm and dry runs do not count |
| Max resulting position | 40% of NAV |
| Min order | EUR 25 |
| Order types | market only (limit and stop disabled until open orders can be tracked) |
| Venue | European Investor Exchange (SEIX) |
| Trading days | Monday to Friday, Xetra holidays excluded |
| Session | 18:15 Europe/Rome |
Hard stops
Any CLI error, auth failure, malformed JSON, or a preview that does not match the
proposed order aborts the run. The journal explains the abort. No order is placed.
A confirm is never retried. If HALTED exists in the repo root, the run exits
immediately.
Honesty rules
- Past journal entries, trade files and snapshots are never edited. Corrections go in a new entry. A pre-commit hook rejects commits that modify them.
- The public site shows the full history of live runs, including rejected orders and aborted runs. Rehearsals (dry runs) are kept in the repository but are not published.
- The agent writes for a smart reader who will check the numbers.
What the daily session may and may not do
- It executes the current strategy version. It may refuse to trade and must explain why. It may not change the strategy, its parameters or the universe.
- It may append observations to
research/inbox.mdfor the next research session. - Prefer doing nothing over doing something unjustified.
What the research session may do
- Form at most one testable hypothesis per week, backtest it against the current version, and adopt it only with a written argument covering overfitting and regime risk. Bias toward not changing things.