Configuration
Complete reference for configuring AGENIUM agents.
Overview
AGENIUM can be configured via:
- Constructor options (programmatic)
- Environment variables
- Global configuration API
Agent Configuration
Basic Configuration
import { createAgent } from 'agenium';
const agent = createAgent('myagent', {
// Core
persistence: true,
dataDir: './data',
listenPort: 8443,
// DNS
dnsServer: '185.204.169.26',
// Timeouts (flat structure)
connectionTimeoutMs: 10_000,
requestTimeoutMs: 30_000,
// Capabilities
capabilities: ['messaging', 'streaming']
});Full Configuration
const agent = createAgent('myagent', {
// === Core Settings ===
agentName: 'myagent',
persistence: true,
dataDir: './data',
listenPort: 8443,
historyDepth: 100,
// === DNS Settings ===
dnsServer: '185.204.169.26',
bugReportServer: 'https://bugs.agenium.local',
// === Timeouts (flat) ===
connectionTimeoutMs: 10_000, // Connection timeout
requestTimeoutMs: 30_000, // Request/response timeout
// === Capabilities ===
capabilities: [
'messaging',
'streaming',
'file-transfer'
]
});Configuration Options
Core Settings
persistence
- Type:
boolean - Default:
true - Description: Enable SQLite persistence for sessions and outbox
persistence: true // Recommended for productiondataDir
- Type:
string - Default:
'./data' - Description: Directory for SQLite databases and keys
dataDir: '/var/lib/agenium'Supports tilde expansion:
dataDir: '~/.agenium/data' // Expands to /home/user/.agenium/datalistenPort
- Type:
number - Default:
8443 - Description: Port for incoming connections
listenPort: 8443 // Standard HTTPS alternate portDNS Settings
dnsServer
- Type:
string - Default:
'185.204.169.26' - Description: DNS server address for agent resolution (port 3000, HTTP)
dnsServer: '185.204.169.26'Capabilities
capabilities
- Type:
string[] - Default:
['messaging'] - Description: Features supported by this agent
capabilities: [
'messaging', // Request/response messaging
'streaming', // Server-sent events
'file-transfer', // Binary file transfer
'pubsub', // Publish/subscribe
'rpc' // Remote procedure calls
]Standard capabilities:
messaging- Basic request/responsestreaming- Real-time event streamsfile-transfer- Binary uploads/downloadspubsub- Topic-based messagingrpc- Remote procedure calls
Custom capabilities:
capabilities: ['messaging', 'custom:weather-api']Timeout Configuration
connectionTimeoutMs
- Type:
number - Default:
10000(10 seconds) - Description: Connection timeout (includes DNS resolution and TLS handshake)
connectionTimeoutMs: 10_000 // 10 secondsrequestTimeoutMs
- Type:
number - Default:
30000(30 seconds) - Description: Request/response timeout
requestTimeoutMs: 60_000 // 60 seconds for long-running requestsOther Configuration Options
historyDepth
- Type:
number - Default:
100 - Description: Session history depth for tracking
historyDepth: 200 // Track more historybugReportServer
- Type:
string - Default:
'https://bugs.agenium.local' - Description: Bug report server URL
bugReportServer: 'https://my-bug-server.com/api/reports'Global Configuration
AGENIUM also provides a separate global configuration system (distinct from AgentConfig) for advanced tuning of timeouts, connection pooling, and circuit breakers.
Setting Global Config
import { setConfig } from 'agenium';
setConfig({
timeouts: {
dnsLookupMs: 10_000,
handshakeMs: 10_000,
requestMs: 60_000, // 60 seconds for all agents
connectionIdleMs: 60_000,
bugReportUploadMs: 5_000
},
pool: {
maxConnectionsPerAgent: 8,
maxStreamsPerConnection: 200
},
circuitBreaker: {
failureThreshold: 3,
resetTimeoutMs: 60_000,
successThreshold: 2
}
});Getting Global Config
import { getConfig } from 'agenium';
const config = getConfig();
console.log('Request timeout:', config.timeouts.requestMs);Default Configuration
import { DEFAULT_CONFIG } from 'agenium';
console.log(DEFAULT_CONFIG);
/*
{
timeouts: {
dnsLookupMs: 10000,
handshakeMs: 10000,
requestMs: 30000,
connectionIdleMs: 60000,
bugReportUploadMs: 5000
},
pool: {
maxConnectionsPerAgent: 4,
maxStreamsPerConnection: 100
},
circuitBreaker: {
failureThreshold: 5,
resetTimeoutMs: 30000,
successThreshold: 2
}
}
*/Environment Variables
Override global configuration via environment variables (note: these affect the global config, not per-agent config):
AGENIUM_DNS_TIMEOUT_MS
DNS lookup timeout:
export AGENIUM_DNS_TIMEOUT_MS=5000AGENIUM_HANDSHAKE_TIMEOUT_MS
TLS handshake timeout:
export AGENIUM_HANDSHAKE_TIMEOUT_MS=15000AGENIUM_REQUEST_TIMEOUT_MS
Request/response timeout:
export AGENIUM_REQUEST_TIMEOUT_MS=60000AGENIUM_MAX_CONNECTIONS_PER_AGENT
Connection pool size:
export AGENIUM_MAX_CONNECTIONS_PER_AGENT=8AGENIUM_CIRCUIT_BREAKER_THRESHOLD
Circuit breaker failure threshold:
export AGENIUM_CIRCUIT_BREAKER_THRESHOLD=3Configuration Patterns
Development
const agent = createAgent('dev-agent', {
persistence: false, // In-memory only
dataDir: '/tmp/agenium',
requestTimeoutMs: 5000 // Short timeout
});Production
const agent = createAgent('prod-agent', {
persistence: true,
dataDir: '/var/lib/agenium',
requestTimeoutMs: 60_000,
connectionTimeoutMs: 15_000,
historyDepth: 200
});Custom DNS Server
const agent = createAgent('custom-dns', {
dnsServer: 'custom-dns.example.com',
persistence: true
});Long-Running Operations
const agent = createAgent('long-ops', {
requestTimeoutMs: 300_000, // 5 minutes
connectionTimeoutMs: 30_000
});Database Configuration
SQLite Settings
AGENIUM uses SQLite for persistence. Database files are stored in dataDir:
{dataDir}/
├── alice/
│ ├── sessions.db # Session state
│ ├── outbox.db # Outbox messages
│ └── processed.db # Deduplication cacheDatabase Options
Databases use these settings:
- WAL mode - Write-Ahead Logging for better concurrency
- Synchronous NORMAL - Balance between safety and speed
- Foreign keys ON - Referential integrity
Custom Database Location
const agent = createAgent('myagent', {
dataDir: '/var/lib/agenium/data'
});Security Configuration
TLS Certificates
AGENIUM automatically generates:
- Self-signed CA certificate
- Agent certificate (signed by CA)
- Ed25519 key pairs
Certificates are stored in {dataDir}/{agentName}/:
alice/
├── agent-signing-key.pem
├── agent-signing-key.pub
├── tls-key.pem
├── tls-key.pub
├── ca-cert.pem
├── ca-key.pem
└── agent-cert.pemCustom Certificates
For advanced use cases, provide your own:
import { initializeKeys, initializeCA, createAgentCert } from 'agenium';
const keys = initializeKeys('./custom-keys');
const ca = initializeCA('myagent', './custom-ca');
const cert = createAgentCert('myagent', keys.tlsKeys.publicKey, ca);Performance Tuning
Memory Usage
Control memory usage:
// Lower memory footprint - use global config
import { setConfig } from 'agenium';
setConfig({
pool: {
maxConnectionsPerAgent: 2,
maxStreamsPerConnection: 50
}
});
const agent = createAgent('low-memory', {
historyDepth: 50 // Smaller history
});Latency Optimization
Minimize latency:
// Use global config for connection pooling
setConfig({
timeouts: {
connectionIdleMs: 3600_000 // Keep connections alive 1 hour
},
pool: {
maxConnectionsPerAgent: 8 // More connections = less queuing
}
});
const agent = createAgent('low-latency', {
connectionTimeoutMs: 5_000, // Fast timeout
requestTimeoutMs: 10_000
});Throughput Optimization
Maximize throughput:
setConfig({
pool: {
maxConnectionsPerAgent: 16,
maxStreamsPerConnection: 200
}
});Monitoring Configuration
Prometheus Metrics
Expose metrics endpoint:
import { MetricsServer } from 'agenium';
const metricsServer = new MetricsServer({
port: 9090,
host: '0.0.0.0'
});
await metricsServer.start();Access metrics at http://localhost:9090/metrics.
Health Checks
Enable health endpoint:
// Health check automatically available at GET /health
// Returns:
// {
// "agent": "myagent",
// "status": "ok",
// "uptime": 12345
// }Best Practices
1. Use Persistence in Production
// ✅ Recommended
persistence: true
// ❌ Only for testing
persistence: false2. Set Reasonable Timeouts
// ✅ Good
requestTimeoutMs: 30_000 // 30 seconds
// ❌ Too short
requestTimeoutMs: 1_000 // 1 second3. Configure Global Settings Separately
// ✅ Use global config for pool and circuit breaker tuning
import { setConfig } from 'agenium';
setConfig({
pool: { maxConnectionsPerAgent: 8 },
circuitBreaker: { failureThreshold: 5 }
});
// Agent config focuses on agent-specific settings
const agent = createAgent('myagent', {
persistence: true,
dataDir: './data',
requestTimeoutMs: 30_000
});4. Monitor Agent Statistics
setInterval(() => {
const stats = agent.getStats();
console.log('Sessions:', stats.sessions);
console.log('Connections:', stats.connections);
}, 60_000);See Also
- API Reference - Programmatic API
- Architecture - System design
- Getting Started - Quick start guide