{
  "schemaVersion": "1.0.0",
  "methodVersion": "1.0.0",
  "evidenceCutoff": "2026-08-28",
  "comparisonBoundary": "Maintained, permissively licensed, code-first agent frameworks with documented state, human-approval, observability, recovery, and deployment paths for enterprise workflows.",
  "frameworks": [
    {
      "id": "langgraph",
      "name": "LangGraph",
      "release": {"track": "Python core", "version": "1.2.11", "publishedAt": "2026-08-11", "sourceId": "LG-REL"},
      "license": "MIT",
      "languages": ["python", "typescript"],
      "orchestrationModel": "Explicit state graph with nodes, edges, conditional routing, cycles, and checkpointed execution.",
      "modelStrategy": ["agnostic"],
      "deploymentControl": ["self-host", "managed"],
      "priorities": ["durable-recovery", "approval", "observability", "explicit-control"],
      "bestFor": "Long-running or failure-sensitive workflows where teams need explicit control over state transitions, pause/resume behavior, and replay boundaries.",
      "constraints": "The graph model exposes control but increases design and testing work. Production persistence needs a durable checkpointer or Agent Server rather than the in-memory example backend.",
      "tradeoffs": ["High control and inspectable state", "More orchestration code and a steeper graph mental model", "LangSmith is an integrated product, not a requirement of the open-source runtime"],
      "disqualifiers": ["A short, deterministic tool call sequence is simpler in ordinary application code", "The team cannot own explicit graph topology and checkpoint migration"],
      "capabilities": {
        "state": {"status": "native", "detail": "A checkpointer stores graph state as snapshots organized into threads at graph steps; persistent backends replace InMemorySaver for production.", "sourceIds": ["LG-PERSIST"]},
        "approval": {"status": "native", "detail": "The interrupt primitive pauses execution, exposes approval context, and resumes the same thread after an external decision.", "sourceIds": ["LG-HITL"]},
        "observability": {"status": "integrated", "detail": "Execution paths and state transitions can be traced through LangSmith; tracing can be disabled or conditioned for data-sensitive runs.", "sourceIds": ["LG-OVERVIEW", "LG-PRIVACY"]},
        "recovery": {"status": "native", "detail": "Durable execution resumes from checkpoints after interruption or worker failure; node boundaries determine how much work may repeat.", "sourceIds": ["LG-PERSIST", "LG-SERVER"]},
        "deployment": {"status": "self-host-or-managed", "detail": "The open-source runtime can run in application infrastructure, while Agent Server packages graphs with persistence and a durable task queue for self-hosted or managed deployment.", "sourceIds": ["LG-SERVER"]}
      }
    },
    {
      "id": "microsoft-agent-framework",
      "name": "Microsoft Agent Framework",
      "release": {"track": "Python", "version": "1.16.0", "publishedAt": "2026-08-28", "sourceId": "MAF-REL"},
      "license": "MIT",
      "languages": ["python", "dotnet", "go"],
      "orchestrationModel": "Agent abstractions plus graph workflows, orchestrations, request ports, middleware, and checkpoint managers.",
      "modelStrategy": ["agnostic", "microsoft"],
      "deploymentControl": ["self-host", "managed"],
      "priorities": ["durable-recovery", "approval", "observability", "microsoft-stack", "multi-language"],
      "bestFor": "Enterprises standardizing on .NET, Python, Go, Azure identity, or Microsoft operations while retaining explicit multi-agent workflow control.",
      "constraints": "Feature parity varies by language and integration. Teams must verify the exact client surface because some UI workflow lifecycle events and resume controls are not mapped in the .NET AG-UI integration.",
      "tradeoffs": ["Typed enterprise integration and multi-language workflow support", "Fast-moving APIs require pinned versions and migration tests", "Azure alignment is strongest, although the framework supports multiple providers"],
      "disqualifiers": ["The team requires identical workflow lifecycle behavior across every language client", "The deployment platform must avoid Microsoft-specific operational dependencies"],
      "capabilities": {
        "state": {"status": "native", "detail": "Checkpoint managers capture executor state, pending messages, requests, responses, and shared state at superstep boundaries.", "sourceIds": ["MAF-CHECKPOINT"]},
        "approval": {"status": "native", "detail": "RequestPort and tool-approval requests pause workflows; pending requests are included in checkpoints and re-emitted after restore.", "sourceIds": ["MAF-HITL"]},
        "observability": {"status": "native", "detail": "The agent capability surface exports traces, metrics, and logs and supports shared interception hooks for operational controls.", "sourceIds": ["MAF-CAPABILITIES"]},
        "recovery": {"status": "native", "detail": "Workflows resume or rehydrate from a checkpoint, including pending request state; durable storage must replace in-memory checkpoint storage.", "sourceIds": ["MAF-CHECKPOINT", "MAF-HITL"]},
        "deployment": {"status": "self-host-or-managed", "detail": "Agents and workflows run in-process or behind application services and integrate with Microsoft and Azure agent services; deployment architecture remains an application decision.", "sourceIds": ["MAF-OVERVIEW"]}
      }
    },
    {
      "id": "crewai",
      "name": "CrewAI",
      "release": {"track": "Python", "version": "1.15.18", "publishedAt": "2026-08-27", "sourceId": "CR-REL"},
      "license": "MIT",
      "languages": ["python"],
      "orchestrationModel": "Role-based crews for agent collaboration plus event-driven Flows for routing, persistence, and approval points.",
      "modelStrategy": ["agnostic"],
      "deploymentControl": ["self-host", "managed"],
      "priorities": ["multi-agent", "approval", "rapid-composition", "managed-cloud"],
      "bestFor": "Python teams composing role-oriented multi-agent business processes that benefit from a concise crew abstraction and Flow-based approval routing.",
      "constraints": "Crews and Flows are different orchestration layers. Durable production behavior depends on configuring persistence and the surrounding runtime rather than assuming a crew definition is automatically recoverable.",
      "tradeoffs": ["Concise role and task composition", "Flows add operational control but create a second mental model", "Managed deployment and full observability are concentrated in CrewAI AMP"],
      "disqualifiers": ["The core application stack is TypeScript or .NET with no Python service boundary", "The workflow requires graph-level checkpoint semantics to be the primary programming model"],
      "capabilities": {
        "state": {"status": "native", "detail": "The persist decorator stores Flow state, uses SQLite by default, and supports resuming or forking a persisted flow by state identifier.", "sourceIds": ["CR-FLOWS"]},
        "approval": {"status": "native", "detail": "The human_feedback decorator pauses a Flow for review and can route approved, rejected, or revision outcomes to distinct listeners.", "sourceIds": ["CR-FLOWS"]},
        "observability": {"status": "integrated", "detail": "CrewAI exposes execution tracing, while the managed AMP platform adds detailed traces, logs, team controls, and production monitoring.", "sourceIds": ["CR-DOCS", "CR-AMP"]},
        "recovery": {"status": "configured", "detail": "Persisted Flow state survives restarts and can resume by ID, but the deployment must supply durable storage and idempotent side-effect handling.", "sourceIds": ["CR-FLOWS", "CR-PROD"]},
        "deployment": {"status": "self-host-or-managed", "detail": "Python services can self-host crews and Flows; AMP offers GitHub-, CLI-, or Studio-driven managed deployments with generated API access.", "sourceIds": ["CR-AMP", "CR-PROD"]}
      }
    },
    {
      "id": "openai-agents-sdk",
      "name": "OpenAI Agents SDK",
      "release": {"track": "Python", "version": "0.22.0", "publishedAt": "2026-08-19", "sourceId": "OA-REL"},
      "license": "MIT",
      "languages": ["python"],
      "orchestrationModel": "A compact runner with agents, tools, handoffs, guardrails, sessions, interruptions, and tracing.",
      "modelStrategy": ["openai", "agnostic-with-adapters"],
      "deploymentControl": ["self-host", "managed"],
      "priorities": ["approval", "observability", "minimal-sdk", "openai-stack"],
      "bestFor": "Python products centered on OpenAI models that need a small orchestration surface, built-in tracing, sessions, guardrails, and tool approval.",
      "constraints": "The SDK manages the agent loop, but durable long-running recovery comes through Dapr, Temporal, Restate, DBOS, or application infrastructure rather than a built-in workflow server.",
      "tradeoffs": ["Small API surface and first-party OpenAI integrations", "Provider adapters exist but the default path is OpenAI-first", "Durability adds an external orchestration dependency"],
      "disqualifiers": ["Provider neutrality is a hard procurement requirement", "The system needs a built-in graph runtime and checkpoint manager without external workflow infrastructure"],
      "capabilities": {
        "state": {"status": "native", "detail": "Sessions store conversation history through SQLite, Redis, SQLAlchemy, Dapr, encrypted, file-backed, or OpenAI-managed implementations.", "sourceIds": ["OA-RUN"]},
        "approval": {"status": "native", "detail": "Tools can require approval, paused RunState can be serialized, and unresolved interruptions remain pending until approved or rejected.", "sourceIds": ["OA-HITL"]},
        "observability": {"status": "native", "detail": "Built-in tracing records model generations, tool calls, handoffs, guardrails, and custom events with controls for sensitive trace content.", "sourceIds": ["OA-TRACE"]},
        "recovery": {"status": "external-runtime", "detail": "Serialized run state supports approval pause/resume; process-restart durability and automatic recovery use documented Dapr, Temporal, Restate, or DBOS integrations.", "sourceIds": ["OA-HITL", "OA-RUN"]},
        "deployment": {"status": "application-owned", "detail": "The SDK runs inside a Python application; teams choose their hosting and add a durable orchestrator when workflows span long waits or process restarts.", "sourceIds": ["OA-RUN"]}
      }
    },
    {
      "id": "google-adk",
      "name": "Google ADK",
      "release": {"track": "Python", "version": "2.8.0", "publishedAt": "2026-08-26", "sourceId": "GA-REL"},
      "license": "Apache-2.0",
      "languages": ["python", "typescript", "go", "java", "kotlin"],
      "orchestrationModel": "LLM agents, deterministic sequential/parallel/loop agents, and graph workflows backed by sessions and events.",
      "modelStrategy": ["google", "agnostic"],
      "deploymentControl": ["self-host", "managed"],
      "priorities": ["multi-language", "managed-cloud", "observability", "google-stack", "multi-agent"],
      "bestFor": "Multi-language teams using Gemini or Google Cloud that want one agent toolkit across local development, Agent Runtime, Cloud Run, and GKE.",
      "constraints": "Session persistence depends on the selected SessionService, and operational features differ across SDK languages and deployment targets. In-memory sessions do not survive a restart.",
      "tradeoffs": ["Broad language coverage and Google Cloud deployment paths", "Strongest operational path assumes Google Cloud", "Teams must verify feature parity for their chosen language"],
      "disqualifiers": ["The organization requires a cloud-neutral operations plane", "The chosen language needs a feature that exists only in another ADK SDK"],
      "capabilities": {
        "state": {"status": "native", "detail": "Serializable session state is persisted by DatabaseSessionService or VertexAiSessionService; InMemorySessionService loses state on restart.", "sourceIds": ["GA-STATE"]},
        "approval": {"status": "native", "detail": "Graph workflows can request external human input and resume through the workflow runtime rather than hiding approval inside prompt text.", "sourceIds": ["GA-HITL", "GA-RESUME"]},
        "observability": {"status": "integrated", "detail": "OpenTelemetry instrumentation exports agent and tool traces; Google tooling connects traces to Cloud Trace and optional BigQuery analytics.", "sourceIds": ["GA-OBS"]},
        "recovery": {"status": "native", "detail": "Resumable workflow sessions persist execution progress and continue graph work after interruption when backed by a persistent session service.", "sourceIds": ["GA-RESUME", "GA-STATE"]},
        "deployment": {"status": "self-host-or-managed", "detail": "Documented targets include Agent Runtime, Cloud Run, and GKE, with CLI support for CI/CD, service identity, secrets, scaling, and observability.", "sourceIds": ["GA-DEPLOY"]}
      }
    }
  ]
}
