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

# Basic Custom Agent Example

Before getting started, ensure that you have:

* `python >= 3.10`. If you do not have Python 3.10, we recommend using [`pyenv`](https://github.com/pyenv/pyenv) to manage your Python versions.
* The ability to authenticate with Encord.
* [Installed the Encord Agents library](/agents-documentation/Basics/Installation).

The following example shows how to create a simple Custom Agent to change the priority of each task before moving it to the next stage of the Workflow.

<Tip>
  We also provide more detailed [Custom Agent examples](/agents-documentation/Task-Agents/Task-Agent-Examples) and [Custom Agent examples](/agents-documentation/Custom-Agents/Examples/GCP-Examples).
</Tip>

## 1. Create Encord Project

Create a [Project in Encord](/platform-documentation/GettingStarted/gettingstarted-create-project) containing the following Workflow with an [agent stage](/platform-documentation/Annotate/annotate-projects/annotate-workflows-and-templates#agent).

![Project Workflow](https://storage.googleapis.com/docs-media.encord.com/Agents/project-workflow.png)

The purple node in the Workflow is an agent node named `pre-label`. It has a single pathway called `annotate` that moves tasks to the next stage in the Workflow.

Copy the `Project ID` in the top left of the Project page.

<Tip>
  Check if your existing Project has any agent nodes by running the following command.

  <CodeGroup>
    ```shell Command theme={"dark"}
    encord-agents print agent-nodes <your_project_hash>
    ```

    ```shell Example Output theme={"dark"}
    AgentStage(title="pre-label", uuid="b9c1363c-615f-4125-ae1c-a81e19331c96")
    AgentStage(title="evaluate", uuid="28d1bcc9-6a3a-4229-8c06-b498fcaf94a0")
    ```
  </CodeGroup>
</Tip>

## 2. Define the Agent

In the directory you created for your agents, create a Python file. In this example we use `agent.py`.

Copy paste the following template in to the Python file:

```python title="agent.py" theme={"dark"}
from encord.objects import LabelRowV2
from encord_agents.tasks import Runner

runner = Runner(project_hash="<your_project_hash>")

@runner.stage(stage="pre-label")
def my_agent_logic(lr: LabelRowV2) -> str:
    # ...
    return "annotate"

if __name__ == "__main__":
    runner.run()
```

The `my_agent_logic` function takes a `LabelRowV2` instance belonging to a task currently in the `"pre-label"` agent stage. The agent then returns the name of the pathway the task should follow once completed.

We must define how this data is handled. In this example, we keep it simple by assigning priority based on the file name. If the file name contains `"london"`, it gets assigned a high priority; otherwise, it gets assigned low priority.

```python theme={"dark"}
@runner.stage(stage="pre-label")
def my_agent_logic(lr: LabelRowV2) -> str:
    lr.set_priority(priority=float("london" in lr.data_title))
    return "annotate"
```

## 3. Run the Agent

The Agent must be run in order for tasks to be moved on to the next Workflow stage.

Run the agent by executing the following command:

```shell theme={"dark"}
python agent.py
```
