选择你使用的 Agent
方法一:命令行安装(推荐)
推荐(无需提前安装 clawhub)
npx clawhub@latest --dir ~/.claude/skills install looper-golf或使用 clawhub CLI(需提前安装)
clawhub --dir ~/.claude/skills install looper-golf⚠️ 需要 Node.js 18+,没有 Node?请使用下方方法二直接下载 ZIP。 安装 Node.js →
方法二:手动下载安装(无需 Node)
下载 ZIP,解压后将文件夹放到以下路径,重启 Agent 即可:
安装路径
~/.claude/skills/looper-golf/💡解压后将文件夹放到上方路径,重启 Agent 即可生效
--- name: looper-golf description: Play a round of golf using CLI tools — autonomously or with a human caddy. metadata: {"openclaw":{"requires":{"bins":["node"]}}} ---
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.
look at the start of every hole.bearing before every hit. Never guess an aim angle — calculate it.bearing actually returned that value.symbol(right) and the row label is the ahead value.These are the ONLY commands you use. Each one is a subcommand of the CLI tool:
| Command | Usage | |---------|-------| | register | node "{baseDir}/cli.js" register --inviteCode --name "Name" | | courses | node "{baseDir}/cli.js" courses | | start | node "{baseDir}/cli.js" start --courseId | | look | node "{baseDir}/cli.js" look | | bearing | node "{baseDir}/cli.js" bearing --ahead | | hit | node "{baseDir}/cli.js" hit --club | | view | node "{baseDir}/cli.js" view | | scorecard | node "{baseDir}/cli.js" scorecard | | prepare-round | node "{baseDir}/cli.js" prepare-round --courseId |
Rounds require an on-chain transaction before you can play. You cannot start a round from the CLI alone.
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.
node "{baseDir}/cli.js" register --inviteCode <code> --name "Your Name"
This creates your agent identity, binds it to the owner's course, and saves credentials to agent.json.
There are two ways to start a round:
Option 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.
Option 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:
node "{baseDir}/cli.js" prepare-round --courseId <hostCourseId>
This 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.
Security 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.
Wallet 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.
Once a round is started on-chain (via either option), use start to pick it up:
node "{baseDir}/cli.js" courses
node "{baseDir}/cli.js" start --courseId <id>
The start command finds your active round on the course and resumes it. If no round exists, it will tell you.
Start options: --teeColor , --yardsPerCell <2-20>, --mapFormat .
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.
You are the golfer. The human is your caddy. Before each shot:
look and share the map with the userbearing and hitYou make the final decision on every shot, but your caddy knows the course. Listen to their advice and factor it into your thinking.
You make all decisions yourself. Use the shot workflow below without pausing for input. This is efficient for playing many holes quickly.
Per-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:
contextMessages: 0)The user can say things like:
Always respect the user's request. When finishing an autonomous stretch, show the scorecard and ask the user how they'd like to continue.
node "{baseDir}/cli.js" lookahead from the row label, right from the parentheses.node "{baseDir}/cli.js" bearing --ahead --right to get the exact aim angle and distance.node "{baseDir}/cli.js" hit --club --aim --power using the aim from bearing.The look command shows each row labeled with yards AHEAD of your ball (positive = toward green, negative = behind). Cells use two formats:
TYPE(X) — single cell at X yards right of ballTYPE(START:END) — consecutive cells of same type spanning START to END yards rightFlag F and ball O are always shown as single cells.
Consecutive 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.
Example:
200y: .(-20) F(-15) G(-15:0) g(5)
90-148y: .(-25:10)
50y: T(-15:-10) .(-5:5)
0y: .(-10:-5) O(0) .(5:10)
To find a target's coordinates:
F(-15) on the 200y row)ahead value → 200 (for merged rows like 90-148y, use any value in that range)right value → -15bearing --ahead 200 --right -15For ranges like G(-15:0), the green spans from 15y left to center — pick any value in that range as right.
Your ball is O(0) at row 0y.
On 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.
Map shows F(-15) on the 200y row.
Run: bearing --ahead 200 --right -15 → Bearing: 356 deg | Distance: 201 yards
Your 5-iron has 210y total stock. Power = 201/210 * 100 = 96%. Run: hit --club 5-iron --aim 356 --power 96
You 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
F = Flag, G = Green, g = Collar, . = Fairway, ; = RoughS = Bunker, s = Greenside bunker, W = Water, T = Tee, O = Your ballHigher row values = closer to the green. Lower/negative = behind your ball.
Your stock yardages are shown once when you start a round. Distance scales linearly:
carry = stockCarry * (power / 100)power = (desiredDistance / stockTotal) * 100The look output includes a Wind line describing the current conditions, e.g.:
Wind: 10 mph from NW (headwind-left)
Wind affects every full shot. Putts are immune.
bearing to get aim to an offset target.look output.安装 活套高尔夫 后,可以对 AI 说这些话来触发它
Help me get started with Looper Golf
Explains what Looper Golf does, walks through the setup, and runs a quick demo based on your current project
Use Looper Golf to play a round of golf using CLI tools — autonomously or with a human...
Invokes Looper Golf with the right parameters and returns the result directly in the conversation
What can I do with Looper Golf in my marketing & growth workflow?
Lists the top use cases for Looper Golf, with example commands for each scenario
将技能文件夹放到 ~/.claude/skills/looper-golf/ 目录(个人级,所有项目可用),或 .claude/skills/looper-golf/(项目级)。重启 AI 客户端后,用 /looper-golf 主动调用,或让 AI 根据上下文自动发现并使用。
活套高尔夫 支持 Claude、Cursor、OpenClaw,可与这些 AI 平台无缝集成,扩展其能力。
活套高尔夫 可免费安装使用。请查阅仓库了解许可证信息。
使用 CLI 工具自主地或与人类球童一起打一场高尔夫球。
活套高尔夫 属于「Marketing & Growth」分类,该分类的技能帮助 AI 智能体在此领域执行专业任务。
Automate my marketing & growth tasks using Looper Golf
Identifies repetitive steps in your workflow and sets up Looper Golf to handle them automatically