Know what your AI actually costs — and what it returns.
Plevsy attributes every LLM call to the feature, customer and ticket it served, in development and in production, and puts that cost next to whether the feature gets used.
For anyone who has to answer the question — engineering, product, finance.
What the video shows
The video has no sound. Its captions, scene by scene. The company, Nordlicht SaaS GmbH, and every number in it are invented.
0:00Plevsy runs on your own infrastructure. Nordlicht SaaS GmbH signs in to its hub.
0:08The overview: what AI cost in the last 14 days, against the 14 before, and which providers it went to.
0:18Every screen filters the same way: here, one team's spend.
0:26Weekly budgets for production and for development, measured against any window.
0:34Cost by feature: search-assist, ticket-summary and onboarding-copilot.
0:41One feature: what it costs to run, how often it is used, and the AI cost of one use.
0:51Which customers use search-assist most.
0:57The same customers, ranked by what their use of the feature cost in AI.
1:03ROI: what building each feature cost in development, beside what running it costs.
1:13Customers: AI cost and calls per customer, beside what each one pays.
1:23kranich-reisen went quiet mid-month. Spend shows it weeks before a renewal does.
1:29Teams and developers, pseudonymised: the cost of building, by team and by tool.
1:36Investment: what each epic cost to build, read against its tickets in Jira.
1:45Recommendations: a cheaper model only where it did the same work as well, with the evidence.
1:59Model comparison: what this traffic would have cost on another model, at catalog prices.
2:09Data health: whether the numbers can be believed. Events ingest refused are counted, by reason.
2:19Every event, as it was stored: token counts and cost, never a prompt.
2:25Settings: people and their roles.
2:29Ingest keys, one per environment.
2:32Edges: the production and development collectors, paired and forwarding.
2:36Single sign-on through your identity provider.
2:40Prices from a signed catalog, with your own overrides and discounts.
2:43Attribution: one value, legacy-faq-bot, still belongs to no feature. Mapping it is one step.
2:52The licence, bound to this hub, and the heartbeat: counts only, sent only when switched on.
3:00How long events are kept.
3:04Every change, in the audit log.
3:07How developers appear: pseudonymised here, by the tenant's choice.
3:11The tenant itself.
3:14How dates and numbers read, for each person.
3:18In English and German, light and dark.
3:28The customer portal: where Nordlicht manages its licence and its hubs.
3:36This month's events, from the hubs that send a heartbeat, against the licence's allowance.
3:43The organisation's details.
3:47Members and their roles, each invited by email.
3:51Hubs: registered online or offline, each with its version and its last heartbeat.
4:01Every licence issued, and the one in force, verifiable offline.
Your provider invoice is one number.
Your engineers know which model they called; nobody knows which feature or customer it was for.
When finance asks what the AI spend returned, the honest answer today is a spreadsheet and a guess.
How it works
Five steps, from the call in your code to a cost on a feature — and back to your developers' coding tools as a model recommendation.
Development
Coding toolsClaude Code, Codex CLI
Answered when asked
EdgeIn your dev network
Model recommendation, fetched hourly
HubOn your infrastructure. Dashboard and API.Model recommendations
Production
Your codeSDK or HTTP
EdgeIn production
1
Report each call
In production, your code reports token counts, model, feature and customer — over HTTP from any language, or through the TypeScript SDK. On developers' machines, plevsy-dev records every Claude Code and Codex CLI call exactly, taking the ticket from the branch name. Events that carry prompt or completion fields are refused.
2
Collect where the data is
Run an edge in your dev network and one in production. Edges buffer locally and forward to one hub, outbound only. Or send straight to the hub.
3
Price it
Prices come from a signed catalog with input, output, cache and batch rates. Where a provider charges more above a prompt length, a call is priced at the rate its length falls under; where the provider's page leaves the rule open, the row is flagged, not guessed. Your negotiated rates and discounts override the catalog.
4
Attribute it
Map repositories, ticket IDs and customer IDs to features, teams and customers. With Jira Cloud connected, each ticket also brings its epic, issue type and status. Events are never rewritten, so a rename — or a ticket moved to another epic — applies to all of its history.
5
Recommend a cheaper model
From the same cost and Jira history, the hub works out for each team and kind of work whether a cheaper model did the work as well, and names it — or says there is no recommendation, and why. The development edge keeps a copy, and a coding tool asks it which model to use for the work in front of it. It is advice: a team takes it or leaves it.
What it answers
What did it cost to build feature X with AI?
Every call from a coding tool carries the developer, the ticket and the tool. Tickets map to features, and through Jira to their epics and initiatives, so development cost reads by initiative, epic and ticket — and by team and tool.
Developers are pseudonymised by default, and views by developer need their own permission.
What does feature X cost to run, and for whom?
Production AI cost by feature, module, customer and model.
Cost per use, not only per call: averaged over the uses a feature reports, and exact for calls tied together by a trace ID. Per customer, the margin against the monthly fee you record.
Is what we built actually used?
Your code reports uses — events with no AI in them, like “payment completed”, 312 times.
Each feature's development cost sits next to its uses, as development cost per 1,000 uses. Releases shown as marks on the charts: planned.
Would a cheaper model do?
Plevsy re-prices the tokens you actually used on the 72 current Anthropic, OpenAI and Google models in its signed catalog, with published benchmark scores beside the price where there are any. Where the tokenizer differs, the figure is marked as an estimate.
And did it do the work as well?
Price alone is not an answer. For each team and kind of work — bug, chore, feature, spike — Plevsy reads the last 90 days of Jira tickets. It names a cheaper model only when each model has at least 20 done tickets, the cheaper one's are reopened no more often (within five points) and take at most one more review round, and it costs at least 20% less per ticket.
Then it names the model, the saving and every number behind it. Otherwise it says “no recommendation” and why; with fewer than 20 tickets, it shows how many it has. It is advice a team takes or leaves: it never routes a call, never switches a model, and never names a developer.
In Claude Code, and in Cursor where it is set up, the answer comes from the edge in your own network — even when the hub cannot be reached, and then marked as stale. The same policy can be proposed as a change to the repository's CLAUDE.md or AGENTS.md, as a diff for someone to review. Both are opt-in. The tool only answers; the developer or their agent decides.
Budgets and data health
Weekly budgets per environment
Set a weekly AI budget for development and one for production. Any window you look at is measured against the budget scaled to it.
Nothing hidden
Unmapped values, unpriced models and the events ingest refused are listed, each with its reason. An unpriced call is counted with no cost, never as zero — and once a price exists, a recalculation prices the past calls, after saying exactly how many it will touch.
Built for European companies
Metadata only
Tokens, model, cost and tags. Prompt and completion fields are rejected at ingest, at any depth; the event schema has no place for them. Tag values are free text, so keep content out of them.
On your infrastructure
One binary, built as a Docker image, with Postgres and ClickHouse. Docker Compose files included.
It calls out only for prices and for its licence, and both can be switched off: load the signed catalog from a file, and install the licence file by hand. It reads your own Jira site once you connect one, sends a heartbeat, counts only, when you switch it on, and a problem report when someone sends one.
Finance sees cost, not people
Developer-level data sits behind its own permission. The finance role sees cost, customers, ROI and budgets, and can set budgets — but no developers, teams, repositories or tickets, enforced by the API, not only hidden.
Your customer IDs stay yours
Customer IDs stay on your hub and get their names from your own registry. With a licence, an edge can replace them with a keyed hash before forwarding.
Every change on record
A change and its audit entry are written together: if the entry cannot be written, the change is not made. Sign-ins, refused sign-ins and ended sessions are recorded too. Sign-in entries are kept 180 days and changes 730, each settable within limits, never forever.
Integrations
Today
Events API over HTTP at POST /v1/events, from any language. Accepts calls to Anthropic, OpenAI, Google, Azure OpenAI, AWS Bedrock and Mistral.
A TypeScript SDK, @plevsy/sdk, that reports each call and each use of a feature.
plevsy-dev on developers' machines: Claude Code and Codex CLI, exact per call, the ticket from the branch.
plevsy-dev mcp and advise: each team's model policy where the work happens — the MCP tool model_policy for Claude Code and Cursor (opt-in), and the Model policy table in CLAUDE.md or AGENTS.md, proposed as a diff.
Jira Cloud: each ticket's epic, issue type, status and workflow history, synced hourly.
Prices for Anthropic, OpenAI and Google models. Calls to other providers are stored and counted, unpriced.
A read API described in OpenAPI, for your own BI tool: time series, breakdowns, customers, traces, model comparison, data health.
Single sign-on with OIDC.
Nothing is published yet: the hub, the edge, the SDK and plevsy-dev are downloadable from the first release.
Planned
The Python SDK.
Gemini CLI; Cursor and Copilot as totals per key, when asked for.
Jira fix versions as releases, and Jira Data Center.
Stripe, for revenue per customer.
Hosted in the EU.
Tiers
No prices yet: nothing paid is sold before it can be. The paid tiers are coming soon, and you can register your interest in one below.
We write to you once, when the tier you chose is available. No account, and no confirmation email.
Join the waitlist.
We email you a link to confirm your address. Sign-ups that are not confirmed within 7 days are deleted.
Questions
How do you handle GDPR and data residency?+
Self-hosted, the data stays where you run it. Events hold no prompt content, and an edge can hash customer IDs before forwarding.
Retention is set per tenant. The audit log records every change and every sign-in, and its entries expire by class. Deleting one person's data on request is not built yet.
What does the SDK add to a request's latency?+
Recording a call takes under 200 ns, and a wrapped client adds about a microsecond, in the TypeScript SDK's own benchmark. The event is built after the response has reached your code and sent in the background, and an edge in your network buffers, so your code never waits on the hub.