Circuit is a drag-and-drop workflow designer and execution engine for orchestrating multi-step Claude Code and OpenAI Codex agents. It can execute multi-step workflows with real-time streaming, reference interpolation between nodes, and flexible control flow.
- Visual Workflow Editor - Drag-and-drop interface for building agent workflows
- Multi-Agent Support - Claude Code and OpenAI Codex agent nodes
- Control Flow - Condition and merge nodes for branching logic
- Workflow Persistence - Save and load workflows as YAML, allowing you to vibe code workflows
- Node.js 18+
To use agent nodes, you need to authenticate with the respective provider:
Option 1: Environment Variables
export ANTHROPIC_API_KEY=your-anthropic-key # For Claude Agent nodes
export OPENAI_API_KEY=your-openai-key # For Codex Agent nodesOption 2: OAuth Login
Login via Oauth in the Claude Code/Codex CLI on the machine where workflows will execute.
# Clone the repository
git clone https://github.com/smogili1/circuit.git
cd circuit
# Install dependencies
npm install# Start development server (recommended)
make dev-start
# View logs
make logs
# Stop server
make dev-stopThe app runs at http://localhost:3001
npm run dev# Quick start with docker-compose
docker-compose up -d
# Or build and run manually
docker build -t circuit .
docker run -d -p 3001:3001 -v circuit-data:/app/data circuitData is persisted in the circuit-data volume (/app/data in the container).
Set API keys as environment variables before running:
export ANTHROPIC_API_KEY=your-key
export OPENAI_API_KEY=your-key
docker-compose up -dOr pass them directly with docker run:
docker run -d -p 3001:3001 \
-v circuit-data:/app/data \
-e ANTHROPIC_API_KEY=your-key \
-e OPENAI_API_KEY=your-key \
circuit| Command | Description |
|---|---|
make dev-start |
Start server in background with hot reload |
make dev-stop |
Stop background server |
make logs |
Tail server logs |
make test |
Run all tests |
make build |
Build for production |
circuit/
├── backend/ # Node.js + Express + Socket.io
│ └── src/
│ ├── index.ts # Server setup, REST API, WebSocket
│ ├── agents/ # Claude and Codex agent wrappers
│ ├── orchestrator/ # DAG execution engine
│ └── workflows/ # YAML persistence
├── frontend/ # React + Vite + Tailwind
│ └── src/
│ ├── App.tsx # Main application
│ ├── components/ # React Flow canvas, node types
│ ├── stores/ # Zustand state management
│ └── hooks/ # WebSocket and utilities
├── Makefile # Development commands
├── Dockerfile # Container build
├── docker-compose.yml # Container orchestration
└── package.json # Workspace configuration
| Type | Description |
|---|---|
| Input | Starting point with initial data |
| Claude Agent | Claude Code execution with tools |
| Codex Agent | OpenAI Codex execution |
| Condition | Branch based on expression |
| Merge | Combine multiple branches |
| Output | Workflow result |
Nodes can reference outputs from upstream nodes:
{{PlanAgent.result}} # Full result
{{DataFetcher.output.items}} # Nested path
{{Analyzer.transcript}} # Agent transcript
GET /api/workflows- List all workflowsPOST /api/workflows- Create workflowGET /api/workflows/:id- Get workflowPUT /api/workflows/:id- Update workflowDELETE /api/workflows/:id- Delete workflow
Client to Server:
save-workflow- Persist workflow changescontrol- Start/interrupt/resume execution
Server to Client:
workflows- Workflow list updatesevent- Execution lifecycle events
# All tests
make test
# Backend only
make test-backend
# Frontend only
make test-frontendApache 2.0
