Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.murmur.dev/llms.txt

Use this file to discover all available pages before exploring further.

A flight is a catalog resource that defines a directed acyclic graph of agent tasks. Each flight belongs to a workspace and can be triggered automatically by events or on a cron schedule. See the multi-agent orchestration guide for a walkthrough. Flights use a markdown content format. You author a Markdown file with YAML frontmatter (between --- 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.
A flight with zero H2 agent sections is a “zero-agent flight” — the root agent does the work directly, configured by the frontmatter persona and model fields.

Frontmatter fields

NameTypeRequiredDescription
workspacestringyesName of the workspace this flight belongs to. Events from repos in the workspace trigger the flight.
onobjectnoEvent triggers. See Triggers.
max_concurrentintnoMaximum parallel flight instances. 0 = unlimited. Default: 0.
personastringnoPersona for the root agent in zero-agent flights.
modelstringnoModel override for the root agent (e.g. claude-sonnet-4-6). Empty uses the default.
outstringnoExpected output artifact. Known values: pr, push, respond, diff, report, none. Any other value passes through to the agent verbatim.
dequeue_strategystringnoHow the agent drains queued follow-ups between turns. Values: all (default), one, five.
daemonboolnoWhen true, the agent sleeps instead of auto-terminating after idle — for long-lived message processors. Default: false.
disabledboolnoWhen true, the flight is skipped during sync. Existing schedules are deleted; new ones are not created. Default: false.
service_profilestringnoName of a service profile for agents spawned by this flight. Required when the flight has triggers or daemon: true.

Agent metadata directives

Each H2 agent section supports blockquote metadata lines (> key: value):
DirectiveTypeDescription
personastringAgent persona name.
modelstringModel override (e.g. claude-opus-4-6).
needsCSVUpstream agent slugs. All must complete before this agent starts. Starts a new branch and VM — no inherited context.
continuesstringUpstream agent slug. Sends a follow-up to the same agent on the same branch and VM. Full context preserved. Mutually exclusive with needs.
gateCSVCompletion criteria: ci, review, approve, merge.
branchstringExplicit branch name. Auto-generated if omitted.
eachstringCollection description for fanout — one agent instance per item. Mutually exclusive with continues. An each agent cannot depend on another each agent.
outstringExpected output: pr, push, respond, or freeform.

Triggers

The on: block declares event triggers. Each trigger names an event type, a list of repos (as clone URLs), and optional filters.
Event typeRepos requiredRequired filtersOptional filters
issue_openedyeslabels
pr_openedyeslabels
pr_labeledyeslabels
pushyesbranches
scheduleno (must be omitted)cron
ci_failureyescheck, branch
Trigger repos must be clone URLs that exist in the flight’s workspace. The server validates this at write time.

Proto fields

These fields appear on the stored CatalogFlight resource. When you author via markdown content, the server populates them from the parsed frontmatter and body.
NameTypeRequiredDescription
namestringyesUnique identifier within the tenant. DNS label format: [a-z][a-z0-9-]{0,62}.
contentstringServer-rendered full markdown (frontmatter + body). Read-only — regenerated on every write.
descriptionstringnoHuman-readable description shown in the dashboard. Max 1024 bytes.
workspacestringyesWorkspace name. Derived from the workspace: frontmatter field when content is provided.
pausedboolnoWhether the flight is paused. Derived from disabled: in frontmatter.
daemonboolnoWhether this is a long-running daemon flight.
triggersFlightTrigger[]noEvent triggers. Derived from the on: frontmatter block.
max_concurrentint32noMax concurrent instances. 0 = unlimited.
personastringnoRoot agent persona for zero-agent flights.
modelstringnoModel override for the root agent.
expected_outputstringnoExpected output: pr, push, respond, diff, report, none, or freeform.
promptstringnoThe flight document body (markdown after frontmatter). Contains the agent instructions.
dequeue_strategyenumnoFollow-up dequeue strategy: all (default), one, or five.
service_profilestringnoService profile for agents spawned by this flight.
You can write a flight either by piping markdown content (with frontmatter) or by setting structured fields directly. The two approaches are mutually exclusive — if content is provided, structured fields other than name must be empty.

Examples

Event-triggered flight with multiple agents

---
workspace: backend-team
service_profile: ci-bot
on:
  issue_opened:
    repos: [https://github.com/acme-corp/api]
    labels: [bug]
max_concurrent: 3
---

# Bug Fixer

## triage

> persona: architect
> out: respond

Analyze the bug report. Determine the root cause and outline a fix.

## implement

> needs: triage
> out: pr
> gate: ci

Implement the fix described in the triage phase. Open a pull request.
murmur set flight bug-fixer < bug-fixer.md

Zero-agent scheduled flight

---
workspace: platform
service_profile: nightly-bot
persona: programmer
model: claude-sonnet-4-6
out: pr
on:
  schedule:
    cron: "0 9 * * 1-5"
---

# Dependency Updates

Check for outdated dependencies and open a PR with version bumps.
murmur set flight dep-updates < dep-updates.md

CI failure flight

---
workspace: backend-team
service_profile: ci-bot
on:
  ci_failure:
    repos: [https://github.com/acme-corp/api]
    check: [TestSuite]
    branch: [main]
---

# CI Fix

## diagnose

> persona: programmer
> out: respond

Read the CI failure logs and identify the failing test and root cause.

## fix

> needs: diagnose
> out: pr
> gate: ci

Fix the failing test based on the diagnosis.

Fanout flight

---
workspace: backend-team
service_profile: ci-bot
---

# Fix All Failing Packages

## fix-package

> each: every Go package that has failing tests
> out: pr
> gate: ci

Fix the failing tests in this package: {}

Listing flights

murmur get flight
NAME          WORKSPACE      PAUSED  TRIGGERS
bug-fixer     backend-team   false   issue_opened
dep-updates   platform       false   schedule
ci-fix        backend-team   false   ci_failure

Reading a single flight

murmur get flight bug-fixer

Errors

CodeMeaningWhat to do
INVALID_ARGUMENTname is requiredProvide a name for the flight.
INVALID_ARGUMENTname must match [a-z][a-z0-9-]{0,62}Use a DNS-label-format name: lowercase letters, digits, and hyphens.
INVALID_ARGUMENTdescription exceeds 1024 byte limitShorten the description field.
INVALID_ARGUMENTcontent and structured fields are mutually exclusiveProvide either markdown content or structured fields — not both.
INVALID_ARGUMENTparse flight content: <detail>The markdown content failed to parse. Check frontmatter syntax and agent metadata.
INVALID_ARGUMENTflight content missing required 'workspace:' in frontmatterAdd a workspace: field to the YAML frontmatter.
INVALID_ARGUMENTeither content or structured fields (with workspace) are requiredProvide markdown content or set the workspace field.
INVALID_ARGUMENTworkspace "<name>" does not existThe referenced workspace does not exist. Create it first.
INVALID_ARGUMENTtrigger <N>: unknown event type <value>Use a valid event type: issue_opened, pr_opened, pr_labeled, push, schedule, ci_failure.
INVALID_ARGUMENTtrigger <N>: event trigger requires reposNon-schedule triggers must include a repos field with at least one clone URL.
INVALID_ARGUMENTtrigger <N>: schedule trigger must not have reposSchedule triggers are time-based. Remove the repos field.
INVALID_ARGUMENTtrigger <N>: invalid repo "<url>": <detail>The repo clone URL is malformed. Use a full clone URL (e.g. https://github.com/org/repo).
INVALID_ARGUMENTtrigger <N>: ci_failure trigger requires a 'check' filterAdd a check filter listing the CI check names to match.
INVALID_ARGUMENTtrigger <N>: ci_failure trigger requires a 'branch' filterAdd a branch filter listing the branches to match.
INVALID_ARGUMENTtrigger <N>: schedule trigger requires a 'cron' filterAdd a cron filter with a cron expression (e.g. "0 9 * * 1-5").
INVALID_ARGUMENTtrigger <N>: repo "<url>" is not in workspace "<name>"The trigger references a repo that is not in the flight’s workspace. Add the repo to the workspace or remove it from the trigger.
INVALID_ARGUMENTservice_profile is required for triggered or daemon flightsFlights with triggers or daemon: true must set service_profile.
INVALID_ARGUMENTservice_profile "<name>" does not existThe referenced service profile does not exist. Create it first.
INVALID_ARGUMENTunknown dequeue_strategy "<value>" (valid: all, one, five)Use all, one, or five for the dequeue_strategy field.
INVALID_ARGUMENTinvalid max_concurrent valuemax_concurrent must be a non-negative integer.
INVALID_ARGUMENTmax_concurrent must be non-negativemax_concurrent cannot be negative. Use 0 for unlimited.
INVALID_ARGUMENTflight has no H1 headingThe markdown body must start with an H1 heading (# Flight Name).
INVALID_ARGUMENTmultiple H1 headingsOnly one H1 heading is allowed per flight.
INVALID_ARGUMENTduplicate agent slug "<slug>"Each H2 agent section must have a unique name.
INVALID_ARGUMENTagent "<slug>" has both continues and needs (mutually exclusive)An agent can use needs or continues, not both.
INVALID_ARGUMENTagent "<slug>" has both each and continues (mutually exclusive)An each agent cannot also use continues.
INVALID_ARGUMENTagent "<slug>" continues unknown agent "<slug>"The continues target does not exist as an H2 section in this flight.
INVALID_ARGUMENTagents "<a>" and "<b>" both continue "<c>" (continues is 1:1)Only one agent can continue a given upstream agent.
INVALID_ARGUMENTagent "<slug>" needs unknown agent "<slug>"A needs dependency references an agent that does not exist in this flight.
INVALID_ARGUMENTagent "<slug>" needs each agent "<slug>" (nested each not supported)An each agent cannot depend on another each agent.
INVALID_ARGUMENTdependency cycle detectedThe agent dependency graph contains a cycle. Restructure the needs relationships.
FAILED_PRECONDITIONcannot remove repo from workspace: flight trigger references itA flight trigger references a repo you are trying to remove from the workspace. Update or delete the flight first.