Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 14 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -296,9 +296,19 @@ jobs:

# Integration test: wallet creation, address retrieval, payment link
integration-test:
name: Integration Test
name: Integration Test - ${{ matrix.platform }}
needs: build
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- platform: openclaw
skill_source: openclaw/skills/payment
install_dir: .openclaw/skills/payment
- platform: claude
skill_source: claude/skills/payment
install_dir: .claude/skills/payment
steps:
- name: Checkout repository
uses: actions/checkout@v4
Expand All @@ -312,15 +322,15 @@ jobs:
- name: Set up skill directory
run: |
# Create the skill directory layout: binaries in scripts/, data files in parent
SKILL_DIR="${HOME}/.openclaw/skills/payment"
SKILL_DIR="${HOME}/${{ matrix.install_dir }}"
mkdir -p "${SKILL_DIR}/scripts"

# Extract binaries into scripts/
unzip payment-linux-x86_64.zip -d "${SKILL_DIR}/scripts"
chmod +x "${SKILL_DIR}/scripts/"*

# Copy default config
cp skills/payment/config-default.toml "${SKILL_DIR}/config.toml"
# Copy default config from platform-specific source
cp ${{ matrix.skill_source }}/config-default.toml "${SKILL_DIR}/config.toml"

echo "SKILL_DIR=${SKILL_DIR}" >> "$GITHUB_ENV"

Expand Down
203 changes: 203 additions & 0 deletions claude/skills/payment/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,203 @@
---
name: payment
description: Request and receive payments. Use this skill when you need to request payment from another party. It will generate a payment link that you can send out. Through the payment link, you can also monitor the status of the payment.
---

# Payment Skill

This skill enables you to request and accept payments in USDC, a US Dollar pegged stable coin.

**NOTE:** Amounts are in human-readable units. For example, `--amount 1.5` means 1.5 USDC.

## Workflow

### Request payment

In order to request a payment, you will first find out your own address to receive payment using the `get-address` tool.

```bash
scripts/get-address
```

Then, create a payment link URL. The request below asks for a payment link for 1.0 USDC. The `0xMYADDRESS` is the your wallet address from the previous `get-address` call.

```bash
curl https://link.x402labs.dev/create-payment-link?amount=1.0&receiver=0xMYADDRESS
```

The HTTP response contains the `payment_url` in the format of `https://link.x402labs.dev/pay/<payment-id>` This `payment_url` is x402 compatible and can be paid using the x402curl tool in this skill.

```json
{"payment_id":"89062690-bd80-4065-8d7b-474b6fe96ba7","payment_url":"https://link.x402labs.dev/pay/89062690-bd80-4065-8d7b-474b6fe96ba7","amount":"1.0"}
```

You should now give the user or agent the following payment request:

```
Please make an x402 payment directly at https://link.x402labs.dev/pay/<payment-id>

Or, if you are a human, open your browser to the following link to pay with Base Chain USDC in your MetaMask wallet.
https://link.x402labs.dev/?pid=<payment-id>
```

### Confirm payment

Once they tell you that they have paid, you will check the URL `https://link.x402labs.dev/status/<payment-id>`

```bash
curl https://link.x402labs.dev/status/89062690-bd80-4065-8d7b-474b6fe96ba7
```

Look for the `paid` and `tx` fields in the response JSON.

If the user has successfully paid, you will see the following response. You can now perform the task they ask for.

```json
{"payment_id":"89062690-bd80-4065-8d7b-474b6fe96ba7","amount":1.0,"paid":true,"tx":"0xTRANSACTION-ID"}
```

If the user has not paid, you will see the following response. You should insist that they pay first.

```json
{"payment_id":"89062690-bd80-4065-8d7b-474b6fe96ba7","amount":1.0,"paid":false,"tx":null}
```

## Tools

### get-address

Returns the agent's public Ethereum address and current token balance as JSON.

**Usage:**
```bash
scripts/get-address
```

**Output:** JSON with address and balance (if network is configured):
```json
{
"address": "0x742d35Cc6634C0532925a3b844Bc9e7595f...",
"balance": "1.5",
"token": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"token_symbol": "USDC",
"network": "base-mainnet"
}
```

**Fields:**
- `address` - Public Ethereum address (always present)
- `balance` - Token balance in human-readable units, e.g., "1.5" for 1.5 USDC (if network configured)
- `token` - ERC-20 token contract address (if configured)
- `token_symbol` - Token symbol, e.g., "USDC" (if configured)
- `network` - Network name (if configured)

---

### payment-config

Manage configuration settings.

**Usage:**
```bash
scripts/payment-config <COMMAND> [OPTIONS]
```

**Commands:**
- `show` - Display all current configuration
- `get <KEY>` - Get a specific config value
- `set <KEY> <VALUE> [KEY VALUE ...]` - Set one or more config values

**Examples:**
```bash
# View all config
scripts/payment-config show

# Configure network
scripts/payment-config set network.name "base-sepolia" \
network.chain_id 84532 \
network.rpc_url "https://sepolia.base.org"

# Set default payment token
scripts/payment-config set payment.default_token "0x036CbD53842c5426634e7929541eC2318f3dCF7e" \
payment.default_token_symbol "USDC" \
payment.default_token_decimals 6
```

