AI-native FP&A with a guarantee most platforms can't make: the agent can't invent a number. Every output traces to a connector, a benchmark, or a typed assumption you control — never a guess. And because we live inside Bob, your biggest line item — people — is modeled to the employee, with real comp, real burden, real currency.
Why this wins the category. Not because we're faster or prettier — because we picked four constraints the rest can't easily copy.
The agent doesn't write numbers. It assembles typed building blocks — dimensions, inputs, assumptions, metrics, scenarios — and the engine evaluates them. Outcomes are guaranteed and auditable. Every assumption cites a benchmark source. Every metric carries an expression. Every number traces to a connector value or a catalog default. No hallucinations. No "the agent thinks revenue is around $4M." If the catalog doesn't have it, the plan card surfaces a PENDING confirm — not a guess.
The chat is an accelerator, not a gate. The HC planner, IS, BS, and Workspace are full standalone surfaces. Drag a row, edit a cell, branch a scenario, run a report — without ever opening the agent. Open the agent when you want to scaffold faster, ask why a number is what it is, or model a what-if. Both modes share the same engine — agent edits and manual edits are equivalent operations on the typed entities underneath.
People are usually 60–70% of the cost base. Every other FP&A tool gets HR data via flaky integrations, syncs, and CSV uploads. We're already inside Bob. Hiring funnel, workforce planning, comp changes, termination calendar, equity grants, country-specific statutory burden — all of it is here, native, real-time. Forecast people costs perfectly because the data isn't pulled — it's the same database.
Quarter close is the most painful FP&A workflow — and most platforms push it back to spreadsheets and email threads. We build it in. 5-step rollforward wizard with sheet-aware stale-flag detection: snapshot the baseline, pull actuals from connectors, branch the new period, generate the variance report, attach commentary. Variance and audit fall out of the typed-entity architecture for free. Close becomes an engine operation, not a two-week ritual.
Stateless engine, agent loop, and persistent store — three layers, single source of truth.
Models · Components · Dimensions · Inputs · Assumptions · Metrics · Scenarios. Zero UI, zero I/O.
Wraps the engine, exposes typed actions, drives React via selectors. Persists Maps to localStorage.
Anthropic Messages API runner with plan-first checkpoint enforcement and multi-role handoff.
Per-evaluation calculator inside ExpressionEvaluator. Metric DAG sits above; HF gets one scalar problem at a time.
Templates · Components · Dimensions · Connectors · Inputs · Assumptions · Metrics · Scenarios. The vocabulary the agent draws from when scaffolding.
148 HiBob employees · 38 Salesforce customers · 24 months of QuickBooks GL. The credibility hook — "real data, no mockups."
Five typed primitives. The agent doesn't write code — it composes these. Every model in the system is built from them. That's how we eliminate hallucination.
Group revenue by customer × productLine. COGS by productLine only. OpEx by department × location. One config per line. The engine resolves allocation rules per dim source — HC employee leaves project burden by loaded-comp share; Workspace customer leaves project revenue by ARR share. Per-line affinity is strict in v1: unreachable dims render flat with a warning, never silently misallocated.
Every Model has 1–4 components enabled. Cross-component drivers (PR17) wire them together.
Three roles, one trust contract: every plan is reviewed before any mutation lands.
Reads the user's intent + active model context. Drafts a PlanProposal — assumptions, metrics, user columns, dim setup. Cannot mutate. Hands off to Builder on approval.
Runs the approved plan via tools (createModel, addAssumption, addMetric, addUserColumn, setLineGrouping). Plan-first checkpoint enforcement at the engine layer (PR15).
Reads the resulting state. Answers "why is this number what it is" with provenance. The "explain this number" role.
Forecast people, expenses, revenue, balance sheet, scenarios, close — one product, one engine, one source of truth. The agent helps when you ask. Standalone surfaces work without it.
customer × productLine, COGS by productLine, OpEx by department × location — one config per line. Subtotal formulas drive engine math; edit OperatingIncome in the Library, the cascade propagates.Map<assumptionId, value>; no model duplication, no drift.v1 was built before AI agents existed and before composability was a category requirement. v2 isn't a refactor — it's a different shape entirely. Same workflow, fundamentally different architecture.
O(1) via override Map — no model duplication. Sub-second feel even on large planners.crossComponentRef). HC LoadedComp flows into IS Salaries; ARR per customer flows into Revenue; child rows project into parent rollups via dim-leaf attribute walks. Hire one person — every dependent number ripples.customer × productLine, department × location). Allocation rules per dim source. One config per IS line — Revenue and COGS can group differently.Modern, fast, built for AI-native composition.
Strict typescript, vite-fast HMR, no SSR.
Map-aware serializers, 4-field partialize, multi-version migrations.
~400 Excel-compatible functions. Used as compute-time evaluator only.
Messages API + tool-use stepping. scriptedClient stub for tests.
62 test files across store · engine · agent · ui. Property-based + regression-freeze + topo predicates.
fy26-budget-deck.html. Live at josephgarafalo-byte.github.io/fy26-budget-deck.
Two narrative walkthroughs of the prototype — share these alongside the master guide.