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​