- Replace legacy agents system with modular individual agent apps - Add agent_base framework for BaseAgent, processors, and management commands - Create weather_reporter as example individual agent with API integration - Implement simplified template structure: agent_name/templates/detail.html - Fix marketplace to display actual agents instead of placeholder - Add proper authentication flow with login redirect for agent access - Organize project structure: move tests to tests/, docs to docs/ - Update all documentation to reflect new simplified architecture - Fix URL namespace issues throughout templates and views 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
12 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project Overview
NetCop Hub is a Django-based AI agent marketplace that allows users to purchase and use various AI-powered agents for tasks like social media ad generation, data analysis, weather reporting, and more. The system features a wallet-based payment system with Stripe integration and N8N webhook processing.
Project Structure
netcop_django/
├── 📁 docs/ # All documentation, guides, and logs
├── 📁 tests/ # All test files and scripts
├── 📁 agent_base/ # Agent framework and creation tools
├── 📁 authentication/ # User management system
├── 📁 core/ # Main app (homepage, marketplace, wallet)
├── 📁 wallet/ # Payment and transaction system
├── 📁 weather_reporter/ # Example individual agent app
│ └── templates/ # Agent-specific templates
├── 📁 templates/ # Global templates (core, auth)
├── 📁 static/ # Static assets (CSS, JS, images)
├── 📁 media/ # User-uploaded files
├── 📁 netcop_hub/ # Django project configuration
└── manage.py # Django management commands
Key Architecture Components
Individual Agent Architecture
The project uses a modular individual agent architecture where each agent is a separate Django app:
-
Base Framework:
agent_base/provides common functionality:BaseAgentmodel for agent marketplace catalogBaseAgentRequest/BaseAgentResponseabstract models for trackingBaseAgentProcessorabstract class for webhook handlingBaseAgentViewabstract class for form processing and authentication
-
Individual Agent Apps: Each agent has its own app (
agent_social_ads/,agent_weather/, etc.):- Custom models extending base classes
- Specialized processors for webhook communication
- Individual views and URL routing
- Separate templates and static files
Webhook Processing System
All agents communicate with external AI services via N8N webhooks:
- Processors handle data preparation, request/response processing
- Webhook URLs configured via environment variables
- Built-in error handling and timeout management
- Processing time tracking and logging
User Authentication & Wallet System
- Custom User model with wallet balance functionality
- Stripe integration for payments (
wallet/stripe_handler.py) - Transaction tracking via
WalletTransactionmodel - Balance checking before agent usage
Essential Commands
Development Setup
# Create and activate virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies (no requirements.txt - manual installation needed)
pip install django djangorestframework python-decouple stripe requests
# Database setup
python manage.py makemigrations
python manage.py migrate
# Create superuser
python manage.py createsuperuser
# Populate agents catalog
python manage.py populate_base_agents
Running the Application
# Start development server
python manage.py runserver
# Run with specific settings
python manage.py runserver --settings=netcop_hub.settings
Database Management
# Create new migrations
python manage.py makemigrations [app_name]
# Apply migrations
python manage.py migrate
# Reset database (if needed)
python manage.py flush
# Django shell
python manage.py shell
Testing
# Run all tests
python manage.py test
# Run specific app tests
python manage.py test agent_social_ads
# Run with verbosity
python manage.py test --verbosity=2
Environment Configuration
The project uses python-decouple for environment management. Key variables in .env:
Required Settings
SECRET_KEY: Django secret keyDEBUG: Development mode flagALLOWED_HOSTS: Comma-separated host listDATABASE_URL: PostgreSQL connection string (uses SQLite by default)
Webhook Configuration
Each agent requires webhook URLs in format:
N8N_WEBHOOK_[AGENT_NAME]: Django backend webhook URLNEXT_PUBLIC_N8N_WEBHOOK_[AGENT_NAME]: Frontend webhook URL
Payment Integration
STRIPE_SECRET_KEY: Stripe API secret keySTRIPE_WEBHOOK_SECRET: Stripe webhook signing secretNEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY: Stripe publishable key
Agent Creation System (Automated)
Automated Agent Creation Command
The project features a sophisticated automated agent creation system via the create_agent management command:
# Create webhook-based agent (N8N integration)
python manage.py create_agent "Agent Name" "agent-slug" webhook \
--category utilities --price 2.5 \
--webhook-url "https://webhook.url" --agent-id "123"
# Create API-based agent (Direct API integration)
python manage.py create_agent "Weather Reporter" "weather-reporter" api \
--category utilities --price 2.5 \
--api-base-url "https://api.openweathermap.org/data/2.5/weather" \
--api-key-env "OPENWEATHER_API_KEY" --auth-method query
Agent Creation System Architecture
Core Framework (agent_base app)
- BaseAgent Model: Database catalog for agent marketplace
- BaseAgentRequest/BaseAgentResponse: Abstract models for tracking requests
- StandardWebhookProcessor: Handles N8N webhook integrations with message payload format
- StandardAPIProcessor: Handles direct API calls with flexible authentication methods
- WebhookFormatDetector: Utility to test and detect webhook formats
Template-Based Code Generation
The system uses Django templates to generate complete agent apps:
Template Files:
webhook_models.py/api_models.py: Models with custom fieldswebhook_processor.py/api_processor.py: Processor classesviews.py: Django views with authentication and wallet integrationurls.py: URL routing patternsadmin.py: Django admin configurationapps.py: Django app configuration
Supported Agent Types
1. Webhook Agents (N8N Integration)
- Uses
StandardWebhookProcessorbase class - Message-based payload format:
{'message': {'text': 'content'}, 'sessionId': '...', 'userId': '...', 'agentId': '...'} - Automatic error handling and retry logic
- Processing time tracking
2. API Agents (Direct Integration)
- Uses
StandardAPIProcessorbase class - Multiple authentication methods: bearer, api-key, basic, query
- GET/POST request support
- Response parsing and formatting
Weather Reporter Example
The system includes a complete Weather Reporter agent example:
- API Integration: OpenWeatherMap API
- Custom Fields: location, report_type, temperature, humidity, wind_speed
- Formatted Reports: Both current and detailed weather reports
- Error Handling: API failures and invalid locations
Management Commands
create_agent
Generates complete agent apps with:
- Database models and migrations
- Processor classes
- Django views with authentication
- URL routing
- Admin interface
- Custom field definitions based on agent type
python manage.py create_agent --help
test_webhook
Tests webhook endpoints to determine compatible formats:
# Test all formats
python manage.py test_webhook https://webhook.url
# Detect best format only
python manage.py test_webhook https://webhook.url --detect-best
Manual Agent Creation (Legacy)
For custom agents requiring manual setup:
Step 1: Create Django App
python manage.py startapp agent_[name]
Step 2: Define Models
Extend BaseAgentRequest and BaseAgentResponse in models.py:
from agent_base.models import BaseAgentRequest, BaseAgentResponse
class MyAgentRequest(BaseAgentRequest):
# Add agent-specific fields
input_text = models.TextField()
class MyAgentResponse(BaseAgentResponse):
request = models.OneToOneField(MyAgentRequest, on_delete=models.CASCADE, related_name='response')
output_text = models.TextField(blank=True)
Step 3: Create Processor
Choose between webhook or API processor:
Webhook Processor:
from agent_base.processors import StandardWebhookProcessor
class MyAgentProcessor(StandardWebhookProcessor):
agent_slug = 'my-agent'
webhook_url = settings.N8N_WEBHOOK_MY_AGENT
agent_id = '123'
def prepare_message_text(self, **kwargs):
return f"Process: {kwargs.get('input_text')}"
API Processor:
from agent_base.processors import StandardAPIProcessor
class MyAgentProcessor(StandardAPIProcessor):
agent_slug = 'my-agent'
api_base_url = 'https://api.example.com/v1/process'
api_key_env = 'MY_API_KEY'
auth_method = 'bearer'
def prepare_request_data(self, **kwargs):
return {'text': kwargs.get('input_text')}
Step 4: Add to Configuration
- Add app to
INSTALLED_APPSinsettings.py - Add URL routing in
netcop_hub/urls.py - Run migrations:
python manage.py makemigrations && python manage.py migrate - Create BaseAgent entry in database
Database Models Relationships
Core Models
User(authentication): Custom user with wallet functionalityBaseAgent(agent_base): Agent catalog/marketplace entriesWalletTransaction(wallet): Payment and usage tracking
Agent-Specific Models
Each agent app has:
[Agent]Request: Inherits fromBaseAgentRequest, tracks user requests[Agent]Response: Inherits fromBaseAgentResponse, stores AI responses
Key Relationships
User1:NBaseAgentRequest(user can make multiple requests)BaseAgent1:NBaseAgentRequest(agent can have multiple requests)BaseAgentRequest1:1BaseAgentResponse(each request has one response)User1:NWalletTransaction(user has transaction history)
URL Structure
/ # Homepage (core app)
/auth/login/ # Authentication
/auth/register/ # User registration
/agents/[agent-slug]/ # Individual agent pages
/admin/ # Django admin
Template Organization
Templates follow clean Django app structure:
templates/core/: Homepage, marketplace, wallet (global templates)templates/authentication/: Login, registration (global templates)[agent_name]/templates/: Individual agent templates within their respective apps (detail.html)docs/: All documentation and guidestests/: All test files
Common Development Patterns
Adding New Agent Fields
- Add fields to agent request/response models
- Update processor's
prepare_request_data()method - Modify view's
process_request()method - Update templates to include new fields
Debugging Webhook Issues
- Check webhook URL in
.envfile - Examine processor logs in console output
- Verify JSON payload format in
prepare_request_data() - Test webhook independently with tools like Postman
Managing Agent Pricing
- Update price in
populate_base_agents.py - Run
python manage.py populate_base_agentsto update database - Pricing is enforced in
BaseAgentView.post()method
Current Architecture (Clean & Modern)
The project uses a clean, modular individual agent architecture:
Current System Features
- Individual agent apps: Each agent is a separate Django app (
weather_reporter/, etc.) - Clean template organization: Templates live within their respective agent apps
- Organized project structure: Documentation in
docs/, tests intests/, clean root directory - BaseAgent catalog system: Centralized marketplace with individual agent implementations
- Modular processors: Each agent has its own processor for API/webhook integration
- App-specific templates:
agent_name/templates/detail.html
Best Practices
- All new agents should follow the individual app architecture
- Templates should be placed within the agent app, not in global templates
- Use the
create_agentcommand for automated setup, then follow the setup checklist - Keep root directory clean - use
docs/andtests/folders for organization