Metadata-Version: 2.4
Name: coactra
Version: 0.3.0
Summary: Composable libraries for AI agent fleets — model calls, memory, workspace, workflow, team, and agent composition in one package.
Project-URL: Homepage, https://github.com/DataOpsFusion/coactra
Project-URL: Repository, https://github.com/DataOpsFusion/coactra
Project-URL: Documentation, https://dataopsfusion.github.io/coactra/
Project-URL: Changelog, https://github.com/DataOpsFusion/coactra/blob/main/CHANGELOG.md
Project-URL: Issues, https://github.com/DataOpsFusion/coactra/issues
Author: coactra authors
License: MIT
License-File: LICENSE
Keywords: agent-framework,agents,llm,multi-agent,workflow
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.12
Requires-Dist: pydantic<3,>=2.7
Provides-Extra: a2a
Requires-Dist: a2a-sdk<2.0,>=1.0; extra == 'a2a'
Requires-Dist: sse-starlette>=2.0; extra == 'a2a'
Requires-Dist: starlette>=0.37; extra == 'a2a'
Provides-Extra: agent
Requires-Dist: pydantic-ai-slim<2,>=1.0; extra == 'agent'
Provides-Extra: agent-gateway
Requires-Dist: httpx>=0.27; extra == 'agent-gateway'
Requires-Dist: mcp>=1.24; extra == 'agent-gateway'
Requires-Dist: pydantic-ai-slim[mcp]<2,>=1.0; extra == 'agent-gateway'
Provides-Extra: ai
Requires-Dist: instructor<2,>=1.0; extra == 'ai'
Requires-Dist: litellm<2,>=1.40; extra == 'ai'
Requires-Dist: numpy>=1.26; extra == 'ai'
Provides-Extra: all
Requires-Dist: instructor<2,>=1.0; extra == 'all'
Requires-Dist: litellm<2,>=1.40; extra == 'all'
Requires-Dist: numpy>=1.26; extra == 'all'
Requires-Dist: pydantic-ai-slim<2,>=1.0; extra == 'all'
Requires-Dist: sqlmodel>=0.0.21; extra == 'all'
Provides-Extra: chroma
Requires-Dist: chromadb>=0.5; extra == 'chroma'
Provides-Extra: cloudevents
Requires-Dist: cloudevents<2,>=1; extra == 'cloudevents'
Provides-Extra: dapr
Requires-Dist: dapr-ext-workflow; extra == 'dapr'
Provides-Extra: dbos
Requires-Dist: dbos<3,>=2; extra == 'dbos'
Provides-Extra: dev
Requires-Dist: pyright>=1.1; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
Requires-Dist: pytest-cov>=5; extra == 'dev'
Requires-Dist: pytest>=8; extra == 'dev'
Requires-Dist: ruff>=0.8; extra == 'dev'
Provides-Extra: fsspec
Requires-Dist: fsspec; extra == 'fsspec'
Provides-Extra: graphiti
Requires-Dist: graphiti-core>=0.3; extra == 'graphiti'
Provides-Extra: graphiti-ai
Requires-Dist: graphiti-core>=0.3; extra == 'graphiti-ai'
Requires-Dist: instructor<2,>=1.0; extra == 'graphiti-ai'
Requires-Dist: litellm<2,>=1.40; extra == 'graphiti-ai'
Requires-Dist: numpy>=1.26; extra == 'graphiti-ai'
Provides-Extra: integrations
Requires-Dist: a2a-sdk<2,>=1; extra == 'integrations'
Requires-Dist: cel-python<0.6,>=0.5; extra == 'integrations'
Requires-Dist: cloudevents<2,>=1; extra == 'integrations'
Requires-Dist: dapr-ext-workflow; extra == 'integrations'
Requires-Dist: dbos<3,>=2; extra == 'integrations'
Requires-Dist: fsspec; extra == 'integrations'
Requires-Dist: instructor<2,>=1.0; extra == 'integrations'
Requires-Dist: jinja2>=3.1; extra == 'integrations'
Requires-Dist: langgraph-checkpoint-sqlite>=3.0; extra == 'integrations'
Requires-Dist: langgraph-checkpoint>=2.0; extra == 'integrations'
Requires-Dist: langgraph>=1.0; extra == 'integrations'
Requires-Dist: litellm<2,>=1.40; extra == 'integrations'
Requires-Dist: numpy>=1.26; extra == 'integrations'
Requires-Dist: opentelemetry-api<2,>=1; extra == 'integrations'
Requires-Dist: prefect>=3; extra == 'integrations'
Requires-Dist: pyyaml>=6.0; extra == 'integrations'
Requires-Dist: sqlalchemy>=2.0; extra == 'integrations'
Requires-Dist: sqlmodel>=0.0.21; extra == 'integrations'
Requires-Dist: structlog>=24.0; extra == 'integrations'
Requires-Dist: temporalio<2,>=1; extra == 'integrations'
Requires-Dist: tiktoken>=0.7; extra == 'integrations'
Provides-Extra: langgraph
Requires-Dist: cel-python<0.6,>=0.5; extra == 'langgraph'
Requires-Dist: jinja2>=3.1; extra == 'langgraph'
Requires-Dist: langgraph-checkpoint-sqlite>=3.0; extra == 'langgraph'
Requires-Dist: langgraph-checkpoint>=2.0; extra == 'langgraph'
Requires-Dist: langgraph>=1.0; extra == 'langgraph'
Provides-Extra: mem0
Requires-Dist: mem0ai<1,>=0.1; extra == 'mem0'
Provides-Extra: memory
Provides-Extra: oauth
Requires-Dist: authlib>=1.3; extra == 'oauth'
Requires-Dist: httpx>=0.27; extra == 'oauth'
Provides-Extra: office
Requires-Dist: pyyaml>=6.0; extra == 'office'
Requires-Dist: tiktoken>=0.7; extra == 'office'
Provides-Extra: openfga
Requires-Dist: openfga-sdk<1,>=0.9; extra == 'openfga'
Provides-Extra: otel
Requires-Dist: opentelemetry-api<2,>=1; extra == 'otel'
Provides-Extra: postgres
Requires-Dist: psycopg[binary]>=3; extra == 'postgres'
Provides-Extra: prefect
Requires-Dist: prefect>=3; extra == 'prefect'
Provides-Extra: sql
Requires-Dist: sqlalchemy>=2.0; extra == 'sql'
Provides-Extra: team
Requires-Dist: sqlmodel>=0.0.21; extra == 'team'
Provides-Extra: temporal
Requires-Dist: temporalio<2,>=1; extra == 'temporal'
Provides-Extra: tiktoken
Requires-Dist: tiktoken>=0.7; extra == 'tiktoken'
Provides-Extra: workflow
Requires-Dist: pyyaml>=6.0; extra == 'workflow'
Provides-Extra: workspace
Description-Content-Type: text/markdown

