ai-cur Contact for more details
Coming soon. Contact for more details.
How it works

How a charge becomes a row beside the work it paid for.

Collectors read each vendor's billing and the systems your work happens in. Your admin declares the facts no API holds: who is on which team, which login is which person. The engine joins the two, and every page states which sources it had.

The short version

Two sets of read-only connections, and one join between them.

Dashed systems are planned. Every integration and where it stands.

  1. 1

    Connect

    Read-only keys for the AI vendors you pay and the systems your teams work in. Amounts, people, dates and states. Never content.

  2. 2

    Declare

    The facts no API holds: who is on which team, which login is which person, what you committed to. Every declaration keeps its author.

  3. 3

    Read the chain

    Every page states which sources it had and how strong each link is, so a number is never stronger than its evidence.

The join

Spend meets merged work through people you name.

Each install is assigned to a person, and each person's GitHub login is declared as an alias. Spend reaches the person through the first, merged pull requests through the second, and for each person and month the join sets settled spend beside merged work.

Both numbers stay on the page. Nothing blends them into a score, and a month missing either side is left out rather than guessed.

Aliases in ai-cur admin page: GitHub logins declared as aliases of identity provider principals, with who declared each and when
GitHub logins declared as aliases of people, each with who declared it.
What it reads

Every source, and the job it does.

Collectors run on the schedule your admin sets, and each run is logged with its outcome. Here is what each source adds to the record.

Anthropic

Daily billed cost from Anthropic's cost report, in the currency it was billed in. It does not yet ask for the breakdown by model, so these rows read no model declared. Where the vendor sends no token reading, tokens read unavailable, not zero.

OpenAI

Daily billed cost and currency for the organization from OpenAI's Costs API, not yet broken down by project or key. It names no model, so OpenAI rows read no model declared instead of borrowing one.

Cursor

Team spend from Cursor's Admin API, broken down per user, so Cursor cost lands on a person's page beside their other tools.

GitHub Copilot

Copilot usage and billed cost from GitHub's billing usage report. It is the one collector that brings a vendor list price.

GitHub

Pull requests and the commits in them: who merged what, when, and how many lines each pull request changed. Metadata only, never the contents of a file. Logins reach people through the aliases you declare.

Jira

Issues and epics, so cost can sit beside resolved work and be split across the projects people closed issues in. The split is stated as a share of cost, never as what a project used.

Okta

Groups and their members. Finding a group maps nobody; it joins a team only when an admin maps it. Okta sign-in for Business accounts is built and not yet switched on in our hosted service.

Customer exports

Your own billing exports, for spend no API reaches, to be filed in the same ledger beside provider billing and corrections. Upload is planned; each row will keep its source, so a figure built from it can name where it came from.

The desktop client's local sources

On each Mac: Claude Code session files, Claude desktop sessions, Codex's local database and session files, and Cursor plan usage.

The FOCUS mapping

Every source lands in one cost record shaped after the FOCUS billing specification, with the same columns whether ai-cur runs hosted, on your servers or on Databricks.

Engine runs in ai-cur admin page: each run with its start and finish time and a complete status
Every engine rebuild is logged with its status and what it produced.
What you declare

What you declare, never what we guess.

Some facts live in contracts, org charts and policy, not in any API. Your admin declares them on the admin page or from the command line, and every declaration records who made it and when.

Teams and groups

Create teams and map each identity provider group to one. People who reach no mapped team are listed, so nobody drops out quietly.

Aliases

Tie a GitHub login to a person, so the pull requests they merge land beside the spend on their seats and keys. Without an alias, merged work has nobody to sit beside.

Roles

Name who holds management, admin or finance. The database checks the role before it returns a single row, so a role nobody declared opens nothing.

Budgets and caps

A monthly amount for a team or the whole account, its alert thresholds, and soft and hard caps. A blank cap means none declared, not a cap at the full amount.

Virtual budgets

Budgets that cut across teams, for a project or a person, with caps of their own. A project budget counts each person in full, so these never add up to the account total.

Commitments

The amount, currency and term of a contract with a provider. Drawdown counts settled charges inside that term only, and a commitment is never inferred from spend.

Rate cards

List prices per provider and model. Plan fit needs one before it can say anything, and no rate card ships with the product.

The comparison cohort

The smallest roster a team needs before it is compared with teams it is not run by. The roster counts everyone mapped to the team, active or not.

The plan

Which plan an account holds, on what term and until when. An admin declares it, and it lands in the signed entitlements the desktop client checks. Paying for a Team plan will declare the same thing once payments open.

Installs

Enroll an install to issue its token, shown once. Rotate it with a short overlap, revoke it at once, and assign each install to its person.

Groups to teams in ai-cur admin page: identity provider groups mapped to teams, the people reaching no mapped team, and the existing teams
Groups mapped to teams, and the people no mapping reaches yet.
Declared budgets in ai-cur admin page: a whole tenant budget and a Platform budget for August 2026 with their thresholds and who declared them
Declared budgets, each with its author and time.
Project and person budgets in ai-cur admin page, none declared, with the note that project figures do not add up to the tenant total
Project and person budgets, empty until an admin declares one.
Declared rate cards in ai-cur admin page: no rate card is declared, so no list priced equivalent can be stated
Rate cards. Until one is declared, plan fit reads Cannot say instead of guessing.
Comparison minimum in ai-cur admin page: a team is compared only when enough people are on its roster, and the product default applies because none is declared
The comparison minimum, at the product default.
Installs and tokens in ai-cur admin page: each install with its enrollment time, revocation state and assigned principal
Installs, each assigned to one person.
The audit trail section of ai-cur admin page, a chronological list of admin actions, with none recorded
The audit trail: every admin action, with its author and time.
Link strength

Three ways spend meets work, always labelled.

  • Direct

    The session names the work item

    The desktop client records the repository, branch and task a session ran in, so the cost of that help attaches to the item itself.

  • Person and period

    Same person, same month

    One person's settled spend beside what that person finished in the same period, through the aliases you declare.

  • Team and function

    Group spend, group output

    Where an individual link is not available or not appropriate, a team's spend sits beside what the team delivered.

Attribution

It does not guess who wrote the code.

Which lines an assistant wrote is a signal vendors and attribution tools already work on, and ai-cur does not rebuild it.

What it holds is simpler and checkable: one person's settled spend and the same person's merged pull requests, for the same month, side by side. It never credits a tool with the work, and it publishes no attribution accuracy figure because it makes no attribution claim.

Your gateway

Keep your gateway. Add the decision.

Routing to cheaper models, caching and hard limits per key already exist in gateways you can run yourself. ai-cur stays out of the request path. It reads billing through each vendor's reporting API and never handles a model request, a prompt or a response.

It is built to read the whole bill, including seats no proxy ever sees, and serves the cap decision for each team, project or person at an endpoint your gateway or key issuer checks.

Declared caps in ai-cur admin page with soft and hard caps reading No cap declared, and the note that ai-cur states the decision while enforcement stays at your gateway or key issuance
A blank cap is no cap, not a cap at the full budget.

Make the join on your own screens.

Declare your teams and vendors once, and every view above reads from that declaration instead of a guess.