Metadata-Version: 2.4 Name: goose-client Version: 2.0.0 Summary: Python client for Goose AI agent Author-email: Goose Contributors License: Apache-2.0 Project-URL: Homepage, https://github.com/block/goose Project-URL: Documentation, https://github.com/block/goose/tree/main/clients/python-v2 Project-URL: Repository, https://github.com/block/goose Project-URL: Issues, https://github.com/block/goose/issues Classifier: Development Status :: 4 - Beta Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: Apache Software License Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Classifier: Topic :: Software Development :: Libraries :: Python Modules Requires-Python: >=3.8 Description-Content-Type: text/markdown Requires-Dist: httpx>=0.24.0 Requires-Dist: httpx-sse>=0.3.0 Requires-Dist: pydantic>=2.0 Requires-Dist: python-dateutil>=2.8.2 Requires-Dist: urllib3>=1.25.3 Requires-Dist: typing-extensions>=4.0.0 Provides-Extra: async Requires-Dist: asyncio>=3.4.3; extra == "async" Provides-Extra: dev Requires-Dist: pytest>=7.0; extra == "dev" Requires-Dist: pytest-asyncio>=0.21; extra == "dev" Requires-Dist: pytest-cov>=4.0; extra == "dev" Requires-Dist: black>=23.0; extra == "dev" Requires-Dist: mypy>=1.0; extra == "dev" Requires-Dist: ruff>=0.1.0; extra == "dev" # Goose Python Client A simple and powerful Python client for the Goose AI agent. ## Features - ✅ Simple chat interface - ✅ Session management with context managers - ✅ Streaming support (SSE) - ✅ Tool confirmation handling for non-autonomous mode - ✅ Type hints throughout - ✅ Async support for streaming - ✅ Optional extensions for retry and session management ## Installation ```bash pip install goose-client ``` ## Quick Start ```python from goose_client import GooseClient # Initialize client client = GooseClient(api_key="your-api-key") # Simple chat response = client.chat("What is 2+2?") print(response) # "4" # One-shot Q&A answer = client.ask("What's the weather like?") # With session context with client.session() as session: response1 = client.chat("Remember the number 42", session.id) response2 = client.chat("What number did I ask you to remember?", session.id) print(response2) # "You asked me to remember 42" # Streaming for chunk in client.stream_chat("Tell me a story"): print(chunk, end="", flush=True) ``` ## Tool Confirmation (Non-Autonomous Mode) When the Goose server is not in autonomous mode, it will request confirmation before executing tools: ```python # Auto-confirm all tools for chunk in client.stream_chat_with_confirmations( "List files in current directory", auto_confirm="allow_once" # or "always_allow" or "deny" ): if isinstance(chunk, str): print(chunk, end="") # Manual confirmation for chunk in client.stream_chat_with_confirmations( "Create a new file", auto_confirm=None # Manual handling ): if isinstance(chunk, str): print(chunk, end="") else: # Handle tool confirmation request print(f"Tool {chunk['toolName']} needs confirmation") # Show security prompt if present if chunk.get('prompt'): print(f"Security: {chunk['prompt']}") # Confirm the tool client.confirm_permission( chunk['id'], "allow_once", # or "always_allow" or "deny" session.id ) ``` ## Session Management ```python # Manual session management session = client.create_session("/home/project") client.chat("Analyze this project", session_id=session.id) # List sessions sessions = client.list_sessions() for s in sessions[:5]: print(f"{s.id}: {s.working_dir}") # Delete session client.delete_session(session.id) ``` ## Advanced Usage with Extensions ### Retry Extension Add automatic retry with exponential backoff: ```python from goose_client import GooseClient from goose_client.extensions import with_retry # Add retry capability client = with_retry( GooseClient(api_key="your-key"), max_retries=5, backoff_factor=2.0 ) # Now all methods have automatic retry response = client.chat("Hello") # Will retry on failure ``` ### Session Manager Extension Advanced session management features: ```python from goose_client.extensions import with_session_manager # Add session management client = with_session_manager(GooseClient(api_key="your-key")) # Save and load sessions session = client.create_session() client.session_manager.save_session(session.id, "project_analysis") # Later, load the session saved_id = client.session_manager.load_session("project_analysis") client.chat("Continue the analysis", session_id=saved_id) # List saved sessions saved = client.session_manager.list_saved() print(saved) ``` ## Async Support ```python import asyncio from goose_client import GooseClient async def main(): client = GooseClient(api_key="your-key") # Async streaming async for event in client.astream_reply(session_id, messages): print(event) asyncio.run(main()) ``` ## Direct Access to Generated Client For advanced users who need full control: ```python from goose_client import GooseClient, StartAgentRequest client = GooseClient(api_key="your-key") # Access the generated API client directly raw_response = client._agent_api.start_agent( StartAgentRequest(working_dir="/tmp", prompt="Custom prompt") ) # Use generated models from goose_client import Message, Content custom_message = Message( role="user", content=[{"type": "text", "text": "Hello"}] ) ``` ## Configuration ### Environment Variables - `GOOSE_API_KEY`: Default API key - `GOOSE_BASE_URL`: Default server URL (default: http://localhost:3000) ### Custom Configuration ```python client = GooseClient( api_key="your-key", base_url="https://your-goose-server.com" ) ``` ## Error Handling ```python try: response = client.chat("Hello") except Exception as e: print(f"Error: {e}") # Check server health if client.is_healthy: print("Server is running") else: print("Server is down") ``` ## Examples See the `examples/` directory for more detailed examples: - `quickstart.py` - Basic usage examples - `streaming.py` - Streaming responses - `tool_confirmation.py` - Handling tool confirmations in non-autonomous mode ## API Reference ### GooseClient Main client class for interacting with Goose. #### Methods - `chat(text, session_id=None)` - Send a message and get response - `stream_chat(text, session_id=None)` - Stream response chunks - `stream_chat_with_confirmations(text, session_id=None, auto_confirm=None)` - Stream with tool confirmation support - `ask(question)` - One-shot Q&A - `create_session(working_dir="/tmp")` - Create a new session - `session(working_dir="/tmp")` - Context manager for sessions - `list_sessions()` - List all sessions - `get_session(session_id)` - Get session details - `delete_session(session_id)` - Delete a session - `list_tools(session_id=None)` - List available tools - `list_extensions()` - List available extensions - `confirm_permission(confirmation_id, action, session_id=None)` - Confirm or deny tool execution - `health_check()` - Check server health #### Properties - `is_healthy` - Boolean indicating server health - `active_session_id` - Currently active session ID ## License Apache 2.0 ## Contributing See [CONTRIBUTING.md](https://github.com/block/goose/blob/main/CONTRIBUTING.md) in the main Goose repository.