Install and enable
Prerequisites for the AI Market Maker — Ecosystem, ScyllaDB and a live matching engine — plus the Extension Manager steps that license, install and switch it on so its seven cron jobs register, the permission keys, and how to prove the engine is actually driving your markets.
The addon is licensed, installed and switched on from the Extension Manager,
like every other add-on. There is no separate installer and no service of its
own to start. Installing means: get the prerequisite layers in place, activate
the licence, install the release and apply it with pnpm updator, switch the
addon on so its cron jobs register, grant the permission keys, and then build
your first market.
Prerequisites, in order
- A working Bicrypto install — see Server requirements
- The Ecosystem addon licensed, installed and enabled
- ScyllaDB reachable, with the Ecosystem keyspace in use
- At least one ecosystem market that does not already have a market maker
- This addon licensed, installed and enabled in the Extension Manager
- Your admin role holding
access.ai.market_maker - An ecosystem wallet on the Super Admin's account — the platform's wallet, which every pool is funded from whoever clicks — holding the base and quote assets (a FUTURES wallet on the same account for a futures market)
Ecosystem is not optional
The engine quotes ecosystem markets and settles through the ecosystem matching
engine. With the ecosystem extension disabled there is no matcher anywhere in
the deployment — not on the web process, not on a cron process — so there is
nothing for the bots to make a market in.
The platform detects this combination and says so in the cron banner rather than letting it fail quietly:
the
ecosystemextension is NOT enabled, so no process in this deployment boots an ecosystem matcher at all.
Note what that banner also says: the other six AI Market Maker cron jobs — risk monitor, pool rebalancer, daily reset, analytics, price sync and history retention — do still run. Only the engine job has nothing to do. So an install in this state looks half-alive: crons green, markets ACTIVE, price frozen.
ScyllaDB is where the tape lives
The addon reuses the Ecosystem keyspace. On first connection it creates its own
tables there — ai_bot_orders, ai_bot_trades, ai_bot_real_trades and their
index tables. You create nothing by hand, but Scylla has to be reachable, and it
is not covered by the platform's MySQL backup. If you run this addon, you own
Scylla's backups.
Enable the extension
-
Open the Extension Manager. Admin → System → Extension Manager. On the Extensions tab (or by searching for Market Maker) find the AI Market Maker card — product ID
61007981— and click it. Until its licence is activated the card reads Activate and its switch is disabled, with the tooltip Activate license first. The EcoSystem & Native Trading card on the same grid has to be licensed, installed and switched on as well, or no process in the deployment boots a matcher for the bots to trade into.- The AI Market Maker card — click it to open the product page
- Its switch stays disabled until the licence is activated
- EcoSystem & Native Trading — licensed, installed and on as well
-
Activate the licence. On the product page press Activate License. Paste the purchase code from your MashDiv dashboard, optionally an email address for update notifications, and press Activate License. The screen confirms License Activated! and sends you back to the product page a couple of seconds later. The box needs outbound HTTPS to reach the licence host; a server without it uses the License File tab on the same screen, which takes the licence certificate downloaded from your MashDiv dashboard instead.
- Paste the purchase code here
- Activate License — then wait for the redirect back to the product page
- The offline route, for a server with no outbound HTTPS
-
Install the release. Back on the product page, now licensed, the Overview tab has a release panel. If it offers Install v…, press it; if it says Up to date on a product you have only just licensed, press Check for Updates once, then install whatever it offers. The Releases tab holds the notes for the version you are being offered — read them first.
Install downloads the release, verifies it and extracts it over the project root. It runs no migrations, builds nothing and restarts nothing, so finish it from a shell on the server:
pnpm updatorThat is the finalise chain — stop, dependencies, schema, seed data, frontend build, start — and it is what makes the addon's tables, routes and screens exist. If the panel still says Up to date after the check there is nothing to download; go straight to the next step.
- Check for Updates, then Install v… when it is offered
- Releases — the notes for the version you are about to install
- The Enabled switch — step 4, not yet
-
Switch it on. Turn the Enabled switch on — in the product page heading, or on the card in the Extension Manager, which is usable now that the licence is verified. This is what makes AI Market Maker appear under Admin → Extensions (for a role holding
access.ai.market_maker) and files its seven cron jobs with the scheduler. It takes effect without a restart. -
Check the cron registry. Within a cycle, Admin → System → Cron should show a new
ai_market_makercategory with seven jobs in it.
The seven jobs are filed under the ai_market_maker category and the scheduler
registers them only while the addon is switched on. With it off, none of them
are scheduled: no engine loads, no price advances, no daily reset fires and no
history is pruned. Market rows can sit at ACTIVE the whole time and look
perfectly healthy on the list screen.
The seven cron jobs
Understanding these explains most of the addon's behaviour.
| Job | Period | What it does |
|---|---|---|
processAiMarketMakerEngine |
5s | Supervises the market-making engine: boots it, reconciles database status against engine state, restarts markets after a deploy. The engine's own tick loop runs at 1 second, separately |
processAiRiskMonitor |
10s | Measures volatility and daily loss per market, and applies the auto-pauses |
processAiPoolRebalancer |
1h | Reports pools whose ratio has drifted. It does not convert balances |
processAiDailyReset |
24h | Zeroes currentDailyVolume and every bot's dailyTradeCount at the UTC day boundary, and writes the previous day's summary |
processAiAnalyticsAggregator |
15m | Aggregates trading statistics |
processAiPriceSync |
30s | Refreshes external reference prices and warns when a target price has drifted more than 10% from the outside world |
processAiHistoryRetention |
24h | Prunes per-trade history past the configured retention window. Daily summaries and lifecycle audit rows are never pruned |
Its bots enqueue into the ecosystem matcher, so it runs where the matcher does.
On a dedicated cron process (CRON_MODE=only) it is a deliberate no-op while the
web process drives the same handler from its own supervisor tick. The other six
are correct anywhere.
One engine, one process
The engine must tick exactly once per deployment. Two of them advance the price twice, and both write the 1-minute candle that binary options settle against.
Leadership is arbitrated twice over: a Redis key (ai_market_maker:engine:leader)
is the fast lock, and a database lease row (ai_market_maker_engine_lease) is the
second arbiter. A process that dies without releasing either is reclaimed —
by pid check on the same host, or by lease expiry.
The claim then fails open: every process that starts the engine believes it leads. That is correct for the single-process install it assumes, and it is the first thing to check when a market looks like it is being driven twice — the price moving twice as far as configured, or synthetic depth reappearing after being cleared. The dashboard reports which process produced its figures and what vouched for it; the log carries the same warning as a boxed error.
Permissions
The addon uses one root access key plus scoped keys per resource. A role that
should administer market makers needs at least access.ai.market_maker —
without it the menu entry does not render.
| Area | Keys |
|---|---|
| Console | access.ai.market_maker |
| Markets screen | access.ai.market_maker.market |
| Markets | view / create / edit / delete .ai.market_maker.market |
| Bots | view / edit .ai.market_maker.bot |
| Pool | view / edit .ai.market_maker.pool |
| Analytics | access.ai.market_maker.analytics, view.ai.market_maker.analytics |
| Settings | access.ai.market_maker.settings |
| Emergency | manage.ai.market_maker.emergency |
edit.ai.market_maker.pool covers deposits and withdrawals — it moves real
money out of the platform's wallet (the Super Admin's) and back, whoever holds
the permission; the holder is never paid. manage.ai.market_maker.emergency
covers the fleet-wide stop and the circuit-breaker reset. Grant both sparingly.
An earlier build split the addon name across a dot — ai.market.maker rather
than ai.market_maker. A permission-key migration carries every grant onto the
underscored key and then deletes the old row, so on any migrated install the
dotted key cannot be held by anyone. If a role that used to reach these screens
no longer can, re-grant the underscored key rather than looking for a broken
toggle.
One family did not carry cleanly: access.ai.market_maker.market — the Markets
list screen — receives grants from a retired ai.trading.market family that no
backend route ever checked, not from the addon root. Check who can open that
screen after a migration.
See Permissions for how a key is derived and the four places it has to exist.
First run, safely
Do not point a fresh market maker at real liquidity on day one.
-
Create the market maker. It is created STOPPED, with six PAUSED bots and an empty pool. See Creating and configuring a market.
-
Start with Real Liquidity at 0. At zero the bots trade only against each other. Nothing is written into the Ecosystem order book, no user can fill an AI order, and the pool is not touched. You get a price series and a tape with no money at risk.
-
Fund the pool anyway. A market cannot be started at all with a total value locked of zero, and if
aiMarketMakerMinLiquidityis set the quote balance must clear it too. See Funding the pool. -
Start it and watch the dashboard for a full day. Confirm the market shows Quoting, that its price stays inside the configured band, and that volume today tracks toward the budget rather than exhausting it before lunch.
-
Only then raise Real Liquidity, in steps, and watch the pool's inventory skew on the dashboard as you do.
Verify the install
Four checks, in order. If one fails, stop there.
| Check | Where | Expected |
|---|---|---|
| Crons registered | Admin → System → Cron | Seven jobs under ai_market_maker, none failed |
| Engine leading | Dashboard masthead | An engine process is named, and leadership is arbitrated by Redis or the database — not "none" |
| Market quoting | Dashboard market table | Quoting, not Not quoting with a named gate |
| Price advancing | Market detail → Overview | Last known price changes, and the chart is continuous |
The engine checkpoints its price state roughly every two minutes, so a market started in the last couple of minutes reports no price yet rather than guessing at one. That is not a fault.
Uninstalling
Switching the addon off in the Extension Manager stops everything within a cron cycle: the engine job deregisters, no price advances and no orders are placed. It leaves the licence in place, so switching it back on needs no reactivation.
It does not cancel orders already resting in the Ecosystem book. If you ran with real liquidity, stop each market first — stopping clears the engine's own synthetic depth and cancels its open orders — and only then disable the extension. Rows accumulated by an older build that never cancelled its quotes need the cleanup command:
pnpm eco:mm:orders # report only
pnpm eco:mm:orders:clean # cancel themMarket makers, pools, bots and history are all left in place. Deleting a market maker cascades to its pool, bots and history — so if you want the record, do not delete it.