AI-powered chat agent using Cloudflare's agents-sdk.
├── src/
│   ├── app.tsx        # Chat UI implementation
│   ├── server.ts      # Chat agent logic
│   ├── tools.ts       # Tool definitions
│   ├── utils.ts       # Helper functions
│   └── styles.css     # UI stylingAdd new tools in tools.ts using the tool builder:
// Example of a tool that requires confirmation
const searchDatabase = tool({
  description: "Search the database for user records",
  parameters: z.object({
    query: z.string(),
    limit: z.number().optional(),
  }),
  // No execute function = requires confirmation
});
// Example of an auto-executing tool
const getCurrentTime = tool({
  description: "Get current server time",
  parameters: z.object({}),
  execute: async () => new Date().toISOString(),
});
// Scheduling tool implementation
const scheduleTask = tool({
  description:
    "schedule a task to be executed at a later time. 'when' can be a date, a delay in seconds, or a cron pattern.",
  parameters: z.object({
    type: z.enum(["scheduled", "delayed", "cron"]),
    when: z.union([z.number(), z.string()]),
    payload: z.string(),
  }),
  execute: async ({ type, when, payload }) => {
    // ... see the implementation in tools.ts
  },
});To handle tool confirmations, add execution functions to the executions object:
export const executions = {
  searchDatabase: async ({
    query,
    limit,
  }: {
    query: string;
    limit?: number;
  }) => {
    // Implementation for when the tool is confirmed
    const results = await db.search(query, limit);
    return results;
  },
  // Add more execution handlers for other tools that require confirmation
};Tools can be configured in two ways:
- With an executefunction for automatic execution
- Without an executefunction, requiring confirmation and using theexecutionsobject to handle the confirmed action
The starting server.ts implementation uses the ai-sdk and the OpenAI provider, but you can use any AI model provider by:
- Installing an alternative AI provider for the ai-sdk, such as theworkers-ai-provideroranthropicprovider:
- Replacing the AI SDK with the OpenAI SDK
- Using the Cloudflare Workers AI + AI Gateway binding API directly
For example, to use the workers-ai-provider, install the package:
npm install workers-ai-providerAdd an ai binding to wrangler.jsonc:
Replace the @ai-sdk/openai import and usage with the workers-ai-provider:
// server.ts
// Change the imports
- import { createOpenAI } from "@ai-sdk/openai";
+ import { createWorkersAI } from 'workers-ai-provider';
// Create a Workers AI instance
- const openai = createOpenAI({
-     apiKey: this.env.OPENAI_API_KEY,
- });
+ const workersai = createWorkersAI({ binding: env.AI });
// Use it when calling the streamText method (or other methods)
// from the ai-sdk
- const result = streamText({
-    model: openai("gpt-4o-2024-11-20"),
+ const model = workersai("@cf/deepseek-ai/deepseek-r1-distill-qwen-32b")Commit your changes and then run the agents-starter as per the rest of this README.
The chat interface is built with React and can be customized in app.tsx:
- Modify the theme colors in styles.css
- Add new UI components in the chat container
- Customize message rendering and tool confirmation dialogs
- Add new controls to the header
- 
Customer Support Agent - Add tools for:
- Ticket creation/lookup
- Order status checking
- Product recommendations
- FAQ database search
 
 
- Add tools for:
- 
Development Assistant - Integrate tools for:
- Code linting
- Git operations
- Documentation search
- Dependency checking
 
 
- Integrate tools for:
- 
Data Analysis Assistant - Build tools for:
- Database querying
- Data visualization
- Statistical analysis
- Report generation
 
 
- Build tools for:
- 
Personal Productivity Assistant - Implement tools for:
- Task scheduling with flexible timing options
- One-time, delayed, and recurring task management
- Task tracking with reminders
- Email drafting
- Note taking
 
 
- Implement tools for:
- 
Scheduling Assistant - Build tools for:
- One-time event scheduling using specific dates
- Delayed task execution (e.g., "remind me in 30 minutes")
- Recurring tasks using cron patterns
- Task payload management
- Flexible scheduling patterns
 
 
- Build tools for:
Each use case can be implemented by:
- Adding relevant tools in tools.ts
- Customizing the UI for specific interactions
- Extending the agent's capabilities in server.ts
- Adding any necessary external API integrations