Framework Integrations

July 30, 2026 ยท View on GitHub

Agent OS framework adapters use one native ACS runtime. Each adapter receives runtime= and routes framework inputs, model calls, tool calls, and outputs through the intervention points it supports.

Runtime setup

from agent_control_specification import AgentControl
from agent_os.integrations.langchain_adapter import LangChainKernel

runtime = AgentControl.from_path("policies/manifest.yaml")
kernel = LangChainKernel(runtime=runtime)

The manifest owns policy definitions, tool catalogs, budgets, transforms, and approval bindings. Adapter constructors do not accept inline rule objects or policy directories.

Supported adapters

FrameworkAdapter
A2AA2AGovernanceAdapter
AgentShieldAgentShieldKernel
AnthropicAnthropicKernel
AutoGenAutoGenKernel
Amazon BedrockBedrockKernel
CrewAICrewAIKernel
GeminiGeminiKernel
Google ADKGoogleADKKernel
Guardrails AIGuardrailsKernel
LangChainLangChainKernel
LangGraphLangGraphKernel
LlamaIndexLlamaIndexKernel
Microsoft Agent FrameworkMAFKernel
MistralMistralKernel
OpenAIOpenAIKernel
OpenAI Agents SDKOpenAIAgentsKernel
Pydantic AIPydanticAIKernel
Semantic KernelSemanticKernelWrapper
SmolagentsSmolagentsKernel

Manifest preflight

Adapters that declare an AdapterManifestContract validate required intervention points, tool catalogs, approval support, and transform support before execution. Unresolved extends entries must be resolved before adapter preflight.

from agent_control_specification import AdapterManifestContract, HostSession

contract = AdapterManifestContract(
    name="example",
    required_intervention_points=frozenset({"input", "pre_tool_call", "output"}),
)
session = HostSession(
    runtime,
    agent_id="agent-1",
    session_id="session-1",
    contract=contract,
)

Denials and audit

Denied and escalated evaluations raise the canonical agent_os.exceptions.PolicyViolationError. The public message is sanitized. The structured PolicyEvaluation remains available through error.evaluation_result, and its restricted audit payload is available through audit_record().

from agent_os.exceptions import PolicyViolationError

try:
    result = session.input("user request")
    if not result.verdict.decision.permits:
        raise PolicyViolationError.from_evaluation_result(result)
except PolicyViolationError as error:
    print(str(error))
    print(error.evaluation_result.audit_record())

Lifecycle ownership

AgentControl is policy-state-free and may be shared when host dispatchers and approval callbacks are thread-safe. HostSession owns session counters and charges attempted tool calls before evaluation.

See Framework Adapter Contract and v4 policy-language removal.