#!/usr/bin/env python3 """Basic usage example for ClaudeRunner. Demonstrates: 1. Creating a new Claude session 2. Resuming an existing session with context preservation 3. Error handling and timeout configuration """ import asyncio import sys from claude_coordinator.claude_runner import ClaudeRunner async def main(): """Demonstrate basic ClaudeRunner usage.""" # Initialize runner with 2-minute timeout runner = ClaudeRunner(default_timeout=120) print("=" * 60) print("ClaudeRunner Basic Usage Example") print("=" * 60) # Example 1: Create new session print("\n1. Creating new session...") response1 = await runner.run( message="Hello! Please respond with 'Hi there!' and nothing else.", model="sonnet" ) if response1.success: print(f" ✓ Success!") print(f" Response: {response1.result}") print(f" Session ID: {response1.session_id}") print(f" Cost: ${response1.cost:.4f}") print(f" Duration: {response1.duration_ms}ms") else: print(f" ✗ Error: {response1.error}") sys.exit(1) # Example 2: Resume session with context print("\n2. Resuming session with context...") session_id = response1.session_id response2 = await runner.run( message="What did I just ask you to say?", session_id=session_id, model="sonnet" ) if response2.success: print(f" ✓ Success!") print(f" Response: {response2.result}") print(f" Session ID preserved: {response2.session_id == session_id}") print(f" Cost: ${response2.cost:.4f}") else: print(f" ✗ Error: {response2.error}") sys.exit(1) # Example 3: Using allowed tools and working directory print("\n3. Using tool restrictions and working directory...") response3 = await runner.run( message="List the files in the current directory", session_id=session_id, cwd="/opt/projects/claude-coordinator", allowed_tools=["Bash", "Read", "Glob"], # No Write or Edit model="sonnet" ) if response3.success: print(f" ✓ Success!") print(f" Response: {response3.result[:200]}...") print(f" Cost: ${response3.cost:.4f}") else: print(f" ✗ Error: {response3.error}") print("\n" + "=" * 60) print("Total cost for this session: ${:.4f}".format( (response1.cost or 0) + (response2.cost or 0) + (response3.cost or 0) )) print("=" * 60) if __name__ == "__main__": asyncio.run(main())