Memory Sidecar v3.5.1 is the operational hardening release for the public agent-agnostic memory system, focusing on reliability, observability, and resilience in production deployments. This version addresses pain points experienced in long-running agent workflows, particularly around error handling, resource management, and diagnostic capabilities. As a sidecar pattern for memory persistence, it remains agnostic to the agent framework, making this release critical for teams operating diverse agent architectures under real-world loads.
The core philosophy of v3.5.1 is to reduce operational surface area without changing the fundamental API contract. Every change targets either failure modes observed in the field or instrumentation gaps that prolonged debugging. This release is not about new features—it is about making existing features survive entropy.
What Changed in v3.5.1
This release introduces three major operational improvements:
1. Retry and Circuit Breaker Overhaul
Previous versions used a simple linear retry with constant delay. This caused thundering herd problems when transient failures occurred across multiple agents. v3.5.1 replaces that with a configurable exponential backoff with jitter, plus a circuit breaker that trips after consecutive failures. The circuit breaker prevents wasted retries when downstream dependencies are unhealthy, automatically half-opening after a configurable timeout.
2. Structured Logging and Metrics
Logging moved from plain strings to structured key-value pairs, enabling proper ingestion into log aggregators like ELK or Loki. All log entries now include correlation IDs, session context, and timing data. Additionally, Prometheus metrics are exposed for request latency, error rates, and memory pool usage. This changes debugging from “grep for errors” to “dashboard and alert on trends.”
3. Memory Pool Resource Limits
The in-process memory cache now respects configurable soft and hard limits. Previously, unbounded growth could cause OOM kills under high throughput. v3.5.1 implements a two-tier eviction policy: LRU eviction under soft limit, and request rejection under hard limit. This ensures the sidecar remains within its allocated container boundaries without crashing.
These changes are backward compatible—existing configuration files will work without modification, but the new behavior is opt-in for retry and circuit breaker settings.
Configuration Example: Customizing Retry Behavior
The following snippet shows how to configure the new retry and circuit breaker in a YAML configuration file that ships with the installer:
memory_sidecar:
retry:
max_attempts: 5
base_delay: 200ms
max_delay: 5s
strategy: exponential_jitter
circuit_breaker:
failure_count_threshold: 10
reset_timeout: 30s
half_open_max_requests: 3
The exponential_jitter strategy randomizes intervals within the exponential curve to avoid synchronization. The circuit breaker operates on a sliding window of failures, resetting only after successful probes. These defaults are conservative; for latency-sensitive workloads, reduce max_attempts or tighten thresholds.
Improved Observability in Practice
Structured logs from v3.5.1 include fields like trace_id, retry_attempt, and circuit_state. A typical error sequence now looks like:
{"level":"warn","msg":"retry failed","retry_attempt":2,"circuit_state":"half_open","error":"connection refused","trace_id":"abc123"}
This allows developers to alert on specific states (circuit_state == "open") rather than raw error counts. The Prometheus endpoint at /metrics exposes histograms for request duration and summaries for retry and circuit breaker events. You can wire this into existing Grafana dashboards with zero configuration changes—just point the scraper at the sidecar’s metrics port.
Operational Impact for Sidecar Deployments
The hermes-memory-installer v3.5.1 does not alter the installation process itself, but the container image now includes a healthcheck endpoint (/health) that accounts for internal state. If the circuit breaker is open or memory pool exceeds hard limit, the healthcheck returns non-200. Orchestraors like Kubernetes can use this for automatic pod rotation, further hardening the system against memory-related failures.
The sidecar remains stateless on disk—all persistence goes to the configured backend (Redis, SQLite, etc.). This release adds connection health monitoring to the backend pool, logging warnings if connections degrade, and automatically rotating stale connections without application intervention.
Migration Notes for Experienced Developers
- No breaking changes to the REST API or gRPC interface.
- The default retry behavior is still linear with 3 attempts—enable exponential backoff explicitly.
- Metrics endpoint is off by default; set
monitoring.enabled: trueto expose it. - Memory limits require explicit configuration if you rely on the cache. Without them, behavior remains identical to v3.5.0.
- The installer artifact is immutable; checksums are published with the release for verification.
This release is meant to be dropped into existing pipelines with minimal friction. The hardening focuses on the gap between “works in dev” and “works under stress,” which is where most agent memory outages occur. v3.5.1 does not solve every problem, but it significantly reduces the number of unknowns when operating at scale.
In summary, Memory Sidecar v3.5.1 delivers practical operating experience improvements for agent-agnostic memory management. The retry and circuit breaker updates prevent cascading failures, structured logging accelerates root cause analysis, and memory pool limits protect against resource exhaustion. For teams running multiple agents against a shared memory backend, this release makes the sidecar a more predictable and observable component in the stack.
Top comments (0)