Skip to main content

Forecasting as a harness for decision-making

Project description

Farness

Forecasting as a harness for decision-making.

Instead of asking "Is X good?" or "Should I do Y?", farness helps you:

  1. Define what success looks like (KPIs)
  2. Expand your options (including ones you didn't consider)
  3. Make explicit forecasts (with confidence intervals)
  4. Track outcomes to improve calibration over time

Installation

pip install farness

Quick Start

As a Python package

from farness import Decision, KPI, Option, Forecast, DecisionStore
from datetime import datetime, timedelta

# Create a decision
decision = Decision(
    question="Should I take the new job offer?",
    kpis=[
        KPI(name="income", description="Total comp after 2 years", unit="$"),
        KPI(name="satisfaction", description="Job satisfaction 1-10"),
    ],
    options=[
        Option(
            name="Take new job",
            description="Accept the offer at Company X",
            forecasts={
                "income": Forecast(
                    point_estimate=300000,
                    confidence_interval=(250000, 400000),
                    reasoning="Base + equity, assuming normal vesting",
                ),
                "satisfaction": Forecast(
                    point_estimate=7.5,
                    confidence_interval=(6, 9),
                    reasoning="Interesting work, but unknown team",
                ),
            }
        ),
        Option(
            name="Stay at current job",
            description="Decline and stay",
            forecasts={
                "income": Forecast(
                    point_estimate=250000,
                    confidence_interval=(230000, 280000),
                    reasoning="Known trajectory, likely promotion",
                ),
                "satisfaction": Forecast(
                    point_estimate=6.5,
                    confidence_interval=(6, 7),
                    reasoning="Comfortable but plateauing",
                ),
            }
        ),
    ],
    review_date=datetime.now() + timedelta(days=180),
)

# Save it
store = DecisionStore()
store.save(decision)

Command Line

# List decisions
farness list

# Show a specific decision
farness show abc123

# Check calibration
farness calibration

# See what needs review
farness pending

Claude Code Plugin

Install the plugin for interactive decision analysis:

claude plugin marketplace add MaxGhenis/farness
claude plugin install farness@maxghenis-plugins

Then use /farness:decide to run a structured decision analysis.

The Framework

Farness implements a structured decision process:

  1. KPI Definition - What outcomes actually matter? Make them measurable.

  2. Option Expansion - Don't just compare A vs B. What about C? What about waiting? What about hybrid approaches?

  3. Decomposition - Break forecasts into estimable components (Fermi-style).

  4. Outside View - Start with base rates before adjusting for specifics.

  5. Confidence Intervals - Point estimates aren't enough. How uncertain are you?

  6. Tracking - Log decisions and review outcomes to calibrate over time.

Why This Works

  • Reduces sycophancy - Harder to just agree when making numeric predictions
  • Forces mechanism thinking - Must reason about cause and effect
  • Creates accountability - Predictions can be scored later
  • Separates values from facts - You pick KPIs (values), forecasts are facts
  • Builds calibration - Track predictions over time to improve

Development

git clone https://github.com/MaxGhenis/farness
cd farness
pip install -e ".[dev]"
pytest

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

farness-0.1.0.tar.gz (13.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

farness-0.1.0-py3-none-any.whl (9.8 kB view details)

Uploaded Python 3

File details

Details for the file farness-0.1.0.tar.gz.

File metadata

  • Download URL: farness-0.1.0.tar.gz
  • Upload date:
  • Size: 13.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.19

File hashes

Hashes for farness-0.1.0.tar.gz
Algorithm Hash digest
SHA256 e42074e5155cbe1a5fe2801b8736bc495360c68cbb61f7985ee59d929698fcb7
MD5 b23e771e9875575abf98c236c69619b3
BLAKE2b-256 1eb17b40b4d42bc7703118c988f8f58f4471f794f638192f530feaefb35ccf8f

See more details on using hashes here.

File details

Details for the file farness-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: farness-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 9.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.19

File hashes

Hashes for farness-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6868a2ff1d0efc317957a068ed956937ed8f7b9235f4e94617e47019461b0817
MD5 0b38e35e4d328854e8f5e800c9f736d0
BLAKE2b-256 28fe3f9d3cb44dc1a248ded07779a2aee545abd0282587d38bc9bfb6bd478481

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page