Lightweight local-first multi-agent orchestration
Project description
OpenHydra
Lightweight, local-first multi-agent orchestration. One command, no Docker, no external services.
Quick Start
# Install from source
uv pip install -e .
# Install from PyPI (after first release is published)
pip install openhydra
# Recommended: quick onboarding (writes ~/.openhydra/openhydra.yaml with safe defaults)
uv run openhydra onboard
# Validate setup and channel/provider prerequisites
uv run openhydra doctor
# Optional: strict diagnostics (treat warnings as failures)
uv run openhydra doctor --strict
# Run a one-off workflow
uv run openhydra run "Build a Python CLI that converts CSV to JSON"
# Optional: full interactive setup (providers/tools/channels)
uv run openhydra init
# Optional: install channel/web extras before serving
uv pip install -e ".[all]"
# Run the server (web API + any enabled channels)
uv run openhydra serve
# Set up a new role agent in config/agents.yaml
uv run openhydra agent setup eng.docs --description "Writes implementation docs"
# Interactive setup (prompts for objectives, skills, tools, and context/data)
uv run openhydra agent setup --interactive
Need full setup and configuration details (all settings, env vars, and customization points)? See SETUP.md.
Release
PyPI publishing is automated via GitHub Actions (.github/workflows/publish.yml):
- Publish to TestPyPI manually: run
Publishworkflow with inputrepository=testpypi. - Publish to PyPI manually: run
Publishworkflow with inputrepository=pypi. - Publish to PyPI from a tag: push a tag like
v0.1.0(must matchpyproject.tomlversion).
Trusted Publishing must be configured once in both PyPI and TestPyPI for this repository.
Use owner mercurialsolo, repository openhydra, workflow publish.yml, and environments
pypi / testpypi.
OpenHydra is best for work that needs:
- planning with dependencies, checks, and retries
- using multiple tools (code, tests, docs, browser/search, channels)
- selecting the right role, tools, and skills instead of one fixed script
Personal planning and assistant tasks:
"Plan my Tokyo trip from May 12-20: flights from SFO, vegetarian options near Shinjuku, and a day-by-day itinerary under $3,500""Build my next 6-week personal operating plan: gym 4x/week, finish two certifications, and keep Sundays blocked for family""Organize my monthly admin stack: rent, taxes, insurance renewals, and reminders with due dates and fallback actions"
Research for you:
"For our seed-stage B2B SaaS (ACV ~$8k), compare 6 competitors' pricing and positioning, then produce a differentiated GTM brief with sources""Review our last 120 support tickets and 40 churn notes, cluster root causes, and propose the top 5 retention experiments by expected impact""Prepare a launch-readiness compliance brief for our AI meeting assistant (US + EU): likely legal risks, mitigations, and questions for counsel""Evaluate expansion options across Texas, Florida, and Ontario using market size, regulatory friction, and hiring costs; recommend one for Q3""Compare open-source LLM eval frameworks for our RAG product, rank tradeoffs, and produce a recommendation memo with implementation implications""Review open GitHub issues for our checkout service, cluster duplicate themes, and propose a prioritized 2-sprint stabilization plan""Screen US large-cap stocks, liquid call options, and top Polymarket contracts for this week; recommend 3 risk-defined opportunities with thesis, catalysts, downside case, and confidence score""Find the best recent papers on hierarchical reasoning for agentic products, rank the top 10 by practical relevance, and summarize what we can implement in our roadmap next sprint"
Build software products:
"Define and deliver v1 team invites for our app: PRD, rollout plan, implementation, and validation tests""Migrate our Flask billing API to FastAPI without breaking existing /v1 endpoints or auth behavior, then prove parity with tests""Add Google and GitHub OAuth to our web app, preserve existing session behavior, and add integration coverage for login + callback flows""Find and fix intermittent checkout timeouts seen in production logs, then add a regression test that reproduces the original failure""Audit dependencies for known CVEs, patch low-risk updates, and publish a release-risk summary with test results""Generate a weekly engineering readiness report for our team covering test health, dependency drift, incident carryover, and release blockers"
Talk To OpenHydra Agents From Any Channel
OpenHydra runs one orchestration engine and lets you talk to it from multiple channels. You can submit work from Web, Slack, WhatsApp, or Discord, and get progress/final updates back in that channel.
Basic flow:
- Enable the channels you want in
.openhydra/openhydra.yaml - Start the server with
uv run openhydra serve - Send your task from your preferred channel
Step-by-step channel setup guides:
Example channel config:
web:
enabled: true
host: "127.0.0.1"
port: 7070
channels:
slack:
enabled: true
whatsapp:
enabled: true
How to talk to agents:
- Web: submit tasks via REST (
POST /api/v1/workflows) and watch events on WebSocket (/api/v1/ws) - Slack: send a DM to the bot or
@mentionit in a channel with your task text - WhatsApp: send a normal message as the task text; control commands like
approve,reject <reason>,pause,resume,cancelare supported. On first setup,openhydra serveprints the pairing QR in terminal. - Discord: run
/hydrawithaction=runand your task asargument
Planning On The Fly (No Manual Plan File)
You do not need to write a plan first. Submit the outcome directly:
uv run openhydra run "Migrate this Flask API to FastAPI without breaking existing endpoints" --watch
OpenHydra then:
- Uses the
plannerrole to generate a JSON step graph (role_id,instructions,depends_on) - Persists workflow + steps to SQLite before running (for durability/recovery)
- Executes ready steps based on dependencies (independent branches can run concurrently)
- Applies role gates (quality/tests/approval) between steps
- Reports progress/events and final output
For that FastAPI migration prompt, a typical generated plan could look like:
eng.init: inventory current Flask routes and migration constraintseng.implement: port app structure and handlers to FastAPItest.code: run/update tests and validate endpoint compatibilitypm.review: verify scope completion and release readiness
To inspect the generated plan and step-by-step progress:
uv run openhydra status <workflow_id>
Contributing
See CONTRIBUTING.md for the contributor workflow, checks, and PR requirements.
Learn More
- SETUP.md — complete setup and configuration reference.
- Advanced / Learn More — configuration model, architecture, custom channels, dynamic skills, and OpenClaw integration.
- Channel setup playbooks:
- SPEC.md — architecture, protocols, and extension APIs.
- PLAN.md — implementation roadmap and phase status.
- CLAUDE.md — maintainer conventions and project notes.
- AGENTS.md — repository contribution and workflow guidelines.
- config/agents.yaml — default role catalog and gate configuration.
Status
Early development. See PLAN.md for current phase.
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 openhydra-0.1.0.tar.gz.
File metadata
- Download URL: openhydra-0.1.0.tar.gz
- Upload date:
- Size: 362.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
787ba7ab19c5254c6deccdead0164d8ccfba34797b51eaffa7dce8d069929f2f
|
|
| MD5 |
e9059739f99f74d04710c5792c0df01a
|
|
| BLAKE2b-256 |
9aadf91b76a1a88d44c2d7794c3e2a46be42693ce571825cb1e0f00877975ca5
|
Provenance
The following attestation bundles were made for openhydra-0.1.0.tar.gz:
Publisher:
publish.yml on mercurialsolo/openhydra
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
openhydra-0.1.0.tar.gz -
Subject digest:
787ba7ab19c5254c6deccdead0164d8ccfba34797b51eaffa7dce8d069929f2f - Sigstore transparency entry: 976689929
- Sigstore integration time:
-
Permalink:
mercurialsolo/openhydra@5a5de107dd570cab0ce99c5d2b2bb3d583b04099 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/mercurialsolo
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@5a5de107dd570cab0ce99c5d2b2bb3d583b04099 -
Trigger Event:
push
-
Statement type:
File details
Details for the file openhydra-0.1.0-py3-none-any.whl.
File metadata
- Download URL: openhydra-0.1.0-py3-none-any.whl
- Upload date:
- Size: 178.0 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 |
23c015effbfc0db76f3a9d29101312ec0eb11f73f16cbd5203c8f44a2671ee34
|
|
| MD5 |
ebae33088e11b4ab1a25e80726631e70
|
|
| BLAKE2b-256 |
57f6a26aeadca2fc72e6fc2e06e325f0e3f8bd7f712c6bc4278b847d973f72da
|
Provenance
The following attestation bundles were made for openhydra-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on mercurialsolo/openhydra
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
openhydra-0.1.0-py3-none-any.whl -
Subject digest:
23c015effbfc0db76f3a9d29101312ec0eb11f73f16cbd5203c8f44a2671ee34 - Sigstore transparency entry: 976689931
- Sigstore integration time:
-
Permalink:
mercurialsolo/openhydra@5a5de107dd570cab0ce99c5d2b2bb3d583b04099 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/mercurialsolo
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@5a5de107dd570cab0ce99c5d2b2bb3d583b04099 -
Trigger Event:
push
-
Statement type: