# Quick Start Guide - Bandit Runner LangGraph Agent

## TL;DR - Get Running in 5 Minutes

### 1. Install Dependencies

```bash
cd bandit-runner-app
pnpm install
```

✅ **Already done!** LangGraph.js, LangChain, and zod are installed.

### 2. Set Environment Variables

Create `.env.local`:

```bash
OPENROUTER_API_KEY=sk-or-v1-your-key-here
SSH_PROXY_URL=http://localhost:3001
```

Get OpenRouter API key: https://openrouter.ai/keys

### 3. Build SSH Proxy (Separate Terminal)

```bash
# In a new directory
mkdir ../ssh-proxy
cd ../ssh-proxy

# Follow SSH-PROXY-README.md or quick version:
npm init -y
npm install express ssh2 cors tsx
# Copy server code from SSH-PROXY-README.md
npm run dev
```

**OR** deploy to Fly.io for production (see SSH-PROXY-README.md)

### 4. Configure Durable Object

The framework is ready, but needs DO export. Create/update:

`bandit-runner-app/worker-configuration.d.ts`:
```typescript
interface Env {
  BANDIT_AGENT: DurableObjectNamespace
}
```

### 5. Run Development Server

```bash
cd bandit-runner-app
pnpm dev
```

Open http://localhost:3000

### 6. Start Your First Run

1. Select model: **GPT-4o Mini** (fast and cheap)
2. Set levels: **0** to **2** (test run)
3. Click **START**
4. Watch the magic happen! ✨

## What You'll See

**Terminal (Left Panel)**:
```
$ ls -la
total 24
drwxr-xr-x    2 root   root   4096 ... .
...
$ cat readme
boJ9jbbUNNfktd78OOpsqOltutMc3MY1
```

**Agent Chat (Right Panel)**:
```
AGENT: Planning next command for level 0...
AGENT: Executing 'ls -la' to explore the directory
AGENT: Found readme file, reading contents...
AGENT: Password extracted: boJ9jbbUNNfktd78OOpsqOltutMc3MY1
AGENT: Validating password for level 1...
AGENT: ✓ Level 0 → 1 complete!
```

## Troubleshooting

### WebSocket Not Connecting

- Check SSH proxy is running on port 3001
- Verify `SSH_PROXY_URL` in environment

### LangGraph Errors

- Make sure `OPENROUTER_API_KEY` is set
- Check console for specific errors
- Try with a simpler model first (GPT-4o Mini)

### Durable Object Errors

- Ensure wrangler.jsonc has DO bindings
- May need to use `wrangler dev` instead of `pnpm dev` for DO support

## Advanced Usage

### Pause and Intervene

1. Click **PAUSE** during a run
2. Type manual commands in terminal
3. Message agent with hints in chat
4. Click **RESUME** to continue

### Test Different Models

```
GPT-4o Mini    → Fast, cheap, good for testing
Claude 3 Haiku → Fast, accurate
GPT-4o         → Best reasoning
Claude 3.5     → Most capable (expensive)
```

### Debug Mode

Watch the browser console for:
- WebSocket events
- LangGraph state transitions
- Tool executions
- Error details

## Next Steps

1. ✅ Get basic run working (Level 0-2)
2. 📝 Deploy SSH proxy to production
3. 🗄️ Set up D1 database for persistence
4. 📦 Configure R2 for log storage
5. 🚀 Deploy to Cloudflare Workers
6. 🎯 Run full Bandit challenge (0-33)

## Useful Commands

```bash
# Development
pnpm dev                    # Next.js dev server
wrangler dev                # Workers runtime with DO support

# Build
pnpm build                  # Production build
pnpm deploy                 # Deploy to Cloudflare

# Database
wrangler d1 create bandit-runs              # Create D1 database
wrangler d1 execute bandit-runs --file=schema.sql

# Secrets
wrangler secret put OPENROUTER_API_KEY
wrangler secret put ENCRYPTION_KEY

# Logs
wrangler tail                               # Live logs
```

## Resources

- **Implementation Summary**: `IMPLEMENTATION-SUMMARY.md`
- **SSH Proxy Guide**: `SSH-PROXY-README.md`
- **Architecture Doc**: `docs/bandit-runner.md`
- **System Prompt**: `docs/bandit/system-prompt.md`

## Getting Help

1. Check browser console for errors
2. Review `IMPLEMENTATION-SUMMARY.md` for architecture
3. Test SSH proxy separately: `curl http://localhost:3001/ssh/health`
4. Verify OpenRouter API key: https://openrouter.ai/activity

## Success Metrics

You'll know it's working when:
- ✅ WebSocket shows "CONNECTED"
- ✅ Terminal shows agent commands
- ✅ Chat shows agent reasoning
- ✅ Level advances automatically
- ✅ No errors in console

Happy agent testing! 🎉

