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:
- Define what success looks like (KPIs)
- Expand your options (including ones you didn't consider)
- Make explicit forecasts (with confidence intervals)
- 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:
-
KPI Definition - What outcomes actually matter? Make them measurable.
-
Option Expansion - Don't just compare A vs B. What about C? What about waiting? What about hybrid approaches?
-
Decomposition - Break forecasts into estimable components (Fermi-style).
-
Outside View - Start with base rates before adjusting for specifics.
-
Confidence Intervals - Point estimates aren't enough. How uncertain are you?
-
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e42074e5155cbe1a5fe2801b8736bc495360c68cbb61f7985ee59d929698fcb7
|
|
| MD5 |
b23e771e9875575abf98c236c69619b3
|
|
| BLAKE2b-256 |
1eb17b40b4d42bc7703118c988f8f58f4471f794f638192f530feaefb35ccf8f
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6868a2ff1d0efc317957a068ed956937ed8f7b9235f4e94617e47019461b0817
|
|
| MD5 |
0b38e35e4d328854e8f5e800c9f736d0
|
|
| BLAKE2b-256 |
28fe3f9d3cb44dc1a248ded07779a2aee545abd0282587d38bc9bfb6bd478481
|