Agent skill

Openalgo Charts

by marketcalls in marketcalls/openalgo-charts

A skill your agent uses when building, configuring, extending or debugging openalgo-charts in a consumer app or the source repository, including chart navigation, drawing tools, indicators…

Apache-2.0Auto-check passedDevelopment

Install Openalgo Charts

skills CLI
$ npx skills add marketcalls/openalgo-charts --skill openalgo-charts -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install marketcalls/openalgo-charts openalgo-charts --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/marketcalls/openalgo-charts.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.github/skills/openalgo-charts .claude/skills/openalgo-charts && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
openalgo-charts
GitHub stars
146
Token cost
~7.6k tokens
SKILL.md length
3,030 words
Files
27 (incl. references)
Skills in repo
6
Repo updated
First seen
Licence
Apache-2.0

At a glance

A skill your agent uses when building, configuring, extending or debugging openalgo-charts in a consumer app or the source repository, including chart navigation, drawing tools, indicators…

  • Works in 3 steps: In a consumer app, inspect the installed… → In the upstream repo, inspect… → ARCHITECTURE.md and…
  • Debugging openalgo-charts in a consumer app
  • SKILL.md covers Source lookup order, Mental model, Install and tiers and The 60-second chart, plus 6 more sections
  • Calls rg, npm and node

What it does

Openalgo Charts is an agent skill from marketcalls/openalgo-charts. Use when building, configuring, extending or debugging openalgo-charts in a consumer app or the source repository, including chart navigation, drawing tools, indicators, profiles, live feeds, replay, widgets and framework hosts.

Its SKILL.md is about 7.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 27 other files, including reference files (for example `references/alerts.md`, `references/bundling-and-tiers.md` and `references/chart-linking.md`).

It sits in Development. The repository describes itself as: Production-grade charts built for brokers, exchanges, trading platforms, and financial portals. Bring your own market data, plug it in, and deliver a complete charting experience… The licence is Apache-2.0.

When your agent uses it

  • Debugging openalgo-charts in a consumer app
  • The source repository
  • Including chart navigation
  • Widgets and framework hosts

Example prompts

  • “/openalgo-charts”

