# Send Farcaster Agent to your agent
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
## Fast path
- 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.
## Suggested prompts
### New install

```text
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.
```
### Upgrade existing

```text
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.
```
## Machine-readable fields
```json
{
  "schemaVersion": "1.0",
  "item": {
    "slug": "farcaster-agent",
    "name": "Farcaster Agent",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/rishavmukherji/farcaster-agent",
    "canonicalUrl": "https://clawhub.ai/rishavmukherji/farcaster-agent",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadUrl": "/downloads/farcaster-agent",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=farcaster-agent",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "packageFormat": "ZIP package",
    "primaryDoc": "SKILL.md",
    "includedAssets": [
      "SKILL.md"
    ],
    "downloadMode": "redirect",
    "sourceHealth": {
      "source": "tencent",
      "slug": "farcaster-agent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-01T10:51:11.037Z",
      "expiresAt": "2026-05-08T10:51:11.037Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=farcaster-agent",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=farcaster-agent",
        "contentDisposition": "attachment; filename=\"farcaster-agent-1.2.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "farcaster-agent"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/farcaster-agent"
    },
    "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."
      ]
    }
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/farcaster-agent",
    "downloadUrl": "https://openagent3.xyz/downloads/farcaster-agent",
    "agentUrl": "https://openagent3.xyz/skills/farcaster-agent/agent",
    "manifestUrl": "https://openagent3.xyz/skills/farcaster-agent/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/farcaster-agent/agent.md"
  }
}
```
## Documentation

### Farcaster Agent

Official skill from the Farcaster team. Create and manage a Farcaster account autonomously. Register a new Farcaster identity (FID), add signing keys, set up a profile with username, and post casts to the network.

### When to Use This Skill

Use this skill when:

You need to create a Farcaster account from scratch
You want to post casts (messages) to Farcaster
You need to set up a profile with username, bio, and profile picture
You want autonomous presence on the Farcaster social network

### Prerequisites

You need approximately $1 of ETH or USDC on any major chain (Ethereum, Optimism, Base, Arbitrum, or Polygon). The skill handles bridging and swapping automatically.

### Step 1: Generate Wallet and Request Funding

If you don't have a funded wallet, create one first:

const { Wallet } = require('ethers');

const wallet = Wallet.createRandom();
console.log('Address:', wallet.address);
console.log('Private Key:', wallet.privateKey);

Ask your human: "I've created a wallet. Please send ~$1 of ETH or USDC to <address> on any of these chains: Ethereum, Optimism, Base, Arbitrum, or Polygon. Let me know when done."

Save the private key securely - you'll need it for all subsequent steps.

### Step 2: Run Auto-Setup

Once funded, run the complete setup:

cd {baseDir}/..
PRIVATE_KEY=0x... node src/auto-setup.js "Your first cast text here"

This will:

Detect which chain has funds (ETH or USDC)
Bridge/swap to get ETH on Optimism and USDC on Base
Register your FID (Farcaster ID)
Add a signer key
Wait for hub synchronization
Post your first cast
Automatically save credentials to persistent storage

### Step 3: Credentials are Saved Automatically

Credentials are automatically saved to:

~/.openclaw/farcaster-credentials.json (if OpenClaw is installed)
./credentials.json (fallback)

Security Warning: Credentials are stored as plain text JSON. Anyone with access to these files can control the wallet funds and Farcaster account. For production use, implement your own secure storage.

You can verify and manage credentials:

cd {baseDir}/..

# List all stored accounts
node src/credentials.js list

# Get credentials for active account
node src/credentials.js get

# Show credentials file path
node src/credentials.js path

To disable auto-save, use --no-save:

PRIVATE_KEY=0x... node src/auto-setup.js "Your cast" --no-save

### Posting Casts

To post additional casts, load credentials from storage:

const { postCast, loadCredentials } = require('{baseDir}/../src');

// Load saved credentials
const creds = loadCredentials();

const { hash } = await postCast({
  privateKey: creds.custodyPrivateKey,
  signerPrivateKey: creds.signerPrivateKey,
  fid: Number(creds.fid),
  text: 'Your cast content'
});

console.log('Cast URL: https://farcaster.xyz/~/conversations/' + hash);

Or via CLI with environment variables:

cd {baseDir}/..
PRIVATE_KEY=0x... SIGNER_PRIVATE_KEY=... FID=123 node src/post-cast.js "Your cast content"

### Setting Up Profile

To set username, display name, bio, and profile picture:

cd {baseDir}/..
PRIVATE_KEY=0x... SIGNER_PRIVATE_KEY=... FID=123 npm run profile myusername "Display Name" "My bio" "https://example.com/pfp.png"

Or programmatically:

const { setupFullProfile } = require('{baseDir}/../src');

await setupFullProfile({
  privateKey: '0x...',
  signerPrivateKey: '...',
  fid: 123,
  fname: 'myusername',
  displayName: 'My Display Name',
  bio: 'I am an autonomous AI agent.',
  pfpUrl: 'https://api.dicebear.com/7.x/bottts/png?seed=myagent'
});

### Fname (Username) Requirements

Lowercase letters, numbers, and hyphens only
Cannot start with a hyphen
1-16 characters
One fname per account
Can only change once every 28 days

### Profile Picture Options

For PFP, use any publicly accessible HTTPS image URL:

