Multi-agent runtime for Python developers
Project description
OSymandias
Multi-agent runtime for Python developers. One command to start everything.
What is this?
OSymandias is a Python library and CLI that turns your project into a full multi-agent runtime.
pip install osymandias
osy init
osy serve
PostgreSQL, Redis, RabbitMQ, Qdrant — managed internally via Docker. Dashboard at localhost:47759. Four Celery workers ready.
Quick start
Prerequisites: Python 3.11+, Docker
pip install osymandias
# Generate OSY.compose.yml + OSY.nginx.conf + .env + sample osy_tools.py
osy init
# Start everything
osy serve
Open http://localhost:47759 — dashboard.
API directly at http://localhost:47760/api/v1.
osy stop # pause containers, keep data
osy down # remove containers, keep volumes
osy delete # remove containers + volumes (asks for confirmation)
osy logs <job-id> -f # live-stream events
Built-in tool functions (@osy.tool)
from osymandias import osy
@osy.tool
def fetch_competitor_data(company: str, metrics: list[str]) -> dict:
"""Fetch competitor metrics from internal database."""
return {"company": company, "data": [...]}
Schema inferred from type hints. osy serve scans all .py files automatically — no YAML, no config files.
External agents (@osy.agent)
Register any Python callable — LangChain chain, CrewAI crew, LlamaIndex query engine, or plain Python — as an OSymandias agent:
from osymandias import osy, OsyContext
@osy.agent("ResearchAgent", framework="langchain",
description="Searches and summarises web content")
def research_agent(task: str, ctx: OsyContext) -> dict:
chain = build_langchain_chain()
ctx.emit_event("TASK_PROGRESS", {"step": "running chain"})
return {"summary": chain.invoke(task)}
Works with any framework: LangChain, CrewAI, LlamaIndex, Smolagents, OpenAI Agents SDK, plain Python.
OsyContext
Every @osy.agent function optionally receives an OsyContext as its ctx parameter:
@osy.agent("OrchestratorAgent")
def orchestrate(task: str, ctx: OsyContext) -> dict:
# shared memory — any agent in the same job can read/write
ctx.write_memory("plan", {"step": 1, "goal": task})
# live events — streamed to the dashboard
ctx.emit_event("TASK_PROGRESS", {"pct": 50})
# sub-tasks — spawn child tasks and wait for results
task_ids = ctx.spawn_tasks([
{"title": "Research", "agent_type": "ResearchAgent", "description": task},
{"title": "Analyse", "agent_type": "AnalystAgent", "description": task},
])
return {"merged": ctx.wait_for_tasks(task_ids)}
| Method | Description |
|---|---|
ctx.write_memory(key, value) |
Write to shared job memory |
ctx.read_memory(key) |
Read from shared job memory |
ctx.emit_event(type, payload) |
Stream event to dashboard live feed |
ctx.spawn_tasks(list) |
Spawn sub-tasks in parallel |
ctx.wait_for_tasks(ids) |
Block until all sub-tasks complete |
Supported LLM providers
OpenAI · Anthropic · DeepSeek · Groq · Gemini · Ollama (local)
Switch models per-agent from the dashboard — no restart required.
How it works
Job → A user-submitted goal
└── Task ×N → Subtask assigned to a specific agent type
└── AgentInstance → A running agent loop (LLM + tools + memory)
├── ToolCall → web_search / @osy.tool / webhook / ...
└── Sub-task → ctx.spawn_tasks([...]) → child Task ×N
Jobs are decomposed by a built-in PlannerAgent that sees all registered agents and routes tasks optimally. Tasks execute in parallel across specialized agents.
Built with FastAPI · Celery · PostgreSQL · Redis · RabbitMQ · Qdrant · LiteLLM · Next.js
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 osymandias-1.1.1.tar.gz.
File metadata
- Download URL: osymandias-1.1.1.tar.gz
- Upload date:
- Size: 889.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f7d87f046c979ad59831852696d6675319101a9aed62e8b88ad6cfdacd71bc19
|
|
| MD5 |
43a005575c8f8bdb92169d95858cfd4d
|
|
| BLAKE2b-256 |
6c07f8a67e554ca99365a9aef62167b7191340e6c2ee4be90cfab6c414a0038f
|
File details
Details for the file osymandias-1.1.1-py3-none-any.whl.
File metadata
- Download URL: osymandias-1.1.1-py3-none-any.whl
- Upload date:
- Size: 1.0 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
98f32c39ea45fc186ba570fbb95fe7b494d1b84f9066f30e03c864d5482c7ffe
|
|
| MD5 |
ee4aa6a1b0a8d29aff10a40a58c64e46
|
|
| BLAKE2b-256 |
6563fa2704cb4b74e0aaaff3a90d849e97718c54fff05da1fc1f04f63620c5c3
|