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-27The 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-driversThis 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-driversFor this analysis, the workflow contains six FRED series:
| Role | FRED series |
|---|---|
| Nominal 10-year Treasury yield | DGS10 |
| Real 10-year Treasury yield | DFII10 |
| 10-year breakeven inflation | T10YIE |
| 2-year Treasury yield | DGS2 |
| 10-year minus 2-year yield-curve slope | T10Y2Y |
| Model-estimated 10-year term premium | THREEFYTP10 |
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-seriesEach 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-seriesRESERVE 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-27That 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 FREDWhat does this data tell us?
| Series | Approx. start | Approx. end | Move |
|---|---|---|---|
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.