What Moved the 10-Year? Introducing Workflows in RESERVE 1.2.0

Economic analysis rarely consists of just one data series. In graphical user interface (GUI) software, that often means the story requires more than one chart. At the command line, it usually requires more than one command.

RESERVE 1.2.0 is a foundational release that introduces workflows: portable definitions for creating, saving, inspecting, and sharing complex economic analyses.

Workflows Explained

RESERVE power users frequently pipe together commands for data retrieval, transformation, visualization, and analysis. They also understand which economic series must be examined together to explain a macroeconomic concept.

A command can retrieve the 10-year Treasury yield. Explaining why that yield moved requires considerably more context. The analyst may also need real interest rates, inflation expectations, the term premium, shorter-term Treasury yields, Federal Reserve policy, and broader indicators of inflation, employment, and economic growth.

The new workflow command family provides a way to package that knowledge. A workflow can describe:

  • the economic question being examined;
  • the FRED series required for the analysis;
  • the ordered RESERVE commands that make up the analysis;
  • any values the operator must provide;
  • the expected outputs, runtime, and network requirements; and
  • the supporting documentation and authorship.

RESERVE 1.2.0 introduces the following workflow commands:

reserve workflow create <FILE|REF>
reserve workflow list
reserve workflow show <FILE|REF>
reserve workflow edit <FILE|REF>
reserve workflow validate <FILE|REF...>
reserve workflow contract <FILE|REF>
reserve workflow render <FILE|REF> [ARGS...]
reserve workflow remove <FILE|REF>

Together, these commands support the workflow-authoring journey:

create -> edit -> validate -> inspect contract -> render

In this release, workflows are stored locally as readable YAML documents. Those documents can be shared directly, placed under source control, or organized under repository and collection namespaces.

personal/interest-rates/ten-year-treasury-drivers

The name has three parts:

personal                   repository namespace
interest-rates             collection
ten-year-treasury-drivers  workflow

Today, personal identifies a locally authored workflow. The naming model also lays the foundation for future sources such as official, community, education, and private, where institutions and other publishers could distribute trusted workflow collections.

Repository search, installation, and publishing are not part of RESERVE 1.2.0. This release establishes the local workflow model and the naming conventions that those future capabilities can build upon.

The Treasury Yield Example

Headlines over the past several weeks have been dominated by renewed volatility in longer-term Treasury yields. The 30-year Treasury yield climbed to levels not seen in nearly two decades before retreating, while the 10-year yield repeatedly moved through the upper portion of its recent range.

But observing that the 10-year Treasury yield moved does not explain why it moved.

That question requires us to examine several related forces:

  • Did real interest rates rise?
  • Did market-implied inflation expectations change?
  • Did investors demand more compensation for holding longer-duration securities?
  • Did expectations for Federal Reserve policy shift?
  • Did the shape of the Treasury yield curve change?
  • Did new inflation, labor-market, or economic-growth data alter the outlook?

This is exactly the kind of question a workflow is designed to explore.

Rather than rebuilding the analysis each time Treasury yields move, we can define the analytical method once, give it a durable name, and render it for any requested date range:

reserve workflow contract ten-year-treasury-drivers
reserve workflow render ten-year-treasury-drivers 2026-07-01 2026-08-27

The workflow remains the same. Only the period being investigated changes.

Creating the Workflow

Rather than rebuilding the analysis each time Treasury yields move, we can define the analytical method once and give it a durable name.

We will begin by creating an interest-rates collection in our personal repository with a treasury drivers workflow:

reserve workflow create personal/interest-rates/ten-year-treasury-drivers

This creates the following three-part identity:

personal repository
interest-rates collection
ten-year-treasury-drivers workflow

The personal namespace tells us that this is a locally authored workflow. In the future, the same analytical method might be published under a name such as:

official/interest-rates/ten-year-treasury-drivers

The repository name would identify its source and owner without changing how the workflow itself is used.

We can open the new definition in our configured editor:

reserve workflow edit personal/interest-rates/ten-year-treasury-drivers

For this analysis, the workflow contains six FRED series:

RoleFRED series
Nominal 10-year Treasury yieldDGS10
Real 10-year Treasury yieldDFII10
10-year breakeven inflationT10YIE
2-year Treasury yieldDGS2
10-year minus 2-year yield-curve slopeT10Y2Y
Model-estimated 10-year term premiumTHREEFYTP10

The resulting workflow definition is:

workflow:
  title: What Moved the 10-Year?
  summary: Compare market components and policy signals behind moves in the 10-year Treasury yield.

  difficulty: Intermediate
  estimated_runtime: 20 seconds

  categories:
    - interest-rates
    - treasury
    - monetary-policy

  concepts:
    - 10-Year Treasury
    - Real Yields
    - Breakeven Inflation
    - Term Premium
    - Yield Curve
    - Federal Reserve

  outputs:
    - table

  requires_network: true
  reserve_version: ">=1.2"

  author: Derick Schaefer
  documentation: README.md

  contract:
    - label: start date
      format: YYYY-MM-DD
      sample: 2026-07-01
      description: First date in the Treasury-market comparison window.
    - label: end date
      format: YYYY-MM-DD
      sample: 2026-08-27
      description: Final date in the Treasury-market comparison window.

  pipeline:
    - reserve obs get DGS10 DFII10 T10YIE DGS2 T10Y2Y THREEFYTP10 --start @1 --end @2 --format jsonl --quiet
    - reserve analyze summary --by-series

