Rust-powered agent pipeline library — drop-in replacement for geny-executor
Project description
geny-harness
Rust-core Python library — A drop-in replacement for geny-executor, providing the same 16-stage dual-abstraction agent pipeline architecture.
pip install geny-harness
geny-executor vs geny-harness: What's Different?
Both libraries provide identical Python APIs — the same classes, same methods, same import paths. You can switch between them by changing a single import. The difference is where the code runs.
Architecture Comparison
geny-executor (v0.3.0) geny-harness (v0.3.0)
┌─────────────────────────┐ ┌─────────────────────────┐
│ Python Application │ │ Python Application │
├─────────────────────────┤ ├─────────────────────────┤
│ Pipeline Orchestration │ Python │ Pipeline Orchestration │ Python
│ 16 Stage Execution │ │ 16 Stage Execution │
│ EventBus / Session │ │ EventBus / Session │
├─────────────────────────┤ ├─────────────────────────┤
│ PipelineState (40+fld) │ Python │ PipelineState (40+fld) │ Rust (PyO3)
│ TokenUsage / Metrics │ dataclass │ TokenUsage / Metrics │ Rust struct
│ PipelineConfig │ │ PipelineConfig │
│ PipelineResult │ │ PipelineResult │
│ PipelineEvent │ │ PipelineEvent │
│ Error Hierarchy │ │ Error Hierarchy │ Rust enum
├─────────────────────────┤ ├─────────────────────────┤
│ N/A │ │ Full Rust Core Engine │ 148 .rs files
│ │ │ (16 stages, 60+ strat.)│ Pure Rust
│ │ │ reqwest HTTP client │
│ │ │ tokio async runtime │
└─────────────────────────┘ └─────────────────────────┘
176 Python files 144 Rust + 34 Python files
deps: anthropic, pydantic, mcp deps: Rust (compiled), anthropic
What's Actually in Rust
The data layer is implemented in Rust and exposed to Python via PyO3:
| Type | Python (executor) | Rust (harness) |
|---|---|---|
PipelineState |
@dataclass (40+ fields) |
Rust struct → #[pyclass] |
TokenUsage |
@dataclass + __add__ |
Rust struct + Add trait |
PipelineConfig |
@dataclass |
Rust struct with apply_to_state() |
PipelineResult |
@dataclass + from_state() |
Rust struct + class methods |
PipelineEvent |
@dataclass |
Rust struct |
ErrorCategory |
str, Enum |
Rust enum + is_recoverable() |
StageDescription |
@dataclass |
Rust struct |
| Exceptions (6 types) | Python Exception subclasses |
Rust error hierarchy → PyO3 exceptions |
Additionally, geny-harness contains a complete Rust implementation of the entire pipeline engine (148 .rs files), including all 16 stages and 60+ strategy implementations. This Rust core is designed for:
- Future native execution — bypassing Python entirely for maximum throughput
- Embedding in Rust applications — use the pipeline engine directly from Rust/C/C++
- WebAssembly compilation — run the pipeline in browsers or edge environments
What's Still in Python (Same as executor)
The pipeline orchestration layer remains in Python for both libraries:
Pipelineclass (3-phase execution engine)EventBus(pub/sub with pattern matching)Session/SessionManagerPipelineBuilder/PipelinePresets- All 16 stage implementations (using
anthropicSDK for API calls)
This means the actual pipeline execution flow is identical. The Anthropic API calls, streaming, tool execution, and agent loops work exactly the same way.
Performance Characteristics
| Operation | executor (Python) | harness (Rust+PyO3) | Notes |
|---|---|---|---|
| State creation | ~195ms/100K | ~96ms/100K | Rust 2x faster — 40+ field struct init |
| Field access | ~46ms/500K | ~393ms/500K | Python faster — PyO3 boundary cost |
| Token arithmetic | ~189ms/500K | ~234ms/500K | Similar — PyO3 overhead offsets Rust speed |
| Result.from_state | ~88ms/100K | ~90ms/100K | Identical |
Key insight: For the current Python-orchestrated usage pattern, there is no significant performance difference. The real performance advantage of geny-harness will emerge when:
- The Rust pipeline engine is used natively (without Python)
- Multiple pipelines run concurrently via tokio
- State serialization/deserialization is done in Rust (JSON, MessagePack)
When to Use Which
| Scenario | Recommendation |
|---|---|
| Standard Python project | geny-executor — simpler, pure Python, easier to debug |
| Want Rust core for future native use | geny-harness — invest in Rust ecosystem now |
| Embedding in Rust application | geny-harness — use geny-harness-core crate directly |
| Need to modify stage internals | geny-executor — all Python, easy to fork/modify |
| Production with high concurrency | geny-harness — Rust core ready for tokio-based scaling |
| Learning/prototyping | geny-executor — more straightforward |
Quick Start
# Identical to geny-executor — just change the import
from geny_harness import PipelinePresets
pipeline = PipelinePresets.agent(
api_key="sk-ant-...",
model="claude-sonnet-4-20250514",
system_prompt="You are a helpful assistant.",
)
result = await pipeline.run("Hello!")
print(result.text)
Drop-in Replacement
# Before (geny-executor)
from geny_executor import Pipeline, PipelineConfig, PipelinePresets
from geny_executor.session.manager import SessionManager
# After (geny-harness) — just change the package name
from geny_harness import Pipeline, PipelineConfig, PipelinePresets
from geny_harness.session.manager import SessionManager
Project Structure
geny-harness/
├── crates/
│ ├── geny-harness-core/ # Pure Rust library (148 .rs files)
│ │ └── src/
│ │ ├── core/ # Pipeline, State, Config, Errors, Builder
│ │ ├── events/ # EventBus, PipelineEvent
│ │ ├── session/ # Session, Manager, Freshness
│ │ ├── tools/ # Tool, Registry, MCP
│ │ └── stages/ # 16 stages × (interface + types + artifact)
│ └── geny-harness-py/ # PyO3 bindings (cdylib)
├── python/
│ └── geny_harness/ # Python package
│ ├── core/ # Pipeline, Builder, Presets, Stage
│ ├── events/ # EventBus
│ ├── session/ # Session, Manager
│ ├── stages/ # 16 stage implementations
│ └── tools/ # Tool, Registry
└── tests/
Supported Platforms
- Python: 3.10 — 3.14
- OS: Linux (x86_64), Windows (x64), macOS (arm64)
- Rust: 2021 edition (for building from source)
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
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 geny_harness-0.5.2.tar.gz.
File metadata
- Download URL: geny_harness-0.5.2.tar.gz
- Upload date:
- Size: 18.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cf2ef975b31109fa0de537187b2c635602f56abe9c14d4220a1877f610c2148d
|
|
| MD5 |
5e7334e4e7c08007270726584b42c7ae
|
|
| BLAKE2b-256 |
4ce3ebe8760acc090e7a5493feb1e8223b5e8cd922aa8f88300fbeededc346d1
|
Provenance
The following attestation bundles were made for geny_harness-0.5.2.tar.gz:
Publisher:
publish.yml on CocoRoF/geny-harness
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
geny_harness-0.5.2.tar.gz -
Subject digest:
cf2ef975b31109fa0de537187b2c635602f56abe9c14d4220a1877f610c2148d - Sigstore transparency entry: 1280799994
- Sigstore integration time:
-
Permalink:
CocoRoF/geny-harness@9f5b5edfca80009f6c69db2f204bdedddc893ada -
Branch / Tag:
refs/heads/main - Owner: https://github.com/CocoRoF
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9f5b5edfca80009f6c69db2f204bdedddc893ada -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file geny_harness-0.5.2-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: geny_harness-0.5.2-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 20.9 MB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8a4dd4fe6300a914e5e7f7b91f97550aa0e115526442c411835edc35b3ddfbf2
|
|
| MD5 |
d6c9d1253a572bcc56bab26c16497201
|
|
| BLAKE2b-256 |
a0981e39627c6a9448751ac3859e623251b3b121be8bbd2d9a197176e232545e
|
Provenance
The following attestation bundles were made for geny_harness-0.5.2-cp312-cp312-win_amd64.whl:
Publisher:
publish.yml on CocoRoF/geny-harness
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
geny_harness-0.5.2-cp312-cp312-win_amd64.whl -
Subject digest:
8a4dd4fe6300a914e5e7f7b91f97550aa0e115526442c411835edc35b3ddfbf2 - Sigstore transparency entry: 1280800004
- Sigstore integration time:
-
Permalink:
CocoRoF/geny-harness@9f5b5edfca80009f6c69db2f204bdedddc893ada -
Branch / Tag:
refs/heads/main - Owner: https://github.com/CocoRoF
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9f5b5edfca80009f6c69db2f204bdedddc893ada -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file geny_harness-0.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: geny_harness-0.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 21.4 MB
- Tags: CPython 3.12, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9e5f63738d39aa5c446468dffd7774cb102a1d108cc0eded01b3dc4c29cd1b92
|
|
| MD5 |
2047201db6eb847caaf7c46911a33580
|
|
| BLAKE2b-256 |
3705276eab6220c3948304682a8dff1f15b09d237bf0cda2e309943ca655b367
|
Provenance
The following attestation bundles were made for geny_harness-0.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
publish.yml on CocoRoF/geny-harness
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
geny_harness-0.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
9e5f63738d39aa5c446468dffd7774cb102a1d108cc0eded01b3dc4c29cd1b92 - Sigstore transparency entry: 1280800001
- Sigstore integration time:
-
Permalink:
CocoRoF/geny-harness@9f5b5edfca80009f6c69db2f204bdedddc893ada -
Branch / Tag:
refs/heads/main - Owner: https://github.com/CocoRoF
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9f5b5edfca80009f6c69db2f204bdedddc893ada -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file geny_harness-0.5.2-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: geny_harness-0.5.2-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 21.1 MB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b0eadc29cc4ce6002c95fc6b5f1bb293d6692370afe233eebd71c4a128dc2556
|
|
| MD5 |
a1e900cbeb27a98eb1efe8ff1542d5cb
|
|
| BLAKE2b-256 |
92d4b99bb866b467cb773ab7cac08f04df0343fcb3d9026749ca7c36f62e70c7
|
Provenance
The following attestation bundles were made for geny_harness-0.5.2-cp312-cp312-macosx_11_0_arm64.whl:
Publisher:
publish.yml on CocoRoF/geny-harness
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
geny_harness-0.5.2-cp312-cp312-macosx_11_0_arm64.whl -
Subject digest:
b0eadc29cc4ce6002c95fc6b5f1bb293d6692370afe233eebd71c4a128dc2556 - Sigstore transparency entry: 1280799997
- Sigstore integration time:
-
Permalink:
CocoRoF/geny-harness@9f5b5edfca80009f6c69db2f204bdedddc893ada -
Branch / Tag:
refs/heads/main - Owner: https://github.com/CocoRoF
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9f5b5edfca80009f6c69db2f204bdedddc893ada -
Trigger Event:
workflow_dispatch
-
Statement type: