validatorsdao/slv/slv-rpc

Claude Code and agent skill by validatorsdao/slv

Trust tier 3
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

Install

npx vskill@latest install validatorsdao/slv/slv-rpc

SKILL.md

SLV RPC Skill

Ansible playbooks and Jinja2 templates for deploying and managing Solana RPC nodes (mainnet, testnet, devnet).

Supported RPC Types

TypeDescription
RPCStandard RPC node
Index RPCFull-index RPC node (with Old Faithful/yellowstone-faithful)
Geyser gRPCRPC with Geyser gRPC streaming
Index RPC + gRPCFull-index + gRPC streaming

Directory Structure

ansible/
mainnet-rpc/ — Mainnet RPC playbooks
testnet-rpc/ — Testnet RPC playbooks
devnet-rpc/ — Devnet RPC playbooks
cmn/ — Shared common playbooks
jinja/
mainnet-rpc/ — Mainnet Jinja2 templates
testnet-rpc/ — Testnet Jinja2 templates
devnet-rpc/ — Devnet Jinja2 templates
cmn/ — Shared templates

Benchmarking Notes

Planned CLI shape

A natural future command shape is:

bash
slv check geyserbench <options>

This would mirror the existing slv check grpc / slv check shreds style by passing arguments through to the installed benchmark binary.

geyserbench config generation

For shredstream and grpc benchmark flows, the agent should be able to generate config.toml from:

  • benchmark type
  • two endpoint URLs
  • ERPC API key from ~/.slv/api.yml

If ~/.slv/api.yml does not contain the required ERPC API key, instruct the user to get a free key and configure it first.

Example config:

toml
[config]
region = "frankfurt"
erpc_url = "https://edge.erpc.global"
erpc_api_key = "api-key"
transactions = 10000
account = "pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA"
commitment = "processed"
[[endpoint]]
name = "http://shreds-fra6-1.erpc.global"
url = "http://shreds-fra6-1.erpc.global"
kind = "shredstream"
[[endpoint]]
name = "http://shreds-turbo-fra-1.erpc.global"
url = "http://shreds-turbo-fra-1.erpc.global"
kind = "shredstream"

For gRPC benchmarks, use the same structure but set the endpoint kind to the appropriate gRPC-compatible type.

CLI Command ↔ Playbook Mapping

The slv r CLI commands map directly to these playbooks. {net} = mainnet-rpc, testnet-rpc, or devnet-rpc.

CLI CommandPlaybookDescription
slv r deploy{net}/init.ymlFull RPC node initialization and deployment
slv r start{net}/start_node.ymlStart RPC node
slv r stop{net}/stop_node.ymlStop RPC node
slv r restart{net}/restart_node.ymlRestart RPC node
slv r build:solana{net}/install_solana.ymlBuild Solana from source
slv r install:solanacmn/install_solana.ymlInstall Solana binary (deprecated, prefer build)
slv r setup:firedancer{net}/setup_firedancer.ymlSetup Firedancer
slv r update:firedancercmn/update_firedancer.ymlUpdate Firedancer binary
slv r update:script{net}/update_startup_config.ymlUpdate start-validator.sh from template
slv r update:geyser{net}/update_geyser.ymlUpdate Geyser plugin
slv r get:snapshot{net}/wget_snapshot.ymlDownload snapshot via aria2c
slv r cleanupcmn/rm_ledger.ymlRemove ledger/snapshot files
slv disable pwd-logincmn/disable_pwd_login.ymlDisable SSH password authentication
slv r list(no playbook)List RPC nodes (CLI only)
slv r update:allowed-ips(no playbook)Update allowed IPs (CLI only)
slv r init(no playbook)Interactive wizard (CLI only)

All Playbooks

