Agent skill

Jito Bundles

by agiprolabs in agiprolabs/claude-trading-skills

Jito bundle submission for MEV protection on Solana — bundle building, tip strategies, block engine endpoints, and landing rate optimization

MITAuto-check passed

Install Jito Bundles

skills CLI
$ npx skills add agiprolabs/claude-trading-skills --skill jito-bundles -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install agiprolabs/claude-trading-skills jito-bundles --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/agiprolabs/claude-trading-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/jito-bundles .claude/skills/jito-bundles && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
jito-bundles
GitHub stars
410
Token cost
~2.7k tokens
SKILL.md length
698 words
Files
6 (incl. scripts, references)
Skills in repo
68
Repo updated
First seen
Licence
MIT

At a glance

Jito bundle submission for MEV protection on Solana — bundle building, tip strategies, block engine endpoints, and landing rate optimization

  • Works in 5 steps: Multi-region submission: Send the same… → Fresh blockhash: Use getLatestBlockhash… → Retry with backoff: If a bundle doesn't… → …
  • SKILL.md covers When to Use Bundles, Core Concepts, API Methods and Bundle Construction Pattern, plus 5 more sections
  • Runs Python scripts from its folder; calls bundle; reaches mainnet.block-engine.jito.wtf and amsterdam.block-engine.jito.wtf

What it does

Jito Bundles is an agent skill from agiprolabs/claude-trading-skills. Jito bundle submission for MEV protection on Solana — bundle building, tip strategies, block engine endpoints, and landing rate optimization

Its SKILL.md is about 2.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 7 other files, including scripts and reference files (for example `references/best_practices.md`, `references/bundle_api.md` and `references/tip_strategies.md`).

It works with Solana. The repository describes itself as: 68 trading, DeFi, and quantitative finance Agent Skills. Works with Claude Code, Cursor, Codex, Gemini CLI, and 30+ other tools. The licence is MIT.

Example prompts

  • “/jito-bundles”

Requirements

  • Python 3

Workflow steps

5 steps, taken from the first numbered list in SKILL.md.

  1. Multi-region submission: Send the same bundle to multiple block engines simultaneously. The first to reach the current leader wins.
  2. Fresh blockhash: Use getLatestBlockhash with confirmed commitment immediately before building. Stale blockhashes are the #1 cause of…
  3. Retry with backoff: If a bundle doesn't land within 2-3 seconds, rebuild with a fresh blockhash and resubmit. Do NOT resubmit with the…
  4. Adequate tipping: Under-tipped bundles are deprioritized. Monitor the network's tip distribution and tip at or above the 50th percentile…
  5. Minimal bundle size: Fewer transactions = less simulation time = higher landing rate. Use single-transaction bundles when possible.

What it can do on your machine

Read from SKILL.md and the folder at commit 981e1d7. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 2 files in scripts/ (Python), which the agent can run.

    Shell commands in SKILL.md call:

    • bundle

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • mainnet.block-engine.jito.wtf
    • amsterdam.block-engine.jito.wtf
    • frankfurt.block-engine.jito.wtf
    • tokyo.block-engine.jito.wtf

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Jito Bundles loads about 2.7k tokens when it runs, and up to ~8.2k if it reads all its reference files. Until then it costs about 38 tokens; SKILL.md has 698 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~38
When it runs · the whole SKILL.md, loaded when a task matches
~2.7k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~8.2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from agiprolabs/claude-trading-skills at commit 981e1d7, republished under its MIT licence (© agiprolabs). 698 words, ~2,696 tokens.

Download SKILL.mdSave it as .claude/skills/jito-bundles/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.
name
jito-bundles
description
Jito bundle submission for MEV protection on Solana — bundle building, tip strategies, block engine endpoints, and landing rate optimization

Jito Bundle Submission for Solana

Jito bundles allow you to submit up to 5 Solana transactions that execute atomically — either all land in the same slot or none do. This is the primary mechanism for MEV protection and competitive transaction execution on Solana. Approximately 85%+ of Solana validators run the Jito-modified client, making bundles the standard for reliable, front-run-resistant execution.

EXECUTION SKILL — SAFETY WARNING: Submitting bundles spends real SOL on tips. Always test with --demo mode first. Never submit bundles with real funds without explicit confirmation. Default to simulation/dry-run in all scripts and examples.

