Signed decision evidence for Strands Agents.
Attach a native Strands Plugin to capture invocation, model and tool lifecycle evidence while Strands continues to run the agent. LoopGrid preserves and verifies the evidence; it does not execute the business action.
loopgrid-strands v0.1.0 · validated with strands-agents 1.57.1 · LoopGrid Core 0.8.1-design-partner.
Authority, application policy and business outcome stay application-owned. The detailed lifecycle below preserves the exact native Strands hook mapping.
Install the native Strands integration.
pip install loopgrid-strands
The package installs the LoopGrid Python SDK and a compatible Strands Agents runtime. Version 0.1.0 is published on PyPI through Trusted Publishing.
Attach the plugin and pass evidence context per invocation.
from strands import Agent
from loopgrid_strands import LoopGridPlugin
plugin = LoopGridPlugin()
agent = Agent(plugins=[plugin])
result = agent(
"Evaluate the sandbox refund request.",
invocation_state={
"loopgrid": {
"run_id": "case-123",
"authority": {"scope": ["refund:create"]},
"policy": {"version": "refund-policy-v3"},
"proposed_action": {
"tool": "refund_customer",
"amount": 72
},
"context": {"prompt_version": "support-v4"}
}
},
)LOOPGRID_BASE_URL, for example http://127.0.0.1:8000LOOPGRID_WORKSPACE_ID, for example defaultLOOPGRID_API_KEY for authenticated deploymentsRequest-scoped invocation_state keeps authority, policy and correlation data with the current invocation rather than sharing it across unrelated customers or requests.
Use Strands hooks instead of a generic callback wrapper.
Creates the LoopGrid decision envelope from explicit request-scoped evidence.
Records model completion/provenance. Application policy is recorded only when explicitly supplied.
Records tool_requested before Strands executes the tool.
Records tool_executed on success or tool_result for error/cancellation instead of claiming success.
Retains a commitment to the final result without taking over the agent lifecycle.
The application calls observe_outcome(...) after it observes the authoritative downstream result.
Commit to content without storing it by default.
capture_content = false by default. Raw user/model messages, tool inputs/results and exception text are not stored by this integration unless the application deliberately opts in.SHA-256 commitments can preserve evidence linkage while reducing unnecessary raw-content retention. Choose the disclosure level that matches the evidence claim and your data-handling requirements.
Strands executes the agent. LoopGrid records the evidence.
Strands Agent → model / tool loop → external sandbox action → application observes the result → plugin.observe_outcome(...) → LoopGrid outcome_observed → evidence_complete → verify valid:true
The plugin does not infer delegated authority, manufacture policy, approve a human review, cancel tools on LoopGrid's behalf or claim a business outcome it did not observe. External actions remain owned by the application/tooling boundary.
Validated through the actual Strands runtime and a real LoopGrid Core E2E.
evidence_complete100%valid: true with Ed25519 + SHA-256 workspace hash chainreal_money_moved=false; LoopGrid did not execute the refundThe release test used a real Strands Agent, native plugin hooks and a real tool loop without requiring a paid model API. Verification establishes captured integrity/provenance; it does not prove that the underlying decision was correct or legally compliant.
Keep the agent native. Make the evidence portable.
Install the PyPI package, attach the plugin, and preserve consequential decision evidence without replacing the Strands runtime.