Mainnet RPC (mainnet-rpc/)
PlaybookDescription
init.ymlFull RPC node initialization
init_richat_geyser.ymlInitialize Richat Geyser configuration (richat has no release for agave 4.3 or later yet)
restart_node.ymlRestart RPC node
start_node.ymlStart RPC node
stop_node.ymlStop RPC node
install_solana.ymlBuild Solana from source
install_agave.ymlBuild Agave from source
install_jito.ymlBuild Jito from source
install_rust.ymlInstall Rust toolchain
install_package.ymlInstall system packages
install_richat.ymlInstall Richat gRPC plugin (only with geyser_plugin: richat)
install_of1.ymlInstall Old Faithful (yellowstone-faithful)
install_of1_service.ymlSetup Old Faithful systemd service
cmn/of1_index_cache_sync.ymlInstall rolling-cache sync script + daily timer
geyser_build.ymlBuild Yellowstone gRPC from source (the Geyser plugin of init.yml by default)
cmn/stop_richat.ymlStop and disable richat.service on a node that ran richat, and move its plugin library aside (librichat_plugin_agave.so.disabled), after the Yellowstone build of init.yml
cmn/check_alpenglow_floor.ymlStop init.yml, before it changes anything, on an agave, jito or allnodes version or a Yellowstone plugin older than Alpenglow runs on (4.3.0 on mainnet, 4.4.0-beta.0 on testnet and devnet)
geyser_richat_build.ymlBuild Richat gRPC plugin from source (only with geyser_plugin: richat)
update_geyser.ymlUpdate Geyser plugin
update_startup_config.ymlUpdate start-validator.sh from template
update_ubuntu.ymlUpdate Ubuntu packages
setup_firedancer.ymlSetup Firedancer for RPC
setup-solv-service.ymlSetup systemd service
start-solv-service.ymlStart systemd service
setup_ufw.ymlConfigure UFW firewall
setup_logrotate.ymlSetup log rotation
setup_norestart.ymlDisable auto-restart
configure_hugetlbfs.ymlConfigure hugepages for Firedancer
fail2ban_solana_rate_limit.ymlSetup fail2ban rate limiting
fail2ban_sshd.ymlSetup fail2ban for SSH
allow_ufw.ymlAdd UFW allow rules
add_solv.ymlAdd solv user
copy_keys.ymlCopy node keys
create-start-validator-sh.ymlGenerate start script from template
create-symlink.ymlCreate version symlinks
mount_disks.ymlMount and format disks
optimize_system.ymlOptimize system settings
run_restarter.ymlRun restarter script
run_snapshot_finder.ymlFind and download best snapshot
Testnet RPC (testnet-rpc/)
PlaybookDescription
init.ymlFull testnet RPC initialization
restart_node.ymlRestart node
start_node.yml / stop_node.ymlStart/stop node
install_solana.ymlBuild Solana from source
install_agave.yml / install_jito.ymlBuild client from source
install_richat.ymlInstall Richat plugin (only with geyser_plugin: richat)
geyser_build.ymlBuild Yellowstone gRPC (the Geyser plugin of init.yml by default)
geyser_richat_build.ymlBuild Richat plugin from source (only with geyser_plugin: richat)
update_geyser.ymlUpdate Geyser plugin
update_firedancer.ymlUpdate Firedancer
update_startup_config.ymlUpdate start script
setup_firedancer.ymlSetup Firedancer
setup_solv_service.ymlSetup systemd service
create-start-validator-sh.ymlGenerate start script
wget_snapshot.ymlDownload snapshot
Devnet RPC (devnet-rpc/)
PlaybookDescription
init.ymlFull devnet RPC initialization
restart_node.ymlRestart node
start_node.yml / stop_node.ymlStart/stop node
install_solana.ymlBuild Solana from source
install_agave.yml / install_jito.ymlBuild client from source
install_richat.ymlInstall Richat plugin (only with geyser_plugin: richat)
geyser_build.ymlBuild Yellowstone gRPC (the Geyser plugin of init.yml by default)
geyser_richat_build.ymlBuild Richat plugin from source (only with geyser_plugin: richat)
update_geyser.ymlUpdate Geyser plugin
update_startup_config.ymlUpdate start script
setup_firedancer.ymlSetup Firedancer
setup_solv_service.ymlSetup systemd service
create-start-validator-sh.ymlGenerate start script
Shared Common (cmn/)
PlaybookDescription
build_solana.ymlBuild Solana from source (dispatches to build_agave/build_jito)
build_agave.ymlBuild Agave from GitHub source
build_jito.ymlBuild Jito from GitHub source
install_solana.ymlInstall Solana binary (deprecated)
install_package.ymlInstall system packages
install_rust.ymlInstall Rust toolchain
mount_disks.yml / mount-disks.ymlMount and format disks
optimize_system.ymlOptimize system settings
disable_swap.ymlDisable swap
disable_pwd_login.ymlDisable SSH password authentication and restart sshd
setup_logrotate.ymlConfigure log rotation
setup_node_exporter.ymlSetup Prometheus node exporter
setup_norestart.ymlDisable auto-restart
setup_unstaked_identity.ymlSetup unstaked identity keypair
restart_solv.ymlRestart solv service
start_solv.yml / stop_solv.ymlStart/stop solv service
start_firedancer.yml / stop_firedancer.ymlStart/stop Firedancer
copy_restart_sh.ymlCopy restarter script
copy_rpc_keys.ymlCopy RPC keys
update_ubuntu.ymlUpdate Ubuntu packages
wget_snapshot.ymlDownload snapshot
add_solv.ymlAdd solv user
fix_permissions.ymlFix file permissions