When to Use Bundles

ScenarioUse Bundle?Why
Swap on illiquid tokenYesPrevents sandwich attacks
Multi-step arbitrageYesAtomic execution prevents partial fills
LiquidationYesCompetitive — tip determines priority
Simple SOL transferNoPriority fees are cheaper and sufficient
Time-insensitive swapMaybeBundles cost tips; priority fees may suffice
NFT mint / competitive actionYesGuarantees ordering within the slot

Core Concepts

Bundle Anatomy

A Jito bundle is a JSON-RPC request containing 1-5 base58-encoded signed transactions. The transactions execute sequentially and atomically within a single slot.

Bundle = [Tx1, Tx2, ..., TxN]  (N <= 5)

- All transactions must be signed
- Transactions execute in order: Tx1 → Tx2 → ... → TxN
- If ANY transaction fails, the ENTIRE bundle is dropped
- The tip instruction goes in the LAST transaction (last instruction)
- Bundle has ~2 slots (~800ms) to land before expiry
Tip Mechanism

Tips are SOL transfers to one of Jito's 8 tip accounts. The tip incentivizes validators to include your bundle.

python
# Tip is a standard SOL transfer instruction
tip_instruction = transfer(
    from_pubkey=your_wallet,
    to_pubkey=tip_account,      # One of 8 Jito tip accounts
    lamports=tip_amount          # Tip in lamports (1 SOL = 1e9 lamports)
)
# Add as the LAST instruction of the LAST transaction in the bundle

Tip accounts are fetched dynamically via getTipAccounts. Rotate through them to distribute load.

Block Engine Endpoints

Jito operates geographically distributed block engines. Choose the one closest to your infrastructure:

RegionEndpoint
New Yorkhttps://mainnet.block-engine.jito.wtf
Amsterdamhttps://amsterdam.block-engine.jito.wtf
Frankfurthttps://frankfurt.block-engine.jito.wtf
Tokyohttps://tokyo.block-engine.jito.wtf

All endpoints accept JSON-RPC over HTTPS on port 443. The /api/v1/bundles path handles bundle operations.

API Methods

sendBundle

Submit a bundle of up to 5 transactions.

python
import httpx

BLOCK_ENGINE = "https://mainnet.block-engine.jito.wtf"

payload = {
    "jsonrpc": "2.0",
    "id": 1,
    "method": "sendBundle",
    "params": [
        [tx1_base58, tx2_base58],  # List of base58-encoded signed txs
    ]
}

resp = httpx.post(f"{BLOCK_ENGINE}/api/v1/bundles", json=payload)
data = resp.json()
bundle_id = data["result"]  # UUID string
getBundleStatuses

Check the landing status of submitted bundles (up to 5 bundle IDs per request).

python
payload = {
    "jsonrpc": "2.0",
    "id": 1,
    "method": "getBundleStatuses",
    "params": [[bundle_id]]
}
resp = httpx.post(f"{BLOCK_ENGINE}/api/v1/bundles", json=payload)
statuses = resp.json()["result"]["value"]
# Each status: {bundle_id, status, slot, transactions: [{signature, ...}]}
# status: "Invalid", "Pending", "Failed", "Landed"
getTipAccounts

Fetch the current list of Jito tip accounts.

python
payload = {
    "jsonrpc": "2.0",
    "id": 1,
    "method": "getTipAccounts",
    "params": []
}
resp = httpx.post(f"{BLOCK_ENGINE}/api/v1/bundles", json=payload)
tip_accounts = resp.json()["result"]  # List of 8 base58 pubkeys
getInflightBundleStatuses

Check status of bundles that haven't landed yet (in-flight).

python
payload = {
    "jsonrpc": "2.0",
    "id": 1,
    "method": "getInflightBundleStatuses",
    "params": [[bundle_id]]
}
resp = httpx.post(f"{BLOCK_ENGINE}/api/v1/bundles", json=payload)
# status: "Pending", "Failed", "Landed"

Bundle Construction Pattern

A typical bundle for a protected swap:

python
from solders.transaction import VersionedTransaction
from solders.message import MessageV0
from solders.instruction import Instruction
from solders.system_program import transfer, TransferParams
from solders.pubkey import Pubkey
import random

