Agent skill

Tokenized Agents

by nirholas in nirholas/three.ws

A skill your agent uses when the user wants to charge users for actions.

Apache-2.0Auto-check: notesBackend & APIs

Install Tokenized Agents

skills CLI
$ npx skills add nirholas/three.ws --skill tokenized-agents -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install nirholas/three.ws tokenized-agents --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/nirholas/three.ws.git skills-src && mkdir -p .claude/skills && cp -r skills-src/pump-fun-skills/tokenized-agents .claude/skills/tokenized-agents && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
tokenized-agents
GitHub stars
226
Token cost
~5.6k tokens
SKILL.md length
1,586 words
Files
9 (incl. references)
Skills in repo
165
Repo updated
First seen
Licence
Apache-2.0

At a glance

A skill your agent uses when the user wants to charge users for actions.

  • Works in 3 steps: Generate Invoice Parameters (Server) → Build Transaction and Serialize as… → Deserialize, Sign, and Send the…
  • The user wants to charge users for actions
  • SKILL.md covers Before Starting Work, Safety Rules, Supported Currencies and Environment Variables, plus 9 more sections
  • Runs JavaScript scripts from its folder; calls npm; reaches rpc.solanatracker.io and api.mainnet-beta.solana.com

What it does

Tokenized Agents is an agent skill from nirholas/three.ws. Use when the user wants to charge users for actions. Use @three-ws/agent-payments, to build Solana payment transactions, verify on-chain invoice payments, or integrate Solana wallet adapters for agent payment flows.

Its SKILL.md is about 5.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 9 other files, including reference files (for example `README.md`, `SCENARIOS.md` and `WALLET_INTEGRATION.md`).

It sits in Backend & APIs, covering Forms and invoices and Smart contracts. It works with Solana and Circle USDC. The repository describes itself as: Open-source platform for 3D AI agents. Turn text or a photo into a rigged, animated GLB avatar, give it an LLM brain, memory and a wallet, and embed it anywhere with one web… The licence is Apache-2.0.

When your agent uses it

  • The user wants to charge users for actions
  • Tasks that involve Forms and invoices
  • Tasks that involve Smart contracts

Example prompts

  • “/tokenized-agents”

Requirements

  • Node.js

Workflow steps

3 steps, taken from the step headings in SKILL.md.

  1. Generate Invoice Parameters (Server)
  2. Build Transaction and Serialize as Base64 (Server)
  3. Deserialize, Sign, and Send the Transaction (Client)

What it can do on your machine

Read from SKILL.md and the folder at commit 238ef60. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships script files (JavaScript), which the agent can run.

    Shell commands in SKILL.md call:

    • npm

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • rpc.solanatracker.io
    • api.mainnet-beta.solana.com
    • rpc.ankr.com

    Also links to:

    • raw.githubusercontent.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Tokenized Agents loads about 5.6k tokens when it runs, and up to ~6.7k if it reads all its reference files. Until then it costs about 58 tokens; SKILL.md has 1,586 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~58
When it runs · the whole SKILL.md, loaded when a task matches
~5.6k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~6.7k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteMentions a .env fileSKILL.md:45
    Create a `.env` (or `.env.local` for Next.js) file with the following:

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from nirholas/three.ws at commit 238ef60, republished under its Apache-2.0 licence (© nirholas). 1,586 words, ~5,553 tokens.

