---
# System prepended metadata

title: 'Video Summary - Custom Eliza Plugin From Scratch '
tags: [elisaos]

---

# Building a Custom ElizaOS Plugin - Video Summary

A summary of Nader Dabit's tutorial on [building a NASA API plugin for ElizaOS](https://www.youtube.com/watch?v=25FxjscBHuo).

The code for this tutorial is available at [eliza-nasa-plugin](https://github.com/dabit3/eliza-nasa-plugin).

My notes:
- Using ElizaOS, and Hyperbolic for AI inference.
- starts the project from scratch, good for TS newbs
- explains the index.ts layout, evaulators and callbacks
- provides example text that could be used to trigger the plugin in examples.ts
- great breakdown of the project structure and how all the parts fit together
- deceeptively simple task which showcased advanced inference features of elizaOS
- callbacks and how they are handled can be different depending on the client being used  
- shows using typescript instead of JSON to define a character, important becasue you get type hinting, easier to see what plugins there are, also nicer way to specify the character
- shows customising the agent index.ts

## Overview
*Claude's summary of the transcript*

The tutorial demonstrates how to build a custom plugin for ElizaOS that integrates with NASA's API. The plugin enables an AI agent to fetch and share:
- Mars Rover photos
- NASA's Astronomy Picture of the Day (APOD)

Also got a quick tour of the ElizaOS codebase and how to run the agent locally and get to understand the design pattern for building plugins.

## Why Build Plugins?

Plugins are powerful because they:
- Allow developers to extend agent functionality in creative ways
- Provide a distribution mechanism for software products
- Create opportunities for developers to build products in the growing AI agent space


## Project Setup

1. Create project structure:
```
plugin-nasa/
├── src/
│   ├── actions/
│   │   ├── getApod.ts
│   │   └── getMarsRoverPhoto.ts
│   ├── index.ts
│   ├── types.ts
│   ├── examples.ts
│   ├── services.ts
│   └── environment.ts
```

2. Configure build tools:
- package.json for dependencies
- tsconfig.json for TypeScript
- tsup.config.ts for bundling

## Key Components

### Actions
The plugin defines two main actions:
- `getMarsRoverPhoto`: Fetches photos from Mars rovers (primarily Curiosity)
- `getApod`: Retrieves NASA's Astronomy Picture of the Day

### Services
- Handles API calls to NASA endpoints
- Manages error handling and retries
- Formats responses for the agent

### Environment
- Validates required API keys
- Manages configuration

### Examples
Provides sample conversations that trigger the plugin actions:
- "I wonder what Mars looks like today"
- "What's the NASA Astronomy Picture of the Day?"

## Integration with ElizaOS

The plugin can be integrated in two ways:
1. Through the agent's plugin array
2. Directly in the character configuration (recommended)

## Testing

The plugin was tested through:
- Web interface (localhost)
- Twitter integration
- Both interfaces successfully retrieved and shared NASA images

## Key Learnings

1. Plugin Structure:
   - Clear separation of concerns
   - Type safety with TypeScript
   - Modular action definitions

2. Integration Points:
   - Environment variables
   - Character configuration
   - Multiple interface support (web/Twitter)

3. Best Practices:
   - Error handling
   - API retry logic
   - Environment validation

## Resources

- NASA API: Provides space-related data and images
- Hyperbolic: Used for AI inference (llama model)
- ElizaOS: The agent framework being extended

The complete code and resources are available in the video description.