def build_protected_swap_bundle(
    swap_ix: Instruction,
    payer: Pubkey,
    tip_lamports: int,
    tip_accounts: list[str],
    recent_blockhash: str,
) -> list[VersionedTransaction]:
    """Build a 1-tx bundle: swap + tip in the same transaction.

    For simple swaps, a single-transaction bundle is sufficient.
    The tip instruction is appended as the last instruction.
    """
    # Pick a random tip account
    tip_account = Pubkey.from_string(random.choice(tip_accounts))

    # Tip instruction
    tip_ix = transfer(TransferParams(
        from_pubkey=payer,
        to_pubkey=tip_account,
        lamports=tip_lamports,
    ))

    # Build transaction with swap + tip
    msg = MessageV0.try_compile(
        payer=payer,
        instructions=[swap_ix, tip_ix],
        address_lookup_table_accounts=[],
        recent_blockhash=recent_blockhash,
    )
    tx = VersionedTransaction(msg, [keypair])
    return [tx]

Tip Sizing Guide

ScenarioTip Range (lamports)Tip Range (SOL)
Normal swap (low urgency)1,000 - 10,0000.000001 - 0.00001
Normal swap (standard)10,000 - 50,0000.00001 - 0.00005
Competitive action (arb, liquidation)50,000 - 500,0000.00005 - 0.0005
Highly competitive (NFT mint, MEV)500,000 - 5,000,0000.0005 - 0.005
Emergency (must land this slot)5,000,000+0.005+

Dynamic tip calculation based on recent tip levels:

python
def calculate_dynamic_tip(
    base_tip: int = 10_000,
    urgency_multiplier: float = 1.0,
    recent_tip_percentile_50: int = 15_000,
) -> int:
    """Calculate tip based on urgency and recent network tips.

    Args:
        base_tip: Minimum tip in lamports.
        urgency_multiplier: 1.0 = normal, 2.0 = urgent, 5.0 = critical.
        recent_tip_percentile_50: Median tip from recent bundles.

    Returns:
        Tip amount in lamports.
    """
    dynamic_tip = max(base_tip, int(recent_tip_percentile_50 * urgency_multiplier))
    # Cap at 0.01 SOL to prevent accidents
    return min(dynamic_tip, 10_000_000)

Common Errors and Fixes

ErrorCauseFix
Bundle dropped (slot expired)Bundle didn't land within 2 slotsRetry with fresh blockhash; consider higher tip
Transaction simulation failedA tx in the bundle would fail on-chainSimulate each tx individually to find the failing one
Bundle already processedDuplicate bundle IDExpected on retry; check status instead
Rate limitedToo many requests to block engineBack off; rotate between block engine endpoints
Invalid transactionMalformed or unsigned transactionVerify all txs are signed and base58-encoded
Blockhash not foundStale blockhashUse getLatestBlockhash with finalized commitment
Show full SKILL.md (236 more words)Show less

Landing Rate Optimization

Strategies to maximize bundle landing probability:

  1. Multi-region submission: Send the same bundle to multiple block engines simultaneously. The first to reach the current leader wins.

  2. Fresh blockhash: Use getLatestBlockhash with confirmed commitment immediately before building. Stale blockhashes are the #1 cause of dropped bundles.

  3. Retry with backoff: If a bundle doesn't land within 2-3 seconds, rebuild with a fresh blockhash and resubmit. Do NOT resubmit with the same blockhash.

  4. Adequate tipping: Under-tipped bundles are deprioritized. Monitor the network's tip distribution and tip at or above the 50th percentile for your urgency level.

  5. Minimal bundle size: Fewer transactions = less simulation time = higher landing rate. Use single-transaction bundles when possible.

python
async def submit_with_retry(
    bundle_txs: list[str],
    endpoints: list[str],
    max_retries: int = 3,
) -> str | None:
    """Submit bundle to multiple endpoints with retry logic.

    Returns bundle_id if submitted, None if all retries exhausted.
    """
    for attempt in range(max_retries):
        # Submit to all endpoints in parallel
        async with httpx.AsyncClient() as client:
            tasks = [
                client.post(
                    f"{ep}/api/v1/bundles",
                    json={
                        "jsonrpc": "2.0", "id": 1,
                        "method": "sendBundle",
                        "params": [bundle_txs],
                    },
                    timeout=5.0,
                )
                for ep in endpoints
            ]
            # Process first successful response
            for resp in asyncio.as_completed(tasks):
                result = (await resp).json()
                if "result" in result:
                    return result["result"]

        # Wait before retry with fresh blockhash
        await asyncio.sleep(0.5 * (attempt + 1))
    return None

