Run a worker
Run an OpenTrigger worker with one command, on a server or a laptop.
A worker needs Node.js 22, its own wallet with a little test GLM, and ideally an Arkiv access key. It only makes outgoing connections, so it runs anywhere.
Make a wallet for it
npx arkiv-triggers new-keyThis prints WORKER_KEY=0x… and the address. Never use your main wallet: the key lives on the server,
so a breach should cost only a little test GLM.
Fund it
Send the address test GLM from the faucet. A worker pays for its claims, receipts and heartbeat; the worker refuses to start with a zero balance.
Configure it
Put the settings in a .env file in the folder you run it from (values already in the environment win):
WORKER_KEY=0x… # required, secret
ARKIV_ACCESS_KEY=… # recommended, secret
WORKER_MODE=any # any | own
TG_TOKEN=… # optional, secret: enables TelegramEvery setting is in the CLI reference.
Run it
npx arkiv-triggers[OpenTrigger] worker running as 0x7f3… (mode any, actions 🔗 webhook, 🧾 receipt, ⏳ extend)
[OpenTrigger] balance 9.92 GLM · https://tiramisu.explorer.arkiv.network/address/0x7f3…
[OpenTrigger] seal key 0xb363…Within a minute its heartbeat is on Arkiv and it shows up in listWorkers() and on the dashboard's
Workers page.
Once the package is installed (npm install arkiv-triggers), the same command is also available as
arkiv-triggers-worker.
Health check
Set PORT and the worker serves GET /healthz: 200 with its stats while its loop keeps moving, 503
once it has been stuck for 2 minutes.
{ "ok": true, "worker": "0x7f3…", "version": "arkiv-triggers/0.1.1", "rules": 12, "fired": 40, "failed": 0, "skipped": 1, "lastBlock": "712345" }Stopping
SIGINT or SIGTERM finishes actions in flight, then exits. A second signal exits at once. A worker
that stops mid-claim loses the claim when its 60-second lease lapses, and another worker takes over.
One process per wallet
Never run two workers with the same WORKER_KEY. They would collide on transaction nonces. On a
hosting platform, set exactly one replica.
Prefer a container? See Docker. Embedding in your backend? See Run your own code.