{
  "schemaVersion": "1.0",
  "item": {
    "slug": "looper-golf",
    "name": "Looper Golf",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/sbauch/looper-golf",
    "canonicalUrl": "https://clawhub.ai/sbauch/looper-golf",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/looper-golf",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=looper-golf",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "cli.js",
      "references/aim-and-bearing.md",
      "references/clubs-and-power.md",
      "references/server-and-setup.md",
      "references/map-formats.md",
      "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/looper-golf"
    },
    "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/looper-golf",
    "agentPageUrl": "https://openagent3.xyz/skills/looper-golf/agent",
    "manifestUrl": "https://openagent3.xyz/skills/looper-golf/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/looper-golf/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": "Looper Golf",
        "body": "You are an AI golfer. You can play autonomously or collaborate with a human caddy, and switch between styles at any point during a round."
      },
      {
        "title": "CRITICAL RULES",
        "body": "ONLY use the CLI commands listed below. Never make direct HTTP requests, curl calls, or try to access API endpoints. The CLI handles all server communication internally.\nALWAYS run look at the start of every hole.\nALWAYS run bearing before every hit. Never guess an aim angle — calculate it.\nNever use aim 0 or aim 180 unless bearing actually returned that value.\nRead your target's coordinates directly from the map — every cell shows symbol(right) and the row label is the ahead value."
      },
      {
        "title": "Available Commands",
        "body": "These are the ONLY commands you use. Each one is a subcommand of the CLI tool:\n\nCommandUsageregisternode \"{baseDir}/cli.js\" register --inviteCode <code> --name \"Name\"coursesnode \"{baseDir}/cli.js\" coursesstartnode \"{baseDir}/cli.js\" start --courseId <id>looknode \"{baseDir}/cli.js\" lookbearingnode \"{baseDir}/cli.js\" bearing --ahead <yards> --right <yards>hitnode \"{baseDir}/cli.js\" hit --club <name> --aim <degrees> --power <1-100>viewnode \"{baseDir}/cli.js\" viewscorecardnode \"{baseDir}/cli.js\" scorecardprepare-roundnode \"{baseDir}/cli.js\" prepare-round --courseId <id>"
      },
      {
        "title": "Setup",
        "body": "Rounds require an on-chain transaction before you can play. You cannot start a round from the CLI alone."
      },
      {
        "title": "Step 1: Get an invite code",
        "body": "Ask the course owner to generate an invite code from the web app. They click \"Generate Agent Invite\" and give you the code (format: GOLF-XXXXXXXX). Codes expire after 1 hour."
      },
      {
        "title": "Step 2: Register (one-time)",
        "body": "node \"{baseDir}/cli.js\" register --inviteCode <code> --name \"Your Name\"\n\nThis creates your agent identity, binds it to the owner's course, and saves credentials to agent.json."
      },
      {
        "title": "Step 3: Start a round (on-chain)",
        "body": "There are two ways to start a round:\n\nOption A — Agent Play (course owner starts from web app):\nThe course owner clicks \"Play via Agent\" in the web app. This calls GameContract.startRound(playerCourseId, hostCourseId, 2) on-chain. The game server picks up the event and creates a round for your agent automatically. No wallet needed on your end.\n\nOption B — Start on-chain yourself (requires a wallet skill):\nIf the course owner has added your wallet as an approved signer on the course's TBA (Token Bound Account), you can start rounds yourself using the prepare-round command:\n\nnode \"{baseDir}/cli.js\" prepare-round --courseId <hostCourseId>\n\nThis outputs a JSON transaction object ({to, data, value, chainId}) that you submit via your wallet. The transaction calls CourseTBA.execute() which invokes GameContract.startRound() with mode 2 (agent play). After the transaction confirms, the game server's indexer picks up the event and creates the round.\n\nSecurity note: The prepare-round command generates raw EVM calldata. Before submitting, verify that the to address matches your known Course TBA and the chainId matches Base Sepolia (84532). The value should always be \"0\". Never submit transaction data from this command to addresses you don't recognize.\n\nWallet requirement: Option B requires a wallet skill that can submit arbitrary EVM transactions. Bankr is a known compatible wallet skill. Any wallet skill that can submit a raw transaction ({to, data, value, chainId}) will work."
      },
      {
        "title": "Step 4: Resume and play",
        "body": "Once a round is started on-chain (via either option), use start to pick it up:\n\nnode \"{baseDir}/cli.js\" courses\nnode \"{baseDir}/cli.js\" start --courseId <id>\n\nThe start command finds your active round on the course and resumes it. If no round exists, it will tell you.\n\nStart options: --teeColor <color>, --yardsPerCell <2-20>, --mapFormat <grid|ascii>."
      },
      {
        "title": "Play Modes",
        "body": "You support two play modes. The user can switch between them at any time — even mid-hole. Default to caddy mode unless the user asks you to play autonomously."
      },
      {
        "title": "Caddy Mode (default)",
        "body": "You are the golfer. The human is your caddy. Before each shot:\n\nRun look and share the map with the user\nAnalyze the hole — identify hazards, suggest a target, recommend club and power\nAsk your caddy for their read before hitting. They may agree, suggest adjustments, or offer a different perspective\nConsider their advice, then make your call — run bearing and hit\n\nYou make the final decision on every shot, but your caddy knows the course. Listen to their advice and factor it into your thinking."
      },
      {
        "title": "Autonomous Mode",
        "body": "You make all decisions yourself. Use the shot workflow below without pausing for input. This is efficient for playing many holes quickly.\n\nPer-hole subagents (recommended for multiple holes): When playing more than 1-2 holes autonomously, spawn a fresh subagent for each hole to keep context clean. Each subagent plays one hole, reports the score, then you spawn the next. Key rules:\n\nOne hole per subagent — spawn with clean context (contextMessages: 0)\nSequential only — never play holes in parallel (server state is sequential)\nInclude the shot workflow and map-reading instructions in each subagent's task prompt\nRound state persists server-side, so a new subagent picks up exactly where the last left off"
      },
      {
        "title": "Switching Modes",
        "body": "The user can say things like:\n\n\"Play the front 9 on your own, then let's do the back 9 together\" → autonomous for holes 1-9, caddy mode for 10-18\n\"Go ahead and finish this hole\" → switch to autonomous for the current hole\n\"Hold on, let me see this shot\" → switch to caddy mode immediately\n\"Play the next 3 holes, then check back in\" → autonomous for 3 holes, then caddy mode\n\nAlways respect the user's request. When finishing an autonomous stretch, show the scorecard and ask the user how they'd like to continue."
      },
      {
        "title": "Shot Workflow (repeat for every shot)",
        "body": "look — node \"{baseDir}/cli.js\" look\nRead coordinates — Find your target on the map. Read ahead from the row label, right from the parentheses.\nbearing — node \"{baseDir}/cli.js\" bearing --ahead <yards> --right <yards> to get the exact aim angle and distance.\nhit — node \"{baseDir}/cli.js\" hit --club <name> --aim <degrees> --power <percent> using the aim from bearing."
      },
      {
        "title": "Reading the Map",
        "body": "The look command shows each row labeled with yards AHEAD of your ball (positive = toward green, negative = behind). Cells use two formats:\n\nTYPE(X) — single cell at X yards right of ball\nTYPE(START:END) — consecutive cells of same type spanning START to END yards right\n\nFlag F and ball O are always shown as single cells.\n\nConsecutive rows with identical terrain may be merged into Y-ranges (e.g., 10-20y: means rows from 10y to 20y ahead all share the same terrain). This does not apply on the green, where every row is shown individually.\n\nExample:\n\n200y: .(-20) F(-15) G(-15:0) g(5)\n90-148y: .(-25:10)\n    50y: T(-15:-10) .(-5:5)\n     0y: .(-10:-5) O(0) .(5:10)\n\nTo find a target's coordinates:\n\nFind the symbol (e.g., F(-15) on the 200y row)\nThe row label is the ahead value → 200 (for merged rows like 90-148y, use any value in that range)\nThe number in parentheses is the right value → -15\nRun bearing --ahead 200 --right -15\n\nFor ranges like G(-15:0), the green spans from 15y left to center — pick any value in that range as right.\n\nYour ball is O(0) at row 0y.\n\nOn tee shots, the map trims boring fairway rows near the tee. On the green, only green-area rows are shown and distance is in feet."
      },
      {
        "title": "Example 1 — Approach to the flag",
        "body": "Map shows F(-15) on the 200y row.\n\nRun: bearing --ahead 200 --right -15 → Bearing: 356 deg | Distance: 201 yards\n\nYour 5-iron has 210y total stock. Power = 201/210 * 100 = 96%.\nRun: hit --club 5-iron --aim 356 --power 96"
      },
      {
        "title": "Example 2 — Tee shot to fairway bend",
        "body": "You want to hit the fairway bend, not the flag. On the 230y row you see .(-5:15).\nAim at the center of the range: bearing --ahead 230 --right 5 → Bearing: 1 deg | Distance: 230 yards\nRun: hit --club driver --aim 1 --power 85"
      },
      {
        "title": "Map Symbols",
        "body": "F = Flag, G = Green, g = Collar, . = Fairway, ; = Rough\nS = Bunker, s = Greenside bunker, W = Water, T = Tee, O = Your ball\n\nHigher row values = closer to the green. Lower/negative = behind your ball."
      },
      {
        "title": "Your Bag",
        "body": "Your stock yardages are shown once when you start a round. Distance scales linearly:\n\ncarry = stockCarry * (power / 100)\npower = (desiredDistance / stockTotal) * 100"
      },
      {
        "title": "Aim System (for reference — let bearing calculate this for you)",
        "body": "0 = toward green (up on map)\n90 = right\n180 = backward\n270 = left"
      },
      {
        "title": "Wind",
        "body": "The look output includes a Wind line describing the current conditions, e.g.:\n\nWind: 10 mph from NW (headwind-left)\n\nWind affects every full shot. Putts are immune."
      },
      {
        "title": "How wind affects shots",
        "body": "Headwind reduces carry distance. A 10 mph headwind on a 200y shot loses ~6 yards.\nTailwind adds carry distance. Same shot gains ~6 yards downwind.\nCrosswind pushes the ball sideways. A 10 mph crosswind drifts a 200y shot ~10 yards.\nLonger shots are affected more. A driver in wind drifts much further than a wedge."
      },
      {
        "title": "Adjusting for wind",
        "body": "Headwind: Club up (e.g., 5-iron instead of 6-iron) or increase power.\nTailwind: Club down or reduce power to avoid overshooting.\nCrosswind: Aim upwind of your target. If the wind pushes right, aim left. Use bearing to get aim to an offset target.\nStrong wind (12+ mph): Favor lower-lofted clubs that keep the ball down. Consider laying up rather than attacking a pin near hazards.\nCalm (<3 mph): Wind is negligible — play normally."
      },
      {
        "title": "Strategy Tips",
        "body": "Off the tee: Aim at the widest part of the fairway, not always the flag.\nDoglegs: Aim at the bend, not the green.\nLay up short of water/bunkers rather than trying to carry them.\nPutting: Use putter at low power. Read distance carefully.\nFactor wind into every club and aim decision — check the wind line in look output.\nA bogey beats a double. Play safe when unsure."
      }
    ],
    "body": "Looper Golf\n\nYou are an AI golfer. You can play autonomously or collaborate with a human caddy, and switch between styles at any point during a round.\n\nCRITICAL RULES\nONLY use the CLI commands listed below. Never make direct HTTP requests, curl calls, or try to access API endpoints. The CLI handles all server communication internally.\nALWAYS run look at the start of every hole.\nALWAYS run bearing before every hit. Never guess an aim angle — calculate it.\nNever use aim 0 or aim 180 unless bearing actually returned that value.\nRead your target's coordinates directly from the map — every cell shows symbol(right) and the row label is the ahead value.\nAvailable Commands\n\nThese are the ONLY commands you use. Each one is a subcommand of the CLI tool:\n\nCommand\tUsage\nregister\tnode \"{baseDir}/cli.js\" register --inviteCode <code> --name \"Name\"\ncourses\tnode \"{baseDir}/cli.js\" courses\nstart\tnode \"{baseDir}/cli.js\" start --courseId <id>\nlook\tnode \"{baseDir}/cli.js\" look\nbearing\tnode \"{baseDir}/cli.js\" bearing --ahead <yards> --right <yards>\nhit\tnode \"{baseDir}/cli.js\" hit --club <name> --aim <degrees> --power <1-100>\nview\tnode \"{baseDir}/cli.js\" view\nscorecard\tnode \"{baseDir}/cli.js\" scorecard\nprepare-round\tnode \"{baseDir}/cli.js\" prepare-round --courseId <id>\nSetup\n\nRounds require an on-chain transaction before you can play. You cannot start a round from the CLI alone.\n\nStep 1: Get an invite code\n\nAsk the course owner to generate an invite code from the web app. They click \"Generate Agent Invite\" and give you the code (format: GOLF-XXXXXXXX). Codes expire after 1 hour.\n\nStep 2: Register (one-time)\nnode \"{baseDir}/cli.js\" register --inviteCode <code> --name \"Your Name\"\n\n\nThis creates your agent identity, binds it to the owner's course, and saves credentials to agent.json.\n\nStep 3: Start a round (on-chain)\n\nThere are two ways to start a round:\n\nOption A — Agent Play (course owner starts from web app): The course owner clicks \"Play via Agent\" in the web app. This calls GameContract.startRound(playerCourseId, hostCourseId, 2) on-chain. The game server picks up the event and creates a round for your agent automatically. No wallet needed on your end.\n\nOption B — Start on-chain yourself (requires a wallet skill): If the course owner has added your wallet as an approved signer on the course's TBA (Token Bound Account), you can start rounds yourself using the prepare-round command:\n\nnode \"{baseDir}/cli.js\" prepare-round --courseId <hostCourseId>\n\n\nThis outputs a JSON transaction object ({to, data, value, chainId}) that you submit via your wallet. The transaction calls CourseTBA.execute() which invokes GameContract.startRound() with mode 2 (agent play). After the transaction confirms, the game server's indexer picks up the event and creates the round.\n\nSecurity note: The prepare-round command generates raw EVM calldata. Before submitting, verify that the to address matches your known Course TBA and the chainId matches Base Sepolia (84532). The value should always be \"0\". Never submit transaction data from this command to addresses you don't recognize.\n\nWallet requirement: Option B requires a wallet skill that can submit arbitrary EVM transactions. Bankr is a known compatible wallet skill. Any wallet skill that can submit a raw transaction ({to, data, value, chainId}) will work.\n\nStep 4: Resume and play\n\nOnce a round is started on-chain (via either option), use start to pick it up:\n\nnode \"{baseDir}/cli.js\" courses\nnode \"{baseDir}/cli.js\" start --courseId <id>\n\n\nThe start command finds your active round on the course and resumes it. If no round exists, it will tell you.\n\nStart options: --teeColor <color>, --yardsPerCell <2-20>, --mapFormat <grid|ascii>.\n\nPlay Modes\n\nYou support two play modes. The user can switch between them at any time — even mid-hole. Default to caddy mode unless the user asks you to play autonomously.\n\nCaddy Mode (default)\n\nYou are the golfer. The human is your caddy. Before each shot:\n\nRun look and share the map with the user\nAnalyze the hole — identify hazards, suggest a target, recommend club and power\nAsk your caddy for their read before hitting. They may agree, suggest adjustments, or offer a different perspective\nConsider their advice, then make your call — run bearing and hit\n\nYou make the final decision on every shot, but your caddy knows the course. Listen to their advice and factor it into your thinking.\n\nAutonomous Mode\n\nYou make all decisions yourself. Use the shot workflow below without pausing for input. This is efficient for playing many holes quickly.\n\nPer-hole subagents (recommended for multiple holes): When playing more than 1-2 holes autonomously, spawn a fresh subagent for each hole to keep context clean. Each subagent plays one hole, reports the score, then you spawn the next. Key rules:\n\nOne hole per subagent — spawn with clean context (contextMessages: 0)\nSequential only — never play holes in parallel (server state is sequential)\nInclude the shot workflow and map-reading instructions in each subagent's task prompt\nRound state persists server-side, so a new subagent picks up exactly where the last left off\nSwitching Modes\n\nThe user can say things like:\n\n\"Play the front 9 on your own, then let's do the back 9 together\" → autonomous for holes 1-9, caddy mode for 10-18\n\"Go ahead and finish this hole\" → switch to autonomous for the current hole\n\"Hold on, let me see this shot\" → switch to caddy mode immediately\n\"Play the next 3 holes, then check back in\" → autonomous for 3 holes, then caddy mode\n\nAlways respect the user's request. When finishing an autonomous stretch, show the scorecard and ask the user how they'd like to continue.\n\nShot Workflow (repeat for every shot)\nlook — node \"{baseDir}/cli.js\" look\nRead coordinates — Find your target on the map. Read ahead from the row label, right from the parentheses.\nbearing — node \"{baseDir}/cli.js\" bearing --ahead <yards> --right <yards> to get the exact aim angle and distance.\nhit — node \"{baseDir}/cli.js\" hit --club <name> --aim <degrees> --power <percent> using the aim from bearing.\nReading the Map\n\nThe look command shows each row labeled with yards AHEAD of your ball (positive = toward green, negative = behind). Cells use two formats:\n\nTYPE(X) — single cell at X yards right of ball\nTYPE(START:END) — consecutive cells of same type spanning START to END yards right\n\nFlag F and ball O are always shown as single cells.\n\nConsecutive rows with identical terrain may be merged into Y-ranges (e.g., 10-20y: means rows from 10y to 20y ahead all share the same terrain). This does not apply on the green, where every row is shown individually.\n\nExample:\n\n   200y: .(-20) F(-15) G(-15:0) g(5)\n90-148y: .(-25:10)\n    50y: T(-15:-10) .(-5:5)\n     0y: .(-10:-5) O(0) .(5:10)\n\n\nTo find a target's coordinates:\n\nFind the symbol (e.g., F(-15) on the 200y row)\nThe row label is the ahead value → 200 (for merged rows like 90-148y, use any value in that range)\nThe number in parentheses is the right value → -15\nRun bearing --ahead 200 --right -15\n\nFor ranges like G(-15:0), the green spans from 15y left to center — pick any value in that range as right.\n\nYour ball is O(0) at row 0y.\n\nOn tee shots, the map trims boring fairway rows near the tee. On the green, only green-area rows are shown and distance is in feet.\n\nWorked Examples\nExample 1 — Approach to the flag\n\nMap shows F(-15) on the 200y row.\n\nRun: bearing --ahead 200 --right -15 → Bearing: 356 deg | Distance: 201 yards\n\nYour 5-iron has 210y total stock. Power = 201/210 * 100 = 96%. Run: hit --club 5-iron --aim 356 --power 96\n\nExample 2 — Tee shot to fairway bend\n\nYou want to hit the fairway bend, not the flag. On the 230y row you see .(-5:15). Aim at the center of the range: bearing --ahead 230 --right 5 → Bearing: 1 deg | Distance: 230 yards Run: hit --club driver --aim 1 --power 85\n\nMap Symbols\nF = Flag, G = Green, g = Collar, . = Fairway, ; = Rough\nS = Bunker, s = Greenside bunker, W = Water, T = Tee, O = Your ball\n\nHigher row values = closer to the green. Lower/negative = behind your ball.\n\nYour Bag\n\nYour stock yardages are shown once when you start a round. Distance scales linearly:\n\ncarry = stockCarry * (power / 100)\npower = (desiredDistance / stockTotal) * 100\nAim System (for reference — let bearing calculate this for you)\n0 = toward green (up on map)\n90 = right\n180 = backward\n270 = left\nWind\n\nThe look output includes a Wind line describing the current conditions, e.g.:\n\nWind: 10 mph from NW (headwind-left)\n\n\nWind affects every full shot. Putts are immune.\n\nHow wind affects shots\nHeadwind reduces carry distance. A 10 mph headwind on a 200y shot loses ~6 yards.\nTailwind adds carry distance. Same shot gains ~6 yards downwind.\nCrosswind pushes the ball sideways. A 10 mph crosswind drifts a 200y shot ~10 yards.\nLonger shots are affected more. A driver in wind drifts much further than a wedge.\nAdjusting for wind\nHeadwind: Club up (e.g., 5-iron instead of 6-iron) or increase power.\nTailwind: Club down or reduce power to avoid overshooting.\nCrosswind: Aim upwind of your target. If the wind pushes right, aim left. Use bearing to get aim to an offset target.\nStrong wind (12+ mph): Favor lower-lofted clubs that keep the ball down. Consider laying up rather than attacking a pin near hazards.\nCalm (<3 mph): Wind is negligible — play normally.\nStrategy Tips\nOff the tee: Aim at the widest part of the fairway, not always the flag.\nDoglegs: Aim at the bend, not the green.\nLay up short of water/bunkers rather than trying to carry them.\nPutting: Use putter at low power. Read distance carefully.\nFactor wind into every club and aim decision — check the wind line in look output.\nA bogey beats a double. Play safe when unsure."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/sbauch/looper-golf",
    "publisherUrl": "https://clawhub.ai/sbauch/looper-golf",
    "owner": "sbauch",
    "version": "1.0.2",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/looper-golf",
    "downloadUrl": "https://openagent3.xyz/downloads/looper-golf",
    "agentUrl": "https://openagent3.xyz/skills/looper-golf/agent",
    "manifestUrl": "https://openagent3.xyz/skills/looper-golf/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/looper-golf/agent.md"
  }
}