How it works
Five steps between a raw call and a decision.
ACLP observes what your application already does. It does not proxy, intercept, or replace provider calls, and it does not require prompt or completion content.
- 01
Your application emits usage metadata
The SDK wraps your provider client. When a call completes, it reports the model, token counts, latency, status, and the feature label you assigned. Nothing about how you call the provider changes.
- 02
ACLP normalises and prices the events
Token counts are matched against a price table per model. Where a rate is a sample value rather than a confirmed one, the resulting cost is marked as an estimate in the interface.
- 03
Spend is attributed along several dimensions
The same ledger is grouped by feature, user, model, provider, environment, and session. Because every view reads the same records, totals reconcile across the workspace.
- 04
Patterns are measured against a baseline
ACLP compares each period with an equivalent trailing window, then looks for specific shapes: repeated prompts, retry relationships, context that grows faster than output, and model changes at constant token volume.
- 05
A finding keeps its evidence
Findings link to the sample records that produced them, state the measurement method, and separate what was observed from what is estimated. Suggestions are offered, not applied.
Setup
Two lines around the client you already have.
This is proposed SDK usage for the initial SDK. The package is not published yet, so the snippet is illustrative rather than installable.
import { AclpClient } from "@aclp/sdk";
const aclp = new AclpClient({
projectId: "proj_customer-platform",
apiKey: process.env.ACLP_INGEST_KEY,
});
aclp.observe(openaiClient, { feature: "support-reply" });The fastest way to understand the workflow is to run one investigation end to end.
Open the sample workspace