Microsoft AutoGen Python tool that gates KeeperHub workflow execution through SBO3L's policy boundary. Composable with sbo3l-sdk.
Project description
sbo3l-autogen-keeperhub
Microsoft AutoGen Python tool that gates KeeperHub workflow execution through SBO3L's policy boundary. Composable with
sbo3l-sdk.
Why this exists alongside langchain-keeperhub (Devendra's PyPI pkg)
langchain-keeperhub (Devendra) |
sbo3l-autogen-keeperhub (this) |
|
|---|---|---|
| Target framework | LangChain | Microsoft AutoGen (pyautogen) |
| What it wraps | KH webhook execution | SBO3L policy gate → KH webhook execution |
| Decision step | x (agent decides) | yes (SBO3L decides; signed receipt) |
| Budget enforcement | x | yes |
| Audit chain | x | yes (hash-chained Ed25519 log) |
| ENS / Turnkey TEE / MCP bridge | yes | x (not duplicated) |
Composable: use Devendra's tool for the raw KH binding (in a LangChain branch of your stack) + ours as the policy gate that decides whether the raw call should fire (in an AutoGen branch). Or use ours alone for the full gate-then-execute path inside an AutoGen ConversableAgent.
Install
pip install "sbo3l-autogen-keeperhub[autogen]" sbo3l-sdk
The [autogen] extra pulls in pyautogen so the register_sbo3l_keeperhub_tool helper can drop directly into a ConversableAgent's function registry. Without it, only the framework-agnostic sbo3l_autogen_keeperhub_tool() factory is available.
5-line setup
from autogen import ConversableAgent
from sbo3l_sdk import SBO3LClientSync
from sbo3l_autogen_keeperhub import register_sbo3l_keeperhub_tool
client = SBO3LClientSync("http://localhost:8730")
executor = ConversableAgent(name="executor", llm_config=False)
register_sbo3l_keeperhub_tool(executor, client=client)
Or framework-agnostic:
from sbo3l_autogen_keeperhub import sbo3l_autogen_keeperhub_tool
descriptor = sbo3l_autogen_keeperhub_tool(client=client)
# descriptor.name + descriptor.description + descriptor.func
Wire path
Same as the LangChain + TS packages — SBO3L decides → KH adapter executes on allow → tool returns kh_execution_ref. The daemon is the policy boundary, so kh_execution_ref matches across SDK languages and frameworks.
- AutoGen agent calls
sbo3l_keeperhub_payment_request(aprp_json=...)via its function registry. - The registered callable POSTs the APRP to SBO3L's
/v1/payment-requests. - SBO3L decides allow / deny / requires_human against the loaded policy + budget + nonce + provider trust list.
- On allow: SBO3L's executor_callback hands the signed
PolicyReceiptto the daemon-side KeeperHub adapter. - KH adapter POSTs the IP-1 envelope to the workflow webhook, captures
executionId, surfaces it asreceipt.execution_ref. - Tool returns:
{decision, kh_workflow_id_advisory, kh_execution_ref, audit_event_id, request_hash, policy_hash, deny_code}.
On kh_workflow_id_advisory
The _advisory suffix is intentional: today the daemon's env-configured webhook URL is the source of truth for actual routing. The per-call workflow_id you pass is surfaced in the envelope for context tagging / audit logs, not as a routing override. See KeeperHub/cli#52 for the proposed contract that would make per-call routing safe.
API
sbo3l_autogen_keeperhub_tool(
*,
client: SBO3LClientLike,
workflow_id: str | None = None, # default: DEFAULT_KH_WORKFLOW_ID
name: str = "sbo3l_keeperhub_payment_request",
description: str = ...,
idempotency_key: Callable[[dict], str] | None = None,
) -> SBO3LKeeperHubToolDescriptor
# Or, with pyautogen installed:
register_sbo3l_keeperhub_tool(
agent, # ConversableAgent (or duck-typed equivalent)
*,
client=..., # required, kw-only
workflow_id=None, # default: DEFAULT_KH_WORKFLOW_ID
name=None, description=None,
) -> SBO3LKeeperHubToolDescriptor
# Registers the SBO3L tool with the agent's function_map and returns
# the descriptor (so callers can mirror name+description on a sibling
# proposer agent's register_for_llm decorator).
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sbo3l_autogen_keeperhub-1.2.0.tar.gz.
File metadata
- Download URL: sbo3l_autogen_keeperhub-1.2.0.tar.gz
- Upload date:
- Size: 9.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
898bbb8ed95ceb077fa29aec946d4fefdeb7676ba2be33b5387e80d9338a7743
|
|
| MD5 |
420256b05f2ec4bc2515079f5a73b7d6
|
|
| BLAKE2b-256 |
a21e97b9cefb190b5a48c43b098e2518563d002704366e8577fd7277565e06a4
|
Provenance
The following attestation bundles were made for sbo3l_autogen_keeperhub-1.2.0.tar.gz:
Publisher:
integrations-publish.yml on B2JK-Industry/SBO3L-ethglobal-openagents-2026
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sbo3l_autogen_keeperhub-1.2.0.tar.gz -
Subject digest:
898bbb8ed95ceb077fa29aec946d4fefdeb7676ba2be33b5387e80d9338a7743 - Sigstore transparency entry: 1433413703
- Sigstore integration time:
-
Permalink:
B2JK-Industry/SBO3L-ethglobal-openagents-2026@75540196b330efa4e6c9ab638f2d8d9ba8ec1894 -
Branch / Tag:
refs/tags/autogen-keeperhub-py-v1.2.0 - Owner: https://github.com/B2JK-Industry
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
integrations-publish.yml@75540196b330efa4e6c9ab638f2d8d9ba8ec1894 -
Trigger Event:
push
-
Statement type:
File details
Details for the file sbo3l_autogen_keeperhub-1.2.0-py3-none-any.whl.
File metadata
- Download URL: sbo3l_autogen_keeperhub-1.2.0-py3-none-any.whl
- Upload date:
- Size: 10.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2a4e51f3df56598c58c9b4a3bd8bb6410ff92df50ca338e1b0ba44488bae6f72
|
|
| MD5 |
ecf6cb5bc218d7404dca2781fe0009d8
|
|
| BLAKE2b-256 |
d6cb83ab52207704531afce8a776ab408673da65c3c1678e0310df37bf4ebd7c
|
Provenance
The following attestation bundles were made for sbo3l_autogen_keeperhub-1.2.0-py3-none-any.whl:
Publisher:
integrations-publish.yml on B2JK-Industry/SBO3L-ethglobal-openagents-2026
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sbo3l_autogen_keeperhub-1.2.0-py3-none-any.whl -
Subject digest:
2a4e51f3df56598c58c9b4a3bd8bb6410ff92df50ca338e1b0ba44488bae6f72 - Sigstore transparency entry: 1433414047
- Sigstore integration time:
-
Permalink:
B2JK-Industry/SBO3L-ethglobal-openagents-2026@75540196b330efa4e6c9ab638f2d8d9ba8ec1894 -
Branch / Tag:
refs/tags/autogen-keeperhub-py-v1.2.0 - Owner: https://github.com/B2JK-Industry
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
integrations-publish.yml@75540196b330efa4e6c9ab638f2d8d9ba8ec1894 -
Trigger Event:
push
-
Statement type: