Skip to main content

LoopGrid × Claude Agent SDK

Verifiable decision evidence and policy enforcement for consequential Claude agent actions.

Give Claude agents the freedom to use real tools—and give your application an independently checkable record of what was authorized, what ran, and what happened afterward.

LoopGrid adds a decision-level evidence layer to the native Claude Agent SDK lifecycle:

Authority → Policy → Human review (when required) → Tool request → Tool execution → Observed outcome → Signed verification

It works with the Claude Agent SDK's built-in and MCP tools, uses native tool hooks, and keeps the Claude model and existing tool implementations in place. LoopGrid Core signs and chains the resulting evidence for independent verification.

Why LoopGrid

A conventional agent trace can describe an interaction. LoopGrid links consequential actions to their authorization and outcome evidence, so an operator or auditor can independently verify the captured record.

Capability What you get
Native Claude hooks PreToolUse, PostToolUse, and PostToolUseFailure lifecycle integration
Decision-scoped authorization Exact tool-name and canonical-argument matching; fail-closed policy checks before execution
Human-in-the-loop evidence Host-authenticated approval and rejection records when a decision requires review
Execution provenance Correlation by tool-use ID, response commitments, failure reporting, and model-output commitments
Durable action safety One-use authorizations, replay/concurrency protection, optional SQLite persistence across local process restarts
Outcome evidence Separately recorded, host-verified receipts rather than treating model text as a completed action
Independent verification Ed25519 signatures and SHA-256-linked evidence from LoopGrid Core
Reconciliation Explicit handling of uncertain actions when evidence cannot be persisted after tool execution

Designed for teams building Claude agents that act through business APIs, internal tools, MCP servers, and automated workflows—especially where policy, review, and proof matter as much as the model's answer.

Installation

From the current source checkout:

python -m pip install -e ".[dev]"

After the public v0.1.0 release:

pip install loopgrid-claude-agent==0.1.0

Requires Python 3.11+, the official claude-agent-sdk Python package, the loopgrid Python SDK, and a reachable LoopGrid Core instance. The SDK dependencies are declared in pyproject.toml.

Integrate in four steps

1. Create a decision with exact action authority and a policy verdict. Your trusted application—not the model—chooses the tool, arguments, scope, and policy.

from loopgrid import LoopGrid
from loopgrid_claude_agent import LoopGridClaudeAgent

workspace_id = "YOUR_EXISTING_WORKSPACE_ID"
core = LoopGrid(base_url="http://127.0.0.1:8000", workspace_id=workspace_id)
bridge = LoopGridClaudeAgent(client=core, workspace_id=workspace_id, agent_id="refund-agent")

decision_id = bridge.start_decision(
    decision_type="refund_simulation",
    agent={"id": "refund-agent", "version": "1"},
    authority={"acting_for": "sandbox", "scope": ["refund:simulate"]},
    model={"provider": "anthropic", "name": "claude-agent-sdk"},
    context={"prompt_version": "refund-v1"},
    proposed_action={
        "tool": "mcp__loopgrid_sandbox__sandbox_refund",
        "arguments": {"amount": 25},
    },
    policy={"policy_id": "refund-policy", "version": "1", "decision": "auto_allowed"},
)["decision_id"]

2. Attach the native enforcement hooks to the Claude session.

from claude_agent_sdk import ClaudeSDKClient

hooks = bridge.hooks(decision_id)
options = hooks.options(mcp_servers={"loopgrid_sandbox": your_mcp_server})

async with ClaudeSDKClient(options=options) as agent:
    await agent.query("Simulate the authorized refund once using the sandbox tool.")
    async for message in hooks.observe_messages(agent.receive_response()):
        pass

Here, your_mcp_server is the SDK MCP server object your application supplies. The hooks deny other tool names, unexpected arguments, and unauthorized repeat calls.

3. Add genuine downstream outcome evidence.

# Host application validates a receipt from the actual downstream system.
bridge.record_observed_outcome(
    decision_id,
    observer="sandbox-ledger",
    receipt_id=verified_receipt["id"],
    outcome=verified_receipt,
)

