Farled

PILOT BOOK — PASSAGE PLANS IN DETAIL

File before departure. Sail informed.

Radar tells you about collisions while they happen. Passage plans prevent them: before starting to code, an agent (or human) files the footprint it intends to change and gets a traffic advisory back — before any code is written. A plan is an advisory reservation, never a lock: anyone can still edit anything; they just do it informed.

The lifecycle

                ┌──────────── expires_at (24h TTL) ───────────┐
                ▼                                              │
filed ──edits inside footprint──▶ active ◀──rejoin route──┐    │
  │                                 │                     │    │
  │                          edits outside                │    │
  │                                 ▼                     │    │
  └──edits outside───────────▶ drifted ───────────────────┘    │
                                                               │
  completed  ← session closes / assignment completes /         │
  withdrawn  ← farled_complete_plan / assignment fails         │
  expired    ← TTL lapses ─────────────────────────────────────┘
StatusMeaningWho sets it
fileddeclared, no work observed yetfiling
activeobserved edits match the footprint — the plan is confirmed by realityserver, on change reports
driftedobserved edits left the footprint; a plan_drift signal is openserver, on change reports
completedwork shippedsession close, assignment completion, or farled_complete_plan
withdrawnabandonedexplicit call, or assignment failure (Cloud)
expired24h TTL lapsed — the backstop for anything that dies silentlyserver, lazily

Live status flows from three independent sources, in trust order: observed edits (reconciled on every change report), lifecycle events (session close; on Cloud, assignments reaching terminal states), and explicit calls — with the TTL as the final backstop. A dead laptop can never reserve water for more than 24 hours.

Filing a plan

At the end of the planning phase, call the MCP tool (or POST /v1/work-plans with the same body):

farled_file_plan {
  "repository_id":  "github.com/acme/app",
  "actor_id":       "my-agent",
  "intended_paths": ["src/checkout/**", "src/lib/currency.ts"],
  "summary":        "Fix checkout summary TypeError + regression test",
  "confidence":     "medium",
  "work_session_id": "<reporter session id, if one is running>"
}

Declare the narrowest footprint you honestly can — over-broad globs generate advisories against you and dilute everyone's traffic picture. Passing work_session_id links the plan to your reporter session, which enables drift reconciliation and automatic completion when the session closes.

The advisory

The response carries a deterministic recommendation — same state, same answer, no model in the loop:

RecommendationMeaningRule
clearno live plans or active edits on this footprint
sequence_afteranother live plan overlaps yoursearlier filing holds the water; the newcomer sequences after it or rescopes
coordinatea live session is already editing inside your footprintobserved work outranks declared work — talk first

Overlap rules: plan-vs-plan compares glob literal prefixes (src/checkout/** overlaps src/**; src/a/** does not overlap src/b/**) — deliberately erring toward warning. Plan-vs-observed matches your globs against real changed paths. Your own plans never conflict with you.

Drift

On every change report, the server reconciles the session's observed edits against its filed plan:

Drift never blocks anything. It flags scope creep and tells other traffic that this plan's reservation no longer describes reality.

Farled Cloud extras

Wiring agents to file plans

Add one paragraph to your repo's agent instructions (CLAUDE.md, AGENTS.md, or equivalent):

At the end of your planning phase — before writing any code — file a
passage plan with farled_file_plan declaring the paths you intend to
change, and follow its advisory. When your work ships or you abandon
it, call farled_complete_plan.

That's the entire integration. Plans are optional everywhere: unplanned work is still observed, detected, and advised exactly as before.

API summary

SurfaceCall
MCPfarled_file_plan · farled_list_plans · farled_complete_plan
HTTPPOST /v1/work-plans · GET /v1/work-plans?repository_id= · POST /v1/work-plans/{id}/status
Protocolwork_plan.schema.json (farled/v1, additive) · Signal type plan_drift