AgentUp Developer Guide
This guide provides trouble-free development environments and workflows for different types of AgentUp development, eliminating common footguns and path-related issues.
Overview: Developer Personas
AgentUp supports three distinct developer types, each with different needs:
- Framework Developers - Working on AgentUp itself (core contributors)
- Plugin Developers - Creating reusable skills for the community
- Agent Developers - Building specific AI agents using AgentUp
Table of Contents
Framework Development
You are here if: You're contributing to AgentUp core, working with the source repository
Environment Setup
# Clone and setup AgentUp source
git clone https://github.com/RedDotRocket/AgentUp.git
cd AgentUp
# Create isolated development environment
uv sync
# Verify installation
uv run agentup --version
Plugin Development for Framework Contributors
When developing plugins while working on AgentUp source:
Option 1: Separate Plugin Directory (Recommended)
# Create plugin in separate location
cd ~/my-plugins # Or any directory outside AgentUp source
uv run --directory /path/to/AgentUp agentup plugin init my-plugin
# Install plugin into AgentUp's venv for testing
cd my-plugin
uv --directory /path/to/AgentUp pip install -e .
# Test with AgentUp development server
cd /path/to/AgentUp
uv run agentup run
Option 2: AgentUp Plugin Development Mode
# From AgentUp source directory
export AGENTUP_PLUGIN_PATHS="$HOME/my-plugins:./local-plugins"
# Create and test plugins without installation
mkdir -p local-plugins
uv run agentup plugin init local-plugins/test-plugin
# Plugin auto-discovered from AGENTUP_PLUGIN_PATHS
uv run agentup run
Testing Framework Changes
# Run framework tests
uv run pytest
# Test with example agent
cd examples/basic-agent
uv run --directory ../.. agentup run
# Test CLI commands
uv run agentup init test-agent --template minimal
Key Considerations
- Always use
uv runfrom AgentUp source directory - Plugin paths are relative to where AgentUp runs, not where plugins live
- Use
AGENTUP_PLUGIN_PATHSfor local plugin development - Never install plugins with system pip - always use AgentUp's venv
Plugin Development
You are here if: You're creating reusable plugins that others can install
Scenario 1: Using Installed AgentUp
Most plugin developers will use this approach:
# Install AgentUp globally or in project venv
pip install agentup
# OR: python -m venv venv && source venv/bin/activate && pip install agentup
# Create plugin anywhere
mkdir -p ~/my-plugins && cd ~/my-plugins
agentup plugin init weather-plugin --template ai
cd weather-plugin
# Install for development (same environment as AgentUp)
pip install -e .
# Create test agent
mkdir -p ~/test-agents && cd ~/test-agents
agentup init weather-test --template standard
# Configure agent to use your plugin
echo "
skills:
- plugin_id: weather_plugin
routing_mode: ai
" >> weather-test/agentup.yml
# Test your plugin
cd weather-test
agentup run
Scenario 2: Using AgentUp Source
If you need to test against AgentUp development version:
# Setup AgentUp source environment
git clone https://github.com/your-org/AgentUp.git
cd AgentUp && uv sync
# Create plugin in separate directory
cd ~/my-plugins
uv run --directory /path/to/AgentUp agentup plugin init my-plugin
cd my-plugin
# Install into AgentUp's development environment
uv --directory /path/to/AgentUp pip install -e .
# Test with AgentUp source
cd /path/to/AgentUp
uv run agentup run
Plugin Development Workflow
# Development cycle
cd ~/my-plugins/weather-plugin
# Make changes to plugin.py
vim src/weather_plugin/plugin.py
# Reinstall if entry points changed
pip install -e .
# Test changes
cd ~/test-agents/weather-test
agentup run --reload # Auto-reloads on file changes
Environment Variables for Plugin Development
# Add to ~/.bashrc or ~/.zshrc
export AGENTUP_PLUGIN_PATHS="$HOME/my-plugins/dev-plugins:./plugins"
export AGENTUP_DEV_MODE=true # Enables additional debugging
export AGENTUP_LOG_LEVEL=DEBUG # More verbose logging
Publishing Plugins
# Build and publish
cd ~/my-plugins/weather-plugin
python -m build
python -m twine upload dist/*
# Users can then install with:
# pip install weather-plugin
Agent Development
You are here if: You're building specific AI agents using AgentUp
Project-Based Development
Agent development should be project-isolated:
# Create agent project
mkdir -p ~/my-agents && cd ~/my-agents
agentup init customer-service --template standard
cd customer-service
# All commands run from agent directory
agentup run # Start development server
agentup validate # Validate configuration
agentup deploy --type docker # Generate deployment files
Installing Plugins in Agent Projects
# From agent directory
cd ~/my-agents/customer-service
# Install community plugins
pip install weather-plugin time-plugin
# Install local development plugins
pip install -e ~/my-plugins/custom-plugin
# Configure in agentup.yml
vim agentup.yml
Multi-Agent Development
When working with multiple agents:
# Shared plugin environment approach
python -m venv ~/shared-agent-env
source ~/shared-agent-env/bin/activate
pip install agentup weather-plugin time-plugin custom-plugin
# Create agents using shared environment
agentup init agent1
agentup init agent2
# Each agent can use the same plugins
cd agent1 && agentup run --port 8001
cd agent2 && agentup run --port 8002
Path Management for Agents
AgentUp uses relative paths that work from any agent directory:
# These paths are relative to agent working directory
agentup.yml # Always in agent root
./skills/ # Local skills directory
./conversation_states/ # State storage
./logs/ # Log files
./.agentup/ # Agent-specific cache
Configuration Management
# agentup.yml - paths relative to agent directory
state:
backend: file
storage_dir: ./conversation_states # Relative to agent root
services:
file_storage:
type: filesystem
config:
base_path: ./data # Relative to agent root
plugins:
Troubleshooting
Common Issues and Solutions
"externally-managed-environment" Error
Problem: macOS/Homebrew Python prevents system-wide pip installs
Solutions:
# Option 1: Use virtual environment (recommended)
python -m venv agentup-env
source agentup-env/bin/activate
pip install agentup
# Option 2: Use --user flag
pip install --user agentup
# Option 3: Use pipx for CLI tools
brew install pipx
pipx install agentup
# Option 4: Override (not recommended)
pip install --break-system-packages agentup
Plugin Not Found After Installation
Problem: Plugin installed but not discovered
Debugging Steps:
# Check if plugin is installed
pip list | grep your-plugin
# Verify entry points
python -c "
import importlib.metadata
eps = importlib.metadata.entry_points()
skills = eps.get('agentup.skills', [])
for ep in skills:
print(f'{ep.name}: {ep.value}')
"
# Check AgentUp discovery
agentup plugin list
# Enable debug logging
AGENTUP_LOG_LEVEL=DEBUG agentup run
Import Errors in Plugins
Problem: Plugin can't import AgentUp components
Common Causes:
# Wrong import path
from agentup.plugins import PluginDefinition # ✗ Wrong
# Correct import path
from agent.plugins import PluginDefinition # ✓ Correct
# Check your plugin's imports
grep -r "from agentup" src/
Path Resolution Issues
Problem: Files not found, relative paths broken
Solution: Always run AgentUp commands from agent directory
# ✗ Wrong - broken relative paths
cd ~ && agentup run --config /path/to/agent/agentup.yml
# ✓ Correct - relative paths work
cd /path/to/agent && agentup run
Virtual Environment Confusion
Problem: Plugin installed in wrong environment
Debugging:
# Check which AgentUp you're using
which agentup
python -c "import agent; print(agent.__file__)"
# Check which Python environment
python -c "import sys; print(sys.prefix)"
# Ensure consistent environment
# If using venv:
source venv/bin/activate && pip install -e plugin-path
# If using uv with AgentUp source:
uv pip install -e plugin-path
Environment Debugging Commands
# Comprehensive environment check
echo "=== AgentUp Environment Debug ==="
echo "AgentUp location: $(which agentup)"
echo "Python location: $(which python)"
echo "Python version: $(python --version)"
echo "Virtual env: $VIRTUAL_ENV"
echo "Python path: $(python -c 'import sys; print(sys.prefix)')"
echo ""
echo "=== Installed Packages ==="
pip list | grep -E "(agentup|agent)"
echo ""
echo "=== Plugin Entry Points ==="
python -c "
import importlib.metadata
try:
eps = importlib.metadata.entry_points()
if hasattr(eps, 'select'):
skills = eps.select(group='agentup.skills')
else:
skills = eps.get('agentup.skills', [])
for ep in skills:
print(f'{ep.name}: {ep.value}')
except Exception as e:
print(f'Error: {e}')
"
echo ""
echo "=== Environment Variables ==="
env | grep -i agentup
Best Practices
1. Environment Isolation
Framework Development:
# Keep AgentUp source isolated
cd ~/code/AgentUp
uv sync # Creates .venv automatically
# Use uv run for all commands
uv run agentup run
Plugin Development:
# Use project-specific environments
cd ~/plugins/weather-plugin
python -m venv .venv
source .venv/bin/activate
pip install agentup
pip install -e .
Agent Development:
# Keep agents in project directories
mkdir -p ~/projects/customer-ai && cd ~/projects/customer-ai
agentup init . # Create agent in current directory
2. Path Management
Always use relative paths in configuration:
# ✓ Good - relative to agent directory
state:
backend: file
storage_dir: ./states
# ✗ Bad - absolute paths break portability
state:
backend: file
storage_dir: /Users/you/projects/agent/states
Use environment variables for environment-specific paths:
# agentup.yml
services:
database:
config:
url: ${DATABASE_URL:sqlite:///./data.db} # Default to relative path
3. Plugin Discovery
Set up plugin search paths:
# Add to shell profile
export AGENTUP_PLUGIN_PATHS="$HOME/.agentup/plugins:./plugins:../shared-plugins"
Use consistent plugin structure:
plugins/
├── weather-plugin/
│ ├── pyproject.toml
│ ├── src/weather_plugin/
│ │ ├── __init__.py
│ │ └── plugin.py
│ └── tests/
└── time-plugin/
├── pyproject.toml
├── src/time_plugin/
│ ├── __init__.py
│ └── plugin.py
└── tests/
4. Development Workflow
Plugin Development Cycle:
# 1. Make changes
vim src/my_plugin/plugin.py
# 2. Reinstall if structure changed
pip install -e .
# 3. Test immediately
agentup run --reload
# 4. Run tests
pytest tests/
# 5. Validate integration
agentup plugin validate my_plugin
Agent Development Cycle:
# 1. Update configuration
vim agentup.yml
# 2. Validate changes
agentup validate
# 3. Test locally
agentup run --reload
# 4. Generate deployment
agentup deploy --type docker
5. Testing Strategies
Local Plugin Testing:
# Create minimal test agent
agentup init test-minimal --template minimal
cd test-minimal
# Add your plugin
echo "skills: [{plugin_id: your_plugin}]" >> agentup.yml
# Test specific scenarios
curl -X POST http://localhost:8000/ \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "method": "message/send", "params": {...}}'
Integration Testing:
# Test plugin across different agent templates
for template in minimal standard full; do
agentup init test-$template --template $template
cd test-$template
# Add plugin configuration
# Test scenarios
cd ..
done
6. Documentation and Distribution
Plugin Documentation:
Configuration
Environment Variables
YOUR_API_KEY: Required API key for serviceYOUR_PLUGIN_DEBUG: Enable debug logging
Examples
[Include common usage examples] ```
This developer guide provides comprehensive, trouble-free development environments for all AgentUp development scenarios. Follow the patterns for your specific use case to avoid common pitfalls and maintain productive development workflows.