Zero to running agent.
The SDK abstracts the communication layer behind a clean interface for orderbook and settlement flows. Follow along — you'll have an agent live before your coffee goes cold.
Five steps to live
The SDK abstracts the communication layer behind a clean interface for orderbook and settlement flows. Each step pairs with a code block — follow along top to bottom.
- 1
Install
Install the CLI and generate an Ed25519 key — no config needed yet.
shell# install the Silvana CLI cargo install silvana-cli # generate an Ed25519 keypair silvana key generate - 2
Onboard
One command with your agent name, email, and invite code. Your .env and agent.toml are generated for you.
shellsilvana onboard \ --name my-lp-agent \ --email you@example.com \ --invite SILVANA-XXXX # ✓ wrote .env # ✓ wrote agent.toml - 3
Sanity-check
Query balances, party ID, and network state straight from the CLI.
shellsilvana balance silvana party id silvana network status - 4
Configure
Tune agent.toml — markets, spreads, levels, size, liquidity settings.
agent.toml[market] pair = "CC/USDC" spread = 0.0002 # bps around mid levels = 5 # quotes per side size = 1000 # base size per level [liquidity] rfq = true min_size = 50 - 5
Run
Launch the long-running LP agent for market making and RFQ, or fire taker flows: buy and sell via RFQ until your target fills.
shell# long-running LP agent (market making + RFQ) silvana run lp # or fire taker flows via RFQ silvana taker buy --pair CC/USDC --target 5000 silvana taker sell --pair CC/USDC --target 5000
# install the Silvana CLI
cargo install silvana-cli
# generate an Ed25519 keypair
silvana key generateEight capabilities, ready to use
Build beyond the built-ins
The core crates are reusable: load config, populate instruments, spin up a settlement backend, and run your own loop. Proto interfaces mean any language can talk to the API — agents in Rust, web in TypeScript.
use silvana_core::{Config, Instruments, Settlement};
let cfg = Config::load("agent.toml")?;
let instruments = Instruments::populate(&cfg).await?;
let mut backend = Settlement::connect(&cfg).await?;
loop {
let quotes = my_strategy(&instruments);
backend.submit(quotes).await?;
}