Horus Runtime
Reproducible scientific workflows, from your laptop to the HPC cluster.
Horus Runtime is the open-source engine behind the Temple Compute platform: you describe a pipeline once, in YAML or Python, and run it wherever the compute lives. It tracks every artifact a task produces, moves those artifacts between machines for you, and skips work that is already done when you run it again.
Quickstart
Install it:
uv add horus-runtime # or: pip install horus-runtime
Save this as workflow.yaml:
name: example_pipeline
kind: horus_workflow
tasks:
- id: producer
name: Produce data
kind: horus_task
runtime:
kind: command
# $data renders to the on-target path of the "data" output artifact.
command: "mkdir -p /tmp/horus_example && echo 42 > $data"
executor:
kind: shell
target:
kind: local
outputs:
- id: data
kind: file
path: /tmp/horus_example/data.txt
- id: consumer
name: Summarize data
kind: horus_task
runtime:
kind: command
command: "wc -l ${data_in} > $summary"
executor:
kind: shell
target:
kind: local
inputs:
- id: data_in
kind: file
path: /tmp/horus_example/data.txt
outputs:
- id: summary
kind: file
path: /tmp/horus_example/summary.txt
# Edges are the DAG: producer.data feeds consumer.data_in, so producer runs
# first and its output is transferred before the consumer starts.
edges:
- source: producer
source_output: data
target: consumer
target_input: data_in
Run it:
horus run workflow.yaml
[HorusTask._run] Task Produce data started.
[TaskTimeMiddleware.after] Task Produce data completed in 0.01 seconds.
[HorusTask._run] Task Summarize data started.
[TaskTimeMiddleware.after] Task Summarize data completed in 0.03 seconds.
[WorkflowTimeMiddleware.after] Workflow example_pipeline completed in 0.05 seconds.
Run it a second time and nothing re-executes, because both tasks' output artifacts already exist:
[BaseTask.run] Skipping task Produce data. Already complete.
[BaseTask.run] Skipping task Summarize data. Already complete.
Delete the outputs, or pass --no-skip-all, to force a fresh run.
Why Horus
- Write once, run anywhere. A task declares what to run (
runtime), how to run it (executor), and where (target). Moving a stage from your laptop to a SLURM cluster is a change to thetargetblock, not a rewrite. - Artifacts, not filenames. Inputs and outputs are typed, addressable objects. Horus resolves them into your commands, transfers them between targets when an edge crosses machines, and knows when they already exist.
- Restartable by default. Completed tasks are skipped on re-run, so a pipeline that failed at hour nine picks up at hour nine.
- Everything is a plugin. Targets, runtimes, executors, artifacts, tasks, transfer
strategies, and middleware are all registered
kinds. Adding one is a package with an entry point, never a fork. - Built for real science. Resource requests, subworkflows, mapped fan-out, run packaging, and a live TUI, driven from a file you can commit and diff.
CLI
| Command | What it does |
|---|---|
horus run WORKFLOW_YAML |
Execute the workflow. --trigger picks the starting task, --no-tui streams plain logs, --no-skip TASK_ID / --no-skip-all force re-runs, --debug turns on debug logging. |
horus package WORKFLOW_YAML |
Bundle the workflow and every file it references into a zip, so it runs on a machine that never had your directory. |
horus sanitize WORKFLOW_YAML |
Promote implicit root inputs into declared top-level artifacts, which is what lets a UI offer them as workflow inputs. |
Full CLI and SDK reference: docs.templecompute.com.
Built-in kinds
Everything below ships with the runtime and is usable straight after install.
| Category | Kinds |
|---|---|
| Targets | local |
| Runtimes | command, python, python_string, python_script |
| Executors | shell, python_exec, python_fn, python_fn_external |
| Artifacts | file, folder, json, pickle, number, boolean, string |
| Tasks | horus_task, subworkflow |
| Workflows | horus_workflow |
Ecosystem
Official plugins, installable alongside the runtime:
| Plugin | Adds |
|---|---|
| horus-slurm | Run tasks as SLURM jobs on an HPC cluster. |
| horus-docker | Execute tasks inside Docker containers. |
| horus-singularity | Execute tasks inside Singularity/Apptainer containers. |
| horus-environments | Auto-provision per-task Python environments with uv or conda. |
And for ready-made science: Pantheon is a curated library of production workflows, from drug discovery (Boltz-2 virtual screening, AutoDock Vina docking) to molecular dynamics setup with BioExcel Building Blocks (GROMACS, AMBER). Contributions welcome there too.
Writing your own plugin
A plugin is an ordinary Python package that declares a horus.* entry point:
[project.entry-points."horus.target"]
my_cluster = "my_package.target"
Once installed, kind: my_cluster works in any workflow. Start from the
plugin template and see the
SDK docs for the base classes.
Contributing
Contributions are very welcome, from bug reports to new plugins.
- Read CONTRIBUTING.md for dev setup and the PR checklist.
- Browse good first issues.
- Ask questions in Discussions.
- Be excellent to each other: Code of Conduct.
Found a security issue? Please follow SECURITY.md instead of opening an issue.
Funding & Credits
Developed by Temple Compute.
License
horus-runtime is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0).
See the LICENSE file for details.
For commercial licensing and support, contact Temple Compute at christian@templecompute.com.
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 horus_runtime-0.5.0.tar.gz.
File metadata
- Download URL: horus_runtime-0.5.0.tar.gz
- Upload date:
- Size: 288.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bf9213e1ec3914d4e2e960e42e271267084aefcc464c3f0103e443b153fcba79
|
|
| MD5 |
8ff9d29aac79e5a1753f0214e3e9e24c
|
|
| BLAKE2b-256 |
22db6bc19f597783342805669f3524de41e4cf727d951b9451d720b556a0b705
|
Provenance
The following attestation bundles were made for horus_runtime-0.5.0.tar.gz:
Publisher:
release.yaml on temple-compute/horus-runtime
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
horus_runtime-0.5.0.tar.gz -
Subject digest:
bf9213e1ec3914d4e2e960e42e271267084aefcc464c3f0103e443b153fcba79 - Sigstore transparency entry: 2685463296
- Sigstore integration time:
-
Permalink:
temple-compute/horus-runtime@34b585d746838861f746023b5c498c6fdd976647 -
Branch / Tag:
refs/tags/v0.5.0 - Owner: https://github.com/temple-compute
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@34b585d746838861f746023b5c498c6fdd976647 -
Trigger Event:
release
-
Statement type:
File details
Details for the file horus_runtime-0.5.0-py3-none-any.whl.
File metadata
- Download URL: horus_runtime-0.5.0-py3-none-any.whl
- Upload date:
- Size: 280.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c625f886fa210a423628144d45736310de46457fe9eedde95b3a5b3455bba67c
|
|
| MD5 |
89cefdf09b2508f6c0a9d156f13c6d99
|
|
| BLAKE2b-256 |
4cf2294a71c4ef1d2da18db3f47dc3c005d322a720e1f85663e96bd5f8114650
|
Provenance
The following attestation bundles were made for horus_runtime-0.5.0-py3-none-any.whl:
Publisher:
release.yaml on temple-compute/horus-runtime
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
horus_runtime-0.5.0-py3-none-any.whl -
Subject digest:
c625f886fa210a423628144d45736310de46457fe9eedde95b3a5b3455bba67c - Sigstore transparency entry: 2685463317
- Sigstore integration time:
-
Permalink:
temple-compute/horus-runtime@34b585d746838861f746023b5c498c6fdd976647 -
Branch / Tag:
refs/tags/v0.5.0 - Owner: https://github.com/temple-compute
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@34b585d746838861f746023b5c498c6fdd976647 -
Trigger Event:
release
-
Statement type: