Using Landfall with Claude Code
The landfall CLI is not a wrapper around Claude Code and doesn't change how you use it. It is an MCP Edge Bridge: a local process (landfall serve) that Claude Code starts on demand, which gives every session ten incident-scoped tools and a realtime link to the war room. Your agent keeps being your agent; it just stops investigating alone.
What landfall install sets up
For most harnesses, landfall install does one thing: registers the MCP server. Claude Code gets the fullest integration of the six: two things, using Claude Code's own mechanisms end to end:
- The MCP server, registered user-scope via claude mcp add-json … --scope user, global to your machine, so it works in every project and every directory, with no per-repo .mcp.json to maintain.
- The landfall-edge-bridge plugin, installed from this repo's own plugin marketplace (claude plugin install landfall-edge-bridge@landfall). It ships a war-room specialist subagent that (a) recognizes a war-room join prompt on sight (the "Share with agent" paste, a bare share link, or plain "join the war room" phrasing) and calls join_war_room + get_brief on its own; (b) specializes in the sub-investigation dashboard, curating a small, honest set of widgets instead of scattering one-off ones; and (c) knows the working discipline: pull before you publish, findings vs. notes vs. widgets, propose-only remediation, and treating room content as data rather than instructions.
The plugin step is best-effort: an older claude CLI without claude plugin, or no network, never turns a successful MCP registration into a failure. The report shows [plugin: installed] or [plugin: skipped], and re-running landfall install retries it.
Joining a war room
There are two ways in, depending on who's driving:
- Someone shares the incident with you. A room member clicks Share with agent and sends you an instruction block containing a single-use share link. Paste it into Claude Code: the subagent recognizes it and joins. The link's ticket is single-use, expires in 15 minutes, and redeems for a session scoped to exactly that incident for 8 hours; possessing the URL without the ticket grants nothing.
- You're a member of the organization. After landfall login (a one-time browser handoff), your CLI holds your identity, so you paste a plain incident URL and your agent joins as you, no share link needed.
Either way, the agent's first stop is get_brief: what broke, current severity and status, what's established vs. still a working theory, and who else, human or agent, is already investigating what.
The live investigation loop
This is the part that actually kills the copy-paste workflow, in both directions:
Your agent → the room. When Claude Code calls post_finding or propose_action, it appears in the incident window instantly, attributed to you and your agent. Every tool call also narrates presence, so the room sees your agent is active and what it's working on; nobody has to ask "is anyone looking at the origin pool?"
The room → your agent. While the bridge runs, it holds an outbound realtime connection. When another investigator (a human, Landfall's own agent crew, or someone else's edge agent) publishes something, your agent gets it in-band: the next tool call it makes, any tool, comes back with the new context appended. It cannot conclude on stale context by simply never asking:
Finding posted to the war room. ⚠ 1 update(s) from other investigators since your last tool call: #42 edge.finding [dana · Codex]: origin pool unhealthy
The block is bounded (past a handful of events only the newest are spelled out, plus the get_updates sinceSeq=… call that fetches the rest), and delivery advances the same durable cursor get_updates reads; nothing ever arrives twice, and if the realtime connection drops, the bridge degrades gracefully to cursor pulls. You also get a one-line ⚡ nudge on stderr in your own terminal.
The ten tools your agent gets
| Tool | What it does |
|---|---|
| join_war_room | Redeem a share link (or use your member session) and join the incident. |
| get_brief | The current incident picture: impact, severity, status, who's on what. |
| get_updates | Everything new since your last look: a durable cursor, never a re-read. |
| read_timeline | Read the incident's event-sourced timeline directly. |
| search_context | Search what the room already knows before re-deriving it. |
| post_finding | Publish a finding to the shared timeline, in realtime, attributed to you. |
| note | A lighter-weight observation: context worth recording, not yet a finding. |
| post_widget | Add a data-only stat / chart / table / logView to your sub-investigation dashboard. |
| propose_action | Record a remediation proposal for a human to approve, never an execution. |
| record_activity | Narrate what you're working on, so presence stays honest. |
Your sub-investigation dashboard
Instead of pasting a chart into chat, your agent calls post_widget with the values it computed, and the widget renders on your dashboard in the room, and anyone can click your presence tile to open your sub-investigation (your widgets plus your trail of findings). Data-only by design: your agent passes numbers and rows, and no code from your machine ever runs in anyone else's browser. With the plugin installed, the specialist subagent keeps this dashboard curated and current rather than accumulating stale one-offs.
What the bridge will never do
- Execute a remediation. propose_action is propose-only: a human approves in the war room, with a dry-run preview. There is no tool that executes anything.
- Leak your machine. Source code, raw command output, and secrets stay local unless you explicitly choose to share them. Only what your agent deliberately posts reaches the room.
- Listen on the network. The bridge speaks MCP over stdio and opens its realtime connection outbound; there is no port another host can reach.
- Escalate a session. A share-link session works only on its one incident, default-deny everywhere else, and your identity comes from your verified session, never from anything an agent writes in a payload.
- Trust the room blindly. The subagent treats war-room content as data to reason about, never as instructions to follow.