version: "1"
project:
name: recursive-agent
description: "Recursive Agent E2E Integration Tests"
version: "0.6.0"
plugins:
- ./plugins/dist/index.js
service:
build:
dockerfile: Dockerfile
context: ..
image: recursive:e2e
container:
name: recursive-e2e
ports:
- "8080:8080"
environment:
RECURSIVE_API_BASE: http://aimock:4010/v1
RECURSIVE_API_KEY: mock-key
RECURSIVE_MODEL: mock-chat
RUST_LOG: info
RECURSIVE_RATE_LIMIT_BURST: "200"
RECURSIVE_RATE_LIMIT_RPM: "6000"
mocks:
aimock:
image: ghcr.io/copilotkit/aimock
port: 4010
volumes:
- "./fixtures:/fixtures"
args: "-f /fixtures -h 0.0.0.0"
tests:
suites:
- name: "Smoke Gate (self-improve)"
id: smoke
file: tests/00-smoke.yaml
- name: "Basic Agent Tools"
id: basic
file: tests/01-basic-tools.yaml
- name: "Session Persistence"
id: session
file: tests/02-session-persistence.yaml
- name: "Memory Scratchpad"
id: memory
file: tests/03-memory-scratchpad.yaml
- name: "Cost Tracking"
id: cost
file: tests/04-cost-tracking.yaml
- name: "Sessions Export CLI"
id: export
file: tests/05-sessions-export.yaml
- name: "Live LLM Integration"
id: live
file: tests/06-live-integration.yaml
- name: "LLM-as-Judge"
id: judge
file: tests/07-llm-judge.yaml
- name: "HTTP API Server (AgentRuntime)"
id: http-api
file: tests/08-http-api.yaml
- name: "HTTP API Rate Limit"
id: http-rate-limit
file: tests/08b-http-rate-limit.yaml
- name: "REPL Mode (multi-turn interactive)"
id: repl
file: tests/09-repl-mode.yaml
- name: "Loop Mode (agent self-scheduling)"
id: loop
file: tests/10-loop-mode.yaml
- name: "Session Resume"
id: resume
file: tests/11-session-resume.yaml
- name: "Hooks Lifecycle"
id: hooks
file: tests/12-hooks.yaml
- name: "apply_patch Tool"
id: apply-patch
file: tests/13-apply-patch.yaml
- name: "MCP Stdio Server"
id: mcp-serve
file: tests/14-mcp-serve.yaml
- name: "search_files Tool"
id: search-files
file: tests/15-search-files.yaml
- name: "Skill Lazy Load"
id: skill-lazy-load
file: tests/16-skill-lazy-load.yaml
- name: "Loop Mode — schedule_wakeup multi-turn"
id: loop-schedule
file: tests/17-loop-mode.yaml
- name: "Goal Loop API (Goal-168)"
id: goal-loop
file: tests/18-goal-loop.yaml
- name: "HTTP Interrupt endpoint (Goal-170)"
id: http-interrupt
file: tests/19-http-interrupt.yaml
- name: "Python SDK smoke test"
id: python-sdk
file: tests/20-python-sdk.yaml
- name: "TypeScript SDK smoke test"
id: typescript-sdk
file: tests/21-typescript-sdk.yaml
- name: "Context compaction multi-turn"
id: compaction
file: tests/22-compaction.yaml