Cross-framework cognitive state serializer for AI agents
Project description
๐งถ StateWeave
Your AI agent switches frameworks. Its memories come with it.
StateWeave is a cross-framework cognitive state serializer for AI agents. It lets agents migrate between LangGraph, MCP, CrewAI, AutoGen, DSPy, LlamaIndex, OpenAI Agents, Haystack, Letta, and Semantic Kernel while preserving their accumulated knowledge โ conversation history, working memory, goals, tool results, and trust parameters.
No more rebuilding agent state from scratch when switching frameworks. No more vendor lock-in for your agent's brain.
Why StateWeave?
Every time you move an agent between frameworks, you lose everything it learned. StateWeave solves this with a Universal Schema โ a canonical representation of agent cognitive state that all frameworks translate to and from. One schema, N adapters, zero data loss (with explicit warnings for anything non-portable).
โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ
โ LangGraph โ โ MCP โ โ CrewAI โ โ AutoGen โ
โ Adapter โ โ Adapter โ โ Adapter โ โ Adapter โ
โโโโโโโโฌโโโโโโโ โโโโโโโโฌโโโโโโโ โโโโโโโโฌโโโโโโโ โโโโโโโโฌโโโโโโโ
โ โ โ โ
โโโโโโโโโโโโโฌโโโโโโโโดโโโโโโโโโโโโฌโโโโโโโโ โ
โ โ โ
โผ โผ โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๐งถ Universal Schema v1 โ
โ โ
โ conversation_history ยท working_memory ยท goal_tree โ
โ tool_results_cache ยท trust_parameters ยท audit_trail โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Star topology, not mesh. N adapters, not Nยฒ translation pairs. Adding a new framework = one adapter, instant compatibility with everything else.
Quick Start
Install
pip install stateweave
Export an Agent's State
from stateweave import LangGraphAdapter, StateWeaveSerializer
# Export from LangGraph
adapter = LangGraphAdapter(checkpointer=my_checkpointer)
payload = adapter.export_state("my-thread-id")
# Serialize for transport
serializer = StateWeaveSerializer()
raw_bytes = serializer.dumps(payload)
Import into Another Framework
from stateweave import MCPAdapter
# Import into MCP
mcp_adapter = MCPAdapter()
mcp_adapter.import_state(payload)
# The agent resumes with its memories intact
Migrate with Encryption
from stateweave import EncryptionFacade, MigrationEngine
# Set up encrypted migration
key = EncryptionFacade.generate_key()
engine = MigrationEngine(
encryption=EncryptionFacade(key)
)
# Full pipeline: export โ validate โ encrypt โ transport
result = engine.export_state(
adapter=langgraph_adapter,
agent_id="my-agent",
encrypt=True,
)
# Decrypt โ validate โ import on the other side
engine.import_state(
adapter=mcp_adapter,
encrypted_data=result.encrypted_data,
nonce=result.nonce,
)
Diff Two States
from stateweave import diff_payloads
diff = diff_payloads(state_before, state_after)
print(diff.to_report())
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# ๐ STATEWEAVE DIFF REPORT
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# Changes: 5 (+2 -1 ~2)
# [working_memory]
# + working_memory.new_task: 'research'
# ~ working_memory.confidence: 0.7 โ 0.95
Framework Support
| Framework | Adapter | Export | Import | Tier |
|---|---|---|---|---|
| LangGraph | LangGraphAdapter |
โ | โ | ๐ข Tier 1 |
| MCP | MCPAdapter |
โ | โ | ๐ข Tier 1 |
| CrewAI | CrewAIAdapter |
โ | โ | ๐ข Tier 1 |
| AutoGen | AutoGenAdapter |
โ | โ | ๐ข Tier 1 |
| DSPy | DSPyAdapter |
โ | โ | ๐ก Tier 2 |
| OpenAI Agents | OpenAIAgentsAdapter |
โ | โ | ๐ก Tier 2 |
| LlamaIndex | LlamaIndexAdapter |
โ | โ | ๐ต Community |
| Haystack | HaystackAdapter |
โ | โ | ๐ต Community |
| Letta / MemGPT | LettaAdapter |
โ | โ | ๐ต Community |
| Semantic Kernel | SemanticKernelAdapter |
โ | โ | ๐ต Community |
| Custom | Extend StateWeaveAdapter |
โ | โ | DIY |
Tier definitions: ๐ข Tier 1 = Core team maintained, guaranteed stability. ๐ก Tier 2 = Actively maintained, patches may lag. ๐ต Community = Best-effort, contributed by community.
MCP Server
StateWeave ships as an MCP Server โ any MCP-compatible AI assistant can use it directly.
Tools
| Tool | Description |
|---|---|
export_agent_state |
Export an agent's cognitive state from any supported framework |
import_agent_state |
Import state into a target framework with validation |
diff_agent_states |
Compare two states and return a detailed change report |
Resources
| Resource | URI |
|---|---|
| Universal Schema spec | stateweave://schemas/v1 |
| Migration history log | stateweave://migrations/history |
| Live agent snapshot | stateweave://agents/{id}/snapshot |
Prompts
| Prompt | Use Case |
|---|---|
backup_before_risky_operation |
Agent self-requests state backup before risky ops |
migration_guide |
Step-by-step framework migration template |
The Universal Schema
Every agent's state is represented as a StateWeavePayload:
StateWeavePayload(
stateweave_version="0.3.0",
source_framework="langgraph",
exported_at=datetime,
cognitive_state=CognitiveState(
conversation_history=[...], # Full message history
working_memory={...}, # Current task state
goal_tree={...}, # Active goals
tool_results_cache={...}, # Cached tool outputs
trust_parameters={...}, # Confidence scores
long_term_memory={...}, # Persistent knowledge
episodic_memory=[...], # Past experiences
),
metadata=AgentMetadata(
agent_id="my-agent",
access_policy="private",
),
audit_trail=[...], # Full operation history
non_portable_warnings=[...], # Explicit data loss docs
)
Security
- AES-256-GCM authenticated encryption with unique nonce per operation
- PBKDF2 key derivation (600K iterations, OWASP recommended)
- Ed25519 payload signing โ digital signatures verify sender identity and detect tampering
- Credential stripping โ API keys, tokens, and passwords are flagged as non-portable and stripped during export
- Non-portable warnings โ every piece of state that can't fully transfer is explicitly documented (no silent data loss)
- Associated data โ encrypt with AAD to bind ciphertext to specific agent metadata
Payload Signing
from stateweave import EncryptionFacade
# Generate a signing key pair
private_key, public_key = EncryptionFacade.generate_signing_keypair()
# Sign serialized payload
signature = EncryptionFacade.sign(payload_bytes, private_key)
# Verify on receipt
is_authentic = EncryptionFacade.verify(payload_bytes, signature, public_key)
Delta State Transport
For large state payloads, send only the changes:
from stateweave.core.delta import create_delta, apply_delta
# Create delta: only the differences
delta = create_delta(old_payload, new_payload)
# Apply delta on the receiver side
updated = apply_delta(base_payload, delta)
State Merge (CRDT Foundation)
Merge state from parallel agents:
from stateweave.core.merge import merge_payloads, ConflictResolutionPolicy
result = merge_payloads(
agent_a_state, agent_b_state,
policy=ConflictResolutionPolicy.LAST_WRITER_WINS,
)
merged_payload = result.payload
Non-Portable State
Not everything can transfer between frameworks. StateWeave handles this honestly:
| Category | Example | Behavior |
|---|---|---|
| DB connections | sqlite3.Cursor |
โ ๏ธ Stripped, warning emitted |
| Credentials | api_key, oauth_token |
๐ด Stripped, CRITICAL warning |
| Framework internals | LangGraph __channel_versions__ |
โ ๏ธ Stripped, warning emitted |
| Thread/async state | threading.Lock, asyncio.Task |
โ ๏ธ Stripped, warning emitted |
| Live connections | Network sockets, file handles | โ ๏ธ Stripped, warning emitted |
All non-portable elements appear in payload.non_portable_warnings[] with severity, reason, and remediation guidance.
Building a Custom Adapter
Extend StateWeaveAdapter to add support for any framework:
from stateweave.adapters.base import StateWeaveAdapter
from stateweave.schema.v1 import StateWeavePayload, AgentInfo
class MyFrameworkAdapter(StateWeaveAdapter):
@property
def framework_name(self) -> str:
return "my-framework"
def export_state(self, agent_id: str, **kwargs) -> StateWeavePayload:
# Translate your framework's state โ Universal Schema
...
def import_state(self, payload: StateWeavePayload, **kwargs):
# Translate Universal Schema โ your framework's state
...
def list_agents(self) -> list[AgentInfo]:
# Return available agents
...
The UCE adapter_contract scanner automatically validates that all adapters correctly implement the ABC.
CLI
# Show version and available adapters
stateweave version
# Dump the Universal Schema as JSON Schema
stateweave schema -o schema.json
# Validate a payload file
stateweave validate state.json
# Export/import/diff
stateweave export -f langgraph -a my-agent -o state.json
stateweave import -f mcp --payload state.json
stateweave diff before.json after.json
# Auto-detect source framework
stateweave detect state.json
# List all available adapters
stateweave adapters
# Scaffold a new adapter
stateweave generate-adapter my-framework --output-dir ./adapters
Compliance (UCE)
StateWeave enforces its own architectural standards via the Universal Compliance Engine โ 10 automated scanners that run on every commit:
| Scanner | What It Checks | Mode |
|---|---|---|
schema_integrity |
Universal Schema models have required fields | BLOCK |
adapter_contract |
All adapters implement the full ABC | BLOCK |
serialization_safety |
No raw pickle/json.dumps outside serializer | BLOCK |
encryption_compliance |
All crypto goes through EncryptionFacade | BLOCK |
mcp_protocol |
MCP server has all required tools | BLOCK |
import_discipline |
No cross-layer imports | BLOCK |
logger_naming |
All loggers use stateweave.* convention |
BLOCK |
test_coverage_gate |
Minimum test file coverage ratio | BLOCK |
file_architecture |
No orphan files outside MANIFEST | WARN |
dependency_cycles |
No circular imports | BLOCK |
# Run UCE locally
python scripts/uce.py
# Run in CI mode (exit 1 on failure)
python scripts/uce.py --mode=CI --json
Contributing
We welcome contributions! The highest-impact way to contribute is building a new framework adapter. See Building a Custom Adapter above.
Development Setup
git clone https://github.com/GDWN-BLDR/stateweave.git
cd stateweave
pip install -e ".[dev]"
# Run tests
pytest tests/ -v
# Run UCE
python scripts/uce.py
Architecture
stateweave/
โโโ schema/ # Universal Schema (Pydantic models)
โโโ core/ # Engine (serializer, encryption, diff, migration, portability)
โโโ adapters/ # Framework adapters (10: LangGraph, MCP, CrewAI, AutoGen, DSPy, LlamaIndex, OpenAI Agents, Haystack, Letta, Semantic Kernel)
โโโ mcp_server/ # MCP Server implementation
โโโ compliance/ # UCE scanners
License
Apache 2.0 โ use it, modify it, ship it. Patent shield included.
๐งถ StateWeave โ Because your agent's memories shouldn't be locked to one framework.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file stateweave-0.3.0.tar.gz.
File metadata
- Download URL: stateweave-0.3.0.tar.gz
- Upload date:
- Size: 86.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cf990c519362f6c64ca123ce6fca84436b7252b5a9d4069142882f058297ab52
|
|
| MD5 |
dda07b6f712118829a86d50cb77f0cba
|
|
| BLAKE2b-256 |
d3664d2fac2e37c66180b00555953f1d34d53602d7c7116ea0eb3eaf00670704
|
Provenance
The following attestation bundles were made for stateweave-0.3.0.tar.gz:
Publisher:
ci.yml on GDWN-BLDR/stateweave
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
stateweave-0.3.0.tar.gz -
Subject digest:
cf990c519362f6c64ca123ce6fca84436b7252b5a9d4069142882f058297ab52 - Sigstore transparency entry: 1097366303
- Sigstore integration time:
-
Permalink:
GDWN-BLDR/stateweave@baba8bf7735de0cc23dee2941df390ad690e11f0 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/GDWN-BLDR
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@baba8bf7735de0cc23dee2941df390ad690e11f0 -
Trigger Event:
push
-
Statement type:
File details
Details for the file stateweave-0.3.0-py3-none-any.whl.
File metadata
- Download URL: stateweave-0.3.0-py3-none-any.whl
- Upload date:
- Size: 116.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b54c8cfb59918fffa939c0b277c4510300dd1d389e63d46fe25f6792d5f8b15e
|
|
| MD5 |
2512cf8a16ec162aceb5e9b88b2cc3b4
|
|
| BLAKE2b-256 |
46e9472442176061f69e386b68a920b82c5bb308a1a68a770767603f3bfc965b
|
Provenance
The following attestation bundles were made for stateweave-0.3.0-py3-none-any.whl:
Publisher:
ci.yml on GDWN-BLDR/stateweave
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
stateweave-0.3.0-py3-none-any.whl -
Subject digest:
b54c8cfb59918fffa939c0b277c4510300dd1d389e63d46fe25f6792d5f8b15e - Sigstore transparency entry: 1097366305
- Sigstore integration time:
-
Permalink:
GDWN-BLDR/stateweave@baba8bf7735de0cc23dee2941df390ad690e11f0 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/GDWN-BLDR
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@baba8bf7735de0cc23dee2941df390ad690e11f0 -
Trigger Event:
push
-
Statement type: