Overview
sinker is a single binary that starts the transaction sidecar and provides developer commands for inspecting its live state. No separate installation required — build once, use everywhere.
Sidecar commands
sinker up
Start the full stack — sidecar and AI agent together in a single terminal. Both processes share stdout, with agent lines prefixed by [ AGENT ] so the streams stay readable.
sinker start only when you need the sidecar without the agent (e.g. bypass mode, debugging the sidecar in isolation).
sinker start
Start the sidecar in agent mode. The AI agent reads the live tip oracle, decides the optimal tip, and submits your queued transactions as Jito bundles.
sinker start --bypass
Bypass the AI agent and submit transactions at a fixed tip (default: 10,000 lamports). Useful for testing the frontend → sidecar → Jito path without waiting for the agent.
| Flag | Description |
|---|---|
--bypass | Skip the AI agent, submit immediately on each tx_enqueued event |
--tip <lamports> | Fixed tip amount in lamports (default: 10000). Only used with --bypass. |
sinker agent
Start the TypeScript AI agent in a separate process. Runs npm run dev inside the agents/ directory (override with AGENT_DIR env var).
sinker web
Start the Next.js web frontend. Runs npm run dev inside the web/ directory (override with WEB_DIR env var).
sinker smoke
Run the stream_smoke integration test — connects to Yellowstone, waits for a Jito leader window, submits one bundle, and polls until finalization.
Inspect commands
Inspect commands query a running sidecar athttp://localhost:{API_PORT} (default 7777). Start the sidecar first with sinker start.
sinker status
Print a summary of the current sidecar state: slot, leader identity, tip floor (p50/p75), and pending queue depth.
sinker tip
Print the full tip floor percentile table.
sinker queue
Print the pending transaction queue contents with age and priority.
sinker lifecycle
Print recent bundle lifecycle history. Shows the most recent 10 entries by default.
| Flag | Description |
|---|---|
--last N / -l N | Number of entries to show (default: 10) |
sinker bundle <id>
Print the full JSON lifecycle entry for a specific bundle.
Policy commands
sinker policy gates what the AI agent is allowed to do — tip caps, retry limits, queue depth, and throughput controls. Settings persist in sinker.policy.json between restarts.
Policy reference →
Full reference for all 10 policy keys and 7 sub-commands.
Environment variables
| Variable | Default | Description |
|---|---|---|
YELLOWSTONE_ENDPOINT | required | Yellowstone gRPC endpoint |
YELLOWSTONE_X_TOKEN | — | Yellowstone auth token (if required) |
RPC_URL | required | Solana RPC URL (mainnet Helius recommended) |
JITO_BLOCK_ENGINE_URL | mainnet.block-engine.jito.wtf | Jito block engine |
JITO_UUID | — | Jito auth UUID for higher rate limits |
KEYPAIR_PATH | ~/.config/solana/id.json | Path to signing keypair |
API_PORT | 7777 | Sidecar API port |
BYPASS_AGENT | 0 | Set 1 to enable bypass mode via env |
BYPASS_TIP_LAMPORTS | 10000 | Fixed tip for bypass mode (lamports) |
AGENT_DIR | ../agents | Directory for sinker agent |
WEB_DIR | ../web | Directory for sinker web |
SINKER_POLICY_FILE | ./sinker.policy.json | Custom path for the policy file |