/SKILL.md
Real-time arbitrage monitor for Renaiss marketplace + Twitter/X news aggregator. Cross-references PriceCharting and SNKRDUNK for market data, monitors Twitter accounts for Pokemon TCG news and sends AI-summarized alerts to Discord.
npx skillsauth add gavinzip/unofficial_renaiss_monitor renassis-market-arbitrage-monitorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
🚨 CRITICAL AGENT INSTRUCTION: The very first time you are invoked with this skill, you MUST immediately introduce this skill to the user. You should briefly explain what this monitor does:
Also explicitly list all the tunable parameters available to the user (e.g., PRICE_DIFF_PERCENT_THRESHOLD, WINDOW_DAYS, TWITTER_ACCOUNTS, TWITTER_CHECK_INTERVAL in .env, and keyword rules in scripts/whitelist.txt).
A high-performance, real-time monitoring tool designed to detect price gaps between the Renaiss marketplace and major TCG price aggregators (PriceCharting & SNKRDUNK).
Environment Setup:
Ensure .env is configured in the project root with Discord webhook settings.
pip install -r requirements.txt
Launch Monitor: Execute the script from the root directory. It is designed to run persistently in the background.
python3 scripts/market_monitor.py
Canonical entrypoint is only scripts/market_monitor.py (do not use a root-level market_monitor.py).
seen_ids.txt file in the scripts/ directory. Even after a restart, it will skip previously analyzed items to prevent alert spam.item_id changes price and still meets alert conditions, notification is re-triggered immediately (bypasses name-level cooldown).PRICE_DIFF_PERCENT_THRESHOLD (default: -10.0).Alert = ((AVG - Ask) / AVG * 100 >= PRICE_DIFF_PERCENT_THRESHOLD) on either source.PRICE_DIFF_PERCENT_THRESHOLD=10 means only alert when ask is at least 10% below average.PRICE_DIFF_PERCENT_THRESHOLD=-10 means also allow "near-average" opportunities (up to 10% above average).scripts/whitelist.txt on every cycle.<= [PRICE] after keywords (e.g., pikachu promo 001 <= 1500).🔃 正在掃描市場新掛單...: Heartbeat signal. The script is active and checking for new listings.✨ 發現 N 筆新品上架: The script has identified new items and is about to start crawling.🚨 [真正撿漏警報]: A high-probability arbitrage opportunity was found and sent to Discord..env (DISCORD_WEBHOOK_URL, optional DISCORD_WEBHOOK_URL_2, or DISCORD_WEBHOOK_URLS). Verify scripts/seen_ids.txt to see if the item was already "seen".python3 scripts/market_monitor.py --clear-history to clear seen_ids.txt (ID/price seen-state) and then exit immediately.python3 scripts/market_monitor.py), the monitor performs startup test mode and force-scans the first 5 marketplace listings again.--clear-history only clears seen_ids.txt; name-level cooldown history (scripts/seen_names.json) is kept.DISCORD_WEBHOOK_URL: Primary target channel.DISCORD_WEBHOOK_URL_2: Optional second Discord channel.DISCORD_WEBHOOK_URLS: Optional multi-webhook list (comma/space/newline separated). All configured webhooks will be notified.DISCORD_WEBHOOK_URL_NOMARKET_ERROR: Discord webhook for "no market data found" alerts (sent when both PriceCharting and SNKRDUNK return no data).PRICE_DIFF_PERCENT_THRESHOLD: Percentage price-gap alert threshold (default: -10.0).WINDOW_DAYS: Rolling average window in days (default: 30).When searching for cards with type suffixes (e.g., -Holo, -Full Art, -Reverse Holo, -1st Edition, -PSA 10), the system automatically:
This handles cases like "Shedinja-Holo #6" where PriceCharting lists the card as just "shedinja-6".
When both PriceCharting AND SNKRDUNK return no data for a card, a special notification is sent to DISCORD_WEBHOOK_URL_NOMARKET_ERROR containing:
Separate monitoring module for tracking Pokemon TCG news from Twitter/X accounts. Uses Jina AI to bypass anti-scraping and MiniMax to generate Chinese summaries.
# Single run
python3 scripts/twitter_monitor.py
# Background mode (runs every 30 minutes by default)
nohup python3 -u scripts/twitter_monitor.py > twitter_monitor.log 2>&1 &
https://r.jina.ai/https://x.com/{username} to fetch Twitter contentscripts/seen_tweets.json to track processed tweet IDsDISCORD_WEBHOOK_URL_TWITTER| Variable | Description | Default |
|----------|-------------|---------|
| DISCORD_WEBHOOK_URL_TWITTER | Discord channel for Twitter alerts | (required) |
| TWITTER_ACCOUNTS | Comma-separated usernames (without @) | pokegetinfomain |
| TWITTER_CHECK_INTERVAL | Minutes between checks | 30 |
| MINIMAX_API_KEY | For AI summarization | (optional) |
Example .env additions:
DISCORD_WEBHOOK_URL_TWITTER="https://discord.com/api/webhooks/xxx/yyy"
TWITTER_ACCOUNTS="pokegetinfomain,PokeGetInfoMain"
TWITTER_CHECK_INTERVAL=30
MINIMAX_API_KEY="your_key_here"
🔍 Checking @username...: Currently fetching tweets✨ Found N new tweet(s)!: New content detected✅ Sent to Discord!: Successfully notified⚠️ Failed to send to Discord: Webhook error (check URL)seen_tweets.json exists, delete to resetMINIMAX_API_KEY is set correctlyDISCORD_WEBHOOK_URL_TWITTER is validEdit TWITTER_ACCOUNTS in .env:
TWITTER_ACCOUNTS="pokegetinfomain,other_account,third_account"
| Script | Purpose | Run Frequency |
|--------|---------|---------------|
| scripts/market_monitor.py | Renaiss arbitrage detection | Continuous (5min loop) |
| scripts/twitter_monitor.py | Twitter news monitoring | Continuous (30min loop) |
| scripts/market_report_vision.py | Image analysis engine | On-demand |
Run as HTTP API:
pip install -r requirements.api.txt
python3 scripts/market_api_server.py
Core endpoints:
GET /healthGET /v1/listings/latestPOST /v1/analyze/item-idPOST /v1/opportunities/scanWallet signal push:
AGENT_WALLET_WEBHOOK_URL in .envnotify_wallet=true in /v1/opportunities/scandata-ai
Example TaskFlow authoring pattern for inbox triage. Use when messages need different treatment based on intent, with some routes notifying immediately, some waiting on outside answers, and others rolling into a later summary.
data-ai
Example TaskFlow authoring pattern for inbox triage. Use when messages need different treatment based on intent, with some routes notifying immediately, some waiting on outside answers, and others rolling into a later summary.
data-ai
OpenProse VM skill pack. Activate on any `prose` command, .prose files, or OpenProse mentions; orchestrates multi-agent workflows.
data-ai
OpenProse VM skill pack. Activate on any `prose` command, .prose files, or OpenProse mentions; orchestrates multi-agent workflows.