# Where to Find the Definition of Agents in Palmier Pro: Complete File Guide

> Discover where to find the definition of agents in Palmier Pro. Explore the Agent directory, AgentService.swift, AgentClientTypes.swift, and SwiftUI components.

- Repository: [Palmier/palmier-pro](https://github.com/palmier-io/palmier-pro)
- Tags: api-reference
- Published: 2026-06-30

---

**The definition of agents in Palmier Pro is located in the `Sources/PalmierPro/Agent` directory, with core orchestration logic in [`AgentService.swift`](https://github.com/palmier-io/palmier-pro/blob/main/AgentService.swift), client protocols in [`AgentClientTypes.swift`](https://github.com/palmier-io/palmier-pro/blob/main/AgentClientTypes.swift), and SwiftUI components in the `Panel` subdirectory.**

The Palmier Pro repository implements AI agent functionality through a modular Swift architecture centered on chat session management. Understanding the **definition of agents in Palmier Pro** requires examining three distinct layers: the service orchestration layer, the network client abstraction layer, and the user interface layer.

## Core Agent Service and Domain Model

### AgentService.swift Implementation

The primary **definition of agents** lives in [`Sources/PalmierPro/Agent/AgentService.swift`](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Agent/AgentService.swift). This file contains the `AgentService` class, which serves as the main orchestrator for AI chat sessions. According to the Palmier Pro source code, this class manages API keys, model selection, streaming state, and provides essential methods including `send(text:mentions:)`, `newChat()`, and `selectSession(_:)`.

The service maintains the current draft text and mentions, exposing them through the `draft` and `mentions` properties. It also handles tool execution resolution and response streaming from LLM backends.

### Message Schema and Data Types

Within the same file, several supporting types define the data exchanged with the LLM:

- **`AgentMessage`**: A `Codable` representation of chat messages containing user or assistant content with an array of `AgentContentBlock`
- **`AgentContentBlock`**: An enum describing three payload types: plain text, tool-use calls, and tool-result blocks
- **`AgentMention`** and **`AgentMentionContext`**: Helper structs for embedding media, clip, or timeline-range references inside a draft

### Tool Definitions and System Prompts

Server-side system prompts and skill definitions used during streaming are located in [`Sources/PalmierPro/Agent/Tools/AgentInstructions.swift`](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Agent/Tools/AgentInstructions.swift). This file contains the structured instructions sent to the LLM to define available capabilities and response formatting.

## Client Protocol and Backend Implementations

### AgentClientTypes.swift Protocol Definition

The client abstraction is defined in [`Sources/PalmierPro/Agent/Clients/AgentClientTypes.swift`](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Agent/Clients/AgentClientTypes.swift). This file declares the `AgentClient` protocol that any backend implementation must adopt to handle authentication, request formatting, and streaming responses.

### Concrete Client Implementations

Two implementations satisfy this protocol:

- **`AnthropicClient`**: Communicates directly with the Anthropic API when users provide personal API keys
- **`PalmierClient`**: Routes calls through the Palmier Pro account service when users are authenticated through the platform

The `AgentService` determines which client to instantiate based on the user's authentication state and API key availability, checking `availableModels` to determine which LLM variants are accessible.

## User Interface Layer

### Panel Views and Input Handling

The UI components that render the agent chat interface reside in `Sources/PalmierPro/Agent/Panel/`:

- **[`AgentPanelView.swift`](https://github.com/palmier-io/palmier-pro/blob/main/AgentPanelView.swift)**: The main container view hosting the chat interface, bound to an `AgentService` instance
- **[`AgentMessageView.swift`](https://github.com/palmier-io/palmier-pro/blob/main/AgentMessageView.swift)**: Renders individual messages including text content and tool results
- **[`AgentInputBox.swift`](https://github.com/palmier-io/palmier-pro/blob/main/AgentInputBox.swift)**: Handles text composition and "@mention" token insertion for referencing media elements

These SwiftUI views bind to the `AgentService` instance exposed by the editor's view model, creating a reactive interface that updates as streaming responses arrive.

## Working with AgentService Code Examples

Creating and configuring an agent instance:

```swift
let agent = AgentService()
agent.editor = someEditorViewModel
agent.send(text: "Summarize the selected clip.", mentions: [])

```

Inspecting draft content and mentions:

```swift
print(agent.draft)          // Current text the user is typing
print(agent.mentions)       // Array of AgentMention objects

```

Configuring the LLM model:

```swift
agent.model = .sonnet46
print(agent.availableModels) // Shows usable models based on auth state

```

Integrating the UI panel into a SwiftUI view hierarchy:

```swift
AgentPanelView(agentService: agent)

```

## Summary

- The **definition of agents in Palmier Pro** centers on [`AgentService.swift`](https://github.com/palmier-io/palmier-pro/blob/main/AgentService.swift) in `Sources/PalmierPro/Agent/`
- **`AgentService`** manages chat sessions, streaming responses, and tool execution lifecycle
- **[`AgentClientTypes.swift`](https://github.com/palmier-io/palmier-pro/blob/main/AgentClientTypes.swift)** defines the protocol for backend clients with `AnthropicClient` and `PalmierClient` implementations
- Message schemas (`AgentMessage`, `AgentContentBlock`) codify LLM interactions within the service file
- UI components in `Agent/Panel/` provide the complete SwiftUI chat interface
- The architecture cleanly separates domain logic, network abstraction, and presentation concerns

## Frequently Asked Questions

### What is the main file that defines the agent service in Palmier Pro?

The main file is [`Sources/PalmierPro/Agent/AgentService.swift`](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Agent/AgentService.swift), which contains the `AgentService` class that orchestrates AI chat sessions, manages streaming responses, and handles tool resolution and session management.

### How does Palmier Pro handle different AI backend providers?

Palmier Pro uses the `AgentClient` protocol defined in [`Sources/PalmierPro/Agent/Clients/AgentClientTypes.swift`](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Agent/Clients/AgentClientTypes.swift) to abstract backend implementations. Two concrete classes, `AnthropicClient` for direct API access and `PalmierClient` for authenticated service routing, handle the actual network communication.

### Where are the agent message types defined in the Palmier Pro source code?

The message types are defined within [`Sources/PalmierPro/Agent/AgentService.swift`](https://github.com/palmier-io/palmier-pro/blob/main/Sources/PalmierPro/Agent/AgentService.swift). This includes `AgentMessage` for chat content, `AgentContentBlock` for payload variants (text, tool-use, tool-result), and `AgentMention` for media references.

### Which files contain the SwiftUI views for the agent chat interface?

The SwiftUI views are located in `Sources/PalmierPro/Agent/Panel/`, specifically [`AgentPanelView.swift`](https://github.com/palmier-io/palmier-pro/blob/main/AgentPanelView.swift) (main container), [`AgentMessageView.swift`](https://github.com/palmier-io/palmier-pro/blob/main/AgentMessageView.swift) (message rendering), and [`AgentInputBox.swift`](https://github.com/palmier-io/palmier-pro/blob/main/AgentInputBox.swift) (text input with mention support).