[AXIS and HOOX]

AXIS evaluates Pine on a chart. HOOX executes orders. Connecting them is optional and goes through pyne-worker, not the PWA.

AXIS and HOOX

AXIS is the chart. HOOX is the mesh. They share a language (PYNE) and a website tab pattern. They do not share an order router.

Tip

If a strategy looks correct on axis.hoox.sh and nothing hits the exchange, that is working as designed.

Abstract

AXIS engines (server, pyodide) call PYNE. The HOOX pyne-worker isolate can be that server Backend URL. Only if pyne-worker has TRADE_SERVICE + INTERNAL_KEY_BINDING do strategy events become live orders. The PWA never holds exchange keys.

Conceptual model

Interface surface

AXIS actionHOOX effect
Engine pyodideNone
Engine server → Flask :5002None (unless you built a custom forwarder)
Engine server → AXIS WorkerProxy / 503 — still no trade-worker
Engine server → pyne-worker originEvaluate. Orders only if isolate forwarding is on
Local Alerts panel webhookYour URL. Not certified as a trade path
PYNE Agent pluginWrites scripts; optional validate via /run

AXIS Worker (pynescript-axis, pynescript-axis.cryptolinx.workers.dev) is not the HOOX pyne-worker isolate.

Full engine table: AXIS evaluation map.

Internals

ProductDefault evaluate host
AXIS deskFlask http://localhost:5002
AXIS offlinePyodide + vendored pynescript wheel
HOOX live Pineworkers/pyne-worker

PyneTS (@hoox-sh/pynets) is a TypeScript library. AXIS does not load it. You can build your own host with it; that host is still not HOOX until you implement the trade hop.

Invariants

  1. AXIS ≠ execution.
  2. AXIS ≠ engine — evaluation is always a plugin.
  3. Pasting a HOOX gateway webhook into AXIS alerts is not the supported live-trading path. Use PYNE live trading.
  4. Runtimes Hub entries for "pyne-worker" vs "AXIS Worker" are different origins.

Worked examples

Research only

AXIS + Pyodide or local Flask. No HOOX secrets.

Research + same evaluate host as prod

Set AXIS Backend URL to the pyne-worker origin. Run with tiny size / test first. Confirm you understand that the Worker, not the PWA, is what may forward events.

Authoring

Install the PYNE Agent component plugin, generate a script, evaluate on Flask, then (separately) register that source on pyne-worker cron.

Failure modes

SymptomCauseFix
Great backtest, flat accountNo trade hopDeploy pyne-worker forwarding
503 NO_BACKEND in AXISAXIS Worker has no EXTERNAL_BACKENDSet it, or use Pyodide / Flask
Confused two Worker URLspynescript-axis vs pyne-workerCheck the hostname
Discord alert, no fillAlert webhook ≠ TRADE_SERVICEExpected

See also