Peteosdocs

Roles

You can customize any agentic object's role from the outside without changing the class code. This is useful for steering the agent toward a specific model — for example, applying an expensive model where it is needed and a cheaper one elsewhere.

Automatic Configuration

Roles are automatically loaded from the roles/ sibling directory of peteos.json on import. Each subdirectory under roles/ represents one role:

my-project/
└── roles/
    └── MyRole/
        ├── description.md     # Required
        ├── system_prompt.md   # Optional
        └── config.json        # Optional

No Python code is needed — roles are loaded and registered automatically.

Directory Structure

File Required Purpose
description.md Yes Role description — used by the agent to identify its identity.
system_prompt.md No System prompt text to customize the agent's behavior.
config.json No Optional runtime configuration — see below.

Config File Format

{
    "model": "gpt-4",
    "required_tools": ["read_file"],
    "auto_approve_tools": ["read_file"],
    "tool_filter": ["read_.*"],
    "execution_environment": "REPL",
    "behavior_policy": "responsive",
    "max_truncation_retries": 2,
    "max_output_turns": 3,
    "max_output_attempts": 3
}
Field Type Default Purpose
model string ".*" Regex matching allowed model IDs.
required_tools string[] [] Tool names available to this role.
execution_environment string "REPL" Execution environment identifier.
auto_approve_tools string[] [] Tool names auto-approved without user confirmation.
tool_filter string[] [] Regex patterns; only matching tools are visible to the role.
behavior_policy string "responsive" "responsive" yields on output; "continuous" loops until yield_back.
max_truncation_retries int 2 Max retries for token-window truncation.
max_output_turns int 3 Max output-producing turns per invoke_agent call.
max_output_attempts int 3 Max produce_output attempts per output turn.

Markdown files take precedence over config.json entries.

Manual Registration

For dynamic scenarios, you can register roles manually at runtime.

from peteos.persona.role import Role
from peteos.persona.rolemanager import RoleManager

RoleManager.register_role(Role(
    name="oap_MyAgent",
    model="gpt-4",
    description="A customized agent",
))

The role name must match the canonical role name of the agentic object class it targets. Use @agentic_object(role="...") to set a custom name on your class.

You can also load roles from an arbitrary directory:

loaded = RoleManager.load_from_dir("/path/to/roles/")