# Subagent Testing Modes

**Purpose**: Understand the two ways to test subagents (standalone vs delegation)

**Last Updated**: 2026-01-07

---

## Core Concept

Subagents have **two distinct testing modes** depending on what you're validating:

1. **Standalone Mode** - Test subagent logic directly (unit testing)
2. **Delegation Mode** - Test parent → subagent workflow (integration testing)

The mode determines which agent runs and how tools are used.

---

## Standalone Mode (Unit Testing)

**Purpose**: Test subagent's logic in isolation

**Command**:
```bash
npm run eval:sdk -- --subagent=ContextScout
```

**What Happens**:
- Eval framework forces `mode: primary` (overrides `mode: subagent`)
- ContextScout runs as the primary agent
- ContextScout uses tools directly (glob, read, grep, list)
- No parent agent involved

**Use For**:
- Unit testing subagent logic
- Debugging tool usage
- Feature development
- Verifying prompt changes

**Test Location**: `evals/agents/subagents/core/{subagent}/tests/standalone/`

---

## Delegation Mode (Integration Testing)

**Purpose**: Test real production workflow (parent delegates to subagent)

**Command**:
```bash
npm run eval:sdk -- --agent=core/openagent --pattern="delegation/*.yaml"
```

**What Happens**:
- OpenAgent runs as primary agent
- OpenAgent uses `task` tool to delegate to ContextScout
- ContextScout runs with `mode: subagent` (natural mode)
- Tests full delegation workflow

**Use For**:
- Integration testing
- Validating production behavior
- Testing delegation logic
- End-to-end workflows

**Test Location**: `evals/agents/subagents/core/{subagent}/tests/delegation/`

---

## Critical Distinction

| Aspect | Standalone Mode | Delegation Mode |
|--------|----------------|-----------------|
| **Flag** | `--subagent=NAME` | `--agent=PARENT` |
| **Agent Mode** | Forced to `primary` | Natural `subagent` |
| **Who Runs** | Subagent directly | Parent → Subagent |
| **Tool Usage** | Subagent uses tools | Parent uses `task` tool |
| **Tests** | `standalone/*.yaml` | `delegation/*.yaml` |

**Common Mistake**:
```bash
# ❌ WRONG - This runs OpenAgent, not ContextScout
npm run eval:sdk -- --agent=ContextScout

# ✅ CORRECT - This runs ContextScout directly
npm run eval:sdk -- --subagent=ContextScout
```

---

## How to Verify Correct Mode

### Standalone Mode Indicators:
```
⚡ Standalone Test Mode
   Subagent: contextscout
   Mode: Forced to 'primary' for direct testing
```

### Delegation Mode Indicators:
```
Testing agent: core/openagent
🎯 PARENT: OpenAgent
   Delegating to: contextscout
```

---

## When to Use Each Mode

**Use Standalone When**:
- Testing subagent's core logic
- Debugging why subagent isn't using tools
- Validating prompt changes
- Quick iteration during development

**Use Delegation When**:
- Testing production workflow
- Validating parent → subagent communication
- Testing context passing
- Integration testing

---

## Related

- `guides/testing-subagents.md` - Step-by-step testing guide
- `lookup/subagent-test-commands.md` - Quick command reference
- `errors/tool-permission-errors.md` - Common testing issues

**Reference**: `evals/framework/src/sdk/run-sdk-tests.ts` (mode forcing logic)
