Skip to main content

Limitations

IntentusNet is explicit about what it doesn't do. This document lists current limitations, non-goals, and areas where you need external solutions.

Current Limitations (v1.3.x)

These are limitations of the current implementation that may be addressed in future versions.

Synchronous Only

IntentusNet's routing is synchronous:

# This is how it works
response = router.route_intent(envelope) # Blocks until complete

# NOT supported
async def route():
response = await router.route_intent_async(envelope) # Not available

Implication: For async applications, wrap in executor or use async transport layer.

Single-Process Runtime

The runtime is designed for single-process execution:

# Works
runtime = IntentusRuntime() # Single process

# NOT supported
cluster = IntentusCluster(nodes=["n1", "n2", "n3"]) # No clustering

Implication: For multi-node deployments, run separate runtimes with shared storage.

File-Based Persistence Only

Execution records persist to files:

# Supported
store = FileExecutionStore(".intentusnet/records")

# NOT built-in
store = PostgresExecutionStore(connection_string) # Not included
store = RedisExecutionStore(redis_client) # Not included

Implication: Implement custom store for production databases.

No Automatic Timeouts

The runtime doesn't enforce agent timeouts:

# No built-in timeout
response = router.route_intent(envelope) # May hang forever if agent hangs

# You must handle externally
import signal
signal.alarm(30) # Set external timeout

Implication: Implement timeout handling in your application layer or transport.

Shared Envelope in Parallel

PARALLEL strategy shares envelope across threads:

RoutingOptions(strategy=RoutingStrategy.PARALLEL)
# All agents receive same envelope object
# Mutations are NOT thread-safe

Implication: Don't mutate envelope in agents during parallel execution.

No Scheduling

No built-in task scheduling:

# NOT supported
runtime.schedule(envelope, at="2024-01-16T10:00:00Z")
runtime.schedule(envelope, every="1h")

Implication: Use external schedulers (cron, Celery, etc.).

Non-Goals

These are deliberate design decisions, not implementation gaps.

Not an Agent Framework

IntentusNet does not:

  • Define how agents think or reason
  • Provide prompt templates
  • Manage agent memory or state
  • Orchestrate complex workflows

Use instead: LangChain, AutoGen, CrewAI, or similar.

Not an LLM Abstraction

IntentusNet does not:

  • Call LLMs directly
  • Manage API keys
  • Handle token counting
  • Provide model fallbacks

Use instead: LiteLLM, OpenAI SDK, Anthropic SDK, etc.

Not a Load Balancer

IntentusNet does not:

  • Distribute load across agents
  • Scale agents based on demand
  • Route based on agent health metrics

Use instead: Kubernetes, cloud load balancers, or service mesh.

Not an Authentication System

IntentusNet does not:

  • Authenticate users or services
  • Manage tokens or sessions
  • Integrate with identity providers

Use instead: OAuth2, JWT, your auth infrastructure.

Not a Transaction Manager

IntentusNet does not:

  • Provide distributed transactions
  • Guarantee atomicity across agents
  • Rollback failed multi-step operations

Implication: Design agents to be idempotent and handle partial failures.

No Automatic Retries

IntentusNet does not automatically retry:

# Agent fails
response = router.route_intent(envelope)
# response.status == "error"
# NO automatic retry happens

# Explicit retry via fallback
RoutingOptions(strategy=RoutingStrategy.FALLBACK)
# Tries next agent, but only once each

Rationale: Automatic retries hide failures and can cause duplicate side effects.

What You Need Externally

NeedExternal Solution
AuthenticationOAuth2/JWT + middleware
Rate limitingAPI gateway or policy engine
Distributed storagePostgreSQL, Redis, etc.
Async executionCelery, RQ, or async wrapper
Load balancingKubernetes, cloud LB
Secrets managementVault, cloud KMS
MonitoringPrometheus, Grafana
Log aggregationELK, Loki, cloud logging

Known Issues

High-Frequency Recording Overhead

Recording every execution has overhead:

Operations/sec | Overhead
100 | ~1%
1000 | ~5%
10000 | ~15%

Mitigation: Sampling, async persistence, or disable for high-frequency ops.

Large Payload Storage

Large payloads inflate record storage:

# 10MB payload = 10MB record
envelope.payload = large_binary_data # Stored in record

Mitigation: Store payloads externally, reference by ID.

Clock Skew in Distributed Deployments

Timestamps rely on system clock:

Node A: 2024-01-15T10:30:00Z
Node B: 2024-01-15T10:30:05Z # 5 second skew

Mitigation: Use NTP, or use logical clocks (sequence numbers).

Future Considerations

These are areas under consideration for future versions:

AreaStatus
Async routingUnder consideration
Database storesCommunity plugins welcome
Distributed runtimeRequires architectural review
Built-in timeoutsPlanned for 0.4.x
WAL-backed recordingDesign complete, implementation pending

Honest Assessment

IntentusNet is good for:

  • Deterministic agent routing
  • Execution auditing and replay
  • Policy-based filtering
  • CLI-first operations

IntentusNet is not good for:

  • Real-time, low-latency systems
  • High-frequency trading-style workloads
  • Systems requiring distributed consensus
  • Fully managed agent orchestration

Summary

CategoryStatus
Sync-onlyLimitation (may change)
Single-processLimitation (may change)
File persistenceLimitation (may change)
No auto-timeoutLimitation (planned)
Not an agent frameworkNon-goal
Not a load balancerNon-goal
Not an auth systemNon-goal
No auto-retriesNon-goal

Next Steps