{
  "schemaVersion": "1.0",
  "item": {
    "slug": "google-keep",
    "name": "Google Keep",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/tag-assistant/google-keep",
    "canonicalUrl": "https://clawhub.ai/tag-assistant/google-keep",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/google-keep",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=google-keep",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "gkeep.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/google-keep"
    },
    "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/google-keep",
    "agentPageUrl": "https://openagent3.xyz/skills/google-keep/agent",
    "manifestUrl": "https://openagent3.xyz/skills/google-keep/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/google-keep/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": "Google Keep CLI Skill",
        "body": "Manage Google Keep notes and lists from the command line using the unofficial gkeepapi."
      },
      {
        "title": "Setup",
        "body": "After installing, the CLI lives in the skill directory. Set up a convenience alias or wrapper:\n\nSKILL_DIR=\"<path-to-this-skill>\"  # e.g. skills/google-keep\nalias gkeep=\"$SKILL_DIR/.venv/bin/python3 $SKILL_DIR/gkeep.py\"\n\nOr create a global wrapper:\n\ncat > ~/.local/bin/gkeep << 'EOF'\n#!/bin/bash\nSKILL_DIR=\"$(dirname \"$(readlink -f \"$0\")\")/../.openclaw/workspace/skills/google-keep\"\nexec \"$SKILL_DIR/.venv/bin/python3\" \"$SKILL_DIR/gkeep.py\" \"$@\"\nEOF\nchmod +x ~/.local/bin/gkeep"
      },
      {
        "title": "First-time setup (OAuth token exchange):",
        "body": "Go to https://accounts.google.com/EmbeddedSetup in your browser\nLog in with your Google account\nClick \"I agree\" on the consent screen (page may spin forever — ignore it)\nOpen DevTools: F12 → Application tab → Cookies → accounts.google.com\nCopy the value of the oauth_token cookie\nRun:\n\ngkeep auth <email> <oauth_token>"
      },
      {
        "title": "With pre-obtained master token:",
        "body": "gkeep auth-master <email> <master_token>\n\nCredentials are stored in <skill-dir>/.config/ (chmod 600). The master token has full account access — treat it like a password. It does not expire (unlike standard OAuth refresh tokens)."
      },
      {
        "title": "List notes",
        "body": "gkeep list                    # Active notes\ngkeep list --archived         # Include archived\ngkeep list --pinned           # Pinned only\ngkeep list --label \"Shopping\" # Filter by label\ngkeep list --json             # JSON output\ngkeep list -v                 # Show IDs"
      },
      {
        "title": "Search",
        "body": "gkeep search \"grocery\"\ngkeep search \"todo\" --json"
      },
      {
        "title": "Get a specific note",
        "body": "gkeep get <note-id>\ngkeep get \"Shopping List\"     # By title (case-insensitive)\ngkeep get <id> --json"
      },
      {
        "title": "Create notes",
        "body": "gkeep create --title \"Ideas\" --text \"Some thoughts\"\ngkeep create --title \"Groceries\" --list --items \"Milk\" \"Eggs\" \"Bread\"\ngkeep create --title \"Important\" --pin --color Red --label \"Work\""
      },
      {
        "title": "Edit notes",
        "body": "gkeep edit <id-or-title> --title \"New Title\"\ngkeep edit <id-or-title> --text \"Updated text\"\ngkeep edit <id-or-title> --pin true\ngkeep edit <id-or-title> --archive true\ngkeep edit <id-or-title> --color Blue"
      },
      {
        "title": "List operations",
        "body": "gkeep check \"Groceries\" \"milk\"           # Check off an item\ngkeep check \"Groceries\" \"milk\" --uncheck # Uncheck\ngkeep check \"Groceries\" \"m\" --all        # Check all matching\ngkeep add-item \"Groceries\" \"Butter\" \"Cheese\"  # Add items"
      },
      {
        "title": "Delete (trash)",
        "body": "gkeep delete <id-or-title>"
      },
      {
        "title": "Labels",
        "body": "gkeep labels              # List all labels\ngkeep labels --json"
      },
      {
        "title": "Export / backup",
        "body": "gkeep dump                # All notes as JSON\ngkeep dump > backup.json"
      },
      {
        "title": "Colors",
        "body": "Valid colors: White, Red, Orange, Yellow, Green, Teal, Blue, DarkBlue, Purple, Pink, Brown, Gray"
      },
      {
        "title": "How it works",
        "body": "Uses gkeepapi (1,600+ stars, actively maintained) — an unofficial reverse-engineered Google Keep client\nAuth via gpsoauth — Google Play Services OAuth flow to obtain a master token\nState is cached locally (.config/state.json) for fast startup after the initial sync\nMaster tokens don't expire, so no re-auth dance\nUnofficial API — Google could break compatibility at any time (but gkeepapi has been stable for years)"
      },
      {
        "title": "Security notes",
        "body": "The master token grants full access to the associated Google account\nCredentials are stored with 600 permissions in .config/\nNever commit .config/ to version control\ndelete moves notes to trash (recoverable) — it does not permanently delete"
      }
    ],
    "body": "Google Keep CLI Skill\n\nManage Google Keep notes and lists from the command line using the unofficial gkeepapi.\n\nSetup\n\nAfter installing, the CLI lives in the skill directory. Set up a convenience alias or wrapper:\n\nSKILL_DIR=\"<path-to-this-skill>\"  # e.g. skills/google-keep\nalias gkeep=\"$SKILL_DIR/.venv/bin/python3 $SKILL_DIR/gkeep.py\"\n\n\nOr create a global wrapper:\n\ncat > ~/.local/bin/gkeep << 'EOF'\n#!/bin/bash\nSKILL_DIR=\"$(dirname \"$(readlink -f \"$0\")\")/../.openclaw/workspace/skills/google-keep\"\nexec \"$SKILL_DIR/.venv/bin/python3\" \"$SKILL_DIR/gkeep.py\" \"$@\"\nEOF\nchmod +x ~/.local/bin/gkeep\n\nAuthentication\nFirst-time setup (OAuth token exchange):\nGo to https://accounts.google.com/EmbeddedSetup in your browser\nLog in with your Google account\nClick \"I agree\" on the consent screen (page may spin forever — ignore it)\nOpen DevTools: F12 → Application tab → Cookies → accounts.google.com\nCopy the value of the oauth_token cookie\nRun:\ngkeep auth <email> <oauth_token>\n\nWith pre-obtained master token:\ngkeep auth-master <email> <master_token>\n\n\nCredentials are stored in <skill-dir>/.config/ (chmod 600). The master token has full account access — treat it like a password. It does not expire (unlike standard OAuth refresh tokens).\n\nCommands\nList notes\ngkeep list                    # Active notes\ngkeep list --archived         # Include archived\ngkeep list --pinned           # Pinned only\ngkeep list --label \"Shopping\" # Filter by label\ngkeep list --json             # JSON output\ngkeep list -v                 # Show IDs\n\nSearch\ngkeep search \"grocery\"\ngkeep search \"todo\" --json\n\nGet a specific note\ngkeep get <note-id>\ngkeep get \"Shopping List\"     # By title (case-insensitive)\ngkeep get <id> --json\n\nCreate notes\ngkeep create --title \"Ideas\" --text \"Some thoughts\"\ngkeep create --title \"Groceries\" --list --items \"Milk\" \"Eggs\" \"Bread\"\ngkeep create --title \"Important\" --pin --color Red --label \"Work\"\n\nEdit notes\ngkeep edit <id-or-title> --title \"New Title\"\ngkeep edit <id-or-title> --text \"Updated text\"\ngkeep edit <id-or-title> --pin true\ngkeep edit <id-or-title> --archive true\ngkeep edit <id-or-title> --color Blue\n\nList operations\ngkeep check \"Groceries\" \"milk\"           # Check off an item\ngkeep check \"Groceries\" \"milk\" --uncheck # Uncheck\ngkeep check \"Groceries\" \"m\" --all        # Check all matching\ngkeep add-item \"Groceries\" \"Butter\" \"Cheese\"  # Add items\n\nDelete (trash)\ngkeep delete <id-or-title>\n\nLabels\ngkeep labels              # List all labels\ngkeep labels --json\n\nExport / backup\ngkeep dump                # All notes as JSON\ngkeep dump > backup.json\n\nColors\n\nValid colors: White, Red, Orange, Yellow, Green, Teal, Blue, DarkBlue, Purple, Pink, Brown, Gray\n\nHow it works\nUses gkeepapi (1,600+ stars, actively maintained) — an unofficial reverse-engineered Google Keep client\nAuth via gpsoauth — Google Play Services OAuth flow to obtain a master token\nState is cached locally (.config/state.json) for fast startup after the initial sync\nMaster tokens don't expire, so no re-auth dance\nUnofficial API — Google could break compatibility at any time (but gkeepapi has been stable for years)\nSecurity notes\nThe master token grants full access to the associated Google account\nCredentials are stored with 600 permissions in .config/\nNever commit .config/ to version control\ndelete moves notes to trash (recoverable) — it does not permanently delete"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/tag-assistant/google-keep",
    "publisherUrl": "https://clawhub.ai/tag-assistant/google-keep",
    "owner": "tag-assistant",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/google-keep",
    "downloadUrl": "https://openagent3.xyz/downloads/google-keep",
    "agentUrl": "https://openagent3.xyz/skills/google-keep/agent",
    "manifestUrl": "https://openagent3.xyz/skills/google-keep/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/google-keep/agent.md"
  }
}