[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6JKVME5XTW0RV61665P9PV2":3,"skill-same:01M6JKVME5XTW0RV61665P9PV2":90},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":61,"commitSha":62,"skillDirectory":63,"forksCount":64,"repositoryHtmlUrl":65,"repositoryHomepageUrl":66,"ownerHtmlUrl":67,"ownerBlogUrl":68,"ownerDescription":6,"updatedAt":69,"install":70,"resources":83},"01M6JKVME5XTW0RV61665P9PV2","Vincent - Trading Engine for agents",null,"Strategy-driven automated trading for Polymarket and HyperLiquid. Use this skill when users want to create\ntrading strategies, set stop-loss\u002Ftake-profit\u002Ftrailing stop rules, or manage automated trading.\nTriggers on \"trading strategy\", \"stop loss\", \"take profit\", \"trailing stop\", \"automated trading\",\n\"trading engine\", \"trade rules\", \"strategy monitor\".","LongLeo287\u002FOmniClaw","LongLeo287","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F141803367?v=4","01M6JK75C62VCNZKR5BRZ386YV","LongLeo","01M6JK75GQ78TSP1ZPXNKK3MCH",9,"MIT","https:\u002F\u002Fgithub.com\u002FLongLeo287\u002FOmniClaw\u002Fblob\u002Fmain\u002Fecosystem\u002Fskills\u002Fagent_skills\u002Ftrading_engine\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"for","Vincent   Trading Engine for agents","engine","trading","take","stop-loss","users","triggers","strategies","manage","stop","openclaw","use","strategy","write","read","Rules","state","create","github","2026-11-10 10:12:30",false,"---\nname: Vincent - Trading Engine for agents\ndescription: |\n  Strategy-driven automated trading for Polymarket and HyperLiquid. Use this skill when users want to create\n  trading strategies, set stop-loss\u002Ftake-profit\u002Ftrailing stop rules, or manage automated trading.\n  Triggers on \"trading strategy\", \"stop loss\", \"take profit\", \"trailing stop\", \"automated trading\",\n  \"trading engine\", \"trade rules\", \"strategy monitor\".\nallowed-tools: Read, Write, Bash(npx:@vincentai\u002Fcli*)\nversion: 1.0.0\nauthor: HeyVincent \u003Ccontact@heyvincent.ai>\nlicense: MIT\nhomepage: https:\u002F\u002Fheyvincent.ai\nsource: https:\u002F\u002Fgithub.com\u002FHeyVincent-ai\u002FVincent\nmetadata:\n  clawdbot:\n    homepage: https:\u002F\u002Fheyvincent.ai\n    requires:\n      config:\n        - ${OPENCLAW_STATE_DIR:-$HOME\u002F.openclaw}\u002Fcredentials\u002Fagentwallet\n        - .\u002Fagentwallet\n---\n\n# Vincent Trading Engine - Strategy-Driven Automated Trading\n\nUse this skill to create and manage automated trading strategies for Polymarket prediction markets and HyperLiquid perpetuals\u002Fspot. The Trading Engine combines driver-based monitoring (web search, Twitter, newswire, price feeds) with a signal pipeline and LLM-powered decision-making to automatically trade based on your thesis. It also includes standalone stop-loss, take-profit, and trailing stop rules that work without the LLM.\n\nAll commands use the `@vincentai\u002Fcli` package.\n\n## How It Works\n\n**The Trading Engine is a unified system with two modes:**\n\n1. **LLM-Powered Strategies** — Create a versioned strategy with a structured thesis, weighted drivers (web search keywords, Twitter accounts, newswire topics, price triggers), and an escalation policy. When drivers detect new information, signals are scored and batched. When the escalation threshold is met, an LLM (Claude via OpenRouter) evaluates the signals against your thesis and decides whether to trade, update the thesis, set protective orders, or alert you.\n2. **Standalone Trade Rules** — Set stop-loss, take-profit, and trailing stop rules on positions. These execute automatically when price conditions are met — no LLM involved.\n\n**Architecture:**\n\n- Integrated into the Vincent backend (no separate service to run)\n- Strategy endpoints under `\u002Fapi\u002Fskills\u002Fpolymarket\u002Fstrategies\u002F...`\n- Trade rule endpoints under `\u002Fapi\u002Fskills\u002Fpolymarket\u002Frules\u002F...`\n- HyperLiquid rules use `venue: \"hyperliquid\"` and route through the HL adapter\n- Uses the same API key as the Polymarket or HyperLiquid skill (depending on venue)\n- All trades go through Vincent's policy-enforced pipeline\n- LLM costs are metered and deducted from the user's credit balance\n- Every LLM invocation is recorded with full audit trail (tokens, cost, actions, duration)\n\n## Security Model\n\n- **LLM cannot bypass policies** — all trades go through the venue's policy-enforced skill (`polymarketSkill.placeBet()` or `hyperliquidSkill.trade()`) which enforces spending limits, approval thresholds, and allowlists\n- **Backend-side LLM key** — the OpenRouter API key never leaves the server. Agents and users cannot invoke the LLM directly\n- **Credit gating** — no LLM invocation without sufficient credit balance\n- **Tool constraints** — the LLM's available tools are controlled by the strategy's `config.tools` settings. If `canTrade: false`, the trade tool is not provided\n- **Rate limiting** — max concurrent LLM invocations is capped to prevent runaway costs\n- **Audit trail** — every invocation is recorded with full prompt, response, actions, cost, and duration\n- **No private keys** — the Trading Engine uses the Vincent API for all trades. Private keys stay on Vincent's servers\n\n## Part 1: LLM-Powered Strategies\n\n### Core Concepts\n\n- **Instrument**: A tradeable asset on a venue. Defined by `id`, `type` (stock, perp, swap, binary, option), `venue`, and optional constraints (leverage, margin, liquidity, fees).\n- **Thesis**: Your directional view — `estimate` (target price\u002Fvalue), `direction` (long\u002Fshort\u002Fneutral), `confidence` (0–1), and `reasoning`.\n- **Driver**: A named information source that feeds the signal pipeline. Each driver has a `weight`, `direction` (bullish\u002Fbearish\u002Fcontextual), and `monitoring` config (entities, keywords, embedding anchor, sources, polling interval).\n- **Escalation Policy**: Controls when the LLM is woken up. `signalScoreThreshold` (minimum score to batch), `highConfidenceThreshold` (score that triggers immediate wake), `maxWakeFrequency` (e.g. \"1 per 15m\"), `batchWindow` (e.g. \"5m\").\n- **Trade Rules**: Entry rules (min edge, order type), exit rules (thesis invalidation triggers), auto-actions (stop-loss, take-profit, trailing stop, price delta triggers), and sizing rules (method, max position, portfolio %, max trades\u002Fday).\n\n### Signal Pipeline\n\nStrategies process information through a 6-layer pipeline:\n\n1. **Ingest** — Raw data from driver sources (web search, Twitter, newswire, price feeds, RSS, Reddit, on-chain, filings, options flow)\n2. **Filter** — Deduplication and relevance filtering. Drops signals already seen or below quality threshold\n3. **Score** — Each signal is scored (0–1) based on driver weight, embedding similarity to the anchor, and entity\u002Fkeyword matches\n4. **Escalate** — Scored signals are batched according to the escalation policy. Low-score signals accumulate in a batch window; high-confidence signals trigger immediate LLM wake\n5. **LLM** — The LLM evaluates batched signals against the current thesis. It can update the thesis, issue trade decisions, update driver states, or take no action\n6. **Execute** — Trade decisions pass through policy enforcement and are routed to the appropriate venue adapter for execution\n\n### Strategy Lifecycle\n\nStrategies follow a versioned lifecycle: `DRAFT` → `ACTIVE` → `PAUSED` → `ARCHIVED`\n\n- **DRAFT**: Can be edited. Not yet monitoring or invoking the LLM.\n- **ACTIVE**: Drivers are running. New signals trigger the pipeline.\n- **PAUSED**: Monitoring is stopped. Can be resumed.\n- **ARCHIVED**: Permanently stopped. Cannot be reactivated.\n\nTo iterate on a strategy, duplicate it as a new version (creates a new DRAFT with incremented version number and the same config).\n\n### Create a Strategy\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine create-strategy \\\n  --key-id \u003CKEY_ID> \\\n  --name \"BTC Momentum\" \\\n  --config '{\n    \"instruments\": [\n      { \"id\": \"btc-usd-perp\", \"type\": \"perp\", \"venue\": \"polymarket\" },\n      { \"id\": \"BTC\", \"type\": \"perp\", \"venue\": \"hyperliquid\" }\n    ],\n    \"thesis\": {\n      \"estimate\": 105000,\n      \"direction\": \"long\",\n      \"confidence\": 0.7,\n      \"reasoning\": \"ETF inflows accelerating, halving supply shock imminent\"\n    },\n    \"drivers\": [\n      {\n        \"name\": \"ETF Flow Monitor\",\n        \"weight\": 2.0,\n        \"direction\": \"bullish\",\n        \"monitoring\": {\n          \"entities\": [\"BlackRock\", \"Fidelity\"],\n          \"keywords\": [\"bitcoin ETF\", \"BTC inflow\"],\n          \"embeddingAnchor\": \"Bitcoin ETF institutional inflows\",\n          \"sources\": [\"web_search\", \"newswire\"]\n        }\n      },\n      {\n        \"name\": \"Crypto Twitter\",\n        \"weight\": 1.0,\n        \"direction\": \"contextual\",\n        \"monitoring\": {\n          \"entities\": [\"@BitcoinMagazine\", \"@saborskycnbc\"],\n          \"keywords\": [\"bitcoin\", \"BTC\"],\n          \"sources\": [\"twitter\"]\n        }\n      }\n    ],\n    \"escalation\": {\n      \"signalScoreThreshold\": 0.3,\n      \"highConfidenceThreshold\": 0.8,\n      \"maxWakeFrequency\": \"1 per 15m\",\n      \"batchWindow\": \"5m\"\n    },\n    \"tradeRules\": {\n      \"entry\": { \"minEdge\": 0.05, \"orderType\": \"limit\", \"limitOffset\": 0.01 },\n      \"autoActions\": { \"stopLoss\": -0.10, \"takeProfit\": 0.25, \"trailingStop\": -0.05 },\n      \"exit\": { \"thesisInvalidation\": [\"ETF outflows exceed $500M\u002Fweek\"] },\n      \"sizing\": {\n        \"method\": \"edgeScaled\",\n        \"maxPosition\": 500,\n        \"maxPortfolioPct\": 20,\n        \"maxTradesPerDay\": 5,\n        \"minTimeBetweenTrades\": \"30m\"\n      }\n    },\n    \"notifications\": {\n      \"onTrade\": true,\n      \"onThesisChange\": true,\n      \"channel\": \"none\"\n    }\n  }'\n```\n\n**Parameters:**\n\n- `--name`: Strategy name\n- `--config`: Full strategy config JSON (see Core Concepts above for structure)\n- `--data-source-secret-id`: Optional DATA_SOURCES secret ID for driver monitoring API calls\n- `--poll-interval`: Polling interval in minutes for driver monitoring (default: 15)\n\n### List Strategies\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine list-strategies --key-id \u003CKEY_ID>\n```\n\n### Get Strategy Details\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine get-strategy --key-id \u003CKEY_ID> --strategy-id \u003CSTRATEGY_ID>\n```\n\n### Update a Strategy\n\nUpdate a DRAFT strategy. Pass only the fields you want to change — config is a partial object.\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine update-strategy --key-id \u003CKEY_ID> --strategy-id \u003CSTRATEGY_ID> \\\n  --name \"Updated Name\" --config '{ \"thesis\": { \"confidence\": 0.8, \"reasoning\": \"Updated reasoning\" } }'\n```\n\n**Parameters:**\n\n- `--strategy-id`: Strategy ID (required)\n- `--name`: New strategy name\n- `--config`: Partial strategy config JSON — only include fields to update\n- `--data-source-secret-id`: DATA_SOURCES secret ID\n- `--poll-interval`: New polling interval in minutes\n\n### Activate a Strategy\n\nStarts driver monitoring and signal pipeline processing. Strategy must be in DRAFT status.\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine activate --key-id \u003CKEY_ID> --strategy-id \u003CSTRATEGY_ID>\n```\n\n### Pause a Strategy\n\nStops monitoring. Strategy must be ACTIVE.\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine pause --key-id \u003CKEY_ID> --strategy-id \u003CSTRATEGY_ID>\n```\n\n### Resume a Strategy\n\nResumes monitoring. Strategy must be PAUSED.\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine resume --key-id \u003CKEY_ID> --strategy-id \u003CSTRATEGY_ID>\n```\n\n### Archive a Strategy\n\nPermanently stops a strategy. Cannot be undone.\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine archive --key-id \u003CKEY_ID> --strategy-id \u003CSTRATEGY_ID>\n```\n\n### Duplicate a Strategy (New Version)\n\nCreates a new DRAFT with the same config, incremented version number, and a link to the parent version.\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine duplicate-strategy --key-id \u003CKEY_ID> --strategy-id \u003CSTRATEGY_ID>\n```\n\n### View Version History\n\nSee all versions of a strategy lineage.\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine versions --key-id \u003CKEY_ID> --strategy-id \u003CSTRATEGY_ID>\n```\n\n### View LLM Invocation History\n\nSee the LLM decision log for a strategy — what data triggered it, what the LLM decided, what actions were taken, and the cost.\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine invocations --key-id \u003CKEY_ID> --strategy-id \u003CSTRATEGY_ID> --limit 20\n```\n\n### View Cost Summary\n\nSee aggregate LLM costs for all strategies under a secret.\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine costs --key-id \u003CKEY_ID>\n```\n\n### View Performance Metrics\n\nSee performance metrics for a strategy: P&L, win rate, trade count, and per-instrument breakdown.\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine performance --key-id \u003CKEY_ID> --strategy-id \u003CSTRATEGY_ID>\n```\n\n### Driver Configuration\n\n#### Web Search Drivers\n\nAdd a driver with `\"sources\": [\"web_search\"]`. The engine periodically searches Brave for the driver's keywords and triggers the signal pipeline when new results appear.\n\n```json\n{\n  \"name\": \"AI News Monitor\",\n  \"weight\": 1.5,\n  \"direction\": \"bullish\",\n  \"monitoring\": {\n    \"keywords\": [\"AI tokens\", \"GPU shortage\", \"prediction market regulation\"],\n    \"embeddingAnchor\": \"AI technology investment trends\",\n    \"sources\": [\"web_search\"]\n  }\n}\n```\n\nEach keyword is searched independently. Results are deduplicated — the same URLs won't trigger the pipeline twice.\n\n#### Twitter Drivers\n\nAdd a driver with `\"sources\": [\"twitter\"]`. The engine periodically checks the specified entities for new tweets.\n\n```json\n{\n  \"name\": \"Crypto Twitter\",\n  \"weight\": 1.0,\n  \"direction\": \"contextual\",\n  \"monitoring\": {\n    \"entities\": [\"@DeepSeek\", \"@nvidia\", \"@OpenAI\"],\n    \"keywords\": [\"AI\", \"GPU\"],\n    \"sources\": [\"twitter\"]\n  }\n}\n```\n\nTweets are deduplicated by tweet ID — only genuinely new tweets trigger the pipeline.\n\n#### Newswire Drivers (Finnhub)\n\nAdd a driver with `\"sources\": [\"newswire\"]`. The engine periodically polls Finnhub's market news API and triggers the pipeline when new headlines matching your keywords appear.\n\n```json\n{\n  \"name\": \"Market News\",\n  \"weight\": 1.5,\n  \"direction\": \"contextual\",\n  \"monitoring\": {\n    \"keywords\": [\"artificial intelligence\", \"GPU shortage\", \"semiconductor\"],\n    \"sources\": [\"newswire\"]\n  }\n}\n```\n\nHeadlines and summaries are matched case-insensitively. Articles are deduplicated by headline hash with a sliding window.\n\n**Note:** Requires a `FINNHUB_API_KEY` env var on the server. Finnhub's free tier allows 60 API calls\u002Fmin. No per-call credit deduction.\n\n#### Price Triggers\n\nPrice triggers are evaluated in real-time via the Polymarket WebSocket feed. When a price condition is met, the signal pipeline is invoked with the price data.\n\nTrigger types:\n\n- `ABOVE` — triggers when price exceeds a threshold\n- `BELOW` — triggers when price drops below a threshold\n- `CHANGE_PCT` — triggers on a percentage change from reference price\n\nPrice triggers are one-shot: once fired, they're marked as consumed. The LLM can create new triggers if needed.\n\n### Thesis Best Practices\n\nThe thesis is your structured directional view. Good theses include:\n\n1. **A clear estimate**: Target price or value the market should reach\n2. **A confidence level**: Start at 0.5–0.7 and let the LLM adjust as new data arrives\n3. **Specific reasoning**: \"ETF inflows accelerating, halving supply shock imminent\" is better than \"BTC will go up\"\n4. **Explicit invalidation conditions**: Use `tradeRules.exit.thesisInvalidation` to define what would break your thesis\n\n### LLM Available Tools\n\nWhen the LLM is invoked, it can use these tools (depending on strategy config):\n\n| Tool                | Description                        | Requires                           |\n| ------------------- | ---------------------------------- | ---------------------------------- |\n| `place_trade`       | Buy or sell a position             | `canTrade: true` in trade rules    |\n| `set_stop_loss`     | Set a stop-loss rule on a position | `canSetRules: true` in trade rules |\n| `set_take_profit`   | Set a take-profit rule             | `canSetRules: true` in trade rules |\n| `set_trailing_stop` | Set a trailing stop                | `canSetRules: true` in trade rules |\n| `alert_user`        | Send an alert without trading      | Always available                   |\n| `no_action`         | Do nothing (with reasoning)        | Always available                   |\n\n### Cost Tracking\n\nEvery LLM invocation is metered:\n\n- **Token costs**: Input and output tokens are priced per the model's rate\n- **Deducted from credit balance**: Same pool as data source credits (`dataSourceCreditUsd`)\n- **Pre-flight check**: If insufficient credit, the invocation is skipped and logged\n- **Data source costs**: Brave Search (~$0.005\u002Fcall) and Twitter (~$0.005-$0.01\u002Fcall) are also metered. Finnhub newswire calls are free (no credit deduction)\n\nTypical LLM invocation cost: $0.05–$0.30 depending on context size.\n\n---\n\n## Part 2: Standalone Trade Rules\n\nTrade rules execute automatically when price conditions are met — no LLM involved. These are stop-loss, take-profit, and trailing stop rules that protect your positions.\n\n### Check Worker Status\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine status --key-id \u003CKEY_ID>\n# Returns: worker status, active rules count, last sync time, circuit breaker state\n```\n\n### Create a Stop-Loss Rule\n\nAutomatically sell a position if price drops below a threshold:\n\n```bash\n# Polymarket — triggerPrice is 0–1 (outcome token price)\nnpx @vincentai\u002Fcli@latest trading-engine create-rule --key-id \u003CKEY_ID> \\\n  --market-id 0x123... --token-id 456789 \\\n  --rule-type STOP_LOSS --trigger-price 0.40\n\n# HyperLiquid — triggerPrice is absolute USD price, marketId and tokenId are the coin name\nnpx @vincentai\u002Fcli@latest trading-engine create-rule --key-id \u003CKEY_ID> \\\n  --venue hyperliquid --market-id BTC --token-id BTC \\\n  --rule-type STOP_LOSS --trigger-price 95000\n```\n\n**Parameters:**\n\n- `--venue`: `polymarket` (default) or `hyperliquid`\n- `--market-id`: Polymarket condition ID, or coin name for HyperLiquid (e.g. `BTC`, `ETH`)\n- `--token-id`: Polymarket outcome token ID, or coin name for HyperLiquid\n- `--rule-type`: `STOP_LOSS` (sells if price \u003C= trigger), `TAKE_PROFIT` (sells if price >= trigger), or `TRAILING_STOP`\n- `--trigger-price`: Price threshold — 0 to 1 for Polymarket, absolute USD price for HyperLiquid\n\n### Create a Take-Profit Rule\n\nAutomatically sell a position if price rises above a threshold:\n\n```bash\n# Polymarket\nnpx @vincentai\u002Fcli@latest trading-engine create-rule --key-id \u003CKEY_ID> \\\n  --market-id 0x123... --token-id 456789 \\\n  --rule-type TAKE_PROFIT --trigger-price 0.75\n\n# HyperLiquid\nnpx @vincentai\u002Fcli@latest trading-engine create-rule --key-id \u003CKEY_ID> \\\n  --venue hyperliquid --market-id ETH --token-id ETH \\\n  --rule-type TAKE_PROFIT --trigger-price 4500\n```\n\n### Create a Trailing Stop Rule\n\nA trailing stop moves the stop price up as the price rises:\n\n```bash\n# Polymarket\nnpx @vincentai\u002Fcli@latest trading-engine create-rule --key-id \u003CKEY_ID> \\\n  --market-id 0x123... --token-id 456789 \\\n  --rule-type TRAILING_STOP --trigger-price 0.45 --trailing-percent 5\n\n# HyperLiquid\nnpx @vincentai\u002Fcli@latest trading-engine create-rule --key-id \u003CKEY_ID> \\\n  --venue hyperliquid --market-id SOL --token-id SOL \\\n  --rule-type TRAILING_STOP --trigger-price 170 --trailing-percent 5\n```\n\n**Trailing stop behavior:**\n\n- `--trailing-percent` is percent points (e.g. `5` = 5%)\n- Computes `candidateStop = currentPrice * (1 - trailingPercent\u002F100)`\n- If `candidateStop` > current `triggerPrice`, updates `triggerPrice`\n- `triggerPrice` never moves down\n- Rule triggers when `currentPrice \u003C= triggerPrice`\n\n### List Rules\n\n```bash\n# All rules\nnpx @vincentai\u002Fcli@latest trading-engine list-rules --key-id \u003CKEY_ID>\n\n# Filter by status\nnpx @vincentai\u002Fcli@latest trading-engine list-rules --key-id \u003CKEY_ID> --status ACTIVE\n```\n\n### Update a Rule\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine update-rule --key-id \u003CKEY_ID> --rule-id \u003CRULE_ID> --trigger-price 0.45\n```\n\n### Cancel a Rule\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine delete-rule --key-id \u003CKEY_ID> --rule-id \u003CRULE_ID>\n```\n\n### View Monitored Positions\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine positions --key-id \u003CKEY_ID>\n```\n\n### View Event Log\n\n```bash\n# All events\nnpx @vincentai\u002Fcli@latest trading-engine events --key-id \u003CKEY_ID>\n\n# Events for specific rule\nnpx @vincentai\u002Fcli@latest trading-engine events --key-id \u003CKEY_ID> --rule-id \u003CRULE_ID>\n\n# Paginated\nnpx @vincentai\u002Fcli@latest trading-engine events --key-id \u003CKEY_ID> --limit 50 --offset 100\n```\n\n**Event types:**\n\n- `RULE_CREATED` — Rule was created\n- `RULE_TRAILING_UPDATED` — Trailing stop moved triggerPrice upward\n- `RULE_EVALUATED` — Worker checked the rule against current price\n- `RULE_TRIGGERED` — Trigger condition was met\n- `ACTION_PENDING_APPROVAL` — Trade requires human approval, rule paused\n- `ACTION_EXECUTED` — Trade executed successfully\n- `ACTION_FAILED` — Trade execution failed\n- `RULE_CANCELED` — Rule was manually canceled\n\n### Rule Statuses\n\n- `ACTIVE` — Rule is live and being monitored\n- `TRIGGERED` — Condition was met, trade executed\n- `PENDING_APPROVAL` — Trade requires human approval; rule paused\n- `CANCELED` — Manually canceled before triggering\n- `FAILED` — Triggered but trade execution failed\n\n---\n\n## Complete Workflow: Strategy + Trade Rules\n\n### Polymarket Workflow\n\n### Step 1: Place a bet with the Polymarket skill\n\n```bash\nnpx @vincentai\u002Fcli@latest polymarket bet --key-id \u003CKEY_ID> --token-id 123456789 --side BUY --amount 10 --price 0.55\n```\n\n### Step 2: Create a strategy to monitor the thesis\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine create-strategy --key-id \u003CKEY_ID> \\\n  --name \"Bitcoin Bull Thesis\" \\\n  --config '{\n    \"instruments\": [\n      { \"id\": \"123456789\", \"type\": \"binary\", \"venue\": \"polymarket\" }\n    ],\n    \"thesis\": {\n      \"estimate\": 0.85,\n      \"direction\": \"long\",\n      \"confidence\": 0.7,\n      \"reasoning\": \"Bitcoin is likely to break $100k on ETF inflows\"\n    },\n    \"drivers\": [\n      {\n        \"name\": \"ETF News\",\n        \"weight\": 2.0,\n        \"direction\": \"bullish\",\n        \"monitoring\": {\n          \"keywords\": [\"bitcoin ETF inflows\", \"bitcoin institutional\"],\n          \"sources\": [\"web_search\", \"newswire\"]\n        }\n      },\n      {\n        \"name\": \"Crypto Twitter\",\n        \"weight\": 1.0,\n        \"direction\": \"contextual\",\n        \"monitoring\": {\n          \"entities\": [\"@BitcoinMagazine\", \"@saborskycnbc\"],\n          \"sources\": [\"twitter\"]\n        }\n      }\n    ],\n    \"escalation\": {\n      \"signalScoreThreshold\": 0.3,\n      \"highConfidenceThreshold\": 0.8,\n      \"maxWakeFrequency\": \"1 per 15m\",\n      \"batchWindow\": \"5m\"\n    },\n    \"tradeRules\": {\n      \"entry\": { \"minEdge\": 0.05 },\n      \"autoActions\": { \"stopLoss\": -0.15, \"takeProfit\": 0.30, \"trailingStop\": -0.05 },\n      \"exit\": { \"thesisInvalidation\": [\"ETF outflows accelerate above $500M\u002Fweek\"] },\n      \"sizing\": { \"method\": \"edgeScaled\", \"maxPosition\": 100, \"maxPortfolioPct\": 20, \"maxTradesPerDay\": 5 }\n    }\n  }' \\\n  --poll-interval 10\n```\n\n### Step 3: Set a standalone stop-loss as immediate protection\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine create-rule --key-id \u003CKEY_ID> \\\n  --market-id 0xabc... --token-id 123456789 \\\n  --rule-type STOP_LOSS --trigger-price 0.40\n```\n\n### Step 4: Activate the strategy\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine activate --key-id \u003CKEY_ID> --strategy-id \u003CSTRATEGY_ID>\n```\n\n### Step 5: Monitor activity\n\n```bash\n# Check strategy invocations\nnpx @vincentai\u002Fcli@latest trading-engine invocations --key-id \u003CKEY_ID> --strategy-id \u003CSTRATEGY_ID>\n\n# Check trade rule events\nnpx @vincentai\u002Fcli@latest trading-engine events --key-id \u003CKEY_ID>\n\n# Check costs\nnpx @vincentai\u002Fcli@latest trading-engine costs --key-id \u003CKEY_ID>\n\n# Check performance\nnpx @vincentai\u002Fcli@latest trading-engine performance --key-id \u003CKEY_ID> --strategy-id \u003CSTRATEGY_ID>\n```\n\n### HyperLiquid Workflow\n\n### Step 1: Open a perp position with the HyperLiquid skill\n\n```bash\nnpx @vincentai\u002Fcli@latest hyperliquid trade --key-id \u003CKEY_ID> \\\n  --coin BTC --is-buy true --sz 0.001 --limit-px 106000 --order-type market\n```\n\n### Step 2: Set a stop-loss rule for the position\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine create-rule --key-id \u003CKEY_ID> \\\n  --venue hyperliquid --market-id BTC --token-id BTC \\\n  --rule-type STOP_LOSS --trigger-price 95000\n```\n\n### Step 3: Set a take-profit rule\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine create-rule --key-id \u003CKEY_ID> \\\n  --venue hyperliquid --market-id BTC --token-id BTC \\\n  --rule-type TAKE_PROFIT --trigger-price 115000\n```\n\n### Step 4: Create a strategy to monitor your thesis\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine create-strategy --key-id \u003CKEY_ID> \\\n  --name \"BTC Perp Momentum\" \\\n  --config '{\n    \"instruments\": [\n      { \"id\": \"BTC\", \"type\": \"perp\", \"venue\": \"hyperliquid\" }\n    ],\n    \"thesis\": {\n      \"estimate\": 115000,\n      \"direction\": \"long\",\n      \"confidence\": 0.7,\n      \"reasoning\": \"ETF inflows accelerating, halving supply shock imminent\"\n    },\n    \"drivers\": [\n      {\n        \"name\": \"ETF News\",\n        \"weight\": 2.0,\n        \"direction\": \"bullish\",\n        \"monitoring\": {\n          \"keywords\": [\"bitcoin ETF inflows\", \"bitcoin institutional\"],\n          \"sources\": [\"web_search\", \"newswire\"]\n        }\n      }\n    ],\n    \"escalation\": {\n      \"signalScoreThreshold\": 0.3,\n      \"highConfidenceThreshold\": 0.8,\n      \"maxWakeFrequency\": \"1 per 15m\",\n      \"batchWindow\": \"5m\"\n    },\n    \"tradeRules\": {\n      \"entry\": { \"minEdge\": 0.05 },\n      \"autoActions\": { \"stopLoss\": -0.10, \"takeProfit\": 0.25, \"trailingStop\": -0.05 },\n      \"sizing\": { \"method\": \"edgeScaled\", \"maxPosition\": 500, \"maxPortfolioPct\": 20, \"maxTradesPerDay\": 5 }\n    }\n  }' \\\n  --poll-interval 10\n```\n\n### Step 5: Activate and monitor\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine activate --key-id \u003CKEY_ID> --strategy-id \u003CSTRATEGY_ID>\nnpx @vincentai\u002Fcli@latest trading-engine events --key-id \u003CKEY_ID>\n```\n\n---\n\n## Background Workers\n\nThe Trading Engine runs two independent background workers:\n\n1. **Strategy Engine Worker** — Ticks every 30s, checks which strategy drivers are due, fetches new data, scores signals, and invokes the LLM when the escalation threshold is met. Hooks into venue WebSocket feeds (Polymarket and HyperLiquid) for real-time price trigger evaluation.\n2. **Trade Rule Worker** — Monitors prices in real-time via WebSocket (with polling fallback), evaluates stop-loss\u002Ftake-profit\u002Ftrailing stop rules, executes trades when conditions are met. Supports both Polymarket and HyperLiquid venues.\n\n**Circuit Breaker:** Both workers use a circuit breaker pattern. If a venue API fails 5+ consecutive times, the worker pauses and resumes after a cooldown. Check status with:\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine status --key-id \u003CKEY_ID>\n```\n\n## Best Practices\n\n1. **Start with `confidence: 0.5`** and let the LLM adjust — avoid overconfidence in the initial thesis\n2. **Weight drivers by importance** — a driver with `weight: 3.0` has 3x the signal score contribution of `weight: 1.0`\n3. **Use `edgeScaled` sizing** for adaptive position sizes based on thesis confidence and edge\n4. **Set `maxPortfolioPct`** to limit exposure — even high-confidence strategies shouldn't risk the entire portfolio\n5. **Set both stop-loss and take-profit** on positions for protection (via `autoActions` in the config or standalone rules)\n6. **Use `thesisInvalidation` exit rules** to define explicit conditions that should trigger position exits\n7. **Monitor invocation costs** — check the costs command regularly\n8. **Iterate with versions** — duplicate a strategy to tweak the config without losing the original\n9. **Don't set triggers too close** to current price — market noise can trigger prematurely\n\n## Example User Prompts\n\nWhen a user says:\n\n- **\"Create a strategy to monitor AI tokens\"** → Create strategy with web search + Twitter drivers\n- **\"Set a stop-loss at 40 cents\"** → Create STOP_LOSS rule\n- **\"What has my strategy been doing?\"** → Show invocations for the strategy\n- **\"How is my strategy performing?\"** → Show performance metrics\n- **\"How much has the trading engine cost me?\"** → Show cost summary\n- **\"Pause my strategy\"** → Pause the strategy\n- **\"Make a new version with a different thesis\"** → Duplicate, then update the draft\n- **\"Set a 5% trailing stop\"** → Create TRAILING_STOP rule\n\n## Output Format\n\nStrategy creation:\n\n```json\n{\n  \"strategyId\": \"strat-123\",\n  \"name\": \"BTC Momentum\",\n  \"status\": \"DRAFT\",\n  \"version\": 1\n}\n```\n\nRule creation:\n\n```json\n{\n  \"ruleId\": \"rule-456\",\n  \"ruleType\": \"STOP_LOSS\",\n  \"triggerPrice\": 0.4,\n  \"status\": \"ACTIVE\"\n}\n```\n\nLLM invocation log entries:\n\n```json\n{\n  \"invocationId\": \"inv-789\",\n  \"strategyId\": \"strat-123\",\n  \"trigger\": \"web_search\",\n  \"actions\": [\"place_trade\"],\n  \"costUsd\": 0.12,\n  \"createdAt\": \"2026-02-26T12:00:00.000Z\"\n}\n```\n\n## Error Handling\n\n| Error                       | Cause                                             | Resolution                                           |\n| --------------------------- | ------------------------------------------------- | ---------------------------------------------------- |\n| `401 Unauthorized`          | Invalid or missing API key                        | Check that the key-id is correct; re-link if needed  |\n| `403 Policy Violation`      | Trade blocked by server-side policy               | User must adjust policies at heyvincent.ai           |\n| `402 Insufficient Credit`   | Not enough credit for LLM invocation              | User must add credit at heyvincent.ai                |\n| `INVALID_STATUS_TRANSITION` | Strategy can't transition to requested state      | Check current status (e.g., only DRAFT can activate) |\n| `CIRCUIT_BREAKER_OPEN`      | Polymarket API failures triggered circuit breaker | Wait for cooldown; check status command              |\n| `429 Rate Limited`          | Too many requests or concurrent LLM invocations   | Wait and retry with backoff                          |\n| `Key not found`             | API key was revoked or never created              | Re-link with a new token from the wallet owner       |\n\n## Important Notes\n\n- **Authorization:** All endpoints require the API key for the relevant venue (Polymarket or HyperLiquid wallet key)\n- **Local only:** The API listens on `localhost:19000` — only accessible from the same VPS\n- **No private keys:** All trades use the Vincent API — your private key stays secure on Vincent's servers\n- **Policy enforcement:** All trades (both LLM and standalone rules) go through Vincent's policy checks\n- **Idempotency:** Rules only trigger once. LLM invocations are deduplicated by driver state.\n","# Vincent Trading Engine - Strategy-Driven Automated Trading\n\nUse this skill to create and manage automated trading strategies for Polymarket prediction markets and HyperLiquid perpetuals\u002Fspot. The Trading Engine combines driver-based monitoring (web search, Twitter, newswire, price feeds) with a signal pipeline and LLM-powered decision-making to automatically trade based on your thesis. It also includes standalone stop-loss, take-profit, and trailing stop rules that work without the LLM.\n\nAll commands use the `@vincentai\u002Fcli` package.\n\n## How It Works\n\n**The Trading Engine is a unified system with two modes:**\n\n1. **LLM-Powered Strategies** — Create a versioned strategy with a structured thesis, weighted drivers (web search keywords, Twitter accounts, newswire topics, price triggers), and an escalation policy. When drivers detect new information, signals are scored and batched. When the escalation threshold is met, an LLM (Claude via OpenRouter) evaluates the signals against your thesis and decides whether to trade, update the thesis, set protective orders, or alert you.\n2. **Standalone Trade Rules** — Set stop-loss, take-profit, and trailing stop rules on positions. These execute automatically when price conditions are met — no LLM involved.\n\n**Architecture:**\n\n- Integrated into the Vincent backend (no separate service to run)\n- Strategy endpoints under `\u002Fapi\u002Fskills\u002Fpolymarket\u002Fstrategies\u002F...`\n- Trade rule endpoints under `\u002Fapi\u002Fskills\u002Fpolymarket\u002Frules\u002F...`\n- HyperLiquid rules use `venue: \"hyperliquid\"` and route through the HL adapter\n- Uses the same API key as the Polymarket or HyperLiquid skill (depending on venue)\n- All trades go through Vincent's policy-enforced pipeline\n- LLM costs are metered and deducted from the user's credit balance\n- Every LLM invocation is recorded with full audit trail (tokens, cost, actions, duration)\n\n## Security Model\n\n- **LLM cannot bypass policies** — all trades go through the venue's policy-enforced skill (`polymarketSkill.placeBet()` or `hyperliquidSkill.trade()`) which enforces spending limits, approval thresholds, and allowlists\n- **Backend-side LLM key** — the OpenRouter API key never leaves the server. Agents and users cannot invoke the LLM directly\n- **Credit gating** — no LLM invocation without sufficient credit balance\n- **Tool constraints** — the LLM's available tools are controlled by the strategy's `config.tools` settings. If `canTrade: false`, the trade tool is not provided\n- **Rate limiting** — max concurrent LLM invocations is capped to prevent runaway costs\n- **Audit trail** — every invocation is recorded with full prompt, response, actions, cost, and duration\n- **No private keys** — the Trading Engine uses the Vincent API for all trades. Private keys stay on Vincent's servers\n\n## Part 1: LLM-Powered Strategies\n\n### Core Concepts\n\n- **Instrument**: A tradeable asset on a venue. Defined by `id`, `type` (stock, perp, swap, binary, option), `venue`, and optional constraints (leverage, margin, liquidity, fees).\n- **Thesis**: Your directional view — `estimate` (target price\u002Fvalue), `direction` (long\u002Fshort\u002Fneutral), `confidence` (0–1), and `reasoning`.\n- **Driver**: A named information source that feeds the signal pipeline. Each driver has a `weight`, `direction` (bullish\u002Fbearish\u002Fcontextual), and `monitoring` config (entities, keywords, embedding anchor, sources, polling interval).\n- **Escalation Policy**: Controls when the LLM is woken up. `signalScoreThreshold` (minimum score to batch), `highConfidenceThreshold` (score that triggers immediate wake), `maxWakeFrequency` (e.g. \"1 per 15m\"), `batchWindow` (e.g. \"5m\").\n- **Trade Rules**: Entry rules (min edge, order type), exit rules (thesis invalidation triggers), auto-actions (stop-loss, take-profit, trailing stop, price delta triggers), and sizing rules (method, max position, portfolio %, max trades\u002Fday).\n\n### Signal Pipeline\n\nStrategies process information through a 6-layer pipeline:\n\n1. **Ingest** — Raw data from driver sources (web search, Twitter, newswire, price feeds, RSS, Reddit, on-chain, filings, options flow)\n2. **Filter** — Deduplication and relevance filtering. Drops signals already seen or below quality threshold\n3. **Score** — Each signal is scored (0–1) based on driver weight, embedding similarity to the anchor, and entity\u002Fkeyword matches\n4. **Escalate** — Scored signals are batched according to the escalation policy. Low-score signals accumulate in a batch window; high-confidence signals trigger immediate LLM wake\n5. **LLM** — The LLM evaluates batched signals against the current thesis. It can update the thesis, issue trade decisions, update driver states, or take no action\n6. **Execute** — Trade decisions pass through policy enforcement and are routed to the appropriate venue adapter for execution\n\n### Strategy Lifecycle\n\nStrategies follow a versioned lifecycle: `DRAFT` → `ACTIVE` → `PAUSED` → `ARCHIVED`\n\n- **DRAFT**: Can be edited. Not yet monitoring or invoking the LLM.\n- **ACTIVE**: Drivers are running. New signals trigger the pipeline.\n- **PAUSED**: Monitoring is stopped. Can be resumed.\n- **ARCHIVED**: Permanently stopped. Cannot be reactivated.\n\nTo iterate on a strategy, duplicate it as a new version (creates a new DRAFT with incremented version number and the same config).\n\n### Create a Strategy\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine create-strategy \\\n  --key-id \u003CKEY_ID> \\\n  --name \"BTC Momentum\" \\\n  --config '{\n    \"instruments\": [\n      { \"id\": \"btc-usd-perp\", \"type\": \"perp\", \"venue\": \"polymarket\" },\n      { \"id\": \"BTC\", \"type\": \"perp\", \"venue\": \"hyperliquid\" }\n    ],\n    \"thesis\": {\n      \"estimate\": 105000,\n      \"direction\": \"long\",\n      \"confidence\": 0.7,\n      \"reasoning\": \"ETF inflows accelerating, halving supply shock imminent\"\n    },\n    \"drivers\": [\n      {\n        \"name\": \"ETF Flow Monitor\",\n        \"weight\": 2.0,\n        \"direction\": \"bullish\",\n        \"monitoring\": {\n          \"entities\": [\"BlackRock\", \"Fidelity\"],\n          \"keywords\": [\"bitcoin ETF\", \"BTC inflow\"],\n          \"embeddingAnchor\": \"Bitcoin ETF institutional inflows\",\n          \"sources\": [\"web_search\", \"newswire\"]\n        }\n      },\n      {\n        \"name\": \"Crypto Twitter\",\n        \"weight\": 1.0,\n        \"direction\": \"contextual\",\n        \"monitoring\": {\n          \"entities\": [\"@BitcoinMagazine\", \"@saborskycnbc\"],\n          \"keywords\": [\"bitcoin\", \"BTC\"],\n          \"sources\": [\"twitter\"]\n        }\n      }\n    ],\n    \"escalation\": {\n      \"signalScoreThreshold\": 0.3,\n      \"highConfidenceThreshold\": 0.8,\n      \"maxWakeFrequency\": \"1 per 15m\",\n      \"batchWindow\": \"5m\"\n    },\n    \"tradeRules\": {\n      \"entry\": { \"minEdge\": 0.05, \"orderType\": \"limit\", \"limitOffset\": 0.01 },\n      \"autoActions\": { \"stopLoss\": -0.10, \"takeProfit\": 0.25, \"trailingStop\": -0.05 },\n      \"exit\": { \"thesisInvalidation\": [\"ETF outflows exceed $500M\u002Fweek\"] },\n      \"sizing\": {\n        \"method\": \"edgeScaled\",\n        \"maxPosition\": 500,\n        \"maxPortfolioPct\": 20,\n        \"maxTradesPerDay\": 5,\n        \"minTimeBetweenTrades\": \"30m\"\n      }\n    },\n    \"notifications\": {\n      \"onTrade\": true,\n      \"onThesisChange\": true,\n      \"channel\": \"none\"\n    }\n  }'\n```\n\n**Parameters:**\n\n- `--name`: Strategy name\n- `--config`: Full strategy config JSON (see Core Concepts above for structure)\n- `--data-source-secret-id`: Optional DATA_SOURCES secret ID for driver monitoring API calls\n- `--poll-interval`: Polling interval in minutes for driver monitoring (default: 15)\n\n### List Strategies\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine list-strategies --key-id \u003CKEY_ID>\n```\n\n### Get Strategy Details\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine get-strategy --key-id \u003CKEY_ID> --strategy-id \u003CSTRATEGY_ID>\n```\n\n### Update a Strategy\n\nUpdate a DRAFT strategy. Pass only the fields you want to change — config is a partial object.\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine update-strategy --key-id \u003CKEY_ID> --strategy-id \u003CSTRATEGY_ID> \\\n  --name \"Updated Name\" --config '{ \"thesis\": { \"confidence\": 0.8, \"reasoning\": \"Updated reasoning\" } }'\n```\n\n**Parameters:**\n\n- `--strategy-id`: Strategy ID (required)\n- `--name`: New strategy name\n- `--config`: Partial strategy config JSON — only include fields to update\n- `--data-source-secret-id`: DATA_SOURCES secret ID\n- `--poll-interval`: New polling interval in minutes\n\n### Activate a Strategy\n\nStarts driver monitoring and signal pipeline processing. Strategy must be in DRAFT status.\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine activate --key-id \u003CKEY_ID> --strategy-id \u003CSTRATEGY_ID>\n```\n\n### Pause a Strategy\n\nStops monitoring. Strategy must be ACTIVE.\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine pause --key-id \u003CKEY_ID> --strategy-id \u003CSTRATEGY_ID>\n```\n\n### Resume a Strategy\n\nResumes monitoring. Strategy must be PAUSED.\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine resume --key-id \u003CKEY_ID> --strategy-id \u003CSTRATEGY_ID>\n```\n\n### Archive a Strategy\n\nPermanently stops a strategy. Cannot be undone.\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine archive --key-id \u003CKEY_ID> --strategy-id \u003CSTRATEGY_ID>\n```\n\n### Duplicate a Strategy (New Version)\n\nCreates a new DRAFT with the same config, incremented version number, and a link to the parent version.\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine duplicate-strategy --key-id \u003CKEY_ID> --strategy-id \u003CSTRATEGY_ID>\n```\n\n### View Version History\n\nSee all versions of a strategy lineage.\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine versions --key-id \u003CKEY_ID> --strategy-id \u003CSTRATEGY_ID>\n```\n\n### View LLM Invocation History\n\nSee the LLM decision log for a strategy — what data triggered it, what the LLM decided, what actions were taken, and the cost.\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine invocations --key-id \u003CKEY_ID> --strategy-id \u003CSTRATEGY_ID> --limit 20\n```\n\n### View Cost Summary\n\nSee aggregate LLM costs for all strategies under a secret.\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine costs --key-id \u003CKEY_ID>\n```\n\n### View Performance Metrics\n\nSee performance metrics for a strategy: P&L, win rate, trade count, and per-instrument breakdown.\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine performance --key-id \u003CKEY_ID> --strategy-id \u003CSTRATEGY_ID>\n```\n\n### Driver Configuration\n\n#### Web Search Drivers\n\nAdd a driver with `\"sources\": [\"web_search\"]`. The engine periodically searches Brave for the driver's keywords and triggers the signal pipeline when new results appear.\n\n```json\n{\n  \"name\": \"AI News Monitor\",\n  \"weight\": 1.5,\n  \"direction\": \"bullish\",\n  \"monitoring\": {\n    \"keywords\": [\"AI tokens\", \"GPU shortage\", \"prediction market regulation\"],\n    \"embeddingAnchor\": \"AI technology investment trends\",\n    \"sources\": [\"web_search\"]\n  }\n}\n```\n\nEach keyword is searched independently. Results are deduplicated — the same URLs won't trigger the pipeline twice.\n\n#### Twitter Drivers\n\nAdd a driver with `\"sources\": [\"twitter\"]`. The engine periodically checks the specified entities for new tweets.\n\n```json\n{\n  \"name\": \"Crypto Twitter\",\n  \"weight\": 1.0,\n  \"direction\": \"contextual\",\n  \"monitoring\": {\n    \"entities\": [\"@DeepSeek\", \"@nvidia\", \"@OpenAI\"],\n    \"keywords\": [\"AI\", \"GPU\"],\n    \"sources\": [\"twitter\"]\n  }\n}\n```\n\nTweets are deduplicated by tweet ID — only genuinely new tweets trigger the pipeline.\n\n#### Newswire Drivers (Finnhub)\n\nAdd a driver with `\"sources\": [\"newswire\"]`. The engine periodically polls Finnhub's market news API and triggers the pipeline when new headlines matching your keywords appear.\n\n```json\n{\n  \"name\": \"Market News\",\n  \"weight\": 1.5,\n  \"direction\": \"contextual\",\n  \"monitoring\": {\n    \"keywords\": [\"artificial intelligence\", \"GPU shortage\", \"semiconductor\"],\n    \"sources\": [\"newswire\"]\n  }\n}\n```\n\nHeadlines and summaries are matched case-insensitively. Articles are deduplicated by headline hash with a sliding window.\n\n**Note:** Requires a `FINNHUB_API_KEY` env var on the server. Finnhub's free tier allows 60 API calls\u002Fmin. No per-call credit deduction.\n\n#### Price Triggers\n\nPrice triggers are evaluated in real-time via the Polymarket WebSocket feed. When a price condition is met, the signal pipeline is invoked with the price data.\n\nTrigger types:\n\n- `ABOVE` — triggers when price exceeds a threshold\n- `BELOW` — triggers when price drops below a threshold\n- `CHANGE_PCT` — triggers on a percentage change from reference price\n\nPrice triggers are one-shot: once fired, they're marked as consumed. The LLM can create new triggers if needed.\n\n### Thesis Best Practices\n\nThe thesis is your structured directional view. Good theses include:\n\n1. **A clear estimate**: Target price or value the market should reach\n2. **A confidence level**: Start at 0.5–0.7 and let the LLM adjust as new data arrives\n3. **Specific reasoning**: \"ETF inflows accelerating, halving supply shock imminent\" is better than \"BTC will go up\"\n4. **Explicit invalidation conditions**: Use `tradeRules.exit.thesisInvalidation` to define what would break your thesis\n\n### LLM Available Tools\n\nWhen the LLM is invoked, it can use these tools (depending on strategy config):\n\n| Tool                | Description                        | Requires                           |\n| ------------------- | ---------------------------------- | ---------------------------------- |\n| `place_trade`       | Buy or sell a position             | `canTrade: true` in trade rules    |\n| `set_stop_loss`     | Set a stop-loss rule on a position | `canSetRules: true` in trade rules |\n| `set_take_profit`   | Set a take-profit rule             | `canSetRules: true` in trade rules |\n| `set_trailing_stop` | Set a trailing stop                | `canSetRules: true` in trade rules |\n| `alert_user`        | Send an alert without trading      | Always available                   |\n| `no_action`         | Do nothing (with reasoning)        | Always available                   |\n\n### Cost Tracking\n\nEvery LLM invocation is metered:\n\n- **Token costs**: Input and output tokens are priced per the model's rate\n- **Deducted from credit balance**: Same pool as data source credits (`dataSourceCreditUsd`)\n- **Pre-flight check**: If insufficient credit, the invocation is skipped and logged\n- **Data source costs**: Brave Search (~$0.005\u002Fcall) and Twitter (~$0.005-$0.01\u002Fcall) are also metered. Finnhub newswire calls are free (no credit deduction)\n\nTypical LLM invocation cost: $0.05–$0.30 depending on context size.\n\n---\n\n## Part 2: Standalone Trade Rules\n\nTrade rules execute automatically when price conditions are met — no LLM involved. These are stop-loss, take-profit, and trailing stop rules that protect your positions.\n\n### Check Worker Status\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine status --key-id \u003CKEY_ID>\n# Returns: worker status, active rules count, last sync time, circuit breaker state\n```\n\n### Create a Stop-Loss Rule\n\nAutomatically sell a position if price drops below a threshold:\n\n```bash\n# Polymarket — triggerPrice is 0–1 (outcome token price)\nnpx @vincentai\u002Fcli@latest trading-engine create-rule --key-id \u003CKEY_ID> \\\n  --market-id 0x123... --token-id 456789 \\\n  --rule-type STOP_LOSS --trigger-price 0.40\n\n# HyperLiquid — triggerPrice is absolute USD price, marketId and tokenId are the coin name\nnpx @vincentai\u002Fcli@latest trading-engine create-rule --key-id \u003CKEY_ID> \\\n  --venue hyperliquid --market-id BTC --token-id BTC \\\n  --rule-type STOP_LOSS --trigger-price 95000\n```\n\n**Parameters:**\n\n- `--venue`: `polymarket` (default) or `hyperliquid`\n- `--market-id`: Polymarket condition ID, or coin name for HyperLiquid (e.g. `BTC`, `ETH`)\n- `--token-id`: Polymarket outcome token ID, or coin name for HyperLiquid\n- `--rule-type`: `STOP_LOSS` (sells if price \u003C= trigger), `TAKE_PROFIT` (sells if price >= trigger), or `TRAILING_STOP`\n- `--trigger-price`: Price threshold — 0 to 1 for Polymarket, absolute USD price for HyperLiquid\n\n### Create a Take-Profit Rule\n\nAutomatically sell a position if price rises above a threshold:\n\n```bash\n# Polymarket\nnpx @vincentai\u002Fcli@latest trading-engine create-rule --key-id \u003CKEY_ID> \\\n  --market-id 0x123... --token-id 456789 \\\n  --rule-type TAKE_PROFIT --trigger-price 0.75\n\n# HyperLiquid\nnpx @vincentai\u002Fcli@latest trading-engine create-rule --key-id \u003CKEY_ID> \\\n  --venue hyperliquid --market-id ETH --token-id ETH \\\n  --rule-type TAKE_PROFIT --trigger-price 4500\n```\n\n### Create a Trailing Stop Rule\n\nA trailing stop moves the stop price up as the price rises:\n\n```bash\n# Polymarket\nnpx @vincentai\u002Fcli@latest trading-engine create-rule --key-id \u003CKEY_ID> \\\n  --market-id 0x123... --token-id 456789 \\\n  --rule-type TRAILING_STOP --trigger-price 0.45 --trailing-percent 5\n\n# HyperLiquid\nnpx @vincentai\u002Fcli@latest trading-engine create-rule --key-id \u003CKEY_ID> \\\n  --venue hyperliquid --market-id SOL --token-id SOL \\\n  --rule-type TRAILING_STOP --trigger-price 170 --trailing-percent 5\n```\n\n**Trailing stop behavior:**\n\n- `--trailing-percent` is percent points (e.g. `5` = 5%)\n- Computes `candidateStop = currentPrice * (1 - trailingPercent\u002F100)`\n- If `candidateStop` > current `triggerPrice`, updates `triggerPrice`\n- `triggerPrice` never moves down\n- Rule triggers when `currentPrice \u003C= triggerPrice`\n\n### List Rules\n\n```bash\n# All rules\nnpx @vincentai\u002Fcli@latest trading-engine list-rules --key-id \u003CKEY_ID>\n\n# Filter by status\nnpx @vincentai\u002Fcli@latest trading-engine list-rules --key-id \u003CKEY_ID> --status ACTIVE\n```\n\n### Update a Rule\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine update-rule --key-id \u003CKEY_ID> --rule-id \u003CRULE_ID> --trigger-price 0.45\n```\n\n### Cancel a Rule\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine delete-rule --key-id \u003CKEY_ID> --rule-id \u003CRULE_ID>\n```\n\n### View Monitored Positions\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine positions --key-id \u003CKEY_ID>\n```\n\n### View Event Log\n\n```bash\n# All events\nnpx @vincentai\u002Fcli@latest trading-engine events --key-id \u003CKEY_ID>\n\n# Events for specific rule\nnpx @vincentai\u002Fcli@latest trading-engine events --key-id \u003CKEY_ID> --rule-id \u003CRULE_ID>\n\n# Paginated\nnpx @vincentai\u002Fcli@latest trading-engine events --key-id \u003CKEY_ID> --limit 50 --offset 100\n```\n\n**Event types:**\n\n- `RULE_CREATED` — Rule was created\n- `RULE_TRAILING_UPDATED` — Trailing stop moved triggerPrice upward\n- `RULE_EVALUATED` — Worker checked the rule against current price\n- `RULE_TRIGGERED` — Trigger condition was met\n- `ACTION_PENDING_APPROVAL` — Trade requires human approval, rule paused\n- `ACTION_EXECUTED` — Trade executed successfully\n- `ACTION_FAILED` — Trade execution failed\n- `RULE_CANCELED` — Rule was manually canceled\n\n### Rule Statuses\n\n- `ACTIVE` — Rule is live and being monitored\n- `TRIGGERED` — Condition was met, trade executed\n- `PENDING_APPROVAL` — Trade requires human approval; rule paused\n- `CANCELED` — Manually canceled before triggering\n- `FAILED` — Triggered but trade execution failed\n\n---\n\n## Complete Workflow: Strategy + Trade Rules\n\n### Polymarket Workflow\n\n### Step 1: Place a bet with the Polymarket skill\n\n```bash\nnpx @vincentai\u002Fcli@latest polymarket bet --key-id \u003CKEY_ID> --token-id 123456789 --side BUY --amount 10 --price 0.55\n```\n\n### Step 2: Create a strategy to monitor the thesis\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine create-strategy --key-id \u003CKEY_ID> \\\n  --name \"Bitcoin Bull Thesis\" \\\n  --config '{\n    \"instruments\": [\n      { \"id\": \"123456789\", \"type\": \"binary\", \"venue\": \"polymarket\" }\n    ],\n    \"thesis\": {\n      \"estimate\": 0.85,\n      \"direction\": \"long\",\n      \"confidence\": 0.7,\n      \"reasoning\": \"Bitcoin is likely to break $100k on ETF inflows\"\n    },\n    \"drivers\": [\n      {\n        \"name\": \"ETF News\",\n        \"weight\": 2.0,\n        \"direction\": \"bullish\",\n        \"monitoring\": {\n          \"keywords\": [\"bitcoin ETF inflows\", \"bitcoin institutional\"],\n          \"sources\": [\"web_search\", \"newswire\"]\n        }\n      },\n      {\n        \"name\": \"Crypto Twitter\",\n        \"weight\": 1.0,\n        \"direction\": \"contextual\",\n        \"monitoring\": {\n          \"entities\": [\"@BitcoinMagazine\", \"@saborskycnbc\"],\n          \"sources\": [\"twitter\"]\n        }\n      }\n    ],\n    \"escalation\": {\n      \"signalScoreThreshold\": 0.3,\n      \"highConfidenceThreshold\": 0.8,\n      \"maxWakeFrequency\": \"1 per 15m\",\n      \"batchWindow\": \"5m\"\n    },\n    \"tradeRules\": {\n      \"entry\": { \"minEdge\": 0.05 },\n      \"autoActions\": { \"stopLoss\": -0.15, \"takeProfit\": 0.30, \"trailingStop\": -0.05 },\n      \"exit\": { \"thesisInvalidation\": [\"ETF outflows accelerate above $500M\u002Fweek\"] },\n      \"sizing\": { \"method\": \"edgeScaled\", \"maxPosition\": 100, \"maxPortfolioPct\": 20, \"maxTradesPerDay\": 5 }\n    }\n  }' \\\n  --poll-interval 10\n```\n\n### Step 3: Set a standalone stop-loss as immediate protection\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine create-rule --key-id \u003CKEY_ID> \\\n  --market-id 0xabc... --token-id 123456789 \\\n  --rule-type STOP_LOSS --trigger-price 0.40\n```\n\n### Step 4: Activate the strategy\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine activate --key-id \u003CKEY_ID> --strategy-id \u003CSTRATEGY_ID>\n```\n\n### Step 5: Monitor activity\n\n```bash\n# Check strategy invocations\nnpx @vincentai\u002Fcli@latest trading-engine invocations --key-id \u003CKEY_ID> --strategy-id \u003CSTRATEGY_ID>\n\n# Check trade rule events\nnpx @vincentai\u002Fcli@latest trading-engine events --key-id \u003CKEY_ID>\n\n# Check costs\nnpx @vincentai\u002Fcli@latest trading-engine costs --key-id \u003CKEY_ID>\n\n# Check performance\nnpx @vincentai\u002Fcli@latest trading-engine performance --key-id \u003CKEY_ID> --strategy-id \u003CSTRATEGY_ID>\n```\n\n### HyperLiquid Workflow\n\n### Step 1: Open a perp position with the HyperLiquid skill\n\n```bash\nnpx @vincentai\u002Fcli@latest hyperliquid trade --key-id \u003CKEY_ID> \\\n  --coin BTC --is-buy true --sz 0.001 --limit-px 106000 --order-type market\n```\n\n### Step 2: Set a stop-loss rule for the position\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine create-rule --key-id \u003CKEY_ID> \\\n  --venue hyperliquid --market-id BTC --token-id BTC \\\n  --rule-type STOP_LOSS --trigger-price 95000\n```\n\n### Step 3: Set a take-profit rule\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine create-rule --key-id \u003CKEY_ID> \\\n  --venue hyperliquid --market-id BTC --token-id BTC \\\n  --rule-type TAKE_PROFIT --trigger-price 115000\n```\n\n### Step 4: Create a strategy to monitor your thesis\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine create-strategy --key-id \u003CKEY_ID> \\\n  --name \"BTC Perp Momentum\" \\\n  --config '{\n    \"instruments\": [\n      { \"id\": \"BTC\", \"type\": \"perp\", \"venue\": \"hyperliquid\" }\n    ],\n    \"thesis\": {\n      \"estimate\": 115000,\n      \"direction\": \"long\",\n      \"confidence\": 0.7,\n      \"reasoning\": \"ETF inflows accelerating, halving supply shock imminent\"\n    },\n    \"drivers\": [\n      {\n        \"name\": \"ETF News\",\n        \"weight\": 2.0,\n        \"direction\": \"bullish\",\n        \"monitoring\": {\n          \"keywords\": [\"bitcoin ETF inflows\", \"bitcoin institutional\"],\n          \"sources\": [\"web_search\", \"newswire\"]\n        }\n      }\n    ],\n    \"escalation\": {\n      \"signalScoreThreshold\": 0.3,\n      \"highConfidenceThreshold\": 0.8,\n      \"maxWakeFrequency\": \"1 per 15m\",\n      \"batchWindow\": \"5m\"\n    },\n    \"tradeRules\": {\n      \"entry\": { \"minEdge\": 0.05 },\n      \"autoActions\": { \"stopLoss\": -0.10, \"takeProfit\": 0.25, \"trailingStop\": -0.05 },\n      \"sizing\": { \"method\": \"edgeScaled\", \"maxPosition\": 500, \"maxPortfolioPct\": 20, \"maxTradesPerDay\": 5 }\n    }\n  }' \\\n  --poll-interval 10\n```\n\n### Step 5: Activate and monitor\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine activate --key-id \u003CKEY_ID> --strategy-id \u003CSTRATEGY_ID>\nnpx @vincentai\u002Fcli@latest trading-engine events --key-id \u003CKEY_ID>\n```\n\n---\n\n## Background Workers\n\nThe Trading Engine runs two independent background workers:\n\n1. **Strategy Engine Worker** — Ticks every 30s, checks which strategy drivers are due, fetches new data, scores signals, and invokes the LLM when the escalation threshold is met. Hooks into venue WebSocket feeds (Polymarket and HyperLiquid) for real-time price trigger evaluation.\n2. **Trade Rule Worker** — Monitors prices in real-time via WebSocket (with polling fallback), evaluates stop-loss\u002Ftake-profit\u002Ftrailing stop rules, executes trades when conditions are met. Supports both Polymarket and HyperLiquid venues.\n\n**Circuit Breaker:** Both workers use a circuit breaker pattern. If a venue API fails 5+ consecutive times, the worker pauses and resumes after a cooldown. Check status with:\n\n```bash\nnpx @vincentai\u002Fcli@latest trading-engine status --key-id \u003CKEY_ID>\n```\n\n## Best Practices\n\n1. **Start with `confidence: 0.5`** and let the LLM adjust — avoid overconfidence in the initial thesis\n2. **Weight drivers by importance** — a driver with `weight: 3.0` has 3x the signal score contribution of `weight: 1.0`\n3. **Use `edgeScaled` sizing** for adaptive position sizes based on thesis confidence and edge\n4. **Set `maxPortfolioPct`** to limit exposure — even high-confidence strategies shouldn't risk the entire portfolio\n5. **Set both stop-loss and take-profit** on positions for protection (via `autoActions` in the config or standalone rules)\n6. **Use `thesisInvalidation` exit rules** to define explicit conditions that should trigger position exits\n7. **Monitor invocation costs** — check the costs command regularly\n8. **Iterate with versions** — duplicate a strategy to tweak the config without losing the original\n9. **Don't set triggers too close** to current price — market noise can trigger prematurely\n\n## Example User Prompts\n\nWhen a user says:\n\n- **\"Create a strategy to monitor AI tokens\"** → Create strategy with web search + Twitter drivers\n- **\"Set a stop-loss at 40 cents\"** → Create STOP_LOSS rule\n- **\"What has my strategy been doing?\"** → Show invocations for the strategy\n- **\"How is my strategy performing?\"** → Show performance metrics\n- **\"How much has the trading engine cost me?\"** → Show cost summary\n- **\"Pause my strategy\"** → Pause the strategy\n- **\"Make a new version with a different thesis\"** → Duplicate, then update the draft\n- **\"Set a 5% trailing stop\"** → Create TRAILING_STOP rule\n\n## Output Format\n\nStrategy creation:\n\n```json\n{\n  \"strategyId\": \"strat-123\",\n  \"name\": \"BTC Momentum\",\n  \"status\": \"DRAFT\",\n  \"version\": 1\n}\n```\n\nRule creation:\n\n```json\n{\n  \"ruleId\": \"rule-456\",\n  \"ruleType\": \"STOP_LOSS\",\n  \"triggerPrice\": 0.4,\n  \"status\": \"ACTIVE\"\n}\n```\n\nLLM invocation log entries:\n\n```json\n{\n  \"invocationId\": \"inv-789\",\n  \"strategyId\": \"strat-123\",\n  \"trigger\": \"web_search\",\n  \"actions\": [\"place_trade\"],\n  \"costUsd\": 0.12,\n  \"createdAt\": \"2026-02-26T12:00:00.000Z\"\n}\n```\n\n## Error Handling\n\n| Error                       | Cause                                             | Resolution                                           |\n| --------------------------- | ------------------------------------------------- | ---------------------------------------------------- |\n| `401 Unauthorized`          | Invalid or missing API key                        | Check that the key-id is correct; re-link if needed  |\n| `403 Policy Violation`      | Trade blocked by server-side policy               | User must adjust policies at heyvincent.ai           |\n| `402 Insufficient Credit`   | Not enough credit for LLM invocation              | User must add credit at heyvincent.ai                |\n| `INVALID_STATUS_TRANSITION` | Strategy can't transition to requested state      | Check current status (e.g., only DRAFT can activate) |\n| `CIRCUIT_BREAKER_OPEN`      | Polymarket API failures triggered circuit breaker | Wait for cooldown; check status command              |\n| `429 Rate Limited`          | Too many requests or concurrent LLM invocations   | Wait and retry with backoff                          |\n| `Key not found`             | API key was revoked or never created              | Re-link with a new token from the wallet owner       |\n\n## Important Notes\n\n- **Authorization:** All endpoints require the API key for the relevant venue (Polymarket or HyperLiquid wallet key)\n- **Local only:** The API listens on `localhost:19000` — only accessible from the same VPS\n- **No private keys:** All trades use the Vincent API — your private key stays secure on Vincent's servers\n- **Policy enforcement:** All trades (both LLM and standalone rules) go through Vincent's policy checks\n- **Idempotency:** Rules only trigger once. LLM invocations are deduplicated by driver state.\n",{"name":5,"author":49,"source":50,"license":15,"version":51,"homepage":52,"metadata":53,"description":59,"allowed-tools":60},"HeyVincent \u003Ccontact@heyvincent.ai>","https:\u002F\u002Fgithub.com\u002FHeyVincent-ai\u002FVincent","1.0.0","https:\u002F\u002Fheyvincent.ai",{"clawdbot":54},{"homepage":52,"requires":55},{"config":56},[57,58],"${OPENCLAW_STATE_DIR:-$HOME\u002F.openclaw}\u002Fcredentials\u002Fagentwallet",".\u002Fagentwallet","Strategy-driven automated trading for Polymarket and HyperLiquid. Use this skill when users want to create\ntrading strategies, set stop-loss\u002Ftake-profit\u002Ftrailing stop rules, or manage automated trading.\nTriggers on \"trading strategy\", \"stop loss\", \"take profit\", \"trailing stop\", \"automated trading\",\n\"trading engine\", \"trade rules\", \"strategy monitor\".\n","Read, Write, Bash(npx:@vincentai\u002Fcli*)","main","c173cdffe08e788a99b91928a831b476b8434838","ecosystem\u002Fskills\u002Fagent_skills\u002Ftrading_engine",0,"https:\u002F\u002Fgithub.com\u002FLongLeo287\u002FOmniClaw","https:\u002F\u002Fportfolio-longleo.vercel.app\u002Flabs\u002Fomniclaw.html","https:\u002F\u002Fgithub.com\u002FLongLeo287","https:\u002F\u002Fwww.facebook.com\u002FResourceRookie2023","2026-09-30 00:58:05",{"source":8,"skillName":5,"commands":71,"prompt":81,"zipAvailable":82},[72,75,78],{"tool":73,"command":74},"npx","npx skills add LongLeo287\u002FOmniClaw --skill \"Vincent - Trading Engine for agents\"",{"tool":76,"command":77},"bunx","bunx skills add LongLeo287\u002FOmniClaw --skill \"Vincent - Trading Engine for agents\"",{"tool":79,"command":80},"pnpm","pnpm dlx skills add LongLeo287\u002FOmniClaw --skill \"Vincent - Trading Engine for agents\"","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FLongLeo287\u002FOmniClaw\u002Fblob\u002Fmain\u002Fecosystem\u002Fskills\u002Fagent_skills\u002Ftrading_engine\u002FSKILL.md",true,[84],{"path":85,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":88,"sourceHtmlUrl":89},"_DIR_IDENTITY.md","REFERENCE","参考文档",329,"https:\u002F\u002Fgithub.com\u002FLongLeo287\u002FOmniClaw\u002Fblob\u002Fmain\u002Fecosystem\u002Fskills\u002Fagent_skills\u002Ftrading_engine\u002F_DIR_IDENTITY.md",[91,130,151,176,191,218],{"skillNo":92,"name":93,"nameZh":6,"description":94,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":95,"categories":96,"keywords":109,"publishedAt":44},"01M6JR0KQP4MHT32TN40D9CBFX","UI-UX Pro Max","Advanced UI\u002FUX analysis and generation skills with data-driven patterns. Python scripts (core.py, search.py) for systematic UI pattern extraction, design system generation, and component search from curated data sources.","https:\u002F\u002Fgithub.com\u002FLongLeo287\u002FOmniClaw\u002Fblob\u002Fmain\u002Fecosystem\u002Fui_components\u002Fui_ux_pro_max\u002FSKILL.md",[97,100,101,106],{"categoryNo":98,"categoryName":99,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":102,"categoryName":103,"taxonomyType":104,"taxonomyTypeDesc":105},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",{"categoryNo":107,"categoryName":108,"taxonomyType":104,"taxonomyTypeDesc":105},"01JBSEEDCAT000000000000033","数据分析师",[110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129],"ux","ui","ui ux pro max","max","pro","ui ux","design","component","search","analysis","team","rd","ui-ux","active","systematic","scripts","pattern extraction","sources","advanced","data-driven",{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":137,"publishedAt":44},"01M6JR0EF5AEQHP2FSTB57H05P","shadcn-ui","Expert guidance for integrating and building applications with shadcn\u002Fui components, including component discovery, installation, customization, and best practices.","https:\u002F\u002Fgithub.com\u002FLongLeo287\u002FOmniClaw\u002Fblob\u002Fmain\u002Fecosystem\u002Fui_components\u002Fshadcn_ui\u002FSKILL.md",[136],{"categoryNo":102,"categoryName":103,"taxonomyType":104,"taxonomyTypeDesc":105},[138,111,139,140,117,141,142,143,144,120,145,146,147,123,148,149,150,24],"shadcn","shadcn ui","components","core","best practices","applications","discovery","customization","guidance","expert","installation","ui components","with",{"skillNo":152,"name":153,"nameZh":6,"description":154,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":155,"categories":156,"keywords":160,"publishedAt":44},"01M6JR08F51BEN17RHFYX65WVE","zustand_store_ts","Create Zustand stores with TypeScript, subscribeWithSelector middleware, and proper state\u002Faction separation. Use when building React state management, creating global stores, or implementing reactive state patterns with Zustand.","https:\u002F\u002Fgithub.com\u002FLongLeo287\u002FOmniClaw\u002Fblob\u002Fmain\u002Fecosystem\u002Fskills\u002Fzustand_store_ts\u002FSKILL.md",[157],{"categoryNo":158,"categoryName":159,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",[161,162,163,164,165,166,42,167,41,168,169,170,36,171,172,173,150,174,175],"zustand store ts","zustand","store","typescript","microsoft","react","state management","react state management","management","global","patterns","separation","middleware","action","implementing",{"skillNo":177,"name":162,"nameZh":6,"description":178,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":179,"categories":180,"keywords":181,"publishedAt":44},"01M6JR00TDMVAFFCZXZ04AN7Q7","Zustand state management guide. Use when working with store code (src\u002Fstore\u002F**), implementing actions, managing state, or creating slices. Triggers on Zustand store development, state management questions, or action implementation.","https:\u002F\u002Fgithub.com\u002FLongLeo287\u002FOmniClaw\u002Fblob\u002Fmain\u002Fecosystem\u002Fskills\u002Fzustand\u002FSKILL.md",[],[162,182,167,183,41,184,185,169,186,36,187,188,31,163,150,189,190,174,175],"development","code","actions","src","guide","implementation","zustand state","questions","zustand state management",{"skillNo":192,"name":193,"nameZh":6,"description":194,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":195,"categories":196,"keywords":201,"publishedAt":44},"01M6JQZSWV4KWJP112G6XHEP44","youtube_summarizer","Automatically fetch YouTube video transcripts, generate structured summaries, and send full transcripts to messaging platforms. Detects YouTube URLs and provides metadata, key insights, and downloadable transcripts.","https:\u002F\u002Fgithub.com\u002FLongLeo287\u002FOmniClaw\u002Fblob\u002Fmain\u002Fecosystem\u002Fskills\u002Fyoutube_summarizer\u002FSKILL.md",[197,200],{"categoryNo":198,"categoryName":199,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217],"youtube","youtube summarizer","summarizer","generate","metadata","messaging","Video","fetch","telegram","transcription","summarization","structured","full","insights","transcripts","summaries",{"skillNo":219,"name":220,"nameZh":6,"description":221,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":222,"categories":223,"keywords":224,"publishedAt":44},"01M6JQZN3QJB6B77JGKJD62DQT","youtube_clipper","YouTube 视频智能剪辑工具。下载视频和字幕，AI 分析生成精细章节（几分钟级别）， 用户选择片段后自动剪辑、翻译字幕为中英双语、烧录字幕到视频，并生成总结文案。 使用场景：当用户需要剪辑 YouTube 视频、生成短视频片段、制作双语字幕版本时。 关键词：视频剪辑、YouTube、字幕翻译、双语字幕、视频下载、clip video","https:\u002F\u002Fgithub.com\u002FLongLeo287\u002FOmniClaw\u002Fblob\u002Fmain\u002Fecosystem\u002Fskills\u002Fyoutube_clipper\u002FSKILL.md",[],[202,225,226,208,227,228,229,230,231,232,39,38,233,234,235,236,237],"clipper","youtube clipper","Bash","下载","视频","生成","关键词","翻译","clip","总结","工具","文案","sonnet"]