本文へ移動
cccskills
無料GitHub で公開

kelly-invest-webull

Busabase-backed, read-only App-in-Skill portfolio dashboard that aggregates Webull brokerage holdings (accounts, positions, cash/margin, market value, unrealized P/L, day change, buying power). Use when the user invokes $kelly-invest-webull or /kelly-invest-webull, wants to review their Webull portfolio, holdings, positions, accounts (cash/margin), asset allocation, market value, unrealized P/L, day change, cash, or buying power. Read-only aggregation only — it never places, modifies, or cancels orders and never moves money.

インストール方法を見る

含まれるファイル(67)

  • SKILL.md10.9 KB
  • agents/openai.yaml229 B
  • assets/screenshots/accounts-zh-CN.webp130 B
  • assets/screenshots/accounts.webp130 B
  • assets/screenshots/detail-zh-CN.webp130 B
  • assets/screenshots/detail.webp130 B
  • assets/screenshots/overview-zh-CN.webp130 B
  • assets/screenshots/overview.webp130 B
  • assets/screenshots/positions-zh-CN.webp130 B
  • assets/screenshots/positions.webp130 B
  • assets/screenshots/thumbs/accounts-zh-CN.webp130 B
  • assets/screenshots/thumbs/accounts.webp130 B
  • assets/screenshots/thumbs/detail-zh-CN.webp130 B
  • assets/screenshots/thumbs/detail.webp130 B
  • assets/screenshots/thumbs/overview-zh-CN.webp130 B
  • assets/screenshots/thumbs/overview.webp130 B
  • assets/screenshots/thumbs/positions-zh-CN.webp130 B
  • assets/screenshots/thumbs/positions.webp130 B
  • busabase.json897 B
  • content/_folder.json137 B
  • content/accounts/base.json1.3 KB
  • content/kelly-invest-webull-app/_node.json157 B
  • content/kelly-invest-webull-app/.busabaseignore194 B
  • content/kelly-invest-webull-app/app/accent-theme.css8.0 KB
  • content/kelly-invest-webull-app/app/accent-theme.js7.3 KB
  • content/kelly-invest-webull-app/app/app.js27.2 KB
  • content/kelly-invest-webull-app/app/base-ui.css13.0 KB
  • content/kelly-invest-webull-app/app/demo-visuals.css1.5 KB
  • content/kelly-invest-webull-app/app/demo-visuals.js3.4 KB
  • content/kelly-invest-webull-app/app/i18n/messages.js5.1 KB
  • content/kelly-invest-webull-app/app/index.html4.5 KB
  • content/kelly-invest-webull-app/app/js/busabase-client.js226 B
  • content/kelly-invest-webull-app/app/js/config.js3.7 KB
  • content/kelly-invest-webull-app/app/js/connect-gate.js1.7 KB
  • content/kelly-invest-webull-app/app/js/demo-visuals-data.js4.5 KB
  • content/kelly-invest-webull-app/app/js/pagination.js4.6 KB
  • content/kelly-invest-webull-app/app/js/providers/busabase-provider.js7.6 KB
  • content/kelly-invest-webull-app/app/js/providers/demo-provider.js6.5 KB
  • content/kelly-invest-webull-app/app/js/providers/index.js270 B
  • content/kelly-invest-webull-app/app/js/runtime.js3.4 KB
  • content/kelly-invest-webull-app/app/js/webull-model.js11.4 KB
  • content/kelly-invest-webull-app/app/styles.css23.3 KB
  • content/kelly-invest-webull-app/app/styles/editorial.css30.7 KB
  • content/kelly-invest-webull-app/app/vendor/busabase-airapp-gate.css6.1 KB
  • content/kelly-invest-webull-app/app/vendor/busabase-airapp-gate.js11.2 KB
  • content/kelly-invest-webull-app/app/vendor/busabase-airapp.js556.0 KB
  • content/kelly-invest-webull-app/app/vendor/busabase-sdk.js849.5 KB
  • content/kelly-invest-webull-app/package.json1.1 KB
  • content/kelly-invest-webull-app/pnpm-lock.yaml5.2 KB
  • content/kelly-invest-webull-app/pnpm-workspace.yaml50 B
  • content/kelly-invest-webull-app/scripts/check-editorial.mjs6.1 KB
  • content/kelly-invest-webull-app/scripts/check.mjs4.8 KB
  • content/kelly-invest-webull-app/server.js3.1 KB
  • content/kelly-invest-webull-app/test/webull-model.test.mjs7.1 KB
  • content/positions/base.json2.5 KB
  • content/positions/records.ndjson1.1 KB
  • content/settings/base.json946 B
  • package.json423 B
  • pnpm-lock.yaml4.3 KB
  • pnpm-workspace.yaml50 B
  • README.md2.9 KB
  • references/portfolio-schema.md4.3 KB
  • scripts/publish_airapp.mjs3.1 KB
  • scripts/setup.mjs6.4 KB
  • scripts/sync_webull.mjs13.2 KB
  • scripts/sync-content.mjs2.5 KB
  • scripts/webull_bridge.py3.3 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Kelly Invest (Webull)

