Skip to main content

features.json Reference

0xRay behavior is controlled by .xray/features.json (consumer) or xray/features.json (framework repo). Postinstall deploys a copy from the package; schema validation applies to memory_routing via features.schema.json.

File locations​

ContextPath
Consumer project.xray/features.json
Framework repoxray/features.json
Schemaxray/features.schema.json

suit_temperament (v3)​

See Suit temperament. Missing key = guided (existing consumers unchanged).

"suit_temperament": {
"profile": "auto",
"host_defaults": {
"grok": "frontier",
"hermes": "guided",
"opencode": "guided",
"openclaw": "guided"
}
}

memory_routing (v3.3+)​

{
"$schema": "./features.schema.json",
"memory_routing": {
"enabled": true,
"provider": "repertoire",
"module_path": "node_modules/@0xray/repertoire/dist/provider/memory-routing-provider.js",
"config": {
"signalsPath": ".xray/state/repertoire/curated_signals.json",
"statePath": ".xray/state/repertoire/inference-state.json",
"feedbackDir": ".xray/state/repertoire/feedback"
}
}
}
providerBehavior
"null"NullMemoryRoutingProvider — no enrichment
"repertoire"Preferred. Load Repertoire via module_path (ships on)
"custom"Load any module exporting createMemoryRoutingProvider()

When enabled: true and provider is repertoire or custom, module_path is required.

See Repertoire Integration.

inference_governance​

External Dynamo governance endpoint. See Self-Hosting Dynamo.

"inference_governance": {
"enabled": true,
"endpoint_url": "https://your-governance-endpoint/governance",
"request_timeout_ms": 10000,
"min_confidence_threshold": 0.5,
"proposal_defaults": {
"source": "agent",
"onChain": false
}
}

Framework repo (0xray package) uses source: 'system', onChain: true automatically.

delegation​

"delegation": {
"confidence_threshold": 0.5,
"enable_intelligent_routing": true
}

Works with memory routing confidence signals and thinDispatch tiers.

Frontier profile does not turn this off — it only stops denying spawn when no lead-dev plan exists.

complexity_thresholds​

"complexity_thresholds": {
"simple": 15,
"moderate": 25,
"complex": 50,
"enterprise": 100
}

Maps to thinDispatch routing: ≤15 single-agent, ≤25 multi-agent, ≤50 orchestrator-led, and above that orchestrator-led.

multi_agent_orchestration​

"multi_agent_orchestration": {
"enabled": true,
"max_concurrent_agents": 3,
"task_distribution_strategy": "capability-based",
"conflict_resolution": "expert-priority"
}

token_optimization​

"token_optimization": {
"enabled": true,
"max_context_tokens": 20000,
"prune_after_task": true,
"context_compression": {
"enabled": true,
"threshold_tokens": 15000,
"compression_ratio": 0.4
}
}

pattern_learning​

"pattern_learning": {
"enabled": true,
"learning_interval_ms": 300000,
"auto_apply_threshold": 0.9,
"min_success_rate": 0.7
}

security​

"security": {
"enabled": true,
"prompt_sanitization": true,
"vulnerability_scanning": true,
"code_review_enforcement": true,
"security_score_threshold": 70
}

agent_spawn​

"agent_spawn": {
"max_concurrent": 8,
"max_per_type": 3,
"spawn_cooldown_ms": 500,
"rate_limit_per_minute": 20
}

activity_logging​

"activity_logging": {
"enabled": true,
"level": "info",
"log_to_file": true,
"log_path": ".opencode/logs"
}

Production paths also write to logs/framework/activity.log via frameworkLogger.

Validation​

memory_routing is validated at load by src/memory-routing/validate-config.ts against features.schema.json. Misconfiguration throws at boot rather than silently disabling.