Install and enable
Prerequisites for the AI Market Maker — Ecosystem, ScyllaDB and a live matching engine — plus the extension row that registers its seven cron jobs, the permission keys, and how to prove the engine is actually driving your markets.
The addon ships inside the same repository tree as the rest of the platform.
There is no separate installer, no service to start and no pnpm install step of
its own. Installing means: get the prerequisite layers in place, switch the
extension row 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 installed, licensed 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's files present and its
ai_market_makerextension row enabled - Your admin role holding
access.ai.market_maker - An ecosystem wallet, owned by the admin who will fund pools, holding the base and quote assets
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 extensions screen — Admin → System → Extensions. Find AI Market Maker (
ai_market_maker, product ID61007981). -
Activate the licence if the screen asks for one, under Admin → System → License, using that product ID and the purchase code from your Envato account. The box needs outbound HTTPS to reach the licence host.
-
Toggle the extension to enabled. This writes
extension.statusand clears the settings cache. -
Run the updator if you have just extracted new files.
pnpm updator -
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
reads the enabled-extension set from the database. With the row 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 an admin wallet and back. 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
Toggling the extension row off stops everything within a cron cycle: the engine job deregisters, no price advances and no orders are placed.
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.