# getCurrentAgent() ## Automatic Context for Custom Methods **All custom methods automatically have full agent context!** The framework automatically detects and wraps your custom methods during initialization, ensuring `getCurrentAgent()` works seamlessly everywhere. ## How It Works ```typescript import { AIChatAgent } from "@cloudflare/ai-chat"; import { getCurrentAgent } from "agents"; export class MyAgent extends AIChatAgent { async customMethod() { const { agent } = getCurrentAgent(); // ✅ agent is automatically available! console.log(agent.name); } async anotherMethod() { // ✅ This works too - no setup needed! const { agent } = getCurrentAgent(); return agent.state; } } ``` **Zero configuration required!** The framework automatically: 1. Scans your agent class for custom methods 2. Wraps them with agent context during initialization 3. Ensures `getCurrentAgent()` works in all external functions called from your methods ## Real-World Example ```typescript import { AIChatAgent } from "@cloudflare/ai-chat"; import { getCurrentAgent } from "agents"; import { generateText } from "ai"; import { openai } from "@ai-sdk/openai"; // External utility function that needs agent context async function processWithAI(prompt: string) { const { agent } = getCurrentAgent(); // ✅ External functions can access the current agent! return await generateText({ model: openai("gpt-4"), prompt: `Agent ${agent?.name}: ${prompt}` }); } export class MyAgent extends AIChatAgent { async customMethod(message: string) { // Use this.* to access agent properties directly console.log("Agent name:", this.name); console.log("Agent state:", this.state); // External functions automatically work! const result = await processWithAI(message); return result.text; } } ``` ### Built-in vs Custom Methods - **Built-in methods** (onRequest, onEmail, onStateChanged): Already have context - **Custom methods** (your methods): Automatically wrapped during initialization - **External functions**: Access context through `getCurrentAgent()` ### The Context Flow ```typescript // When you call a custom method: agent.customMethod() → automatically wrapped with agentContext.run() → your method executes with full context → external functions can use getCurrentAgent() ``` ## Common Use Cases ### Working with AI SDK Tools ```typescript import { AIChatAgent } from "@cloudflare/ai-chat"; import { generateText } from "ai"; import { openai } from "@ai-sdk/openai"; export class MyAgent extends AIChatAgent { async generateResponse(prompt: string) { // AI SDK tools automatically work const response = await generateText({ model: openai("gpt-4"), prompt, tools: { // Tools that use getCurrentAgent() work perfectly } }); return response.text; } } ``` ### Calling External Libraries ```typescript import { AIChatAgent } from "@cloudflare/ai-chat"; import { getCurrentAgent } from "agents"; async function saveToDatabase(data: any) { const { agent } = getCurrentAgent(); // Can access agent info for logging, context, etc. console.log(`Saving data for agent: ${agent?.name}`); } export class MyAgent extends AIChatAgent { async processData(data: any) { // External functions automatically have context await saveToDatabase(data); } } ``` ## API Reference The agents package exports one main function for context management: ### `getCurrentAgent()` Gets the current agent from any context where it's available. **Returns:** ```typescript { agent: T | undefined, connection: Connection | undefined, request: Request | undefined } ``` **Usage:** ```typescript import { AIChatAgent } from "@cloudflare/ai-chat"; import { getCurrentAgent } from "agents"; export class MyAgent extends AIChatAgent { async customMethod() { const { agent, connection, request } = getCurrentAgent(); // agent is properly typed as MyAgent // connection and request available if called from a request handler } } ```