How to Customize Prompt Engineering in PrimeAgent: A Complete Guide to System Prompts and Overrides
You can customize PrimeAgent's prompt engineering through three override mechanisms—environment variables, config files, or CLI flags—or by modifying the core prompt builder functions buildSystemPrompt() and buildRlmPrompt() directly.
PrimeAgent constructs its LLM prompts through a streamlined pipeline in the coding-agent package. Understanding this architecture lets you inject custom instructions, modify tool descriptions, or reshape the AI's behavior without diving deep into the codebase. This guide walks you through the exact files and methods that control prompt generation.
How PrimeAgent Builds System Prompts
The prompt engineering pipeline follows a two-phase structure: static base construction and dynamic context merging.
Core Prompt Builder Functions
At the heart of the system sits packages/coding-agent/src/core/system-prompt.ts. This file exports two primary functions:
buildSystemPrompt()– Assembles the static foundation describing PrimeAgent's capabilities, safety rules, and default utilities.buildRlmPrompt()– Extends the base prompt with RLM (Remote Language Model) specific context, including session resources and active tools.
Both functions are publicly exposed through packages/coding-agent/src/core/index.ts for consumption by other packages.
Prompt Component Sources
The builder pulls from several upstream modules:
| Source | Path | Purpose |
|---|---|---|
| Reusable snippets | src/core/prompts/index.ts |
Tool descriptions, environment summaries, safety guidelines |
| Model defaults | src/core/model-resolver.ts |
Default model names per provider for prompt metadata |
| Session resources | src/core/session-resources.ts |
Loaded skills, active tools, user messages |
The final assembled string routes through packages/ai/src/stream.ts to the provider's streaming interface.
Three Methods to Override Prompts Without Code Changes
PrimeAgent provides built-in override mechanisms for rapid experimentation. These apply through packages/coding-agent/src/core/prompt-overrides.ts before the prompt reaches the LLM.
1. Environment Variable: PRIME_AGENT_PROMPT_OVERRIDES
Set a JSON string mapping prompt sections to custom text. This method persists for your shell session.
export PRIME_AGENT_PROMPT_OVERRIDES='{
"system": "You are a helpful assistant that always speaks in rhymes.",
"tools": "You may use the following tools: image, bash, websearch."
}'
prime-agent
Valid section keys include "system", "tools", and any other segment defined in the prompt builder's output structure.
2. Persistent Config File: .prime-agent/config.json
For permanent customizations, create a configuration file in your home directory:
{
"promptOverrides": {
"system": "You are a security-focused AI; never reveal secrets.",
"tools": "Available tools: websearch only."
}
}
PrimeAgent automatically discovers and loads this file on startup. The structure mirrors the environment variable format but lives in ~/.prime-agent/config.json.
3. CLI Flag: --prompt-override
For one-off sessions, pass overrides directly on the command line. This takes highest precedence over environment variables and config files.
prime-agent --prompt-override system="You are an expert Python tutor."
Multiple overrides require multiple flags:
prime-agent \
--prompt-override system="Be extremely concise." \
--prompt-override tools="Tools: bash, file-read"
Programmatic Customization via Source Code
When built-in overrides prove insufficient, modify the prompt pipeline directly.
Direct Function Calls
Import and invoke the override setter from another Node.js script:
import { setPromptOverride } from 'prime-agent/coding-agent/src/core/prompt-overrides';
setPromptOverride('system', 'You are a concise assistant; keep replies under 100 words.');
// Subsequent sessions use the overridden prompt
await primeAgent.start();
Extending the Core Prompt Builder
For structural changes—adding new sections, reordering components, or implementing conditional logic—edit packages/coding-agent/src/core/system-prompt.ts. The modular architecture supports clean extensions:
- Add new prompt fragments to
src/core/prompts/index.ts - Reference them in
buildSystemPrompt()orbuildRlmPrompt() - Export any new public methods through
src/core/index.ts
The prompt builds once per session, so changes apply only to new sessions without affecting running instances.
Key File Reference
| Component | Path |
|---|---|
| Core prompt builder | packages/coding-agent/src/core/system-prompt.ts |
| Override processor | packages/coding-agent/src/core/prompt-overrides.ts |
| Reusable fragments | packages/coding-agent/src/core/prompts/index.ts |
| Session data collector | packages/coding-agent/src/core/session-resources.ts |
| Model metadata | packages/coding-agent/src/core/model-resolver.ts |
| Public API exports | packages/coding-agent/src/core/index.ts |
| Provider streaming | packages/ai/src/stream.ts |
Summary
- Use environment variables for temporary, shell-session overrides via
PRIME_AGENT_PROMPT_OVERRIDES. - Use config files for permanent customizations in
~/.prime-agent/config.json. - Use CLI flags for highest-priority, one-time adjustments with
--prompt-override. - Modify source code when you need structural changes to the prompt architecture—the relevant files live in
packages/coding-agent/src/core/. - All overrides resolve through
prompt-overrides.tsbefore the final prompt reaches the LLM streaming interface.
Frequently Asked Questions
What is the RLM mode in PrimeAgent?
RLM stands for Remote Language Model mode. According to the PrimeAgent source code, buildRlmPrompt() constructs prompts specifically for this mode by injecting dynamic session context—including loaded skills, active tools, and user-provided messages—into the base system prompt. This differs from buildSystemPrompt(), which creates a static foundation without runtime session data.
Can I override only specific tools in the prompt?
Yes. The tools section key in any override mechanism accepts arbitrary text. While PrimeAgent auto-generates tool listings from session-resources.ts, you can completely replace this output by setting "tools": "Your custom description" in your config file, environment variable, or CLI flag. The override processor in prompt-overrides.ts substitutes your text before the prompt reaches the LLM.
Do prompt overrides affect all running sessions?
No. PrimeAgent builds prompts once per session when a new session initializes. Changes to environment variables, config files, or programmatic overrides apply only to sessions started after the modification. Running sessions maintain their original prompt construction, making it safe to experiment without disrupting active workflows.
Where should I add new reusable prompt sections?
Add new prompt fragments to packages/coding-agent/src/core/prompts/index.ts, then import and reference them in packages/coding-agent/src/core/system-prompt.ts. This follows the established pattern for the existing tool descriptions and environment summaries. Export any new public integration methods through packages/coding-agent/src/core/index.ts to maintain clean package boundaries.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →