v0.2.12
aloshdenny/reverse-SynthIDv0.2.12Jul 29, 2026by het0814
AI Summary
A large batch of validation and correctness fixes across config management, CLI, MCP, and integrations.
Key Highlights
- Config validation hardening with URL normalization and port validation
- Moorcheh client cache invalidation on config changes
- Per-agent session isolation in MCP integration
- Memory validation and parsing hardening
Full Release Notes
# Release Notes for v0.2.12
This release ships a very large batch of validation and correctness fixes across config management, CLI connect/skill install, MCP session isolation, and the LangGraph/Hermes/CrewAI integrations.
## Improvements
- **Config validation hardening** (`memanto/cli/config/manager.py`,
`memanto/app/ui/routes/ui_router.py`, `memanto/cli/schedule_time.py`)
- Server URLs are normalized and ports validated before being written to
config; session/answer config edits are validated against their schema;
config setters now guard against malformed config sections instead of
crashing; schedule times are validated (format + range) before a
scheduled job is enabled, both via the CLI and the UI (invalid times now
return 400 instead of silently accepting garbage).
- **Moorcheh client cache invalidation** (`memanto/app/clients/moorcheh.py`)
- `MoorchehClientSingleton` now tracks the config it was built from
(backend, URL, timeout / API key) and rebuilds the cached client when
that config changes, instead of serving a stale client after a backend
or API-key switch.
- **Avoid storage writes during service initialization** (`memanto/app/services/session_service.py`,
`memanto/app/services/agent_service.py`)
- `SessionService`/`AgentService` no longer eagerly create directories or
generate a secret key at construction time; both are now lazy
(created/generated on first actual use), avoiding unnecessary filesystem
writes (and directory creation) just from instantiating the service.
- **`memanto connect` / skill install correctness** (`memanto/cli/connect/engine.py`,
`memanto/cli/connect/agent_registry.py`)
- Fixed false-positive shared-skill detection that could report a skill as
installed for one agent when it was actually another agent's install.
- `connect --disconnect` now preserves unmanaged rule files (including
non-UTF-8 ones) instead of deleting content Memanto didn't add.
- Hook-cleanup matching (used when disconnecting) tightened to avoid
removing unrelated hook entries.
- **Agent list namespace counts hardened** (`memanto/cli/config/manager.py`)
- `list agents` now guards against malformed/missing `item_count` or
`namespace_name` fields in the Moorcheh namespaces response instead of
raising.
- **MCP integration: per-agent session isolation** (`integrations/mcp/memanto_mcp/lifecycle.py`,
`integrations/mcp/memanto_mcp/tools.py`)
- Concurrent MCP tool calls for different agent IDs no longer share one
`SdkClient` session — each agent gets its own isolated, cached client, with
batch payload validation happening before any readiness side effects and
newly created scoped clients only cached once activation actually succeeds.
- MCP `batch_remember` now guards against and normalizes malformed item
results instead of propagating a bad shape.
- **LangGraph integration fixes** (`integrations/langgraph/langgraph_memanto/{store,tools}.py`)
- Non-string content values are stringified before being written to the
store (previously could raise). `min_confidence` search filtering fixed.
Setup now retries after an activation failure instead of getting stuck.
Input limits enforced on `remember`.
- **Hermes / CrewAI integration fixes** (`integrations/hermes-agents/`, `integrations/crewai/`)
- Fixed agent-id truncation collisions in Hermes (two different agent IDs
could truncate to the same internal id). Hermes memory-mirror writes on
exit are now non-blocking. CrewAI `remember` now enforces the same input
length limits as the core API.
- **Memory validation / parsing hardening** (`memanto/app/services/memory_parsing_service.py`,
`memanto/app/models/__init__.py`)
- Fixed the ambiguity guard being systemically bypassed by common auxiliary
verbs (`is`/`are`/`was`/`were`) matching `STRONG_FACT_PATTERNS`.
- Memory type is now schema-validated on write instead of accepted as any
string; `SourceType` validation is strict and rate-limiting now fails
closed on error instead of open.
- Tags and source labels are now length-bounded before storage (applies to
both `remember` and memory edits) using shared Pydantic
`Annotated[StringConstraints]` validators.
- Fail-fast on malformed storage responses in the core write path,
`memanto migrate`, and MCP `batch_remember`.
- **Timestamp formatting fix** (`memanto/app/services/memory_read_service.py`)
- Epoch-integer timestamps are now coerced to ISO strings during memory-read
formatting instead of being returned as raw ints, which broke downstream
date parsing.
- **Unicode agent-ID isolation** — agent ID validation is now centralized and
Unicode-normalized, fixing a case where visually-similar Unicode agent IDs
could collide or bypass isolation.
## Tests
- New `tests/test_connect_engine.py`, `tests/test_connect_detection.py`,
`tests/test_config_manager_setters.py`, `tests/test_schedule_time_validation.py`,
`integrations/mcp/tests/test_lifecycle.py`.
- Large expansion of `tests/test_api.py`, `tests/test_backend.py`,
`tests/test_unit.py`, and per-integration test suites covering every fix
above.
## Full Changelog
Full Changelog: https://github.com/moorcheh-ai/memanto/compare/v0.2.10...v0.2.12