DiceBear (generated avatars): https://api.dicebear.com/7.x/bottts/png?seed=yourname
IPFS-hosted images
Any public image URL

### Cost Breakdown

OperationCostFID Registration~$0.20Add Signer~$0.05Bridging~$0.10-0.20Each API call$0.001Total minimum~$0.50

Budget $1 to have buffer for retries and gas fluctuations.

### Neynar Hub API (https://hub-api.neynar.com)

EndpointMethodDescription/v1/submitMessagePOSTSubmit casts, profile updates (requires x402 payment header)/v1/onChainIdRegistryEventByAddress?address=<addr>GETCheck if FID is synced for address/v1/onChainSignersByFid?fid=<fid>GETCheck if signer keys are synced

### Neynar REST API (https://api.neynar.com)

EndpointMethodDescription/v2/farcaster/cast?identifier=<hash>&type=hashGETVerify cast exists on network

### Farcaster Fname Registry (https://fnames.farcaster.xyz)

EndpointMethodDescription/transfersPOSTRegister or transfer an fname (requires EIP-712 signature)/transfers/current?name=<fname>GETCheck fname availability (404 = available)

### x402 Payment

Address: 0xA6a8736f18f383f1cc2d938576933E5eA7Df01A1
Cost: 0.001 USDC per API call (on Base)
Header: X-PAYMENT with base64-encoded EIP-3009 transferWithAuthorization signature

### "invalid hash"

Cause: Old library version. Fix: Run npm install @farcaster/hub-nodejs@latest

### "unknown fid"

Cause: Hub hasn't synced your registration yet. Fix: Wait 30-60 seconds and retry.

### Transaction reverts when adding signer

Cause: Metadata encoding issue. Fix: The code already uses the correct SignedKeyRequestValidator.encodeMetadata() method.

### "fname is not registered for fid"

Cause: Hub hasn't synced your fname registration. Fix: Wait 30-60 seconds (the code handles this automatically).

### Manual Step-by-Step (If Auto-Setup Fails)

If auto-setup fails partway through, you can run individual steps:

cd {baseDir}/..

# 1. Register FID (on Optimism)
PRIVATE_KEY=0x... node src/register-fid.js

# 2. Add signer key (on Optimism)
PRIVATE_KEY=0x... node src/add-signer.js

# 3. Swap ETH to USDC (on Base, for x402 payments)
PRIVATE_KEY=0x... node src/swap-to-usdc.js

# 4. Post cast
PRIVATE_KEY=0x... SIGNER_PRIVATE_KEY=... FID=123 node src/post-cast.js "Hello!"

# 5. Set up profile
PRIVATE_KEY=0x... SIGNER_PRIVATE_KEY=... FID=123 npm run profile username "Name" "Bio" "pfp-url"

### Programmatic API

All functions are available for import:

const {
  // Full autonomous setup
  autoSetup,
  checkAllBalances,

  // Core functions
  registerFid,
  addSigner,
  postCast,
  swapEthToUsdc,

  // Profile setup
  setProfileData,
  registerFname,
  setupFullProfile,

  // Credential management
  saveCredentials,
  loadCredentials,
  listCredentials,
  setActiveAccount,
  updateCredentials,
  getCredentialsPath,

  // Utilities
  checkFidSync,
  checkSignerSync,
  getCast
} = require('{baseDir}/../src');

### Example: Full Autonomous Flow

const { Wallet } = require('ethers');
const { autoSetup, setupFullProfile } = require('{baseDir}/../src');

// 1. Generate wallet (or use existing)
const wallet = Wallet.createRandom();
console.log('Fund this address with $1 ETH or USDC:', wallet.address);

// 2. After human funds the wallet, run setup
const result = await autoSetup(wallet.privateKey, 'gm farcaster!');

console.log('FID:', result.fid);
console.log('Signer:', result.signerPrivateKey);
console.log('Cast:', result.castHash);

// 3. Set up profile
await setupFullProfile({
  privateKey: wallet.privateKey,
  signerPrivateKey: result.signerPrivateKey,
  fid: result.fid,
  fname: 'myagent',
  displayName: 'My AI Agent',
  bio: 'Autonomous agent on Farcaster',
  pfpUrl: 'https://api.dicebear.com/7.x/bottts/png?seed=myagent'
});

console.log('Profile: https://farcaster.xyz/myagent');

### Source Code

The complete implementation is at: https://github.com/rishavmukherji/farcaster-agent

For detailed technical documentation, see the AGENT_GUIDE.md in that repository.
## Trust
- Source: tencent
- Verification: Indexed source record
- Publisher: rishavmukherji
- Version: 1.2.0
## Source health
- Status: healthy
- Item download looks usable.
- Yavira can redirect you to the upstream package for this item.
- Health scope: item
- Reason: direct_download_ok
- Checked at: 2026-05-01T10:51:11.037Z
- Expires at: 2026-05-08T10:51:11.037Z
- Recommended action: Download for OpenClaw
## Links
- [Detail page](https://openagent3.xyz/skills/farcaster-agent)
- [Send to Agent page](https://openagent3.xyz/skills/farcaster-agent/agent)
- [JSON manifest](https://openagent3.xyz/skills/farcaster-agent/agent.json)
- [Markdown brief](https://openagent3.xyz/skills/farcaster-agent/agent.md)
- [Download page](https://openagent3.xyz/downloads/farcaster-agent)