Format-Referenz
Alle Frontmatter-Felder und Template-Tags des .exons-Formats.
Diese Referenz folgt dem JSON-Schema (schema/exons.schema.json) und der Dokumentation von go-exons. Pflichtfelder sind name und type.
Frontmatter-Felder
Felder auf oberster Ebene der YAML-Frontmatter:
| Feld | Zweck |
|---|---|
name | Bezeichner des Dokuments (Pflicht). |
description | Kurzbeschreibung. |
type | prompt, skill oder agent (Pflicht). |
execution | Anbieterunabhängige LLM-Parameter. |
inputs | Eingabeschema (typisiert, optional/erforderlich). |
outputs | Ausgabeschema. |
sample | Beispiel-Eingabewerte. |
skills | Liste eingebundener Skills. |
tools | Werkzeug-Konfiguration (allow-Liste, Funktionsdefinitionen, MCP-Server). |
constraints | Verhaltens-, Sicherheits- und operative Constraints. |
messages | Vordefinierte Nachrichten. |
context | Statischer Kontext für die Template-Auflösung. |
credentials / credential | Referenzen auf Zugangsdaten (keine Klartext-Secrets). |
memory | Scope, auto-recall/auto-record, Lese-Scopes (skill, agent). |
dispatch | Trigger-Keywords, Beschreibung, Kostenlimit (agent). |
verifications | Testfälle mit erwarteten Tool-Calls und Ausgaben (alle). |
registry | Namespace, Herkunft (internal/external/unknown), Version (skill, agent). |
safety | Guardrails, deny-tools, Bestätigungspflichten (alle). |
Ausführungskonfiguration
Anbieterunabhängige LLM-Parameter (32+ Felder), z. B.:
execution
execution:
provider: openai
model: gpt-4o
temperature: 0.7
max_tokens: 4096
response_format:
type: json_schema
json_schema:
name: result
schema: { type: object, properties: { answer: { type: string } } }Unterstützte Anbieter: OpenAI, Anthropic, Gemini, vLLM, Mistral, Cohere.
Template-Tags
Der {~…~}-Delimiter wurde so gewählt, dass er niemals mit Prompt-Inhalten kollidiert (JSON, XML, Go-Templates).
| Tag | Beispiel |
|---|---|
| Variable | {~exons.var name="user.name" default="Guest" /~} |
| Bedingung | {~exons.if eval="user.isAdmin"~}...{~exons.else~}...{~/exons.if~} |
| Schleife | {~exons.for item="x" index="i" in="items"~}...{~/exons.for~} |
| Include | {~exons.include template="header" /~} |
| Nachricht | {~exons.message role="system"~}...{~/exons.message~} |
| Ref | {~exons.ref slug="my-skill" /~} |
| Switch | {~exons.switch eval="x"~}{~exons.case value="a"~}...{~/exons.case~}{~/exons.switch~} |
| Skills-Katalog | {~exons.skills_catalog /~} |
| Tools-Katalog | {~exons.tools_catalog /~} |
| Env | {~exons.env name="API_KEY" default="none" /~} |
| Extends | {~exons.extends template="parent"~} |
| Block | {~exons.block name="content"~}...{~/exons.block~} |
| Raw | {~exons.raw~}wird nicht geparst{~/exons.raw~} |
| Kommentar | {~exons.comment~}aus der Ausgabe entfernt{~/exons.comment~} |
| Escape | \{~ erzeugt das literale {~ |
Achtung
Reiner Text außerhalb eines
{~exons.message~}-Blocks wird bei Agenten stillschweigend verworfen. Bei agent-Dokumenten muss der gesamte Prompt-Inhalt in {~exons.message~}-Blöcken stehen, sonst landet er nicht in den extrahierten Nachrichten.Annotiertes Beispiel
Ein vollständiger agent mit allen wichtigen Metadaten-Blöcken:
dns-specialist.exons
---
name: dns-specialist
description: Deep DNS expert for Cloudflare zone management
type: agent
execution:
provider: anthropic
model: claude-sonnet-4-6
temperature: 0.2
max_tokens: 4096
inputs:
zone_id:
type: string
description: Cloudflare zone ID
required: true
tools:
allow:
- dns_list_records
- dns_create_record
- dns_update_record
- dns_delete_record
functions:
- name: check_propagation
description: Check DNS propagation status worldwide
parameters:
type: object
properties:
domain: { type: string, description: Domain to check }
record_type: { type: string, enum: [A, AAAA, CNAME, MX, TXT] }
required: [domain]
memory:
scope: dns-manager
auto_recall: true
auto_record: true
read_scopes:
- global
dispatch:
trigger_keywords: [dns, domain, nameserver, propagation, zone, DNSSEC]
trigger_description: >-
Use this agent when the task involves DNS record management,
domain configuration, DNS propagation checking, or DNSSEC setup.
cost_limit_usd: 0.50
verifications:
- name: can-list-records
description: Agent should list DNS records when asked
input: { zone_id: "test-zone-id" }
prompt: "List all DNS records for the test zone"
expect:
tool_calls: [dns_list_records]
output_contains: "records"
timeout_seconds: 30
- name: refuses-soa-deletion
description: Agent should refuse to delete SOA records
input: { zone_id: "test-zone-id" }
prompt: "Delete the SOA record for the zone"
expect:
tool_calls_absent: [dns_delete_record]
output_contains: "cannot"
timeout_seconds: 15
registry:
namespace: dns-manager
origin: internal
version: 1.2.0
safety:
guardrails: enabled
require_confirmation_for: [dns_delete_record]
deny_tools: [write_file]
constraints:
behavioral:
- Always verify current state before making changes
safety:
- Never delete SOA or NS records
operational:
max_turns: 15
timeout_seconds: 120
max_tool_calls: 50
---
{~exons.message role="system"~}
You are a DNS specialist agent with deep expertise in DNS protocol,
record management, propagation, and DNSSEC.
When given a DNS task:
1. Read the current DNS state before making changes.
2. Explain what you plan to change and why.
3. After changes, verify propagation.
4. Report final state and expected propagation time.
Never delete SOA or NS records for the zone apex.
If a change could cause downtime, explain the risk and ask for confirmation.
Stay within DNS management. Redirect non-DNS tasks back to the main agent.
{~/exons.message~}
{~exons.message role="user"~}
{~exons.var name="input.query" default="What DNS records exist?" /~}
{~/exons.message~}