ghostpipe
Linear pipeline runner with parallel groups. Steps are functions. Order is explicit. Zero dependencies.
Install
pip install ghostpipe
Usage
from ghostpipe import Pipeline, Step, Parallel
pipe = Pipeline("assessment", steps=[
Step("parse", parse_uploads),
Step("normalize", normalize_data),
Parallel([
Step("clarity", score_clarity),
Step("context", score_context),
Step("iteration", score_iteration),
]),
Step("aggregate", aggregate_scores),
])
result = pipe.run(raw_input)
# result.status = "complete"
# result.completed = ["parse", "normalize", "clarity", "context", "iteration", "aggregate"]
# result.get("clarity") → 0.82
# result.get("aggregate") → {"overall": 0.78}
How it works
- Step wraps a bare function. Output of one step is input to the next.
- Parallel runs multiple steps on the same input concurrently. Outputs merge into a dict for the next step.
- Errors halt the pipeline by default (
halt_on_error=Falseto continue). - Callbacks for step start/complete/error.
- Audit via ghostseal — every step boundary emits an event with output hash.
Parallel groups
Steps in a Parallel group receive the same input and run in threads. Results are merged into a dict:
pipe = Pipeline("score", steps=[
Step("prep", prep_fn),
Parallel([
Step("x2", lambda x: x * 2),
Step("x3", lambda x: x * 3),
]),
Step("sum", lambda d: d["x2"] + d["x3"]),
])
result = pipe.run(10)
# result.get("sum") = 50
Order within the group doesn't matter. Same result every time.
With ghostseal audit
from ghostseal import SealClient
audit = SealClient(blackbox_url="https://blackbox:8443", api_key="...")
pipe = Pipeline("assessment", steps=[...], audit=audit)
pipe.run(data)
# Every step start/complete/fail emits to Blackbox
Part of the GhostLogic SDK
maelspine → config registry
ghostseal → audit backbone
ghostprompt → prompt management
ghostpipe → pipeline runner (this package)
ghostrouter → LLM routing
ghostserver → MCP tools
License
Apache 2.0
Release files for ghostpipe 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ghostpipe-0.1.1.tar.gz | 11.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ghostpipe-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 21.5 kB
Release files / ghostpipe-0.1.1.tar.gz
| Download URL | ghostpipe-0.1.1.tar.gz |
|---|---|
| Size | 11.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6450744624a86526cc20b95326dabb81470b1dca26088d594d02ef2cb91167a5
|
|
BLAKE2b-256 checksum How to use checksums |
122b145b548e2ad21990443f4555f72958c27f68d6c7476659f52c39f453d0c0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.10
|
Release files / ghostpipe-0.1.1-py3-none-any.whl
| Download URL | ghostpipe-0.1.1-py3-none-any.whl |
|---|---|
| Size | 9.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
56961e19cc8f6b5450bd7f97639fd511f90e6d360851492af392fa453a528a19
|
|
BLAKE2b-256 checksum How to use checksums |
98c58d89d6b54258201fc196250a17507c300a7317427c12fe8dc02b00e08239
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.10
|