Requirements

  • Node.js

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. In a consumer app, inspect the installed package first
  2. In the upstream repo, inspect dist/index.d.ts first, then src/ if generated output is unavailable.
  3. ARCHITECTURE.md and website/pages/docs/*.mdx are supporting evidence, but local typings win when they disagree.

What it can do on your machine

Read from SKILL.md and the folder at commit 8b4cffe. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • rg
    • npm
    • node

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use npm, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Openalgo Charts loads about 7.6k tokens when it runs, and up to ~275k if it reads all its reference files. Until then it costs about 61 tokens; SKILL.md has 3,030 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~61
When it runs · the whole SKILL.md, loaded when a task matches
~7.6k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~275k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from marketcalls/openalgo-charts at commit 8b4cffe, republished under its Apache-2.0 licence (© marketcalls). 3,030 words, ~7,560 tokens.

Download SKILL.mdSave it as .claude/skills/openalgo-charts/SKILL.md (or your agent's skills folder). This skill also uses 26 other files; get the full folder from GitHub.
name
openalgo-charts
description
Use when building, configuring, extending or debugging openalgo-charts in a consumer app or the source repository, including chart navigation, drawing tools, indicators, profiles, live feeds, replay, widgets and framework hosts.

OpenAlgo Charts skill

openalgo-charts is a from-scratch, dependency-free HTML5-canvas charting engine: a canvas rendering pipeline with vector export, no DOM per bar, nine bundle entry points, zero runtime dependencies.

Works the same whether the project is a downstream npm consumer app or an upstream openalgo-charts source checkout. Detect which one you are in and resolve every API name from whatever typings are locally available.

Source lookup order

Do not assume you are inside the upstream source repository.

  1. In a consumer app, inspect the installed package first:
    • node_modules/openalgo-charts/package.json for the actual version.
    • node_modules/openalgo-charts/dist/index.d.ts for the base API surface, and dist/{trade,draw,indicators,transform,profile,webgl,widget,workspace}/index.d.ts for each tier.
  2. In the upstream repo, inspect dist/index.d.ts first, then src/ if generated output is unavailable.
  3. ARCHITECTURE.md and website/pages/docs/*.mdx are supporting evidence, but local typings win when they disagree.

Verify before answering (copy-paste):

sh
node -p "require('./node_modules/openalgo-charts/package.json').version"
rg -n "createChart|addSeries|addIndicator|DrawingController|OrderEngine" node_modules/openalgo-charts/dist/index.d.ts
# upstream checkout instead of a consumer app:
rg -n "createChart|addSeries|addIndicator" dist/index.d.ts src/index.ts
# which tiers does this project actually load?
rg -n "from 'openalgo-charts" src app

If the relevant file is unavailable, say what could not be verified. Do not invent option names, methods, exports, event names, or indicator ids.

Mental model

Eight layers, in dependency order. Most bugs come from confusing one for another.

  1. Chart - createChart(container, options) returns a Chart. One chart per container element. It owns everything below.
  2. DataLayer - one per chart. Merges every series by time onto a single shared logical index space 0..N-1. This is the load-bearing idea; see rule 2 below.
  3. Scales - chart.timeScale maps logical index to x; each pane's PriceScale maps price to y. Panes autoscale independently.
  4. Panes - vertically stacked drawing regions, each with two canvases (base + overlay) and up to three price scales ('right', 'left', '' overlay).
  5. Series - chart.addSeries(type, options) returns a SeriesApi. The type names an entry in the chart-type registry; the core never switches on type.
  6. Registries - chart types, indicators, and drawing tools are all descriptors in a Map. Adding one is a registration, never a core change.
  7. Primitives - the extension point. Anything that draws but is not a series: price lines, markers, legends, profiles, trading pills, drawings.
  8. Tiers - indicators, draw, transform, profile, trade, webgl are separate bundles that register what they add on import (the draw tier into its own tool registry, the others into the base engine's registries); widget sits above them all and is the one tier that builds DOM.

Install and tiers

bash
npm install openalgo-charts

Import only what you use. Each tier is a separate entry point, so a feature you do not load costs zero bytes. The workspace tier is pure configuration and persistence; it registers nothing.

ImportContentsBrotli limit
openalgo-chartsEngine, 13 chart types, panes and scales, primitives, registries, chart state and settings schema, market replay, symbol comparison, chart linking with appearance adapters, grouped timeline events, shared loading controller, request pool, warm-load bar cache, interval registry, chart timezone, trading visualization, OpenAlgo feeds, EMA/RSI/ATR/Supertrend calculators, vector SVG export, the render backend port95.50 kB
openalgo-charts/indicators112 built-in indicators + the Tier-2 external-data contract30 kB
openalgo-charts/draw87 drawing tools, including Anchored VWAP and fixed-range Volume Profile, opt-in drawing links and a headless DrawingController with multi-select, z-order, a per-tool settings schema, the 1.9.x migration, the clipboard and the icon builders41 kB
openalgo-charts/transformHeikin Ashi, Renko, Range bars, Line Break, Point and Figure, Kagi6 kB
openalgo-charts/profileVolume Profile, Market Profile (TPO), Footprint, order flow15 kB
openalgo-charts/tradeOrder engine, state machine, order/position/bracket lines, DOM ladder103.50 kB with base
openalgo-charts/webglThe WebGL2 series backend behind renderer: 'auto' | 'webgl2'; composites into the pane's canvas, falls back to 2D for the session on context loss7 kB
openalgo-charts/widgetcreateWidget: the chart with a top bar, drawing rail, responsive mobile controls, status line, settings and indicator dialogs, drawing properties, event details, right-click menu, keymap and optional persistence. The only tier that ships DOM; imports the draw tier itself51.50 kB
openalgo-charts/workspacePortable workspace/template documents, asynchronous catalog repository and atomic IndexedDB adapter; no UI or market data6 kB

Limits are the CI-enforced budgets in .size-limit.json. This reference targets 2.6.0; a section marked (unreleased) is on the main branch only and is not in that release. In a source checkout, run npm run size before quoting byte counts. In a consumer app, check the installed version and measure its actual imports with the app's bundler. Reference measurements and every budget row live in bundling-and-tiers.

The clipboard lives in the draw tier, not the base one, because it needs the drawing-tool registry. DrawingClipboard and friends come from openalgo-charts/draw.

The 60-second chart

ts
import { createChart } from 'openalgo-charts';

const chart = createChart(document.getElementById('chart')!);
const series = chart.addSeries('candlestick');

series.setData([
  { time: 1705286700, open: 100, high: 101, low: 99.5, close: 100.6, volume: 1200 },
  { time: 1705286760, open: 100.6, high: 101.4, low: 100.2, close: 101.1, volume: 900 },
]);

chart.fitContent();

time is UTC seconds. The container must have a non-zero size before the chart can lay out.

Non-negotiable rules

  1. Time is UTC seconds everywhere, never milliseconds. Math.floor(Date.now() / 1000), not Date.now(). Feed adapters convert broker formats at the edge. Which wall clock those seconds are labelled in is ChartOptions.timezone, an IANA name defaulting to Asia/Kolkata; never offset the timestamps themselves to fake a zone, or every session anchor and gap moves with them.
  2. The time axis is gapless and index-based, not timestamp-proportional. x is logicalIndex * barSpacing, so weekends, holidays and session breaks have no index and collapse to nothing. Never compute an x from a timestamp difference; use chart.timeToCoordinate(t) or chart.timeScale.
  3. One bar per time per series, ascending. Duplicate times collapse to the last one written.
  4. Nothing crosses a chart boundary as a logical index. Sync by instant. Because rule 2 makes the index a property of that chart's own bars, index 300 is a different moment on every chart in a grid. Any value passed between charts (a linked crosshair, a shared viewport, a highlighted bar) converts index to time on the sender with indexToTimeFloat and time back to index on the receiver with timeToIndex / timeToIndexFloat, against that chart's own DataLayer. createLinkGroup, followerIndex and followerRange do this; a hand-rolled b.setVisibleLogicalRange(a.getVisibleLogicalRange()) does not, and it looks correct until the two charts hold different bars. An instant outside the receiver's first or last bar is an absence: draw nothing rather than clamping to an edge bar. See chart-linking.
  5. Never cache the forming bar. A closed bar is immutable; the last bar is alive until its interval ends. Serving a snapshot of it puts a stale close on the last-price line, the axis tag, the header LTP and every indicator computed off it, with no spinner and no staleness badge. withBarCache drops trailing unclosed bars for this reason. A fast wrong price is a worse failure than a slow right one on a chart that draws Buy and Sell buttons.
  6. Never deep-import. import { X } from 'openalgo-charts' or a published tier specifier only. A deep path into dist/ internals inlines a second copy of the registry Map, and createChart will never see what your tier registered. See rollup.config.js.
  7. A tier must be imported before its features resolve. chart.addIndicator('macd') needs import 'openalgo-charts/indicators'; addSeries('kagi') needs import 'openalgo-charts/transform' and throws a specific tier-naming error without it.
  8. Price-scale margins are fractions of the pane height, not padding on the data span. The data band occupies 1 - marginTop - marginBottom of the pane.
  9. Drawing anchors are { time, price }, never pixels. Pixel anchors slide the moment a gap collapses or the user zooms.
  10. Canvas drawing happens in bitmap pixels. Multiply media px by dpr in any custom primitive, or it blurs and misaligns on HiDPI.
  11. chart.trading renders trade state; it does not place orders. The host pushes exchange state in and turns the emitted trading:* events into broker calls. The transactional path is openalgo-charts/trade.
  12. The engine ships no DOM chrome; openalgo-charts/widget is the one tier that does. The base and the seven non-widget optional tiers have no toolbar, no dialogs, no settings forms, no command palette. Drawing tools, indicator settings, replay transports and order menus are the host's UI, driven by descriptors and events. A host that does not want to write that chrome imports the widget tier and calls createWidget (see widget); a host that does gets the description of that UI: chartSettingsSchema(chart) for a settings dialog, the contextmenu event for a right-click menu, and chart.priceAxisState(...) for a menu raised on a price axis. Chrome you write is held to the UI standard in themes-and-styling: styled scrollbars, small square swatches, paired up/down colours on one row, themed form controls, and no control with nothing behind it.
  13. A control with no data in the current context is rendered disabled, not hidden. PriceLevels.available(kind) and PriceAxisState.active / scaled / movable exist to be read for exactly this. Hiding it loses the information that the state is off.
  14. Never use emojis or icons in code, comments, logs, or generated UI text. Project rule.

References

Detailed reference for each topic is in references/. Read the one that matches the task before writing code.

ReferenceTopic
core-apicreateChart, ChartOptions, SeriesApi, lifecycle, coordinate conversion, the render/invalidation model
chart-typesAll 13 base series types, their styles and autoscale rules, runtime type switching
scales-and-panesPrice/time scale options, log and inverted modes, left/right/overlay scales, per-axis state and moves, axis chrome (corner clock, bar countdown, tick priority), pane weights and layout
themes-and-stylingChartTheme keys, dark/light, gradients, SeriesStyle precedence, price formatting, and the UI standard for host chrome
data-and-timeBar shape, UTC seconds, the chart timezone and the time helpers, setData/update/prependData, the logical-index model, history paging, tick and volume bars
feeds-and-liveDataFeed contract, OpenAlgo REST/WS/live feeds, CandleBuilder, the interval registry, withBarCache warm loading, writing a custom feed
events-and-stateThe full event catalogue with payloads, getState/restoreState, saved layouts
alertsHeadless trader alerts, confirmed versus intrabar timing, lifecycle, expiry and host delivery
indicatorsThe 112 built-ins with exact ids, placements and input defaults, the settings model, levels/ranges/fills, signal markers, registerIndicator, the Tier-2 external-data contract
transformsHeikin Ashi, Renko, Range, Line Break, Point and Figure, Kagi
drawing-toolsThe 87 tools, DrawingController, anchors, magnet, undo, copy/cut/paste and the clipboard payload, persistence, shortcuts, custom tools
primitives-and-pluginsIPrimitive, z-order, hit-testing, the dpr contract, built-in primitives including the PriceLevels reference-level family, registerChartType
replay-and-compareReplayController and its transport events, addComparison, the overlay-scale mechanism, timestamp alignment
chart-linkingcreateLinkGroup, the sync-by-instant rule, followerIndex / followerRange, the linked crosshair, host-driven symbol, interval and chart type sync, appearance adapters, the drawings channel over DrawingLinkGroup, and saved link groups (WorkspaceSync)
settings-and-menuschartSettingsSchema and its round trip, the five tabs, the colorPair row, the timezone control, canvas options (grid, crosshair, scales, margins), status-line switches, the contextmenu event and the price-axis menu
tradingThe data-driven on-chart trading layer, trading:* events, order/position/bracket lines
trade-tierOrderEngine, order state machine, validation, analyzer mode, DOM ladder, broker adapters
profiles-and-orderflowVolume Profile, Market Profile (TPO), Footprint, cumulative delta, the trade-data dependency
react-integrationReact and Next.js lifecycle, keeping orchestration out of React, SSR, resize
vue-integrationVue 3 composable and component, keeping the chart out of ref()/reactive(), props to data, KeepAlive, Nuxt
bundling-and-tiersEntry points, registry identity, tree-shaking, script/ESM/import-map loading, size budget
widgetcreateWidget and the widget tier: options, the handle, events, the context every dialog is handed, the keymap scopes, the tokens, every exported mount and helper, packaging
workspacesPortable multi-chart workspaces, indicator templates, async catalog transactions, account namespaces and atomic browser storage
interactionsTwo-axis panning, optional horizontal mouse/pen pan, axis drag, navigator reset, default visible bars, keyboard and accessibility
host-integrationHidden-tab startup, paging/replay isolation, stale async work, registration readiness, and upstream browser validation
pitfallsThe verified foot-gun list. Read this when something behaves unexpectedly
Show full SKILL.md (1,183 more words)Show less

Triage

User asks aboutFirst checkAnswer withAvoid
First chart / blank chartcontainer size, dist presentcreateChart + addSeries + setData; hidden charts fit on their first measurable layoutassuming data needs to be fetched again when a tab opens
Upgrade a 1.9.x drawing hostdrawing modelDrawingText, FibLevel[], versioned drawings, multi-selection and schema controlswriting text into DrawingStyle or treating toJSON() as an array
Recent-bar default / chart drifts verticallynavigationnavigation.defaultVisibleBars, horizontal mousePan, resetScale()trimming history or overriding the preference with fitContent()
Trackpad zoom or price jumps during navigationinteractionsnormalized proportional wheel input, price-axis scaling and animAutoscalemapping every wheel event to the same zoom step or replacing a manual price range
Touch controls or a narrow dashboard chartwidgetmobile: 'auto', 'always' or 'never'; shared drawing state and tool allowlistassuming the headless engine supplies widget chrome
Compact TPO or demo palettesprofilesper-session split, markers, explicit palette optionsinventing a library theme preset
Replay changes during recovery / late symbol responsehost integrationgeneration and request-owner guards around every writerassuming replay owns the host feed or timers
Bars in the wrong placeunits of timeUTC secondsDate.now() milliseconds
Axis shows the wrong hourschart.timezone()timezone: 'America/New_York' on createChart, or setTimezoneshifting bar timestamps, or a timeFormatter that only relabels
Gaps for weekendsthe gapless-axis ruleit is intended; whitespace points if you want a gapshifting timestamps
Realtime tickslast-bar vs full replaceseries.update(bar)setData on every tick
Loading older historysetHistoryLoaderprependData + historyLoadCompleterebuilding and re-fitting
Indicator not foundis the tier importedimport 'openalgo-charts/indicators'registering it by hand
Which indicator id to usethe catalogue in indicatorsthe exact id from the 112-row table, guarded with hasIndicator(id)guessing an id from the display name
Indicator settings UIdescriptor inputs + generated style keysbuild the form from the descriptor, apply with setSettings; or openalgo-charts/widget (mountIndicatorSettings, or the whole terminal via createWidget) for a host that does not want to write chromeexpecting the engine itself to have a dialog
Drawing toolsDrawingControllerheadless controller + host toolbar; or createWidget from openalgo-charts/widget, which ships the railexpecting the engine itself to have a toolbar
Volume in its own panepaneIndex and priceScaleIdaddSeries('histogram', { paneIndex: 1 })a second chart
Volume inside the price paneoverlay scalepriceScaleId: '' plus scale marginsmanual y math
Placing real orderswhich layeropenalgo-charts/trade OrderEnginechart.trading (visualization only)
Order lines on the chartwhich layerchart.trading sync + trading:* eventsdrawing your own price lines
Custom overlayprimitive vs chart typeIPrimitive + addPrimitivea custom chart type for decoration
Bar-by-bar replayReplayControllerheadless controller + host transport bar; indicators rebuild from the prefixa second chart, or slicing data by hand
Two symbols on one chartaddComparisonhidden overlay scale + a rebasing pane modea second series on the same price axis
A grid of charts moving togethercreateLinkGroupindependent cursor, viewport, symbol, interval, chart type, appearance and drawings channels (drawings moved by the draw tier's DrawingLinkGroup); everything syncs by time, never by logical indexcopying getVisibleLogicalRange() between charts
Linked crosshair shows the wrong barthe index-to-time conversionfollowerIndex(target.dataLayer, time, whenMissing)assuming index N is the same instant on both charts
Port a study that reads a higher timeframe, draws ahead of the last bar, or compares against another symbolcoverage additions (2.4.0)securitySeries, plot.offset, ctx.requestBars with chart.setBarsProvider, IndicatorInputErrorfolding bars by hand, emitting future times into the axis, or fetching a benchmark from inside calc
Slaving the symbol across chartswho owns the instrumentthe host emits 'symbol' / calls setSymbol, each member gets an onSymbol loaderexpecting the engine to know what a symbol is
Copy and paste a drawingdraw.copy() / cut() / paste()await them; the host owns the key chordsa synchronous call, or throwing on foreign clipboard text
Refetching the same bars on every switchwithBarCache(feed, opts)wrap the feed; key is symbol/exchange/interval, range is slicedcaching the forming bar, or keying on the range
A monthly / tick / volume timeframeregisterIntervala Bucketing rule (calendar, ticks, volume), then bucketStartOfintervalToSeconds on a code that has no fixed length
Unknown interval codeisKnownInterval(code)validate the picker; resolveInterval throws UnknownIntervalErrorcatching the throw and defaulting to 60 seconds
Percent / rebased axispriceScale.mode'percentage' or 'indexed-to-100' plus a baselinerecomputing the data into percentages
Settings dialogchartSettingsSchema(chart)render the tabs, round-trip with read/applyChartSettings; or mountSettingsDialog / createWidget from openalgo-charts/widgethardcoding a control list
Right-click menucontextmenu eventpreventDefault() + target.kindhit-testing the pointer yourself
Menu on a price axistarget.side / target.scaleIdchart.priceAxisState(pane, scaleId), acted on by the setPriceAxis* callsassuming pane 0's right scale
Previous close, session high/low, bid/ask linesPriceLevelsone primitive, one options group per level, line and label togethera PriceLine per level with its own tag bookkeeping
A level or axis row with no dataavailable(kind), state.activerender it disabled with its state visiblehiding the control
Corner clock, bar-close countdownChartOptions.axisChrome{ sessionClock: true, barCountdown: true }, plus a clock for a delayed feeda DOM overlay positioned over the axis
Named multi-chart layouts and templatesworkspacesWorkspaceRepository plus a storage adapter; each pane carries getState()treating a single chart snapshot as the whole host workspace
Watchlists with live prices, or symbol newswidget, workspacesWatchlistRepository plus a QuoteFeed and a NewsFeed, as the widget's watchlist and news optionspricing a row from the last candle, or rendering provider text as HTML
React lifecyclewhere the chart instance livescreate in an effect, hold in a ref, chart.destroy() on cleanupchart instance in state
Vue lifecycle, or replay and picks misbehaving in a Vue appis the chart in ref() or reactive()shallowRef or markRaw, create in onMounted, destroy() in onBeforeUnmount; see vue-integrationref(chart), which hands back a proxy the library does not recognise as its chart
Bundle sizewhich tiers are importeddrop the unused tier importcode-splitting the base

Core API cheat sheet

Verified names. Get these wrong and nothing works.

ts
// chart
const chart = createChart(el, options);
chart.addSeries(type, { paneIndex, style, priceScaleId, priceFormat });
chart.addIndicator(id, settings, { paneIndex });   // needs the indicators tier
chart.addPriceLine(opts, paneIndex);
chart.addPrimitive(primitive, paneIndex);
chart.fitContent();                       // explicitly fit all loaded history
chart.resetScale();                       // preferred default view + all price scales
chart.setNavigationOptions({ mousePan: 'both', defaultVisibleBars: 120 });
chart.navigationOptions();
chart.applyOptions({ theme, grid, canvas, statusLine, priceScale, priceFormatter, timeFormatter, timezone, crosshairMode });
chart.setTheme(theme);
chart.setTimezone('America/New_York') / chart.timezone();   // IANA name, default 'Asia/Kolkata'
chart.panes();                          // readonly Pane[]
chart.primarySeries() / chart.primarySeriesInfo();
chart.setCanvasOptions(opts) / chart.setStatusLineOptions(opts) / chart.setPriceScaleOptions(opts);
chart.setAxisChromeOptions({ sessionClock: true, barCountdown: true }) / chart.axisChromeOptions();

// one price axis at a time (what a menu on an axis strip acts on)
chart.priceAxisState(paneIndex, scaleId);               // PriceAxisState | null
chart.setPriceAxisOptions(paneIndex, scaleId, patch);
chart.setPriceAxisAutoFit(paneIndex, scaleId, on);
chart.setPriceAxisLockRatio(paneIndex, scaleId, on);    // boolean
chart.movePriceAxis(paneIndex, 'right', 'left');        // boolean
PRICE_SCALE_MODES;                      // ['linear','logarithmic','percentage','indexed-to-100']
chart.getState() / chart.restoreState(state);
chart.on(event, cb);                    // returns an unsubscribe function
chart.subscribeCrosshairMove(cb);
chart.timeToCoordinate(t) / chart.coordinateToTime(x);
chart.priceToCoordinate(p, paneIndex) / chart.coordinateToPrice(y, paneIndex);
chart.destroy();                        // idempotent; emits 'destroy', then drops every listener
chart.isDestroyed;                      // getter, not a method

// getters, not methods
chart.timeScale;   // TimeScale
chart.dataLayer;   // DataLayer
chart.trading;     // TradingController, created on first access
chart.shortcuts;   // ShortcutManager | null

// series handle
series.setData(items);
series.update(item);
series.prependData(items);
series.getData();
series.applyOptions({ visible: false });   // not setStyle
series.priceScale();
series.createMarkers();
series.remove();

// headless controllers, base bundle, no tier import
new ReplayController(chart, { bars, startIndex, barMs });  // seek/step/play/pause/stop/state
addComparison(chart, { symbol, bars });                    // setBars/remove/list/alignment
chartSettingsSchema(chart) / readChartSettings(chart) / applyChartSettings(chart, patch);

// linked chart grid (base bundle). Syncs by INSTANT, never by logical index.
const group = createLinkGroup({ crosshair: true, viewport: true, symbol: false, whenMissing: 'nearest' });
group.add(chart, { symbol: 'RELIANCE', onSymbol: (s, c) => loadBars(s, c) });
group.remove(chart) / group.setOptions(patch) / group.setSymbol(chart, s) / group.destroy();
group.members() / group.has(chart) / group.symbol() / group.crosshairIndex(chart);
followerIndex(followerDataLayer, timeSec, 'nearest' | 'hide');   // number | null
followerRange(leaderDataLayer, followerDataLayer, range);        // LogicalRange | null

// warm-load bar cache: wraps ANY DataFeed (base bundle)
const feed = withBarCache(sourceFeed, { ttlMs, max, maxBars, storage, now, barCloses });
feed.getBars({ symbol, exchange, interval, from, to, noCache: true });
feed.invalidate({ symbol, exchange, interval }) / feed.clear() / feed.stats() / feed.source;

// interval registry (base bundle): a bucketing rule, not a duration
registerInterval({ code: '1MO', bucketing: { mode: 'calendar', unit: 'month', count: 1 } });
resolveInterval(code)        // throws UnknownIntervalError
tryResolveInterval(code) / isKnownInterval(code) / registeredIntervals() / unregisterInterval(code);
bucketStartOf(bucketing, timeSec, zone?) / nextBucketStart(...) / isTimeBucketed(bucketing);

// drawing clipboard (draw tier) - all async
await draw.copy(target?) / await draw.cut(target?) / await draw.paste();
draw.clipboard().lastError();

// reference levels (a primitive: previous close, session high/low, bid/ask, ...)
const levels = new PriceLevels({ levels: { previousClose: { line: true, label: true } } });
chart.addPrimitive(levels);   // the price pane, wherever it sits
levels.setLevel(kind, patch) / levels.setQuote(q) / levels.values() / levels.available(kind);
computePriceLevels({ bars, anchorTime });   // the same numbers, pure, no canvas

chart.fitContent() takes no arguments; chart.timeScale.fitContent(barCount) does.

Code-generation rules

  • Verify option names against local typings before writing them. Many similarly named options exist at chart, series, pane and scale level. Confirm which level owns the option.
  • Minimal snippets. One feature per code block. Combining an indicator, a drawing tool and a trading line in one snippet hides which API does what.
  • Import from the package entry or a published tier specifier. Never a deep path.
  • Match the user's host. A React user wants the effect lifecycle; a Vue user wants the composable with a shallowRef; a vanilla user wants neither; a no-bundler user gets <script type="module"> from dist/ or a CDN, or the script-tag files when the page cannot load modules.
  • State which tier a feature needs whenever the answer uses one.
  • Do not invent. If a name does not appear in the installed typings or upstream source, it does not exist.

Answer contract

When answering an openalgo-charts question:

  1. Name the API and the tier it lives in.
  2. Show one minimal snippet, not a mega-demo.
  3. Call out the main foot-gun for that task, from pitfalls.
  4. Say what local source was checked (version, typings), or state that it could not be verified.

© marketcalls, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 26 other files (references) in .github/skills/openalgo-charts of marketcalls/openalgo-charts.

  • SKILL.md
  • references/alerts.md
  • references/bundling-and-tiers.md
  • references/chart-linking.md
  • references/chart-types.md
  • references/core-api.md
  • references/data-and-time.md
  • references/drawing-tools.md
  • references/events-and-state.md
  • references/feeds-and-live.md
  • references/host-integration.md
  • references/indicators.md
  • references/interactions.md
  • references/pitfalls.md
  • references/primitives-and-plugins.md
  • references/profiles-and-orderflow.md
  • references/react-integration.md
  • references/replay-and-compare.md
  • references/scales-and-panes.md
  • references/settings-and-menus.md
  • … and 7 more

Open the folder on GitHubat commit 8b4cffe

Compare with similar skills

Openalgo Charts next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Openalgo Charts compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Openalgo Charts this skillmarketcalls/openalgo-charts146—~7.6kAutomated safety check: PassApache-2.0
Vercel Composition Patternssupabase/supabase111k58 repos~726Automated safety check: PassMIT
Finishing a Development Branchobra/superpowers297k5 repos~1.9kAutomated safety check: PassMIT
Typescript Advanced Typesrolling-scopes/rsschool-app10k25 repos~4.2kAutomated safety check: PassMPL-2.0
PR Babysitteropeninterpreter/openinterpreter69k3 repos~4.2kAutomated safety check: PassApache-2.0
Code Review ChecklistshareAI-lab/learn-claude-code78k4 repos~1.1kAutomated safety check: PassMIT

Similar skills

  • Official

    React composition patterns that scale. An agent skill from supabase/supabase.

    111k GitHub starsUsed in 58 repos~726 tokens
    DevelopmentAuto-check passed
  • Walks the last step of a branch: confirm tests pass, detect the git environment, ask how to integrate, carry out your choice and clean up the worktree.

    297k GitHub starsUsed in 5 repos~1.9k tokens
    DevelopmentAuto-check passed
  • Typescript Advanced Types

    rolling-scopes/rsschool-app

    Master TypeScript's advanced type system including generics, conditional types, mapped types, template literals, and utility types for building type-safe applications.

    10k GitHub starsUsed in 25 repos~4.2k tokens
    DevelopmentAuto-check passed
  • PR Babysitter

    openinterpreter/openinterpreter

    Watches an open GitHub pull request until it merges, handling review comments, diagnosing CI failures and retrying flaky checks along the way.

    69k GitHub starsUsed in 3 repos~4.2k tokens
    DevelopmentAuto-check passed
  • Code Review Checklist

    shareAI-lab/learn-claude-code

    Reviews code against a five-part checklist covering security, correctness, performance, maintainability and testing, and reports findings in a fixed format.

    78k GitHub starsUsed in 4 repos~1.1k tokens
    DevelopmentAuto-check passed
  • Greploop

    onyx-dot-app/onyx

    Iteratively improves a PR (GitHub), MR (GitLab), or shelved changelist (Perforce) until Greptile gives it a 5/5 confidence score with zero unresolved comments.

    32k GitHub starsUsed in 4 repos~3.3k tokens
    DevelopmentAuto-check passed

More from marketcalls/openalgo-charts

  • Openalgo Chart Debug

    marketcalls/openalgo-charts

    Diagnose an openalgo-charts problem - blank or invisible chart, bars in the wrong place, unknown series type or indicator errors, misaligned indicators, drawings that drift, a chart that will not…

    146 GitHub stars~2.1k tokensUpdated 10 days ago
    Auto-check: notes
  • Openalgo Chart Indicator

    marketcalls/openalgo-charts

    Add a built-in openalgo-charts indicator, restyle it, build a settings UI from its descriptor, or author a custom indicator with registerIndicator or the Tier-2 external-data contract.

    146 GitHub stars~3.4k tokensUpdated 10 days ago
    Auto-check: notes
  • Openalgo Chart Plugin

    marketcalls/openalgo-charts

    Extend openalgo-charts with a custom primitive, drawing tool, chart type, or indicator descriptor.

    146 GitHub stars~1.1k tokensUpdated 10 days ago
    Auto-check: notes
  • Openalgo Chart Setup

    marketcalls/openalgo-charts

    Scaffold a working openalgo-charts chart in an existing project - detects the host (React, Next.js, Vue, vanilla bundler, or plain script tag), installs the right tiers, and writes a chart that…

    146 GitHub stars~1.4k tokensUpdated 10 days ago
    Auto-check: notes
  • Openalgo Chart Terminal

    marketcalls/openalgo-charts

    Build a full trading terminal on openalgo-charts - symbol search, interval switcher, chart-type picker, indicator menu, drawing rail with clipboard, live OpenAlgo REST plus WebSocket data behind a…

    146 GitHub stars~3.8k tokensUpdated 10 days ago
    Auto-check: notes

Categories

Questions about Openalgo Charts

What does Openalgo Charts do?

A skill your agent uses when building, configuring, extending or debugging openalgo-charts in a consumer app or the source repository, including chart navigation, drawing tools, indicators…. Openalgo Charts is an agent skill from marketcalls/openalgo-charts. Use when building, configuring, extending or debugging openalgo-charts in a consumer app or the source repository, including chart navigation, drawing tools, indicators, profiles, live feeds, replay, widgets and framework hosts.

When should I use Openalgo Charts?

Openalgo Charts fits situations like: debugging openalgo-charts in a consumer app; the source repository; including chart navigation; widgets and framework hosts.

How do I install Openalgo Charts in Claude Code?

Run `npx skills add marketcalls/openalgo-charts --skill openalgo-charts -a claude-code`. Or copy the skill folder (.github/skills/openalgo-charts in marketcalls/openalgo-charts) into .claude/skills/openalgo-charts in your project. Claude Code loads it when a task matches its description.

How do I install Openalgo Charts in Codex?

Run `npx skills add marketcalls/openalgo-charts --skill openalgo-charts -a codex`. Or copy the skill folder (.github/skills/openalgo-charts in marketcalls/openalgo-charts) into .agents/skills/openalgo-charts in your project. Codex loads it when a task matches its description.

Can I use Openalgo Charts in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add marketcalls/openalgo-charts --skill openalgo-charts -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/openalgo-charts, .gemini/skills/openalgo-charts, .github/skills/openalgo-charts and .opencode/skills/openalgo-charts in your project.

What does Openalgo Charts need to run?

Going by SKILL.md and its folder, Openalgo Charts needs the command-line tools its instructions call (rg, npm and node). Our summary lists: Node.js.

Does Openalgo Charts access the network?

SKILL.md contains no URLs. Its commands use npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Openalgo Charts safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Openalgo Charts use?

Openalgo Charts is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Openalgo Charts use?

About 7.6k tokens (SKILL.md is roughly 30k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 267k tokens, read only when the agent opens those files.

What are the alternatives to Openalgo Charts?

Skills that share tags, products or a category with Openalgo Charts: Vercel Composition Patterns (supabase/supabase, 111k stars), Finishing a Development Branch (obra/superpowers, 297k stars), Typescript Advanced Types (rolling-scopes/rsschool-app, 10k stars) and PR Babysitter (openinterpreter/openinterpreter, 69k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Openalgo Charts?

marketcalls (a GitHub user) maintains it in marketcalls/openalgo-charts, which has 146 GitHub stars. The repository holds 6 skills in this directory. The repository was last updated on October 1, 2026.

Source: marketcalls/openalgo-charts on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.