Overview

Kelly Invest (Webull) is a Busabase Cloud App-in-Skill. Its canonical product surface is the AirApp in Busabase, not a separate local-data product. The same Hono source supports an explicitly requested local preview with OAuth connection bootstrap. Use this skill as Kelly's read-only Webull portfolio operator: an Overview (totals, unrealized P/L, day change, cash, allocation donut, top movers, insights), a sortable Positions table, an Accounts view (cash and margin), and a per-symbol Position detail pane.

Default behavior is AirApp-first. Unless the user explicitly asks only for explanation, give the user the clickable AirApp URL. Start localhost only when local preview/debugging is explicitly requested; it uses the same Busabase resources and never offers another data provider. Use chat-only mode only when the user says "纯聊天", "chat only", "不要打开 UI", or similar.

This is a monitoring dashboard: there is no approval lifecycle and no decisions workflow.

Mandatory Dependencies

  1. Read and follow $kelly-app-skill-creator for product behavior, visual quality, responsive layout, and the complete canonical content/kelly-invest-webull-app/ artifact.
  2. Read and follow $busabase for connection, target Space, node discovery, ChangeRequests, review, and merge behavior.
  3. Read and follow $busabase-app-creator for resource modeling, AirApp runtime limits, security, validation, and deployment.

If a dependency is unavailable, preserve this skill's local artifact and product contracts, stop before the unavailable Busabase operation, and report the exact missing dependency. Do not invent a second data backend.

App UI Screenshots

<table> <tr> <td width="50%"><img src="assets/screenshots/overview.webp" alt="Kelly Invest overview"></td> <td width="50%"><img src="assets/screenshots/positions.webp" alt="Kelly Invest positions"></td> </tr> <tr> <td><strong>Overview</strong><br>Portfolio command desk with market value, unrealized P/L, day change, cash, an allocation-by-asset-type donut, and top day movers.</td> <td><strong>Positions</strong><br>Sortable holdings table across symbol, asset type, quantity, average cost, last price, market value, unrealized P/L, and portfolio weight.</td> </tr> <tr> <td width="50%"><img src="assets/screenshots/accounts.webp" alt="Kelly Invest accounts"></td> <td width="50%"><img src="assets/screenshots/detail.webp" alt="Kelly Invest position detail"></td> </tr> <tr> <td><strong>Accounts</strong><br>Per-account view (cash and margin) with net liquidation, total cash, buying power, and the positions held in each account.</td> <td><strong>Position detail</strong><br>Single-symbol view with cost basis, market value, unrealized P/L and percentage, day change, weight, and holding account.</td> </tr> </table>

Boundary

  • The skill may read Webull account/balance/position data, normalize it, and write Accounts/Positions/Settings rows into Busabase through the trusted scripts/sync_webull.mjs process only.
  • The AirApp reads Busabase records only; it is entirely read-only and must NEVER place, modify, or cancel orders. NEVER move money, transfer, withdraw, or change account settings. There is no trading path in this skill by design (readOnly: true, no writeProcedures).
  • Treat all holdings/account data as sensitive. Never commit Webull credentials, config.local.json, env files, or raw Webull responses.

Busabase Resources

Three Bases under one application Folder (kelly-invest-webull), declared in content/kelly-invest-webull-app/app/js/config.js and the generated template sidecars under content/:

  • accounts: Webull cash and margin accounts (account_id, account_type, display_name, currency, net_liquidation, total_cash, buying_power).
  • positions: holdings per account (position_id = account_id:symbol, symbol, name, asset_type, account_id, quantity, avg_cost, last_price, market_value, cost_basis, unrealized_pnl, unrealized_pnl_pct, day_change, day_change_pct, currency). Weights, totals, and allocation are computed at read time by content/kelly-invest-webull-app/app/js/webull-model.js (assembleSnapshot), never stored.
  • settings: two rows — config (sanitized Webull region/base URL/account allowlist, base currency, target allocation, generated_at, warnings — no secrets) and onboarding.