Each item under pipeline represents one command stage. When rendered, RESERVE joins those stages with the pipe operator.

Before using the workflow, we validate its YAML structure, input contract, namespace, and RESERVE version requirement:

reserve workflow validate personal/interest-rates/ten-year-treasury-drivers
 Validated 1 workflow file(s)

Inspecting the Contract

The workflow requires a start date and an end date. We can inspect those requirements without reading the YAML directly:

reserve workflow contract ten-year-treasury-drivers
personal/interest-rates/ten-year-treasury-drivers contract:
  @1 = start date
    format: YYYY-MM-DD
    sample: 2026-07-01
    description: First date in the Treasury-market comparison window.
  @2 = end date
    format: YYYY-MM-DD
    sample: 2026-08-27
    description: Final date in the Treasury-market comparison window.

The first value supplied to render replaces @1. The second replaces @2.

Rendering the Analysis

We can now render the workflow for the period we want to investigate:

reserve workflow render ten-year-treasury-drivers 2026-07-01 2026-08-27

reserve obs get DGS10 DFII10 T10YIE DGS2 T10Y2Y THREEFYTP10 --start '2026-07-01' --end '2026-08-27' --format jsonl --quiet | reserve analyze summary --by-series

RESERVE does not execute this command. The operator or agent receives the fully resolved pipeline and can review it before deciding whether to invoke it.

If invoked, the pipeline retrieves all six series over the same date window and produces one descriptive summary per series. That allows us to compare the nominal yield with movements in real yields, breakeven inflation, shorter-term rates, the yield-curve slope, and the model-estimated term premium.

This is descriptive analysis rather than a formal causal decomposition. The series also have different release calendars, so their final available observations and observation counts may differ slightly.

The workflow remains the same. Only the period being investigated changes:

reserve workflow render ten-year-treasury-drivers 2026-08-01 2026-08-27

That is the central value of a RESERVE workflow: the analytical method becomes durable, inspectable, and reusable while its runtime inputs remain flexible.

$ ./reserve obs get DGS10 DFII10 T10YIE DGS2 T10Y2Y THREEFYTP10 --start '2026-07-01' --end '2026-08-27' --format jsonl --quiet | reserve analyze summary --by-series
+-------------+-------+--------+--------+--------+--------+--------+--------+------------+
| SERIES      | COUNT | MISS   | MEAN   | STD    | MIN    | MEDIAN | MAX    | CHANGE PCT |
+-------------+-------+--------+--------+--------+--------+--------+--------+------------+
| DFII10      | 42    | 1|2.4% | 2.3720 | 0.0567 | 2.2400 | 2.3900 | 2.4700 | 4.00%      |
| DGS10       | 42    | 1|2.4% | 4.6361 | 0.0713 | 4.4800 | 4.6500 | 4.7500 | 4.24%      |
| DGS2        | 42    | 1|2.4% | 4.2137 | 0.0538 | 4.1300 | 4.2000 | 4.3700 | 0.72%      |
| T10Y2Y      | 42    | 1|2.4% | 0.4224 | 0.0606 | 0.3100 | 0.4400 | 0.5300 | 51.61%     |
| T10YIE      | 42    | 1|2.4% | 2.2641 | 0.0353 | 2.2000 | 2.2600 | 2.3400 | 4.48%      |
| THREEFYTP10 | 38    | 1|2.6% | 0.8122 | 0.0397 | 0.7216 | 0.8216 | 0.8682 | 20.32%     |
+-------------+-------+--------+--------+--------+--------+--------+--------+------------+

Sources by series:
- DFII10: Board of Governors via FRED
- DGS10: Board of Governors via FRED
- DGS2: Board of Governors via FRED
- T10Y2Y: St. Louis Fed via FRED
- T10YIE: St. Louis Fed via FRED
- THREEFYTP10: Board of Governors via FRED

What does this data tell us?

SeriesApprox. startApprox. endMove
10Y nominal (DGS10)4.48%4.67%+19 bp
10Y real (DFII10)2.25%2.34%+9 bp
10Y breakeven (T10YIE)2.23%2.33%+10 bp
2Y (DGS2)4.17%4.20%+3 bp
10Y–2Y (T10Y2Y)0.31%0.47%+16 bp
10Y term premium (THREEFYTP10)~0.72%~0.87%~+15 bp

The 10-year Treasury yield rose roughly 19 bp from early July through August 27. The move was split almost evenly between higher real yields (~9 bp) and higher inflation compensation (~10 bp). Because the 2-year moved only ~3 bp while 2s10s steepened ~16 bp, the selloff was concentrated at the long end rather than being primarily a near-term Fed repricing. A roughly 15 bp increase in the Fed’s 10-year term-premium estimate further suggests that rising term premium was an important component of the move.