{
  "schemaVersion": "1.0",
  "item": {
    "slug": "ravi-login",
    "name": "Ravi login",
    "source": "tencent",
    "type": "skill",
    "category": "通讯协作",
    "sourceUrl": "https://clawhub.ai/raunaksingwi/ravi-login",
    "canonicalUrl": "https://clawhub.ai/raunaksingwi/ravi-login",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/ravi-login",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=ravi-login",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "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/ravi-login"
    },
    "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/ravi-login",
    "agentPageUrl": "https://openagent3.xyz/skills/ravi-login/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ravi-login/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ravi-login/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": "Ravi Login",
        "body": "End-to-end workflows for signing up, logging in, and completing verification using your Ravi identity."
      },
      {
        "title": "Your Name",
        "body": "When a form asks for your name, use your identity name — not the account owner's name.\nIdentity names look like real human names (e.g. \"Sarah Johnson\").\n\n# Get identity name — split into first/last for form fields\nIDENTITY=$(ravi identity list --json | jq -r '.[0]')\nNAME=$(echo \"$IDENTITY\" | jq -r '.name')\nFIRST_NAME=$(echo \"$NAME\" | awk '{print $1}')\nLAST_NAME=$(echo \"$NAME\" | awk '{print $2}')\n\nNote: This first/last split works for auto-generated names (e.g. \"Sarah Johnson\"). For custom identity names (e.g. \"Shopping Agent\"), use the full name as-is or adapt the split to your form's requirements.\n\nNever use ravi get owner for form fields. The owner is the human behind the account — the identity name is your name."
      },
      {
        "title": "Sign up for a service",
        "body": "# 1. Get your identity\nEMAIL=$(ravi get email --json | jq -r '.email')\nPHONE=$(ravi get phone --json | jq -r '.phone_number')\n\n# 2. Fill the signup form with $EMAIL, $PHONE, and identity name\n\n# 3. Generate and store a password\nCREDS=$(ravi passwords create example.com --username \"$EMAIL\" --json)\nPASSWORD=$(echo \"$CREDS\" | jq -r '.password')\n# Use $PASSWORD in the signup form\n\n# 4. Wait for verification\nsleep 5\nravi inbox sms --unread --json   # Check for SMS OTP\nravi inbox email --unread --json # Check for email verification"
      },
      {
        "title": "Log into a service",
        "body": "# Find stored credentials\nENTRY=$(ravi passwords list --json | jq -r '.[] | select(.domain == \"example.com\")')\nUUID=$(echo \"$ENTRY\" | jq -r '.uuid')\n\n# Get decrypted credentials\nCREDS=$(ravi passwords get \"$UUID\" --json)\nUSERNAME=$(echo \"$CREDS\" | jq -r '.username')\nPASSWORD=$(echo \"$CREDS\" | jq -r '.password')\n# Use $USERNAME and $PASSWORD to log in"
      },
      {
        "title": "Complete 2FA / OTP",
        "body": "# After triggering 2FA on a website:\nsleep 5\nCODE=$(ravi inbox sms --unread --json | jq -r '.[0].preview' | grep -oE '[0-9]{4,8}' | head -1)\n# Use $CODE to complete the login"
      },
      {
        "title": "Extract a verification link from email",
        "body": "THREAD_ID=$(ravi inbox email --unread --json | jq -r '.[0].thread_id')\nravi inbox email \"$THREAD_ID\" --json | jq -r '.messages[].text_content' | grep -oE 'https?://[^ ]+'"
      },
      {
        "title": "Tips",
        "body": "Poll, don't rush — SMS/email delivery takes 2-10 seconds. Use sleep 5 before checking.\nStore credentials immediately — create a passwords entry during signup so you don't lose the password.\nIdentity name for forms — always use the identity name, not the owner name.\nRate limits apply to sending — 60 emails/hour, 500/day. See ravi-email-send skill for details.\nEmail quality matters — if you need to send an email during a workflow (e.g., contacting support), see ravi-email-writing for formatting and anti-spam tips."
      },
      {
        "title": "Related Skills",
        "body": "ravi-identity — Get your email, phone, and identity name for form fields\nravi-inbox — Read OTPs, verification codes, and confirmation emails\nravi-email-send — Send emails during workflows (support requests, confirmations)\nravi-email-writing — Write professional emails that avoid spam filters\nravi-passwords — Store and retrieve website credentials after signup\nravi-secrets — Store API keys obtained during service registration\nravi-feedback — Report login flow issues or suggest workflow improvements"
      }
    ],
    "body": "Ravi Login\n\nEnd-to-end workflows for signing up, logging in, and completing verification using your Ravi identity.\n\nYour Name\n\nWhen a form asks for your name, use your identity name — not the account owner's name. Identity names look like real human names (e.g. \"Sarah Johnson\").\n\n# Get identity name — split into first/last for form fields\nIDENTITY=$(ravi identity list --json | jq -r '.[0]')\nNAME=$(echo \"$IDENTITY\" | jq -r '.name')\nFIRST_NAME=$(echo \"$NAME\" | awk '{print $1}')\nLAST_NAME=$(echo \"$NAME\" | awk '{print $2}')\n\n\nNote: This first/last split works for auto-generated names (e.g. \"Sarah Johnson\"). For custom identity names (e.g. \"Shopping Agent\"), use the full name as-is or adapt the split to your form's requirements.\n\nNever use ravi get owner for form fields. The owner is the human behind the account — the identity name is your name.\n\nSign up for a service\n# 1. Get your identity\nEMAIL=$(ravi get email --json | jq -r '.email')\nPHONE=$(ravi get phone --json | jq -r '.phone_number')\n\n# 2. Fill the signup form with $EMAIL, $PHONE, and identity name\n\n# 3. Generate and store a password\nCREDS=$(ravi passwords create example.com --username \"$EMAIL\" --json)\nPASSWORD=$(echo \"$CREDS\" | jq -r '.password')\n# Use $PASSWORD in the signup form\n\n# 4. Wait for verification\nsleep 5\nravi inbox sms --unread --json   # Check for SMS OTP\nravi inbox email --unread --json # Check for email verification\n\nLog into a service\n# Find stored credentials\nENTRY=$(ravi passwords list --json | jq -r '.[] | select(.domain == \"example.com\")')\nUUID=$(echo \"$ENTRY\" | jq -r '.uuid')\n\n# Get decrypted credentials\nCREDS=$(ravi passwords get \"$UUID\" --json)\nUSERNAME=$(echo \"$CREDS\" | jq -r '.username')\nPASSWORD=$(echo \"$CREDS\" | jq -r '.password')\n# Use $USERNAME and $PASSWORD to log in\n\nComplete 2FA / OTP\n# After triggering 2FA on a website:\nsleep 5\nCODE=$(ravi inbox sms --unread --json | jq -r '.[0].preview' | grep -oE '[0-9]{4,8}' | head -1)\n# Use $CODE to complete the login\n\nExtract a verification link from email\nTHREAD_ID=$(ravi inbox email --unread --json | jq -r '.[0].thread_id')\nravi inbox email \"$THREAD_ID\" --json | jq -r '.messages[].text_content' | grep -oE 'https?://[^ ]+'\n\nTips\nPoll, don't rush — SMS/email delivery takes 2-10 seconds. Use sleep 5 before checking.\nStore credentials immediately — create a passwords entry during signup so you don't lose the password.\nIdentity name for forms — always use the identity name, not the owner name.\nRate limits apply to sending — 60 emails/hour, 500/day. See ravi-email-send skill for details.\nEmail quality matters — if you need to send an email during a workflow (e.g., contacting support), see ravi-email-writing for formatting and anti-spam tips.\nRelated Skills\nravi-identity — Get your email, phone, and identity name for form fields\nravi-inbox — Read OTPs, verification codes, and confirmation emails\nravi-email-send — Send emails during workflows (support requests, confirmations)\nravi-email-writing — Write professional emails that avoid spam filters\nravi-passwords — Store and retrieve website credentials after signup\nravi-secrets — Store API keys obtained during service registration\nravi-feedback — Report login flow issues or suggest workflow improvements"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/raunaksingwi/ravi-login",
    "publisherUrl": "https://clawhub.ai/raunaksingwi/ravi-login",
    "owner": "raunaksingwi",
    "version": "1.7.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/ravi-login",
    "downloadUrl": "https://openagent3.xyz/downloads/ravi-login",
    "agentUrl": "https://openagent3.xyz/skills/ravi-login/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ravi-login/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ravi-login/agent.md"
  }
}