安装方式
手动下载安装
下载 ZIP 后解压到技能目录即可安装。若在桌面客户端 WebView中直接下载出现异常,本站会改为提示页 + 原始链接,请按页内说明操作。
下载 ZIP (shub-slv-grpc-geyser-v1.0.0.zip)触发指令
/slv-grpc-geyser-skill
跨平台安装指引
该技能声明兼容以下 1 个平台,将 ZIP 解压到对应目录即可被识别。
unzip shub-slv-grpc-geyser-v1.0.0.zip -d ~/.claude/skills/
mkdir -p 创建;启用 Skill 后请重启对应 Agent 让配置生效。
使用指南
Solana SLV gRPC Geyser
围绕 Solana SLV gRPC Geyser:Solana 数据流与 gRPC Geyser 订阅相关说明;节点与 RPC 费用以实际部署为准。 无需在每次任务前把零散英文说明手工拼进上下文,也 减少 与客户端默认行为脱节的试错;具体命令、钩子与 JSON 参数仍以 ZIP 包内 SKILL.md 为权威。下文结构与站内 MCP CLI 类专题稿相同:何时用、前置、流程、速查与故障。
何时使用
- Solana 数据流与 gRPC Geyser 订阅相关说明
- 节点与 RPC 费用以实际部署为准
- 已获取本技能 ZIP,并准备在 Claude Code / OpenClaw 中按 SKILL.md 挂载。
- 希望用中文专题稿快速判断「该不该启用」,再深入英文 SKILL 查参数与边界。
- 需要与团队对齐同一套触发方式、目录约定或回调格式时。
前置条件
- 通用:可运行 Claude Code 或文档要求的客户端;有可读写的项目工作区(或 SKILL.md 指定的沙箱目录)。
- 权威细节:API Key / OAuth、钩子路径、环境变量以 ZIP 内 SKILL.md 为准。
典型流程
- 从 ClawHub / 站内分发获取技能 ZIP,校验版本与校验和(若提供)。
- 阅读 SKILL.md 的安装段落:目录落点、客户端类型(Claude Code / OpenClaw / 脚本)。
- 用文档中的最小示例完成第一次调用(单文件修改、单次查询或单次委派)。
- 确认工作目录、权限边界与输出路径后,再处理多文件或长耗时任务。
- 需要回调 / Webhook / 通知时,按 SKILL.md 配置端点并在测试环境先验通。
与 ZIP / SKILL.md 的关系
站内专题稿与 MCP CLI 类 oss 稿同样:概括何时用、怎么接、怎么排错;命令模板、钩子名、JSON 字段、版本矩阵一律以 ZIP 内 SKILL.md 与 ClawHub 上游为准。
命令示例(摘自包内 SKILL.md)
以下为从上游 SKILL.md(或入库正文)自动抽取的终端/脚本片段;路径、环境变量与参数以当前 ZIP 与官方说明为准。
ClawHub slug:slv-grpc-geyser(安装命令以 SKILL.md / claw CLI 为准)。
# Deploy a new gRPC Geyser node
ansible-playbook -i inventory mainnet-rpc/init.yml \
-e '{"rpc_type":"Geyser gRPC","solana_version":"3.1.8","yellowstone_grpc_version":"v6.0.0","snapshot_url":"https://..."}'
# Build/update Richat plugin
ansible-playbook -i inventory mainnet-rpc/geyser_richat_build.yml \
-e '{"richat_version":"richat-v8.1.0"}'
ansible-playbook -i inventory.yml cmn/add_solv.yml \
-e '{"ansible_user":"ubuntu"}' --become
cd /path/to/slv-grpc-geyser/ansible/
ansible-playbook -i inventory.yml mainnet-rpc/init.yml \
-e '{"rpc_type":"Geyser gRPC","solana_version":"<version>","richat_version":"<version>"}'
站内入库时的触发命令(完整语义见 ZIP):
# 使用本技能时可在对话中引用或执行上述指令;完整参数与示例见下载包内 SKILL.md。
/slv-grpc-geyser-skill
最佳实践
- 先 SKILL.md 再猜参数;站内专题稿不替代 schema 与必填字段说明。
- 委派任务时写清验收标准(命令、文件路径、测试命令),减少来回追问。
- 长任务用文档推荐的回调 / 日志落盘代替高频轮询,省 Token 也省机器负载。
- 多技能同时启用时,注意钩子加载顺序与重复工具调用(以 SKILL.md 冲突说明为准)。
调试与排错
- 打开 stderr 与客户端日志;PTY/tmux 场景同时看面板最后几十行输出。
- 参数错误时对照 SKILL.md 中的 JSON/CLI 示例(引号、转义、工作目录)。
- 网络类失败:查代理、防火墙、MCP 传输方式(stdio / HTTP / SSE)。
速查
| 动作 | 说明 |
|------|------|
| 获取技能包 | ClawHub / 站内 ZIP,核对版本 |
| 权威步骤 | 优先阅读 ZIP 内 SKILL.md |
| 首次试跑 | 使用 SKILL.md 最小示例 |
| 验收 | 对照路径、测试命令或回调负载 |
常见故障
- 无输出或立即退出 → 工作目录错误、依赖未装、或 Claude Code 未登录;按 SKILL.md 自检清单执行。
- 权限被拒绝 → 检查沙箱路径、
--permission-mode与工具白名单。 - 与简介不符 → 以英文 SKILL 与上游仓库为准,站内稿仅作结构化导读。
# SLV gRPC Geyser Skill
Ansible playbooks and Jinja2 templates for deploying and managing Solana gRPC Geyser streaming nodes.
## Supported Configurations
| Config | Description |
|---|---|
| Yellowstone gRPC | Standard Geyser gRPC plugin (Triton/rpcpool) |
| Richat gRPC | Richat Geyser plugin (lamports-dev) |
## Directory Structure
```
ansible/
mainnet-rpc/ — Playbooks (gRPC Geyser uses mainnet-rpc playbooks)
cmn/ — Shared common playbooks
jinja/
mainnet-rpc/ — Jinja2 templates
cmn/ — Shared templates
```
## CLI Command ↔ Playbook Mapping
gRPC Geyser nodes are managed via `slv r` (RPC) commands with `rpc_type` set to `Geyser gRPC` or `Index RPC + gRPC`.
| CLI Command | Playbook | Description |
|---|---|---|
| `slv r deploy` | `mainnet-rpc/init.yml` | Full gRPC Geyser node initialization |
| `slv r start` | `mainnet-rpc/start_node.yml` | Start node |
| `slv r stop` | `mainnet-rpc/stop_node.yml` | Stop node |
| `slv r restart` | `mainnet-rpc/restart_node.yml` | Restart node |
| `slv r build:solana` | `mainnet-rpc/install_solana.yml` | Build Solana from source |
| `slv r update:geyser` | `mainnet-rpc/update_geyser.yml` | Update Geyser plugin |
| `slv r update:script` | `mainnet-rpc/update_startup_config.yml` | Update start-validator.sh |
| `slv r setup:firedancer` | `mainnet-rpc/setup_firedancer.yml` | Setup Firedancer |
## Key Playbooks
| Playbook | Description |
|---|---|
| `init.yml` | Full gRPC Geyser node initialization |
| `init_richat_geyser.yml` | Richat Geyser initialization |
| `geyser_build.yml` | Build Yellowstone gRPC from GitHub source |
| `geyser_richat_build.yml` | Build Richat plugin from GitHub source |
| `install_richat.yml` | Install Richat plugin |
| `update_geyser.yml` | Update Geyser plugin |
| `restart_node.yml` | Restart node |
| `start_node.yml` / `stop_node.yml` | Start/stop node |
| `update_startup_config.yml` | Update start-validator.sh from template |
| `setup_firedancer.yml` | Setup Firedancer |
| `run_snapshot_finder.yml` | Find and download best snapshot |
| `run_restarter.yml` | Run restarter script |
## Geyser Build Details
### Yellowstone gRPC (`geyser_build.yml`)
- Clones from https://github.com/rpcpool/yellowstone-grpc
- Builds with `cargo build --release`
- Produces `libyellowstone_grpc_geyser.so`
- Config template: `jinja/mainnet-rpc/geyser.json.j2`
### Richat (`geyser_richat_build.yml`)
- Clones from https://github.com/lamports-dev/richat
- Builds with `cargo build --release`
- Produces `librichat_plugin_agave.so`
- Config template: `jinja/mainnet-rpc/geyser-richat.json.j2`
- Service template: `jinja/mainnet-rpc/richat.service.j2`
- Settings template: `jinja/mainnet-rpc/richat-setting.yml.j2`
## Key Variables (extra_vars)
| Variable | Description | Default |
|---|---|---|
| `rpc_type` | Must be `Geyser gRPC` or `Index RPC + gRPC` | — |
| `validator_type` | Client type (`agave`, `jito`, `firedancer-agave`, etc.) | — |
| `solana_version` | Solana/Agave version | — |
| `yellowstone_grpc_version` | Yellowstone gRPC version tag | — |
| `richat_version` | Richat plugin version (e.g. `richat-v8.1.0`) | — |
| `snapshot_url` | Snapshot download URL | — |
| `port_grpc` | gRPC listen port | `10000` |
| `limit_ledger_size` | Ledger size limit | `100000000` |
## Jinja Templates
| Template | Description |
|---|---|
| `start-validator.sh.j2` | Main start script (branches by `rpc_type`) |
| `start-mainnet-rpc-grpc.sh.j2` | gRPC-specific start script |
| `geyser.json.j2` | Yellowstone gRPC config |
| `geyser-richat.json.j2` | Richat gRPC config |
| `richat-setting.yml.j2` | Richat settings |
| `richat.service.j2` | Richat systemd service |
| `firedancer-config.toml.j2` | Firedancer config |
| `firedancer.service.j2` | Firedancer systemd service |
| `solv.service.j2` | Solv systemd service |
| `generate_configs.sh.j2` | Config generation script |
## Geyser Plugin Sources
Both plugins are built from source (no binary downloads):
- **Yellowstone gRPC**: https://github.com/rpcpool/yellowstone-grpc
- **Richat**: https://github.com/lamports-dev/richat
## Usage
```bash
# Deploy a new gRPC Geyser node
ansible-playbook -i inventory mainnet-rpc/init.yml \
-e '{"rpc_type":"Geyser gRPC","solana_version":"3.1.8","yellowstone_grpc_version":"v6.0.0","snapshot_url":"https://..."}'
# Build/update Richat plugin
ansible-playbook -i inventory mainnet-rpc/geyser_richat_build.yml \
-e '{"richat_version":"richat-v8.1.0"}'
```
No `versions.yml` required — all variables can be passed via `extra_vars`.
## Interactive Deployment Flow
See `AGENT.md` for the full step-by-step flow and `examples/inventory.yml` for output format.
### Required Variables
| Variable | Prompt | Validation |
|---|---|---|
| `server_ip` | "Target server IP?" | Valid IPv4 |
| `region` | "Server region?" | String |
| `rpc_type` | "Geyser gRPC or Index RPC + gRPC?" | `Geyser gRPC`, `Index RPC + gRPC` |
| `validator_type` | "Underlying client?" | `agave`, `jito`, `jito-bam`, `firedancer-agave` |
| `solana_version` | "Solana version? (default: 3.1.8)" | Semver |
| `identity_account` | "Node identity pubkey?" | Base58 pubkey |
| `snapshot_url` | "Snapshot URL? (auto for ERPC)" | URL (cannot be empty for init) |
### Plugin Selection (choose ONE)
| Plugin | Version Variable | Source | Output |
|---|---|---|---|
| Yellowstone gRPC | `yellowstone_grpc_version` | github.com/rpcpool/yellowstone-grpc | `libyellowstone_grpc_geyser.so` |
| Richat | `richat_version` | github.com/lamports-dev/richat | `librichat_plugin_agave.so` |
Both are built from source (no pre-built binaries). Build time: ~15-30 min.
**Only collect the version variable for the selected plugin.**
### Conditionally Required Variables
| Variable | When Required |
|---|---|
| `jito_version` | jito/jito-bam types |
| `firedancer_version` | firedancer types |
| `shred_receiver_address` | jito/jito-bam (auto by region) |
| `block_engine_url` | jito/jito-bam (auto by region) |
### Optional Variables
| Variable | Default | When Required |
|---|---|---|
| `ssh_user` | `solv` | Always |
| `port_grpc` | `10000` | Always |
| `port_rpc` | `8899` (ERPC: `7211`) | Always |
| `limit_ledger_size` | `100000000` | Always |
| `dynamic_port_range` | `8000-8025` | Always |
| `allowed_ssh_ips` | — | Strongly recommended (UFW) |
| `allowed_ips` | — | Optional (UFW) |
### Optional: Reference RPC
| Variable | Description | Default |
|---|---|---|
| `reference_rpc_url` | Reference RPC endpoint for slot sync comparison (e.g., ERPC) | — |
ERPC API keys are free at https://erpc.global — enables full slot sync monitoring during deployment and updates.
### Pre-flight: Fresh Server Setup
```bash
ansible-playbook -i inventory.yml cmn/add_solv.yml \
-e '{"ansible_user":"ubuntu"}' --become
```
### Deployment Command
All paths relative to skill's `ansible/` directory:
```bash
cd /path/to/slv-grpc-geyser/ansible/
ansible-playbook -i inventory.yml mainnet-rpc/init.yml \
-e '{"rpc_type":"Geyser gRPC","solana_version":"<version>","richat_version":"<version>"}'
```