--- fences) and a body containing the agent task graph, then pipe it to murmur set flight. The server parses the content into structured fields on write.
Content format
The full flight document is a single Markdown file:- YAML frontmatter (between
---fences) declares workspace binding, event triggers, concurrency limits, and root agent configuration. - H1 heading names the flight.
- Prose between H1 and the first H2 provides pilot-level notes: instructions that apply to the entire flight.
- H2 headings define individual agent tasks. Each agent’s body is its prompt. Blockquote lines (
> key: value) set agent metadata.
persona and model fields.
Frontmatter fields
Agent metadata directives
Each H2 agent section supports blockquote metadata lines (> key: value):
Triggers
Theon: block declares event triggers. Each trigger names an event type, a list of repos (as clone URLs), and optional filters.
Trigger repos must be clone URLs that exist in the flight’s workspace. The server validates this at write time.
A
linear_delegation trigger fires when a Linear issue is delegated to the Macroscope agent. Its filters match three issue attributes: team (the issue’s team key, e.g. ENG), labels (one or more label names, all of which must be present), and project (the project name). All filters must match; a filterless trigger is a catch-all. See the Linear delegation guide.
Priority
When an event matches more than one flight, the highest-priority match wins and lower-priority matches are suppressed. 0 is the default and lowest priority, so a flight at priority: 100 beats one left at 0. This normally resolves to exactly one flight. A task_delegation request spanning several repositories is the exception. Flights with disjoint repos: lists may share a priority, so one request can match several at once. Dispatch then fails with FAILED_PRECONDITION instead of choosing arbitrarily. Give the flights distinct priorities or narrow their repos: lists to disambiguate them.
Tenant flights take precedence over built-in murmur-* flights before priority is considered. If any tenant flight matches an event, matching built-ins are shadowed and do not run. You can therefore override a built-in by writing a flight that matches the same event at any priority. Priority orders flights only within the tenant or built-in class. A tenant flight at priority: 0 still beats a matching built-in at priority: 100.
Two tenant flights may not share a priority when their triggers overlap, meaning that one event could match both. The server rejects such a write. This check does not apply to overlap with a built-in murmur-* flight because a tenant flight always shadows the built-in.
For repo-scoped event types, two triggers overlap when they share an event type, their repositories overlap, and their filters can both be satisfied. Repo-less event types, such as linear_delegation, are compared by their filters. For task_delegation, the optional repos: list also affects overlap. repos: [] matches every repository, while non-empty lists overlap only when their canonical repositories intersect. Two task_delegation flights with disjoint repository lists may therefore share a priority.
Only filters that the server treats as single-valued can make two same-priority flights disjoint. For the events described here, those keys are branch and check, and the flights must require different values. For example, a ci_failure flight on branch: main and another on branch: dev may share a priority. Every other filter is treated as multi-valued for this check, so different values do not make flights disjoint. The labels filter is multi-valued: a PR can carry both labels: [bug] and labels: [feature], so those filters overlap. Although each Linear issue has one team, linear_delegation does not treat team as disjointing, so team: ENG and team: OPS cannot share a priority. Give those flights distinct priorities instead. schedule triggers run on their own timers, outside event dispatch, so priority does not arbitrate them and they never overlap.
Proto fields
These fields appear on the storedCatalogFlight resource. When you author via markdown content, the server populates them from the parsed frontmatter and body.
You can write a flight by piping Markdown with frontmatter or by setting structured fields directly. When structured fields are present, they are the source of truth. The server ignores any
content in the request and re-renders content from the structured fields on every write. Provide content without structured fields to author the flight as Markdown.Examples
Event-triggered flight with multiple agents
Issue-labeled flight
Fires when a matching label is added to an existing issue. This example hands an issue to an agent when you add themurmur label:
Zero-agent scheduled flight
CI failure flight
Linear delegation flight
Fanout flight
Listing flights
murmur-* flight prints with a (disabled — re-enable: murmur set flight <name>) marker.
Reading a single flight
Errors
Related
- Flights: concept overview
- Multi-agent orchestration: guide for building and running flights
- Linear delegation: routing delegated Linear issues through flights
- Workspaces: the resource a flight belongs to
- Agent personas: personas referenced in flight agent sections
murmur set: CLI command for creating and updating catalog resourcesmurmur get: CLI command for reading catalog resources