Agent Profiles#
A profile is a named preset for an agent. It combines:
a system prompt addition that sets the agent’s role and focus,
a tool allowlist that limits which tools are loaded, and
behavior rules such as read-only or no network access.
Use a profile to run a restricted session, or to give a subagent a clear role.
Using a profile#
Start a session with a profile, and list or inspect the available profiles:
gptme --agent-profile explorer "summarize how authentication works in this repo"
gptme-util profile list
gptme-util profile show explorer
Subagents take a profile too:
subagent("reviewer", "Review the PR diff for correctness issues", profile="verifier")
Tool restrictions are hard-enforced in the CLI (--agent-profile) and for
subagents in thread mode: only the allowed tools are loaded, so the model can’t
call the others. Behavior rules such as read_only and no_network are soft —
they’re expressed in the system prompt, not enforced at the tool level.
Built-in profiles#
Profile |
Tools |
Behavior |
Use case |
|---|---|---|---|
|
All |
The standard gptme experience |
|
|
All |
Full development capabilities |
|
|
|
Read-only, no network |
Read-only exploration of a codebase |
|
|
Read-only |
Web research without modifying local files |
|
|
Read-only, no network |
Review, test, and verify work done by other agents |
|
|
Read-only, no network |
Processing potentially untrusted content |
|
|
UI automation: structured browser interaction for web, screenshots for native apps |
|
|
|
Web browsing and testing |
Run gptme-util profile show <name> to see a profile’s full system prompt.
Profiles for subagents#
A subagent’s profile is resolved in this order:
An explicit
profile=argument (highest priority).The profile for a
role=argument, e.g.role="verify"→verifier.Auto-detection from the
agent_id, when it matches a profile name or alias (e.g."verify"→verifier).No profile: the subagent keeps the default tools.
So naming a subagent after a profile is enough to apply it:
# Desktop interaction (mouse, keyboard, screenshots)
subagent("computer-use", "Click the Submit button and screenshot the result")
# Typed delegation: verifier profile, run in a subprocess with a throwaway worktree
subagent("my-reviewer", "Check that the refactor passes all tests", role="verify")
role="verify" also sets use_subprocess=True and isolated=True by default,
so the verifier can’t accidentally modify the parent workspace; explicit
use_subprocess and isolated arguments override these defaults. The
verifier’s read_only rule remains a soft, prompt-level rule.
Custom profiles#
Define your own profiles in ~/.config/gptme/profiles/ as Markdown or TOML files.
If both define the same name, the Markdown file wins.
In a Markdown profile, YAML front matter holds the metadata and the body becomes the system prompt:
---
name: reviewer
description: Careful code reviewer
tools:
- read
- shell
behavior:
read_only: true
---
You are a careful code reviewer. Focus on correctness and test coverage.
A TOML profile uses the same fields, with system_prompt as a key:
name = "reviewer"
description = "Careful code reviewer"
system_prompt = "You are a careful code reviewer. Focus on correctness and test coverage."
tools = ["read", "shell"]
[behavior]
read_only = true
name and description are required. Omit tools to allow all tools; an
empty list allows none.