from praisonaiagents import Agent, register_approval_callback
from praisonaiagents.tools import ShellTool, FileTools
from praisonaiagents.agents.approval import ApprovalDecision
import logging
# Set up logging
logging.basicConfig(level=logging.INFO)
# Custom approval callback with logging
def logged_approval(tool_name, risk_level, args):
logging.info(f"Approval requested: {tool_name} ({risk_level})")
# Auto-approve read operations
if tool_name.startswith("read_"):
return ApprovalDecision(approved=True, reason="Read operations allowed")
# Require human approval for others
print(f"\n🛡️ Approval Required")
print(f"Tool: {tool_name}")
print(f"Risk: {risk_level}")
print(f"Arguments: {args}")
response = input("Approve? (y/n/m to modify): ").lower()
if response == 'y':
return ApprovalDecision(approved=True, reason="User approved")
elif response == 'm':
# Allow argument modification
new_args = {}
for key, value in args.items():
new_val = input(f"{key} [{value}]: ") or value
new_args[key] = new_val
return ApprovalDecision(
approved=True,
modified_args=new_args,
reason="User approved with modifications"
)
else:
return ApprovalDecision(approved=False, reason="User denied")
# Register the callback
register_approval_callback(logged_approval)
# Create agent with dangerous tools
agent = Agent(
name="System Administrator",
role="Server management",
goal="Maintain system health",
tools=[ShellTool(), FileTools()]
)
# Operations will require approval
response = agent.chat("Check disk usage and clean up if needed")