{"id":47780069,"url":"https://github.com/nicolailassen/orxhestra","last_synced_at":"2026-04-19T18:00:44.969Z","repository":{"id":343903953,"uuid":"1179630069","full_name":"NicolaiLassen/orxhestra","owner":"NicolaiLassen","description":"Multi-agent orchestration framework for Python — turn any agent setup into a CLI or server.","archived":false,"fork":false,"pushed_at":"2026-04-12T14:26:25.000Z","size":1989,"stargazers_count":16,"open_issues_count":0,"forks_count":4,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-04-12T16:20:14.648Z","etag":null,"topics":["a2a","adk","agent-framework","agents","langchain","mcp"],"latest_commit_sha":null,"homepage":"https://orxhestra.com","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NicolaiLassen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-12T08:09:20.000Z","updated_at":"2026-04-12T14:26:28.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/NicolaiLassen/orxhestra","commit_stats":null,"previous_names":["nicolailassen/langchain-adk","nicolailassen/orxhestra"],"tags_count":68,"template":false,"template_full_name":null,"purl":"pkg:github/NicolaiLassen/orxhestra","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NicolaiLassen%2Forxhestra","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NicolaiLassen%2Forxhestra/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NicolaiLassen%2Forxhestra/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NicolaiLassen%2Forxhestra/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NicolaiLassen","download_url":"https://codeload.github.com/NicolaiLassen/orxhestra/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NicolaiLassen%2Forxhestra/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31935697,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-17T12:37:54.787Z","status":"ssl_error","status_checked_at":"2026-04-17T12:37:25.095Z","response_time":62,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["a2a","adk","agent-framework","agents","langchain","mcp"],"created_at":"2026-04-03T13:04:21.306Z","updated_at":"2026-04-17T16:01:28.988Z","avatar_url":"https://github.com/NicolaiLassen.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/NicolaiLassen/orxhestra/main/assets/logo_text_bottom.svg\" width=\"400\" alt=\"orxhestra logo\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eMulti-agent orchestration framework for Python — turn any agent setup into a CLI or server.\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://pypi.org/project/orxhestra/\"\u003e\u003cimg src=\"https://img.shields.io/pypi/v/orxhestra\" alt=\"PyPI\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://pypi.org/project/orxhestra/\"\u003e\u003cimg src=\"https://img.shields.io/pypi/pyversions/orxhestra\" alt=\"Python\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/NicolaiLassen/orxhestra/blob/main/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/github/license/NicolaiLassen/orxhestra\" alt=\"License\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cbr\u003e\n\nCompose multi-agent AI systems with async event streaming, agent hierarchies, and built-in support for MCP and A2A protocols.\n\n## Orx CLI\n\nTurn any `orx.yaml` agent setup into an interactive terminal agent. Ships with a coding agent out of the box — or compose your own.\n\n\u003e **Looking for a full-featured coding agent?** Check out [orxhestra-code](https://github.com/NicolaiLassen/orxhestra-code) — an enhanced coding agent built on orxhestra with permissions, multi-file editing, and project-aware context.\n\n```bash\npip install orxhestra[cli,openai]\norx\n```\n\n```\n+-- orx - terminal coding agent ------------------------------------+\n|  model: gpt-5.4   workspace: ~/my-project   /help for commands    |\n+-------------------------------------------------------------------+\n\norx\u003e add error handling to the API routes\n\n  \u003e read_file(src/api/routes.py)\n  \u003e grep(pattern=\"raise\", path=src/api/)\n  \u003e write_todos(3 tasks)\n\n  Tasks\n  * Add try/except to all route handlers  [in progress]\n  - Add custom error response model\n  - Write tests for error cases\n\n  \u003e edit_file(src/api/routes.py)\n  \u003e shell_exec(pytest tests/test_api.py)\n  4 passed\n\n  Done - added structured error handling to all 4 route handlers\n  with a custom ErrorResponse model. All tests pass.\n```\n\n### Features\n\n- **29 LLM providers** — OpenAI, Azure OpenAI, Anthropic, Google, Mistral, Cohere, Groq, DeepSeek, Ollama, and 20 more via `--model`\n- **Streaming** — real-time token rendering with Markdown formatting\n- **Tool approval** — prompts before destructive operations (write, edit, shell)\n- **Task planning** — structured todo lists visible in the terminal\n- **Sub-agent delegation** — spawn isolated agents for complex subtasks\n- **Auto-memory** — persistent per-project memories across sessions (4 types: user, feedback, project, reference)\n- **Dark/light theme** — auto-detects terminal, toggle with `/theme`\n- **Background tasks** — spawn and monitor async sub-agent tasks\n- **Smart file reading** — offset/limit pagination with line numbers, 256KB size guard\n- **Local context injection** — auto-detects language, git state, package manager, project tree\n- **Context summarization** — auto-compacts long conversations, `/compact` command\n- **Orx YAML** — run any orx.yaml agent team: `orx my-agents.yaml`\n\n### Usage\n\n```bash\norx                               # interactive REPL (default model)\norx --model claude-sonnet-4-6     # use a specific model\norx -c \"fix the failing tests\"    # single-shot command\norx my-agents.yaml                # run a custom orx file\norx --auto-approve                # skip approval prompts\norx orx.yaml --serve -p 9000      # start as A2A server\n```\n\n### Commands\n\n| Command | Description |\n|---------|-------------|\n| `/model \u003cname\u003e` | Switch model mid-session |\n| `/clear` | Reset conversation |\n| `/compact` | Summarize old messages to free context |\n| `/todos` | Show current task list |\n| `/memory` | List saved memories |\n| `/theme` | Switch dark/light theme |\n| `/session` | Session info |\n| `/undo` | Remove last turn |\n| `/retry` | Re-run last message |\n| `/copy` | Copy last response |\n| `/help` | Show all commands |\n| `/exit` | Exit |\n\n---\n\n## Quickstart (SDK)\n\n```bash\npip install orxhestra\n# or\nuv add orxhestra\n```\n\n```python\nfrom orxhestra import LlmAgent, Runner, InMemorySessionService\n\nagent = LlmAgent(\n    name=\"assistant\",\n    model=\"gpt-5.4\",\n    instructions=\"You are a helpful assistant.\",\n)\n\nrunner = Runner(agent=agent, session_service=InMemorySessionService())\nresponse = await runner.run(user_id=\"user1\", session_id=\"s1\", new_message=\"Hello!\")\n\nfor event in response:\n    print(event.content)\n```\n\n\u003e [!TIP]\n\u003e For persistent database sessions, install the database extra: `pip install orxhestra[database]`\n\n\u003e [!TIP]\n\u003e For full documentation, guides, and API reference, visit [docs.orxhestra.com](https://docs.orxhestra.com).\n\n## Features\n\n- **Agent ensemble** - LLM, ReAct, Sequential, Parallel, and Loop agents\n- **29 LLM providers** - OpenAI, Azure OpenAI, Anthropic, Google, Mistral, Cohere, Groq, DeepSeek, Ollama, and 20 more\n- **Event streaming** - Async event-driven architecture with real-time streaming\n- **Composer** - Conduct entire agent orchestras declaratively with YAML\n- **Tools** - Function tools, filesystem tools, agent-as-tool, shell, and long-running tool support\n- **Planners** - Choreograph task execution with PlanReAct and TaskPlanner strategies\n- **Skills** - Reusable, composable agent repertoires\n- **MCP** - Model Context Protocol integration for tool servers\n- **A2A** - Agent-to-Agent protocol for cross-service harmonization\n- **Auto-memory** - Persistent memories with save_memory tool (user, feedback, project, reference)\n- **Background tasks** - Async sub-agent task lifecycle with spawn and monitor\n- **Deprecation decorators** - `@deprecated` and `@deprecated_param` for clean API evolution\n- **Tracing** - Built-in support for Langfuse, LangSmith, and custom callbacks\n\n## Agents at a glance\n\n| Agent | Description |\n|-------|-------------|\n| `LlmAgent` | Chat model agent with tools, instructions, and structured output |\n| `ReActAgent` | Reasoning + acting loop with automatic tool use |\n| `SequentialAgent` | Runs sub-agents in order |\n| `ParallelAgent` | Runs sub-agents concurrently |\n| `LoopAgent` | Repeats a sub-agent until exit condition |\n| `A2AAgent` | Connects to remote agents via A2A protocol |\n\n## Composer\n\nDefine entire agent orchestras in a single YAML file — no Python wiring needed. Compose LLM agents, loops, pipelines, tools, and review cycles declaratively. The example below builds a coding agent that plans, implements with filesystem + shell access, and self-reviews in a loop:\n\n```yaml\ndefaults:\n  model:\n    provider: openai\n    name: gpt-5.4\n\ntools:\n  exit:\n    builtin: \"exit_loop\"\n  filesystem:\n    builtin: \"filesystem\"\n  shell:\n    builtin: \"shell\"\n\nagents:\n  planner:\n    type: llm\n    description: \"Plans the implementation steps for the coder agent.\"\n    instructions: |\n      Output a numbered list of concrete steps the coder\n      should execute. Each step must be an actionable file\n      operation or shell command.\n\n  coder:\n    type: llm\n    description: \"Implements code changes with filesystem and shell access.\"\n    instructions: |\n      Follow the plan from the previous step exactly.\n      Use filesystem tools to create files and shell to\n      run commands. Never ask the user to do anything.\n    tools:\n      - filesystem\n      - shell\n\n  reviewer:\n    type: llm\n    description: \"Reviews changes and approves or requests fixes.\"\n    instructions: |\n      Check files exist and look correct. If done, call\n      exit_loop. Otherwise describe what needs fixing.\n    tools:\n      - exit\n\n  dev_loop:\n    type: loop\n    agents: [coder, reviewer]\n    max_iterations: 10\n\n  coordinator:\n    type: sequential\n    agents: [planner, dev_loop]\n\nmain_agent: coordinator\n\nrunner:\n  app_name: coding-agent\n  session_service: memory\n```\n\nRun it as an interactive CLI or expose it as an A2A server:\n\n```bash\norx orx.yaml                    # interactive terminal agent\norx orx.yaml --serve -p 9000    # A2A server on port 9000\n```\n\n```bash\n# test the server\ncurl -X POST http://localhost:9000/ \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"jsonrpc\": \"2.0\", \"id\": \"1\",\n    \"method\": \"message/send\",\n    \"params\": {\n      \"message\": {\n        \"role\": \"user\",\n        \"parts\": [{\"text\": \"Hello!\", \"mediaType\": \"text/plain\"}]\n      }\n    }\n  }'\n```\n\n## Docker\n\n```bash\ndocker run -e OPENAI_API_KEY=$OPENAI_API_KEY \\\n  -v ./orx.yaml:/app/orx.yaml \\\n  nicolaimtlassen/orxhestra\n```\n\n## Documentation\n\n- [Getting Started](https://docs.orxhestra.com/getting-started/quickstart) - Installation and first agent\n- [Agents](https://docs.orxhestra.com/concepts/agents) - Agent types and configuration\n- [Tools](https://docs.orxhestra.com/tools/overview) - Built-in and custom tools\n- [Composer](https://docs.orxhestra.com/composer/overview) - YAML-based agent composition\n- [Integrations](https://docs.orxhestra.com/integrations/mcp) - MCP and A2A setup\n- [Skills](docs/skills/) - Code-level CLI skill references (agent-tools, callbacks, planners, streaming, and more)\n- [orxhestra-code](https://github.com/NicolaiLassen/orxhestra-code) - Enhanced coding agent with permissions, multi-file editing, and project context\n\n---\n\n## Acknowledgments\n\nThis project is built on the shoulders of several outstanding open-source projects and research efforts:\n\n- [LangChain](https://github.com/langchain-ai/langchain)\n- [Google Agent Development Kit (ADK)](https://github.com/google/adk-python)\n- [LangGraph](https://github.com/langchain-ai/langgraph)\n- [Model Context Protocol (MCP)](https://modelcontextprotocol.io)\n- [Agent-to-Agent Protocol (A2A)](https://github.com/google/A2A)\n\nSpecial thanks to the open-source AI community for pushing the boundaries of what's possible with agent frameworks.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnicolailassen%2Forxhestra","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnicolailassen%2Forxhestra","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnicolailassen%2Forxhestra/lists"}