What are Providers?

Providers = data sources that supply context for agent decision-making.

Provider Interface

interface Provider {
  name: string;           // Unique identifier
  description?: string;   // What it provides
  dynamic?: boolean;      // Changes over time?
  position?: number;      // Load priority (-100 to 100)
  private?: boolean;      // Hidden from provider list?
  get: (runtime, message, state) => Promise<ProviderResult>;
}

Core Providers (Bootstrap Plugin)

ProviderReturnsExample Use
characterProviderAgent personalityName, bio, traits
timeProviderCurrent date/time”What time is it?”
knowledgeProviderKnowledge baseDocumentation, facts
recentMessagesProviderChat historyContext awareness
actionsProviderAvailable actions”What can you do?”
factsProviderStored factsUser preferences
settingsProviderConfigurationModel settings

Plugin Provider Examples

ProviderPluginReturns
walletProviderplugin-seiBalance, portfolio
marketProviderplugin-arbitragePrice feeds
tokenPriceProviderplugin-dexscreenerToken prices, liquidity

Creating Providers

Basic Provider

const provider: Provider = {
  name: 'MY_DATA',
  get: async (runtime, message, state) => {
    return {
      text: "Contextual information",
      data: { key: "value" }
    };
  }
};

Dynamic Provider

const dynamicProvider: Provider = {
  name: 'LIVE_DATA',
  dynamic: true,  // Re-fetched each time
  get: async (runtime) => {
    const data = await fetchLatestData();
    return { data };
  }
};

Private Provider

const secretProvider: Provider = {
  name: 'INTERNAL_STATE',
  private: true,  // Not shown in provider list
  get: async (runtime) => {
    return runtime.getInternalState();
  }
};

Provider Return Format

interface ProviderResult {
  text?: string;      // Natural language context
  data?: {           // Structured data
    [key: string]: any;
  };
  values?: {         // Key-value pairs
    [key: string]: any;
  };
}

Provider Priority

// Lower numbers = higher priority
position: -100  // Loads first
position: 0     // Default
position: 100   // Loads last

Best Practices

  • Return consistent data structures
  • Handle errors gracefully
  • Cache when appropriate
  • Keep data fetching fast
  • Document what data is provided

Next Steps