Start Building on Tenzro
Build on AI infrastructure that doesn't break when one provider does. Autonomous agents, smart contracts, and globally routed intelligence — in minutes.
Quick Start
Install the Tenzro CLI
Install the CLI tool to interact with the network and manage your node
# Install from cargo
cargo install tenzro-cli
# Or download pre-built binary from releases page
# Extract and add to your PATH
# Verify installation
tenzro-cli --versionJoin the Network
One command provisions your DID identity, MPC wallet, and hardware profile — then connects to the Tenzro testnet
# One-click join — provisions identity + wallet automatically
tenzro-cli join
# Output:
# Identity: did:tenzro:human:6dfa9f3f-39e1-48e7-8576-6e24b0d8e4ed
# Wallet: 86frghZu2NHjnYfGBFRNPta6HLCwHdd9KKdg6kproSGw
# Status: Active on testnet
# Get testnet TNZO from the faucet
curl -X POST https://api.tenzro.network/faucet \
-H "Content-Type: application/json" \
-d '{"address": "YOUR_WALLET_ADDRESS"}'
# Check balance
tenzro-cli wallet balanceFor production validator nodes, see the full documentation.
Run AI Inference
Query live AI models running on decentralized provider nodes. Pay per-token in TNZO via micropayment channels.
CLI
# List available models
tenzro-cli model list
# Chat with a model
tenzro-cli model chat --model gemma3-270m --message "Explain blockchain in one sentence"
# Serve your own model (become a provider and earn TNZO)
tenzro-cli model serve --model gemma3-270mJSON-RPC (curl)
# List available models
curl -X POST https://rpc.tenzro.network \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tenzro_listModels","params":{}}'
# Run inference
curl -X POST https://rpc.tenzro.network \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tenzro_chat",
"params": {
"model_id": "gemma3-270m",
"message": "What is the Tenzro Network?",
"max_tokens": 256
}
}'TypeScript SDK
import { TenzroClient } from '@tenzro/sdk';
const client = new TenzroClient({ rpcUrl: 'https://rpc.tenzro.network' });
// List available models
const models = await client.models.listModels();
console.log('Available models:', models.map(m => m.id));
// Run inference
const response = await client.models.chat({
model_id: 'gemma3-270m',
message: 'Explain decentralized AI in one paragraph',
max_tokens: 256,
});
console.log('Response:', response.text);
console.log('Tokens used:', response.tokens_used);
console.log('Cost (TNZO):', response.cost_tnzo);Deploy Your First Contract
Deploy a smart contract using EVM, SVM, or DAML
EVM (Solidity)
# Deploy with Foundry
forge create src/MyContract.sol:MyContract \
--rpc-url https://rpc.tenzro.network \
--private-key YOUR_PRIVATE_KEY
# Or use Hardhat
npx hardhat run scripts/deploy.js --network tenzroSVM (Solana Program)
# Build Solana program with Anchor framework
anchor build
# Deploy to Tenzro Network
anchor deploy --provider.cluster https://rpc.tenzro.networkDAML (Canton)
# Submit DAML command via CLI
tenzro-cli daml submit \
--template MyModule:MyTemplate \
--payload '{"field": "value"}'Autonomous AI Agents
Deploy agents with their own DID identity and MPC wallet. Agents can spawn sub-agents, delegate tasks, execute agentic loops using live LLM inference, and settle payments autonomously on-chain.
Register an Agent
JSON-RPC
curl -X POST https://rpc.tenzro.network \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tenzro_registerAgent",
"params": {
"name": "MyOrchestrator",
"capabilities": [
"data_analysis",
"task_delegation",
"inference"
],
"agent_type": "Orchestrator"
}
}'
# Response:
# {
# "agent_id": "agent-abc123",
# "did": "did:tenzro:machine:controller:uuid",
# "wallet": "0x...",
# "status": "Active"
# }TypeScript SDK
import { TenzroClient } from '@tenzro/sdk';
const client = new TenzroClient({
rpcUrl: 'https://rpc.tenzro.network',
});
// Register an orchestrator agent
const agent = await client.agents.registerAgent({
name: 'MyOrchestrator',
capabilities: [
'data_analysis',
'task_delegation',
'inference',
],
agent_type: 'Orchestrator',
});
console.log('Agent ID:', agent.agent_id);
console.log('DID:', agent.did);
console.log('Wallet:', agent.wallet);Spawn Sub-Agents
Orchestrators can dynamically spawn child agents. Each child inherits the parent's delegation scope and gets its own DID and MPC wallet. Maximum 50 children per parent.
JSON-RPC
# Spawn a specialist sub-agent
curl -X POST https://rpc.tenzro.network \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tenzro_spawnAgent",
"params": {
"parent_id": "agent-abc123",
"name": "DataAnalyst",
"capabilities": [
"data_analysis",
"statistical_reasoning"
]
}
}'
# Spawn more specialists
# ContentWriter: ["nlp", "content_generation"]
# Researcher: ["web_search", "summarization"]TypeScript SDK
// Spawn 3 specialist sub-agents in parallel
const [analyst, writer, researcher] = await Promise.all([
client.agents.spawnAgent({
parent_id: agent.agent_id,
name: 'DataAnalyst',
capabilities: ['data_analysis', 'statistics'],
}),
client.agents.spawnAgent({
parent_id: agent.agent_id,
name: 'ContentWriter',
capabilities: ['nlp', 'content_generation'],
}),
client.agents.spawnAgent({
parent_id: agent.agent_id,
name: 'Researcher',
capabilities: ['web_search', 'summarization'],
}),
]);
console.log('Spawned:', analyst.agent_id,
writer.agent_id, researcher.agent_id);Swarm Orchestration
Create a swarm from spawned agents and broadcast tasks to all members in parallel. Each task is dispatched concurrently with per-agent timeouts.
JSON-RPC
# Create swarm with 3 members
curl -X POST https://rpc.tenzro.network \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tenzro_createSwarm",
"params": {
"orchestrator_id": "agent-abc123",
"members": [
{"name": "DataAnalyst",
"capabilities": ["data_analysis"]},
{"name": "ContentWriter",
"capabilities": ["nlp"]},
{"name": "Researcher",
"capabilities": ["web_search"]}
],
"max_members": 10,
"parallel": true,
"task_timeout_secs": 300
}
}'
# Get swarm status
curl -X POST https://rpc.tenzro.network \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tenzro_getSwarmStatus",
"params": {"swarm_id": "SWARM_ID"}
}'
# Terminate swarm when done
curl -X POST https://rpc.tenzro.network \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 3,
"method": "tenzro_terminateSwarm",
"params": {"swarm_id": "SWARM_ID"}
}'TypeScript SDK
// Create a parallel swarm
const swarm = await client.agents.createSwarm({
orchestrator_id: agent.agent_id,
members: [
{ name: 'DataAnalyst',
capabilities: ['data_analysis'] },
{ name: 'ContentWriter',
capabilities: ['nlp'] },
{ name: 'Researcher',
capabilities: ['web_search'] },
],
parallel: true,
task_timeout_secs: 300,
});
console.log('Swarm ID:', swarm.swarm_id);
console.log('Members:', swarm.member_count);
// Check status
const status = await client.agents.getSwarmStatus(
swarm.swarm_id
);
console.log('Status:', status.status);
console.log('Members:', status.members);
// Terminate when done
await client.agents.terminateSwarm(swarm.swarm_id);Agentic Execution Loop
Run an autonomous agent that uses live LLM inference to reason through tasks, spawn helpers, and call tools iteratively until completion (max 10 steps by default).
JSON-RPC
# Run an autonomous agentic task
curl -X POST https://rpc.tenzro.network \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tenzro_runAgentTask",
"params": {
"agent_id": "agent-abc123",
"task": "Analyze the top 3 trends in AI and prepare a structured report with key insights",
"max_steps": 10,
"inference_url": "https://api.tenzro.network/chat"
}
}'
# The agent will autonomously:
# 1. Break down the task
# 2. Spawn specialist sub-agents
# 3. Delegate subtasks to each
# 4. Collect and synthesize results
# 5. Return final structured reportTypeScript SDK
// Run autonomous agentic task
const result = await client.agents.runAgentTask({
agent_id: agent.agent_id,
task: `Analyze top 3 trends in AI and prepare
a structured report with key insights`,
max_steps: 10,
inference_url: 'https://api.tenzro.network/chat',
});
console.log('Task result:', result.result);
console.log('Steps taken:', result.steps_taken);
console.log('Agents used:', result.agents_used);
// The execution loop uses OpenAI-compatible tool_calls:
// - spawn_agent → creates specialist sub-agents
// - delegate_task → assigns work to agents
// - collect_results → gathers agent outputs
// - complete → returns final synthesized resultFull End-to-End Example
Complete workflow: join network → provision identity → spawn agents → create swarm → run agentic task → settle payment.
TypeScript — Complete Agent Workflow
import { TenzroClient } from '@tenzro/sdk';
const RPC = 'https://rpc.tenzro.network';
const client = new TenzroClient({ rpcUrl: RPC });
async function runAutonomousWorkflow() {
// 1. Provision identity + wallet on Tenzro Ledger
const identity = await client.identity.participate({
name: 'MyApp-Orchestrator',
});
console.log('DID:', identity.did);
console.log('Wallet:', identity.wallet_address);
// 2. Request testnet TNZO
await fetch(`${RPC.replace('rpc', 'api')}/faucet`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ address: identity.wallet_address }),
});
// 3. Register orchestrator agent
const orchestrator = await client.agents.registerAgent({
name: 'ResearchOrchestrator',
capabilities: ['orchestration', 'task_planning'],
agent_type: 'Orchestrator',
});
// 4. Create a swarm with 3 specialists
const swarm = await client.agents.createSwarm({
orchestrator_id: orchestrator.agent_id,
members: [
{ name: 'Analyst', capabilities: ['data_analysis'] },
{ name: 'Writer', capabilities: ['content_generation'] },
{ name: 'Researcher', capabilities: ['research'] },
],
parallel: true,
});
// 5. Run agentic task (LLM loop on live model)
const task = await client.agents.runAgentTask({
agent_id: orchestrator.agent_id,
task: 'Research the latest advances in ZK proofs and write a 3-paragraph summary',
max_steps: 8,
inference_url: `${RPC.replace('rpc', 'api')}/chat`,
});
console.log('Result:', task.result);
// 6. Direct LLM inference (chat completion)
const chat = await client.models.chat({
model_id: 'gemma3-270m',
message: 'Summarize in one sentence: ' + task.result,
max_tokens: 100,
});
console.log('Summary:', chat.text);
// 7. Settle inference payment on-chain
const settlement = await client.settlement.settle({
payer_did: identity.did,
provider_address: chat.provider_address,
amount: chat.cost_tnzo,
asset: 'TNZO',
proof_type: 'Cryptographic',
});
console.log('Settlement TX:', settlement.tx_hash);
// 8. Cleanup — terminate swarm
await client.agents.terminateSwarm(swarm.swarm_id);
console.log('Swarm terminated. Workflow complete.');
}
runAutonomousWorkflow().catch(console.error);Become a Provider — Earn TNZO
Contribute compute, models, or TEE security to the network and earn TNZO per inference request, transaction, or attestation.
Model Provider
# Register as a model provider (no staking required)
tenzro-cli provider register --role model-provider
# Download a model from HuggingFace Hub
tenzro-cli model download --model gemma3-270m
# Start serving (earns TNZO per inference)
tenzro-cli model serve --model gemma3-270m
# Check earnings
tenzro-cli provider stats// TypeScript SDK — no staking required for model providers
const provider = await client.providers.register({
provider_type: 'ModelProvider',
models: ['gemma3-270m'],
endpoint: 'https://your-node.example.com',
});
// Start serving
await client.models.serveModel({
model_id: 'gemma3-270m',
provider_id: provider.provider_id,
});
// Check earnings
const stats = await client.providers.getStats(
provider.provider_id
);
console.log('Total earned:', stats.total_earned_tnzo);Validator Node
# Stake TNZO to become a validator
tenzro-cli stake --amount 10000 --role validator
# Start validator node
cargo run --bin tenzro-node -- \
--role validator \
--listen-addr /ip4/0.0.0.0/tcp/9000 \
--rpc-addr 0.0.0.0:8545
# Or with Docker
docker run -d \
-p 9000:9000 -p 8545:8545 \
-v ./data:/data \
tenzro/tenzro-node:latest \
--role validator --data-dir /data// Liquid staking (stTNZO)
const stake = await client.staking.stake({
amount: '10000',
role: 'Validator',
liquid: true, // receive stTNZO receipt token
});
console.log('Stake TX:', stake.tx_hash);
console.log('stTNZO received:', stake.sttnzo_amount);
// Unstake (7-day unbonding period)
const unstake = await client.staking.unstake({
amount: '5000',
validator_address: stake.validator_address,
});Payments & Settlement
Tenzro supports HTTP 402-based payment protocols (MPP and x402), micropayment channels for per-token billing, and native TNZO settlement on-chain.
MPP (Machine Payments Protocol)
// Create an MPP payment challenge
const challenge = await client.payments.createChallenge({
protocol: 'mpp',
amount: '0.001',
asset: 'TNZO',
resource: '/api/inference/gemma3-270m',
});
// Pay via MPP session
const payment = await client.payments.payMpp({
challenge_id: challenge.challenge_id,
payer_did: identity.did,
amount: challenge.amount,
});
console.log('Session:', payment.session_id);
console.log('Receipt:', payment.receipt_id);Native TNZO Settlement
// Direct on-chain TNZO settlement
const settlement = await client.settlement.settle({
payer_did: identity.did,
provider_address: '0xProviderAddress',
amount: '0.001',
asset: 'TNZO',
service_type: 'Inference',
proof_type: 'Cryptographic',
metadata: {
model_id: 'gemma3-270m',
tokens_used: 256,
request_id: 'req-abc123',
},
});
console.log('TX hash:', settlement.tx_hash);
console.log('Block:', settlement.block_number);
console.log('Fee:', settlement.network_fee_tnzo);MCP & A2A Protocols
Connect any MCP-compatible AI tool (Claude, Cursor, etc.) directly to Tenzro Network. Use the A2A protocol for agent-to-agent task delegation.
MCP Server (Claude / Cursor)
# Add Tenzro MCP to Claude Code
# ~/.claude/mcp.json
{
"mcpServers": {
"tenzro": {
"transport": "http",
"command": "npx", "args": ["-y", "mcp-remote", "https://mcp.tenzro.network/mcp"]
}
}
}
# Available tools (24 total):
# get_balance, create_wallet, send_transaction
# get_node_status, get_block, get_transaction
# register_identity, resolve_did, set_delegation_scope
# create_payment_challenge, verify_payment
# list_models, chat_completion, list_model_endpoints
# bridge_tokens, get_bridge_routes
# stake_tokens, register_provider, get_provider_stats// Programmatic MCP client
import { McpClient } from '@tenzro/sdk';
const mcp = new McpClient({
url: 'https://mcp.tenzro.network/mcp',
});
await mcp.connect();
// Call any MCP tool
const balance = await mcp.callTool('get_balance', {
address: '0xYourAddress',
});
const chat = await mcp.callTool('chat_completion', {
model_id: 'gemma3-270m',
message: 'Hello from MCP!',
});A2A Protocol
# Discover agent capabilities
curl https://a2a.tenzro.network/.well-known/agent.json
# Send a task to the Tenzro agent
curl -X POST https://a2a.tenzro.network/a2a \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tasks/send",
"params": {
"message": {
"role": "user",
"parts": [{
"type": "text",
"text": "Get my TNZO balance for 0x1234..."
}]
}
}
}'// A2A streaming with SSE
const response = await fetch(
'https://a2a.tenzro.network/a2a/stream',
{
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
jsonrpc: '2.0',
id: 1,
method: 'tasks/send',
params: {
message: {
role: 'user',
parts: [{
type: 'text',
text: 'Serve model gemma3-270m and get my earnings',
}],
},
},
}),
}
);
// Stream task updates via SSE
const reader = response.body?.getReader();Live Testnet Endpoints
JSON-RPC
https://rpc.tenzro.network
EVM-compatible JSON-RPC (Chain ID: 1337)
REST API
https://api.tenzro.network
Verification, status, and faucet
MCP Server
https://mcp.tenzro.network/mcp
Model Context Protocol — 24 tools
A2A Protocol
https://a2a.tenzro.network
Agent-to-Agent task delegation
Faucet
https://api.tenzro.network/faucet
100 testnet TNZO (24h cooldown)
# Verify testnet is live
curl https://rpc.tenzro.network \
-X POST -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_chainId","params":[]}'
# {"result":"0x539"} ← Chain ID 1337
curl https://api.tenzro.network/health
# {"status":"ok","block":...,"peers":...}