
Trading Automation
bitflow-limit-order
bitflow-limit-order is a self-hosted, agent-driven limit order engine for Bitflow that lets agents set price targets on HODLMM pools and autonomously execute swaps when conditions are met. It maintains a local order book (~/.aibtc/limit-orders/orders.
Overview
bitflow-limit-order is a self-hosted, agent-driven limit order engine for Bitflow that lets agents set price targets on HODLMM pools and autonomously execute swaps when conditions are met.
bitflow-limit-order is a self-hosted, agent-driven limit order engine for Bitflow that lets agents set price targets on HODLMM pools and autonomously execute swaps when conditions are met. It maintains a local order book (~/.aibtc/limit-orders/orders.json), polls active bin mid-prices every heartbeat (default ~5 minutes) and uses the HODLMM active bin as an on-chain price oracle. Core commands include set (create order with pair, side, price, amount, slippage, expiry), run (load orders, check prices, trigger best-route swaps via BitflowSDK, expire stale orders), list/cancel (manage orders), and doctor (verify wallet, API access, price feed, storage). Use cases: set-and-forget limit trades, autonomous trading strategies, agentized market making, and a no-third-party alternative to Bitflow’s keeper. Key advantages: fully configurable, agent-native order execution, on-chain oracle reliance, and SDK-driven best-route swaps.
Skill.md
How this skill works
bitflow-limit-order is a self-hosted, agent-driven limit order engine for Bitflow that lets agents set price targets on HODLMM pools and autonomously execute swaps when conditions are met. It maintains a local order book (~/.aibtc/limit-orders/orders.
Agent-powered limit orders on Bitflow. Bitflow has no native limit-order support — the agent IS the order engine.
What it does
Sets price targets on Bitflow HODLMM pools, polls active bin mid-prices on each heartbeat, and executes swaps autonomously when conditions are met. The agent maintains a local order book (~/.aibtc/limit-orders/orders.json), checks prices every 5 minutes via run, and fills orders that hit their target.
Core flow:
set— User creates a limit order with pair, side, price, amount, slippage, and expiryrun— Called every heartbeat: loads active orders, fetches pool prices, executes triggered swaps via BitflowSDK, expires stale orderslist/cancel— Manage the order book
User/Agent ──set──▶ Order File ──run──▶ Price Check ──trigger──▶ BitflowSDK Swap
(~/.aibtc/ (HODLMM active (best-route tx via SDK;
limit-orders) bin mid-price) not necessarily HODLMM)
Why agents need it
- Agent-native limit orders — Bitflow's native keeper handles orders server-side; this skill gives agents a self-hosted, fully configurable alternative with no third-party dependency
- Every trader's #1 feature request on any DEX — high-leverage primitive
- Enables autonomous trading strategies: set-and-forget price targets
- HODLMM active bin provides an on-chain price oracle — no external feeds needed
- Write skill (executes actual swaps) — required for daily prize eligibility
Commands
doctor
Verify wallet, Bitflow API access, price feed, and order storage health.
bun run bitflow-limit-order/bitflow-limit-order.ts doctor
set
Create a new limit order.
bun run bitflow-limit-order/bitflow-limit-order.ts set \
--pair STX-sBTC \
--side buy \
--price 29000 \
--amount 0.001 \
--slippage 1 \
--expires 24h
| Flag | Required | Default | Description |
|---|---|---|---|
--pair | Yes | — | Trading pair (e.g., STX-sBTC) |
--side | Yes | — | buy or sell |
--price | Yes | — | Target price (HODLMM bin price units) |
--amount | Yes | — | Amount of input token |
--slippage | No | 1% | Max slippage percent (cap: 5%) |
--expires | No | 24h | Expiry duration (e.g., 1h, 24h, 7d) |
list
Show all orders with their current status, or read the JSONL event-log audit trail.
bun run bitflow-limit-order/bitflow-limit-order.ts list
bun run bitflow-limit-order/bitflow-limit-order.ts list --status active
bun run bitflow-limit-order/bitflow-limit-order.ts list --events
bun run bitflow-limit-order/bitflow-limit-order.ts list --events --order-id 3
| Flag | Description |
|---|---|
--status <s> | Filter orders by status |
--events | Read ~/.aibtc/limit-orders/events.jsonl instead of orders |
--order-id <n> | With --events, restrict to one order |
cancel <ID>
Cancel a pending order by ID.
bun run bitflow-limit-order/bitflow-limit-order.ts cancel 3
run
Check all active orders against live pool prices. Execute any that trigger. Defaults to one-shot (single cycle, exits) — pass --watch <interval> to run as an in-process heartbeat loop.
# One-shot (called by external scheduler)
bun run bitflow-limit-order/bitflow-limit-order.ts run --confirm --wallet-password <PW>
# In-process loop, every 30s, with 2-tick anti-wick filter
bun run bitflow-limit-order/bitflow-limit-order.ts run --confirm --watch 30s --confirm-ticks 2
| Flag | Description |
|---|---|
--confirm | Execute swaps on-chain. Without it, dry-run only. |
--watch <interval> | Run in-process heartbeat loop (5s, 30s, 1m, 5m, max 1h). Without it, runs once and exits. |
--confirm-ticks <n> | Anti-wick guard: require N consecutive triggering cycles before firing. Default 2. Watch mode only. |
--wallet-password <pw> | Keystore password (or set AIBTC_WALLET_PASSWORD, or use STACKS_PRIVATE_KEY). |
Watch-mode output: newline-delimited JSON. Each cycle emits one watch-cycle JSON line. SIGINT/SIGTERM trigger a final watch-summary line before exit. Each line is independently a valid JSON object.
Anti-wick rationale: thin L2 liquidity can briefly spike for a single block. Requiring N consecutive cycles where currentPrice crosses targetPrice before firing prevents getting wicked at 3am. The tick counter is in-memory, per-process — it resets on restart and on the first cycle the order stops triggering. Only active under --watch (one-shot has no history to check).
Event log: every meaningful action (triggered, pending_trigger, skipped, filled, expired, error) appends one JSON line to ~/.aibtc/limit-orders/events.jsonl. File rotates to events.jsonl.1 at 10 MB. Read back with list --events.
install-packs
Install required npm dependencies.
bun run bitflow-limit-order/bitflow-limit-order.ts install-packs
Output contract
All output is JSON to stdout. Logs go to stderr.
// set — order created
{ "status": "success", "action": "set", "data": { "orderId": 1, "pair": "STX-sBTC", "side": "buy", "targetPrice": 29000, "amount": 0.001, "slippage": 1, "expires": "2026-04-13T12:00:00Z" }, "error": null }
// run — order triggered
{ "status": "success", "action": "execute", "data": { "orderId": 1, "fillPrice": 29800, "txId": "0x8f3a...", "amount": 0.001, "dryRun": false }, "error": null }
// run — no triggers
{ "status": "success", "action": "check", "data": { "checked": 3, "triggered": 0, "closest": { "orderId": 2, "distance": "2.1%" } }, "error": null }
// error
{ "status": "error", "action": "set", "data": null, "error": "Pool STX-FAKE not found" }
// error (swap failure)
{ "status": "error", "action": "execute", "data": null, "error": "Order #1 swap failed: Broadcast failed: ..." }
Safety notes
| Guard | Default | Configurable |
|---|---|---|
| Max order size | 2000 STX / 0.005 sBTC | No (hardcoded floor) |
| Slippage cap | 1% default | Yes, via --slippage (max 5%) |
| Mandatory expiry | 24h | Yes, via --expires (max 7d) |
| Max active orders | 10 | No (hardcoded) |
| Balance check | Before every execution | Always enforced |
| One fill per cycle | Sequential processing | Always enforced |
| Silent retry | Never — errors surface immediately | Always enforced |
| Confirmation | --confirm required for writes | Always enforced |
Refusal conditions:
- Insufficient wallet balance (STX or sBTC, including STX-for-fee on sBTC orders) → order skipped this cycle with
lastSkipReason, stays active for retry - Balance API failure → order skipped this cycle (never proceeds with unknown balance)
- Wallet decryption failure → cycle aborts, no further orders processed this cycle
- Slippage exceeds threshold → swap aborted
- Pool inactive or not found → order rejected at
settime - Nonce out of sequence → broadcast fails safely
- Order expired → automatically marked
expiredon nextrun
Price source
HODLMM pool active bin mid-price via Bitflow API:
- Pools:
https://bff.bitflowapis.finance/api/quotes/v1/pools - Active bin:
https://bff.bitflowapis.finance/api/quotes/v1/bins/{poolId}/active
Never use api.bitflow.finance (dead endpoint).
Dependencies
commander— CLI argument parsing@bitflowlabs/core-sdk— Bitflow swap routing and execution@stacks/transactions— Transaction construction and broadcast@stacks/network— Stacks mainnet config@stacks/wallet-sdk— Wallet derivation@stacks/encryption— Keystore decryption
Origin
Winner of AIBTC x Bitflow Skills Pay the Bills competition. Original author: @ClankOS Competition PR: https://github.com/BitflowFinance/bff-skills/pull/277
Best used for
When to use it
bitflow-limit-order is a self-hosted, agent-driven limit order engine for Bitflow that lets agents set price targets on HODLMM pools and autonomously execute swaps when conditions are met. It maintains a local order book (~/.aibtc/limit-orders/orders.

01 · PRE-MEETING
Prepare a decision brief
Turn scattered evidence into a structured case before an investment committee meeting.

02 · TEAM WORKFLOW
Standardize handoffs
Create consistent research outputs across analysts, portfolio managers, and agents.

03 · LIVE UPDATE
Refresh the thesis
Update scenarios after a new catalyst, KPI release, or earnings result.
Community notes
Built to improve with use.
Feedback will appear here as this skill is used and reviewed.
Discover more
Related skills
View allquant-analysis
Quantitative Analysis Skill provides an end-to-end toolkit for quantitative finance research and production analysis. It automates data ingestion, interactive analysis in Jupyter (jupyter_execute,…
bankr
Bankr enables executing crypto trading and DeFi operations via natural-language commands. It offers two integration options: a batteries-included Bankr CLI and a REST API at https://api.bankr.bot,…
pine-backtester
pine-backtester provides comprehensive backtesting for Pine Script indicators and strategies. Use it to append performance metrics, analyze trades, generate equity curves, compute win rates, track…