AGEC
AGEC SDK is a pre-execution governance layer for AI agents.
It is not an agent framework. It validates Intent + Context + Execution Path
immediately before an agent executes tools.
Agent Reasoning
|
AGEC SDK
|
Tool Execution
Installation
pip install agec
To verify the package exactly as a PyPI user would install it on Windows PowerShell:
python -m venv .venv
.\.venv\Scripts\python -m pip install agec
@'
from agec import AGEC, Context, ExecutionPath, Intent
decision = AGEC().validate(
Intent(type="send_price_list", source="pypi_smoke_test", confidence=0.91),
Context(
facts={
"price_list_status": "current",
"campaign_status": "active",
"customer_segment": "premium",
}
),
ExecutionPath(
steps=[
"crm.read_customers",
"pricing.get_latest_list",
"crm.filter_segment",
"email.send_campaign",
],
approved_path_id="price_campaign_v1",
),
)
print(decision.status)
'@ | .\.venv\Scripts\python -
Expected output:
proceed
You can also run the installed CLI demo:
agec-demo
agec-demo --audit-file agec-demo-audit.jsonl
The demo runs deterministic AGEC.validate(...) scenarios and prints
proceed, review, suspend, halt, and reauthorize decisions.
Quick Start
from agec import AGEC, Intent, Context, ExecutionPath
agec = AGEC()
decision = agec.validate(
intent=Intent(
type="send_price_list",
source="user_request",
confidence=0.91,
),
context=Context(
facts={
"price_list_status": "current",
"campaign_status": "active",
"customer_segment": "premium",
}
),
execution_path=ExecutionPath(
steps=[
"crm.read_customers",
"pricing.get_latest_list",
"crm.filter_segment",
"email.send_campaign",
],
approved_path_id="price_campaign_v1",
),
)
print(decision.status)
# proceed / review / suspend / halt / reauthorize
The decision is a structured object:
{
"agec_id": "agec_123",
"status": "proceed",
"intent_score": 0.91,
"context_score": 0.88,
"path_score": 1.0,
"reason": "Intent, context and execution path validated.",
"audit_id": "audit_456"
}
Core API
agec.validate(intent, context, execution_path)
Models
Intent(type: str, source: str, confidence: float)
Context(facts: dict, context_hash: str | None = None)
ExecutionPath(steps: list[str], approved_path_id: str | None = None)
GovernanceDecision(status, reason, intent_score, context_score, path_score)
MVP Decision Logic
| Condition | Decision |
|---|---|
| Intent invalid | halt |
| Intent ambiguous | review |
| Context missing | review |
| Context invalid | suspend |
| Path unknown | reauthorize |
| Path modified | halt |
| All valid | proceed |
Audit Log
Every validation writes an in-memory audit event. You can persist it as JSONL:
from agec import AGEC, AuditLog
audit_log = AuditLog()
agec = AGEC(audit_log=audit_log)
# ... run validations ...
audit_log.save_json("audit.jsonl")
Simple Agent Wrapper
AGEC.wrap_callable(...) can guard a LangGraph node, an OpenAI Agents tool
function, or any regular Python callable:
guarded_tool = agec.wrap_callable(
tool_function,
intent=intent,
context=context,
execution_path=execution_path,
)
result = guarded_tool()
The callable runs only when the decision status is proceed.
OpenAI and LangGraph Adapters
AGEC also ships named adapter helpers. They do not own API keys or create agent framework clients; they guard the callable you are about to execute.
from agec import wrap_openai_tool
guarded_send = wrap_openai_tool(
send_email_campaign,
intent=intent,
context=context,
execution_path=execution_path,
)
result = guarded_send()
For LangGraph-style nodes, static model objects or state-aware factories can be used:
from agec import Context, ExecutionPath, Intent, wrap_langgraph_node
guarded_node = wrap_langgraph_node(
node,
intent=lambda state: Intent(
type=state["intent_type"],
source="agent_plan",
confidence=state["confidence"],
),
context=lambda state: Context(facts=state["facts"]),
execution_path=lambda state: ExecutionPath(
steps=state["steps"],
approved_path_id=state["approved_path_id"],
),
)
If AGEC returns anything other than proceed, the adapter raises
AGECExecutionBlocked and the wrapped call is not executed.
Examples
agec-demoexamples/cto_demo.pyexamples/01_basic_validation.pyexamples/02_block_bad_context.pyexamples/03_openai_tool_guard.pyexamples/04_langgraph_node_guard.pyexamples/05_audit_log.pyexamples/06_persisted_audit_log.pyexamples/07_local_automation_guard.pyexamples/08_sales_campaign.py
Run demos locally:
PYTHONPATH=src python examples/cto_demo.py
PYTHONPATH=src python examples/01_basic_validation.py
PYTHONPATH=src python examples/02_block_bad_context.py
PYTHONPATH=src python examples/03_openai_tool_guard.py
PYTHONPATH=src python examples/04_langgraph_node_guard.py
PYTHONPATH=src python examples/05_audit_log.py
PYTHONPATH=src python examples/06_persisted_audit_log.py
PYTHONPATH=src python examples/07_local_automation_guard.py
PYTHONPATH=src python examples/08_sales_campaign.py
Roadmap
- Python SDK
- Audit log
- Simple LangGraph/OpenAI Agents-compatible callable wrapper
- Named OpenAI/LangGraph adapter helpers
- MCP server
License
Apache-2.0
Metadata
Release files for agec 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| agec-0.2.0.tar.gz | 14.5 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| agec-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 29.4 kB
Release files / agec-0.2.0.tar.gz
| Download URL | agec-0.2.0.tar.gz |
|---|---|
| Size | 14.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b84c30c0bf8f91facf76a56c7290d562b31db0c500b5f4df712d483ad75a0cdc
|
|
BLAKE2b-256 checksum How to use checksums |
3cdfdf67d4f504d166b3612671b9e2e7cf3fbbcba71452d89918c494d32f350d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.2
|
Release files / agec-0.2.0-py3-none-any.whl
| Download URL | agec-0.2.0-py3-none-any.whl |
|---|---|
| Size | 14.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a735288eafe644f6b6554f5c448eae69eb6f5d2b7259ddc86631843daa31ec42
|
|
BLAKE2b-256 checksum How to use checksums |
496a32badb5e63ef5e201c88d110a5033a16e1ed1257ffe2a78af0117a3f86ec
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.2
|
Security for agec 0.2.0
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.