Python SDK
Python SDK Reference
Integrate Faramesh into your Python-based agents using the ExecutionGovernorClient. Type-safe, production-ready, and developer-friendly.
Installation
Install Faramesh from source
cd fara-core
pip install -e .Basic Usage
Create a client and submit an action in just a few lines
from faracore.sdk import ExecutionGovernorClient
client = ExecutionGovernorClient("http://127.0.0.1:8000")
action = client.submit_action(
tool="http",
operation="get",
params={"url": "https://example.com"},
context={"agent_id": "custbot"}
)
print(action["status"], action["decision"])Programmatic Configuration
Configure the client with custom settings
from faracore.sdk import ExecutionGovernorClient, GovernorConfig
config = GovernorConfig(
base_url="http://localhost:8000",
agent_id="my-agent",
timeout=10.0,
auth_token="your-token",
max_retries=3
)
client = ExecutionGovernorClient(config)Submitting Actions
The submit_action method sends an action for evaluation:
response = client.submit_action(
tool="shell",
operation="run",
params={"cmd": "ls -la"},
context={"agent_id": "test-agent"}
)
# Response includes:
# - id: Action ID
# - status: Current status (pending_decision, pending_approval, allowed, etc.)
# - decision: Policy decision (allow, deny, require_approval)
# - reason: Policy reason
# - approval_token: Token for approval (if require_approval)Getting Action Status
Check the status of an action:
action = client.get_action(action_id)
print(f"Status: {action['status']}")
print(f"Decision: {action['decision']}")Listing Actions
Query actions with filters:
# List all actions
actions = client.list_actions()
# Filter by status
actions = client.list_actions(status="pending_approval")
# Filter by agent
actions = client.list_actions(agent_id="my-agent")
# Filter by tool
actions = client.list_actions(tool="shell")Error Handling
The SDK provides custom exceptions for robust error handling
from faracore.sdk import (
ExecutionGovernorClient,
GovernorError,
GovernorTimeoutError,
GovernorAuthError,
GovernorConnectionError
)
try:
action = client.submit_action(...)
except GovernorAuthError as e:
print(f"Authentication failed: {e}")
except GovernorTimeoutError as e:
print(f"Request timed out: {e}")
except GovernorConnectionError as e:
print(f"Connection failed: {e}")
except GovernorError as e:
print(f"Error: {e}")Complete Example
A full working example showing the complete workflow
from faracore.sdk import ExecutionGovernorClient
# Initialize client
client = ExecutionGovernorClient("http://127.0.0.1:8000")
# Submit an action
response = client.submit_action(
tool="shell",
operation="run",
params={"cmd": "echo 'Hello FaraCore'"},
context={"agent_id": "test-agent"}
)
print(f"Action ID: {response['id']}")
print(f"Status: {response['status']}")
# If approval is required, wait for approval
if response['status'] == 'pending_approval':
print("Action requires approval. Waiting...")
# In production, you might poll or use SSE to wait for approval
# Check final status
action = client.get_action(response['id'])
print(f"Final status: {action['status']}")
# Close the client
client.close()