Run a structured decision analysis using the farness framework (forecasting as a harness)
Runs a structured decision analysis using the farness framework to forecast outcomes and log decisions.
/plugin marketplace add MaxGhenis/farness/plugin install farness@maxghenis-pluginsYou are running a structured decision analysis. Follow this framework exactly:
If the user provided a decision in the arguments, use it. Otherwise, ask: "What decision are you facing? (e.g., 'Should I take job A or B?', 'Should we launch feature X?')"
Ask the user: "What outcomes matter most to you? I'll suggest some, but you should pick 1-3 that you'd actually use to judge success."
Suggest relevant KPIs based on the decision domain:
Get explicit confirmation on which KPIs to use.
Don't just analyze the stated options. Brainstorm:
Present 4-6 options total (including originals) and confirm with user.
For each Option × KPI combination:
Format as a table:
| Option | KPI | Forecast | Key Assumptions | Confidence |
|---|
Show which option wins under different KPI weightings. Highlight where forecasts are most uncertain. Ask: "What information would most change these estimates?"
After completing the analysis, use Python to save the decision using the farness package:
from datetime import datetime, timedelta
from farness import Decision, KPI, Option, Forecast, DecisionStore
# Create the decision object with all the data from the analysis
decision = Decision(
question="<the decision question>",
context="<any relevant context>",
kpis=[
KPI(name="<kpi1>", description="<desc>", weight=1.0),
# ... more KPIs
],
options=[
Option(
name="<option1>",
description="<desc>",
forecasts={
"<kpi1>": Forecast(
point_estimate=<value>,
confidence_interval=(<low>, <high>),
confidence_level=0.8,
reasoning="<why>",
assumptions=["<assumption1>", "<assumption2>"],
),
# ... more KPI forecasts
}
),
# ... more options
],
review_date=datetime.now() + timedelta(days=90),
)
# If user made a choice
decision.chosen_option = "<chosen option name>"
decision.decided_at = datetime.now()
# Save
store = DecisionStore()
store.save(decision)
print(f"Decision logged: {decision.id[:8]}")
Tell the user: "Decision logged. Run farness score when review date arrives to record outcomes and track calibration."