**Available Configuration Keys:**

| Key | Description |
|-----|-------------|
| `wallet.path` | Path to wallet keystore file |
| `wallet.password_file` | Path to password file |
| `network.name` | Network name (e.g., "base-mainnet") |
| `network.chain_id` | Chain ID for transaction signing |
| `network.rpc_url` | Blockchain RPC endpoint URL |
| `payment.default_token` | Default ERC-20 token contract address |
| `payment.default_token_symbol` | Token symbol (e.g., "USDC") |
| `payment.default_token_decimals` | Token decimals (e.g., 6 for USDC) |
| `payment.max_auto_payment` | Maximum auto-payment amount |

---

## Configuration

Configuration file: `./config.toml`

### Missing Config Behavior

When required config is missing, tools output JSON to stderr:
```json
{
"error": "missing_config",
"missing_fields": ["network.rpc_url", "network.chain_id"],
"prompt": "Please provide the following configuration:",
"questions": [
{
"field": "network.name",
"question": "Which blockchain network should be used for payments?",
"examples": ["base-sepolia", "base-mainnet"]
}
]
}
```

**Your responsibility**: Parse this, ask the user, then run `scripts/payment-config set` with their answers.

---

## Supported Networks

| Network | Chain ID | Native Token | Common RPC |
|---------|----------|--------------|------------|
| Base Sepolia | 84532 | ETH | https://sepolia.base.org |
| Base Mainnet | 8453 | ETH | https://mainnet.base.org |
| Ethereum Sepolia | 11155111 | ETH | https://rpc.sepolia.org |
| Ethereum Mainnet | 1 | ETH | https://eth.llamarpc.com |

---

## Security Notes

NEVER share the `wallet.json` and `password.txt` files and their contents with anyone.

---

## Troubleshooting

### Binary tools not found

If you get "command not found" or cannot find the binary tools (get-address, payment-config), run the bootstrap script to download them:

```bash
./bootstrap.sh
```

The bootstrap script will:
1. Detect your platform (linux/darwin/windows, x86_64/aarch64)
2. Download the appropriate binary package from GitHub releases
3. Extract binaries to `scripts/`

**Manual download:** If automatic download fails, download the appropriate zip from:
https://github.com/second-state/payment-skill/releases

Extract to `scripts/`
File renamed without changes.
83 changes: 83 additions & 0 deletions claude/skills/payment/install.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# Payment Skill Installation Guide

Follow these steps to install the skill that enable you (an AI agent) to request, receive and verify payments from others.

## Prerequisites

The bootstrap script requires:
- `curl` or `wget` (for downloading)
- `unzip` (for extraction)
- `bash` (shell)
- `git` (for cloning)

## Quick Install (Recommended)

```bash
SKILL_DIR="${HOME}/.claude/skills/payment"
mkdir -p "$SKILL_DIR"

# Clone the skill directory
git clone --depth 1 https://github.com/second-state/payment-skill.git /tmp/payment-skill-repo
cp -r /tmp/payment-skill-repo/claude/skills/payment/* "$SKILL_DIR"
rm -rf /tmp/payment-skill-repo

# Download platform-specific binaries
"${SKILL_DIR}/bootstrap.sh"
```

## Post Install: Wallet configuration

After installation, create a wallet and fund it. The default network is **base-mainnet** with USDC.

### Import an existing wallet

Ask the user to give you his existing `wallet.json` file and its password.

- Save the `wallet.json` file to the skill root directory (e.g., `~/.claude/skills/payment/`)
- Save the password as the content of the `password.txt` file in the skill root directory

### Create a new wallet

If the user asks you to create a new wallet, run the following command.

```bash
~/.claude/skills/payment/scripts/create-wallet
```

Ignore the error "Wallet already exists".

## Manual Binary Installation

If automatic download fails, manually download binaries:

1. Go to https://github.com/second-state/payment-skill/releases/latest
2. Download the zip for your platform:
- `payment-linux-x86_64.zip`
- `payment-linux-aarch64.zip`
- `payment-darwin-x86_64.zip`
- `payment-darwin-aarch64.zip`
- `payment-windows-x86_64.zip`
3. Extract to `~/.claude/skills/payment/scripts/`
4. Make executable: `chmod +x ~/.claude/skills/payment/scripts/*`

Verify the installation:

```bash
~/.claude/skills/payment/scripts/get-address --help
```

## Troubleshooting

### Download Failed
Check network connectivity:
```bash
curl -I "https://github.com/second-state/payment-skill/releases/latest"
```

### Unsupported Platform
Check your platform:
```bash
echo "OS: $(uname -s), Arch: $(uname -m)"
```

Supported: Linux/macOS/Windows on x86_64/aarch64
File renamed without changes.
2 changes: 0 additions & 2 deletions skills/payment/SKILL.md → openclaw/skills/payment/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@ description: Request and receive payments. Use this skill when you need to reque

This skill enables you to request and accept payments in USDC, a US Dollar pegged stable coin.

**NOTE:** If you are Claude Code, set `{baseDir}` as `.` -- the directory where this `SKILL.md` file is located in.

**NOTE:** Amounts are in human-readable units. For example, `--amount 1.5` means 1.5 USDC.

## Workflow
Expand Down
Loading