mcpField
T
tiktok-warmup

tiktok-warmup

github.com/frahman5Marketing & growth0117 installsUpdated 26w ago
Repository

About tiktok-warmup

A semi-manual warmup skill for TikTok accounts used by Flooently and Blaze, running sessions with Multilogin browser profiles. Sessions are planned and launched by command, while Faiyam handles manual troubleshooting such as CAPTCHAs and re-logins.

Key features

  1. 01Plan and run warmup sessions by command
  2. 02Use Multilogin browser profiles
  3. 03Support browser and cloud-phone sessions
  4. 04Refresh account cache from Airtable
  5. 05Log sessions and assess account risks

Use cases

  1. 01Plan warmup sessions for new TikTok accounts
  2. 02Run warmups in parallel across accounts
  3. 03Troubleshoot CAPTCHAs or re-login issues

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/frahman5/fstack --skill tiktok-warmup

After installing, type/tiktok-warmupin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

accountCreationRef.md
compute_health_score.py
accountsRef.md
canonicalSchema.json
browserWarmupRef.md
airtableRef.md
adoptAccountRef.md
computerUseRef.md
auditLogs.md
executeWarmupsServerRef.md
multiloginRef.md
nightlyAuditRef.md
peekabooRef.md
coverage.py
regenerate-mlx-token.py
loginRef.md
proxyRefreshRef.md
refresh_proxy.py
createTiktokRef.md
runNightlyAudit.md
schemaAudit.md
resolve_airtable_schema.py
write_temp_data.py
sessionDesignRef.md
executeWarmupsRef.md
validate_schema.py
runtimeLearnings.md
supabase_logger.py
tiktok-warmup-poc.py

Details

From the project README

TikTok Warmup Skill

Warms up TikTok accounts for Flooently + Blaze using Multilogin browser profiles. Targets Spanish learners across Latin America.

This is now a semi-manual system. Faiyam runs /execute-warmups (see prompts/execute-warmups.md) when ready to warm up. The agent plans today's sessions, runs them in parallel across accounts, and relies on Faiyam for manual debugging (CAPTCHAs, re-logins, weird modals). No background scheduler, no cron — just a slash command.

Pre-flight — run this immediately on skill load

First, update the skill to the latest version from fstack:

npx skills update

Then run the checks below and report health status for each activity. Do not block — just show the user what's ready and what isn't.

source .env.cli 2>/dev/null || true

# 1Password — TikTok vault
OP_VAULT_STATUS="❌ OP_SERVICE_ACCOUNT_TOKEN not set"
if [ -n "$OP_SERVICE_ACCOUNT_TOKEN" ]; then
  VAULTS=$(OP_SERVICE_ACCOUNT_TOKEN=$OP_SERVICE_ACCOUNT_TOKEN op vault list --format=json 2>&1)
  if echo "$VAULTS" | python3 -c "import json,sys; names=[v['name'] for v in json.load(sys.stdin)]; assert 'Tiktok' in names" 2>/dev/null; then
    OP_VAULT_STATUS="✅ 1Password Tiktok vault accessible"
  else
    OP_VAULT_STATUS="❌ Tiktok vault not found (wrong OP token, or vault not shared with this service account)"
  fi
fi

# MLX token
MLX_STATUS="❌ MLX_AUTOMATION_TOKEN not set"
[ -n "$MLX_AUTOMATION_TOKEN" ] && MLX_STATUS="✅ MLX_AUTOMATION_TOKEN set"

# AgentMail
AM_STATUS="❌ AGENTMAIL_KEY not set"
[ -n "$AGENTMAIL_KEY" ] && AM_STATUS="✅ AGENTMAIL_KEY set"

# Airtable — token must be present AND resolver must find a matching base
AT_STATUS="❌ AIRTABLE_ACCESS_TOKEN not set"
if [ -n "$AIRTABLE_ACCESS_TOKEN" ]; then
  RESOLVER_OUT=$(python3 .agents/skills/tiktok-warmup/resolve_airtable_schema.py 2>&1)
  if [ $? -eq 0 ]; then
    AT_STATUS="✅ $(echo "$RESOLVER_OUT" | head -1)"
  else
    AT_STATUS="❌ Airtable resolver failed: $(echo "$RESOLVER_OUT" | tail -2 | head -1)"
  fi
fi

