Orchestration framework for multi-agent workflows via external commands
Project description
AgentOrk
Orchestrate multi-agent workflows declaratively.
Quick Start · How It Works · Features · Usage · Docs
AgentOrk is an orchestration framework for multi-agent workflows. Wire external commands (Python scripts, Claude Code CLI, Cursor CLI, shell tools, remote wrappers) into declarative workflows. The framework handles graph execution, I/O routing, parallelism limits, and run persistence.
Quick Start
pip install agentork # or: pip install -e ".[dev]" from a clone
agentork validate -c tests/patterns/workflows/starter/01-sequential.yaml
agentork run -c tests/patterns/workflows/starter/01-sequential.yaml \
--inputs '{"workspace": "/tmp/agentork-demo"}'
Open the monitor (optional) — same workflow as above:
agentork run -c tests/patterns/workflows/starter/01-sequential.yaml \
--inputs '{"workspace": "/tmp/agentork-demo"}' \
--dashboard
# or after any run: agentork dashboard → http://127.0.0.1:7979/monitor/
Requires Python 3.10+. Run artifacts (framework state) live under .agentork/runs/{run_id}/. Your agents write business output wherever workspace points in --inputs.
From source (contributors):
git clone https://github.com/agentork/agentork.git
cd agentork
pip install -e ".[dev]"
pytest -v
How It Works
workflow.yaml agents: external commands (scripts, CLIs)
│ │
▼ ▼
┌─────────────┐ subprocess ┌──────────────┐
│ Workflow │ ───────────────► │ AgentOrk │
│ engine │ ◄─────────────── │ run state │
└─────────────┘ JSON in/out └──────────────┘
│
▼
.agentork/runs/{run_id}/ manifest, logs, node I/O
- You define nodes (steps) and edges (order) in YAML, plus an
agentsmap (command,cwd,timeout). - AgentOrk executes the workflow graph, resolves inputs from upstream / state / files, and runs each node as a subprocess.
- Stdout JSON becomes node output; optional
parallelismfans out over ataskslist (orchestrator pattern). loops/evaluator_optimizerconnect generator ↔ verifier until a pass condition or max iterations.
Workflow patterns
| Pattern | When to use |
|---|---|
sequential |
Linear pipeline — A → B → C |
parallel |
Fan-out / fan-in — one node to many workers, then merge |
evaluator_optimizer |
Draft + review loop until quality gate passes |
composite |
Mix sequential, parallel, and loops with explicit edges |
Collaboration patterns
Metadata on nodes (role) and top-level collaboration.pattern document intent. Complex topologies use explicit graph.edges in composite workflows.
| Pattern | Typical layout |
|---|---|
generator_verifier |
Generate → verify → retry |
orchestrator_subagent |
Orchestrator emits tasks → parallel subagents |
agent_teams |
Lead + worker pool |
message_bus |
Publish / subscribe style steps |
shared_state |
Agents read/write shared files under workspace |
Learn more: Architecture · Pattern starter YAMLs · 3×5 matrix tests
Features
| Feature | Details |
|---|---|
| YAML workflows | Nodes, edges, I/O sources, output targets, parallelism |
| Multi-agent | Bring your own scripts or tools as node commands |
| 3 workflow modes | Sequential, parallel, evaluator-optimizer (+ composite) |
| 5 collaboration modes | Generator-verifier, orchestrator-subagent, teams, bus, shared state |
| Parallel dispatch | parallelism.limit with max or fixed batching |
| File run state | manifest.json, per-node input.json / output.json, logs |
| Event stream | events.jsonl for monitor UI and debugging |
| CLI | validate, run, serve, dashboard |
| HTTP API | Start/cancel runs, optional AGENTORK_API_KEY |
| Monitor UI | Live run timeline at /monitor |
| Claude Code plugin | Skill to drive agentork from the editor |
| Examples | Mock agents, combined pipeline, ai-pipeline integration demo |
Usage
CLI reference
| Command | Description |
|---|---|
agentork validate -c workflow.yaml |
Validate YAML against schema |
agentork run -c workflow.yaml |
Execute workflow |
agentork run -c workflow.yaml --inputs '{"workspace":"/tmp/ws"}' |
Pass initial state / workspace |
agentork run -c workflow.yaml --dashboard |
Run and open monitor |
agentork serve --port 8080 |
HTTP API + embedded monitor |
agentork dashboard |
Monitor-only server (default port 7979) |
Use in your project
After pip install agentork, keep the workflow in your repo (not inside the AgentOrk package). A typical layout:
/path/to/my-project/
├── agentork.yaml
├── scripts/
│ └── my_agent.py
└── .agentork/runs/ # created on first run (add to .gitignore)
agentork.yaml at the project root:
name: my-project
workflow:
pattern: sequential
collaboration:
pattern: orchestrator_subagent
graph:
nodes:
- {id: extract, agent: extract}
- {id: validate, agent: validate}
- {id: store, agent: store}
agents:
extract:
command: ["python3", "scripts/extract.py"]
cwd: "."
timeout_sec: 300
validate:
command: ["python3", "scripts/validate.py"]
cwd: "."
timeout_sec: 300
store:
command: ["python3", "scripts/store.py"]
cwd: "."
timeout_sec: 300
Each step uses its own agents entry (sequential pipelines usually map one node → one command). Scripts should read AGENTORK_INPUT_FILE and print JSON to stdout (see examples/scripts/mock_agent.py).
Run from the project root (cwd: "." is relative to where you invoke agentork):
cd /path/to/my-project
agentork validate -c agentork.yaml
agentork run -c agentork.yaml \
--inputs '{"workspace": "/path/to/my-project"}'
Framework state is written under ./.agentork/runs/{run_id}/ in that directory; your agents write business output under workspace. For another project, use a different directory and its own agentork.yaml.
YAML configuration
Minimal files need name, workflow.pattern, collaboration.pattern, graph, and agents. Optional: version, state, graph.edges, input / output, parallelism, loops, evaluator_optimizer.
Top-level
| Field | Meaning |
|---|---|
name |
Workflow name (required) |
workflow.pattern |
How edges are built: sequential, parallel, evaluator_optimizer, composite |
collaboration.pattern |
Collaboration semantics label (e.g. orchestrator_subagent, generator_verifier) |
graph — execution graph
| Field | Meaning |
|---|---|
graph |
Block defining steps and (optionally) edges |
nodes |
List of steps to run |
nodes[].id |
Unique node ID — used for edges, logs, AGENTORK_NODE_ID (may differ from agent) |
nodes[].agent |
Key into agents: — which command config to run |
nodes[].role |
Optional role label (orchestrator, subagent, generator, …) |
graph.edges |
Optional from / to (node id or list). Omitted in sequential → auto chain A → B → C |
agents — how each step runs
| Field | Meaning |
|---|---|
agents |
Map of agent id → subprocess settings |
agents.<id> |
Must match nodes[].agent (e.g. worker) |
command |
argv list, e.g. ["python3", "scripts/my_agent.py"] |
cwd |
Working directory for the subprocess; "." = directory where you run agentork |
timeout_sec |
Max seconds per invocation (default 300); -1 = no timeout |
The subprocess reads JSON from AGENTORK_INPUT_FILE and should print JSON on stdout. workspace / source_dir from --inputs are injected into node input when configured.
Example (matches 01-sequential.yaml):
graph:
nodes:
- {id: extract, agent: extract} # node id → agents.extract
- {id: validate, agent: validate}
- {id: store, agent: store}
agents:
extract:
command: ["python3", "scripts/extract.py"]
cwd: "."
validate:
command: ["python3", "scripts/validate.py"]
cwd: "."
store:
command: ["python3", "scripts/store.py"]
cwd: "."
Parallel workflows may use different node ids with separate agents keys even when the command is the same — see 02-parallel.yaml.
Full schema: docs/en/yaml-reference.md.
Workflow templates
Starters: docs sit next to each YAML in tests/patterns/workflows/starter/.
| YAML | Doc |
|---|---|
| 01-sequential.yaml | 01-sequential.md |
| 02-parallel.yaml | 02-parallel.md |
| 03-loop.yaml | 03-loop.md |
| 04-composite.yaml | 04-composite.md |
More: examples/ · docs/zh/workflow-templates.md (index)
agentork run -c tests/patterns/workflows/starter/01-sequential.yaml \
--inputs '{"workspace": "/tmp/agentork-demo"}'
workspace and source_dir from --inputs are injected into nodes automatically when configured.
HTTP API
export AGENTORK_AUTH_DISABLED=1 # dev only; or: export AGENTORK_API_KEY=your-secret
agentork serve --port 8080
| Method | Path | Description |
|---|---|---|
POST |
/api/v1/runs |
Start a run |
GET |
/api/v1/runs/{run_id} |
Status |
POST |
/api/v1/runs/{run_id}/complete |
Mark complete |
POST |
/api/v1/runs/{run_id}/cancel |
Cancel |
See docs/en/api.md.
Claude Code plugin
/plugin marketplace add <your-org>/AgentOrk
See claude-plugin/ and docs/en/plugin.md.
Project structure
agentork/
├── src/agentork/ # Framework (config, graph, engine, api, monitor)
├── examples/ # Sample workflow YAML + mock scripts
├── tests/ # Pytest + pattern matrix + starter YAMLs
├── docs/en/ · docs/zh/ # Documentation
├── claude-plugin/ # Claude Code marketplace plugin
├── pyproject.toml
├── README.md · README_zh.md
└── LICENSE
Configuration
Environment variables
| Variable | Description | Default |
|---|---|---|
AGENTORK_API_KEY |
API auth for agentork serve |
— |
AGENTORK_AUTH_DISABLED |
Set 1 to disable API key check |
off |
AGENTORK_MONITOR_PORT |
Port for agentork dashboard |
7979 |
AGENTORK_RUNS_ROOT |
Monitor scans this directory for runs | .agentork/runs |
AGENTORK_MONITOR_NO_BROWSER |
Set 1 to skip opening browser |
off |
AGENTORK_RUN_ID |
Set by runner — current run id | — |
AGENTORK_NODE_ID |
Set by runner — current node id | — |
AGENTORK_INPUT_FILE |
JSON input path for agent subprocess | — |
AGENTORK_TASK_ID |
Parallel sub-task id when applicable | — |
Agent subprocesses should read AGENTORK_INPUT_FILE and print JSON to stdout (see examples/scripts/mock_agent.py).
Documentation
| English | 中文 |
|---|---|
| Architecture | 架构 |
| YAML reference | YAML 参考 |
| API | — |
| Plugin | — |
| Monitor | 监控 |
| Pattern tests | AI pipeline demo |
| Workflow template index | 模板索引 |
| Starter templates | starter 目录 |
Contributing
git clone https://github.com/agentork/agentork.git
cd agentork
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pytest -v
ruff check src tests
See CONTRIBUTING.md and SECURITY.md. Changelog: CHANGELOG.md.
License
MIT — see LICENSE.
pip install agentork · declarative workflows · orchestrate multi-agent runs
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file agentork-0.1.0.tar.gz.
File metadata
- Download URL: agentork-0.1.0.tar.gz
- Upload date:
- Size: 54.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
753d7abd8b8ecc5f147b81d8ce6a0579a8d65c847fb08a897a51e90ced84135c
|
|
| MD5 |
5341cb7b03fbdfb43f6184cc8f22c42c
|
|
| BLAKE2b-256 |
c9695de862ea5288838a8c53fdb486d258d272cb26ab4b9550e695c5a57fab18
|
File details
Details for the file agentork-0.1.0-py3-none-any.whl.
File metadata
- Download URL: agentork-0.1.0-py3-none-any.whl
- Upload date:
- Size: 47.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6b3d94736a77fc86d927347a5dfc6c62c693f52e330f0c4b7b083965d208b953
|
|
| MD5 |
2f24e838e9e66e6fa701de0fccb9e816
|
|
| BLAKE2b-256 |
a40f879eca2716cafd8a09fd5c89360a60eeabd8b6eba4b56be3ae86c23cdfe1
|