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 (Synapse) together in a single terminal. Both processes share stdout; agent lines are prefixed with [ AGENT ] to keep the streams readable.
/internal/agent/presence on startup, registers its model/provider, and begins driving submissions.
sinker start
Start the sidecar only — without spawning the AI agent. The sidecar streams slots, maintains the tip oracle and leader buffer, and exposes the HTTP API. The Synapse agent must be started separately (e.g. sinker agent in another terminal).
cortex (LLM on every submission). Set AGENT_DECISION_MODE=reflex in .env to boot in reflex mode, or flip at runtime via POST /internal/mode.
sinker start --bypass
Skip the AI agent entirely. Submits transactions at a fixed tip the instant they are enqueued. Useful for testing the frontend → sidecar → Jito path without the AI layer.
| Flag | Description |
|---|---|
--bypass | Disable Synapse; submit immediately on each tx_enqueued event |
--tip <lamports> | Fixed tip in lamports (default: 10000). Only used with --bypass. |
sinker agent
Start the Synapse TypeScript 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 dashboard. 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 or sinker up.
sinker status
Print a summary of the current sidecar state: slot, leader identity, whether the current leader is running Jito, tip floor (p50/p75), active decision mode, 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.
reflex / cortex) and whether the Reflex path escalated to the LLM.
| 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, including the AI decision trace, commitment timeline (submitted → processed → confirmed → finalized), tip floor at submit time, and all transaction signatures.
Policy commands
sinker policy gates what the Synapse 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.
The Synapse AI layer
Sinker’s AI layer — Synapse — is the decision junction that evaluates each transaction cycle and routes it to one of two tiers:| Tier | Trigger | Behaviour | Measured latency |
|---|---|---|---|
| Reflex | Every cycle (if AGENT_DECISION_MODE=reflex) | Deterministic fast-path: reads tip oracle, applies policy, submits. Escalates to the LLM only on hard cases (stale tip, fee rejection, escalation). | ~374 ms decision |
| Cortex | Every cycle (default) | LLM called on every submission. Full reasoning trace attached to the lifecycle entry. Highest accuracy; slower. | ~4,200 ms decision |
Switching modes at runtime
Agent presence
The Synapse agent keeps a persistent SSE connection open to/internal/agent/presence. When it connects, it registers its model and provider. Check agent status:
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 |
AGENT_DECISION_MODE | cortex | Boot decision tier: cortex or reflex |
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 |
LIFECYCLE_PATH | ./lifecycle.jsonl | Path for the bundle audit log |