echo ""
echo "🔍 Environment Health"
echo ""
echo "  Account Warmup:"
echo "    $MLX_STATUS"
echo "    $OP_VAULT_STATUS"
echo "    $AM_STATUS"
echo "    $AT_STATUS"
echo ""
echo "  Account Creation:"
echo "    $OP_VAULT_STATUS (needs read+write)"
echo "    $AM_STATUS"
echo "    $AT_STATUS"
echo ""

Report the output to the user before proceeding. If warmup prerequisites (MLX + OP vault) are missing, tell the user warmup won't work and ask if they want to fix it first.


Reference Files

FilePurpose
multiloginRef.mdMultilogin X API reference — auth, workspace IDs, profile IDs, how to start/stop profiles, Playwright connection.
browserWarmupRef.mdBrowser warmup protocol — humanized Playwright sessions on tiktok.com via Multilogin browser profiles. Preferred approach.
loginRef.mdTikTok login procedure — do this yourself agentically, never delegate to ensure_login.py. Covers where creds live (1Password Claude-Accessible vault), OTP retrieval (AgentMail), captcha handling, and the visual login-verification checklist.
sessionDesignRef.mdHow to compose the per-account task queue. Target 50%+ niche-explicit time in early weeks. Recommended task mixes by week, anti-patterns, working example for Sofia. Read this when building a queue for any /execute-warmups run.
accountsRef.mdAccount registry auto-refresh protocol. Accounts live in Airtable; scripts read from scripts/warmup/accounts.json. The agent refreshes the cache at step 2 of every /execute-warmups run so new/removed accounts propagate automatically with no code edits.
airtableRef.mdAirtable base/table/field IDs - Accounts + Session Log are the two tables we use.
computerUseRef.mdMobile cloud phone warmup - computer-use based. Used only for late-stage weeks or special cases.
peekabooRef.mdPeekaboo CLI fallback - used when request_access fails for cloud phone sessions.
proxyRefreshRef.mdProxy refresh protocol — when and how to rotate a profile's IP via API. Ban risk decision tree, generate+update flow, country codes, failure handling. See also refresh_proxy.py for the standalone script.
runtimeLearnings.mdOperational learnings from live sessions - read before every execution.
accountCreationRef.mdHow to create TikTok accounts and store credentials in 1Password.
createTiktokRef.mdFull interactive protocol for /create-tiktok — step-by-step account creation walkthrough.
adoptAccountRef.mdWalkthrough for integrating a TikTok account created by someone else (e.g. a Fiverr freelancer) — credential takeover, Multilogin setup, Airtable registration, Postiz connection, Search Term generation.
executeWarmupsRef.mdFull protocol for /execute-warmups — plans and runs warmup sessions across all active accounts.

Protocols

  • Run today's warmups (the main thing): trigger /execute-warmups. Full protocol in executeWarmupsRef.md.
  • Run a one-off browser warmup session: read multiloginRef.md + browserWarmupRef.md + runtimeLearnings.md, then invoke scripts/tiktok-warmup-poc.py.
  • Run a mobile warmup session (rare): read multiloginRef.md + computerUseRef.md + runtimeLearnings.md.
  • Create a new TikTok account: trigger /create-tiktok. Full protocol in createTiktokRef.md.
  • Adopt an externally-created account (e.g. from Fiverr): read adoptAccountRef.md and walk the user through it step-by-step.
  • Multilogin API operations: read multiloginRef.md.

Design philosophy

Target 30-90 min of warmup per account per day, split into 2-4 sessions of 15-30 min each. Rest days in weeks 1-2 are natural (deterministic per account). The Scheduled Sessions Airtable table is deprecated - we log results directly to Session Log.

Ban risk lens — apply to every strategic decision

Whenever evaluating any infrastructure or workflow choice (proxy setup, IP rotation, session timing, account actions, tooling), explicitly reason through: how does this impact TikTok ban risk?

TikTok's trust system tracks device fingerprint + IP consistency over time. The main ban risk vectors to reason about for any decision:

  • IP consistency: same IP per account per session, same geo across sessions. Any IP change is a risk event.
  • Session realism: human-like dwell time, natural scroll speed, no bot-pattern actions (instant likes, identical session lengths).
  • Account age signals: new accounts are high-scrutiny; the first 14 days are the highest-risk window.
  • Fingerprint stability: Multilogin profile fingerprint (device, browser, OS) should never change mid-warmup.
  • Action velocity: too many follows/likes/comments in a session triggers spam detection.

For any proposed change, ask: does this make the account look more or less like a real human using a real phone on a consistent network? If less — find the version that doesn't.

Comments

Markdown supported