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

# Quickstart

> Build and run your first AI voice agent in under 5 minutes

<iframe className="w-full aspect-video rounded-xl" src="https://www.youtube.com/embed/ZDwU-_17Ld4" title="Vision Agents Quickstart" frameBorder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowFullScreen />

You'll build a real-time voice agent you can talk to in your browser, using [Gemini Realtime](https://ai.google.dev/gemini-api/docs/live) on [Stream's](https://getstream.io/video/) edge network. About 18 lines of Python.

New to Vision Agents? Read the [Overview](/introduction/overview) first.

<Prompt description="Copy this prompt into Claude Code, Cursor, Windsurf, or any coding agent to scaffold your project." actions={["copy", "cursor"]}>
  {`Create a Python project for a Vision Agents voice assistant using uv and Python 3.12.

    Steps:

    1. Scaffold: uvx vision-agents init my-agent && cd my-agent
    2. Copy .env.example to .env and fill in: STREAM_API_KEY, STREAM_API_SECRET (from getstream.io), GOOGLE_API_KEY (from aistudio.google.com)
    3. Review and customize agent.py (already created by init):

    from dotenv import load_dotenv
    from vision_agents.core import Agent, Runner, User
    from vision_agents.core.agents import AgentLauncher
    from vision_agents.plugins import getstream, gemini

    load_dotenv()

    INSTRUCTIONS = (
    "You're a helpful voice AI assistant. "
    "Keep responses short and conversational."
    )

    async def create_agent(\*\*kwargs) -> Agent:
    return Agent(
    edge=getstream.Edge(),
    agent_user=User(name="My AI assistant", id="agent"),
    instructions=INSTRUCTIONS,
    llm=gemini.Realtime(),
    )

    async def join_call(agent: Agent, call_type: str, call_id: str, \*\*kwargs) -> None:
    call = await agent.create_call(call_type, call_id)
    async with agent.join(call):
    await agent.simple_response(text="Say hi and introduce yourself.")
    await agent.finish()

    runner = Runner(AgentLauncher(create_agent=create_agent, join_call=join_call))

    if **name** == "**main**":
    runner.cli()

    4. Run with: uv run agent.py run

    Reference docs: https://visionagents.ai
    MCP server: https://visionagents.ai/mcp
    Skill.md: https://visionagents.ai/skill.md`}
</Prompt>

## Build your agent

<Info>
  Install **[uv](https://docs.astral.sh/uv/getting-started/installation/)**
  first; it includes `uvx`. The `init` command runs `uv sync` to provision your
  virtual environment, so `uv` must be on your PATH. Python 3.10–3.13 is
  supported.
</Info>

<Steps>
  <Step title="Scaffold your project" icon="folder-plus">
    One command creates a ready-to-run agent project with dependencies installed:

    ```bash theme={null}
    uvx vision-agents init my-agent && cd my-agent
    ```

    This generates `agent.py`, `pyproject.toml`, `.env.example`, `tests/`, and a `Dockerfile`, then runs `uv sync`.

    <Tip>
      Pass `--no-install` to skip `uv sync` if you only want the project files: `uvx vision-agents init my-agent --no-install`
    </Tip>
  </Step>

  <Step title="Add your API keys" icon="key">
    Get the keys you'll need:

    * Create a free **[Stream account](https://getstream.io/try-for-free/)** for `STREAM_API_KEY` and `STREAM_API_SECRET`. See [Why Stream Video RTC](/integrations/edge-transport/getstream) for what the edge transport provides.
    * Get an API key from **[Google AI Studio](https://aistudio.google.com/)** for `GOOGLE_API_KEY`.

    Copy the scaffolded template and fill in your keys. Vision Agents auto-loads these for each plugin.

    ```bash theme={null}
    cp .env.example .env
    ```

    ```bash .env theme={null}
    STREAM_API_KEY=your_stream_api_key
    STREAM_API_SECRET=your_stream_api_secret
    GOOGLE_API_KEY=your_google_api_key
    ```
  </Step>

  <Step title="Understand your agent" icon="file-code">
    Open `agent.py`. The `init` command already created this file. Walk through each section to see how the agent works, then customize as needed.

    ```python agent.py theme={null}
    from dotenv import load_dotenv
    from vision_agents.core import Agent, Runner, User
    from vision_agents.core.agents import AgentLauncher
    from vision_agents.plugins import getstream, gemini

    load_dotenv()

    INSTRUCTIONS = (
        "You're a helpful voice AI assistant. "
        "Keep responses short and conversational."
    )

    async def create_agent(**kwargs) -> Agent:
        return Agent(
            edge=getstream.Edge(),
            agent_user=User(name="My AI assistant", id="agent"),
            instructions=INSTRUCTIONS,
            llm=gemini.Realtime(),
        )

    async def join_call(agent: Agent, call_type: str, call_id: str, **kwargs) -> None:
        call = await agent.create_call(call_type, call_id)
        async with agent.join(call):
            await agent.simple_response(text="Say hi and introduce yourself.")
            await agent.finish()

    runner = Runner(AgentLauncher(create_agent=create_agent, join_call=join_call))

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

    * **`create_agent`**: builds the agent with Stream transport and Gemini Realtime.
    * **`join_call`**: creates a call, joins it, and triggers the first response.
    * **`runner`**: entry point for the CLI; `pyproject.toml` references it as `agent:runner`.
  </Step>

  <Step title="Run it" icon="play">
    Start the agent. The CLI prints a join link. Open it to talk to your agent in the browser.

    ```bash theme={null}
    uv run agent.py run
    ```

    The agent greets you as soon as you join the call. The join link is a browser demo for testing. To embed the agent in your own app, use [Stream's Video SDKs](https://getstream.io/video/sdk/) on your target platform; your client and the agent join the same call.
  </Step>
</Steps>

<Tip>
  **Core Reference** in the sidebar covers Agent, LLM, and processor APIs in
  depth. Skip it until your first agent runs, then come back when you need API
  details.
</Tip>

## Next steps

<CardGroup cols={2}>
  <Card title="Voice Agents" icon="microphone" href="/introduction/voice-agents">
    Custom STT/LLM/TTS pipelines, function calling, provider options
  </Card>

  <Card title="Video Agents" icon="video" href="/introduction/video-agents">
    VLMs, YOLO processors, real-time video analysis
  </Card>

  <Card title="Deploy to Production" icon="server" href="/guides/deploying-overview">
    Docker, Kubernetes, and monitoring
  </Card>

  <Card title="Browse Integrations" icon="plug" href="/integrations/introduction-to-integrations">
    35+ AI providers to mix and match
  </Card>
</CardGroup>
