---
title: "The CLI"
description: "om indicator is the command group for authoring Indicators on your machine: the templates, a workspace, a build, a local install, and the reads that prove a…"
order: 11
section: "getting-started"
---

<!-- source: docs/indicators/getting-started/cli.md; generated by packages/cli/scripts/gen-indicator-docs.ts, do not edit -->

# The CLI

`om indicator` is the command group for authoring Indicators on your
machine: the templates, a workspace, a build, a local install, and the reads
that prove a value moves. `om wrun` is the same group under its older
spelling (`wrun` is the runtime's internal name, the one you still meet in
metric ids like `wrun/@scope/name/output` and in the package kind
`wrun-indicator`), so every command on this page accepts either. The
compile step needs `bun` on your PATH. kScript (legacy) scripts have no CLI
authoring lane: they are written and published in the chart's editor.

## Author

```bash
om indicator templates
om indicator create @you/my-sma ./my-sma --template sma-codefirst
om indicator build ./my-sma
om indicator validate ./my-sma
om indicator install ./my-sma --replace
om indicator list
om indicator show @you/my-sma
```

| Command | What it does |
| --- | --- |
| `om indicator templates` | lists the nine starting points: `sma-codefirst`, `sma-box`, `sma`, `vp-buy-share-codefirst`, `polymarket-odds`, `conviction-score`, `event-asset-divergence`, `escalation-risk`, `hud-terminal` |
| `om indicator create <package> [dir]` | scaffolds a workspace (`--template`, `--force`); `om indicator scaffold <dir> --name` is the same verb with the name as a flag |
| `om indicator build <dir>` | derives the sheet from your declarations, regenerates `src/gen`, runs `bun install` once and `bun run build`, checks the module against the contract, exports `dist/package` (`--out`, `--wasm`, `--compile-command`, `--install`, `--replace`, `--no-install-deps`) |
| `om indicator install <dir>` | the build plus the local install under `~/.openmarket/packages`, with a receipt naming the path and the undo |
| `om indicator export <dir>` | the export step alone (`--out`, `--force`, `--install`) |
| `om indicator validate <dir>` | validates a workspace or an exported package without building |
| `om indicator list`, `om indicator show <id>` | installed packages and their outputs; one package or metric id |
| `om indicator source search <provider> <query>`, `om indicator source set <name>` | find a Polymarket condition id; repoint a pinned odds input (refused on a derived sheet and on a bindable input) |
| `om indicator upgrade <package> --version <x>` | moves saved alert locks onto an installed version |
| `om indicator remove <package>` | uninstalls (`--version` for one version); warns when alerts still reference the package |

A workspace scaffolded by an older release is lifted onto the current
scaffold contract on its next build, once and non-destructively: your
source and sheet are never touched, the SDK files and build scripts are
refreshed, and the migration is reported in the build's warnings
([Releases overview](../releases/overview.md)).

## Read a value

```bash
om metric get --metric wrun/@you/my-sma/sma:period=20 --symbol BTCUSDT --exchange BINANCE_FUTURES
om metric series --metric wrun/@you/my-sma/sma --params period=20 --symbol BTCUSDT --exchange BINANCE_FUTURES --bars 60
om metric screen --metric wrun/@you/my-sma/sma:period=20 --exchange BINANCE_FUTURES --top-n 50 --by VOLUME_24H --filter gte:1
om chart indicator preview --type wrun/@you/my-sma/sma --bars 300
```

`om metric get` returns the newest value; `om metric series` one
`[barOpenSec, value]` pair per bar (oldest first, newest the still-forming
bar) with a sparkline in text mode; `om metric screen` ranks a universe on
the output; `om chart indicator preview` draws the draft on your active
chart workspace without publishing. A watch condition on the same id is an
alert ([Alerts](../functions/alerts.md)).

## Backtest a strategy package

```bash
om backtest run @you/my-strategy --asset BINANCE_FUTURES:BTCUSDT --window 90d
```

A package whose sheet declares `strategy(...)` replays its orders through
the engine's own broker; `om backtest <target>` is the same one-shot (`run`
is its explicit spelling) and `om backtest spec` the full-control form
([Reading the Strategy Tester](../strategies/reading-the-tester.md)).

## Publish and install

```bash
om publish ./my-sma --dry-run
om publish ./my-sma
om install @you/my-sma
om search sma --kind wrun-indicator
om packages
om open @you/my-sma
```

`om publish` sends an Indicator to the OpenMarket platform
(`chart.openmarket.xyz`), where the release is a script beside your grants
and versions, with the one source entry the manifest names beside the
module; `--script <id>` lands it on a script you already own, and with
`--dry-run` it prints exactly what would ship (files, size, sha256, the
target) without uploading. `om watch publish` is the same command, and a
watch pack takes the registry door instead. `om install` fetches a
published package, verifies its tarball sha256 and writes a receipt; `om packages` is the ledger of
everything installed, published and followed on this machine; `om open`
opens a fresh chart with the package mounted at its exact published version
([Publishing](../functions/publishing.md)).

### One command, another registry

```bash
om install @you/my-sma --registry production
```

`--registry` names the registry for one registry-lane command: an
`om install` of any kind, and an `om publish` of a kind that publishes to
the registry (a watch pack); an Indicator's publish goes to the platform
door whatever `--registry` says. The values are `production`
(`registry.openmarket.xyz`), `staging` (`registry-staging.openmarket.xyz`,
the default until launch), or the origin `OM_REGISTRY_URL` names (a
self-hosted registry or a rig); any other origin is refused before a
request goes out, because your account key only ever travels to a registry
this machine trusts. Nothing else changes: `OM_REGISTRY_URL` keeps setting
the default for every other command, and the agent's `package_publish` and
`package_install` take the same value as `registry`.

## What's next

- [Quick start](quick-start.md): the five steps with the template read line by line.
- [Alerts](../functions/alerts.md): a watch condition on an output.
- [Publishing](../functions/publishing.md): scopes, visibility, versions, deleting.
