Author with an agent

om chat and any MCP client that connects to om share one set of Indicator tools: the agent scaffolds a workspace, writes the source, builds and installs the…

om chat and any MCP client that connects to om share one set of Indicator tools: the agent scaffolds a workspace, writes the source, builds and installs the draft, draws it on your chart, reads a value, and publishes only after you say yes. This page is that loop, what each step needs from you, and how an assistant with no tools gets the same knowledge through the docs bundle. kScript (legacy) has no authoring tools in om; asked for a kScript, the agent ports it to an Indicator instead.

The loop in om chat

Describe the indicator in plain words: a 20-bar average with a band shaded around it, the buy share of each bar's volume profile, a conviction score over a Polymarket market. The agent reads the authoring skill first (skill_read wrun: the declaration grammar, the sheet dialect, the pins, the refusals), then runs the loop:

StepToolWhat happens
1. Writewrun_authorScaffolds a workspace from a template on the first call and writes src/indicator.ts (and a hand-written sheet when the workspace is metadata-first). Validation warnings come back to fix; nothing runs yet, so no approval is needed.
2. Buildwrun_buildCompiles the workspace and installs the draft on your machine in the same step; the result carries the receipt and the one-command undo (om indicator remove @scope/name). A compile error comes back as the compiler's diagnostics, and the agent rewrites and builds again.
3. Lookchart_indicator_preview, metric_getDraws one output on your active chart pane as an ephemeral preview line (no publish, no server compute), and reads a value with its params, so you see a number before you trust a shape.
4. Publishpackage_publishdry_run: true first (the files, size and sha256; nothing uploads), then the real publish behind an approval card you answer: the release lands on the OpenMarket platform as a script, with the source entry beside the module, and script_id lands it on a script you already own.

The registry verbs stay consent-gated: the agent proposes, you approve on the card, package_install for someone else's package and package_publish for yours. An odds input is pinned with wrun_source_set (a Polymarket market by search or condition id), and wrun_list names what is installed.

om chat

Over MCP: Claude Desktop, Cursor and others

The same tools serve any MCP client. om setup claude-desktop and om setup cursor-mcp register om mcp serve --stdio in the client's config with the standalone om binary (never a development interpreter), and over MCP yes: true completes an install or a publish only after your explicit intent, the way the card does in chat.

om setup claude-desktop
om setup cursor-mcp
om mcp serve --stdio

An assistant with no tools

Every page of this documentation is bundled into one file, llms-full.txt, served beside the docs. Attach it to any assistant and it knows the exact declaration grammar, the four functions and the TA classes, so generated Indicators compile instead of guessing at an API. Paste the result into the editor or a workspace and run it: the compiler and the sheet validator refuse anything that does not fit, and Common errors maps every message to its fix.

What the agent will not do

  • Say a wrun/ metric is installed from memory: it re-reads wrun_list or metric_list, or calls metric_get, because packages come and go mid-conversation.
  • Mount an unpublished draft on a hosted chart: chart_indicator_add takes registry packages only, and a package with a bindable odds input is refused there; the preview is the draft lane.
  • Publish under @local: the registry rejects the scope, so the agent re-authors the same source under your own account scope before publishing.