Key Variables (extra_vars)

VariableDescriptionDefault
rpc_typeRPC node type (RPC, Index RPC, Geyser gRPC, Index RPC + gRPC)RPC
validator_typeClient type (agave, jito, firedancer-agave, firedancer-jito)—
agave_versionAgave version of an agave node, without the leading vversion_agave of the <network>_rpcs section of ~/.slv/versions.yml
jito_versionJito version of a jito node, with the -jito suffix (e.g. 4.3.2-jito)version_jito of the same section
allnodes_jito_versionAllnodes-Jito version of an allnodes-jito node (e.g. 4.3.2-allnodes)— (the RPC sections hold no pin for it)
firedancer_versionFiredancer version—
geyser_pluginGeyser plugin of Geyser gRPC and Index RPC + gRPC nodes, an inventory variable: yellowstone, or richat, which init.yml refuses while the agave of the node is 4.3 or lateryellowstone
geyser_versionYellowstone gRPC release taggeyser_version of the network in ~/.slv/versions.yml
richat_versionRichat plugin version, for geyser_plugin: richat (e.g. richat-v8.1.0)—
snapshot_urlSnapshot download URL—
tpu_peer_addressTPU peer address (for Index RPC transaction forwarding)—
limit_ledger_sizeLedger size limit200000000 (Index), 100000000 (others)
dynamic_port_rangePort range8000-8025
port_rpcRPC port8899
port_grpcgRPC port10000

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

Yellowstone is the default plugin of init.yml. Richat is chosen with geyser_plugin: richat in the inventory, but richat has no release for agave 4.3 or later yet: init.yml stops, before it changes anything, on a node set to run such an agave. The Richat playbooks stay for when a release exists. A node that ran Richat gets richat.service stopped and disabled when it is initialised with Yellowstone, so the two never share port 10000.

Usage

bash
ansible-playbook -i inventory mainnet-rpc/init.yml \
-e '{"rpc_type":"Index RPC","agave_version":"4.3.2","snapshot_url":"https://..."}'

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

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 95 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
84
Repository forks
12
7-day trend score
22

Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 19 Mar 2026, 7 months ago.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/validatorsdao/slv/slv-rpc/badge)](https://verified-skill.com/skills/validatorsdao/slv/slv-rpc)

Something wrong with this skill or its page? Tell us.