Safety Checklist (Execution)

Before submitting any bundle with real funds:

  • Simulated all transactions individually via simulateTransaction
  • Verified tip amount is reasonable (not accidentally SOL instead of lamports)
  • Confirmed blockhash is fresh (< 60 seconds old)
  • Verified all transactions are properly signed
  • Checked wallet balance covers all transaction costs + tip
  • Tested with devnet or --demo mode first
  • Set maximum tip cap to prevent accidental overpayment

Files

References
  • references/bundle_api.md — Complete JSON-RPC API reference with request/response schemas and error codes
  • references/tip_strategies.md — Tip calculation strategies, dynamic tipping, cost optimization
  • references/best_practices.md — Bundle construction patterns, landing rate optimization, common pitfalls
Scripts
  • scripts/build_bundle.py — Bundle construction with tip instruction; --demo mode builds but does not submit
  • scripts/check_bundle_status.py — Bundle status checking and tip account fetching; --demo mode uses mock responses

© agiprolabs, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 5 other files (scripts, references) in skills/jito-bundles of agiprolabs/claude-trading-skills.

  • SKILL.md
  • references/best_practices.md
  • references/bundle_api.md
  • references/tip_strategies.md
  • scripts/build_bundle.py
  • scripts/check_bundle_status.py

Open the folder on GitHubat commit 981e1d7

Compare with similar skills

Jito Bundles next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Jito Bundles compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Jito Bundles this skillagiprolabs/claude-trading-skills410—~2.7kAutomated safety check: PassMIT
Solana Devsolana-foundation/solana-dev-skill573—~3.8kAutomated safety check: PassMIT
Meme Coin Security Auditawarexone/Agentic-Bug-Hunter5.3k1 repos~2.4kAutomated safety check: PassMIT
Swapper Depositswapperfinance/swapper-toolkit852—~1.8kAutomated safety check: PassMIT
PNP Prediction Markets on Solanainternet-court/internet-court-skill6.6k—~7.5kAutomated safety check: NotesMIT
Minara Crypto Trading and WalletMinara-AI/minara-skills362—~5.7kAutomated safety check: PassNone

Similar skills

  • Solana Dev

    solana-foundation/solana-dev-skill

    A skill your agent uses when user asks to "build a Solana dapp", "write an Anchor program", "create a token", "debug Solana errors", "set up wallet connection", "test my Solana program", "fuzz my…

    573 GitHub stars~3.8k tokensUpdated 2 days ago
    Backend & APIsAuto-check passed
  • Meme Coin Security Audit

    awarexone/Agentic-Bug-Hunter

    Screens EVM and Solana meme coins for rug pull signs such as hidden mint, honeypot logic and fee tricks, starting with fast kill signals before any code review.

    5.3k GitHub starsUsed in 1 repo~2.4k tokens
    SecurityAuto-check passed
  • Swapper Deposit

    swapperfinance/swapper-toolkit

    Deposit and bridge funds into a wallet or protocol using Swapper Finance.

    852 GitHub stars~1.8k tokensUpdated 6 mo ago
    Business, Finance & HRAuto-check passed
  • PNP Prediction Markets on Solana

    internet-court/internet-court-skill

    Creates, trades and settles permissionless prediction markets on Solana with any SPL token as collateral, including social-media and custom-oracle markets.

    6.6k GitHub stars~7.5k tokensUpdated 1 mo ago
    Business, Finance & HRAuto-check: notes
  • Minara Crypto Trading and Wallet

    Minara-AI/minara-skills

    Drives the Minara CLI for crypto swaps, perps, limit orders, wallet transfers, deposits and withdrawals, plus AI market analysis.

    362 GitHub stars~5.7k tokensUpdated 24 days ago
    Business, Finance & HRAuto-check passed
  • Manifest

    Bonasa-Tech/manifest

    A skill your agent uses when building, debugging, or integrating with the Manifest DEX on Solana, especially for TypeScript SDK usage, transaction construction with ManifestClient, market state…

    158 GitHub stars~478 tokensUpdated yesterday
    DevelopmentAuto-check passed

