Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Detects chart patterns in OHLC data from natural-language hypotheses or visual chart selections.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | 514% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -16% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 99% | 0% |
| case-11 | ✗→✓ | ▲ Improved | -8% | 0% |
| case-12 | ✗→✓ | ▲ Improved | -8% | 0% |
Turn a trader's pattern idea — either written in natural language or drawn directly on the chart — into a runnable JavaScript detection script that scans the active OHLC dataset and returns match regions. Vibe Trade loads the script into the code editor, runs it against the data, and surfaces results in the Pattern Analysis bottom-panel tab.
This skill is the go-to for any "find me X in the price history" question.
Vibe Trade should dispatch to the Pattern Skill when the user:
bottom", "head and shoulders", "ascending triangle", "breakout", etc.
serialized SHAPE: [...] fingerprint arrives as the user's message)
oscillator with z-score normalization", etc.
SHAPE: and Sliding window):trend, the volatility, the implied direction?
context.pending_fingerprintand waits for a yes/proceed before dispatching again.
context.pending_fingerprintis set and the user said yes), generate a shape-matching script:
0.50 — NOT 0.85+. Strictthresholds silently produce zero matches, which looks like the skill is broken.
script_editor.load with the generated JS.bottom_panel.activate_tab → pattern_analysis.correlation.
stop"):
for insufficient data).
script_type: "indicator" so the frontend registersit in the Resources dropdown.
(edit mode — context.pattern_script is non-empty):
chat feedback inline.
| Key | Type | Meaning | |---|---|---| | message | string | Natural-language description or SHAPE fingerprint | | context.pending_fingerprint | string | Previously-analyzed fingerprint awaiting confirmation | | context.pattern_script | string | Existing script — triggers edit-mode | | context.dataset_id | string | Active dataset id (used when running the script) |
Returns a SkillResponse with:
reply — short plain-language explanation of the scriptscript — the generated JavaScript sourcescript_type — "pattern" / "indicator" / "pine_convert"data.parameters — parameter hints extracted from the scriptdata.indicators_used — list of indicator helpers referenceddata.default_params / data.indicator_name — indicator mode onlytool_calls — see belowThis skill may emit any of the following tool_calls:
| Tool | When | Payload | |---|---|---| | chart.pattern_selector | User asks to "mark a pattern" or similar | true to open, false to close | | chart.highlight_matches | After a successful run with matches | PatternMatch[] | | chart.draw_markers | To annotate specific bars | Marker[] | | chart.focus_range | To zoom the chart to a match region | {startTime, endTime} | | script_editor.load | Always, when a script is generated | The JS source string | | script_editor.run | When the user asks "run it now" | — | | bottom_panel.activate_tab | After generating a script | "pattern_analysis" | | bottom_panel.set_data | To push results into a tab's store slot | {target, data} | | notify.toast | Non-blocking status ("Found 7 matches") | {level, message} |
Natural-language input > "Find bull flags after a 5% rally."
→ Returns a script that scans for a strong uptrend followed by a consolidation in a downward-sloping channel, with 3% tolerance on the flag bounds. Script loads into the editor; bottom panel switches to Pattern Analysis.
Indicator input > "Custom RSI smoothed with a 20-period EMA."
→ Returns an indicator function with default_params = {rsi_period: 14, ema_period: 20}. The frontend registers it in Resources and enables it on the chart.
Fingerprint input (from chart.pattern_selector) > Find this 285-bar pattern (scale-free): > SHAPE: [0.02, 0.25, 0.67, ...] > Sliding window: 285 bars
→ First pass: analyze the shape, ask for confirmation. → On confirmation: generate a correlation-based detector with threshold 0.50 and fallback-to-top-5 so the user always has something to look at.
This skill is wired through core/agents/processors.py::_pattern_processor, which calls core/agents/pattern_agent.py::PatternAgent.generate. The agent owns PATTERN_SYSTEM_PROMPT, INDICATOR_SYSTEM_PROMPT, and PINE_CONVERT_PROMPT.
Other measured skills in the registry, with their headline benchmark lift.