verified_receipt is supplied by your application after verification—not generated from Claude's summary.

4. Inspect the signed decision record.

record = bridge.get_decision(decision_id)
evidence = bridge.export_evidence(decision_id)

For a complete runnable example, including creation of the in-process MCP sandbox tool, workspace setup, lifecycle assertions, and signed verification, use examples/native_claude_runtime_e2e.py.

Human approval and durable authorization

For sensitive actions, record a real host-authenticated approval before execution:

bridge.record_human_review(
    decision_id,
    reviewer="authenticated-user-123",
    approved=True,
    reason="approved support ticket 123",
)

Use a decision policy of human_approval_required for this path, or pass a host-owned asynchronous approval_handler to bridge.hooks(...) returning a ReviewVerdict. A Claude-generated statement is never accepted as a reviewer identity.

For persistence across local worker restarts:

bridge = LoopGridClaudeAgent.with_sqlite(
    client=core,
    workspace_id=workspace_id,
    agent_id="refund-agent",
    sqlite_path="./loopgrid-claude-authorizations.db",
)

pending = bridge.pending_reconciliations()

Keep the SQLite file secure and reuse the same file across restarted workers. The integration prevents blind re-execution when an action's downstream outcome needs reconciliation.

See the evidence lifecycle in action

Offline and real-Core validation — no Claude API credits

With LoopGrid Core running at http://127.0.0.1:8000:

python -m pytest -q
python examples/native_core_hook_e2e.py
python examples/native_core_security_e2e.py
python examples/native_core_recovery_e2e.py
python examples/offline_core_durability_e2e.py

These exercise native SDK hook construction, deterministic SDK-hook inputs, the real LoopGrid Core, authorization, security scenarios, durability, signed verification, and failure recovery. They do not run a Claude model.

Full Claude model and MCP sandbox example

python examples/native_claude_runtime_e2e.py

This exercises an actual Claude SDK session with a harmless in-process MCP refund simulator and real Core. It requires an authenticated Anthropic API account with available credits. The sandbox moves no real money.

Validation status

Validated on Windows with Python 3.12 and Claude Agent SDK 0.2.165: 59/59 automated tests, six real-Core security scenarios, native hook/Core verification, restart and replay durability, post-execution reconciliation, dependency checks, and wheel/sdist builds with both distributions passing twine check.

Live-runtime validation: The authenticated, model-driven Claude → MCP tool → signed Core verification scenario has not yet been completed because Anthropic API credits were unavailable. The offline, SDK-compatibility, and Core-backed tests above passed. See VALIDATION.md for the full validation record.

Documentation

This is an independently maintained LoopGrid integration for the Claude Agent SDK.

Metadata

Release files for loopgrid-claude-agent 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for loopgrid-claude-agent 0.1.0
File Size Uploaded
loopgrid_claude_agent-0.1.0.tar.gz 42.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for loopgrid-claude-agent 0.1.0
File Interpreter ABI Platform
loopgrid_claude_agent-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 62.9 kB

Release files / loopgrid_claude_agent-0.1.0.tar.gz

Download URL loopgrid_claude_agent-0.1.0.tar.gz
Size 42.1 kB
Tags Source
SHA-256 checksum
How to use checksums
181ec9b1a486b3492171269d36d6717bc4b5eb48ecd7679577979e91915039ee
BLAKE2b-256 checksum
How to use checksums
7d2217bfa3e8d615ee34fd9475f8058e1964295d57686caf1395c979e5e379b5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 10, 2026.

Transparency log

Release files / loopgrid_claude_agent-0.1.0-py3-none-any.whl

Download URL loopgrid_claude_agent-0.1.0-py3-none-any.whl
Size 20.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d00d23cd4217aebd741312dfca79df499d9f692c625de245dafd7a6771f3eec3
BLAKE2b-256 checksum
How to use checksums
d657e8738910ea45618b55411964a45a0f209cbefcd465643cd96ae139428068
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 10, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page