CLI
Everything the agent does from a post, done from a shell — with the quote printed before anything is spent.
Install
npm i -g @almeru/cli
almeru --version
# almeru/1.4.0 node-24.14.0 chain-4663
The binary is almeru. It reads ALMERU_API_KEY and ALMERU_PROFILE from the environment, falling back to ~/.almeru/config.json. Global flags work everywhere: --profile <name>, --json, --yes, --quiet, --no-color.
Commands
| Command | Does |
|---|---|
almeru login | Pair the terminal with an X account and its derived wallet. |
almeru launch | Deploy a treasury protocol or a miner. |
almeru miner | Inspect miners, rounds and odds. |
almeru status | Follow a launch through its seven steps. |
almeru protocols ls | List deployed protocols. |
almeru wallet | Show the derived address, grant and caps. |
almeru config | Read and write local settings. |
almeru login
Flags: --profile <name> (default default), --timeout <seconds> (default 300).
$ almeru login
→ Pairing code: QWTF-2K9D
Open the Connect page in your browser and approve this device.
Waiting for approval (expires in 5:00) …
✓ Signed in as x id 1596180932847104000
✓ Agent wallet 0x2ea9c4b7…ba36d0f1 (derived, deployed)
✓ Grant executeLaunch only · per-launch 5,000.00 USDC
Profile "default" written to ~/.almeru/config.json
The pairing code is single-use and short-lived. Login stores a scoped token, never a private key — the CLI cannot sign a transfer even if the machine is compromised.
almeru launch
Usage: almeru launch <miner|treasury> with --name, --ticker, --bootstrap, --asset (default USDC), --art <path>, --description, --dry-run, --yes, --idempotency-key.
$ almeru launch miner \
--name "Copper Field" \
--ticker CPFD \
--bootstrap 1200 --asset USDC \
--art ./copper.png
kind miner
name Copper Field
ticker $CPFD
bootstrap 1,200.00 USDC
split 80% emissions · 10% staking · 10% timelocked reserve
board 25 tiles · 1 in 25 per tile · pot release ~1 in 333
fee 1% deployment 12.00 USDC
total 1,212.00 USDC
caps per-launch 5,000.00 · 24h remaining 12,300.00
? Deploy on Robinhood Chain (4663)? [y/N] y
simulate block 19442806 ok
execute block 19442807 ok 0x4c1d9a70…cc47ab30
✓ Copper Field is live /miners/copper-field
launch id lnc_3v7pq0m
--dry-run stops after the simulate line and exits 0 without spending. --yes skips the prompt for scripts — pair it with --idempotency-key so a retried CI job cannot deploy twice.
almeru miner
Subcommands: ls, show <id|slug>, rounds <id|slug>. Flags: --phase, --limit, --watch.
$ almeru miner show copper-field
Copper Field ($CPFD) mnr_8fq2k1x
round 41207 phase open locks in 00:41 epoch 27714055
tiles 25 entries 63 entry value 418.75 USDC
winner reward 12.480000 token pot 1.248000 (fixed 10:1)
schedule 484,393 of 525,600 funded rounds remaining
routing 1% operations · 10% of losing side recycled
$ almeru miner ls --phase open --limit 3
SLUG ROUND PHASE LOCKS IN ENTRIES VALUE
copper-field 41207 open 00:41 63 418.75
tin-line 9014 open 00:41 12 96.00
north-dock 2201 open 00:41 4 31.25
almeru status
$ almeru status lnc_3v7pq0m --watch
lnc_3v7pq0m miner Copper Field
parse ok
validate ok
quote ok 1,212.00 USDC
simulate ok block 19442806
execute ok block 19442807 0x4c1d9a70…cc47ab30
✓ settled /miners/copper-field
Simulation always sits exactly one block before execution — if those numbers are not consecutive, the launch did not follow the normal path and is worth investigating.
almeru protocols ls
Flags: --kind <treasury|miner>, --status <live|settling|retired>, --limit, --cursor, --json.
$ almeru protocols ls --kind treasury --limit 3
SLUG TICKER STATUS TREASURY BACKING
harbor-reserve HRBR live 184,320.55 1.0742
tin-line TINL live 42,780.10 1.0113
north-dock NDCK settling 6,904.22 0.9981
more: --cursor c3Rhcl9ub3J0aC1kb2Nr
--json emits the raw envelope on stdout and nothing else, so it pipes cleanly. All human output goes to stderr, which keeps almeru protocols ls --json | jq '.data[].slug' honest.
almeru wallet
Subcommands: show (default), derive <xUserId>, caps.
$ almeru wallet show
x id 1596180932847104000
address 0x2ea9c4b7f18d3056a9c7e21b40fd7c85ba36d0f1 (chain 4663)
deployed yes
root owner 0x9c3f18ba7e0d54216fbc9037ad81e5c4207fb6d8
agent signer executeLaunch — and nothing else
caps per-launch 5,000.00 USDC · rolling 24h 15,000.00 USDC
balance 3,184.90 USDC
$ almeru wallet derive 1802994477310988288
address 0x8b17e0d94a2c63f5108ad7be32409cf6d15e7b24 (chain 4663)
deployed no # the address exists as a fact before it exists as code
almeru config
$ almeru config list
profile default
base_url https://api.almeru.app/v1
chain_id 4663
confirm prompt # prompt | always | never
output table # table | json
$ almeru config set output json
✓ output = json (~/.almeru/config.json)
Environment variables win over the config file, and explicit flags win over both. API keys are read from the environment only — almeru config set refuses to persist one to disk.
Exit codes
| Code | Meaning |
|---|---|
0 | Success, including a completed --dry-run. |
1 | Unspecified failure. |
2 | Usage error — unknown flag, missing argument. |
3 | Not authenticated, or the grant is revoked. |
4 | Validation failed, cap exceeded, or ticker taken. |
5 | Insufficient funds for bootstrap plus the 1% fee. |
6 | Simulation reverted. Nothing was spent. |
7 | Rate limited; retry after the printed delay. |
8 | Network or upstream unavailable. |
130 | Interrupted at the confirmation prompt. |
Codes 4, 5 and 6 all mean the launch stopped before spending — they are safe to treat as one class in a script, and they are the same conditions the REST API reports as 422.