Download SKILL.mdSave it as .claude/skills/tokenized-agents/SKILL.md (or your agent's skills folder). This skill also uses 8 other files; get the full folder from GitHub.
name
tokenized-agents
description
Use when the user wants to charge users for actions. Use @three-ws/agent-payments, to build Solana payment transactions, verify on-chain invoice payments, or integrate Solana wallet adapters for agent payment flows.
metadata.author
pump-fun
metadata.version
1.1

Before Starting Work

MANDATORY — Do NOT write or modify any code until every item below is answered by the user:

  • Agent token mint address (from pump.fun)
  • Payment currency decided (USDC or SOL)
  • Price/amount confirmed (in smallest unit)
  • RPC URL provided or a fallback agreed upon
  • Framework confirmed (Next.js, Express, other)

You MUST ask the user for ALL unchecked items in your very first response. Do not assume defaults. Do not proceed until the user has explicitly answered each one.

Safety Rules

  • NEVER log, print, or return private keys or secret key material.
  • NEVER sign transactions on behalf of a user — you build the instruction, the user signs.
  • Always validate that amount > 0 before creating an invoice.
  • Always ensure endTime > startTime and both are valid Unix timestamps.
  • Use the correct decimal precision for the currency (6 decimals for USDC, 9 for SOL).
  • Always verify payments on the server using validateInvoicePayment before delivering any service. Never trust the client alone — clients can be spoofed.
  • Always verify your code against this skill before finalizing. Before delivering generated code, re-read the relevant sections of this document and confirm:
    • Parameter types match the documented signatures — buildAcceptPaymentInstructions accepts number for numeric fields, validateInvoicePayment accepts number, and getInvoiceIdPDA accepts number.
    • Parameter ordering and names match exactly.
    • Default values (e.g. computeUnitLimit defaults to 100_000) are not contradicted.
    • Import paths use @three-ws/agent-payments, not internal module paths.

Supported Currencies

CurrencyDecimalsSmallest unit example
USDC61000000 = 1 USDC
Wrapped SOL91000000000 = 1 SOL

Environment Variables

Create a .env (or .env.local for Next.js) file with the following:

env
# Solana RPC — server-side (used to build transactions and verify payments)
SOLANA_RPC_URL=https://rpc.solanatracker.io/public

# Solana RPC — client-side (used by wallet adapter in the browser)
NEXT_PUBLIC_SOLANA_RPC_URL=https://rpc.solanatracker.io/public

# The token mint address of your tokenized agent on pump.fun
AGENT_TOKEN_MINT_ADDRESS=<your-agent-mint-address>

# Payment currency mint
# USDC: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
# SOL (wrapped): So11111111111111111111111111111111111111112
CURRENCY_MINT=EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v

RPC for mainnet-beta: The default Solana public RPC (https://api.mainnet-beta.solana.com) does not support sending transactions. You MUST ask the user which RPC endpoint to use. Present these free mainnet-beta options if the user does not have their own:

  • Solana Tracker — https://rpc.solanatracker.io/public
  • Ankr — https://rpc.ankr.com/solana

Do NOT silently pick one — wait for the user to confirm before proceeding.

Read these values from process.env at runtime. Never hard-code mint addresses or RPC URLs.

Install

bash
npm install @three-ws/agent-payments @solana/web3.js@^1.98.0
Dependency Compatibility — IMPORTANT

@three-ws/agent-payments depends on @solana/web3.js and @solana/spl-token. When the app also installs these packages directly, mismatched versions can cause runtime errors.

Rules:

  1. Before installing @solana/web3.js, @solana/spl-token, or any @solana/wallet-adapter-* package, first check what versions @three-ws/agent-payments declares in its own package.json (inspect it via npm info @three-ws/agent-payments dependencies). Install the same ranges — or ranges that resolve to the same major.minor — so npm/pnpm hoists a single copy instead of two.
  2. Never blindly install "latest" for these shared packages. Always prefer the version that is most compatible with the latest @three-ws/agent-payments.
  3. If the project already has these packages at different versions, align them to match the SDK and re-install.

SDK Setup

PumpAgent is the main class. It can build payment instructions and verify invoices.

typescript
import { PumpAgent } from "@three-ws/agent-payments";
import { PublicKey } from "@solana/web3.js";

const agentMint = new PublicKey(process.env.AGENT_TOKEN_MINT_ADDRESS!);
Constructor
typescript
new PumpAgent(mint: PublicKey, environment?: "mainnet" | "devnet", connection?: Connection)
ParameterTypeDefaultDescription
mintPublicKey—The tokenized agent's token mint address
environment"mainnet" | "devnet""mainnet"Network environment
connectionConnection (optional)undefinedSolana RPC connection (enables RPC fallback for verification)

Without connection — enough for building instructions and HTTP-based payment verification:

typescript
const agent = new PumpAgent(agentMint);

With connection — also enables RPC-based verification fallback and balance queries:

typescript
import { Connection } from "@solana/web3.js";

const connection = new Connection(process.env.SOLANA_RPC_URL!);
const agent = new PumpAgent(agentMint, "mainnet", connection);

Wallet Integration (Frontend)

Install @solana/wallet-adapter-react, @solana/wallet-adapter-react-ui, and @solana/wallet-adapter-wallets. Use useWallet() for publicKey and signTransaction, and useConnection() for the active RPC connection. MUST See https://raw.githubusercontent.com/pump-fun/pump-fun-skills/refs/heads/main/tokenized-agents/references/WALLET_INTEGRATION.md for the full WalletProvider setup, layout wrapping, and hook usage.

Building Payment Instructions

Use buildAcceptPaymentInstructions to get all the instructions needed for a payment. This is the recommended method — it automatically derives the user's token account and handles native SOL wrapping/unwrapping.

Parameters (BuildAcceptPaymentParams)
ParameterTypeDescription
userPublicKeyThe payer's wallet address
currencyMintPublicKeyMint address of the payment currency (USDC, wSOL)
amountbigint | number | stringPrice in the currency's smallest unit
memobigint | number | stringUnique invoice identifier (random number)
startTimebigint | number | stringUnix timestamp — when the invoice becomes valid
endTimebigint | number | stringUnix timestamp — when the invoice expires
tokenProgramPublicKey (optional)Token program for the currency (defaults to SPL Token)
computeUnitLimitnumber (optional)Compute unit budget (default 100_000). Increase if transactions fail with compute exceeded.
computeUnitPricenumber (optional)Priority fee in microlamports per CU. If provided, a SetComputeUnitPrice instruction is prepended.
Example
typescript
const ixs = await agent.buildAcceptPaymentInstructions({
  user: userPublicKey,
  currencyMint,
  amount: "1000000", // 1 USDC
  memo: "123456789", // unique invoice identifier
  startTime: "1700000000", // valid from
  endTime: "1700086400", // expires at
});
What It Returns

The returned TransactionInstruction[] always starts with compute budget instructions, followed by the payment instructions:

  • SetComputeUnitLimit is always prepended (default 100_000 CU). Override via computeUnitLimit if your transactions fail with "compute exceeded".
  • SetComputeUnitPrice is prepended only when computeUnitPrice is provided. Use this to set a priority fee for faster landing during congestion.

After the compute budget prefix:

  • For SPL tokens (USDC): The accept-payment instruction.
  • For native SOL: Instructions that handle wrapping/unwrapping automatically:
    1. Create the user's wrapped SOL token account (idempotent)
    2. Transfer SOL lamports into that token account
    3. Sync the native balance
    4. The accept-payment instruction
    5. Close the wrapped SOL account (returns rent back to user)

You do not need to handle SOL wrapping or compute budget yourself — buildAcceptPaymentInstructions does it for you.

Important
  • The amount, memo, startTime, and endTime must exactly match when verifying later.
  • Each unique combination of (mint, currencyMint, amount, memo, startTime, endTime) can only be paid once — the on-chain Invoice ID PDA prevents duplicate payments.
  • Generate a unique memo for each invoice (e.g. Math.floor(Math.random() * 900000000000) + 100000).

Deriving the Invoice ID

The Invoice ID is a PDA (PublicKey) that uniquely identifies an invoice on-chain. It is derived deterministically from the six invoice parameters. Both buildAcceptPaymentInstructions and validateInvoicePayment derive it internally, but you can also compute it yourself.

Import
typescript
import { getInvoiceIdPDA } from "@three-ws/agent-payments";
import { PublicKey } from "@solana/web3.js";
Usage

getInvoiceIdPDA returns [PublicKey, number]. The first element is the Invoice ID; the second is the PDA bump seed.

typescript
const tokenMint = new PublicKey(process.env.AGENT_TOKEN_MINT_ADDRESS!);
const currencyMint = new PublicKey(process.env.CURRENCY_MINT!);

const amount = 1000000;
const memo = 123456789;
const startTime = 1700000000;
const endTime = 1700086400;

const [invoiceId] = getInvoiceIdPDA(
  tokenMint,
  currencyMint,
  amount,
  memo,
  startTime,
  endTime,
);

console.log("Invoice ID:", invoiceId.toBase58());

All numeric parameters (amount, memo, startTime, endTime) are plain number values. BN conversion is handled internally.

Show full SKILL.md (660 more words)Show less
PDA Seeds

The Invoice ID is derived with program AgenTMiC2hvxGebTsgmsD4HHBa8WEcqGFf87iwRRxLo7 using these seeds:

Seed indexValue
0"invoice-id" (UTF-8 bytes)
1tokenMint (32 bytes)
2currencyMint (32 bytes)
3amount (8 bytes, little-endian)
4memo (8 bytes, little-endian)
5startTime (8 bytes, little-endian)
6endTime (8 bytes, little-endian)

Because the PDA is deterministic, the same six parameters always produce the same Invoice ID. The on-chain program uses this to reject duplicate payments — once an Invoice ID PDA is created, the same combination cannot be paid again.

When to Use
  • Pre-check for duplicates — before building a payment transaction, check if the Invoice ID account already exists on-chain to avoid submitting a transaction that will fail:
typescript
const [invoiceId] = getInvoiceIdPDA(
  tokenMint,
  currencyMint,
  amount,
  memo,
  startTime,
  endTime,
);
const accountInfo = await connection.getAccountInfo(invoiceId);
if (accountInfo !== null) {
  // This invoice was already paid — generate a new memo
}
  • Debugging — if a payment transaction fails or verification returns false, derive the Invoice ID and inspect it on a Solana explorer to see whether the account exists.

Full Transaction Flow — Server to Client

This is the complete flow for building a transaction on the server, signing it on the client, and sending it on-chain.

Step 1: Generate Invoice Parameters (Server)
typescript
function generateInvoiceParams() {
  const memo = Math.floor(Math.random() * 900000000000) + 100000;
  const now = Math.floor(Date.now() / 1000);
  const startTime = now;
  const endTime = now + 86400; // valid for 24 hours
  const amount = Number(process.env.PRICE_AMOUNT) || 1000000; // e.g. 1 USDC

  return { amount, memo, startTime, endTime };
}
Step 2: Build Transaction and Serialize as Base64 (Server)

Build the payment instructions, assemble them into a full Transaction with a recent blockhash and fee payer, then serialize the unsigned transaction as a base64 string for the client.

typescript
import { Connection, PublicKey, Transaction } from "@solana/web3.js";
import { PumpAgent } from "@three-ws/agent-payments";

async function buildPaymentTransaction(params: {
  userWallet: string;
  amount: string;
  memo: string;
  startTime: string;
  endTime: string;
}) {
  const connection = new Connection(process.env.SOLANA_RPC_URL!);
  const agentMint = new PublicKey(process.env.AGENT_TOKEN_MINT_ADDRESS!);
  const currencyMint = new PublicKey(process.env.CURRENCY_MINT!);

  const agent = new PumpAgent(agentMint, "mainnet", connection);
  const userPublicKey = new PublicKey(params.userWallet);

  const instructions = await agent.buildAcceptPaymentInstructions({
    user: userPublicKey,
    currencyMint,
    amount: params.amount,
    memo: params.memo,
    startTime: params.startTime,
    endTime: params.endTime,
  });

  const { blockhash } = await connection.getLatestBlockhash("confirmed");

  const tx = new Transaction();
  tx.recentBlockhash = blockhash;
  tx.feePayer = userPublicKey;
  tx.add(...instructions);

  const serializedTx = tx
    .serialize({ requireAllSignatures: false })
    .toString("base64");

  return { transaction: serializedTx };
}

Return the base64 transaction string (and the invoice params like memo, startTime, endTime) to the client as JSON.

Step 3: Deserialize, Sign, and Send the Transaction (Client)

Deserialize the base64 transaction from the server, sign it with signTransaction from the wallet adapter, then send and confirm it. Call useWallet() and useConnection() only at the top level of your component; pass signTransaction and connection into the async helper so the async logic does not call hooks.

Async helper (e.g. in a utils file or alongside your component):

typescript
import { Connection, Transaction } from "@solana/web3.js";

async function signAndSendPayment(
  txBase64: string,
  signTransaction: (tx: Transaction) => Promise<Transaction>,
  connection: Connection,
): Promise<string> {
  if (!signTransaction) {
    throw new Error("Wallet does not support signing");
  }

  const tx = Transaction.from(Buffer.from(txBase64, "base64"));
  const signedTx = await signTransaction(tx);

  const signature = await connection.sendRawTransaction(signedTx.serialize(), {
    skipPreflight: false,
    preflightCommitment: "confirmed",
  });

  const latestBlockhash = await connection.getLatestBlockhash("confirmed");
  await connection.confirmTransaction(
    { signature, ...latestBlockhash },
    "confirmed",
  );

  return signature;
}

Component usage — call the hooks at the top level, then pass them into the helper (e.g. from a payment button handler):

typescript
import { useWallet, useConnection } from "@solana/wallet-adapter-react";

function PaymentButton({ txBase64 }: { txBase64: string }) {
  const { signTransaction } = useWallet();
  const { connection } = useConnection();

  const handlePay = async () => {
    if (!signTransaction) return;
    await signAndSendPayment(txBase64, signTransaction, connection);
  };

  return <button onClick={handlePay}>Pay</button>;
}

The wallet prompts the user to approve. After signing, the serialized transaction is submitted via sendRawTransaction and you wait for on-chain confirmation.

Verify Payment

Use validateInvoicePayment to confirm that a specific invoice was paid on-chain.

How It Works
  1. Derives the Invoice ID PDA from the six parameters (mint, currencyMint, amount, memo, startTime, endTime) using getInvoiceIdPDA internally. The resulting PublicKey uniquely identifies the invoice on-chain.

  2. Queries the Pump HTTP API — sends a GET request with invoice-id (base58) and mint as query parameters. If the endpoint returns a response, it validates every field individually:

    • data.user === user (base58)
    • data.tokenized_agent_mint === mint (base58)
    • data.currency_mint === currencyMint (base58)
    • data.amount === amount (BN equality)
    • data.memo === memo (BN equality)
    • data.start_time === startTime (BN equality)
    • data.end_time === endTime (BN equality)

    All seven checks must pass for the method to return true.

  3. RPC fallback — if the HTTP API is unavailable (network error or non-200 status) and a Connection was provided to the PumpAgent constructor, it falls back to scanning on-chain transaction logs. It fetches all signatures for the Invoice ID address, parses each transaction's logs for the agentAcceptPaymentEvent event, and performs the same field-by-field validation. Without a Connection, there is no fallback and the method returns false.

  4. Returns true if a matching payment event is found by either path, false otherwise.

Parameters
ParameterTypeDescription
userPublicKeyThe wallet that paid
currencyMintPublicKeyCurrency used for payment
amountnumberAmount paid (smallest unit)
memonumberThe invoice memo
startTimenumberInvoice start time (Unix timestamp)
endTimenumberInvoice end time (Unix timestamp)

Type note: validateInvoicePayment expects amount, memo, startTime, and endTime as number, not strings. If you stored them as strings, parse them first: Number(memo).

Simple Backend Verification
typescript
import { PumpAgent } from "@three-ws/agent-payments";
import { PublicKey } from "@solana/web3.js";

const agentMint = new PublicKey(process.env.AGENT_TOKEN_MINT_ADDRESS!);
const agent = new PumpAgent(agentMint);

const paid = await agent.validateInvoicePayment({
  user: new PublicKey(userWalletAddress),
  currencyMint: new PublicKey(process.env.CURRENCY_MINT!),
  amount: 1000000,
  memo: 123456789,
  startTime: 1700000000,
  endTime: 1700086400,
});

if (paid) {
  // Payment confirmed — deliver the service
} else {
  // Payment not found
}

No Connection is needed for basic verification — it uses the HTTP API by default.

Verification with Retries

Transactions may take a few seconds to confirm. Use a retry loop for reliability:

typescript
async function verifyPayment(params: {
  user: string;
  currencyMint: string;
  amount: number;
  memo: number;
  startTime: number;
  endTime: number;
}): Promise<boolean> {
  const agentMint = new PublicKey(process.env.AGENT_TOKEN_MINT_ADDRESS!);
  const agent = new PumpAgent(agentMint);

  const invoiceParams = {
    user: new PublicKey(params.user),
    currencyMint: new PublicKey(params.currencyMint),
    amount: params.amount,
    memo: params.memo,
    startTime: params.startTime,
    endTime: params.endTime,
  };

  for (let attempt = 0; attempt < 10; attempt++) {
    const verified = await agent.validateInvoicePayment(invoiceParams);
    if (verified) return true;
    await new Promise((r) => setTimeout(r, 2000));
  }

  return false;
}

End-to-End Flow

1. Agent decides on price → generates unique memo(number) → sets time window
2. Server: buildAcceptPaymentInstructions({...}) → returns TransactionInstruction[]
3. Server: builds full Transaction (blockhash + feePayer + instructions) → serializes as base64
4. Client: deserializes base64 → Transaction.from(Buffer.from(txBase64, "base64"))
5. Client: signTransaction(tx) — wallet prompts user to approve
6. Client: connection.sendRawTransaction(signedTx.serialize()) → connection.confirmTransaction(signature)
7. Server: with the exactly same parameters used for buildAcceptPaymentInstructions server  validateInvoicePayment({...}) → returns true/false (ALWAYS verify server-side)
8. Agent delivers the service (or asks user to retry)

Scenario Tests & Troubleshooting

See https://raw.githubusercontent.com/pump-fun/pump-fun-skills/refs/heads/main/tokenized-agents/references/SCENARIOS.md for detailed test scenarios (happy path, duplicate rejection, expired invoices, etc.) and a troubleshooting table for common errors and for wallet Integration must follow https://raw.githubusercontent.com/pump-fun/pump-fun-skills/refs/heads/main/tokenized-agents/references/WALLET_INTEGRATION.md.

© nirholas, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 8 other files (references) in pump-fun-skills/tokenized-agents of nirholas/three.ws.

  • SKILL.md
  • README.md
  • SCENARIOS.md
  • WALLET_INTEGRATION.md
  • handlers.js
  • manifest.json
  • references/SCENARIOS.md
  • references/WALLET_INTEGRATION.md
  • tools.json

Open the folder on GitHubat commit 238ef60

Compare with similar skills

Tokenized Agents next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Tokenized Agents compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Tokenized Agents this skillnirholas/three.ws226—~5.6kAutomated safety check: NotesApache-2.0
Tokenized AgentsLeoYeAI/openclaw-master-skills2.2k—~4.6kAutomated safety check: NotesMIT
Alchemy Agentic Gatewaymoonpay/skills113—~2.1kAutomated safety check: NotesMIT
Swap Tokenscirclefin/skills155—~4.6kAutomated safety check: NotesApache-2.0
Unify Balancecirclefin/skills155—~4.7kAutomated safety check: NotesApache-2.0
Use Usdccirclefin/skills155—~2.4kAutomated safety check: NotesApache-2.0

Similar skills

  • Tokenized Agents

    LeoYeAI/openclaw-master-skills

    Build payment flows for Pump Tokenized Agents using @pump-fun/agent-payments-sdk.

    2.2k GitHub stars~4.6k tokensUpdated 2 mo ago
    Backend & APIsAuto-check: notes
  • A skill your agent uses when accessing Alchemy APIs for RPC calls, token balances, NFT metadata, asset transfers, transaction simulation, or Alchemy-specific features.

    113 GitHub stars~2.1k tokensUpdated 27 days ago
    Backend & APIsAuto-check: notes
  • Swap Tokens

    circlefin/skills

    Build browser or server token swaps with Circle App Kit or standalone Swap Kit.

    155 GitHub stars~4.6k tokensUpdated 21 days ago
    Backend & APIsAuto-check: notes
  • Unify Balance

    circlefin/skills

    Build browser or server unified cross-chain USDC balances with Circle App Kit or standalone Unified Balance Kit.

    155 GitHub stars~4.7k tokensUpdated 21 days ago
    Backend & APIsAuto-check: notes
  • Use Usdc

    circlefin/skills

    USDC is Circle's stablecoin deployed across multiple blockchain ecosystems including EVM chains (Ethereum, Base, Arbitrum, Polygon, Arc) and Solana.

    155 GitHub stars~2.4k tokensUpdated 21 days ago
    Backend & APIsAuto-check: notes
  • Build non-custodial wallets where end users retain control of their private keys via Circle's user-controlled wallets SDK.

    155 GitHub stars~3.6k tokensUpdated 21 days ago
    Backend & APIsAuto-check: notes

More from nirholas/three.ws

All 165 skills in this repo
  • Add Shader Cursor Trail

    nirholas/three.ws

    Add the Shaders WebGPU mouse effect used for the Tidal Commons hero: a white twinkling halftone cursor trail driven by ChromaFlow, masked through a DotGrid, finished with chromatic ripples and film…

    226 GitHub starsUsed in 1 repo~760 tokens
    Auto-check passed
  • Publish Project To GitHub

    nirholas/three.ws

    Package a finished local project into an intentional GitHub repository, create a strong README and visual preview, push it safely, configure a public GitHub Pages URL when the project is compatible…

    226 GitHub starsUsed in 1 repo~2.2k tokens
    Auto-check: notes
  • Audit a website or digital experience against its supplied source references for originality and plagiarism risk.

    226 GitHub starsUsed in 1 repo~1.8k tokens
    Auto-check passed
  • Turn a completed daily UI inspiration capture into exactly five original landing-page builds, one per separate Codex task, using Sites.

    226 GitHub starsUsed in 1 repo~1.9k tokens
    Auto-check passed
  • Write Like Meng On X

    nirholas/three.ws

    Write, rewrite, review, or continuously refine X/Twitter posts in Meng To's current voice using his deduplicated authored-post corpus, personal and product context, shared resources, and Content…

    226 GitHub starsUsed in 1 repo~2k tokens
    Auto-check passed
  • Browser Video Recording

    nirholas/three.ws

    Create polished 60 fps 4:3 4K browser screen-recording style videos from Codex in-app browser captures, with browser-only crop, natural macOS cursor styling, deliberate click choreography…

    226 GitHub starsUsed in 1 repo~1.5k tokens
    Auto-check passed

Questions about Tokenized Agents

What does Tokenized Agents do?

A skill your agent uses when the user wants to charge users for actions. ws. Use when the user wants to charge users for actions.

When should I use Tokenized Agents?

Tokenized Agents fits situations like: the user wants to charge users for actions; tasks that involve Forms and invoices; tasks that involve Smart contracts.

How do I install Tokenized Agents in Claude Code?

Run `npx skills add nirholas/three.ws --skill tokenized-agents -a claude-code`. Or copy the skill folder (pump-fun-skills/tokenized-agents in nirholas/three.ws) into .claude/skills/tokenized-agents in your project. Claude Code loads it when a task matches its description.

How do I install Tokenized Agents in Codex?

Run `npx skills add nirholas/three.ws --skill tokenized-agents -a codex`. Or copy the skill folder (pump-fun-skills/tokenized-agents in nirholas/three.ws) into .agents/skills/tokenized-agents in your project. Codex loads it when a task matches its description.

Can I use Tokenized Agents in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add nirholas/three.ws --skill tokenized-agents -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/tokenized-agents, .gemini/skills/tokenized-agents, .github/skills/tokenized-agents and .opencode/skills/tokenized-agents in your project.

What does Tokenized Agents need to run?

Going by SKILL.md and its folder, Tokenized Agents needs JavaScript for the scripts in its folder and the command-line tools its instructions call (npm). Our summary lists: Node.js.

Does Tokenized Agents access the network?

SKILL.md names 4 domains. In commands or code: rpc.solanatracker.io, api.mainnet-beta.solana.com and rpc.ankr.com; the agent is likely to contact these when it follows the instructions. As links in the text: raw.githubusercontent.com. This is read from the text; nothing was executed.

Is Tokenized Agents safe to install?

Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Tokenized Agents use?

Tokenized Agents is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Tokenized Agents use?

About 5.6k tokens (SKILL.md is roughly 22k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.1k tokens, read only when the agent opens those files.

What are the alternatives to Tokenized Agents?

Skills that share tags, products or a category with Tokenized Agents: Tokenized Agents (LeoYeAI/openclaw-master-skills, 2.2k stars), Alchemy Agentic Gateway (moonpay/skills, 113 stars), Swap Tokens (circlefin/skills, 155 stars) and Unify Balance (circlefin/skills, 155 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Tokenized Agents?

nirholas (a GitHub user) maintains it in nirholas/three.ws, which has 226 GitHub stars. The repository holds 165 skills in this directory. The repository was last updated on October 7, 2026.

Source: nirholas/three.ws on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.