{
  "schemaVersion": "1.0",
  "item": {
    "slug": "hinge-liker",
    "name": "Hinge Auto-Liker",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/MattttMan/hinge-liker",
    "canonicalUrl": "https://clawhub.ai/MattttMan/hinge-liker",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/hinge-liker",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=hinge-liker",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "scripts/hinge_android.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/hinge-liker"
    },
    "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/hinge-liker",
    "agentPageUrl": "https://openagent3.xyz/skills/hinge-liker/agent",
    "manifestUrl": "https://openagent3.xyz/skills/hinge-liker/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/hinge-liker/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": "Hinge Auto-Liker",
        "body": "Automates Hinge swiping on an Android emulator. Uses Gemini vision to evaluate profiles, pick the best photo/prompt, and send witty comments."
      },
      {
        "title": "Requirements",
        "body": "Android emulator (AVD) with Hinge installed and logged in\nadb in PATH\nGEMINI_API_KEY environment variable (Gemini 2.5 Flash recommended)\nPython 3.8+\nJava (for Android emulator)"
      },
      {
        "title": "Setup (First Time)",
        "body": "Install Android command line tools (via Homebrew: brew install --cask android-commandlinetools)\nCreate an AVD: avdmanager create avd -n HingePhone -k \"system-images;android-34;google_apis;arm64-v8a\" -d pixel_6\nBoot the emulator with a window, install Hinge from Play Store, and log in manually\nSet GEMINI_API_KEY in environment"
      },
      {
        "title": "Running",
        "body": "# Set environment\nexport PATH=\"<android-tools-path>/platform-tools:<android-tools-path>/emulator:$PATH\"\nexport GEMINI_API_KEY=\"your-key-here\"\n\n# Boot emulator (windowed for video, add -no-window for headless)\nemulator -avd HingePhone -no-audio -no-metrics -gpu swiftshader_indirect &\n\n# Wait for boot\nadb wait-for-device\nwhile [ \"$(adb shell getprop sys.boot_completed 2>/dev/null | tr -d '\\r')\" != \"1\" ]; do sleep 2; done\n\n# Launch Hinge\nadb shell am start -a android.intent.action.MAIN -n co.hinge.app/.ui.AppActivity\nsleep 10\n\n# Optional: start screen recording\nadb shell screenrecord --time-limit 300 /sdcard/hinge_session.mp4 &\n\n# Run the liker\npython3 scripts/hinge_android.py --likes 8 --user-desc \"a 25yo tech guy in SF who's fit and active\"\n\n# Pull recording + kill emulator\nadb shell pkill -INT screenrecord; sleep 3\nadb pull /sdcard/hinge_session.mp4 ./recordings/session.mp4\nadb emu kill"
      },
      {
        "title": "Script Options",
        "body": "FlagDefaultDescription--likes8Max likes per session--adbadbPath to adb binary--user-descgenericDescription of the user for AI matching"
      },
      {
        "title": "Environment Variables",
        "body": "VariableRequiredDescriptionGEMINI_API_KEYYesGoogle Gemini API keyGEMINI_MODELNoModel name (default: gemini-2.5-flash)ADB_PATHNoFull path to adb binaryHINGE_WORK_DIRNoWorking directory for screenshots/logs"
      },
      {
        "title": "Output",
        "body": "The script prints a session report to stdout with:\n\nTotal profiles seen, liked, skipped\nFor each profile: who they are, why it liked/skipped, the comment sent, which content was liked\n\nJSON logs are saved to logs/ directory."
      },
      {
        "title": "Scheduling as a Daily Cron",
        "body": "Set up via OpenClaw cron for daily automated runs. Key notes:\n\nHardcode GEMINI_API_KEY in the cron payload — cron shells don't source ~/.zshrc\nUse am start to launch Hinge, not monkey (more reliable)\nCompress videos before sending via iMessage (16MB limit): ffmpeg -i input.mp4 -vcodec libx264 -crf 28 -preset fast -vf scale=720:-2 output.mp4"
      },
      {
        "title": "After Each Session",
        "body": "Send the user a text report including:\n\nHow many profiles seen / liked / skipped\nFor each liked profile: who she is, why the AI liked her, what comment was sent\nFor each skipped profile: brief reason why\nAny errors (paywall, API failures, etc.)\nVideo recording if available (compressed for messaging)"
      },
      {
        "title": "Troubleshooting",
        "body": "Paywall/out of likes: Free likes reset ~24h after last batch. Schedule runs accordingly.\nGemini empty responses: Increase maxOutputTokens, check API key/quota.\nCan't find buttons: Hinge UI changes periodically — check find_all_hearts() and find_skip_button() patterns.\nEmulator crashes: Check disk space (df -h), try -gpu swiftshader_indirect."
      }
    ],
    "body": "Hinge Auto-Liker\n\nAutomates Hinge swiping on an Android emulator. Uses Gemini vision to evaluate profiles, pick the best photo/prompt, and send witty comments.\n\nRequirements\nAndroid emulator (AVD) with Hinge installed and logged in\nadb in PATH\nGEMINI_API_KEY environment variable (Gemini 2.5 Flash recommended)\nPython 3.8+\nJava (for Android emulator)\nSetup (First Time)\nInstall Android command line tools (via Homebrew: brew install --cask android-commandlinetools)\nCreate an AVD: avdmanager create avd -n HingePhone -k \"system-images;android-34;google_apis;arm64-v8a\" -d pixel_6\nBoot the emulator with a window, install Hinge from Play Store, and log in manually\nSet GEMINI_API_KEY in environment\nRunning\n# Set environment\nexport PATH=\"<android-tools-path>/platform-tools:<android-tools-path>/emulator:$PATH\"\nexport GEMINI_API_KEY=\"your-key-here\"\n\n# Boot emulator (windowed for video, add -no-window for headless)\nemulator -avd HingePhone -no-audio -no-metrics -gpu swiftshader_indirect &\n\n# Wait for boot\nadb wait-for-device\nwhile [ \"$(adb shell getprop sys.boot_completed 2>/dev/null | tr -d '\\r')\" != \"1\" ]; do sleep 2; done\n\n# Launch Hinge\nadb shell am start -a android.intent.action.MAIN -n co.hinge.app/.ui.AppActivity\nsleep 10\n\n# Optional: start screen recording\nadb shell screenrecord --time-limit 300 /sdcard/hinge_session.mp4 &\n\n# Run the liker\npython3 scripts/hinge_android.py --likes 8 --user-desc \"a 25yo tech guy in SF who's fit and active\"\n\n# Pull recording + kill emulator\nadb shell pkill -INT screenrecord; sleep 3\nadb pull /sdcard/hinge_session.mp4 ./recordings/session.mp4\nadb emu kill\n\nScript Options\nFlag\tDefault\tDescription\n--likes\t8\tMax likes per session\n--adb\tadb\tPath to adb binary\n--user-desc\tgeneric\tDescription of the user for AI matching\nEnvironment Variables\nVariable\tRequired\tDescription\nGEMINI_API_KEY\tYes\tGoogle Gemini API key\nGEMINI_MODEL\tNo\tModel name (default: gemini-2.5-flash)\nADB_PATH\tNo\tFull path to adb binary\nHINGE_WORK_DIR\tNo\tWorking directory for screenshots/logs\nOutput\n\nThe script prints a session report to stdout with:\n\nTotal profiles seen, liked, skipped\nFor each profile: who they are, why it liked/skipped, the comment sent, which content was liked\n\nJSON logs are saved to logs/ directory.\n\nScheduling as a Daily Cron\n\nSet up via OpenClaw cron for daily automated runs. Key notes:\n\nHardcode GEMINI_API_KEY in the cron payload — cron shells don't source ~/.zshrc\nUse am start to launch Hinge, not monkey (more reliable)\nCompress videos before sending via iMessage (16MB limit): ffmpeg -i input.mp4 -vcodec libx264 -crf 28 -preset fast -vf scale=720:-2 output.mp4\nAfter Each Session\n\nSend the user a text report including:\n\nHow many profiles seen / liked / skipped\nFor each liked profile: who she is, why the AI liked her, what comment was sent\nFor each skipped profile: brief reason why\nAny errors (paywall, API failures, etc.)\nVideo recording if available (compressed for messaging)\nTroubleshooting\nPaywall/out of likes: Free likes reset ~24h after last batch. Schedule runs accordingly.\nGemini empty responses: Increase maxOutputTokens, check API key/quota.\nCan't find buttons: Hinge UI changes periodically — check find_all_hearts() and find_skip_button() patterns.\nEmulator crashes: Check disk space (df -h), try -gpu swiftshader_indirect."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/MattttMan/hinge-liker",
    "publisherUrl": "https://clawhub.ai/MattttMan/hinge-liker",
    "owner": "MattttMan",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/hinge-liker",
    "downloadUrl": "https://openagent3.xyz/downloads/hinge-liker",
    "agentUrl": "https://openagent3.xyz/skills/hinge-liker/agent",
    "manifestUrl": "https://openagent3.xyz/skills/hinge-liker/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/hinge-liker/agent.md"
  }
}