Resources provision lazily through an idempotent Busabase ChangeRequest the first time the app runs in a Space; see references/portfolio-schema.md for exact field shapes. The AirApp never writes to any Base — only the trusted sync script does.

Data Provider — Real Webull Integration

The skill reads Webull; the app only ever reads the normalized Busabase snapshot.

  • lib/data-provider/webull.ts's field-mapping and credential-resolution logic (mapAccount, mapPosition, normalizeAssetType, resolveWebullCredentials) was ported verbatim into content/kelly-invest-webull-app/app/js/webull-model.js, shared by both the browser (for assembleSnapshot/computeInsights) and the trusted sync script (for the Webull-specific mapping).
  • scripts/sync_webull.mjs is the only process that writes to Busabase. It resolves Webull App Key / App Secret from env vars named in local config (config.webull.app_key_env / app_secret_env, defaults KELLY_INVEST_WEBULL_APP_KEY / KELLY_INVEST_WEBULL_APP_SECRET), fetches live account/balance/position data, and writes normalized rows via bases.createChangeRequest / records.changeRequest with its own BUSABASE_BASE_URL / BUSABASE_API_KEY / BUSABASE_SPACE_ID credentials (autoMerge: true).
  • Webull has no first-party Node SDK — the official SDK is webull-openapi-python-sdk (Python), and Webull's wire-level signing/endpoint shape is not published outside that SDK (the retired webull.ts adapter itself never implemented raw HTTP calls, only the credential + mapping logic, for the same reason). scripts/sync_webull.mjs therefore shells out to scripts/webull_bridge.py, which calls the exact SDK methods documented in the original adapter's comments (get_account_list(), get_account_balance(account_id), get_account_positions(account_id)). Confirm the Python SDK's exact import path against https://developer.webull.com/apis/docs/sdk/ before first live use.
  • For a credential-free dry run (e.g. CI, local testing), pass --fixture <path/to/raw.json> to sync_webull.mjs with a JSON payload shaped like { "accounts": [...], "positions": [...] } using the raw Webull SDK field names documented in webull-model.js.
  • Rate limit is ~10 requests / 30 seconds per App ID; batch and back off.

Run the sync from the skill root:

BUSABASE_BASE_URL=... BUSABASE_API_KEY=... BUSABASE_SPACE_ID=... \
  node scripts/sync_webull.mjs

First Run And Onboarding

On invocation, check the config and onboarding Settings rows for readiness. If absent, guide setup before syncing real holdings.

To connect Webull, the user needs a Webull OpenAPI App Key and App Secret from Webull's OpenAPI Management/Portal (region id us; approval typically takes 1-2 business days). A UAT test host exists at us-openapi-alb.uat.webullbroker.com.

Ask for non-secret setup details only: region, base URL, base currency, account allowlist, and which env var names hold the App Key / App Secret. Never ask the user to paste secret values into chat. Secrets belong only in local env files read by the trusted sync script, and config references them by name (app_key_env, app_secret_env).

Demo Mode

  • ?demo=1 opens a deterministic, fully offline mock portfolio (~10 positions across STOCK/ETF/CRYPTO in one cash and one margin account) with computed P/L for documentation and screenshots.
  • ?demo=positions, ?demo=accounts, and ?demo=detail select named mock scenes.
  • lang=en or lang=zh forces UI chrome language for screenshots.
  • Demo mode never reads or writes Busabase and never claims a real connection.

Local App

Default behavior is AirApp-first — give the user the clickable AirApp URL. Start pnpm --dir content/kelly-invest-webull-app dev only when local preview/debugging is explicitly requested. UI language supports English and Chinese chrome with an Auto default; the user is Chinese, keep symbols and provider values in their original form.

Views

  • #/overview: total market value, total unrealized P/L (color + %), day change, cash, and allocation-by-asset-type donut plus top day movers and insights.
  • #/positions: sortable table (symbol, name, qty, avg cost, last, market value, unrealized P/L %, weight).
  • #/accounts: cash and margin accounts with net liquidation, cash, buying power.
  • #/accounts/<account_id>: account summary and its filtered positions.
  • #/positions/<symbol>: per-symbol detail pane.
  • #/settings: sanitized setup summary — data provider, Webull region and base URL, credential-readiness booleans, and onboarding state. Never exposes secret values.

