Metadata-Version: 2.4
Name: sbo3l-crewai
Version: 1.2.0
Summary: CrewAI tool wrapping SBO3L — gate every Crew action through SBO3L's policy boundary.
Project-URL: Homepage, https://sbo3l.dev
Project-URL: Repository, https://github.com/B2JK-Industry/SBO3L-ethglobal-openagents-2026
Author-email: Daniel Babjak <babjak_daniel@hotmail.com>
License: MIT
Keywords: agent,ai-agent,crewai,policy,sbo3l,tool
Requires-Python: >=3.10
Requires-Dist: pydantic<3,>=2.6
Provides-Extra: crewai
Requires-Dist: crewai-tools<1,>=0.4; extra == 'crewai'
Provides-Extra: dev
Requires-Dist: mypy<2,>=1.10; extra == 'dev'
Requires-Dist: pytest<9,>=8.0; extra == 'dev'
Requires-Dist: ruff<1,>=0.4; extra == 'dev'
Provides-Extra: sdk
Requires-Dist: sbo3l-sdk<2,>=1.0.0; extra == 'sdk'
Description-Content-Type: text/markdown

# `sbo3l-crewai`

CrewAI tool wrapping SBO3L. Drop into a CrewAI Agent's tool list to gate every payment intent through SBO3L's policy boundary.

> ⚠ **DRAFT (T-1-3):** depends on F-10 (`sbo3l-sdk`) merging + publishing.

## Install

```bash
pip install sbo3l-crewai sbo3l-sdk crewai-tools
```

## Quick start

```python
from crewai_tools import BaseTool
from sbo3l_sdk import SBO3LClientSync, bearer
from sbo3l_crewai import sbo3l_tool

client = SBO3LClientSync("http://localhost:8730", auth=bearer("my-token"))
descriptor = sbo3l_tool(client=client)

class SBO3LPaymentTool(BaseTool):
    name: str = descriptor.name
    description: str = descriptor.description

    def _run(self, aprp_json: str) -> str:
        return descriptor.func(aprp_json)
```

Pass `SBO3LPaymentTool()` into a CrewAI Agent's `tools=[...]`.

## What it does

The CrewAI agent emits a tool call with a JSON-stringified APRP. Returns:

```json
{
  "decision": "allow",
  "deny_code": null,
  "execution_ref": "kh-...",
  "audit_event_id": "evt-...",
  ...
}
```

On `deny`, the agent sees `deny_code` and can self-correct or escalate.

## License

MIT
