Not in the top 1,000 by GitHub stars
Fuenfgeld/pydantic-ai-skills
Production-ready Claude Code skills for building AI agents with Pydantic AI. Includes dependency injection, tools, validators, streaming, multi-agent orchestration, and evaluation framework patterns.
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
skills/pydantic-ai-agents/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → baf50b57e870
No earlier version was observed for comparison.
skills/pydantic-evals/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → baf50b57e870
No earlier version was observed for comparison.
Verified commit baf50b57e8705f1e4f858d9bfffb06edcc321efe
git clone --filter=blob:none --no-checkout https://github.com/Fuenfgeld/pydantic-ai-skills.git .hotskills/fuenfgeld-pydantic-ai-skills && git -C .hotskills/fuenfgeld-pydantic-ai-skills checkout --detach baf50b57e8705f1e4f858d9bfffb06edcc321efe
# Copy each selected skill directory from .hotskills/fuenfgeld-pydantic-ai-skills into .claude/skills/<skill-name>/Heat
1.3- Star growth, last 7 daysNot available
- Star growth, last 24 hoursNot available
- Rank movement, last 7 daysNot available
- Commits, last 30 daysNot available
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekNot available
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
- pydantic-ai-agents
skills/pydantic-ai-agents - pydantic-evals
skills/pydantic-evals
How it works
pydantic-ai-agents
When your agent uses it
Build and debug Pydantic AI v2 agents using best practices for dependencies, instructions, tools, capabilities, hooks, and structured output validation. Use when the user wants to: (1) Create a new Pydantic AI agent, (2) Debug or fix an existing agent, (3) Add features like tools, validators, capabilities, hooks, or dynamic instructions, (4) Integrate OpenRouter for multi-model access, (5) Add Logfire for debugging/observability, (6) Structure agent architecture with dependency injection, (7) Migrate an agent from Pydantic AI v1 to v2.
What it loads into context
Frontmatter
140 tokensAlways available to the agent
SKILL.md
4,339 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Pydantic AI Developer Guide
Scripts executed separately
references/01_dependencies.pyreferences/02_prompts.pyreferences/03_tools.pyreferences/04_validators.pyreferences/05_main.pyreferences/06_openrouter.pyreferences/07_logfire.pyreferences/08_streaming.pyreferences/09_result_validators.pyreferences/10_model_settings.pyreferences/11_multi_agent.pyreferences/12_conversation_history.pyreferences/13_capabilities_native_tools.pyreferences/14_hooks.pyreferences/15_toolsets_mcp.py
Files
SKILL.mdcore17,474 bytesSKILL.mdcore17,474 bytesSKILL.mdcore17,474 bytesSKILL.mdcore17,474 bytesSKILL.mdcore17,474 bytesSKILL.mdcore17,474 bytesSKILL.mdcore17,474 bytesSKILL.mdcore17,474 bytesreferences/01_dependencies.pyruns1,392 bytesreferences/02_prompts.pyruns3,046 bytesreferences/03_tools.pyruns4,100 bytesreferences/04_validators.pyruns5,449 bytesreferences/05_main.pyruns8,357 bytesreferences/06_openrouter.pyruns2,842 bytesreferences/07_logfire.pyruns5,154 bytesreferences/08_streaming.pyruns3,863 bytesreferences/09_result_validators.pyruns6,416 bytesreferences/10_model_settings.pyruns5,488 bytesreferences/11_multi_agent.pyruns9,309 bytesreferences/12_conversation_history.pyruns6,051 bytesreferences/13_capabilities_native_tools.pyruns5,045 bytesreferences/14_hooks.pyruns3,574 bytesreferences/15_toolsets_mcp.pyruns3,214 bytes
Read SKILL.md
# Pydantic AI Reference Skill
**Targets Pydantic AI v2** (v2.0.0 released 2026-06-23). See the
[v1 → v2 migration notes](#10-v1--v2-migration-notes) at the end for the
breaking changes this skill's examples already incorporate.
## Pydantic AI Developer Guide
### 0. Environment Setup
Store API keys in a `.env` file and add it to `.gitignore`:
```
[Credential-related source omitted]
[Credential-related source omitted]View the complete source on GitHubpydantic-evals
When your agent uses it
Test and evaluate AI agents and LLM outputs using code-first evaluation framework with strong typing. Use when the user wants to: (1) Create evaluation datasets with test cases for AI agents, (2) Define evaluators (deterministic, LLM-as-Judge, custom, or span-based), (3) Run evaluations and generate reports, (4) Compare model performance across experiments, (5) Integrate evaluations with Pydantic AI agents, (6) Set up observability with Logfire, (7) Generate test datasets using LLMs, (8) Implement regression testing for AI systems.
What it loads into context
Frontmatter
135 tokensAlways available to the agent
SKILL.md
2,800 tokensWhen the skill is activated
Reference documents
6,349 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Overview
- Core Concepts
- Quick Start
- Evaluator Types
- Integration with Pydantic AI
- Logfire Observability
- Dataset Management
- Best Practices
- Common Workflows
- Examples
- v2 API Changes (Pydantic Evals)
- Resources
Scripts executed separately
references/examples/add_custom_evaluators.pyreferences/examples/agent.pyreferences/examples/compare_models.pyreferences/examples/custom_evaluators.pyreferences/examples/generate_dataset.pyreferences/examples/models.pyreferences/examples/unit_testing.py
Files
SKILL.mdcore11,861 bytesSKILL.mdcore11,861 bytesSKILL.mdcore11,861 bytesSKILL.mdcore11,861 bytesSKILL.mdcore11,861 bytesSKILL.mdcore11,861 bytesSKILL.mdcore11,861 bytesSKILL.mdcore11,861 bytesSKILL.mdcore11,861 bytesSKILL.mdcore11,861 bytesSKILL.mdcore11,861 bytesSKILL.mdcore11,861 bytesSKILL.mdcore11,861 bytesSKILL.mdcore11,861 bytesSKILL.mdcore11,861 bytesSKILL.mdcore11,861 bytesreferences/core-concepts.mddoc5,541 bytesreferences/evaluator-types.mddoc12,529 bytesreferences/examples/add_custom_evaluators.pyruns1,249 bytesreferences/examples/agent.pyruns2,019 bytesreferences/examples/compare_models.pyruns1,070 bytesreferences/examples/custom_evaluators.pyruns3,297 bytesreferences/examples/generate_dataset.pyruns2,621 bytesreferences/examples/models.pyruns1,776 bytesreferences/examples/unit_testing.pyruns2,286 bytesreferences/integration.mddoc9,318 bytes
Read SKILL.md
# Pydantic Evals
## Overview
Pydantic Evals provides rigorous testing and evaluation for AI agents and LLM outputs using a code-first approach with Pydantic models. It enables "Evaluation-Driven Development" (EDD) where evaluation suites live alongside application code, subject to version control and CI/CD.
## Core Concepts
Understand these key primitives:
### Case
A single test scenario with inputs, optional expected output, and metadata.
```pythonView the complete source on GitHubSkills included
- pydantic-ai-agents
- pydantic-evals
Repository facts
- License
- MIT
- Created
- Jan 20, 2026
- Last pushed
- Oct 17, 2026
- Forks
- 2
- Open issues
- 0
- Project activity
- Active
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 7, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 22 notes
skills/pydantic-ai-agents/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/pydantic-ai-agents/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/pydantic-ai-agents/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/pydantic-ai-agents/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/pydantic-ai-agents/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/pydantic-ai-agents/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/pydantic-ai-agents/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/pydantic-evals/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/pydantic-evals/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/pydantic-evals/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/pydantic-evals/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/pydantic-evals/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/pydantic-evals/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/pydantic-evals/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/pydantic-evals/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/pydantic-evals/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/pydantic-evals/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/pydantic-evals/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/pydantic-evals/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/pydantic-evals/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- No dangerous shell commands
- 35 network referencesin 8 files: pydantic-ai-agents/references/05_main.py:125 pydantic-ai-agents/references/15_toolsets_mcp.py:48 pydantic-ai-agents/SKILL.md:87 and 5 more
- No hidden or obfuscated text
- No instruction overrides
- 22 executable scriptsin 22 files: pydantic-ai-agents/references/01_dependencies.py:1 pydantic-ai-agents/references/02_prompts.py:1 pydantic-ai-agents/references/03_tools.py:1 and 19 more
- 40 references to secretsin 14 files: pydantic-ai-agents/SKILL.md:18 pydantic-ai-agents/references/05_main.py:31 pydantic-evals/references/integration.md:53 and 11 more
- No requests to vote in Hot
Show all 97 signals by file
skills/pydantic-ai-agents/SKILL.md
- Access to secretsline 18
[Credential-related source omitted] - Access to secretsline 19
[Credential-related source omitted] - Access to secretsline 20
[Credential-related source omitted] - Access to secretsline 85
[Credential-related source omitted] - Network accessline 87
- Explicit: `OpenRouterModel` + `OpenRouterProvider` - OpenRouter model ids are always vendor-prefixed (e.g. `openai/gpt-5.2`, `anthropic/claude-sonnet-4.6`) - see https://openrouter.ai/models - Network accessline 89
`anthropic/claude-sonnet-4.6`) - see https://openrouter.ai/models - Access to secretsline 97
[Credential-related source omitted] - Access to secretsline 103
[Credential-related source omitted] - Network accessline 122
#### Setup: 1. Get API key from https://logfire.pydantic.dev/ - Network accessline 123
1. Get API key from https://logfire.pydantic.dev/ - Access to secretsline 124
[Credential-related source omitted] - Access to secretsline 126
[Credential-related source omitted] - Network accessline 396
Full upgrade guide: https://ai.pydantic.dev/changelog/
skills/pydantic-ai-agents/references/01_dependencies.py
skills/pydantic-ai-agents/references/02_prompts.py
skills/pydantic-ai-agents/references/03_tools.py
- Executable scriptline 1
Executable file - Access to secretsline 18
[Credential-related source omitted] - Network accessline 48
response = await ctx.deps.http_client.get( f"https://api.example.com/users/{ctx.deps.user_id}/balance", - Network accessline 49
f"https://api.example.com/users/{ctx.deps.user_id}/balance", - Access to secretsline 50
[Credential-related source omitted] - Network accessline 83
response = await ctx.deps.http_client.post( "https://api.example.com/transactions", - Network accessline 84
"https://api.example.com/transactions", - Access to secretsline 85
[Credential-related source omitted]
skills/pydantic-ai-agents/references/04_validators.py
- Executable scriptline 1
Executable file
skills/pydantic-ai-agents/references/05_main.py
- Executable scriptline 1
Executable file - Access to secretsline 31
[Credential-related source omitted] - Access to secretsline 69
[Credential-related source omitted] - Network accessline 125
Args: ctx: Runtime context with HTTP client and auth days: Number of days of history to fetch (default: 7) - Network accessline 127
days: Number of days of history to fetch (default: 7) - Network accessline 132
response = await ctx.deps.http_client.get( f"https://api.example.com/users/{ctx.deps.user_id}/transactions", - Network accessline 133
f"https://api.example.com/users/{ctx.deps.user_id}/transactions", - Access to secretsline 134
[Credential-related source omitted] - Network accessline 155
response = await ctx.deps.http_client.get( f"https://api.example.com/users/{ctx.deps.user_id}/reputation", - Network accessline 156
f"https://api.example.com/users/{ctx.deps.user_id}/reputation", - Access to secretsline 157
[Credential-related source omitted] - Network accessline 183
async with httpx.AsyncClient() as client: - Access to secretsline 187
[Credential-related source omitted] - Network accessline 213
async with httpx.AsyncClient() as client: - Access to secretsline 214
[Credential-related source omitted]
skills/pydantic-ai-agents/references/06_openrouter.py
- Executable scriptline 1
Executable file - Access to secretsline 8
[Credential-related source omitted] - Access to secretsline 20
[Credential-related source omitted] - Network accessline 25
# ============================================================================ # With OPENROUTER_API_KEY set in the environment, just prefix the OpenRouter # model id (always '<vendor>/<model>', see https://openrouter.ai/models): - Network accessline 26
[Credential-related source omitted] - Access to secretsline 26
[Credential-related source omitted] - Network accessline 27
# model id (always '<vendor>/<model>', see https://openrouter.ai/models): - Access to secretsline 40
[Credential-related source omitted]
skills/pydantic-ai-agents/references/07_logfire.py
- Executable scriptline 1
Executable file - Network accessline 6
Prerequisites: - Set LOGFIRE_API_KEY in your .env file (get from https://logfire.pydantic.dev/) - Network accessline 7
[Credential-related source omitted] - Access to secretsline 7
[Credential-related source omitted] - Access to secretsline 21
[Credential-related source omitted] - Access to secretsline 22
[Credential-related source omitted] - Network accessline 119
print("\nCheck your Logfire dashboard at https://logfire.pydantic.dev/ to see the traces!")
skills/pydantic-ai-agents/references/08_streaming.py
skills/pydantic-ai-agents/references/09_result_validators.py
skills/pydantic-ai-agents/references/10_model_settings.py
skills/pydantic-ai-agents/references/11_multi_agent.py
skills/pydantic-ai-agents/references/12_conversation_history.py
- Executable scriptline 1
Executable file
skills/pydantic-ai-agents/references/13_capabilities_native_tools.py
- Executable scriptline 1
Executable file
skills/pydantic-ai-agents/references/14_hooks.py
- Executable scriptline 1
Executable file
skills/pydantic-ai-agents/references/15_toolsets_mcp.py
- Executable scriptline 1
Executable file - Network accessline 48
# server = MCPToolset( # command='uvx', args=['mcp-run-python', 'stdio'], # stdio transport # # or: url='http://localhost:8000/mcp' # HTTP transport - Network accessline 49
# command='uvx', args=['mcp-run-python', 'stdio'], # stdio transport # # or: url='http://localhost:8000/mcp' # HTTP transport # ) - Network accessline 50
# # or: url='http://localhost:8000/mcp' # HTTP transport - Network accessline 67
# # from pydantic_ai.capabilities import MCP # agent = Agent(..., capabilities=[MCP(url='https://mcp.example.com/mcp', native=True)]) - Network accessline 68
# from pydantic_ai.capabilities import MCP # agent = Agent(..., capabilities=[MCP(url='https://mcp.example.com/mcp', native=True)]) # - Network accessline 69
# agent = Agent(..., capabilities=[MCP(url='https://mcp.example.com/mcp', native=True)])
skills/pydantic-evals/SKILL.md
skills/pydantic-evals/references/evaluator-types.md
skills/pydantic-evals/references/examples/add_custom_evaluators.py
- Executable scriptline 1
Executable file
skills/pydantic-evals/references/examples/agent.py
skills/pydantic-evals/references/examples/compare_models.py
- Executable scriptline 1
Executable file
skills/pydantic-evals/references/examples/custom_evaluators.py
- Executable scriptline 1
Executable file
skills/pydantic-evals/references/examples/generate_dataset.py
- Executable scriptline 1
Executable file
skills/pydantic-evals/references/examples/models.py
- Executable scriptline 1
Executable file
skills/pydantic-evals/references/examples/unit_testing.py
- Executable scriptline 1
Executable file
skills/pydantic-evals/references/integration.md
- Access to secretsline 53
[Credential-related source omitted] - Network accessline 60
"""Fetch order details from API""" response = await ctx.deps.http_client.get( f"https://api.example.com/orders/{order_id}", - Network accessline 61
[Credential-related source omitted] - Network accessline 62
f"https://api.example.com/orders/{order_id}", - Access to secretsline 63
[Credential-related source omitted] - Access to secretsline 80
[Credential-related source omitted] - Access to secretsline 329
[Credential-related source omitted] - Access to secretsline 330
[Credential-related source omitted]
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Signal confidence: 97 facts
- Access to secrets in code of the SKILL.md: a variable, placeholder or call, not a stored valuepydantic-ai-agents/SKILL.md:18Low confidence
- Access to secrets in code of the SKILL.md: a variable, placeholder or call, not a stored valuepydantic-ai-agents/SKILL.md:19Low confidence
- Access to secrets in code of the SKILL.md: a variable, placeholder or call, not a stored valuepydantic-ai-agents/SKILL.md:20Low confidence
- Access to secrets in prose of the SKILL.mdpydantic-ai-agents/SKILL.md:85Low confidence
- Network access in prose of the SKILL.mdpydantic-ai-agents/SKILL.md:87Low confidence
- Network access in prose of the SKILL.mdpydantic-ai-agents/SKILL.md:89Low confidence
- Access to secrets in code of the SKILL.md: a variable, placeholder or call, not a stored valuepydantic-ai-agents/SKILL.md:97Low confidence
- Access to secrets in code of the SKILL.md: a variable, placeholder or call, not a stored valuepydantic-ai-agents/SKILL.md:103Low confidence
- Network access in prose of the SKILL.mdpydantic-ai-agents/SKILL.md:122Low confidence
- Network access in prose of the SKILL.mdpydantic-ai-agents/SKILL.md:123Low confidence
- Access to secrets in prose of the SKILL.mdpydantic-ai-agents/SKILL.md:124Low confidence
- Access to secrets in prose of the SKILL.md: a variable, placeholder or call, not a stored valuepydantic-ai-agents/SKILL.md:126Low confidence
- Network access in prose of the SKILL.mdpydantic-ai-agents/SKILL.md:396Low confidence
- Executable script in prose of a file that runspydantic-ai-agents/references/01_dependencies.py:1Low confidence
- Access to secrets in code of a file that runspydantic-ai-agents/references/01_dependencies.py:29High confidence
- Access to secrets in code of a file that runspydantic-ai-agents/references/01_dependencies.py:40High confidence
- Executable script in prose of a file that runspydantic-ai-agents/references/02_prompts.py:1Low confidence
- Access to secrets in code of a file that runspydantic-ai-agents/references/02_prompts.py:18High confidence
- Executable script in prose of a file that runspydantic-ai-agents/references/03_tools.py:1Low confidence
- Access to secrets in code of a file that runspydantic-ai-agents/references/03_tools.py:18High confidence
- Network access in code of a file that runspydantic-ai-agents/references/03_tools.py:48High confidence
- Network access in code of a file that runspydantic-ai-agents/references/03_tools.py:49High confidence
- Access to secrets in code of a file that runspydantic-ai-agents/references/03_tools.py:50High confidence
- Network access in code of a file that runspydantic-ai-agents/references/03_tools.py:83High confidence
- Network access in code of a file that runspydantic-ai-agents/references/03_tools.py:84High confidence
- Access to secrets in code of a file that runspydantic-ai-agents/references/03_tools.py:85High confidence
- Executable script in prose of a file that runspydantic-ai-agents/references/04_validators.py:1Low confidence
- Executable script in prose of a file that runspydantic-ai-agents/references/05_main.py:1Low confidence
- Access to secrets in code of a file that runspydantic-ai-agents/references/05_main.py:31High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuepydantic-ai-agents/references/05_main.py:69Low confidence
- Network access in prose of a file that runspydantic-ai-agents/references/05_main.py:125Low confidence
- Network access in prose of a file that runspydantic-ai-agents/references/05_main.py:127Low confidence
- Network access in code of a file that runspydantic-ai-agents/references/05_main.py:132High confidence
- Network access in code of a file that runspydantic-ai-agents/references/05_main.py:133High confidence
- Access to secrets in code of a file that runspydantic-ai-agents/references/05_main.py:134High confidence
- Network access in code of a file that runspydantic-ai-agents/references/05_main.py:155High confidence
- Network access in code of a file that runspydantic-ai-agents/references/05_main.py:156High confidence
- Access to secrets in code of a file that runspydantic-ai-agents/references/05_main.py:157High confidence
- Network access in code of a file that runspydantic-ai-agents/references/05_main.py:183High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuepydantic-ai-agents/references/05_main.py:187Low confidence
- Network access in code of a file that runspydantic-ai-agents/references/05_main.py:213High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuepydantic-ai-agents/references/05_main.py:214Low confidence
- Executable script in prose of a file that runspydantic-ai-agents/references/06_openrouter.py:1Low confidence
- Access to secrets in prose of a file that runspydantic-ai-agents/references/06_openrouter.py:8Low confidence
- Access to secrets in a comment of a file that runspydantic-ai-agents/references/06_openrouter.py:20Low confidence
- Network access in a comment of a file that runspydantic-ai-agents/references/06_openrouter.py:25Low confidence
- Network access in a comment of a file that runspydantic-ai-agents/references/06_openrouter.py:26Low confidence
- Access to secrets in a comment of a file that runspydantic-ai-agents/references/06_openrouter.py:26Low confidence
- Network access in a comment of a file that runspydantic-ai-agents/references/06_openrouter.py:27Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuepydantic-ai-agents/references/06_openrouter.py:40Low confidence
and 47 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Path CLAUDE.md | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md skills/pydantic-ai-agents/SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md skills/pydantic-ai-agents/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md skills/pydantic-ai-agents/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md skills/pydantic-ai-agents/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md skills/pydantic-ai-agents/SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.