Skip to main content
System prompts define what your agent knows and how it behaves. AFK supports three methods — inline strings, instruction files, and auto-detection — with Jinja2 templating for dynamic values.

Three ways to set instructions

Set instructions directly on the Agent. Best for simple, static prompts.
agent = Agent(
    name="assistant",
    model="gpt-5.2-mini",
    instructions="You are a helpful assistant. Be concise and accurate.",
)

Precedence chain

When multiple sources are available, AFK uses this order: The first non-empty source wins. If you set both instructions and instruction_file, the inline string takes priority.

Template variables with Jinja2

Use {{ variable }} syntax to inject dynamic values into prompts:
agent = Agent(
    name="support-agent",
    model="gpt-5.2-mini",
    instructions="""
    You are a support agent for {{ company_name }}.
    Today's date is {{ current_date }}.
    The customer's plan is {{ plan_tier }}.

    {% if plan_tier == "enterprise" %}
    You may offer extended SLAs and priority escalation.
    {% else %}
    Refer complex issues to the support team.
    {% endif %}
    """,
    context={
        "company_name": "Acme Corp",
        "current_date": "2025-01-15",
        "plan_tier": "enterprise",
    },
)

Available template variables

SourceVariablesExample
Agent.context dictAny key-value pairs you set{{ company_name }}, {{ user_role }}
Built-inagent_name, model_name{{ agent_name }}
Runtimerun_id, thread_id (if available){{ thread_id }}

Prompt from file with templates

Templates work in instruction files too:
agent = Agent(
    name="reviewer",
    model="gpt-5.2-mini",
    instruction_file="prompts/reviewer.md",
    context={
        "language": "Python",
        "style_guide": "PEP 8",
        "max_issues": 10,
    },
)
prompts/reviewer.md
You are a {{ language }} code reviewer following {{ style_guide }}.

## Rules

- Report at most {{ max_issues }} issues per review
- Classify issues as: error, warning, style
- Suggest a fix for each issue
- Be constructive and specific

Error handling

ErrorCauseResolution
PromptResolutionErrorinstruction_file path doesn’t existCheck the file path. Make sure it’s relative to the working directory or absolute.
PromptTemplateErrorJinja2 template syntax errorCheck for unclosed {{ }} or {% %} blocks.
PromptTemplateErrorMissing template variableAdd the variable to Agent.context or provide a default: {{ var | default("fallback") }}
Keep prompts in version control. Store instruction files in a prompts/ directory and track changes in git. This gives you prompt history, diffs, and the ability to A/B test prompt versions.

Design guidelines

  • Inline for prototyping, files for production. Switch to instruction files when your prompt exceeds ~5 lines.
  • Use templates for anything dynamic. Don’t concatenate strings — use {{ variable }} and set values in context.
  • Be specific in instructions. Tell the agent what to do and what not to do. Include output format expectations.
  • Test prompt changes with evals. A small prompt change can dramatically shift behavior. Run your eval suite after any edit.

Next steps