Files
ajarbot/MIGRATION.md
Jordan Ramos ce2c384387 Migrate to Claude Agent SDK framework (v0.2.0)
BREAKING CHANGE: Replaced FastAPI server wrapper with direct Claude Agent SDK integration

## Major Changes

### Architecture
- **OLD:** Bot → FastAPI Server → claude-code-sdk → Claude
- **NEW:** Bot → Claude Agent SDK → Claude (Pro subscription OR API)
- Eliminated HTTP server overhead
- Single-process architecture

### LLM Backend (llm_interface.py)
- Implemented Claude Agent SDK as DEFAULT mode
- Added three-mode architecture:
  - agent-sdk (default) - Uses Pro subscription
  - direct-api - Pay-per-token Anthropic API
  - legacy-server - Backward compat with old setup
- Created async/sync bridge using anyio
- Preserved all existing functionality (17 tools, memory, scheduling)

### Dependencies (requirements.txt)
- Replaced: claude-code-sdk → claude-agent-sdk>=0.1.0
- Added: anyio>=4.0.0 for async bridging
- Removed: fastapi, uvicorn (no longer needed for default mode)

### New Files
- ajarbot.py - Unified launcher with pre-flight checks
- run.bat - Windows one-command launcher (auto-setup)
- pyproject.toml - Python package metadata
- MIGRATION.md - Upgrade guide from old setup
- AGENT_SDK_IMPLEMENTATION.md - Technical documentation
- QUICK_REFERENCE_AGENT_SDK.md - Quick reference card
- test_agent_sdk.py - Comprehensive test suite

### Updated Documentation
- CLAUDE_CODE_SETUP.md - Rewritten for Agent SDK
- README.md - Updated quick start for new default
- .env.example - Added AJARBOT_LLM_MODE configuration

### Deleted Files
- claude_code_server.py - Replaced by agent-sdk integration
- heartbeat.py - Superseded by scheduled_tasks.py
- pulse_brain.py - Unused in production

## Migration Path

Old setup:
1. Start FastAPI server: python claude_code_server.py
2. Start bot: python bot_runner.py
3. Set USE_CLAUDE_CODE_SERVER=true

New setup:
1. Run: run.bat (or python ajarbot.py)
   - That's it! Single command.

## Benefits

 Zero API costs (uses Claude Pro subscription)
 Simplified deployment (no separate server)
 Single-command launch (run.bat)
 Faster response times (no HTTP overhead)
 All functionality preserved (17 tools, memory, adapters)
 Backward compatible (old env vars still work)

## Compatibility

- Python 3.10+ required
- Node.js required (for Claude Code CLI bundled with SDK)
- Windows 11 tested and optimized
- All existing tools, memory system, and adapters unchanged

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-15 10:03:11 -07:00

326 lines
7.1 KiB
Markdown

