{"_id":"@elizaos/plugin-farcaster-root","_rev":"4-2f8015b6f010159d9ff066a9ace8027c","name":"@elizaos/plugin-farcaster-root","dist-tags":{"next":"2.0.0-alpha.1","latest":"2.0.0-alpha.1"},"versions":{"2.0.0-alpha.1":{"name":"@elizaos/plugin-farcaster-root","version":"2.0.0-alpha.1","keywords":[],"author":{"name":"elizaOS"},"license":"MIT","_id":"@elizaos/plugin-farcaster-root@2.0.0-alpha.1","maintainers":[{"name":"shawticus","email":"shawmakesmagic@gmail.com"},{"name":"shakkernerd","email":"shakkerdroid@gmail.com"},{"name":"wtfsayo","email":"hi@sayo.wtf"},{"name":"odilitime","email":"janesmith@airmail.cc"},{"name":"cjft","email":"cjft@trimboli.io"}],"homepage":"https://github.com/elizaos-plugins/plugin-farcaster#readme","bugs":{"url":"https://github.com/elizaos-plugins/plugin-farcaster/issues"},"dist":{"shasum":"d3c29ec7ae578c8ebdb00f915c0f7bf414982a70","tarball":"https://registry.npmjs.org/@elizaos/plugin-farcaster-root/-/plugin-farcaster-root-2.0.0-alpha.1.tgz","fileCount":89,"integrity":"sha512-DFbHh0YBoBYiajIxq1nRhxFNA42Ya2dTP857ePj03dnt3/TB6hFJ4d+d/eztzljOBvpUm8uIpYPkxYDxx3v7/g==","signatures":[{"sig":"MEUCIQCYdeZNgzADwawbTJgrTKhNyBMfV5MQ3eT0zXcXpgfvrgIgHJq+GlrvjZrdeqKW4a5b9pQYeFY+LRx7Me6UHesTK64=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":910506},"main":"typescript/dist/index.js","type":"module","types":"typescript/dist/index.d.ts","exports":{".":{"types":"./typescript/dist/index.d.ts","import":"./typescript/dist/index.js","default":"./typescript/dist/index.js"},"./rust":{"import":"./rust/pkg/node/elizaos_plugin_plugin_farcaster.js"},"./package.json":"./package.json"},"gitHead":"05d4ca11d769db8c7f54a722ee24b2ce2b951543","scripts":{"dev":"cd typescript && bun --hot build.ts","lint":"bunx @biomejs/biome check --write ./typescript","test":"bun run test:ts && bun run test:rust && bun run test:python","build":"npm run build:prompts && bun run build:ts && bun run build:rust && bun run build:python","clean":"rm -rf typescript/dist python/dist rust/target .turbo node_modules","test:ts":"cd typescript && vitest run || echo 'TypeScript tests skipped - no tests found'","build:ts":"cd typescript && bun run build.ts","lint:rust":"test -d rust && cd rust && cargo clippy --all-targets --fix --allow-dirty --allow-staged -- -D warnings && cargo fmt || echo 'Rust lint skipped'","test:rust":"test -d rust && cd rust && cargo test || echo 'Rust tests skipped'","typecheck":"tsc --noEmit -p typescript/tsconfig.json","build:rust":"test -d rust && cd rust && cargo build --release || echo 'Rust build skipped - no rust directory'","lint:check":"bunx @biomejs/biome check ./typescript","lint:python":"test -d python && cd python && ruff check --fix . && ruff format . || echo 'Python lint skipped'","test:python":"test -d python && cd python && pytest -p no:anchorpy --asyncio-mode=auto || echo 'Python tests skipped'","build:python":"test -d python && cd python && (python3 -m build 2>/dev/null || pyproject-build) || echo 'Python build skipped - no python directory'","build:prompts":"node ../../packages/prompts/scripts/generate-plugin-prompts.js ./prompts ./typescript/generated/prompts --target all","lint:python:fix":"test -d python && cd python && ruff check --fix . && ruff format . || echo 'Python lint fix skipped'"},"_npmUser":{"name":"shawticus","email":"shawmakesmagic@gmail.com"},"repository":{"url":"git+https://github.com/elizaos-plugins/plugin-farcaster.git","type":"git"},"_npmVersion":"lerna/9.0.3/node@v22.20.0+arm64 (darwin)","agentConfig":{"pluginType":"elizaos:client:1.0.0","pluginParameters":{"ENABLE_CAST":{"type":"boolean","default":true,"required":false,"sensitive":false,"description":"Enables or disables the ability to post casts to Farcaster."},"FARCASTER_FID":{"type":"number","default":123,"required":true,"sensitive":false,"description":"The Farcaster FID (user identifier) used to publish or manage casts for a specific account."},"FARCASTER_MODE":{"type":"string","default":"polling","required":false,"sensitive":false,"description":"Operation mode for Farcaster: 'polling' or 'webhook'."},"ACTION_INTERVAL":{"type":"number","default":5,"required":false,"sensitive":false,"description":"Interval in minutes between action-processing cycles."},"MAX_CAST_LENGTH":{"type":"number","default":320,"required":false,"sensitive":false,"description":"Maximum number of characters allowed in a Farcaster cast."},"CAST_IMMEDIATELY":{"type":"boolean","default":false,"required":false,"sensitive":false,"description":"If true, posts are published immediately instead of waiting for a schedule."},"CAST_INTERVAL_MAX":{"type":"number","default":180,"required":false,"sensitive":false,"description":"Maximum interval in minutes between automated posts."},"CAST_INTERVAL_MIN":{"type":"number","default":90,"required":false,"sensitive":false,"description":"Minimum interval in minutes between automated posts."},"FARCASTER_DRY_RUN":{"type":"boolean","required":false,"sensitive":false,"description":"Enables or disables dry run mode when interacting with Farcaster; when true, operations are simulated but not executed."},"FARCASTER_HUB_URL":{"type":"string","default":"hub.pinata.cloud","required":false,"sensitive":false,"description":"Base URL for the Farcaster hub the client should communicate with."},"FARCASTER_SIGNER_UUID":{"type":"string","required":true,"sensitive":false,"description":"UUID of the Neynar signer associated with the Farcaster account, required to sign casts."},"MAX_ACTIONS_PROCESSING":{"type":"number","default":1,"required":false,"sensitive":false,"description":"Maximum number of Farcaster actions to process in a single batch."},"FARCASTER_POLL_INTERVAL":{"type":"number","default":120,"required":false,"sensitive":false,"description":"Polling interval in seconds for Farcaster operations such as fetching new casts."},"ENABLE_ACTION_PROCESSING":{"type":"boolean","default":false,"required":false,"sensitive":false,"description":"Turns on or off automated action processing for Farcaster events."},"FARCASTER_NEYNAR_API_KEY":{"type":"string","required":true,"sensitive":true,"description":"API key used to authenticate with the Neynar Farcaster API."}}},"description":"A multi-language Farcaster plugin for elizaOS, providing full integration with the Farcaster decentralized social network via the Neynar API.","directories":{},"_nodeVersion":"22.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.5","typescript":"^5.9.3","@types/node":"^25.0.3","@biomejs/biome":"^2.3.11"},"peerDependencies":{"@elizaos/core":"2.0.0-alpha.1"},"_npmOperationalInternal":{"tmp":"tmp/plugin-farcaster-root_2.0.0-alpha.1_1769033818158_0.34531376070862896","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-01-21T22:16:58.063Z","modified":"2026-06-16T05:14:25.800Z","2.0.0-alpha.1":"2026-01-21T22:16:58.346Z"},"bugs":{"url":"https://github.com/elizaos-plugins/plugin-farcaster/issues"},"author":{"name":"elizaOS"},"license":"MIT","homepage":"https://github.com/elizaos-plugins/plugin-farcaster#readme","keywords":[],"repository":{"url":"git+https://github.com/elizaos-plugins/plugin-farcaster.git","type":"git"},"description":"A multi-language Farcaster plugin for elizaOS, providing full integration with the Farcaster decentralized social network via the Neynar API.","maintainers":[{"email":"shawmakesmagic@gmail.com","name":"shawticus"},{"email":"janesmith@airmail.cc","name":"odilitime"}],"readme":"# @elizaos/plugin-farcaster\n\nA multi-language Farcaster plugin for elizaOS, providing full integration with the Farcaster decentralized social network via the Neynar API.\n\n## Languages\n\nThis plugin is implemented in three languages with full feature parity:\n\n- **TypeScript** - Primary implementation for Node.js and browser\n- **Python** - Python implementation for ML/AI pipelines\n- **Rust** - High-performance implementation with WASM support\n\n## Features\n\n- **Cast Management**: Send casts, reply to casts, and manage your timeline\n- **Profile Management**: Fetch and cache user profiles\n- **Mentions & Notifications**: Monitor and respond to mentions\n- **Timeline Provider**: Access your Farcaster feed\n- **Thread Support**: Navigate and respond within cast threads\n- **Embed Processing**: Handle images, videos, and embedded casts\n- **Webhook Support**: Real-time updates via webhooks\n- **Polling Mode**: Periodic fetching for simple deployments\n\n## Installation\n\n### TypeScript/Node.js\n\n```bash\nnpm install @elizaos/plugin-farcaster\n# or\nbun add @elizaos/plugin-farcaster\n```\n\n### Python\n\n```bash\npip install elizaos-plugin-farcaster\n```\n\n### Rust\n\nAdd to your `Cargo.toml`:\n\n```toml\n[dependencies]\nelizaos-plugin-farcaster = \"1.0\"\n```\n\n## Configuration\n\nThe plugin requires the following environment variables:\n\n| Variable                   | Required | Description                                               |\n| -------------------------- | -------- | --------------------------------------------------------- |\n| `FARCASTER_FID`            | Yes      | Your Farcaster ID (FID)                                   |\n| `FARCASTER_SIGNER_UUID`    | Yes      | Neynar signer UUID for signing casts                      |\n| `FARCASTER_NEYNAR_API_KEY` | Yes      | Neynar API key for API access                             |\n| `FARCASTER_DRY_RUN`        | No       | Enable dry run mode (default: false)                      |\n| `FARCASTER_MODE`           | No       | Operation mode: 'polling' or 'webhook' (default: polling) |\n| `MAX_CAST_LENGTH`          | No       | Maximum cast length (default: 320)                        |\n| `FARCASTER_POLL_INTERVAL`  | No       | Polling interval in seconds (default: 120)                |\n| `ENABLE_CAST`              | No       | Enable auto-casting (default: true)                       |\n| `CAST_INTERVAL_MIN`        | No       | Min cast interval in minutes (default: 90)                |\n| `CAST_INTERVAL_MAX`        | No       | Max cast interval in minutes (default: 180)               |\n\n## Usage\n\n### TypeScript\n\n```typescript\nimport farcasterPlugin from \"@elizaos/plugin-farcaster\";\n\n// Register with agent runtime\nconst agent = new AgentRuntime({\n  plugins: [farcasterPlugin],\n  // ... other config\n});\n```\n\n### Python\n\n```python\nfrom elizaos_plugin_farcaster import FarcasterClient, FarcasterConfig\n\n# Load configuration from environment\nconfig = FarcasterConfig.from_env()\n\n# Create client\nasync with FarcasterClient(config) as client:\n    # Send a cast\n    casts = await client.send_cast(\"Hello from elizaOS! 🤖\")\n    print(f\"Cast sent: {casts[0].hash}\")\n```\n\n### Rust\n\n```rust\nuse elizaos_plugin_farcaster::{FarcasterClient, FarcasterConfig};\n\n#[tokio::main]\nasync fn main() -> anyhow::Result<()> {\n    let config = FarcasterConfig::from_env()?;\n    let client = FarcasterClient::new(config)?;\n\n    let casts = client.send_cast(\"Hello from elizaOS! 🤖\", None).await?;\n    println!(\"Cast sent: {}\", casts[0].hash);\n\n    Ok(())\n}\n```\n\n## Actions\n\n### SEND_CAST\n\nPosts a new cast to Farcaster.\n\n```typescript\n// Triggered by messages containing: post, cast, share, announce, farcaster, post\n\"Please post about the new ElizaOS features on Farcaster\";\n```\n\n### REPLY_TO_CAST\n\nReplies to an existing cast.\n\n```typescript\n// Triggered by messages containing: reply, respond, answer, comment\n\"Reply to that cast and thank them for the feedback\";\n```\n\n## Providers\n\n### farcaster_profile\n\nProvides the agent's Farcaster profile information for context.\n\n### farcaster_timeline\n\nProvides the agent's recent timeline for context about recent activity.\n\n### farcaster_thread\n\nProvides thread context for understanding conversation flow.\n\n## Development\n\n### Building\n\n```bash\n# TypeScript\nbun run build\n\n# Python\ncd python && python -m build\n\n# Rust\ncd rust && cargo build --release\n```\n\n### Testing\n\n```bash\n# All languages\nbun run test\n\n# TypeScript only\nbun run test:ts\n\n# Python only\nbun run test:python\n\n# Rust only\nbun run test:rust\n```\n\n### Linting\n\n```bash\n# TypeScript\nbun run lint\n\n# Python\nbun run lint:python\n\n# Rust\nbun run lint:rust\n```\n\n## Architecture\n\n```\nplugin-farcaster/\n├── typescript/          # TypeScript implementation\n│   ├── index.ts         # Main plugin entry\n│   ├── client/          # Neynar API client\n│   ├── services/        # Service layer\n│   ├── actions/         # SEND_CAST, REPLY_TO_CAST\n│   ├── providers/       # Context providers\n│   └── types/           # Type definitions\n├── python/              # Python implementation\n│   ├── elizaos_plugin_farcaster/\n│   │   ├── __init__.py\n│   │   ├── client.py    # Neynar API client\n│   │   ├── service.py   # Service layer\n│   │   └── types.py     # Type definitions\n│   └── tests/\n└── rust/                # Rust implementation\n    ├── src/\n    │   ├── lib.rs       # Library entry\n    │   ├── client.rs    # Neynar API client\n    │   ├── service.rs   # Service layer\n    │   ├── actions/     # Action implementations\n    │   └── providers/   # Provider implementations\n    └── tests/\n```\n\n## API Reference\n\n### TypeScript\n\n- `FarcasterService` - Main service managing client lifecycle\n- `FarcasterClient` - Low-level API client\n- `sendCastAction` - Action for posting casts\n- `replyCastAction` - Action for replying to casts\n- `farcasterProfileProvider` - Profile context provider\n- `farcasterTimelineProvider` - Timeline context provider\n\n### Python\n\n- `FarcasterService` - Main service class\n- `FarcasterClient` - Async API client\n- `FarcasterConfig` - Configuration dataclass\n- `SendCastAction` - Cast action\n- `ReplyCastAction` - Reply action\n- `ProfileProvider` - Profile provider\n- `TimelineProvider` - Timeline provider\n\n### Rust\n\n- `FarcasterService` - Main service struct\n- `FarcasterClient` - API client\n- `FarcasterConfig` - Configuration struct\n- `SendCastAction` - Cast action\n- `ReplyCastAction` - Reply action\n- `ProfileProvider` - Profile provider\n- `TimelineProvider` - Timeline provider\n\n## License\n\nMIT License - see [LICENSE](LICENSE) file for details.\n\n## Contributing\n\nContributions are welcome! Please ensure that any changes maintain feature parity across all three language implementations.\n","readmeFilename":"README.md"}