diff --git a/.changeset/shiny-camels-deny.md b/.changeset/shiny-camels-deny.md
new file mode 100644
index 0000000000000000000000000000000000000000..ca8da4eff6193d4261e0f32cb39d0be701d69776
--- /dev/null
+++ b/.changeset/shiny-camels-deny.md
@@ -0,0 +1,6 @@
+---
+"llamaindex": patch
+"@llamaindex/workflow": patch
+---
+
+feat: make AgentWorkflow llm param optional
diff --git a/apps/next/src/content/docs/llamaindex/modules/workflows.mdx b/apps/next/src/content/docs/llamaindex/modules/workflows.mdx
index f717bd5f57768a63e392eb108f7012f39c8afb15..eb53567a428ad76fec3e8ed2f4ca62614559b12e 100644
--- a/apps/next/src/content/docs/llamaindex/modules/workflows.mdx
+++ b/apps/next/src/content/docs/llamaindex/modules/workflows.mdx
@@ -119,7 +119,7 @@ Lastly, we run the workflow. The `.run()` method is async, so we use await here
 Optionally, you can choose to use a shared context between steps by specifying a context type when creating the workflow. Here's an example where multiple steps access a shared state:
 
 ```typescript
-import { HandlerContext } from "@llamaindex/workflow";
+import { HandlerContext } from "llamaindex";
 
 type MyContextData = {
   query: string;
diff --git a/examples/agentworkflow/multiple_agents.ts b/examples/agentworkflow/multiple_agents.ts
index 4ff86699da1b6e1f3d6230a6a3339f667fd7ebb2..1340ebc98ca605b0317e6c522d3165dbd9af163f 100644
--- a/examples/agentworkflow/multiple_agents.ts
+++ b/examples/agentworkflow/multiple_agents.ts
@@ -4,7 +4,6 @@
  * 2. TemperatureConverterAgent - Converts the temperature from Fahrenheit to Celsius
  */
 import { OpenAI } from "@llamaindex/openai";
-import { StopEvent } from "@llamaindex/workflow";
 import {
   AgentInput,
   AgentOutput,
@@ -14,6 +13,7 @@ import {
   AgentWorkflow,
   FunctionAgent,
   FunctionTool,
+  StopEvent,
 } from "llamaindex";
 import { z } from "zod";
 
diff --git a/examples/agentworkflow/single_agent.ts b/examples/agentworkflow/single_agent.ts
index ab1300151458290d3afaf011ffa73b9bf4364891..9a849ab52e3a30c54c6ecc03caccc25c20463130 100644
--- a/examples/agentworkflow/single_agent.ts
+++ b/examples/agentworkflow/single_agent.ts
@@ -2,17 +2,18 @@
  * This example shows how to use AgentWorkflow as a single agent with tools
  */
 import { OpenAI } from "@llamaindex/openai";
-import { AgentWorkflow } from "llamaindex";
+import { AgentWorkflow, Settings } from "llamaindex";
 import { getWeatherTool } from "../agent/utils/tools";
 
 const llm = new OpenAI({
   model: "gpt-4o",
 });
 
+Settings.llm = llm;
+
 async function singleWeatherAgent() {
   const workflow = AgentWorkflow.fromTools({
     tools: [getWeatherTool],
-    llm,
     verbose: false,
   });
 
diff --git a/examples/node/workflow/basic.ts b/examples/node/workflow/basic.ts
index 39c8fa9d112299d34bb632f8cd96d56b6fa976ed..65d855ddc9b32cdcc596a07ee4e247afb03e442f 100644
--- a/examples/node/workflow/basic.ts
+++ b/examples/node/workflow/basic.ts
@@ -1,4 +1,4 @@
-import { StartEvent, StopEvent, Workflow } from "@llamaindex/workflow";
+import { StartEvent, StopEvent, Workflow } from "llamaindex";
 
 type ContextData = {
   counter: number;
diff --git a/examples/workflow/app-creator.ts b/examples/workflow/app-creator.ts
index c1b05659eb24fbe3b9015a5f9a66fa34553da916..08f9508c69cf8188405a2cb46d63299651a108bc 100644
--- a/examples/workflow/app-creator.ts
+++ b/examples/workflow/app-creator.ts
@@ -5,7 +5,7 @@ import {
   StopEvent,
   Workflow,
   WorkflowEvent,
-} from "@llamaindex/workflow";
+} from "llamaindex";
 
 const MAX_REVIEWS = 3;
 
diff --git a/examples/workflow/conditional.ts b/examples/workflow/conditional.ts
index 6a2e384069f7eb959e25c5f1875bae9964aa2ebf..25fafe5017fbe08d57d3db51e2cda12de38ffefd 100644
--- a/examples/workflow/conditional.ts
+++ b/examples/workflow/conditional.ts
@@ -5,7 +5,7 @@ import {
   StopEvent,
   Workflow,
   WorkflowEvent,
-} from "@llamaindex/workflow";
+} from "llamaindex";
 
 // Create LLM instance
 const llm = new OpenAI();
diff --git a/examples/workflow/joke.ts b/examples/workflow/joke.ts
index b13e4dd1813d2725675157534a5a85158908d5b3..76f5ccbfb164edf42643747b3533a5d3226febb5 100644
--- a/examples/workflow/joke.ts
+++ b/examples/workflow/joke.ts
@@ -1,10 +1,5 @@
 import { OpenAI } from "@llamaindex/openai";
-import {
-  StartEvent,
-  StopEvent,
-  Workflow,
-  WorkflowEvent,
-} from "@llamaindex/workflow";
+import { StartEvent, StopEvent, Workflow, WorkflowEvent } from "llamaindex";
 
 // Create LLM instance
 const llm = new OpenAI();
diff --git a/examples/workflow/stream-events.ts b/examples/workflow/stream-events.ts
index 8d337b3540ecc37b94a945ea369482a844d195f6..576229c9233f40b3595680533a8e11bd0442e64c 100644
--- a/examples/workflow/stream-events.ts
+++ b/examples/workflow/stream-events.ts
@@ -5,7 +5,7 @@ import {
   StopEvent,
   Workflow,
   WorkflowEvent,
-} from "@llamaindex/workflow";
+} from "llamaindex";
 
 // Create LLM instance
 const llm = new OpenAI();
diff --git a/examples/workflow/timeout.ts b/examples/workflow/timeout.ts
index 261fb39808901dd5c33e47cf0f4abe85d3b16b2f..fee67464d17e747331a76055ca310239f48c8b60 100644
--- a/examples/workflow/timeout.ts
+++ b/examples/workflow/timeout.ts
@@ -1,4 +1,4 @@
-import { StartEvent, StopEvent, Workflow } from "@llamaindex/workflow";
+import { StartEvent, StopEvent, Workflow } from "llamaindex";
 
 const longRunning = async (_: unknown, ev: StartEvent<string>) => {
   await new Promise((resolve) => setTimeout(resolve, 2000)); // Wait for 2 seconds
diff --git a/examples/workflow/validation.ts b/examples/workflow/validation.ts
index 7bfacf8442e334e34b6b1790da48307b201f9bb0..2b34fd63849669d5db68c7ed63ef82079041681a 100644
--- a/examples/workflow/validation.ts
+++ b/examples/workflow/validation.ts
@@ -1,10 +1,5 @@
 import { OpenAI } from "@llamaindex/openai";
-import {
-  StartEvent,
-  StopEvent,
-  Workflow,
-  WorkflowEvent,
-} from "@llamaindex/workflow";
+import { StartEvent, StopEvent, Workflow, WorkflowEvent } from "llamaindex";
 
 // Create LLM instance
 const llm = new OpenAI();
diff --git a/packages/llamaindex/src/index.edge.ts b/packages/llamaindex/src/index.edge.ts
index 3a79a2080521af7d81a55f909a21fdc55aa9619f..5750a8f7c59ebc34d73e63594b83b82d80b5a735 100644
--- a/packages/llamaindex/src/index.edge.ts
+++ b/packages/llamaindex/src/index.edge.ts
@@ -67,6 +67,7 @@ export * from "@llamaindex/core/storage/index-store";
 export * from "@llamaindex/core/storage/kv-store";
 export * from "@llamaindex/core/utils";
 export * from "@llamaindex/openai";
+export * from "@llamaindex/workflow";
 export * from "@llamaindex/workflow/agent";
 export * from "./agent/index.js";
 export * from "./cloud/index.js";
diff --git a/packages/workflow/src/agent/agent-workflow.ts b/packages/workflow/src/agent/agent-workflow.ts
index aa83ad3be2d5e33195dfe5b7b11c486817b22dc5..5471ae746ef69589ff0517ce27bec89776483078 100644
--- a/packages/workflow/src/agent/agent-workflow.ts
+++ b/packages/workflow/src/agent/agent-workflow.ts
@@ -159,7 +159,7 @@ export class AgentWorkflow {
     timeout,
   }: {
     tools: BaseToolWithCall[];
-    llm: ToolCallLLM;
+    llm?: ToolCallLLM;
     systemPrompt?: string;
     verbose?: boolean;
     timeout?: number;
diff --git a/packages/workflow/src/agent/function-agent.ts b/packages/workflow/src/agent/function-agent.ts
index d59155e8e9b5ae146c7678e1ac5a02478ceb8097..29b6e9d856432995e74df7157a4874b9b08c46c1 100644
--- a/packages/workflow/src/agent/function-agent.ts
+++ b/packages/workflow/src/agent/function-agent.ts
@@ -1,4 +1,5 @@
 import type { JSONObject } from "@llamaindex/core/global";
+import { Settings } from "@llamaindex/core/global";
 import type {
   BaseToolWithCall,
   ChatMessage,
@@ -23,7 +24,7 @@ export type FunctionAgentParams = {
   /**
    * LLM to use for the agent, required.
    */
-  llm: ToolCallLLM;
+  llm?: ToolCallLLM | undefined;
   /**
    * Description of the agent, useful for task assignment.
    * Should provide the capabilities or responsibilities of the agent.
@@ -60,7 +61,7 @@ export class FunctionAgent implements BaseWorkflowAgent {
     systemPrompt,
   }: FunctionAgentParams) {
     this.name = name;
-    this.llm = llm;
+    this.llm = llm ?? (Settings.llm as ToolCallLLM);
     this.description = description;
     this.tools = tools;
     if (tools.length === 0) {
diff --git a/unit/workflow/workflow-ui.test.tsx b/unit/workflow/workflow-ui.test.tsx
index ffd4b30d23a86589e4ff1c665da821a3b99d4fe9..5c0b8f6d78fae6d87800e628c335dedd24b5b07f 100644
--- a/unit/workflow/workflow-ui.test.tsx
+++ b/unit/workflow/workflow-ui.test.tsx
@@ -1,9 +1,4 @@
-import {
-  StartEvent,
-  StopEvent,
-  Workflow,
-  WorkflowEvent,
-} from "@llamaindex/workflow";
+import { StartEvent, StopEvent, Workflow, WorkflowEvent } from "llamaindex";
 import type { ReactNode } from "react";
 import { describe, expect, test } from "vitest";
 
diff --git a/unit/workflow/workflow.test.ts b/unit/workflow/workflow.test.ts
index 522bc3a3768a282d80dc60583e7a826d54129f1c..fd7ed5b73cabb34f0cae975995407c7eb3cc0da4 100644
--- a/unit/workflow/workflow.test.ts
+++ b/unit/workflow/workflow.test.ts
@@ -1,14 +1,5 @@
-import type {
-  HandlerContext,
-  StepHandler,
-  StepParameters,
-} from "@llamaindex/workflow";
-import {
-  StartEvent,
-  StopEvent,
-  Workflow,
-  WorkflowEvent,
-} from "@llamaindex/workflow";
+import type { HandlerContext, StepHandler, StepParameters } from "llamaindex";
+import { StartEvent, StopEvent, Workflow, WorkflowEvent } from "llamaindex";
 import {
   beforeEach,
   describe,