# Migration Guide: FastAPI Server to Agent SDK
This guide helps you upgrade from the old FastAPI server setup to the new Claude Agent SDK integration.
## What Changed?
### Old Architecture (Deprecated)
```
Bot → FastAPI Server (localhost:8000) → Claude Code SDK → Claude
```
- Required running `claude_code_server.py` in separate terminal
- Only worked with Pro subscription
- More complex setup with multiple processes
### New Architecture (Current)
```
Bot → Claude Agent SDK → Claude (Pro OR API)
```
- Single process (no separate server)
- Works with Pro subscription OR API key
- Simpler setup and operation
- Same functionality, less complexity
## Migration Steps
### Step 1: Update Dependencies
Pull latest code and reinstall dependencies:
```bash
git pull
pip install -r requirements.txt
```
This installs `claude-agent-sdk` and removes deprecated dependencies.
### Step 2: Update Environment Configuration
Edit your `.env` file:
**Remove these deprecated variables:**
```bash
# DELETE THESE
USE_CLAUDE_CODE_SERVER=true
CLAUDE_CODE_SERVER_URL=http://localhost:8000
```
**Add new mode selection:**
```bash
# ADD THIS
AJARBOT_LLM_MODE=agent-sdk # Use Pro subscription (default)
# OR
AJARBOT_LLM_MODE=api # Use pay-per-token API
```
**If using API mode**, ensure you have:
```bash
ANTHROPIC_API_KEY=sk-ant-...
```
**If using agent-sdk mode**, authenticate once:
```bash
claude auth login
```
### Step 3: Stop Old Server
The FastAPI server is no longer needed:
1. Stop any running `claude_code_server.py` processes
2. Remove it from startup scripts/systemd services
3. Optionally archive or delete `claude_code_server.py` (kept for reference)
### Step 4: Use New Launcher
**Old way:**
```bash
# Terminal 1
python claude_code_server.py
# Terminal 2
python bot_runner.py
```
**New way:**
```bash
# Single command
run.bat # Windows
python ajarbot.py # Linux/Mac
```
The new launcher:
- Runs pre-flight checks (Node.js, authentication, config)
- Sets sensible defaults (agent-sdk mode)
- Starts bot in single process
- No separate server needed
### Step 5: Test Your Setup
Run health check:
```bash
python ajarbot.py --health
```
Expected output (agent-sdk mode):
```
============================================================
Ajarbot Pre-Flight Checks
============================================================
✓ Python 3.10.x
✓ Node.js found: v18.x.x
✓ Claude CLI authenticated
[Configuration Checks]
✓ Config file found: config/adapters.local.yaml
Pre-flight checks complete!
============================================================
```
### Step 6: Verify Functionality
Test that everything works:
1. **Start the bot:**
```bash
run.bat # or python ajarbot.py
```
2. **Send a test message** via Slack/Telegram
3. **Verify tools work:**
- Ask bot to read a file
- Request calendar events
- Test scheduled tasks
All features are preserved:
- 15 tools (file ops, Gmail, Calendar, Contacts)
- Memory system with hybrid search
- Multi-platform adapters
- Task scheduling
## Mode Comparison
Choose the mode that fits your use case:
| Feature | Agent SDK Mode | API Mode |
|---------|---------------|----------|
| **Cost** | $20/month (Pro) | ~$0.25-$3/M tokens |
| **Setup** | `claude auth login` | API key in `.env` |
| **Requirements** | Node.js + Claude CLI | Just Python |
| **Best For** | Personal heavy use | Light use, production |
| **Rate Limits** | Pro subscription limits | API rate limits |
### Switching Between Modes
You can switch anytime by editing `.env`:
```bash
# Switch to agent-sdk
AJARBOT_LLM_MODE=agent-sdk
# Switch to API
AJARBOT_LLM_MODE=api
ANTHROPIC_API_KEY=sk-ant-...
```
No code changes needed - just restart the bot.
## Troubleshooting
### "Node.js not found" (Agent SDK mode)
**Option 1: Install Node.js**
```bash
# Download from https://nodejs.org
# Or via package manager:
winget install OpenJS.NodeJS # Windows
brew install node # Mac
sudo apt install nodejs # Ubuntu/Debian
```
**Option 2: Switch to API mode**
```bash
# In .env
AJARBOT_LLM_MODE=api
ANTHROPIC_API_KEY=sk-ant-...
```
### "Claude CLI not authenticated"
```bash
# Check status
claude auth status
# Re-authenticate
claude auth logout
claude auth login
```
If Claude CLI isn't installed, download from: https://claude.ai/download
### "Agent SDK not available"
```bash
pip install claude-agent-sdk
```
If installation fails, use API mode instead.
### Old Environment Variables Still Set
Check your `.env` file for deprecated variables:
```bash
# These should NOT be in your .env:
USE_CLAUDE_CODE_SERVER=true
CLAUDE_CODE_SERVER_URL=http://localhost:8000
USE_AGENT_SDK=true
USE_DIRECT_API=true
```
Delete them and use `AJARBOT_LLM_MODE` instead.
### Bot Works But Features Missing
Ensure you have latest code:
```bash
git pull
pip install -r requirements.txt --upgrade
```
All features from the old setup are preserved:
- Tools system (15 tools)
- Memory with hybrid search
- Scheduled tasks
- Google integration
- Multi-platform adapters
### Performance Issues
**Agent SDK mode:**
- May hit Pro subscription rate limits
- Temporary solution: Switch to API mode
- Long-term: Wait for limit reset (usually 24 hours)
**API mode:**
- Check usage with: `python -c "from usage_tracker import UsageTracker; UsageTracker().print_summary()"`
- Costs shown in usage_data.json
- Default Haiku model is very cheap (~$0.04/day moderate use)
## Rollback Plan
If you need to rollback to the old setup:
1. **Restore old .env settings:**
```bash
USE_CLAUDE_CODE_SERVER=true
CLAUDE_CODE_SERVER_URL=http://localhost:8000
```
2. **Start the old server:**
```bash
python claude_code_server.py
```
3. **Run bot with old method:**
```bash
python bot_runner.py
```
However, the new setup is recommended - same functionality with less complexity.
## What's Backward Compatible?
All existing functionality is preserved:
- Configuration files (`config/adapters.local.yaml`, `config/scheduled_tasks.yaml`)
- Memory database (`memory_workspace/memory.db`)
- User profiles (`memory_workspace/users/`)
- Google OAuth tokens (`config/google_oauth_token.json`)
- Tool definitions and capabilities
- Adapter integrations
You can safely migrate without losing data or functionality.
## Benefits of New Setup
1. **Simpler operation**: Single command to start
2. **Flexible modes**: Choose Pro subscription OR API
3. **Automatic checks**: Pre-flight validation before starting
4. **Better errors**: Clear messages about missing requirements
5. **Less complexity**: No multi-process coordination
6. **Same features**: All 15 tools, adapters, scheduling preserved
## Need Help?
- Review [CLAUDE_CODE_SETUP.md](CLAUDE_CODE_SETUP.md) for detailed mode documentation
- Check [README.md](README.md) for quick start guides
- Run `python ajarbot.py --health` to diagnose issues
- Open an issue if you encounter problems
## Summary
**Before:**
```bash
# Terminal 1
python claude_code_server.py
# Terminal 2
python bot_runner.py
```
**After:**
```bash
# .env
AJARBOT_LLM_MODE=agent-sdk # or "api"
# Single command
run.bat # Windows
python ajarbot.py # Linux/Mac
```
Same features, less complexity, more flexibility.