Expected Parrot · A practical facilitation guide

Strategic Scenario Planning with Kahn

Turn consequential uncertainty into four plausible futures, then find the strategies that remain useful across them.

Tool: KahnMethod: two-axis scenario planningInterface: JSON-first CLI

01 What Kahn is for

Kahn is a command-line workspace for strategic decisions shaped by external uncertainty. It records environmental forces, identifies two critical uncertainties, constructs a four-scenario matrix, and tests strategic options against every future.

Scenario planning is not forecasting. Its purpose is to expand the set of futures a team can recognize and prepare for. A useful exercise makes assumptions visible, reveals fragile commitments, identifies robust moves, and defines observable signals that show which future may be emerging.

Use Kahn when the decision is strategic, several futures are plausible, and the cost of optimizing for the wrong future is meaningful. For a single gamble with defensible probabilities, a decision tree is usually a better fit.

02 Frame the focal question

A strong focal question names the decision, decision maker, and horizon. “What will happen to our market?” is too broad. “How should we enter the commercial battery market over the next three years?” creates a useful boundary.

kahn init \
  --question "How should we enter the commercial battery market?" \
  --domain "North American distributed energy" \
  --horizon "2027–2030"

The horizon should be long enough for structural uncertainty to matter but short enough for today’s strategic choices to remain relevant.

03 Map environmental forces

Scan political, economic, social, technological, legal, environmental, customer, and competitive conditions. Separate relatively predictable trends from genuinely uncertain drivers. Both belong in the analysis, but they play different roles.

TypeRole in the exerciseExample
TrendAppears in all four scenarios.Battery costs continue to decline.
UncertaintyCould resolve in meaningfully different directions.Utilities centralize or decentralize grid control.
ConstraintLimits feasible responses.Interconnection queues remain slow.
kahn force add --name "Battery cost decline" \
  --domain technology --type trend --impact high \
  --predictability high --direction decreasing \
  --notes "Pack costs continue falling, though the rate may vary"

04 Select critical uncertainties

Capture several candidate uncertainties before choosing axes. Score them for impact on the focal decision and genuine uncertainty. The best pair is consequential, reasonably independent, and capable of producing four distinct worlds.

Each axis needs two plausible poles—not “good” and “bad,” but contrasting states that could each occur. Avoid axes that are merely two phrasings of the same underlying force.

kahn uncertainty select f002 f004
kahn uncertainty set-poles cu001 \
  --pole-a "Centralized utility control" \
  --pole-b "Open distributed markets"

05 Build four coherent scenarios

Crossing two uncertainties yields four scenario shells. Kahn creates these combinations; the team gives each a memorable name, narrative, implications, and early indicators.

Utility FortressCentralized control × slow adoption
Managed AccelerationCentralized control × rapid adoption
Local ExperimentOpen markets × slow adoption
Energy BazaarOpen markets × rapid adoption
kahn scenario build
kahn scenario name sc001 --name "Utility Fortress" \
  --tagline "Scale exists, but incumbents control access"
kahn scenario narrative set sc001 \
  --file narratives/utility-fortress.md

A good narrative is causal rather than decorative: it explains how the world arrived there, how actors respond, what becomes easier or harder, and which assumptions no longer hold.

06 Test strategic options

Evaluate each real option in all four scenarios. Look for no-regret moves, contingent bets, hedges, and commitments that perform well only in one favored future. Robust does not mean identical performance everywhere; it means acceptable performance without relying on one narrow forecast.

PatternStrategic response
Strong in every scenarioCandidate no-regret move.
High upside, narrow fitStage the commitment or preserve an option.
Weak in one scenarioAdd a hedge or define an exit trigger.
Weak broadlyRedesign or discard.

07 Monitor signals

Scenarios become operational when they have observable indicators. Choose signals that distinguish the scenarios, can be monitored at a practical cadence, and would change a decision. Assign an owner and a place to observe each one.

kahn scenario signals set sc001 \
  --signal "Utilities restrict third-party aggregation" \
  --observable-in "state regulatory dockets"

08 Produce a decision-ready report

Validation catches incomplete axes, narratives, evaluations, and signals before reporting. The generated artifacts summarize the scenarios, strategy matrix, robust recommendations, and signal dashboard.

kahn validate
kahn report generate
kahn report export --format html --output report.html

Save snapshots before changing axes or revising a completed workshop. The project store remains the source of truth; generated reports are outputs, not the working record.

Quick command sequence

  1. kahn init — frame the focal question.
  2. kahn force add — record trends and uncertain forces.
  3. kahn uncertainty select — choose two forces as axes.
  4. kahn uncertainty set-poles — define each axis’s extremes.
  5. kahn scenario build — create the four futures.
  6. kahn option add — record and evaluate strategic choices.
  7. kahn validate — check completeness and consistency.
  8. kahn report generate — create decision artifacts.

Run kahn --help or kahn <command> --help for the exact options available in the installed version.

Facilitation principles

  • Delay axis selection until the environmental scan is broad enough.
  • Keep all four scenarios plausible; do not hide a preferred forecast in the matrix.
  • Use names that are memorable but neutral enough to invite honest analysis.
  • Test the strategy the organization is actually considering, not generic alternatives.
  • Translate scenarios into staged commitments, hedges, and monitoring triggers.

EDSL Jobs workflow

Kahn packages the research design; the ep client executes it. Generated Jobs contain questions, agents, and project context, but no model. This keeps model selection, cost review, and network execution explicit.

kahn job generate evaluate-options \
  --output jobs/evaluate-options.jobs.ep
ep inspect jobs/evaluate-options.jobs.ep
ep jobs cost jobs/evaluate-options.jobs.ep
ep run jobs/evaluate-options.jobs.ep \
  --model gpt-5-nano \
  --output jobs/evaluate-options-results.ep
kahn ingest option-evaluations \
  --from jobs/evaluate-options-results.ep

The same sequence supports research-forces and write-narrative. Kahn validates the Results’ project and scenario identifiers before changing project state. Preserve both artifacts: *.jobs.ep records what was asked, while *-results.ep records the returned answers and model provenance.

Install and contribute

git clone https://github.com/expectedparrot/kahn.git
cd kahn
python -m pip install -e .
kahn --help

Kahn requires Python 3.11 or newer. Source code is available on GitHub and is released under the MIT License.