{
  "schemaVersion": "1.0",
  "item": {
    "slug": "ez-google",
    "name": "ez-google",
    "source": "tencent",
    "type": "skill",
    "category": "效率提升",
    "sourceUrl": "https://clawhub.ai/araa47/ez-google",
    "canonicalUrl": "https://clawhub.ai/araa47/ez-google",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/ez-google",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=ez-google",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "scripts/auth.py",
      "scripts/sheets.py",
      "scripts/docs.py",
      "scripts/gmail.py",
      "scripts/chat.py",
      "scripts/people.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/ez-google"
    },
    "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/ez-google",
    "agentPageUrl": "https://openagent3.xyz/skills/ez-google/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ez-google/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ez-google/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": "ez-google",
        "body": "Agent-friendly Google Workspace tools. Simple CLI scripts with hosted OAuth - users just click a link and paste back a token. No API keys or credentials needed.\n\nRun all commands with: uv run scripts/<script>.py <command> [args]"
      },
      {
        "title": "Auth (do this first)",
        "body": "auth.py status        # Check: AUTHENTICATED or NOT_AUTHENTICATED\nauth.py login         # Get URL → send to user\nauth.py save '<TOKEN>'  # Save token from hosted OAuth\n\nAuth flow: status → if not authenticated → login → user clicks link, copies token → save '<TOKEN>'"
      },
      {
        "title": "Gmail",
        "body": "gmail.py list [-n 10] [-q \"query\"]   # List emails\ngmail.py search \"query\"              # Search emails\ngmail.py get MESSAGE_ID              # Read email\ngmail.py send \"to\" \"subject\" \"body\"  # Send email\ngmail.py draft \"to\" \"subject\" \"body\" # Create draft\ngmail.py labels                      # List labels\n\n# Bulk operations (up to 1000 messages per API call)\ngmail.py bulk-label \"query\" --add LABEL --remove LABEL  # Add/remove labels\ngmail.py bulk-trash \"query\" [-y]     # Move to trash (use -y to skip confirmation)\n\nBulk examples:\n\ngmail.py bulk-label \"from:newsletter@example.com\" --add ARCHIVE --remove INBOX\ngmail.py bulk-trash \"subject:alert older_than:30d\" -y\ngmail.py bulk-label \"category:promotions\" --add Label_3  # Use label IDs from `labels`"
      },
      {
        "title": "Calendar",
        "body": "gcal.py list [DATE]                  # List events (DATE: YYYY-MM-DD or \"today\")\ngcal.py create \"title\" \"START\" \"END\" # Create event (START/END: YYYY-MM-DDTHH:MM)\ngcal.py get EVENT_ID                 # Event details\ngcal.py delete EVENT_ID              # Delete event\ngcal.py calendars                    # List calendars"
      },
      {
        "title": "Drive",
        "body": "drive.py list [-n 20]                # List files\ndrive.py search \"query\"              # Search by name\ndrive.py get FILE_ID                 # File metadata\ndrive.py download FILE_ID            # File content\ndrive.py create-folder \"name\"        # Create folder"
      },
      {
        "title": "Docs",
        "body": "docs.py create \"title\"               # Create doc\ndocs.py get DOC_ID                   # Read content\ndocs.py find \"query\"                 # Find by title\ndocs.py append DOC_ID \"text\"         # Append text\ndocs.py insert DOC_ID \"text\"         # Insert at start\ndocs.py replace DOC_ID \"old\" \"new\"   # Replace text"
      },
      {
        "title": "Sheets",
        "body": "sheets.py create \"title\"             # Create spreadsheet\nsheets.py get ID \"Sheet!A1:D10\"      # Read data\nsheets.py info ID                    # Sheet metadata\nsheets.py find \"query\"               # Find by name\nsheets.py write ID \"Sheet!A1\" \"a,b;c,d\"   # Write (rows separated by ;)\nsheets.py append ID \"Sheet!A:B\" \"a,b;c,d\" # Append rows"
      },
      {
        "title": "Slides",
        "body": "slides.py find \"query\"               # Find presentations\nslides.py get PRESENTATION_ID        # Get slides info\nslides.py text PRESENTATION_ID       # Extract all text\nslides.py create \"title\"             # Create presentation"
      },
      {
        "title": "People/Contacts",
        "body": "people.py me                         # Current user profile\npeople.py contacts [-n 100]          # List contacts\npeople.py search \"name\"              # Search contacts\npeople.py get CONTACT_ID             # Contact details"
      },
      {
        "title": "Chat (Workspace only)",
        "body": "chat.py spaces                       # List spaces\nchat.py messages SPACE_ID [-n 20]    # List messages\nchat.py send SPACE_ID \"text\"         # Send message\nchat.py get SPACE_ID                 # Space details\n\nNote: After adding new services, run auth.py logout then login again to grant new permissions."
      }
    ],
    "body": "ez-google\n\nAgent-friendly Google Workspace tools. Simple CLI scripts with hosted OAuth - users just click a link and paste back a token. No API keys or credentials needed.\n\nRun all commands with: uv run scripts/<script>.py <command> [args]\n\nAuth (do this first)\nauth.py status        # Check: AUTHENTICATED or NOT_AUTHENTICATED\nauth.py login         # Get URL → send to user\nauth.py save '<TOKEN>'  # Save token from hosted OAuth\n\n\nAuth flow: status → if not authenticated → login → user clicks link, copies token → save '<TOKEN>'\n\nGmail\ngmail.py list [-n 10] [-q \"query\"]   # List emails\ngmail.py search \"query\"              # Search emails\ngmail.py get MESSAGE_ID              # Read email\ngmail.py send \"to\" \"subject\" \"body\"  # Send email\ngmail.py draft \"to\" \"subject\" \"body\" # Create draft\ngmail.py labels                      # List labels\n\n# Bulk operations (up to 1000 messages per API call)\ngmail.py bulk-label \"query\" --add LABEL --remove LABEL  # Add/remove labels\ngmail.py bulk-trash \"query\" [-y]     # Move to trash (use -y to skip confirmation)\n\n\nBulk examples:\n\ngmail.py bulk-label \"from:newsletter@example.com\" --add ARCHIVE --remove INBOX\ngmail.py bulk-trash \"subject:alert older_than:30d\" -y\ngmail.py bulk-label \"category:promotions\" --add Label_3  # Use label IDs from `labels`\n\nCalendar\ngcal.py list [DATE]                  # List events (DATE: YYYY-MM-DD or \"today\")\ngcal.py create \"title\" \"START\" \"END\" # Create event (START/END: YYYY-MM-DDTHH:MM)\ngcal.py get EVENT_ID                 # Event details\ngcal.py delete EVENT_ID              # Delete event\ngcal.py calendars                    # List calendars\n\nDrive\ndrive.py list [-n 20]                # List files\ndrive.py search \"query\"              # Search by name\ndrive.py get FILE_ID                 # File metadata\ndrive.py download FILE_ID            # File content\ndrive.py create-folder \"name\"        # Create folder\n\nDocs\ndocs.py create \"title\"               # Create doc\ndocs.py get DOC_ID                   # Read content\ndocs.py find \"query\"                 # Find by title\ndocs.py append DOC_ID \"text\"         # Append text\ndocs.py insert DOC_ID \"text\"         # Insert at start\ndocs.py replace DOC_ID \"old\" \"new\"   # Replace text\n\nSheets\nsheets.py create \"title\"             # Create spreadsheet\nsheets.py get ID \"Sheet!A1:D10\"      # Read data\nsheets.py info ID                    # Sheet metadata\nsheets.py find \"query\"               # Find by name\nsheets.py write ID \"Sheet!A1\" \"a,b;c,d\"   # Write (rows separated by ;)\nsheets.py append ID \"Sheet!A:B\" \"a,b;c,d\" # Append rows\n\nSlides\nslides.py find \"query\"               # Find presentations\nslides.py get PRESENTATION_ID        # Get slides info\nslides.py text PRESENTATION_ID       # Extract all text\nslides.py create \"title\"             # Create presentation\n\nPeople/Contacts\npeople.py me                         # Current user profile\npeople.py contacts [-n 100]          # List contacts\npeople.py search \"name\"              # Search contacts\npeople.py get CONTACT_ID             # Contact details\n\nChat (Workspace only)\nchat.py spaces                       # List spaces\nchat.py messages SPACE_ID [-n 20]    # List messages\nchat.py send SPACE_ID \"text\"         # Send message\nchat.py get SPACE_ID                 # Space details\n\n\nNote: After adding new services, run auth.py logout then login again to grant new permissions."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/araa47/ez-google",
    "publisherUrl": "https://clawhub.ai/araa47/ez-google",
    "owner": "araa47",
    "version": "1.0.2",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/ez-google",
    "downloadUrl": "https://openagent3.xyz/downloads/ez-google",
    "agentUrl": "https://openagent3.xyz/skills/ez-google/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ez-google/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ez-google/agent.md"
  }
}