Turnip Prophet
Predict Animal Crossing New Horizons turnip prices using the game's exact algorithm.
- Rating
- 4.5 (167 reviews)
- Downloads
- 6,979 downloads
- Version
- 1.0.0
Overview
Predict Animal Crossing New Horizons turnip prices using the game's exact algorithm.
Complete Documentation
View Source →
Turnip Prophet - Animal Crossing Turnip Price Predictor
Predicts Animal Crossing: New Horizons turnip prices using the game's actual algorithm.
⚠️ IMPORTANT: Always Read Memory First!
Before doing ANYTHING, read the weekly data file:
memory/turnip-week.json
When the user gives a new price, update memory/turnip-week.json immediately with the new value before running the prediction.
Weekly Data Format (memory/turnip-week.json)
{
"week_start": "2026-02-15",
"buy_price": 96,
"previous_pattern": 1,
"prices": [84, 81, 78, null, null, null, null, null, null, null, null, null],
"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"]
}
On Sundays, create a fresh file with the new buy price and reset prices to all nulls.
Triggers
Activate when user mentions:
- "turnip prices" or "turnip price"
- "ACNH turnips" or "Animal Crossing turnips"
- "stalk market"
- "turnip prophet" or "turnip prediction"
- "bell profit" with context of turnips
- Any question about when to sell turnips in Animal Crossing
Privacy & Data Storage
This skill stores local configuration data only on your machine in memory/turnip-config.json. No data is sent to external servers.
What gets stored (if you enable reminders):
- Channel name (telegram/whatsapp/discord/signal)
- Your user ID on that channel
- OpenClaw binary path
- Setup timestamp
Where: Stored locally in the skill's memory directory on your OpenClaw instance. Not shared, not uploaded, not visible to anyone else.
How to disable/reset:
rm ~/.openclaw/workspace/skills/turnip-prophet/memory/turnip-config.json
Removing cron entries:
# Edit crontab and remove the turnip-prophet lines
crontab -e
Important: You must explicitly confirm the setup flow before any config is saved. Declining the setup offer means nothing is stored.
Credentials & Permissions
The skill itself does not request or store any API keys or credentials.
However, if you enable cron reminders, the installed cron jobs will:
- Use your local
openclawCLI binary - Send messages using your existing OpenClaw configuration and credentials
- Operate with whatever permissions your OpenClaw instance has
- Automated reminders will be sent as you, using your OpenClaw identity
- The cron jobs require OpenClaw to be running and properly configured
- Messages are sent through your configured channels (Telegram/WhatsApp/etc.) using your bot tokens or API credentials
- Automated message sending on your behalf
- Using your existing messaging channel credentials
- Running scheduled tasks that invoke
openclaw gateway call message.send
Daily Reminders (Optional)
On first use, offer to set up daily reminders with an interactive flow:
Interactive Setup Flow (Agent Instructions)
On first trigger (when user asks about turnips for the first time):
- Check if already configured:
test -f memory/turnip-config.json && echo "configured" || echo "not configured"
- If NOT configured, offer setup:
- If user says yes, auto-detect config:
- Channel: Extract from inbound context JSON
"channel"field (telegram/whatsapp/discord/signal) - Target ID: Extract from inbound context JSON
"sender_id"field - OpenClaw path: Run
which openclawor use/usr/local/bin/openclaw - Skill dir: Use the absolute path to this skill's directory
- If auto-detection fails:
- Ask user for missing values explicitly
- Validate before proceeding
memory/turnip-config.json:
{
"channel": "telegram",
"target": "8577655544",
"openclaw_bin": "/usr/local/bin/openclaw",
"skill_dir": "/home/user/.openclaw/workspace/skills/turnip-prophet",
"configured_at": "2026-02-23T10:30:00Z"
}
Generate and show cron entries: Show the user exactly what will be added, with their specific values. Example:
# Turnip Prophet reminders for telegram:8577655544
0 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
0 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
0 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
45 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
Replace channel/target with detected values. Escape single quotes properly.
Show user what will be stored (before confirmation):
This will save:
• Channel: telegram
• User ID: 8577655544
• Location: memory/turnip-config.json (local only)
This data is stored locally on your machine and is needed so cron reminders can send messages to you.
You can delete the config file anytime with: rm memory/turnip-config.json
Continue? Reply 'confirm' to proceed, or 'cancel' to skip.
On confirmation:
- Write config to
memory/turnip-config.json - Generate a safe install command and show it to the user:
# Save the cron entries to a temp file
cat > /tmp/turnip-cron-$$.txt <<'TURNIP_EOF'
[generated entries]
TURNIP_EOF
# Review the file
cat /tmp/turnip-cron-$$.txt
# If it looks good, install:
(crontab -l 2>/dev/null; cat /tmp/turnip-cron-$$.txt) | crontab -
- Ask user to run the commands and confirm when done
- Reply: "✅ Reminders configured. You'll only get pings for missing data. Check
crontab -lto verify installation. To remove:rm memory/turnip-config.jsonand remove the cron entries."
- Reply: "No problem. No data was stored. You can set this up anytime by asking about turnip prices again."
Cron Handler (scripts/cron_handler.sh)
The cron script reads from memory/turnip-config.json for channel/target:
CONFIG_FILE="$SKILL_DIR/memory/turnip-config.json"
if [[ ! -f "$CONFIG_FILE" ]]; then
echo "Config not found: $CONFIG_FILE" >&2
exit 1
fi
CHANNEL=$(jq -r '.channel' "$CONFIG_FILE")
TARGET=$(jq -r '.target' "$CONFIG_FILE")
OPENCLAW_BIN=$(jq -r '.openclaw_bin' "$CONFIG_FILE")
Event types:
sunday-daisy:
- Check if
memory/turnip-week.jsonhas a buy_price for current week - If missing: Send reminder "🔔 Sunday! Check Daisy Mae's turnip price (90-110 bells) and buy your turnips 🥬"
- If already set: Stay silent
- Determine which price slot is currently active (Mon AM/PM through Sat PM)
- Check if that slot is filled in
memory/turnip-week.json - If missing: Send reminder "🔔 [Day] [AM/PM]: Check Nook's Cranny turnip prices!"
- If already filled: Stay silent
- Check how many prices are still null
- If any missing OR no buy_price: Send "⏰ FINAL CALL: Turnips expire at 10 PM! Sell now or they'll rot 🗑️"
- If all prices known: "⏰ Last chance to sell turnips tonight!"
"$OPENCLAW_BIN" gateway call message.send --params "{\"channel\":\"$CHANNEL\",\"target\":\"$TARGET\",\"message\":\"...\"}"How It Works
The skill uses a Python implementation of the actual ACNH turnip price algorithm to predict future prices based on:
- Your Sunday buy price (90-110 bells)
- Any known sell prices from this week
- Previous week's pattern (if known)
- Pattern 0 (Fluctuating): High-low-high-low-high waves
- Pattern 1 (Large Spike): Decreasing then massive spike (up to 6x)
- Pattern 2 (Decreasing): Consistently declining (bad week)
- Pattern 3 (Small Spike): Decreasing then moderate spike (up to 2x)
Usage Instructions
When triggered:
- Read
memory/turnip-week.json— get all known data - Update the file if the user provided a new price
- Run the prediction with all known data
- Generate a chart and send it with the prediction summary
Running the Prediction
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
pricesarray: [Mon AM, Mon PM, Tue AM, Tue PM, Wed AM, Wed PM, Thu AM, Thu PM, Fri AM, Fri PM, Sat AM, Sat PM]- Use
nullfor unknown prices
Generating the Chart
After running the prediction, generate a chart image:
python3 scripts/generate_chart.py <buy_price> '<known_json>' '<mins_json>' '<maxs_json>' /tmp/turnip-chart.png
buy_price: Sunday buy price (integer)known_json: array of 12 values,nullfor unknown (frommemory/turnip-week.jsonprices)mins_json: array of 12 min values from the prediction outputmaxs_json: array of 12 max values from the prediction output- All script paths are relative to the skill directory:
skills/turnip-prophet/
Always include the chart with every prediction update.
Presenting Results
Send the chart image via message tool, then reply with a conversational analysis. Don't be robotic — have a personality about it.
Format:
- Chart image with brief caption (buy price, known prices)
- Text reply with:
- Pattern odds as a bullet list with emoji reactions (😬🤞🚀💀 etc.)
- Brief colour commentary — what the data actually means in plain English
- "My take:" — a specific, opinionated recommendation for what to do next (which price to check, when to sell, when to hold)
Pattern odds:
📉 Decreasing: 84.7% 😬
📈 Large Spike: 15.1% 🤞
📊 Small Spike: 0.1%
Not 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.
My 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. 🎰
Be direct, be opinionated, skip patterns with 0% probability.
Pattern Descriptions for Users
- Fluctuating (0): Prices go up and down in waves — sell when above 120-130
- Large Spike (1): Prices drop then SPIKE huge (400-600 bells) — wait for it!
- Decreasing (2): Prices keep falling all week — sell ASAP to cut losses
- Small Spike (3): Prices drop then small bump (150-200) — sell during the bump
Error Handling
If the script fails or returns an error:
- Explain what went wrong in simple terms
- Ask user to double-check their input data
- Suggest they try again with corrected information
Notes
- Predictions are probabilistic, not guaranteed
- The algorithm matches the actual game code
- More known prices = better predictions
- Sunday buy price is required
- Previous week's pattern helps but isn't required
Installation
openclaw install turnip-prophet
💻Code Examples
### Weekly Data Format (`memory/turnip-week.json`)
{
"week_start": "2026-02-15",
"buy_price": 96,
"previous_pattern": 1,
"prices": [84, 81, 78, null, null, null, null, null, null, null, null, null],
"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"]
}**Removing cron entries:**
# Edit crontab and remove the turnip-prophet lines
crontab -e**Store config in `memory/turnip-config.json`:**
{
"channel": "telegram",
"target": "8577655544",
"openclaw_bin": "/usr/local/bin/openclaw",
"skill_dir": "/home/user/.openclaw/workspace/skills/turnip-prophet",
"configured_at": "2026-02-23T10:30:00Z"
}Show the user exactly what will be added, with their specific values. Example:
# Turnip Prophet reminders for telegram:8577655544
0 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
0 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
0 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
45 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**Show user what will be stored (before confirmation):**
This will save:
• Channel: telegram
• User ID: 8577655544
• Location: memory/turnip-config.json (local only)
This data is stored locally on your machine and is needed so cron reminders can send messages to you.
You can delete the config file anytime with: rm memory/turnip-config.json
Continue? Reply 'confirm' to proceed, or 'cancel' to skip.OPENCLAW_BIN=$(jq -r '.openclaw_bin' "$CONFIG_FILE")
**Event types:**
**sunday-daisy:**
- Check if `memory/turnip-week.json` has a buy_price for current week
- If missing: Send reminder "🔔 Sunday! Check Daisy Mae's turnip price (90-110 bells) and buy your turnips 🥬"
- If already set: Stay silent
**daily-check:**
- Determine which price slot is currently active (Mon AM/PM through Sat PM)
- Check if that slot is filled in `memory/turnip-week.json`
- If missing: Send reminder "🔔 [Day] [AM/PM]: Check Nook's Cranny turnip prices!"
- If already filled: Stay silent
**saturday-final:**
- Check how many prices are still null
- If any missing OR no buy_price: Send "⏰ FINAL CALL: Turnips expire at 10 PM! Sell now or they'll rot 🗑️"
- If all prices known: "⏰ Last chance to sell turnips tonight!"
Send via: `"$OPENCLAW_BIN" gateway call message.send --params "{\"channel\":\"$CHANNEL\",\"target\":\"$TARGET\",\"message\":\"...\"}"`
## How It Works
The skill uses a Python implementation of the actual ACNH turnip price algorithm to predict future prices based on:
- Your Sunday buy price (90-110 bells)
- Any known sell prices from this week
- Previous week's pattern (if known)
There are 4 price patterns:
- **Pattern 0 (Fluctuating)**: High-low-high-low-high waves
- **Pattern 1 (Large Spike)**: Decreasing then massive spike (up to 6x)
- **Pattern 2 (Decreasing)**: Consistently declining (bad week)
- **Pattern 3 (Small Spike)**: Decreasing then moderate spike (up to 2x)
## Usage Instructions
When triggered:
1. **Read `memory/turnip-week.json`** — get all known data
2. **Update the file** if the user provided a new price
3. **Run the prediction** with all known data
4. **Generate a chart** and send it with the prediction summary
### Running the Predictionecho '{"buy_price": 96, "prices": [84, 81, 78, null, null, null, null, null, null, null, null, null], "previous_pattern": 1}' | python3 scripts/turnip_predict.py
- `prices` 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]
- Use `null` for unknown prices
### Generating the Chart
After running the prediction, generate a chart image:python3 scripts/generate_chart.py <buy_price> '<known_json>' '<mins_json>' '<maxs_json>' /tmp/turnip-chart.png
- `buy_price`: Sunday buy price (integer)
- `known_json`: array of 12 values, `null` for unknown (from `memory/turnip-week.json` prices)
- `mins_json`: array of 12 min values from the prediction output
- `maxs_json`: array of 12 max values from the prediction output
- All script paths are relative to the skill directory: `skills/turnip-prophet/`
Then send the chart image via the message tool with a caption containing the prediction summary.
**Always include the chart with every prediction update.**
## Presenting Results
Send the chart image via message tool, then reply with a conversational analysis. Don't be robotic — have a personality about it.
**Format:**
1. Chart image with brief caption (buy price, known prices)
2. Text reply with:
- **Pattern odds** as a bullet list with emoji reactions (😬🤞🚀💀 etc.)
- **Brief colour commentary** — what the data actually means in plain English
- **"My take:"** — a specific, opinionated recommendation for what to do next (which price to check, when to sell, when to hold)
**Example:**# Save the cron entries to a temp file
cat > /tmp/turnip-cron-$$.txt <<'TURNIP_EOF'
[generated entries]
TURNIP_EOF
# Review the file
cat /tmp/turnip-cron-$$.txt
# If it looks good, install:
(crontab -l 2>/dev/null; cat /tmp/turnip-cron-$$.txt) | crontab -CONFIG_FILE="$SKILL_DIR/memory/turnip-config.json"
if [[ ! -f "$CONFIG_FILE" ]]; then
echo "Config not found: $CONFIG_FILE" >&2
exit 1
fi
CHANNEL=$(jq -r '.channel' "$CONFIG_FILE")
TARGET=$(jq -r '.target' "$CONFIG_FILE")
OPENCLAW_BIN=$(jq -r '.openclaw_bin' "$CONFIG_FILE")Tags
Quick Info
Ready to Install?
Get started with this skill in seconds
Related Skills
4claw
4claw — a moderated imageboard for AI agents.
Aap Passport
Agent Attestation Protocol - The Reverse Turing Test.
Adaptive Suite
A continuously adaptive skill suite that empowers Clawdbot.
Adversarial Prompting
Adversarial analysis to critique, fix.