{
  "schemaVersion": "1.0",
  "item": {
    "slug": "turnip-prophet",
    "name": "Turnip Prophet",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/nicholasjackson/turnip-prophet",
    "canonicalUrl": "https://clawhub.ai/nicholasjackson/turnip-prophet",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/turnip-prophet",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=turnip-prophet",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "memory/turnip-week.json",
      "scripts/cron_handler.sh",
      "scripts/generate_chart.py",
      "scripts/turnip_predict.py",
      "test_turnip_predictor.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-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.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/turnip-prophet"
    },
    "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/turnip-prophet",
    "agentPageUrl": "https://openagent3.xyz/skills/turnip-prophet/agent",
    "manifestUrl": "https://openagent3.xyz/skills/turnip-prophet/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/turnip-prophet/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": "Turnip Prophet - Animal Crossing Turnip Price Predictor",
        "body": "Predicts Animal Crossing: New Horizons turnip prices using the game's actual algorithm."
      },
      {
        "title": "⚠️ IMPORTANT: Always Read Memory First!",
        "body": "Before doing ANYTHING, read the weekly data file:\n\nmemory/turnip-week.json\n\nThis contains the buy price, previous pattern, and all known prices for the current week. Do not ask the user for data you already have. Only ask for new/missing prices.\n\nWhen the user gives a new price, update memory/turnip-week.json immediately with the new value before running the prediction."
      },
      {
        "title": "Weekly Data Format (memory/turnip-week.json)",
        "body": "{\n  \"week_start\": \"2026-02-15\",\n  \"buy_price\": 96,\n  \"previous_pattern\": 1,\n  \"prices\": [84, 81, 78, null, null, null, null, null, null, null, null, null],\n  \"labels\": [\"Mon AM\", \"Mon PM\", \"Tue AM\", \"Tue PM\", \"Wed AM\", \"Wed PM\", \"Thu AM\", \"Thu PM\", \"Fri AM\", \"Fri PM\", \"Sat AM\", \"Sat PM\"]\n}\n\nOn Sundays, create a fresh file with the new buy price and reset prices to all nulls."
      },
      {
        "title": "Triggers",
        "body": "Activate when user mentions:\n\n\"turnip prices\" or \"turnip price\"\n\"ACNH turnips\" or \"Animal Crossing turnips\"\n\"stalk market\"\n\"turnip prophet\" or \"turnip prediction\"\n\"bell profit\" with context of turnips\nAny question about when to sell turnips in Animal Crossing"
      },
      {
        "title": "Privacy & Data Storage",
        "body": "This skill stores local configuration data only on your machine in memory/turnip-config.json. No data is sent to external servers.\n\nWhat gets stored (if you enable reminders):\n\nChannel name (telegram/whatsapp/discord/signal)\nYour user ID on that channel\nOpenClaw binary path\nSetup timestamp\n\nWhy: These values are needed so the cron reminders can send messages to the correct place without hard-coded values.\n\nWhere: Stored locally in the skill's memory directory on your OpenClaw instance. Not shared, not uploaded, not visible to anyone else.\n\nHow to disable/reset:\n\nrm ~/.openclaw/workspace/skills/turnip-prophet/memory/turnip-config.json\n\nRemoving cron entries:\n\n# Edit crontab and remove the turnip-prophet lines\ncrontab -e\n\nImportant: You must explicitly confirm the setup flow before any config is saved. Declining the setup offer means nothing is stored."
      },
      {
        "title": "Credentials & Permissions",
        "body": "The skill itself does not request or store any API keys or credentials.\n\nHowever, if you enable cron reminders, the installed cron jobs will:\n\nUse your local openclaw CLI binary\nSend messages using your existing OpenClaw configuration and credentials\nOperate with whatever permissions your OpenClaw instance has\n\nWhat this means:\n\nAutomated reminders will be sent as you, using your OpenClaw identity\nThe cron jobs require OpenClaw to be running and properly configured\nMessages are sent through your configured channels (Telegram/WhatsApp/etc.) using your bot tokens or API credentials\n\nYou are granting permission for:\n\nAutomated message sending on your behalf\nUsing your existing messaging channel credentials\nRunning scheduled tasks that invoke openclaw gateway call message.send\n\nIf you're uncomfortable with automated messaging using your credentials, do not enable the cron reminders. The core prediction feature works fine without them."
      },
      {
        "title": "Daily Reminders (Optional)",
        "body": "On first use, offer to set up daily reminders with an interactive flow:"
      },
      {
        "title": "Interactive Setup Flow (Agent Instructions)",
        "body": "On first trigger (when user asks about turnips for the first time):\n\nCheck if already configured:\ntest -f memory/turnip-config.json && echo \"configured\" || echo \"not configured\"\n\n\n\nIf NOT configured, offer setup:\n\n\"Want daily turnip reminders? I can ping you:\n• Sunday 8am: Check Daisy Mae's price\n• Mon-Sat noon + 8pm: Check Nook's prices\n• Saturday 9:45pm: Final warning\nReply 'yes' to set up, or 'no' to skip.\"\n\n\n\nIf user says yes, auto-detect config:\n\nChannel: Extract from inbound context JSON \"channel\" field (telegram/whatsapp/discord/signal)\nTarget ID: Extract from inbound context JSON \"sender_id\" field\nOpenClaw path: Run which openclaw or use /usr/local/bin/openclaw\nSkill dir: Use the absolute path to this skill's directory\n\n\n\nIf auto-detection fails:\n\nAsk user for missing values explicitly\nValidate before proceeding\n\nStore config in memory/turnip-config.json:\n\n{\n  \"channel\": \"telegram\",\n  \"target\": \"8577655544\",\n  \"openclaw_bin\": \"/usr/local/bin/openclaw\",\n  \"skill_dir\": \"/home/user/.openclaw/workspace/skills/turnip-prophet\",\n  \"configured_at\": \"2026-02-23T10:30:00Z\"\n}\n\nGenerate and show cron entries:\nShow the user exactly what will be added, with their specific values. Example:\n\n# Turnip Prophet reminders for telegram:8577655544\n0 8 * * 0 /usr/local/bin/openclaw gateway call message.send --params '{\"channel\":\"telegram\",\"target\":\"8577655544\",\"message\":\"🔔 Sunday! Check Daisy Mae'\\''s turnip price (90-110 bells) and buy your turnips 🥬\"}' 2>&1 | logger -t turnip-prophet\n0 12 * * 1-6 /usr/local/bin/openclaw gateway call message.send --params '{\"channel\":\"telegram\",\"target\":\"8577655544\",\"message\":\"🔔 Time to check Nook'\\''s Cranny turnip prices!\"}' 2>&1 | logger -t turnip-prophet\n0 20 * * 1-6 /usr/local/bin/openclaw gateway call message.send --params '{\"channel\":\"telegram\",\"target\":\"8577655544\",\"message\":\"🔔 Evening price check: Check Nook'\\''s Cranny!\"}' 2>&1 | logger -t turnip-prophet\n45 21 * * 6 /usr/local/bin/openclaw gateway call message.send --params '{\"channel\":\"telegram\",\"target\":\"8577655544\",\"message\":\"⏰ FINAL CALL: Turnips expire at 10 PM! Sell now or they'\\''ll rot 🗑️\"}' 2>&1 | logger -t turnip-prophet\n\nReplace channel/target with detected values. Escape single quotes properly.\n\nShow user what will be stored (before confirmation):\n\nThis will save:\n• Channel: telegram\n• User ID: 8577655544\n• Location: memory/turnip-config.json (local only)\n\nThis data is stored locally on your machine and is needed so cron reminders can send messages to you.\nYou can delete the config file anytime with: rm memory/turnip-config.json\n\nContinue? Reply 'confirm' to proceed, or 'cancel' to skip.\n\nOn confirmation:\n\nWrite config to memory/turnip-config.json\nGenerate a safe install command and show it to the user:\n# Save the cron entries to a temp file\ncat > /tmp/turnip-cron-$$.txt <<'TURNIP_EOF'\n[generated entries]\nTURNIP_EOF\n\n# Review the file\ncat /tmp/turnip-cron-$$.txt\n\n# If it looks good, install:\n(crontab -l 2>/dev/null; cat /tmp/turnip-cron-$$.txt) | crontab -\n\n\nAsk user to run the commands and confirm when done\nReply: \"✅ Reminders configured. You'll only get pings for missing data. Check crontab -l to verify installation. To remove: rm memory/turnip-config.json and remove the cron entries.\"\n\nOn rejection/cancel:\n\nReply: \"No problem. No data was stored. You can set this up anytime by asking about turnip prices again.\""
      },
      {
        "title": "Cron Handler (scripts/cron_handler.sh)",
        "body": "The cron script reads from memory/turnip-config.json for channel/target:\n\nCONFIG_FILE=\"$SKILL_DIR/memory/turnip-config.json\"\nif [[ ! -f \"$CONFIG_FILE\" ]]; then\n    echo \"Config not found: $CONFIG_FILE\" >&2\n    exit 1\nfi\n\nCHANNEL=$(jq -r '.channel' \"$CONFIG_FILE\")\nTARGET=$(jq -r '.target' \"$CONFIG_FILE\")\nOPENCLAW_BIN=$(jq -r '.openclaw_bin' \"$CONFIG_FILE\")\n\nEvent types:\n\nsunday-daisy:\n\nCheck if memory/turnip-week.json has a buy_price for current week\nIf missing: Send reminder \"🔔 Sunday! Check Daisy Mae's turnip price (90-110 bells) and buy your turnips 🥬\"\nIf already set: Stay silent\n\ndaily-check:\n\nDetermine which price slot is currently active (Mon AM/PM through Sat PM)\nCheck if that slot is filled in memory/turnip-week.json\nIf missing: Send reminder \"🔔 [Day] [AM/PM]: Check Nook's Cranny turnip prices!\"\nIf already filled: Stay silent\n\nsaturday-final:\n\nCheck how many prices are still null\nIf any missing OR no buy_price: Send \"⏰ FINAL CALL: Turnips expire at 10 PM! Sell now or they'll rot 🗑️\"\nIf all prices known: \"⏰ Last chance to sell turnips tonight!\"\n\nSend via: \"$OPENCLAW_BIN\" gateway call message.send --params \"{\\\"channel\\\":\\\"$CHANNEL\\\",\\\"target\\\":\\\"$TARGET\\\",\\\"message\\\":\\\"...\\\"}\""
      },
      {
        "title": "How It Works",
        "body": "The skill uses a Python implementation of the actual ACNH turnip price algorithm to predict future prices based on:\n\nYour Sunday buy price (90-110 bells)\nAny known sell prices from this week\nPrevious week's pattern (if known)\n\nThere are 4 price patterns:\n\nPattern 0 (Fluctuating): High-low-high-low-high waves\nPattern 1 (Large Spike): Decreasing then massive spike (up to 6x)\nPattern 2 (Decreasing): Consistently declining (bad week)\nPattern 3 (Small Spike): Decreasing then moderate spike (up to 2x)"
      },
      {
        "title": "Usage Instructions",
        "body": "When triggered:\n\nRead memory/turnip-week.json — get all known data\nUpdate the file if the user provided a new price\nRun the prediction with all known data\nGenerate a chart and send it with the prediction summary"
      },
      {
        "title": "Running the Prediction",
        "body": "echo '{\"buy_price\": 96, \"prices\": [84, 81, 78, null, null, null, null, null, null, null, null, null], \"previous_pattern\": 1}' | python3 scripts/turnip_predict.py\n\nprices array: [Mon AM, Mon PM, Tue AM, Tue PM, Wed AM, Wed PM, Thu AM, Thu PM, Fri AM, Fri PM, Sat AM, Sat PM]\nUse null for unknown prices"
      },
      {
        "title": "Generating the Chart",
        "body": "After running the prediction, generate a chart image:\n\npython3 scripts/generate_chart.py <buy_price> '<known_json>' '<mins_json>' '<maxs_json>' /tmp/turnip-chart.png\n\nbuy_price: Sunday buy price (integer)\nknown_json: array of 12 values, null for unknown (from memory/turnip-week.json prices)\nmins_json: array of 12 min values from the prediction output\nmaxs_json: array of 12 max values from the prediction output\nAll script paths are relative to the skill directory: skills/turnip-prophet/\n\nThen send the chart image via the message tool with a caption containing the prediction summary.\n\nAlways include the chart with every prediction update."
      },
      {
        "title": "Presenting Results",
        "body": "Send the chart image via message tool, then reply with a conversational analysis. Don't be robotic — have a personality about it.\n\nFormat:\n\nChart image with brief caption (buy price, known prices)\nText reply with:\n\nPattern odds as a bullet list with emoji reactions (😬🤞🚀💀 etc.)\nBrief colour commentary — what the data actually means in plain English\n\"My take:\" — a specific, opinionated recommendation for what to do next (which price to check, when to sell, when to hold)\n\nExample:\n\nPattern odds:\n📉 Decreasing: 84.7% 😬\n📈 Large Spike: 15.1% 🤞\n📊 Small Spike: 0.1%\n\nNot great. Three consecutive drops is strongly pointing to a decreasing week. But there's still a 15% chance of a large spike hiding — if it happens, it'd be Wed-Fri with prices up to 576 bells.\n\nMy take: Check the Tuesday PM price. If it drops again, this week is almost certainly a bust — sell and cut your losses. If it jumps up, the spike is on. 🎰\n\nBe direct, be opinionated, skip patterns with 0% probability."
      },
      {
        "title": "Pattern Descriptions for Users",
        "body": "Fluctuating (0): Prices go up and down in waves — sell when above 120-130\nLarge Spike (1): Prices drop then SPIKE huge (400-600 bells) — wait for it!\nDecreasing (2): Prices keep falling all week — sell ASAP to cut losses\nSmall Spike (3): Prices drop then small bump (150-200) — sell during the bump"
      },
      {
        "title": "Error Handling",
        "body": "If the script fails or returns an error:\n\nExplain what went wrong in simple terms\nAsk user to double-check their input data\nSuggest they try again with corrected information"
      },
      {
        "title": "Notes",
        "body": "Predictions are probabilistic, not guaranteed\nThe algorithm matches the actual game code\nMore known prices = better predictions\nSunday buy price is required\nPrevious week's pattern helps but isn't required"
      }
    ],
    "body": "Turnip Prophet - Animal Crossing Turnip Price Predictor\n\nPredicts Animal Crossing: New Horizons turnip prices using the game's actual algorithm.\n\n⚠️ IMPORTANT: Always Read Memory First!\n\nBefore doing ANYTHING, read the weekly data file:\n\nmemory/turnip-week.json\n\n\nThis contains the buy price, previous pattern, and all known prices for the current week. Do not ask the user for data you already have. Only ask for new/missing prices.\n\nWhen the user gives a new price, update memory/turnip-week.json immediately with the new value before running the prediction.\n\nWeekly Data Format (memory/turnip-week.json)\n{\n  \"week_start\": \"2026-02-15\",\n  \"buy_price\": 96,\n  \"previous_pattern\": 1,\n  \"prices\": [84, 81, 78, null, null, null, null, null, null, null, null, null],\n  \"labels\": [\"Mon AM\", \"Mon PM\", \"Tue AM\", \"Tue PM\", \"Wed AM\", \"Wed PM\", \"Thu AM\", \"Thu PM\", \"Fri AM\", \"Fri PM\", \"Sat AM\", \"Sat PM\"]\n}\n\n\nOn Sundays, create a fresh file with the new buy price and reset prices to all nulls.\n\nTriggers\n\nActivate when user mentions:\n\n\"turnip prices\" or \"turnip price\"\n\"ACNH turnips\" or \"Animal Crossing turnips\"\n\"stalk market\"\n\"turnip prophet\" or \"turnip prediction\"\n\"bell profit\" with context of turnips\nAny question about when to sell turnips in Animal Crossing\nPrivacy & Data Storage\n\nThis skill stores local configuration data only on your machine in memory/turnip-config.json. No data is sent to external servers.\n\nWhat gets stored (if you enable reminders):\n\nChannel name (telegram/whatsapp/discord/signal)\nYour user ID on that channel\nOpenClaw binary path\nSetup timestamp\n\nWhy: These values are needed so the cron reminders can send messages to the correct place without hard-coded values.\n\nWhere: Stored locally in the skill's memory directory on your OpenClaw instance. Not shared, not uploaded, not visible to anyone else.\n\nHow to disable/reset:\n\nrm ~/.openclaw/workspace/skills/turnip-prophet/memory/turnip-config.json\n\n\nRemoving cron entries:\n\n# Edit crontab and remove the turnip-prophet lines\ncrontab -e\n\n\nImportant: You must explicitly confirm the setup flow before any config is saved. Declining the setup offer means nothing is stored.\n\nCredentials & Permissions\n\nThe skill itself does not request or store any API keys or credentials.\n\nHowever, if you enable cron reminders, the installed cron jobs will:\n\nUse your local openclaw CLI binary\nSend messages using your existing OpenClaw configuration and credentials\nOperate with whatever permissions your OpenClaw instance has\n\nWhat this means:\n\nAutomated reminders will be sent as you, using your OpenClaw identity\nThe cron jobs require OpenClaw to be running and properly configured\nMessages are sent through your configured channels (Telegram/WhatsApp/etc.) using your bot tokens or API credentials\n\nYou are granting permission for:\n\nAutomated message sending on your behalf\nUsing your existing messaging channel credentials\nRunning scheduled tasks that invoke openclaw gateway call message.send\n\nIf you're uncomfortable with automated messaging using your credentials, do not enable the cron reminders. The core prediction feature works fine without them.\n\nDaily Reminders (Optional)\n\nOn first use, offer to set up daily reminders with an interactive flow:\n\nInteractive Setup Flow (Agent Instructions)\n\nOn first trigger (when user asks about turnips for the first time):\n\nCheck if already configured:\n\ntest -f memory/turnip-config.json && echo \"configured\" || echo \"not configured\"\n\n\nIf NOT configured, offer setup:\n\n\"Want daily turnip reminders? I can ping you: • Sunday 8am: Check Daisy Mae's price • Mon-Sat noon + 8pm: Check Nook's prices\n• Saturday 9:45pm: Final warning\n\nReply 'yes' to set up, or 'no' to skip.\"\n\nIf user says yes, auto-detect config:\n\nChannel: Extract from inbound context JSON \"channel\" field (telegram/whatsapp/discord/signal)\nTarget ID: Extract from inbound context JSON \"sender_id\" field\nOpenClaw path: Run which openclaw or use /usr/local/bin/openclaw\nSkill dir: Use the absolute path to this skill's directory\n\nIf auto-detection fails:\n\nAsk user for missing values explicitly\nValidate before proceeding\n\nStore config in memory/turnip-config.json:\n\n{\n  \"channel\": \"telegram\",\n  \"target\": \"8577655544\",\n  \"openclaw_bin\": \"/usr/local/bin/openclaw\",\n  \"skill_dir\": \"/home/user/.openclaw/workspace/skills/turnip-prophet\",\n  \"configured_at\": \"2026-02-23T10:30:00Z\"\n}\n\n\nGenerate and show cron entries: Show the user exactly what will be added, with their specific values. Example:\n\n# Turnip Prophet reminders for telegram:8577655544\n0 8 * * 0 /usr/local/bin/openclaw gateway call message.send --params '{\"channel\":\"telegram\",\"target\":\"8577655544\",\"message\":\"🔔 Sunday! Check Daisy Mae'\\''s turnip price (90-110 bells) and buy your turnips 🥬\"}' 2>&1 | logger -t turnip-prophet\n0 12 * * 1-6 /usr/local/bin/openclaw gateway call message.send --params '{\"channel\":\"telegram\",\"target\":\"8577655544\",\"message\":\"🔔 Time to check Nook'\\''s Cranny turnip prices!\"}' 2>&1 | logger -t turnip-prophet\n0 20 * * 1-6 /usr/local/bin/openclaw gateway call message.send --params '{\"channel\":\"telegram\",\"target\":\"8577655544\",\"message\":\"🔔 Evening price check: Check Nook'\\''s Cranny!\"}' 2>&1 | logger -t turnip-prophet\n45 21 * * 6 /usr/local/bin/openclaw gateway call message.send --params '{\"channel\":\"telegram\",\"target\":\"8577655544\",\"message\":\"⏰ FINAL CALL: Turnips expire at 10 PM! Sell now or they'\\''ll rot 🗑️\"}' 2>&1 | logger -t turnip-prophet\n\n\nReplace channel/target with detected values. Escape single quotes properly.\n\nShow user what will be stored (before confirmation):\n\nThis will save:\n• Channel: telegram\n• User ID: 8577655544\n• Location: memory/turnip-config.json (local only)\n\nThis data is stored locally on your machine and is needed so cron reminders can send messages to you.\nYou can delete the config file anytime with: rm memory/turnip-config.json\n\nContinue? Reply 'confirm' to proceed, or 'cancel' to skip.\n\n\nOn confirmation:\n\nWrite config to memory/turnip-config.json\nGenerate a safe install command and show it to the user:\n# Save the cron entries to a temp file\ncat > /tmp/turnip-cron-$$.txt <<'TURNIP_EOF'\n[generated entries]\nTURNIP_EOF\n\n# Review the file\ncat /tmp/turnip-cron-$$.txt\n\n# If it looks good, install:\n(crontab -l 2>/dev/null; cat /tmp/turnip-cron-$$.txt) | crontab -\n\nAsk user to run the commands and confirm when done\nReply: \"✅ Reminders configured. You'll only get pings for missing data. Check crontab -l to verify installation. To remove: rm memory/turnip-config.json and remove the cron entries.\"\n\nOn rejection/cancel:\n\nReply: \"No problem. No data was stored. You can set this up anytime by asking about turnip prices again.\"\nCron Handler (scripts/cron_handler.sh)\n\nThe cron script reads from memory/turnip-config.json for channel/target:\n\nCONFIG_FILE=\"$SKILL_DIR/memory/turnip-config.json\"\nif [[ ! -f \"$CONFIG_FILE\" ]]; then\n    echo \"Config not found: $CONFIG_FILE\" >&2\n    exit 1\nfi\n\nCHANNEL=$(jq -r '.channel' \"$CONFIG_FILE\")\nTARGET=$(jq -r '.target' \"$CONFIG_FILE\")\nOPENCLAW_BIN=$(jq -r '.openclaw_bin' \"$CONFIG_FILE\")\n\n\nEvent types:\n\nsunday-daisy:\n\nCheck if memory/turnip-week.json has a buy_price for current week\nIf missing: Send reminder \"🔔 Sunday! Check Daisy Mae's turnip price (90-110 bells) and buy your turnips 🥬\"\nIf already set: Stay silent\n\ndaily-check:\n\nDetermine which price slot is currently active (Mon AM/PM through Sat PM)\nCheck if that slot is filled in memory/turnip-week.json\nIf missing: Send reminder \"🔔 [Day] [AM/PM]: Check Nook's Cranny turnip prices!\"\nIf already filled: Stay silent\n\nsaturday-final:\n\nCheck how many prices are still null\nIf any missing OR no buy_price: Send \"⏰ FINAL CALL: Turnips expire at 10 PM! Sell now or they'll rot 🗑️\"\nIf all prices known: \"⏰ Last chance to sell turnips tonight!\"\n\nSend via: \"$OPENCLAW_BIN\" gateway call message.send --params \"{\\\"channel\\\":\\\"$CHANNEL\\\",\\\"target\\\":\\\"$TARGET\\\",\\\"message\\\":\\\"...\\\"}\"\n\nHow It Works\n\nThe skill uses a Python implementation of the actual ACNH turnip price algorithm to predict future prices based on:\n\nYour Sunday buy price (90-110 bells)\nAny known sell prices from this week\nPrevious week's pattern (if known)\n\nThere are 4 price patterns:\n\nPattern 0 (Fluctuating): High-low-high-low-high waves\nPattern 1 (Large Spike): Decreasing then massive spike (up to 6x)\nPattern 2 (Decreasing): Consistently declining (bad week)\nPattern 3 (Small Spike): Decreasing then moderate spike (up to 2x)\nUsage Instructions\n\nWhen triggered:\n\nRead memory/turnip-week.json — get all known data\nUpdate the file if the user provided a new price\nRun the prediction with all known data\nGenerate a chart and send it with the prediction summary\nRunning the Prediction\necho '{\"buy_price\": 96, \"prices\": [84, 81, 78, null, null, null, null, null, null, null, null, null], \"previous_pattern\": 1}' | python3 scripts/turnip_predict.py\n\nprices array: [Mon AM, Mon PM, Tue AM, Tue PM, Wed AM, Wed PM, Thu AM, Thu PM, Fri AM, Fri PM, Sat AM, Sat PM]\nUse null for unknown prices\nGenerating the Chart\n\nAfter running the prediction, generate a chart image:\n\npython3 scripts/generate_chart.py <buy_price> '<known_json>' '<mins_json>' '<maxs_json>' /tmp/turnip-chart.png\n\nbuy_price: Sunday buy price (integer)\nknown_json: array of 12 values, null for unknown (from memory/turnip-week.json prices)\nmins_json: array of 12 min values from the prediction output\nmaxs_json: array of 12 max values from the prediction output\nAll script paths are relative to the skill directory: skills/turnip-prophet/\n\nThen send the chart image via the message tool with a caption containing the prediction summary.\n\nAlways include the chart with every prediction update.\n\nPresenting Results\n\nSend the chart image via message tool, then reply with a conversational analysis. Don't be robotic — have a personality about it.\n\nFormat:\n\nChart image with brief caption (buy price, known prices)\nText reply with:\nPattern odds as a bullet list with emoji reactions (😬🤞🚀💀 etc.)\nBrief colour commentary — what the data actually means in plain English\n\"My take:\" — a specific, opinionated recommendation for what to do next (which price to check, when to sell, when to hold)\n\nExample:\n\nPattern odds:\n📉 Decreasing: 84.7% 😬\n📈 Large Spike: 15.1% 🤞\n📊 Small Spike: 0.1%\n\nNot great. Three consecutive drops is strongly pointing to a decreasing week. But there's still a 15% chance of a large spike hiding — if it happens, it'd be Wed-Fri with prices up to 576 bells.\n\nMy take: Check the Tuesday PM price. If it drops again, this week is almost certainly a bust — sell and cut your losses. If it jumps up, the spike is on. 🎰\n\n\nBe direct, be opinionated, skip patterns with 0% probability.\n\nPattern Descriptions for Users\nFluctuating (0): Prices go up and down in waves — sell when above 120-130\nLarge Spike (1): Prices drop then SPIKE huge (400-600 bells) — wait for it!\nDecreasing (2): Prices keep falling all week — sell ASAP to cut losses\nSmall Spike (3): Prices drop then small bump (150-200) — sell during the bump\nError Handling\n\nIf the script fails or returns an error:\n\nExplain what went wrong in simple terms\nAsk user to double-check their input data\nSuggest they try again with corrected information\nNotes\nPredictions are probabilistic, not guaranteed\nThe algorithm matches the actual game code\nMore known prices = better predictions\nSunday buy price is required\nPrevious week's pattern helps but isn't required"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/nicholasjackson/turnip-prophet",
    "publisherUrl": "https://clawhub.ai/nicholasjackson/turnip-prophet",
    "owner": "nicholasjackson",
    "version": "1.2.4",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/turnip-prophet",
    "downloadUrl": "https://openagent3.xyz/downloads/turnip-prophet",
    "agentUrl": "https://openagent3.xyz/skills/turnip-prophet/agent",
    "manifestUrl": "https://openagent3.xyz/skills/turnip-prophet/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/turnip-prophet/agent.md"
  }
}