# What Are the Core Components of PrimeAgent? A Deep Dive Into the Architecture

> Explore PrimeAgent's core components: LLM abstraction, TUI, coding agent, and utilities. Understand the architecture of this modular TypeScript monorepo.

- Repository: [Prime Intellect/prime-agent](https://github.com/PrimeIntellect-ai/prime-agent)
- Tags: deep-dive
- Published: 2026-08-14

---

**PrimeAgent is a modular TypeScript monorepo that combines an LLM abstraction layer, a terminal UI (TUI), a command-line coding agent, and supporting utilities for configuration, session management, and theming.**

PrimeAgent is an open-source coding assistant developed by PrimeIntellect. According to the [PrimeIntellect-ai/prime-agent](https://github.com/PrimeIntellect-ai/prime-agent) source code, the project is organized as a multi-package workspace where each component lives in its own `packages/*` folder and communicates through well-typed interfaces. This architecture enables independent testing, extension, and assembly of the system.

## AI Provider Layer (`packages/ai`)

The **AI provider layer** provides a unified wrapper around dozens of large language model providers. It handles streaming responses, tool-call parsing, usage tracking, and model discovery through a consistent API.

Key source files include:

- **[[`src/providers/openai.ts`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/src/providers/openai.ts)](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/packages/ai/src/providers/openai.ts)** — OpenAI GPT model integration
- **[[`src/providers/anthropic.ts`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/src/providers/anthropic.ts)](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/packages/ai/src/providers/anthropic.ts)** — Anthropic Claude model integration
- **[[`src/providers/google.ts`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/src/providers/google.ts)](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/packages/ai/src/providers/google.ts)** — Google Gemini model integration
- **[[`src/types.ts`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/src/types.ts)](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/packages/ai/src/types.ts)** — Central type definitions for `Api`, `Model`, and `KnownProvider`

The [`types.ts`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/types.ts) file defines the unified interface that all providers must implement, ensuring that higher-level components can swap models without code changes.

## Terminal UI (`packages/tui`)

The **terminal UI (TUI)** renders PrimeAgent's interactive console interface. It manages panes, markdown preview, image rendering, key bindings, mouse handling, undo/redo, and theme support.

Key source files include:

- **[[`src/tui.ts`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/src/tui.ts)](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/packages/tui/src/tui.ts)** — Core TUI orchestration
- **[[`src/terminal.ts`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/src/terminal.ts)](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/packages/tui/src/terminal.ts)** — Low-level terminal control
- **[[`src/components/markdown.ts`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/src/components/markdown.ts)](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/packages/tui/src/components/markdown.ts)** — Markdown rendering component
- **[[`src/theme/theme.ts`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/src/theme/theme.ts)](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/packages/tui/src/theme/theme.ts)** — Theme token management

The TUI is implemented as a component-based system where widgets like the markdown renderer and editor can be composed flexibly.

## Coding Agent CLI (`packages/coding-agent`)

The **coding agent CLI** is the main entry point for the `pi` command. It parses CLI flags, loads the system prompt, resolves models, creates sessions, wires slash commands, and drives either interactive TUI mode or one-shot "print" mode.

Key source files include:

- **[[`src/core/system-prompt.ts`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/src/core/system-prompt.ts)](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/packages/coding-agent/src/core/system-prompt.ts)** — Constructs the system prompt from project context
- **[[`src/core/model-resolver.ts`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/src/core/model-resolver.ts)](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/packages/coding-agent/src/core/model-resolver.ts)** — Model selection and validation logic
- **[[`src/modes/interactive/interactive-mode.ts`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/src/modes/interactive/interactive-mode.ts)](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/packages/coding-agent/src/modes/interactive/interactive-mode.ts)** — Interactive session event loop
- **[[`src/slash-commands.ts`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/src/slash-commands.ts)](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/packages/coding-agent/src/slash-commands.ts)** — Parses and dispatches `/model`, `/thinking`, `/theme`, and other commands

The [`model-resolver.ts`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/model-resolver.ts) file implements `resolveModel()` to determine the default model based on environment variables and available providers.

## Session Management (`packages/coding-agent/src/core`)

The **session management** component persists chat history, handles compaction, and provides the `SessionManager` API used across all execution modes.

- **[[`src/core/session-manager.ts`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/src/core/session-manager.ts)](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/packages/coding-agent/src/core/session-manager.ts)** — Loads, saves, and compacts chat sessions

Sessions are stored on disk and can be resumed across application restarts.

## Configuration and Utilities (`packages/coding-agent/src/utils`)

The **utilities layer** provides helpers for locating package assets, loading user settings, and managing the built-in tool suite.

Key source files include:

- **[[`src/utils/config.ts`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/src/utils/config.ts)](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/packages/coding-agent/src/utils/config.ts)** — Path resolution for [`README.md`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/README.md), [`CHANGELOG.md`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/CHANGELOG.md), theme directories
- **[[`src/utils/tools-manager.ts`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/src/utils/tools-manager.ts)](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/packages/coding-agent/src/utils/tools-manager.ts)** — Registry and validation for file-system tools

The [`config.ts`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/config.ts) file exposes `getReadmePath()` and related functions that the system prompt builder uses to inject project documentation.

## Theme System (`packages/coding-agent/src/modes/interactive/theme`)

The **theme system** supplies built-in themes ([`dark.json`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/dark.json), [`light.json`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/light.json)) and discovers user-defined themes under `~/.pi/agent/themes`, with hot-reloading support.

- **[[`src/modes/interactive/theme/theme.ts`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/src/modes/interactive/theme/theme.ts)](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/packages/coding-agent/src/modes/interactive/theme/theme.ts)** — Theme loading and application

Themes are JSON files that define color tokens consumed by TUI components.

## How PrimeAgent Components Work Together

The execution flow demonstrates how core components of PrimeAgent collaborate:

1. **Startup** — The `pi` CLI reads [`README.md`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/README.md) via `getReadmePath()`, builds the system prompt, and calls `resolveModel()` to select a model
2. **Model resolution** — [`model-resolver.ts`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/model-resolver.ts) queries `getAvailableModels()` from the AI layer and validates against `API_KEY_*` environment variables
3. **Session initialization** — `SessionManager` loads previous chat history and starts interactive mode
4. **User interaction** — Slash commands parsed by `expandSlashCommand()` invoke the AI provider or local tooling
5. **Rendering** — The TUI renders responses using components from `packages/tui`
6. **Tool execution** — The `allTools` registry dispatches `read`, `bash`, `edit`, and other requests

```typescript
// CLI entry flow (src/main.ts)
import { runInteractiveMode } from "./modes/interactive/interactive-mode.js";

const model = await resolveModel();      // model-resolver.ts
await runInteractiveMode({ model });     // interactive-mode.ts

```

```typescript
// Theme switching via slash command
const themeName = await promptUserForTheme();  // selector UI
await initTheme(themeName);                     // theme.ts

```

```typescript
// Tool dispatcher (src/tools/index.ts)
export const allTools = {
  read: (args) => fs.readFileSync(args.path, "utf-8"),
  bash: (args) => execSync(args.command, { encoding: "utf-8" }),
  edit: (args) => {
    const content = fs.readFileSync(args.path, "utf-8");
    fs.writeFileSync(args.path, content.replace(args.oldText, args.newText));
  }
};

```

## Summary

- **AI provider layer** (`packages/ai`) — Unified interface for 20+ LLM providers with streaming and tool-call support
- **Terminal UI** (`packages/tui`) — Component-based console interface with markdown, image, and theme rendering
- **Coding agent CLI** (`packages/coding-agent`) — Main entry point with model resolution, system prompts, and slash commands
- **Session manager** — Persistent chat history with compaction logic in [`src/core/session-manager.ts`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/src/core/session-manager.ts)
- **Configuration utilities** — Asset path resolution and tool registry in [`src/utils/config.ts`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/src/utils/config.ts) and [`tools-manager.ts`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/tools-manager.ts)
- **Theme system** — Hot-reloadable JSON themes with built-in dark/light variants

## Frequently Asked Questions

### What LLM providers does PrimeAgent support?

PrimeAgent supports OpenAI, Anthropic, Google, Azure, and numerous other providers through the unified interface in `packages/ai/src/providers/`. Each provider implements the `Api` type defined in [`src/types.ts`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/src/types.ts), enabling seamless model switching without changing upstream code.

### How does PrimeAgent handle tool execution?

Tool execution follows a registry pattern. The `allTools` object in [`src/tools/index.ts`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/src/tools/index.ts) maps tool names like `read`, `bash`, and `edit` to TypeScript functions. When the LLM emits a `tool_call` event (parsed by [`src/core/messages.ts`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/src/core/messages.ts)), the dispatcher invokes the matching function and returns results to the model context.

### Can I customize PrimeAgent's theme?

Yes. PrimeAgent ships with [`dark.json`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/dark.json) and [`light.json`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/light.json) built-in themes located in `src/modes/interactive/theme`. Users can create custom themes as JSON files in `~/.pi/agent/themes/`; the theme system hot-reloads these without restarting the application. The `/theme` slash command switches themes interactively.

### Where is the system prompt configured?

The system prompt is constructed in [`src/core/system-prompt.ts`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/src/core/system-prompt.ts), which reads project documentation including [`README.md`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/README.md) and [`CHANGELOG.md`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/CHANGELOG.md) (paths resolved via [`src/utils/config.ts`](https://github.com/PrimeIntellect-ai/prime-agent/blob/main/src/utils/config.ts)). This ensures the agent has relevant context about the codebase it operates on.