# coactra

Component-based orchestration library for agentic systems. Coactra is Team-first: `Team` owns agent registration, policy, workflow routing, and model resolution, while `Agent` remains a thin runtime shell over pydantic-ai.

```bash
pip install "coactra[agent]"
```

Common extras:

```bash
pip install "coactra[agent-gateway,oauth]"  # MCP gateway and OAuth
pip install "coactra[graphiti]"
pip install "coactra[mem0]"
pip install "coactra[langgraph]"
pip install "coactra[sql]"
```

## Small Surface

```python
from coactra import Team, Scope, Policy, Skill, Workflow
```

Submodule helpers when wiring adapters:

```python
from coactra.agent import MCPServer
from coactra.workflow import step
```

Use the root surface for application code. Use lower-level modules only for adapters and host runtime wiring:

- `coactra.agent` for event/runtime types and outbound A2A transport (`coactra.agent.adapters`)
- `coactra.workflow` and `coactra.workflow.ledger` for workflow engines and durable work storage
- `coactra.team.directory` for org/member/seat persistence
- `coactra.memory` and `coactra.workspace` for backend integration

## Bring Existing Pieces

```python
import asyncio
import os

from coactra import ModelProfile, ModelResolver, ModelRoute, Policy, Scope, Team
from coactra.agent import MCPServer


async def main() -> None:
    team = Team(
        scope=Scope.local(),
        policy=Policy.permissive(),
        model_resolver=ModelResolver([
            ModelRoute(
                capability="existing-stack",
                profile=ModelProfile(
                    name="existing-stack",
                    model="openai/qwen3.6-plus",
                    api_base="https://opencode.ai/zen/go/v1",
                    api_key=os.environ["OC_KEY"],
                ),
            )
        ]),
    )
    agent = await team.add_agent(
        name="existing-stack-agent",
        model_capability="existing-stack",
        tools=[MCPServer(url="https://tools.example/mcp", name="tools")],
        memory="inprocess",
        workspace="./desk",
    )
    try:
        print(await agent.run("Use my existing stack"))
    finally:
        await agent.aclose()


asyncio.run(main())
```

See `examples/acceptance/` for the checked examples that define the alpha acceptance path.