Insights

Read-only, deterministic observations computed by computeInsights in content/kelly-invest-webull-app/app/js/webull-model.js (ported verbatim from the retired content/kelly-invest-webull-app/server/insights.ts): single_position_concentration, crypto_concentration, allocation_drift, cash_drag, negative_cash, top_gainer, top_laggard. Neutral facts/flags, never advice or actions — no buy/sell/rebalance suggestions.

File Contract

Read references/portfolio-schema.md before editing the app, content/kelly-invest-webull-app/app/js/config.js, content/kelly-invest-webull-app/app/js/webull-model.js, or scripts/sync_webull.mjs.

Safety

  • Read-only by design. Prefer read-only Webull scopes/credentials.
  • Do not invent prices or fills. If a price or balance looks stale or missing, add a snapshot warning instead of guessing.
  • Redact credential-like strings in logs, reports, and UI state.
  • Keep syncs idempotent — scripts/sync_webull.mjs upserts by account_id/position_id so repeated runs never duplicate rows.

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Align all AI coding agents to a single source of truth. AGENTS.md for rules, .agents/skills/ for skills, symlinks for everything else. Use when setting up a repo for multiple agents, or when links are missing, broken, or out of date.

日本語の概要は準備中です。原文の説明を表示しています。

mr-kelly/skills52026年10月2日 更新

Read, answer and post on the Buda community forum at community.buda.im through its /api/v1/community REST API. Lists categories and posts, reads a thread with its replies, searches, and publishes posts and replies behind an explicit confirmation. Use when the user invokes $buda-community or /buda-community, asks what is happening in the Buda community, wants an unanswered question triaged or answered, or wants something posted or announced there.

日本語の概要は準備中です。原文の説明を表示しています。

mr-kelly/skills52026年10月2日 更新

Read, answer and post on the Busabase community forum at community.busabase.com through its /api/v1/community REST API. Lists categories and posts, reads a thread with its replies, searches, and publishes posts and replies behind an explicit confirmation. Use when the user invokes $busabase-community or /busabase-community, asks what is happening in the Busabase community, wants an unanswered question triaged or answered, or wants something posted or announced there.

日本語の概要は準備中です。原文の説明を表示しています。

mr-kelly/skills52026年10月2日 更新

kelly-ads

無料

Ad-campaign command desk (投放指挥台, Busabase App-in-Skill) for a cross-border e-commerce seller running Amazon Ads, Meta (FB/IG), TikTok Ads, and Google Ads. Use when the user invokes $kelly-ads or /kelly-ads, or asks about 投放, ad campaigns, ad spend, ACOS, ROAS, Amazon Ads, TikTok ads, Meta ads, Google Ads, search terms, negative keywords, bid adjustment, budget pacing, CPC spikes, rejected ads, ad anomaly detection, 广告优化, or reviewing agent-proposed adjustment cards (negative keyword, bid down/up, pause target, budget shift, creative refresh).

日本語の概要は準備中です。原文の説明を表示しています。

mr-kelly/skills52026年10月2日 更新

Busabase-backed App-in-Skill low-code agent configuration and governance console for a platform team. Use when the user invokes $kelly-agent-builder or /kelly-agent-builder, wants to review or edit a catalog of mock LLM agent configs, check quota usage, find configs that need attention, move a draft to live, pause a live agent, or archive an agent. Mock config/governance console only — it never provisions or calls any real agent.

日本語の概要は準備中です。原文の説明を表示しています。

mr-kelly/skills52026年10月2日 更新

Review board (Busabase App-in-Skill) that runs a fixed suite of mock test cases against a baseline vs candidate agent version and surfaces rubric-scored regressions before a release. Use when the user invokes $kelly-agent-eval or /kelly-agent-eval, wants to review agent-version regressions, compare baseline vs candidate quality, triage a release, or record a release approve/block decision. Deterministic mock rubric scores only — not a real LLM-judge call, and it never deploys anything.

日本語の概要は準備中です。原文の説明を表示しています。

mr-kelly/skills52026年10月2日 更新

mr-kelly のスキルをすべて見る

このスキルの問題を報告する