Skip to content

How Debrief v4 fits together

Debrief v4 starts with foundations rather than features. Here is the shape everything else will hang from.

flowchart LR
    subgraph host["VS Code (or the web demo)"]
        ext["Debrief extension<br/>TypeScript"]
        views["Map, outline and tool panels<br/>webviews"]
        ext <--> views
    end

    subgraph python["Per-user Python services"]
        tools["Tool service<br/>MCP over REST"]
        kernel["Kernel<br/>time, units, geodesy, formatting"]
        tools --> kernel
    end

    subgraph disk["Your filesystem"]
        cat["STAC catalogue"]
        plot["Plots: GeoJSON<br/>with provenance inside"]
        src["Imported sources<br/>never modified"]
        cat --> plot
        cat --> src
    end

    schema["One schema in LinkML<br/>generates Python and TypeScript types"]

    ext -- "loopback only,<br/>per-session token" --> tools
    agent["AI agents"] -- MCP --> tools
    tools <--> cat
    ext <--> cat
    schema -.-> ext
    schema -.-> tools

A few choices shape everything:

  • Plots are plain files. A plot is a GeoJSON FeatureCollection, catalogued with STAC and carrying its own provenance. Anyone can read it without Debrief, and access control is simply the folder's permissions.
  • Analysis lives in Python. Every operation is a Python tool served over MCP, so the same tool serves the Debrief interface, an analyst's script and an AI agent. A scientist adds a tool by writing a Python file, without rebuilding Debrief.
  • One vocabulary. Every type that crosses between Python and TypeScript is generated from a single LinkML schema, so the two sides cannot drift apart.
  • Everything is recorded. Each change to a plot is recorded so it can be replayed, which is also how undo works.
  • The web demo runs the same tools. In the browser, the Python tools run under Pyodide; nothing is sent to a server.

The first foundations are in place: the schema and its generated types, and a kernel for time, units, geodesic measurement and display formatting. Three early checks came back positive. The schema approach works end to end; the Python code runs unchanged in the browser; and asking the Python service for each Tote update takes a few milliseconds, well inside the 100 ms an analyst needs to drag the time slider smoothly.