More from agiprolabs/claude-trading-skills

All 68 skills in this repo
  • Backtrader

    agiprolabs/claude-trading-skills

    Event-driven backtesting with bar-by-bar execution, complex order types, multiple analyzers, and custom indicators

    410 GitHub stars~2.4k tokensUpdated 1 mo ago
    Auto-check passed
  • Birdeye API

    agiprolabs/claude-trading-skills

    Solana token market data via Birdeye — prices, OHLCV, trades, token metadata, security checks, and trader activity

    410 GitHub stars~1.8k tokensUpdated 1 mo ago
    Auto-check passed
  • Coingecko API

    agiprolabs/claude-trading-skills

    Broad crypto market data from CoinGecko covering 13,000+ tokens.

    410 GitHub stars~1.6k tokensUpdated 1 mo ago
    Auto-check passed
  • Cointegration Analysis

    agiprolabs/claude-trading-skills

    Cointegration testing for pairs trading using Engle-Granger, Johansen, and rolling stability analysis

    410 GitHub stars~2.1k tokensUpdated 1 mo ago
    Auto-check passed
  • Copy Trading

    agiprolabs/claude-trading-skills

    Wallet evaluation, monitoring, and copy-trade strategy design for Solana DEX trading

    410 GitHub stars~2.4k tokensUpdated 1 mo ago
    Auto-check passed
  • Correlation Analysis

    agiprolabs/claude-trading-skills

    Cross-asset correlation analysis including rolling correlation, hierarchical clustering, tail dependence, and regime-dependent correlation

    410 GitHub stars~2.4k tokensUpdated 1 mo ago
    Auto-check passed

Works with

Questions about Jito Bundles

What does Jito Bundles do?

Jito bundle submission for MEV protection on Solana — bundle building, tip strategies, block engine endpoints, and landing rate optimization. Jito Bundles is an agent skill from agiprolabs/claude-trading-skills.

How do I install Jito Bundles in Claude Code?

Run `npx skills add agiprolabs/claude-trading-skills --skill jito-bundles -a claude-code`. Or copy the skill folder (skills/jito-bundles in agiprolabs/claude-trading-skills) into .claude/skills/jito-bundles in your project. Claude Code loads it when a task matches its description.

How do I install Jito Bundles in Codex?

Run `npx skills add agiprolabs/claude-trading-skills --skill jito-bundles -a codex`. Or copy the skill folder (skills/jito-bundles in agiprolabs/claude-trading-skills) into .agents/skills/jito-bundles in your project. Codex loads it when a task matches its description.

Can I use Jito Bundles in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add agiprolabs/claude-trading-skills --skill jito-bundles -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/jito-bundles, .gemini/skills/jito-bundles, .github/skills/jito-bundles and .opencode/skills/jito-bundles in your project.

What does Jito Bundles need to run?

Going by SKILL.md and its folder, Jito Bundles needs Python for the scripts in its folder and the command-line tools its instructions call (bundle). Our summary lists: Python 3.

Does Jito Bundles access the network?

SKILL.md names 4 domains. In commands or code: mainnet.block-engine.jito.wtf, amsterdam.block-engine.jito.wtf, frankfurt.block-engine.jito.wtf and tokyo.block-engine.jito.wtf; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.

Is Jito Bundles safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Jito Bundles use?

Jito Bundles is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Jito Bundles use?

About 2.7k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 5.5k tokens, read only when the agent opens those files.

What are the alternatives to Jito Bundles?

Skills that share tags, products or a category with Jito Bundles: Solana Dev (solana-foundation/solana-dev-skill, 573 stars), Meme Coin Security Audit (awarexone/Agentic-Bug-Hunter, 5.3k stars), Swapper Deposit (swapperfinance/swapper-toolkit, 852 stars) and PNP Prediction Markets on Solana (internet-court/internet-court-skill, 6.6k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Jito Bundles?

agiprolabs (a GitHub user) maintains it in agiprolabs/claude-trading-skills, which has 410 GitHub stars. The repository holds 68 skills in this directory. The repository was last updated on September 3, 2026.

Source: agiprolabs/claude-trading-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.