Skip to content

Agents

In this document, you'll learn about the structure and components of an agent project. We'll cover the following sections:

  • Project files: Understand the basic file structure of an agent project.
  • Agent: Learn how to set up and run an agent using XMTP's message-kit.
  • Skills: Discover how to define the actions your agent can perform.
  • Plugins: Learn about plugins that can enhance the capabilities of your agent's skills.
  • Vibes: Understand how to define the personality and style of your agent.

Project files

Each agent project consists of the following basic structure:

agent/
├── src/
   └── index.ts
   └── skills/
       └── ...
├── tsconfig.json
├── package.json
└── .env

Agent

This is the main function that runs the listener.

import { agentReply, Context, createAgent } from "@xmtp/message-kit";
 
export const agent = createAgent({
  name: "GPT Bot",
  description: "Use GPT to generate text responses.",
  tag: "@bot",
  onMessage: async (context: Context) => {
    await agentReply(context);
  },
}).run();

Config

config: {
  /* Optional properties */
}
  • privateKey: the private key of the agent wallet, like any normal wallet private key.
  • experimental: experimental features like logging all group messages. Default is false.
  • attachments: to receive attachments. Default is false.
  • gptModel: model to be used. Default is gpt-4o.
  • client: Optional parameters to pass to the XMTP client.
  • agent: Custom agent to be used. Default is to create the skills in the src/skills.ts file.
  • hideInitLogMessage: hide the init log message with messagekit logo and stuff
  • memberChange: if true, member changes will be enabled, like adding members to the group

Skills

Skills are the actions that the agent can perform. They are defined in the src/skills/your-skill.ts file.

import { Skill } from "@xmtp/message-kit";
 
export const skills: Skill[] = [
  {
    skill: // name of the skill
    handler: handler(context)
    examples: // examples of the skill
    description: // description of the skill
    params: // params of the skill
  },
];

Learn more about skills in the Skills section.

Plugins

Plugins are the plugins that the Skills can use. They are defined in the plugins/your-plugin.ts file.

import { createClient } from "@redis/client";
import type { RedisClientType } from "@redis/client";
 
export const getRedisClient = async () => {
  const client = createClient({
    url: process.env.REDIS_CONNECTION_STRING,
  });
 
  client.on("error", (err) => {
    console.error("Redis client error:", err);
  });
 
  await client.connect();
  return client as RedisClientType;
};

See Plugins for more information.

Vibes

Vibes are the personalities of the agent. They are defined in the src/vibes/your-vibe.ts file.

import { Vibe } from "@xmtp/message-kit";
 
export const chill: Vibe = {
  vibe: // name of the vibe
  description: // description of the vibe
  tone: // tone of the vibe
  style: // style of the vibe
};

See Vibes for more information.