TypeScript AI Agents Framework

A production-ready Multi AI Agents framework for TypeScript

PraisonAI is a production-ready Multi AI Agents framework for TypeScript, designed to create AI Agents to automate and solve problems ranging from simple tasks to complex challenges. It provides a low-code solution to streamline the building and management of multi-agent LLM systems, emphasising simplicity, customisation, and effective human-agent collaboration.

Diagram

📋 Task

🤖 AI Agent

🔧 Tools

📋 Task

🤖 AI Agent

🔧 Tools

▶ Start

⚙ Process

✓ Output

TypeScript

Quick Start

  1. Simple Usage
    npm
    npm install praisonai@latest
    yarn
    yarn add praisonai@latest
  2. With Configuration
    bash
    export OPENAI_API_KEY=xxxxxxxxxxxxxxxxxxxxxx
  3. Create File

    Create app.ts file

    ## Code Example

    Single Agent
    import { Agent } from 'praisonai';
    
    const agent = new Agent({ 
      instructions: `You are a creative writer who writes short stories with emojis.`,
      name: "StoryWriter"
    });
    
    agent.start("Write a story about a time traveler")
    Multi Agents
    import { Agent, AgentTeam } from 'praisonai';
    
    const storyAgent = new Agent({
      instructions: "Generate a very short story (2-3 sentences) about artificial intelligence with emojis.",
      name: "StoryAgent"
    });
    
    const summaryAgent = new Agent({
      instructions: "Summarize the provided AI story in one sentence with emojis.",
      name: "SummaryAgent"
    });
    
    const agents = new AgentTeam({
      agents: [storyAgent, summaryAgent]
    });
    
    agents.start()
  4. Run Script
    bash
    npx ts-node app.ts

Usage Examples

Single Agent Example

Create and run a single agent to perform a specific task:

typescript
import { Agent } from 'praisonai';

// Single agent example - Science Explainer
const agent = new Agent({ 
  instructions: `You are a science expert who explains complex phenomena in simple terms.
Provide clear, accurate, and easy-to-understand explanations.`,
  name: "ScienceExplainer",
  verbose: true
});

agent.start("Why is the sky blue?")
  .then(response => {
    console.log('\nExplanation:');
    console.log(response);
  })
  .catch(error => {
    console.error('Error:', error);
  });
Multi-Agent Example

Create and run multiple agents working together:

typescript
import { Agent, AgentTeam } from 'praisonai';

// Create story agent
const storyAgent = new Agent({
  instructions: "You are a storyteller. Write a very short story (2-3 sentences) about a given topic.",
  name: "StoryAgent",
  verbose: true
});

// Create summary agent
const summaryAgent = new Agent({
  instructions: "You are an editor. Create a one-sentence summary of the given story.",
  name: "SummaryAgent",
  verbose: true
});

// Create and start agents
const agents = new AgentTeam({
  agents: [storyAgent, summaryAgent],
  tasks: [
    "Write a short story about a cat",
    "{previous_result}"  // This will be replaced with the story
  ],
  verbose: true
});

agents.start()
  .then(results => {
    console.log('\nStory:', results[0]);
    console.log('\nSummary:', results[1]);
  })
  .catch(error => console.error('Error:', error));
Task-Based Agent Example

Create agents with specific tasks and dependencies:

typescript
import { Agent, AgentTeam } from 'praisonai';

// Create recipe agent
const recipeAgent = new Agent({
  instructions: `You are a professional chef and nutritionist. Create 5 healthy food recipes that are both nutritious and delicious.
Each recipe should include:
1. Recipe name
2. List of ingredients with quantities
3. Step-by-step cooking instructions
4. Nutritional information
5. Health benefits

Format your response in markdown.`,
  name: "RecipeAgent",
  verbose: true
});

// Create blog agent
const blogAgent = new Agent({
  instructions: `You are a food and health blogger. Write an engaging blog post about the provided recipes.
The blog post should:
1. Have an engaging title
2. Include an introduction about healthy eating
3. Discuss each recipe and its unique health benefits
4. Include tips for meal planning and preparation
5. End with a conclusion encouraging healthy eating habits

Here are the recipes to write about:
{previous_result}

Format your response in markdown.`,
  name: "BlogAgent",
  verbose: true
});

// Create Agents instance with tasks
const agents = new AgentTeam({
  agents: [recipeAgent, blogAgent],
  tasks: [
    "Create 5 healthy and delicious recipes",
    "Write a blog post about the recipes"
  ],
  verbose: true
});

// Start the agents
agents.start()
  .then(results => {
    console.log('\nFinal Results:');
    console.log('\nRecipe Task Results:');
    console.log(results[0]);
    console.log('\nBlog Task Results:');
    console.log(results[1]);
  })
  .catch(error => {
    console.error('Error:', error);
  });

Running the Examples

  1. Set Environment Variables
    bash
    export OPENAI_API_KEY='your-api-key'
  2. Create Example File

    Create a new TypeScript file (e.g., app.ts) with any of the above examples.

  3. Run the Example
    bash
    npx ts-node app.ts

Tool Calls Examples

Direct Function Tools

Create an agent with directly registered function tools:

typescript
import { Agent } from 'praisonai';

async function getWeather(location: string) {
  console.log(`Getting weather for ${location}...`);
  return `${Math.floor(Math.random() * 30)}°C`;
}

async function getTime(location: string) {
  console.log(`Getting time for ${location}...`);
  const now = new Date();
  return `${now.getHours()}:${now.getMinutes()}`;
}

const agent = new Agent({ 
  instructions: `You provide the current weather and time for requested locations.`,
  name: "DirectFunctionAgent",
  tools: [getWeather, getTime]
});

agent.start("What's the weather and time in Paris, France and Tokyo, Japan?");

Package Structure

PraisonAI ships two entry points from one package.

  • praisonai — the full framework: agents, tools, MCP, CLI, and everything else. Import this in Node and server builds.
  • praisonai/mobile — a webview-safe subpath export (~77 kB bundle). Import Agent and its types from here in phone, browser, or Tauri builds. See Mobile Entry for details.

Parity Notices

A few Python names resolve differently in the TypeScript SDK. Reach for the runtime entry point below.

Python nameIn TypeScriptUse instead
LLMType only — no runtime constructor. new LLM() throws.Configure the model on the agent: new Agent({ llm: 'gpt-4o' }).
TaskWorkflow-step class ({ name, execute }).Pass a plain task object or string to Team — see Tasks.
FunctionToolNot user-constructible.Wrap a function with tool(fn) — see Custom Tools.

Related