AI NPCs
Keep a character integration stable while you replace or move its agent.
Open-source endpoint runtime
Give a game one familiar project endpoint. Route it to local or self-hosted agents, keep provider credentials near the agent, and inspect every request.
POST /my-project/v1/chat/completionsmodel: town-guideresolve project + modelmultiplexed invokelocal / self-hostedchat.completiontrace persistedOne endpoint, agents wherever they run
Change the base URL, project key, and model slug. Vifu owns authorization, routing, cancellation, and trace persistence behind that boundary.
Games call the same API while the agent behind it changes.
One project key authorizes requests to the models bound inside that project.
One outbound connection carries many logical agent channels.
Every admitted request keeps its routing status and latency.
POST http://localhost:6790/my-project/v1/chat/completions
Authorization: Bearer vifu_pk_example
Content-Type: application/json
{
"model": "town-guide",
"messages": [
{ "role": "user", "content": "Open the north gate" }
],
"stream": false
}Operational evidence
The open-source Dashboard keeps projects, bindings, connection state, keys, and traces in one deployable system.

A stable boundary for changing agents
Keep a character integration stable while you replace or move its agent.
Compare agent behavior without rebuilding the game-facing API.
Share one reproducible endpoint contract across a changing project.
Run the agent boundary yourself instead of shipping provider credentials.
Self-hosted, end to end
Start with the Apache-2.0 repository. Run the Runtime and Dashboard on infrastructure you control, connect your Agent Provider, and trace your game's requests.
Copy .env.example to .env in the open-source Vifu checkout.
Run docker compose up -d to launch PostgreSQL, Vifu, and the Dashboard.
Open localhost:6791, create the local administrator, connect OpenClaw, and expose an agent.
Call localhost:6790/my-project/v1/chat/completions, then inspect the persisted trace.