Fpa portfolio learn
The FP&A toolbelt for AI coding agents. Claude Code or Codex does the thinking; openfpa gives it a tested finance kernel, durable company memory, and a Karpathy inspired research loop that improves forecasts against your actuals. By Guiderail and Jeff Brines.
npx -y skills add JeffBrines/openfpa --skill fpa-portfolio-learnAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 5 stars5 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Use when you run FP&A for several clients and want your practice to compound - mines patterns that generalize across your same-type clients, validates them by leave-one-out cross-client backtesting, and promotes ratified priors and skills into a local library that seeds every new client. All local; nothing leaves your machine.
SKILL.md
2.6 KB, as published. Nobody here has run it
Portfolio Learn (Loop B)
Overview
Loop A makes the model better at one client. This makes your practice compound: client #10 starts smarter than client #1 because your library carries what generalized across #1–9. Everything is local - your own book, on your own machine.
Core principle: self-improving, never self-ratifying - propose, you accept. The objective metric is cross-client: does a pattern learned on some clients fail to degrade the others' backtest?
Setup
A portfolio manifest ~/.fpa/portfolio.yaml lists your clients + a business-type tag:
library: ~/.fpa/library
clients:
- { path: ~/clients/acme, type: d2c-inventory }
- { path: ~/clients/peak, type: d2c-inventory }
- { path: ~/clients/haul, type: trucking }
Workflow
- Load the manifest (
pyfpa.load_portfolio). - For each business-type with at least 3 clients:
- Priors: let
type_clients = pyfpa.portfolio.clients_of_type(portfolio, type).pyfpa.mine_priors(portfolio, type)finds drivers that cluster tightly; validate each withpyfpa.validate_prior(driver, type_clients)(leave-one-out). Surface validated ones first (by cross-client delta), then unvalidated/judgment. - Skills:
pyfpa.find_recurring_skills(portfolio, type)for recurring generated skills. Also weigh recurring structural corrections across clients (read each.fpa/corrections/fortype: structural) - a human-authored pattern that repeats is strong signal.
- Priors: let
- Present candidates ranked by evidence (support count + cross-client delta).
- Ratify. On your acceptance,
pyfpa.promote_prior/pyfpa.promote_skillwrites the~/.fpa/library/andlibrary-log.md. Reversible.
Guardrails
- Local-only; nothing phones home.
- At least 3 clients to propose; tight-cluster only; a prior must not degrade held-out clients.
- You ratify everything; priors are seeds, not mandates - each client's Loop A refines.
The payoff
New clients inherit the library: fpa-learn-business seeds their starting model from
your promoted priors (pyfpa.seed_from_library) and offers the promoted skills.
Next
Promoted → the next new client onboarded via fpa-learn-business starts smarter.