/shredstream
Pre-execution Solana transaction streaming via Jito ShredStream, Shyft RabbitStream, and Triton Deshred
$ npx -y skills add agiprolabs/claude-trading-skills --skill shredstream --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/shredstream
Context preview
The summary Claude sees to decide when to auto-load this skill.
Pre-execution Solana transaction streaming via Jito ShredStream, Shyft RabbitStream, and Triton Deshred
SKILL.md
shredstream.SKILL.mdname: shredstream
description: Pre-execution Solana transaction streaming via Jito ShredStream, Shyft RabbitStream, and Triton Deshred
ShredStream — Pre-Execution Solana Data
ShredStream gives you transaction data **before the validator executes the block** — typically 100-500ms earlier than standard Yellowstone gRPC. You see transaction *intent*, not confirmed results.
This is the fastest path to Solana data for time-critical trading strategies.
How It Works
Solana validators produce blocks by serializing transactions into **shreds** (~1,228 bytes each, sized for UDP MTU). Shreds propagate through Turbine (Solana's fanout protocol, 2-3 hops). ShredStream bypasses Turbine by receiving shreds **directly from leader validators** via Jito's Block Engine.
Leader Validator
│
├── Turbine (standard, 2-3 hops, 200-500ms)
│ └── Your RPC Node → Yellowstone gRPC (post-execution)
│
└── Jito Block Engine (direct)
└── ShredStream Proxy (your server)
├── UDP shreds → Your RPC/Validator (faster block building)
└── gRPC entries → Your Trading Bot (decoded transactions)What You Get vs. What You Don't
| Available (Pre-Execution) | NOT Available (Needs Execution) | |---------------------------|--------------------------------| | Transaction signatures | Success/failure status | | Account keys (pubkeys) | Balance changes (pre/post) | | Instructions (program, accounts, data) | Log messages | | Address lookup table references | Inner instructions (CPI) | | Slot number | Token balance changes | | | Compute units consumed |
**Key tradeoff**: Speed for completeness. You see what's *about to happen* but can't confirm it actually succeeded. Some transactions you see will ultimately fail.
Three Ways to Get Pre-Execution Data
| Provider | Product | Latency | Access | Cost | |----------|---------|---------|--------|------| | **Jito** | ShredStream Proxy | ~10-50ms from leader | Apply + auth keypair | Free (beta) | | **Shyft** | RabbitStream | ~15-100ms faster than gRPC | Shyft gRPC plan | From $199/mo | | **Triton** | Deshred (`SubscribeDeshred`) | ~6.3ms p50 from shred | Triton customer | ~$2,900+/mo |
See `references/providers_compared.md` for detailed comparison.
Option 1: Jito ShredStream Proxy
The most direct approach — run Jito's open-source proxy on your own server.
Get Access
1. Generate a Solana keypair: `solana-keygen new -o shred_auth.json` 2. Apply at [Jito's form](https://web.miniextensions.com/WV3gZjFwqNqITsMufIEp) with your public key 3. Wait for approval (your keypair gets whitelisted) 4. No staking requirement, free during beta
Run the Proxy
# Clone and build
git clone https://github.com/jito-labs/shredstream-proxy.git --recurse-submodules
cd shredstream-proxy
# Run with gRPC enabled (key flag: --grpc-service-port)
RUST_LOG=info cargo run --release --bin jito-shredstream-proxy -- shredstream \
--block-engine-url https://mainnet.block-engine.jito.wtf \
--auth-keypair /path/to/shred_auth.json \
--desired-regions ny,amsterdam \
--dest-ip-ports 127.0.0.1:8001 \
--grpc-service-port 7777Docker (host networking required for UDP):
docker run -d --name shredstream-proxy --rm \
--network host \
-e RUST_LOG=info \
-e BLOCK_ENGINE_URL=https://mainnet.block-engine.jito.wtf \
-e AUTH_KEYPAIR=/app/shred_auth.json \
-e DESIRED_REGIONS=ny,amsterdam \
-e DEST_IP_PORTS=127.0.0.1:8001 \
-e GRPC_SERVICE_PORT=7777 \
-v /path/to/shred_auth.json:/app/shred_auth.json \
jitolabs/jito-shredstream-proxy shredstream
Configuration
| Parameter | Description | Example | |-----------|-------------|---------| | `BLOCK_ENGINE_URL` | Jito block engine endpoint | `https://mainnet.block-engine.jito.wtf` | | `AUTH_KEYPAIR` | Path to whitelisted Solana keypair | `shred_auth.json` | | `DESIRED_REGIONS` | Max 2, comma-separated | `ny,amsterdam` | | `DEST_IP_PORTS` | Where to forward raw shreds (UDP) | `127.0.0.1:8001` | | `GRPC_SERVICE_PORT` | Enable gRPC entry streaming | `7777` | | `SRC_BIND_PORT` | Incoming shred UDP port | `20000` |
Available regions: `amsterdam`, `dublin`, `frankfurt`, `london`, `ny`, `salt-lake-city`, `singapore`, `tokyo`
Verify It's Working
# Check shreds are arriving via UDP
sudo tcpdump 'udp and dst port 20000'
# Should see many ~1200-byte packets continuously
Consume via gRPC
use jito_protos::shredstream::{
shredstream_proxy_client::ShredstreamProxyClient,
SubscribeEntriesRequest,
};
let mut client = ShredstreamProxyClient::connect("http://127.0.0.1:7777").await?;
let mut stream = client
.subscribe_entries(SubscribeEntriesRequest {})
.await?
.into_inner();
while let Some(entry) = stream.message().await? {
let entries: Vec<solana_entry::entry::Entry> =
bincode::deserialize(&entry.entries)?;
for e in &entries {
for tx in &e.transactions {
let sig = tx.signatures[0];
let msg = tx.message();
// Parse instructions, accounts, etc.
}
}
println!("Slot {}: {} entries, {} transactions",
entry.slot,
entries.len(),
entries.iter().map(|e| e.transactions.len()).sum::<usize>()
);
}Option 2: Shyft RabbitStream
**Drop-in replacement** for Yellowstone gRPC — same `SubscribeRequest` format, just a different endpoint. Easiest way to get pre-execution data without running infrastructure.
export GRPC_ENDPOINT="https://rabbitstream.ny.shyft.to"
export GRPC_TOKEN="your-shyft-x-token"
# Same code as yellowstone-grpc, just different endpoint
import grpc
endpoint = "rabbitstream.ny.shyft.to"
token = os.environ["GRPC_TOKEN"]
# ... standard Yellowstone connection code ...
# Subscribe to transactions — same filter format
request = SubscribeRequest(
transactions={
"pumpfun": SubscribeRequestFilterTransactions(
account_inRead more
name: shredstream description: Pre-execution Solana transaction streaming via Jito ShredStream, Shyft RabbitStream, and Triton Deshred
ShredStream — Pre-Execution Solana Data
ShredStream gives you transaction data **before the validator executes the block** — typically 100-500ms earlier than standard Yellowstone gRPC. You see transaction *intent*, not confirmed results.
This is the fastest path to Solana data for time-critical trading strategies.
How It Works
Solana validators produce blocks by serializing transactions into **shreds** (~1,228 bytes each, sized for UDP MTU). Shreds propagate through Turbine (Solana's fanout protocol, 2-3 hops). ShredStream bypasses Turbine by receiving shreds **directly from leader validators** via Jito's Block Engine.
Leader Validator
│
├── Turbine (standard, 2-3 hops, 200-500ms)
│ └── Your RPC Node → Yellowstone gRPC (post-execution)
│
└── Jito Block Engine (direct)
└── ShredStream Proxy (your server)
├── UDP shreds → Your RPC/Validator (faster block building)
└── gRPC entries → Your Trading Bot (decoded transactions)What You Get vs. What You Don't
| Available (Pre-Execution) | NOT Available (Needs Execution) | |---------------------------|--------------------------------| | Transaction signatures | Success/failure status | | Account keys (pubkeys) | Balance changes (pre/post) | | Instructions (program, accounts, data) | Log messages | | Address lookup table references | Inner instructions (CPI) | | Slot number | Token balance changes | | | Compute units consumed |
**Key tradeoff**: Speed for completeness. You see what's *about to happen* but can't confirm it actually succeeded. Some transactions you see will ultimately fail.
Three Ways to Get Pre-Execution Data
| Provider | Product | Latency | Access | Cost | |----------|---------|---------|--------|------| | **Jito** | ShredStream Proxy | ~10-50ms from leader | Apply + auth keypair | Free (beta) | | **Shyft** | RabbitStream | ~15-100ms faster than gRPC | Shyft gRPC plan | From $199/mo | | **Triton** | Deshred (`SubscribeDeshred`) | ~6.3ms p50 from shred | Triton customer | ~$2,900+/mo |
See `references/providers_compared.md` for detailed comparison.
Option 1: Jito ShredStream Proxy
The most direct approach — run Jito's open-source proxy on your own server.
Get Access
1. Generate a Solana keypair: `solana-keygen new -o shred_auth.json` 2. Apply at [Jito's form](https://web.miniextensions.com/WV3gZjFwqNqITsMufIEp) with your public key 3. Wait for approval (your keypair gets whitelisted) 4. No staking requirement, free during beta
Run the Proxy
# Clone and build
git clone https://github.com/jito-labs/shredstream-proxy.git --recurse-submodules
cd shredstream-proxy
# Run with gRPC enabled (key flag: --grpc-service-port)
RUST_LOG=info cargo run --release --bin jito-shredstream-proxy -- shredstream \
--block-engine-url https://mainnet.block-engine.jito.wtf \
--auth-keypair /path/to/shred_auth.json \
--desired-regions ny,amsterdam \
--dest-ip-ports 127.0.0.1:8001 \
--grpc-service-port 7777Docker (host networking required for UDP):
docker run -d --name shredstream-proxy --rm \ --network host \ -e RUST_LOG=info \ -e BLOCK_ENGINE_URL=https://mainnet.block-engine.jito.wtf \ -e AUTH_KEYPAIR=/app/shred_auth.json \ -e DESIRED_REGIONS=ny,amsterdam \ -e DEST_IP_PORTS=127.0.0.1:8001 \ -e GRPC_SERVICE_PORT=7777 \ -v /path/to/shred_auth.json:/app/shred_auth.json \ jitolabs/jito-shredstream-proxy shredstream
Configuration
| Parameter | Description | Example | |-----------|-------------|---------| | `BLOCK_ENGINE_URL` | Jito block engine endpoint | `https://mainnet.block-engine.jito.wtf` | | `AUTH_KEYPAIR` | Path to whitelisted Solana keypair | `shred_auth.json` | | `DESIRED_REGIONS` | Max 2, comma-separated | `ny,amsterdam` | | `DEST_IP_PORTS` | Where to forward raw shreds (UDP) | `127.0.0.1:8001` | | `GRPC_SERVICE_PORT` | Enable gRPC entry streaming | `7777` | | `SRC_BIND_PORT` | Incoming shred UDP port | `20000` |
Available regions: `amsterdam`, `dublin`, `frankfurt`, `london`, `ny`, `salt-lake-city`, `singapore`, `tokyo`
Verify It's Working
# Check shreds are arriving via UDP sudo tcpdump 'udp and dst port 20000' # Should see many ~1200-byte packets continuously
Consume via gRPC
use jito_protos::shredstream::{
shredstream_proxy_client::ShredstreamProxyClient,
SubscribeEntriesRequest,
};
let mut client = ShredstreamProxyClient::connect("http://127.0.0.1:7777").await?;
let mut stream = client
.subscribe_entries(SubscribeEntriesRequest {})
.await?
.into_inner();
while let Some(entry) = stream.message().await? {
let entries: Vec<solana_entry::entry::Entry> =
bincode::deserialize(&entry.entries)?;
for e in &entries {
for tx in &e.transactions {
let sig = tx.signatures[0];
let msg = tx.message();
// Parse instructions, accounts, etc.
}
}
println!("Slot {}: {} entries, {} transactions",
entry.slot,
entries.len(),
entries.iter().map(|e| e.transactions.len()).sum::<usize>()
);
}Option 2: Shyft RabbitStream
**Drop-in replacement** for Yellowstone gRPC — same `SubscribeRequest` format, just a different endpoint. Easiest way to get pre-execution data without running infrastructure.
export GRPC_ENDPOINT="https://rabbitstream.ny.shyft.to" export GRPC_TOKEN="your-shyft-x-token"
# Same code as yellowstone-grpc, just different endpoint
import grpc
endpoint = "rabbitstream.ny.shyft.to"
token = os.environ["GRPC_TOKEN"]
# ... standard Yellowstone connection code ...
# Subscribe to transactions — same filter format
request = SubscribeRequest(
transactions={
"pumpfun": SubscribeRequestFilterTransactions(
account_inA comprehensive collection of 67 ready-to-use trading, DeFi, and quantitative finance Agent Skills. Works with Claude Code, Cursor, Codex, Gemini CLI, and 30+ other tools.
Repo: agiprolabs/claude-trading-skills
Other skills on trading-skills.
- /backtrader
Event-driven backtesting with bar-by-bar execution, complex order types, multiple analyzers, and custom indicators
Open skill - /birdeye-api
Solana token market data via Birdeye — prices, OHLCV, trades, token metadata, security checks, and trader activity
Open skill - /coingecko-api
Broad crypto market data from CoinGecko covering 13,000+ tokens. Global market stats, historical price data going back years, exchange volumes, trending tokens, and category filters. Best for macro analysis and long-term historical data.
Open skill - /cointegration-analysis
Cointegration testing for pairs trading using Engle-Granger, Johansen, and rolling stability analysis
Open skill - /copy-trading
Wallet evaluation, monitoring, and copy-trade strategy design for Solana DEX trading
Open skill - /correlation-analysis
Cross-asset correlation analysis including rolling correlation, hierarchical clustering, tail dependence, and regime-dependent correlation
Open skill

