{"slug": "show-hn-we-built-open-openrouter-that-turns-usage-into-a-better-model", "title": "Show HN: We built open OpenRouter that turns usage into a better model", "summary": "Experiential Labs released Experiential, an open-source gateway and router for AI agent workflows that unifies hosted, BYOK, and local models behind an OpenAI-compatible API, with features for controlling model access, spend limits, and optimizing production traffic into custom routers or fine-tuned models. The tool, installable via pip and run locally or as a hosted platform, collects OpenTelemetry traces to build and optimize routers, and supports fine-tuning open-source models via Tinker. It includes anonymous aggregate telemetry that can be disabled, and is designed to work with coding agents like Claude Code, Cursor, and Codex.", "body_md": "Experiential is an open source gateway and router for agent workflows:\n\n- Use hosted, BYOK, and local models through one OpenAI-compatible API.\n- Control which users and agents can use which models, for which use cases, and how much they can spend.\n- Turn production traffic into a custom router or model optimized for quality, speed, and cost.\n\nStart a local OpenAI-compatible gateway. On first run, the setup wizard uses the shared provider,\nmodel, and reasoning-effort selectors, persists every selected provider connection, then shows\ndefaults for the public alias, identity, and `$50.00`\n\ncommand budget before printing a one-time key:\n\n```\npip install experiential\nexp\n```\n\nChoose a public alias such as `opus-5`\n\n, capture the issued key, and send a request:\n\n```\nexport EXP_GATEWAY_KEY=...\ncurl http://127.0.0.1:8000/v1/chat/completions \\\n  -H \"Authorization: Bearer $EXP_GATEWAY_KEY\" \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"model\":\"opus-5\",\"messages\":[{\"role\":\"user\",\"content\":\"Help me\"}]}'\n```\n\nPrefer a managed gateway to running one locally? The hosted platform at\n[platform.experientiallabs.ai](https://platform.experientiallabs.ai) serves the same\nOpenAI-compatible (and Anthropic Messages) API at `https://api.experientiallabs.ai/v1`\n\n.\nSee [SETUP.md](/experientiallabs/experiential/blob/main/SETUP.md) for copy-paste prompts you hand to your coding agent\n(Claude Code, Cursor, Codex, and similar); the agent runs the setup for you. It\ncollects four prompts:\n\n- Upload your LLM traces as telemetry: create an account instantly from your email, then pull or upload your existing LLM traces onto the platform as telemetry.\n- Connect your inference provider keys (BYOK): create an account, then connect your own OpenAI, Anthropic, Gemini, Azure, Bedrock, Fireworks, or OpenRouter keys for free pass-through.\n- Start calling models on the gateway: make your first\n`/v1`\n\ncall with the OpenAI and Anthropic SDKs using an`xpl_`\n\nkey, and optionally repoint your existing coding agents. - Full onboarding: create an account instantly from your email, connect your keys, import your spend, then repoint every coding agent (Claude Code, Cursor, Codex, Aider, and similar) or Conductor at the gateway.\n\nStart the local gateway with `exp`\n\n(or `exp run`\n\n); the compiled native data plane\nserves every route on loopback. From Python, load a fitted project router as an\nofficial OpenAI client backed by its own private gateway:\n\n``` python\nimport exp\n\nwith exp.load_router(\"my-project\") as client:\n    response = client.chat.completions.create(\n        model=\"my-project\",\n        messages=[{\"role\": \"user\", \"content\": \"hello\"}],\n    )\n```\n\nFirst, collect OpenTelemetry traces from your current agent. If you just want to try it out, grab\nthe public [terminal-tasks OTLP dataset](https://huggingface.co/datasets/experiential-labs/wmo-terminal-tasks-traces):\n\n```\ncurl -L -o traces.otel.jsonl \\\n  https://huggingface.co/datasets/experiential-labs/wmo-terminal-tasks-traces/resolve/540883e451dc13d34fb50fdd36b143cb0f1fb0db/traces.otel.jsonl\n```\n\nThen build a project. The build command walks you through providers, models, and budget, and asks for your trace file:\n\n```\n# Build simulation from your agent traces and optimize a router against it\nexp build support-agent\n```\n\nAfter collecting traces from your router, fine-tune an open source model you own using\n[Tinker](https://tinker.thinkingmachines.ai/).\n\n```\nexp optimize model support-agent\n```\n\nAnonymous aggregate PostHog product telemetry is enabled by default. It never includes prompts, traces, actions, observations, paths, model names, credentials, or raw customer content.\n\n```\nexp config telemetry status\nexp config telemetry disable\nexp config telemetry enable\n```\n\nThe preference is stored locally in `.exp/settings.toml`\n\n.\n\n```\nuv sync --extra dev\nuv run ruff format --check .\nuv run ruff check .\nuv run ty check\nuv run pytest -q\n```\n\nRepository and documentation conventions live in [AGENTS.md](/experientiallabs/experiential/blob/main/AGENTS.md).", "url": "https://wpnews.pro/news/show-hn-we-built-open-openrouter-that-turns-usage-into-a-better-model", "canonical_source": "https://github.com/experientiallabs/experiential", "published_at": "2026-08-27 21:18:35+00:00", "updated_at": "2026-08-27 22:19:28.458194+00:00", "lang": "en", "topics": ["ai-tools", "ai-infrastructure", "ai-agents", "mlops", "developer-tools"], "entities": ["Experiential Labs", "OpenRouter", "OpenAI", "Anthropic", "Gemini", "Azure", "Bedrock", "Fireworks"], "alternates": {"html": "https://wpnews.pro/news/show-hn-we-built-open-openrouter-that-turns-usage-into-a-better-model", "markdown": "https://wpnews.pro/news/show-hn-we-built-open-openrouter-that-turns-usage-into-a-better-model.md", "text": "https://wpnews.pro/news/show-hn-we-built-open-openrouter-that-turns-usage-into-a-better-model.txt", "jsonld": "https://wpnews.pro/news/show-hn-we-built-open-openrouter-that-turns-usage-into-a-better-model.jsonld"}}