# Agents

> The @agent / @tool model, streaming and an HTTP surface.

Source: https://docs.pyrula.io/agents/

`pyrula.agents` runs agents on the durable [workflow](https://docs.pyrula.io/workflows.md) engine. Finished LLM and tool calls are journaled, so a crashed turn resumes without repeating paid calls.

```python
from pyrula.agents import agent, tool
```

Start with the [Quickstart](https://docs.pyrula.io/agents/quickstart.md).

- **Authoring**: [`@agent`](https://docs.pyrula.io/agents/authoring/agents.md), [`@tool`](https://docs.pyrula.io/agents/authoring/tools.md), [calling an LLM](https://docs.pyrula.io/agents/authoring/llm.md), [context](https://docs.pyrula.io/agents/authoring/context.md), [compaction](https://docs.pyrula.io/agents/authoring/compaction.md).
- **Integrations**: [LangChain and LangGraph](https://docs.pyrula.io/agents/integrations.md), [MCP](https://docs.pyrula.io/agents/integrations/mcp.md), [Pydantic AI](https://docs.pyrula.io/agents/integrations/pydantic-ai.md).
- **Serving**: [HTTP](https://docs.pyrula.io/agents/serving/http.md), [client](https://docs.pyrula.io/agents/serving/client.md), [workers](https://docs.pyrula.io/agents/serving/workers.md), [CLI](https://docs.pyrula.io/agents/serving/cli.md), [schedules](https://docs.pyrula.io/agents/serving/schedules.md), [Kafka](https://docs.pyrula.io/agents/serving/kafka.md), [auth](https://docs.pyrula.io/agents/serving/auth.md).
- **Observability**: [OpenTelemetry](https://docs.pyrula.io/agents/observability.md).
