{
  "schemaVersion": "1.0",
  "item": {
    "slug": "banana-farmer",
    "name": "Banana Farmer",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/adamandjarvis/banana-farmer",
    "canonicalUrl": "https://clawhub.ai/adamandjarvis/banana-farmer",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/banana-farmer",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=banana-farmer",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "scripts/bf-compare.py",
      "scripts/bf-lookup.py",
      "scripts/bf-market.py",
      "scripts/bf-movers.py",
      "scripts/bf-portfolio.py"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/banana-farmer"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/banana-farmer",
    "agentPageUrl": "https://openagent3.xyz/skills/banana-farmer/agent",
    "manifestUrl": "https://openagent3.xyz/skills/banana-farmer/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/banana-farmer/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Financial Intelligence Skill",
        "body": "Real-time momentum scoring and market intelligence for 6,500+ stocks and crypto assets. Powered by Banana Farmer — an AI momentum scanner that combines technical analysis, price momentum, and social sentiment into a single 0-100 Ripeness Score.\n\nBacked by 730 days of tracked data across 12,450+ signals with a verified 80% five-day win rate."
      },
      {
        "title": "Quick Start",
        "body": "Option A — Self-provision a free key instantly (no account needed):\n\ncurl -s -X POST \"https://bananafarmer.app/api/bot/v1/keys/trial\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\": \"My Agent\", \"email\": \"you@example.com\"}'\n\nSave the key from the response. One key per email, instant, no credit card.\n\nOption B — Sign up for a full account: bananafarmer.app/developers\n\nThen:\n\nSet your key: export BF_API_KEY=bf_bot_your_key_here (or add to OpenClaw config)\nTry it: python3 scripts/bf-lookup.py AAPL — you get score, badge, RSI, coil, price action, bull/bear case, and what to watch for\n\nThat is it. You are now scanning 6,500+ assets for momentum signals."
      },
      {
        "title": "Single Ticker Analysis",
        "body": "Look up any stock or crypto symbol for a full momentum profile: score, badge, RSI, coil pattern, EMA alignment, price action, volatility, scoring breakdown, AI summary, and bull/bear cases.\n\nExample prompts:\n\n\"What's the momentum on AAPL?\"\n\"Look up TSLA for me\"\n\"How's Bitcoin looking?\"\n\"Check NVDA's score and technicals\"\n\"Is CRWV ripe?\"\n\"What's the coil score on AMD?\"\n\"Pull up the full analysis on SMCI\"\n\"Is PLTR overbought right now?\"\n\nHow to run:\n\npython3 scripts/bf-lookup.py AAPL\npython3 scripts/bf-lookup.py TSLA NVDA AMD   # Multiple tickers at once\npython3 scripts/bf-lookup.py BTC              # Crypto works too\n\nWhat you get back: Score (0-100), badge (ripe/ripening/overripe/too-late/neutral), current price, 1d and 5d change, RSI with overbought/oversold labels, coil score with breakout flag, EMA 20/50 alignment, 52-week high proximity, volatility metrics, scoring breakdown (technical/momentum/social), key drivers, AI summary bullets, bull case, bear case, and what to watch for."
      },
      {
        "title": "Top Signals / Batch Analysis",
        "body": "See the highest-scoring momentum signals right now — the tickers showing the strongest alignment across technical, price action, and social indicators.\n\nExample prompts:\n\n\"What are the top signals right now?\"\n\"Show me the hottest momentum setups\"\n\"Any ripe signals today?\"\n\"Top 5 stocks by momentum score\"\n\"What's ripening that I should watch?\"\n\"Show me the top 20 signals\"\n\"Any ripe crypto signals?\"\n\nHow to run:\n\npython3 scripts/bf-market.py top                        # Default top 10, all badges\npython3 scripts/bf-market.py top --limit 20             # Top 20\npython3 scripts/bf-market.py top --badge ripe           # Only ripe signals\npython3 scripts/bf-market.py top --badge ripening       # Only ripening (watchlist candidates)\npython3 scripts/bf-market.py top --limit 5 --badge ripe # Top 5 ripe only\n\nWhat you get back: Ranked table with symbol, score, badge, 1-day change, 5-day change, and key drivers for each signal. Results are deduplicated by symbol automatically."
      },
      {
        "title": "Portfolio Tracking",
        "body": "Track multiple holdings across accounts. Get a morning-brief-style intelligence report with alerts for RSI overbought/oversold, big daily moves, ripe/overripe signals, risk flags, and P&L calculations.\n\nExample prompts:\n\n\"Check my portfolio\"\n\"How are my holdings doing?\"\n\"Run a portfolio brief\"\n\"Any alerts on my positions?\"\n\"How's my aggressive account looking?\"\n\"What's the P&L on my tech holdings?\"\n\"Any of my holdings overbought?\"\n\"Which of my stocks are ripe right now?\"\n\nHow to run:\n\npython3 scripts/bf-portfolio.py portfolios.json                 # Full brief, all accounts\npython3 scripts/bf-portfolio.py portfolios.json --account aaron  # Filter to one account\npython3 scripts/bf-portfolio.py portfolios.json --json           # JSON output for piping\n\nPortfolio file format (portfolios.json):\n\n{\n  \"accounts\": [\n    {\n      \"id\": \"personal\",\n      \"name\": \"My Portfolio\",\n      \"risk_profile\": \"aggressive\",\n      \"holdings\": [\n        {\"symbol\": \"AAPL\", \"shares\": 50, \"cost_basis\": 185.00},\n        {\"symbol\": \"NVDA\", \"shares\": 20, \"cost_basis\": 450.00},\n        {\"symbol\": \"TSLA\", \"shares\": 10, \"cost_basis\": 210.00}\n      ]\n    },\n    {\n      \"id\": \"retirement\",\n      \"name\": \"IRA Account\",\n      \"risk_profile\": \"conservative\",\n      \"holdings\": [\n        {\"symbol\": \"VOO\", \"shares\": 100, \"cost_basis\": 430.00},\n        {\"symbol\": \"ABBV\", \"shares\": 40, \"cost_basis\": 155.00}\n      ]\n    }\n  ]\n}\n\nWhat you get back: Market status, data freshness, per-account sections with alerts (overbought, oversold, big moves, ripe/overripe signals, too-late warnings, risk-profile mismatches), and detailed holding lines showing price, score, badge, changes, RSI, shares, cost basis, and unrealized P&L with percentages.\n\nAlert types generated:\n\nSIGNAL: holding is ripe or overripe\nCAUTION: holding is too-late (momentum exhausted)\nOVERBOUGHT: RSI above 70 (or 80 for strong warning)\nOVERSOLD: RSI below 30 (potential bounce zone)\nBIG MOVE: more than 5% daily change\nWEEKLY: more than 10% five-day change\nNOTE: high momentum in conservative account"
      },
      {
        "title": "Market Overview",
        "body": "Get a bird's-eye view of the market: how many signals are firing by badge, what is trending, new ripe signals, and a narrative summary.\n\nExample prompts:\n\n\"What's the market doing today?\"\n\"Give me a market pulse\"\n\"How's the overall momentum landscape?\"\n\"How many ripe signals are there right now?\"\n\"What's trending in the market?\"\n\"Any new ripe signals today?\"\n\nHow to run:\n\npython3 scripts/bf-market.py pulse\n\nWhat you get back: Narrative summary, signal counts broken down by badge (ripe, ripening, overripe, too-late, neutral), trending symbols, and newly ripe signals that just crossed the threshold."
      },
      {
        "title": "Performance Tracking / Proof Data",
        "body": "See which signals actually played out: winners and losers with real entry prices, current prices, percentage moves, and milestone returns over multiple time horizons.\n\nExample prompts:\n\n\"Which signals worked this week?\"\n\"Show me recent winners\"\n\"What's the track record look like?\"\n\"Any big movers from recent signals?\"\n\"Show me winners from the last 30 days\"\n\"What percentage of signals won this week?\"\n\"What were the biggest losers recently?\"\n\nHow to run:\n\npython3 scripts/bf-movers.py                       # Default: last 7 days, top 5\npython3 scripts/bf-movers.py --days 30 --limit 10  # Last 30 days, top 10\npython3 scripts/bf-movers.py --days 1 --limit 3    # Today's movers\n\nWhat you get back: Winners and losers sections, each showing symbol, percentage change, entry price, current price, and milestone returns (1d, 3d, 5d, 10d). Summary line with calculated win rate for the period."
      },
      {
        "title": "Risk Assessment",
        "body": "Evaluate whether a stock is extended, overbought, or showing risk flags. Combine RSI, badge, coil, and volatility data into a risk picture.\n\nExample prompts:\n\n\"Is TSLA overbought?\"\n\"What's the risk on NVDA right now?\"\n\"Is AMD overripe?\"\n\"Should I be worried about my SMCI position?\"\n\"What's the max drawdown on CRWV?\"\n\"Is this too late to buy PLTR?\"\n\"Any of the top signals looking overextended?\"\n\nHow to run:\n\npython3 scripts/bf-lookup.py TSLA   # Check RSI, badge, volatility, and bear case\n\nWhat to look for in the output:\n\nRSI above 70: overbought warning, watch for pullback\nRSI above 80: strongly overbought\nBadge \"overripe\": already extended, pullback likely\nBadge \"too-late\": chasing at this level carries elevated risk\nMax drawdown percentage: historical worst case from entry\nAverage daily range: how volatile it trades\nBear case: the AI-generated downside scenario"
      },
      {
        "title": "Comparison Queries",
        "body": "Compare multiple tickers side by side for momentum scores, technicals, and risk profiles.\n\nExample prompts:\n\n\"Compare AAPL vs MSFT momentum\"\n\"Which has better momentum: NVDA or AMD?\"\n\"Look up TSLA, RIVN, and LCID\"\n\"Compare the big tech names — AAPL, GOOGL, MSFT, META\"\n\"Which mega cap has the highest coil score?\"\n\nHow to run:\n\npython3 scripts/bf-compare.py AAPL MSFT          # Side-by-side table comparison\npython3 scripts/bf-compare.py NVDA AMD INTC AVGO # Compare semiconductor names\npython3 scripts/bf-compare.py TSLA RIVN LCID     # EV sector comparison\npython3 scripts/bf-lookup.py AAPL MSFT           # Full deep-dive for each (more detail)\n\nWhat you get back: A formatted comparison table showing score, badge, price, RSI, coil score, EMA alignment, 52-week proximity, scoring breakdown, and volatility side by side. Includes a verdict (strongest/weakest momentum) and risk flags (overbought, coiled for breakout)."
      },
      {
        "title": "Watchlist Management",
        "body": "Use the top signals and portfolio tools together to build and track watchlists. Filter by badge to focus on ripening setups that are worth monitoring.\n\nExample prompts:\n\n\"Add NVDA to my watchlist\" (add to your portfolios.json)\n\"What's ripening that I should watch?\"\n\"Build me a watchlist of ripening signals\"\n\"Update my watchlist with today's top ripening stocks\"\n\"Track these for me: AAPL, NVDA, AMD, TSLA\"\n\nHow to run:\n\n# Today's curated watchlist picks (pre-selected by the system)\npython3 scripts/bf-watchlist.py picks\n\n# Find watchlist candidates from top signals\npython3 scripts/bf-market.py top --badge ripening --limit 10\n\n# Track specific symbols (add to portfolios.json with 0 shares)\npython3 scripts/bf-portfolio.py portfolios.json\n\nTip: Use bf-watchlist.py picks for the system's daily curated picks, or create a \"watchlist\" account in your portfolios.json with shares: 0 and cost_basis: 0 for each symbol. The portfolio brief will show scores, badges, RSI, and alerts without P&L calculations.\n\n{\n  \"id\": \"watchlist\",\n  \"name\": \"Watchlist\",\n  \"risk_profile\": \"moderate\",\n  \"holdings\": [\n    {\"symbol\": \"NVDA\", \"shares\": 0, \"cost_basis\": 0},\n    {\"symbol\": \"AMD\", \"shares\": 0, \"cost_basis\": 0}\n  ]\n}"
      },
      {
        "title": "Sector and Theme Analysis",
        "body": "Analyze momentum across entire sectors, or drill into specific industry groups.\n\nExample prompts:\n\n\"Which sectors have the most momentum?\"\n\"What's the hottest sector right now?\"\n\"How are the semiconductor stocks doing?\"\n\"Check the EV sector — TSLA, RIVN, LCID, NIO\"\n\"Run the FAANG names for me\"\n\"What's happening in biotech?\"\n\"Check the momentum on airline stocks\"\n\nHow to run:\n\n# Full sector momentum breakdown (auto-classifies top 50 signals)\npython3 scripts/bf-sectors.py\n\n# Sector data as JSON for processing\npython3 scripts/bf-sectors.py --json\n\n# Deep-dive a specific sector group\npython3 scripts/bf-compare.py NVDA AMD INTC AVGO  # Semiconductors\npython3 scripts/bf-compare.py AAPL MSFT GOOGL META # Big tech\npython3 scripts/bf-lookup.py TSLA RIVN LCID NIO    # Full detail per ticker\n\nWhat you get back: The sectors script groups all top signals by sector (Technology, Healthcare, Financials, Energy, Consumer, Industrials, Real Estate, etc.), shows signal count, average score, heat rating (HOT/WARM/COOL/COLD), ripe signal count, and sector leaders. Use bf-compare.py for side-by-side comparison within a sector group."
      },
      {
        "title": "Historical Context and Win Rates",
        "body": "Query the system's track record and statistical performance data.\n\nExample prompts:\n\n\"What's the 5-day win rate for ripe signals?\"\n\"How does 1-day performance compare to 5-day?\"\n\"What's the average return on signals above 90?\"\n\"How many signals have been tracked total?\"\n\"What's the historical data span?\"\n\"Does patience actually improve win rate?\"\n\nHow to run:\n\npython3 scripts/bf-watchlist.py scorecard  # System win rates by holding period and score threshold\npython3 scripts/bf-watchlist.py horizons   # Time horizon analysis (how long to hold)\npython3 scripts/bf-market.py health        # System stats and data freshness\npython3 scripts/bf-movers.py --days 30     # Recent track record with win rate\n\nTrack record reference (from 12,450 signals over 730 days):\n\nHolding PeriodWin RateAvg ReturnAvg WinAvg Loss1 day76.5%+1.35%+2.07%-0.97%3 days78.4%+2.69%+3.87%-1.62%5 days79.9%+4.51%+6.24%-2.37%10 days79.4%+5.40%+7.54%-2.86%1 month80.1%+8.16%+11.26%-4.33%2 months79.1%+9.90%+13.96%-5.51%\n\nKey insight: Win rate starts at 76.5% on day one and climbs to 80.1% by one month. The edge is patience."
      },
      {
        "title": "Alert-Style Queries",
        "body": "Check for actionable conditions across your holdings or the broader market.\n\nExample prompts:\n\n\"Alert me if any holding goes ripe\"\n\"Any of my stocks overbought?\"\n\"Which holdings have RSI below 30?\"\n\"Are any top signals showing a coil above 70?\"\n\"What in my portfolio has the biggest move today?\"\n\"Any too-late warnings on my positions?\"\n\nHow to run:\n\n# Portfolio alerts (automatically flags ripe, overbought, oversold, big moves)\npython3 scripts/bf-portfolio.py portfolios.json\n\n# Market-wide scan for ripe signals\npython3 scripts/bf-market.py top --badge ripe --limit 20\n\n# Check specific names for risk\npython3 scripts/bf-lookup.py AAPL TSLA NVDA\n\nThe portfolio brief automatically generates alerts. Look for the ALERTS section, which flags: SIGNAL (ripe/overripe), CAUTION (too-late), OVERBOUGHT (RSI > 70), OVERSOLD (RSI < 30), BIG MOVE (> 5% daily), WEEKLY (> 10% five-day), and risk-profile mismatches."
      },
      {
        "title": "System Health Check",
        "body": "Verify data freshness and market status before making decisions.\n\nExample prompts:\n\n\"Is the data fresh?\"\n\"Is the market open?\"\n\"Check system health\"\n\"Any data issues right now?\"\n\nHow to run:\n\npython3 scripts/bf-market.py health\n\nWhat you get back: Market status (open, closed, pre-market, after-hours), data freshness (live, recent, stale), and any safety advisory. Always check health before acting on signals — stale data during market hours means something is wrong."
      },
      {
        "title": "Ripeness Score (0-100)",
        "body": "The score is a composite of four pillars weighted by their predictive power:\n\nPillarWeightWhat It MeasuresTechnical Analysis35-55%Chart patterns, RSI, moving averages, coil/spring patternsMomentum25-30%Price velocity in the 1-3% early sweet spot, volume confirmationSocial Sentiment20-45%Reddit and X mentions, early buzz detection (1.2-2.0x normal activity)Crowd Intelligence0-10%Crypto only: futures positioning, funding rates\n\nHigher score means stronger alignment across all pillars. A score of 80 with Technical at 45% and Social at 35% tells a different story than 80 with Technical at 55% and Social at 20% — check the scoring breakdown."
      },
      {
        "title": "Badge System",
        "body": "BadgeScore RangeWhat It MeansActionRipe75-89High conviction setup, strong momentum with favorable entryBest risk/reward windowRipening60-74Momentum building but not fully formedWatch, not act — add to watchlistOverripe90-100Extended, may be due for consolidation or pullbackCaution, tighten stopsToo-LateN/AAlready made significant move, chasing carries elevated riskDo not chaseNeutralBelow 60No significant momentum signalNo edge, stay patient\n\nScore thresholds for significance: 95+ is rare and highest conviction, 85-94 is strong, 80-84 is actionable."
      },
      {
        "title": "RSI (Relative Strength Index)",
        "body": "RSI measures momentum on a 0-100 scale:\n\nBelow 30: Oversold. Price has been beaten down; potential bounce zone. Does not mean \"buy\" — it means selling pressure may be exhausting.\n30-70: Normal range. No extreme reading.\nAbove 70: Overbought. Price has been running hard; watch for pullback. Does not mean \"sell\" — strong trends stay overbought for weeks.\nAbove 80: Strongly overbought. Higher probability of mean reversion."
      },
      {
        "title": "Coil Score (0-100)",
        "body": "The coil score measures price compression — how tightly a stock's price is consolidating. Think of it as a spring being compressed:\n\nBelow 40: Loose. Price is moving freely, no compression buildup.\n40-69: Moderate compression. Some consolidation, but not yet significant.\n70+: Coiled. Price is compressed into a tight range. This often precedes a sharp directional move (breakout or breakdown). This is the single most predictive indicator in the system.\n\nA stock with a high coil score AND a ripe badge is the strongest setup: momentum is aligned, and price compression suggests the next move could be significant."
      },
      {
        "title": "EMA 20 and EMA 50",
        "body": "Exponential Moving Averages smooth price data over 20 and 50 days:\n\nPrice above both EMAs: Bullish trend — short and medium term aligned upward\nPrice above EMA 20, below EMA 50: Short-term bounce in a longer downtrend — proceed with caution\nPrice below both EMAs: Bearish trend — momentum is against you\nEMA 20 crossing above EMA 50: Golden cross — potential trend change"
      },
      {
        "title": "Proximity to 52-Week High",
        "body": "A decimal from 0 to 1 representing how close the current price is to its 52-week high:\n\n0.95+ (95%+): Near highs — strong relative strength, but resistance ahead\n0.80-0.95: Healthy uptrend territory\nBelow 0.70: Significantly off highs — check if recovery or further decline"
      },
      {
        "title": "Track Record",
        "body": "The system is not new. It has been tracking signals for over two years:\n\n12,450+ signals analyzed across 730 days\n6,563 unique stocks tracked\n80% five-day win rate with +4.51% average return\n76.5% one-day win rate climbing to 80.1% by one month\nWin rate is consistent across score thresholds: 80+ scores all perform between 79-81%"
      },
      {
        "title": "Win Rate by Score Threshold (5-day horizon)",
        "body": "Score RangeWin RateAvg ReturnSample Size80-8580.2%+4.60%3,09685-9079.2%+4.45%3,11590-9579.4%+4.42%3,12495+80.7%+4.56%3,115"
      },
      {
        "title": "The Patience Edge",
        "body": "The data shows holding longer improves outcomes. Day-one win rate is 76.5%. By day five, it is 79.9%. By one month, 80.1%. Average returns scale from +1.35% (1 day) to +8.16% (1 month). The optimal risk/reward window is the 5-to-10-day holding period.\n\nThis is not a day-trading system. It catches momentum at 2% instead of 15%, then lets the move develop over days."
      },
      {
        "title": "BF_API_KEY not set",
        "body": "ERROR: BF_API_KEY not set. Get your key at https://bananafarmer.app\n\nFix: Export your API key: export BF_API_KEY=bf_bot_your_key_here. Or add it to your OpenClaw config or .env file."
      },
      {
        "title": "No signal data available",
        "body": "$XYZ: No signal data available\n\nCause: The symbol is not tracked, was delisted, or is a very low-volume OTC stock. Banana Farmer tracks 6,500+ stocks from NYSE and NASDAQ plus popular crypto. Penny stocks and OTC issues may not have enough data for a signal.\n\nFix: Verify the ticker symbol is correct. Try the exchange-standard format (no special characters). Crypto tickers use their standard symbols (BTC, ETH, SOL)."
      },
      {
        "title": "API timeout or connection error",
        "body": "$AAPL: Error — <urlopen error timed out>\n\nCause: The Banana Farmer API did not respond within 15 seconds. This can happen during high-traffic market opens or if the service is temporarily down.\n\nFix: Wait 30 seconds and retry. If repeated, check system health with python3 scripts/bf-market.py health. If health also times out, the API may be experiencing downtime."
      },
      {
        "title": "Rate limiting",
        "body": "The API rate limits depend on your tier: Free (10/min, 50/day), Pro (60/min, 10K/day), Max (120/min, 50K/day). Under normal usage you will not hit these limits. If you do:\n\nFix: Space out requests. The portfolio script fetches one symbol at a time, so a portfolio of 20 holdings makes 21 API calls (20 lookups + 1 health check). This is well within limits."
      },
      {
        "title": "Stale data warning",
        "body": "If bf-market.py health reports data freshness as \"stale\" during market hours, the data pipeline may be delayed. Signals and scores are based on data that refreshes every 15 minutes. Stale data (> 30 minutes old) during open market hours means scores may not reflect current conditions.\n\nFix: Note the staleness in your analysis. Prices move, but momentum signals are directional and usually remain valid for the session unless there is a major intraday reversal."
      },
      {
        "title": "403 Forbidden",
        "body": "HTTP Error 403: Forbidden\n\nCause: Missing or malformed User-Agent header. The API requires a User-Agent: BananaFarmerBot/1.0 header.\n\nFix: The scripts set this automatically. If you are calling the API directly, make sure to include the header."
      },
      {
        "title": "JSON Output Mode",
        "body": "For programmatic processing, the portfolio script supports JSON output:\n\npython3 scripts/bf-portfolio.py portfolios.json --json\n\nThis returns a JSON object with a brief field (the formatted text) and a signals field (score and badge for each looked-up symbol). Use this for piping into other tools, dashboards, or automated workflows."
      },
      {
        "title": "Multi-Account Portfolios",
        "body": "The portfolio file supports multiple accounts with different risk profiles. Each account gets its own section in the brief with account-specific alerts. A conservative account holding a high-momentum stock will get a NOTE alert that an aggressive account would not.\n\nSupported risk profiles: conservative, moderate, aggressive. The --account filter accepts partial matches on both the account id and name fields.\n\npython3 scripts/bf-portfolio.py portfolios.json --account ira\npython3 scripts/bf-portfolio.py portfolios.json --account retirement"
      },
      {
        "title": "Combining Scripts",
        "body": "Chain scripts together for richer analysis:\n\n# Morning routine: health check, then top signals, then portfolio\npython3 scripts/bf-market.py health && python3 scripts/bf-market.py top --limit 5 && python3 scripts/bf-portfolio.py portfolios.json\n\n# Find this week's winners, then deep-dive the top one\npython3 scripts/bf-movers.py --days 7 --limit 1\n\n# Scan for ripe signals and look up each one\npython3 scripts/bf-market.py top --badge ripe --limit 5\npython3 scripts/bf-lookup.py AAPL NVDA AMD  # use the symbols from top output"
      },
      {
        "title": "Filtering Top Signals",
        "body": "The top command supports badge and limit filters:\n\npython3 scripts/bf-market.py top --badge ripe --limit 5     # Only highest conviction\npython3 scripts/bf-market.py top --badge ripening --limit 10 # Watchlist candidates\npython3 scripts/bf-market.py top --limit 50                  # Broad scan"
      },
      {
        "title": "Movers Time Range",
        "body": "Control the lookback window for performance tracking:\n\npython3 scripts/bf-movers.py --days 1 --limit 3   # Today only\npython3 scripts/bf-movers.py --days 7 --limit 10   # This week\npython3 scripts/bf-movers.py --days 30 --limit 20  # This month"
      },
      {
        "title": "Scripts Reference",
        "body": "ScriptPurposeKey Argumentsbf-lookup.pyDeep analysis of specific tickersSYMBOL [SYMBOL2 ...]bf-market.pyMarket overview and signal scanninghealth, top [--limit N] [--badge X], pulsebf-portfolio.pyPortfolio intelligence with alertsFILE.json [--account NAME] [--json]bf-movers.pyWinners/losers proof data[--days N] [--limit N]bf-compare.pySide-by-side ticker comparison tableSYMBOL1 SYMBOL2 [SYMBOL3 ...] [--json]bf-watchlist.pyCurated picks, scorecard, horizonspicks, scorecard, horizons [--json]bf-sectors.pySector momentum breakdown[--json]\n\nAll scripts are in the scripts/ directory. All require python3 and BF_API_KEY in the environment. No additional pip packages are needed — everything uses the Python standard library."
      },
      {
        "title": "Pricing",
        "body": "PlanPriceWhat You GetFree$0Health, discover, top 3 signals. 10 req/min, 50/day. Enough to verify it works.Pro$49/month ($39/mo annual)Full 50+ leaderboard, all endpoints, proof images, portfolio, movers, watchlist, 30-day score history. 60 req/min, 10K/day.Max$149/month ($119/mo annual)Everything in Pro + historical scores with exact prices at signal, calculated returns, full 730+ day backtesting, bulk export, webhooks. 120 req/min, 50K/day.\n\nGet your key instantly at bananafarmer.app/developers. Free tier works immediately — no credit card needed.\n\nFor comparison: Danelfin Pro charges $79/mo for AI scores with historical data but no prices attached. Polygon.io charges $79-500/mo for raw price data with zero intelligence. Alpha Vantage is $50-250/mo for raw data. Banana Farmer Max at $149/mo gives you both — momentum intelligence AND exact prices at every signal — with 730+ days of backtesting proof. Still less than Polygon's mid-tier, with far more intelligence."
      },
      {
        "title": "Security",
        "body": "This skill is designed with transparency and safety in mind:\n\nOutbound HTTPS only: All scripts make only outbound HTTPS calls to bananafarmer.app. No other network connections, no inbound listeners, no file exfiltration.\nZero pip dependencies: Every script uses only the Python standard library (json, urllib, ssl, os, sys). No third-party packages to audit.\nMIT licensed: Full source code is readable and auditable.\nNo secrets in code: API key is read from the BF_API_KEY environment variable only. Never hardcoded, never logged.\nRead-only: The skill reads market data. It does not execute trades, manage accounts, or modify any files on your system.\nInfrastructure security: Security practices — TLS 1.3, AES-256, Cloudflare WAF, Stripe PCI DSS Level 1.\nLegal: Terms of Service · Privacy Policy · System Status"
      },
      {
        "title": "Disclaimer",
        "body": "This skill provides financial data, momentum scores, and analytical intelligence. It is not financial advice. All data is for informational and research purposes only.\n\nThis tool does not make buy or sell recommendations\nPast performance does not guarantee future results\nUsers should do their own research and consult a licensed financial advisor before making investment decisions\nWin rates and return figures are historical and based on backtested signal data\nStock data is delayed 15 minutes per exchange rules; crypto data is near real-time\n\nBy using this skill, you agree to the Banana Farmer API Terms.\n\nMarket data sourced by Tiingo.com. Momentum scoring, analysis, and the Ripeness Score methodology by Banana Farmer."
      }
    ],
    "body": "Financial Intelligence Skill\n\nReal-time momentum scoring and market intelligence for 6,500+ stocks and crypto assets. Powered by Banana Farmer — an AI momentum scanner that combines technical analysis, price momentum, and social sentiment into a single 0-100 Ripeness Score.\n\nBacked by 730 days of tracked data across 12,450+ signals with a verified 80% five-day win rate.\n\nQuick Start\n\nOption A — Self-provision a free key instantly (no account needed):\n\ncurl -s -X POST \"https://bananafarmer.app/api/bot/v1/keys/trial\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\": \"My Agent\", \"email\": \"you@example.com\"}'\n\n\nSave the key from the response. One key per email, instant, no credit card.\n\nOption B — Sign up for a full account: bananafarmer.app/developers\n\nThen:\n\nSet your key: export BF_API_KEY=bf_bot_your_key_here (or add to OpenClaw config)\nTry it: python3 scripts/bf-lookup.py AAPL — you get score, badge, RSI, coil, price action, bull/bear case, and what to watch for\n\nThat is it. You are now scanning 6,500+ assets for momentum signals.\n\nPrompt Examples\nSingle Ticker Analysis\n\nLook up any stock or crypto symbol for a full momentum profile: score, badge, RSI, coil pattern, EMA alignment, price action, volatility, scoring breakdown, AI summary, and bull/bear cases.\n\nExample prompts:\n\n\"What's the momentum on AAPL?\"\n\"Look up TSLA for me\"\n\"How's Bitcoin looking?\"\n\"Check NVDA's score and technicals\"\n\"Is CRWV ripe?\"\n\"What's the coil score on AMD?\"\n\"Pull up the full analysis on SMCI\"\n\"Is PLTR overbought right now?\"\n\nHow to run:\n\npython3 scripts/bf-lookup.py AAPL\npython3 scripts/bf-lookup.py TSLA NVDA AMD   # Multiple tickers at once\npython3 scripts/bf-lookup.py BTC              # Crypto works too\n\n\nWhat you get back: Score (0-100), badge (ripe/ripening/overripe/too-late/neutral), current price, 1d and 5d change, RSI with overbought/oversold labels, coil score with breakout flag, EMA 20/50 alignment, 52-week high proximity, volatility metrics, scoring breakdown (technical/momentum/social), key drivers, AI summary bullets, bull case, bear case, and what to watch for.\n\nTop Signals / Batch Analysis\n\nSee the highest-scoring momentum signals right now — the tickers showing the strongest alignment across technical, price action, and social indicators.\n\nExample prompts:\n\n\"What are the top signals right now?\"\n\"Show me the hottest momentum setups\"\n\"Any ripe signals today?\"\n\"Top 5 stocks by momentum score\"\n\"What's ripening that I should watch?\"\n\"Show me the top 20 signals\"\n\"Any ripe crypto signals?\"\n\nHow to run:\n\npython3 scripts/bf-market.py top                        # Default top 10, all badges\npython3 scripts/bf-market.py top --limit 20             # Top 20\npython3 scripts/bf-market.py top --badge ripe           # Only ripe signals\npython3 scripts/bf-market.py top --badge ripening       # Only ripening (watchlist candidates)\npython3 scripts/bf-market.py top --limit 5 --badge ripe # Top 5 ripe only\n\n\nWhat you get back: Ranked table with symbol, score, badge, 1-day change, 5-day change, and key drivers for each signal. Results are deduplicated by symbol automatically.\n\nPortfolio Tracking\n\nTrack multiple holdings across accounts. Get a morning-brief-style intelligence report with alerts for RSI overbought/oversold, big daily moves, ripe/overripe signals, risk flags, and P&L calculations.\n\nExample prompts:\n\n\"Check my portfolio\"\n\"How are my holdings doing?\"\n\"Run a portfolio brief\"\n\"Any alerts on my positions?\"\n\"How's my aggressive account looking?\"\n\"What's the P&L on my tech holdings?\"\n\"Any of my holdings overbought?\"\n\"Which of my stocks are ripe right now?\"\n\nHow to run:\n\npython3 scripts/bf-portfolio.py portfolios.json                 # Full brief, all accounts\npython3 scripts/bf-portfolio.py portfolios.json --account aaron  # Filter to one account\npython3 scripts/bf-portfolio.py portfolios.json --json           # JSON output for piping\n\n\nPortfolio file format (portfolios.json):\n\n{\n  \"accounts\": [\n    {\n      \"id\": \"personal\",\n      \"name\": \"My Portfolio\",\n      \"risk_profile\": \"aggressive\",\n      \"holdings\": [\n        {\"symbol\": \"AAPL\", \"shares\": 50, \"cost_basis\": 185.00},\n        {\"symbol\": \"NVDA\", \"shares\": 20, \"cost_basis\": 450.00},\n        {\"symbol\": \"TSLA\", \"shares\": 10, \"cost_basis\": 210.00}\n      ]\n    },\n    {\n      \"id\": \"retirement\",\n      \"name\": \"IRA Account\",\n      \"risk_profile\": \"conservative\",\n      \"holdings\": [\n        {\"symbol\": \"VOO\", \"shares\": 100, \"cost_basis\": 430.00},\n        {\"symbol\": \"ABBV\", \"shares\": 40, \"cost_basis\": 155.00}\n      ]\n    }\n  ]\n}\n\n\nWhat you get back: Market status, data freshness, per-account sections with alerts (overbought, oversold, big moves, ripe/overripe signals, too-late warnings, risk-profile mismatches), and detailed holding lines showing price, score, badge, changes, RSI, shares, cost basis, and unrealized P&L with percentages.\n\nAlert types generated:\n\nSIGNAL: holding is ripe or overripe\nCAUTION: holding is too-late (momentum exhausted)\nOVERBOUGHT: RSI above 70 (or 80 for strong warning)\nOVERSOLD: RSI below 30 (potential bounce zone)\nBIG MOVE: more than 5% daily change\nWEEKLY: more than 10% five-day change\nNOTE: high momentum in conservative account\nMarket Overview\n\nGet a bird's-eye view of the market: how many signals are firing by badge, what is trending, new ripe signals, and a narrative summary.\n\nExample prompts:\n\n\"What's the market doing today?\"\n\"Give me a market pulse\"\n\"How's the overall momentum landscape?\"\n\"How many ripe signals are there right now?\"\n\"What's trending in the market?\"\n\"Any new ripe signals today?\"\n\nHow to run:\n\npython3 scripts/bf-market.py pulse\n\n\nWhat you get back: Narrative summary, signal counts broken down by badge (ripe, ripening, overripe, too-late, neutral), trending symbols, and newly ripe signals that just crossed the threshold.\n\nPerformance Tracking / Proof Data\n\nSee which signals actually played out: winners and losers with real entry prices, current prices, percentage moves, and milestone returns over multiple time horizons.\n\nExample prompts:\n\n\"Which signals worked this week?\"\n\"Show me recent winners\"\n\"What's the track record look like?\"\n\"Any big movers from recent signals?\"\n\"Show me winners from the last 30 days\"\n\"What percentage of signals won this week?\"\n\"What were the biggest losers recently?\"\n\nHow to run:\n\npython3 scripts/bf-movers.py                       # Default: last 7 days, top 5\npython3 scripts/bf-movers.py --days 30 --limit 10  # Last 30 days, top 10\npython3 scripts/bf-movers.py --days 1 --limit 3    # Today's movers\n\n\nWhat you get back: Winners and losers sections, each showing symbol, percentage change, entry price, current price, and milestone returns (1d, 3d, 5d, 10d). Summary line with calculated win rate for the period.\n\nRisk Assessment\n\nEvaluate whether a stock is extended, overbought, or showing risk flags. Combine RSI, badge, coil, and volatility data into a risk picture.\n\nExample prompts:\n\n\"Is TSLA overbought?\"\n\"What's the risk on NVDA right now?\"\n\"Is AMD overripe?\"\n\"Should I be worried about my SMCI position?\"\n\"What's the max drawdown on CRWV?\"\n\"Is this too late to buy PLTR?\"\n\"Any of the top signals looking overextended?\"\n\nHow to run:\n\npython3 scripts/bf-lookup.py TSLA   # Check RSI, badge, volatility, and bear case\n\n\nWhat to look for in the output:\n\nRSI above 70: overbought warning, watch for pullback\nRSI above 80: strongly overbought\nBadge \"overripe\": already extended, pullback likely\nBadge \"too-late\": chasing at this level carries elevated risk\nMax drawdown percentage: historical worst case from entry\nAverage daily range: how volatile it trades\nBear case: the AI-generated downside scenario\nComparison Queries\n\nCompare multiple tickers side by side for momentum scores, technicals, and risk profiles.\n\nExample prompts:\n\n\"Compare AAPL vs MSFT momentum\"\n\"Which has better momentum: NVDA or AMD?\"\n\"Look up TSLA, RIVN, and LCID\"\n\"Compare the big tech names — AAPL, GOOGL, MSFT, META\"\n\"Which mega cap has the highest coil score?\"\n\nHow to run:\n\npython3 scripts/bf-compare.py AAPL MSFT          # Side-by-side table comparison\npython3 scripts/bf-compare.py NVDA AMD INTC AVGO # Compare semiconductor names\npython3 scripts/bf-compare.py TSLA RIVN LCID     # EV sector comparison\npython3 scripts/bf-lookup.py AAPL MSFT           # Full deep-dive for each (more detail)\n\n\nWhat you get back: A formatted comparison table showing score, badge, price, RSI, coil score, EMA alignment, 52-week proximity, scoring breakdown, and volatility side by side. Includes a verdict (strongest/weakest momentum) and risk flags (overbought, coiled for breakout).\n\nWatchlist Management\n\nUse the top signals and portfolio tools together to build and track watchlists. Filter by badge to focus on ripening setups that are worth monitoring.\n\nExample prompts:\n\n\"Add NVDA to my watchlist\" (add to your portfolios.json)\n\"What's ripening that I should watch?\"\n\"Build me a watchlist of ripening signals\"\n\"Update my watchlist with today's top ripening stocks\"\n\"Track these for me: AAPL, NVDA, AMD, TSLA\"\n\nHow to run:\n\n# Today's curated watchlist picks (pre-selected by the system)\npython3 scripts/bf-watchlist.py picks\n\n# Find watchlist candidates from top signals\npython3 scripts/bf-market.py top --badge ripening --limit 10\n\n# Track specific symbols (add to portfolios.json with 0 shares)\npython3 scripts/bf-portfolio.py portfolios.json\n\n\nTip: Use bf-watchlist.py picks for the system's daily curated picks, or create a \"watchlist\" account in your portfolios.json with shares: 0 and cost_basis: 0 for each symbol. The portfolio brief will show scores, badges, RSI, and alerts without P&L calculations.\n\n{\n  \"id\": \"watchlist\",\n  \"name\": \"Watchlist\",\n  \"risk_profile\": \"moderate\",\n  \"holdings\": [\n    {\"symbol\": \"NVDA\", \"shares\": 0, \"cost_basis\": 0},\n    {\"symbol\": \"AMD\", \"shares\": 0, \"cost_basis\": 0}\n  ]\n}\n\nSector and Theme Analysis\n\nAnalyze momentum across entire sectors, or drill into specific industry groups.\n\nExample prompts:\n\n\"Which sectors have the most momentum?\"\n\"What's the hottest sector right now?\"\n\"How are the semiconductor stocks doing?\"\n\"Check the EV sector — TSLA, RIVN, LCID, NIO\"\n\"Run the FAANG names for me\"\n\"What's happening in biotech?\"\n\"Check the momentum on airline stocks\"\n\nHow to run:\n\n# Full sector momentum breakdown (auto-classifies top 50 signals)\npython3 scripts/bf-sectors.py\n\n# Sector data as JSON for processing\npython3 scripts/bf-sectors.py --json\n\n# Deep-dive a specific sector group\npython3 scripts/bf-compare.py NVDA AMD INTC AVGO  # Semiconductors\npython3 scripts/bf-compare.py AAPL MSFT GOOGL META # Big tech\npython3 scripts/bf-lookup.py TSLA RIVN LCID NIO    # Full detail per ticker\n\n\nWhat you get back: The sectors script groups all top signals by sector (Technology, Healthcare, Financials, Energy, Consumer, Industrials, Real Estate, etc.), shows signal count, average score, heat rating (HOT/WARM/COOL/COLD), ripe signal count, and sector leaders. Use bf-compare.py for side-by-side comparison within a sector group.\n\nHistorical Context and Win Rates\n\nQuery the system's track record and statistical performance data.\n\nExample prompts:\n\n\"What's the 5-day win rate for ripe signals?\"\n\"How does 1-day performance compare to 5-day?\"\n\"What's the average return on signals above 90?\"\n\"How many signals have been tracked total?\"\n\"What's the historical data span?\"\n\"Does patience actually improve win rate?\"\n\nHow to run:\n\npython3 scripts/bf-watchlist.py scorecard  # System win rates by holding period and score threshold\npython3 scripts/bf-watchlist.py horizons   # Time horizon analysis (how long to hold)\npython3 scripts/bf-market.py health        # System stats and data freshness\npython3 scripts/bf-movers.py --days 30     # Recent track record with win rate\n\n\nTrack record reference (from 12,450 signals over 730 days):\n\nHolding Period\tWin Rate\tAvg Return\tAvg Win\tAvg Loss\n1 day\t76.5%\t+1.35%\t+2.07%\t-0.97%\n3 days\t78.4%\t+2.69%\t+3.87%\t-1.62%\n5 days\t79.9%\t+4.51%\t+6.24%\t-2.37%\n10 days\t79.4%\t+5.40%\t+7.54%\t-2.86%\n1 month\t80.1%\t+8.16%\t+11.26%\t-4.33%\n2 months\t79.1%\t+9.90%\t+13.96%\t-5.51%\n\nKey insight: Win rate starts at 76.5% on day one and climbs to 80.1% by one month. The edge is patience.\n\nAlert-Style Queries\n\nCheck for actionable conditions across your holdings or the broader market.\n\nExample prompts:\n\n\"Alert me if any holding goes ripe\"\n\"Any of my stocks overbought?\"\n\"Which holdings have RSI below 30?\"\n\"Are any top signals showing a coil above 70?\"\n\"What in my portfolio has the biggest move today?\"\n\"Any too-late warnings on my positions?\"\n\nHow to run:\n\n# Portfolio alerts (automatically flags ripe, overbought, oversold, big moves)\npython3 scripts/bf-portfolio.py portfolios.json\n\n# Market-wide scan for ripe signals\npython3 scripts/bf-market.py top --badge ripe --limit 20\n\n# Check specific names for risk\npython3 scripts/bf-lookup.py AAPL TSLA NVDA\n\n\nThe portfolio brief automatically generates alerts. Look for the ALERTS section, which flags: SIGNAL (ripe/overripe), CAUTION (too-late), OVERBOUGHT (RSI > 70), OVERSOLD (RSI < 30), BIG MOVE (> 5% daily), WEEKLY (> 10% five-day), and risk-profile mismatches.\n\nSystem Health Check\n\nVerify data freshness and market status before making decisions.\n\nExample prompts:\n\n\"Is the data fresh?\"\n\"Is the market open?\"\n\"Check system health\"\n\"Any data issues right now?\"\n\nHow to run:\n\npython3 scripts/bf-market.py health\n\n\nWhat you get back: Market status (open, closed, pre-market, after-hours), data freshness (live, recent, stale), and any safety advisory. Always check health before acting on signals — stale data during market hours means something is wrong.\n\nUnderstanding the Data\nRipeness Score (0-100)\n\nThe score is a composite of four pillars weighted by their predictive power:\n\nPillar\tWeight\tWhat It Measures\nTechnical Analysis\t35-55%\tChart patterns, RSI, moving averages, coil/spring patterns\nMomentum\t25-30%\tPrice velocity in the 1-3% early sweet spot, volume confirmation\nSocial Sentiment\t20-45%\tReddit and X mentions, early buzz detection (1.2-2.0x normal activity)\nCrowd Intelligence\t0-10%\tCrypto only: futures positioning, funding rates\n\nHigher score means stronger alignment across all pillars. A score of 80 with Technical at 45% and Social at 35% tells a different story than 80 with Technical at 55% and Social at 20% — check the scoring breakdown.\n\nBadge System\nBadge\tScore Range\tWhat It Means\tAction\nRipe\t75-89\tHigh conviction setup, strong momentum with favorable entry\tBest risk/reward window\nRipening\t60-74\tMomentum building but not fully formed\tWatch, not act — add to watchlist\nOverripe\t90-100\tExtended, may be due for consolidation or pullback\tCaution, tighten stops\nToo-Late\tN/A\tAlready made significant move, chasing carries elevated risk\tDo not chase\nNeutral\tBelow 60\tNo significant momentum signal\tNo edge, stay patient\n\nScore thresholds for significance: 95+ is rare and highest conviction, 85-94 is strong, 80-84 is actionable.\n\nRSI (Relative Strength Index)\n\nRSI measures momentum on a 0-100 scale:\n\nBelow 30: Oversold. Price has been beaten down; potential bounce zone. Does not mean \"buy\" — it means selling pressure may be exhausting.\n30-70: Normal range. No extreme reading.\nAbove 70: Overbought. Price has been running hard; watch for pullback. Does not mean \"sell\" — strong trends stay overbought for weeks.\nAbove 80: Strongly overbought. Higher probability of mean reversion.\nCoil Score (0-100)\n\nThe coil score measures price compression — how tightly a stock's price is consolidating. Think of it as a spring being compressed:\n\nBelow 40: Loose. Price is moving freely, no compression buildup.\n40-69: Moderate compression. Some consolidation, but not yet significant.\n70+: Coiled. Price is compressed into a tight range. This often precedes a sharp directional move (breakout or breakdown). This is the single most predictive indicator in the system.\n\nA stock with a high coil score AND a ripe badge is the strongest setup: momentum is aligned, and price compression suggests the next move could be significant.\n\nEMA 20 and EMA 50\n\nExponential Moving Averages smooth price data over 20 and 50 days:\n\nPrice above both EMAs: Bullish trend — short and medium term aligned upward\nPrice above EMA 20, below EMA 50: Short-term bounce in a longer downtrend — proceed with caution\nPrice below both EMAs: Bearish trend — momentum is against you\nEMA 20 crossing above EMA 50: Golden cross — potential trend change\nProximity to 52-Week High\n\nA decimal from 0 to 1 representing how close the current price is to its 52-week high:\n\n0.95+ (95%+): Near highs — strong relative strength, but resistance ahead\n0.80-0.95: Healthy uptrend territory\nBelow 0.70: Significantly off highs — check if recovery or further decline\nTrack Record\n\nThe system is not new. It has been tracking signals for over two years:\n\n12,450+ signals analyzed across 730 days\n6,563 unique stocks tracked\n80% five-day win rate with +4.51% average return\n76.5% one-day win rate climbing to 80.1% by one month\nWin rate is consistent across score thresholds: 80+ scores all perform between 79-81%\nWin Rate by Score Threshold (5-day horizon)\nScore Range\tWin Rate\tAvg Return\tSample Size\n80-85\t80.2%\t+4.60%\t3,096\n85-90\t79.2%\t+4.45%\t3,115\n90-95\t79.4%\t+4.42%\t3,124\n95+\t80.7%\t+4.56%\t3,115\nThe Patience Edge\n\nThe data shows holding longer improves outcomes. Day-one win rate is 76.5%. By day five, it is 79.9%. By one month, 80.1%. Average returns scale from +1.35% (1 day) to +8.16% (1 month). The optimal risk/reward window is the 5-to-10-day holding period.\n\nThis is not a day-trading system. It catches momentum at 2% instead of 15%, then lets the move develop over days.\n\nError Handling\nBF_API_KEY not set\nERROR: BF_API_KEY not set. Get your key at https://bananafarmer.app\n\n\nFix: Export your API key: export BF_API_KEY=bf_bot_your_key_here. Or add it to your OpenClaw config or .env file.\n\nNo signal data available\n$XYZ: No signal data available\n\n\nCause: The symbol is not tracked, was delisted, or is a very low-volume OTC stock. Banana Farmer tracks 6,500+ stocks from NYSE and NASDAQ plus popular crypto. Penny stocks and OTC issues may not have enough data for a signal.\n\nFix: Verify the ticker symbol is correct. Try the exchange-standard format (no special characters). Crypto tickers use their standard symbols (BTC, ETH, SOL).\n\nAPI timeout or connection error\n$AAPL: Error — <urlopen error timed out>\n\n\nCause: The Banana Farmer API did not respond within 15 seconds. This can happen during high-traffic market opens or if the service is temporarily down.\n\nFix: Wait 30 seconds and retry. If repeated, check system health with python3 scripts/bf-market.py health. If health also times out, the API may be experiencing downtime.\n\nRate limiting\n\nThe API rate limits depend on your tier: Free (10/min, 50/day), Pro (60/min, 10K/day), Max (120/min, 50K/day). Under normal usage you will not hit these limits. If you do:\n\nFix: Space out requests. The portfolio script fetches one symbol at a time, so a portfolio of 20 holdings makes 21 API calls (20 lookups + 1 health check). This is well within limits.\n\nStale data warning\n\nIf bf-market.py health reports data freshness as \"stale\" during market hours, the data pipeline may be delayed. Signals and scores are based on data that refreshes every 15 minutes. Stale data (> 30 minutes old) during open market hours means scores may not reflect current conditions.\n\nFix: Note the staleness in your analysis. Prices move, but momentum signals are directional and usually remain valid for the session unless there is a major intraday reversal.\n\n403 Forbidden\nHTTP Error 403: Forbidden\n\n\nCause: Missing or malformed User-Agent header. The API requires a User-Agent: BananaFarmerBot/1.0 header.\n\nFix: The scripts set this automatically. If you are calling the API directly, make sure to include the header.\n\nAdvanced Usage\nJSON Output Mode\n\nFor programmatic processing, the portfolio script supports JSON output:\n\npython3 scripts/bf-portfolio.py portfolios.json --json\n\n\nThis returns a JSON object with a brief field (the formatted text) and a signals field (score and badge for each looked-up symbol). Use this for piping into other tools, dashboards, or automated workflows.\n\nMulti-Account Portfolios\n\nThe portfolio file supports multiple accounts with different risk profiles. Each account gets its own section in the brief with account-specific alerts. A conservative account holding a high-momentum stock will get a NOTE alert that an aggressive account would not.\n\nSupported risk profiles: conservative, moderate, aggressive. The --account filter accepts partial matches on both the account id and name fields.\n\npython3 scripts/bf-portfolio.py portfolios.json --account ira\npython3 scripts/bf-portfolio.py portfolios.json --account retirement\n\nCombining Scripts\n\nChain scripts together for richer analysis:\n\n# Morning routine: health check, then top signals, then portfolio\npython3 scripts/bf-market.py health && python3 scripts/bf-market.py top --limit 5 && python3 scripts/bf-portfolio.py portfolios.json\n\n# Find this week's winners, then deep-dive the top one\npython3 scripts/bf-movers.py --days 7 --limit 1\n\n# Scan for ripe signals and look up each one\npython3 scripts/bf-market.py top --badge ripe --limit 5\npython3 scripts/bf-lookup.py AAPL NVDA AMD  # use the symbols from top output\n\nFiltering Top Signals\n\nThe top command supports badge and limit filters:\n\npython3 scripts/bf-market.py top --badge ripe --limit 5     # Only highest conviction\npython3 scripts/bf-market.py top --badge ripening --limit 10 # Watchlist candidates\npython3 scripts/bf-market.py top --limit 50                  # Broad scan\n\nMovers Time Range\n\nControl the lookback window for performance tracking:\n\npython3 scripts/bf-movers.py --days 1 --limit 3   # Today only\npython3 scripts/bf-movers.py --days 7 --limit 10   # This week\npython3 scripts/bf-movers.py --days 30 --limit 20  # This month\n\nScripts Reference\nScript\tPurpose\tKey Arguments\nbf-lookup.py\tDeep analysis of specific tickers\tSYMBOL [SYMBOL2 ...]\nbf-market.py\tMarket overview and signal scanning\thealth, top [--limit N] [--badge X], pulse\nbf-portfolio.py\tPortfolio intelligence with alerts\tFILE.json [--account NAME] [--json]\nbf-movers.py\tWinners/losers proof data\t[--days N] [--limit N]\nbf-compare.py\tSide-by-side ticker comparison table\tSYMBOL1 SYMBOL2 [SYMBOL3 ...] [--json]\nbf-watchlist.py\tCurated picks, scorecard, horizons\tpicks, scorecard, horizons [--json]\nbf-sectors.py\tSector momentum breakdown\t[--json]\n\nAll scripts are in the scripts/ directory. All require python3 and BF_API_KEY in the environment. No additional pip packages are needed — everything uses the Python standard library.\n\nPricing\nPlan\tPrice\tWhat You Get\nFree\t$0\tHealth, discover, top 3 signals. 10 req/min, 50/day. Enough to verify it works.\nPro\t$49/month ($39/mo annual)\tFull 50+ leaderboard, all endpoints, proof images, portfolio, movers, watchlist, 30-day score history. 60 req/min, 10K/day.\nMax\t$149/month ($119/mo annual)\tEverything in Pro + historical scores with exact prices at signal, calculated returns, full 730+ day backtesting, bulk export, webhooks. 120 req/min, 50K/day.\n\nGet your key instantly at bananafarmer.app/developers. Free tier works immediately — no credit card needed.\n\nFor comparison: Danelfin Pro charges $79/mo for AI scores with historical data but no prices attached. Polygon.io charges $79-500/mo for raw price data with zero intelligence. Alpha Vantage is $50-250/mo for raw data. Banana Farmer Max at $149/mo gives you both — momentum intelligence AND exact prices at every signal — with 730+ days of backtesting proof. Still less than Polygon's mid-tier, with far more intelligence.\n\nSecurity\n\nThis skill is designed with transparency and safety in mind:\n\nOutbound HTTPS only: All scripts make only outbound HTTPS calls to bananafarmer.app. No other network connections, no inbound listeners, no file exfiltration.\nZero pip dependencies: Every script uses only the Python standard library (json, urllib, ssl, os, sys). No third-party packages to audit.\nMIT licensed: Full source code is readable and auditable.\nNo secrets in code: API key is read from the BF_API_KEY environment variable only. Never hardcoded, never logged.\nRead-only: The skill reads market data. It does not execute trades, manage accounts, or modify any files on your system.\nInfrastructure security: Security practices — TLS 1.3, AES-256, Cloudflare WAF, Stripe PCI DSS Level 1.\nLegal: Terms of Service · Privacy Policy · System Status\nDisclaimer\n\nThis skill provides financial data, momentum scores, and analytical intelligence. It is not financial advice. All data is for informational and research purposes only.\n\nThis tool does not make buy or sell recommendations\nPast performance does not guarantee future results\nUsers should do their own research and consult a licensed financial advisor before making investment decisions\nWin rates and return figures are historical and based on backtested signal data\nStock data is delayed 15 minutes per exchange rules; crypto data is near real-time\n\nBy using this skill, you agree to the Banana Farmer API Terms.\n\nMarket data sourced by Tiingo.com. Momentum scoring, analysis, and the Ripeness Score methodology by Banana Farmer."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/adamandjarvis/banana-farmer",
    "publisherUrl": "https://clawhub.ai/adamandjarvis/banana-farmer",
    "owner": "adamandjarvis",
    "version": "1.9.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/banana-farmer",
    "downloadUrl": "https://openagent3.xyz/downloads/banana-farmer",
    "agentUrl": "https://openagent3.xyz/skills/banana-farmer/agent",
    "manifestUrl": "https://openagent3.xyz/skills/banana-farmer/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/banana-farmer/agent.md"
  }
}