Live example · customer-support · identity cust_acme · no redeploy
Requested
- Modelopus-4
- ReasoningHigh
- BrowserOn
- Tokens8k
Executed
- —
Developer sends intent — Console policy has not run yet.
AI EXECUTION CONTROL · USAGEFLOW VIBE
Control models, tools, and spend at runtime.
Per customer. Per policy. Every request.
Free: 1 workflow with live policy • No credit card
Every request is evaluated in real time
and adapted to the right model, tools, and limits.
Live example · customer-support · identity cust_acme · no redeploy
Requested
Executed
Developer sends intent — Console policy has not run yet.
WHAT VIBE IS FOR
Adapt models, tools, and limits to each customer, context, and policy.
FREE CUSTOMER · budget 82%
PRO CUSTOMER · campaign active
ENTERPRISE · sensitive data
Identity · usage · billing
Control, measure, and bill AI by who actually used it.
CUSTOMER
cust_acme
Acme Inc.
USAGE
1,284
requests
SPEND
$42.18
this month
BILLING
Stripe
Synced
Impact across your product
Vibe records what your app requested and what actually ran — so you can measure the real impact.
Requested models
Executed models
Pass identity (your customer) and
workflow. UsageFlow scopes the ledger,
merges Console policy at runtime, and meters what actually executes —
no redeploy.
import { usage } from '@usageflow/vibe';
usage.init({ apiKey: process.env.USAGEFLOW_API_KEY! });
const result = await usage.chat({
// Identity → scoped ledger (your customer, not an API key)
identity: 'cust_acme',
workflow: 'customer-support',
provider: 'anthropic',
model: 'claude-sonnet-5',
messages: [{ role: 'user', content: prompt }],
});
identity binds to the ledger
✓ Console may rematch model / tools / budget
✓ Trace shows requested vs executed
from usageflow.vibe import VibeClient, Message
client = VibeClient() # reads USAGEFLOW_API_KEY
result = client.chat(
# Identity → scoped ledger (your customer, not an API key)
identity="cust_acme",
workflow="customer-support",
model="claude-sonnet-5",
messages=[Message("user", prompt)],
)
identity and workflow fields
✓ Synchronous client; provider inferred from model
import "github.com/usageflow/usageflow-go-middleware/v2/pkg/vibe"
client, err := vibe.New(vibe.Options{APIKey: os.Getenv("USAGEFLOW_API_KEY")})
if err != nil {
log.Fatal(err)
}
defer client.Destroy()
res, err := client.Chat(ctx, vibe.ChatRequest{
// Identity → scoped ledger (your customer, not an API key)
Identity: "cust_acme",
Workflow: "customer-support",
Provider: vibe.ProviderAnthropic,
Model: "claude-sonnet-5",
Messages: []vibe.Message{{Role: "user", Content: prompt}},
})
identity and workflow fields
✓ Explicit client lifecycle: New / Destroy
Straight answers on Vibe SDK, gateways, and free tier.
usage.chat(),
usage.prompt()) that routes calls through
UsageFlow's execution plan. You pass identity, workflow, and
optional generation settings in code; policies in Console
control models, tools, budgets, and how execution runs.
usage.wrap(nativeClient) alongside the unified
path.
identity in usage.chat(). UsageFlow
scopes a ledger to that identity and can report (Console /
Stripe) on workflow and identity dimensions — so spend reads in
language your customers understand, not just API keys.
Change models, caps, and tools from UsageFlow Console — no redeploy. Free includes one workflow with live policy.
TypeScript, Python & Go • OpenAI + Anthropic •