> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pyspur.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Introduction

> PySpur is an AI agent builder in Python. AI engineers use it to build agents, execute them step-by-step and inspect past runs.

<video controls muted loop playsInline className="block dark:hidden w-full aspect-video" src="https://mintcdn.com/pyspur/4SCiHYsLqg0ChdmT/images/hero-light.mp4?fit=max&auto=format&n=4SCiHYsLqg0ChdmT&q=85&s=1c972792c52009507ddd4a7e2280e24c" data-path="images/hero-light.mp4" />

<video controls muted loop playsInline className="hidden dark:block w-full aspect-video" src="https://mintcdn.com/pyspur/4SCiHYsLqg0ChdmT/images/hero-dark.mp4?fit=max&auto=format&n=4SCiHYsLqg0ChdmT&q=85&s=282a25824f876e8a671c22eec0dfb7c9" data-path="images/hero-dark.mp4" />

# Why PySpur?

## 1. Rapid Feedback Loops

* **Build and test in one place**: Run the workflow, observe each node's outputs, and iterate.
* **Drag-and-drop**: Add new nodes that *just* work off-the-shelf within seconds.
* **Vendor unification**: Instead of 20 nodes for 20 vendors, unified nodes enable you to jump between eg. models quickly to see which one is best for your use case.

## 2. AI-Native

Unlike traditional workflow platforms, PySpur is AI-Native and comes with batteries included.

* **RAG**: Parse, chunk, embed, upsert data and maintain vector indices.
* **Loops**: Workflow graphs can include cycles for iterative tool calling.
* **Evals**: Score the performance of your agents to improve their robustness.
* **Tools**: >10 Popular integrations available as tools, with more to come.
* **Multimodal**: Support for video, images, audio, texts, code.

## 3. Easy Extensibility

You can add custom nodes with a simple Python decorator:

```python theme={null}
@NodeRegistry.register(
    category="Integrations",
    display_name="Firecrawl Scrape",
    logo="/images/firecrawl.png"
)
class FirecrawlScrapeNode(BaseNode):
    name = "firecrawl_scrape_node"
    config_model = FirecrawlScrapeNodeConfig
    input_model = FirecrawlScrapeNodeInput
    output_model = FirecrawlScrapeNodeOutput
    category = "Firecrawl"  # This will be used by the frontend for subcategory grouping

    async def run(self, input: BaseModel) -> BaseModel:
        """
        Scrapes a URL and returns the content in markdown or structured format.
        """
        pass
```

## Next steps

The first step to documentation is setting up your editing environments.

<CardGroup cols={2}>
  <Card title="Example Walkthrough" icon="play" href="https://docs.pyspur.dev/example">
    See PySpur in action
  </Card>

  <Card title="Quickstart" icon="rocket" href="https://docs.pyspur.dev/quickstart">
    Install PySpur in under 2 minutes
  </Card>
</CardGroup>
