{"id":28022,"library":"ouroboros-ai","title":"Ouroboros AI","description":"Ouroboros is a specification-first workflow engine for AI coding agents, integrating with Claude Code and Codex CLI. It allows you to define reusable workflows using YAML specs and execute them via agents. Current version is 0.36.0, with a fast release cadence and breaking changes between minor versions.","status":"active","version":"0.36.0","language":"python","source_language":"en","source_url":"https://github.com/ouroboros-ai/ouroboros","tags":["workflow engine","AI agents","claude code","codex cli","specification-first"],"install":[{"cmd":"pip install ouroboros-ai","lang":"bash","label":"Install from PyPI"}],"dependencies":[{"reason":"Used for data validation and settings management","package":"pydantic","optional":false},{"reason":"Required for reading YAML workflow specifications","package":"pyyaml","optional":false}],"imports":[{"note":"Old library name used hyphen, but Python package uses underscore. Import from 'ouroboros'.","wrong":"from ouroboros_ai import WorkflowEngine","symbol":"WorkflowEngine","correct":"from ouroboros import WorkflowEngine"},{"note":"The correct import is directly from ouroboros, not a submodule.","wrong":"from ouroboros_ai.workflow import load_workflow","symbol":"load_workflow","correct":"from ouroboros import load_workflow"}],"quickstart":{"code":"import os\nfrom ouroboros import WorkflowEngine, load_workflow\n\nworkflow = load_workflow(\"my_workflow.yaml\")\nengine = WorkflowEngine(api_key=os.environ.get('ANTHROPIC_API_KEY', 'test-key'))\nresult = engine.run(workflow)\nprint(result)","lang":"python","description":"Load a YAML workflow specification and execute it using the engine."},"warnings":[{"fix":"Update calls from `engine.run(workflow)` to `engine.run(workflow=workflow)` or just `engine.run(workflow)` if using keyword (still works in 0.35+). Actually the signature changed: previous positional args may now be keyword-only. Check migration guide.","message":"In version 0.35.0, the 'run' method signature changed: it now requires 'workflow' as keyword argument, not positional.","severity":"breaking","affected_versions":"<0.35.0"},{"fix":"Rename 'tasks' top-level key to 'steps' in your YAML files, and adjust per-step field names.","message":"Workflow spec format changed from 'tasks' to 'steps' in version 0.30.0. Old YAML files will fail to load.","severity":"breaking","affected_versions":"<0.30.0"},{"fix":"Use `import ouroboros` or `from ouroboros import ...`.","message":"The package name on PyPI is 'ouroboros-ai' (with hyphen), but the importable module is 'ouroboros' (no hyphen). Common mistake: try to import from 'ouroboros_ai'.","severity":"gotcha","affected_versions":"all"}],"env_vars":null,"last_verified":"2026-05-09T00:00:00.000Z","next_check":"2026-08-07T00:00:00.000Z","problems":[{"fix":"Use `import ouroboros` or `from ouroboros import WorkflowEngine`.","cause":"Incorrect import path; the module is named 'ouroboros' (no underscore/hyphen).","error":"ModuleNotFoundError: No module named 'ouroboros_ai'"},{"fix":"Change top-level 'tasks' to 'steps' in your YAML file.","cause":"Workflow YAML uses 'steps' key but old spec used 'tasks'.","error":"yaml.parser.ParserError: expected <block end>, but found '<block mapping start>'"},{"fix":"Call `engine.run(workflow=workflow)` explicitly.","cause":"In version 0.35+, the 'workflow' argument is keyword-only.","error":"TypeError: WorkflowEngine.run() missing 1 required positional argument: 'workflow'"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}