Declarative AI agent workflow execution framework
Project description
fdsx — Flow-Driven Stateful eXecution
A lightweight framework for building and executing complex AI agent workflows using declarative YAML definitions.
Overview
fdsx enables you to define AI agent workflows in YAML, combining the durability of LangGraph (checkpoint, interrupt, conditional routing) with the declarative structure of AWS Step Functions.
Key features:
- Declarative YAML-based workflow definition
- Stateful execution with checkpoint/resume
- Parallel execution with branch aggregation
- Batch task processing
- Multiple LLM provider support (Claude, OpenCode, and more)
Installation
pip install fdsx
Or with uv:
uv tool install fdsx
Quick Start
Create a simple YAML workflow file:
name: SimpleFlow
start_at: greet
version: "1.0"
states:
greet:
type: task
provider: system
command: "echo 'Hello from fdsx!'"
result_path: $.message
end: true
Run it:
fdsx run simple_flow.yaml
Feature Overview
State Types
- task — Execute LLM or CLI commands
- parallel — Run multiple branches concurrently
- choice — Conditional routing based on variables
- wait — Pause for human approval or webhook callback
- pass — Pass-through state for data transformation
Parallel Execution
Define parallel branches that execute simultaneously with aggregation strategies (majority vote, all, any).
Checkpoint & Resume
Flows automatically persist state. Resume from interruption with:
fdsx resume --thread-id <thread_id>
Batch Tasks
Process multiple tasks in batch mode:
fdsx run workflow.yaml --tasks tasks.md
Structured Logging
All execution details are logged to runs/<thread_id>.json.
Provider Support
Use any CLI-based LLM provider: Claude, Codex, OpenCode, or system commands.
CLI Reference
| Command | Description |
|---|---|
fdsx run <workflow.yaml> |
Execute a workflow |
fdsx run <workflow.yaml> --input key=value |
Pass input variables |
fdsx resume --thread-id <thread_id> |
Resume from checkpoint |
fdsx validate <workflow.yaml> |
Validate YAML syntax |
fdsx list |
List recent runs |
Example Workflow
name: Plan-Implement-Review Loop
start_at: plan
version: "1.0"
max_loop: 3
states:
plan:
type: task
provider: claude
model: claude-sonnet-4-6
prompt_template: |
You are a planning agent. Break down the following task into clear,
actionable implementation steps.
Task: {task}
result_path: $.plan
next: implement
implement:
type: task
provider: opencode
model: opencode/minimax-m2.5-free
prompt_template: |
You are an implementation agent. Follow this plan exactly.
Plan: {plan}
result_path: $.implementation
next: review
review:
type: task
provider: codex
model: gpt-5.4
prompt_template: |
Review the implementation against the plan.
Plan: {plan}
Implementation: {implementation}
result_path: $.review
next: check_review
check_review:
type: choice
choices:
- variable: $.review
operator: contains
value: "APPROVED"
next: done
default: implement
done:
type: pass
end: true
Run this example:
# First run in a new directory scaffolds .fdsx/ with example workflows:
fdsx run
# Then run the scaffolded example workflow:
fdsx run .fdsx/workflows/plan-implement-review/workflow.yaml --input task="Build a web calculator"
License
MIT License.
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 fdsx-0.1.6.tar.gz.
File metadata
- Download URL: fdsx-0.1.6.tar.gz
- Upload date:
- Size: 264.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4f067f793533f4aec9c1e8928ffea0fdf1f3a4f79b08c32a03739ed0fb1df380
|
|
| MD5 |
ee6d819069177ebfc14d19b858fedbf8
|
|
| BLAKE2b-256 |
4957b4019ef9179890444fd1ecc2f5f59a776d6b429cdcc0b1f04f0640b28ee3
|
Provenance
The following attestation bundles were made for fdsx-0.1.6.tar.gz:
Publisher:
publish.yml on kenfdev/fdsx
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fdsx-0.1.6.tar.gz -
Subject digest:
4f067f793533f4aec9c1e8928ffea0fdf1f3a4f79b08c32a03739ed0fb1df380 - Sigstore transparency entry: 1188788219
- Sigstore integration time:
-
Permalink:
kenfdev/fdsx@bfa9aab29ccd5142ed844e9b0437918a1989b03f -
Branch / Tag:
refs/tags/v0.1.6 - Owner: https://github.com/kenfdev
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@bfa9aab29ccd5142ed844e9b0437918a1989b03f -
Trigger Event:
push
-
Statement type:
File details
Details for the file fdsx-0.1.6-py3-none-any.whl.
File metadata
- Download URL: fdsx-0.1.6-py3-none-any.whl
- Upload date:
- Size: 106.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e45adc05a828c66ffc15fbc46773c211917f8f3f77947da5d2e0d8ca327e9f28
|
|
| MD5 |
5be7b26a48ea6ee035d668df16a60b83
|
|
| BLAKE2b-256 |
34f98c1f6f6cc3a3647dc938d3b3bc1fc12e41bbf1b86e0ffc0fdf7c6326a4d0
|
Provenance
The following attestation bundles were made for fdsx-0.1.6-py3-none-any.whl:
Publisher:
publish.yml on kenfdev/fdsx
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fdsx-0.1.6-py3-none-any.whl -
Subject digest:
e45adc05a828c66ffc15fbc46773c211917f8f3f77947da5d2e0d8ca327e9f28 - Sigstore transparency entry: 1188788222
- Sigstore integration time:
-
Permalink:
kenfdev/fdsx@bfa9aab29ccd5142ed844e9b0437918a1989b03f -
Branch / Tag:
refs/tags/v0.1.6 - Owner: https://github.com/kenfdev
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@bfa9aab29ccd5142ed844e9b0437918a1989b03f -
Trigger Event:
push
-
Statement type: