Lynkr

Fast-EditorApache-2.0活跃维护

Lynkr 是一个命令行 HTTP 代理,把 Claude Code CLI 包装成统一入口,让编辑器、Agent 等工具更顺畅地调用代码生成能力。

Streamline your workflow with Lynkr, a CLI tool that acts as an HTTP proxy for efficient code interactions using Claude Code CLI.

v9.6.0发布于 2026-06-23 08:52 UTC640star76fork同步于 2026-11-10 06:00 UTC

怎么上手

由 README 提炼,执行前请确认
npm install -g lynkr
lynkr init
lynkr start
硬件要求按 README 说明

README 未说明显存或 GPU 要求;可对接本地 Ollama 等免费后端,也可用云端 API。

支持 Apple Silicon
下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

一个 LLM 网关,压缩 token 并按复杂度路由模型,让 AI 编程工具少花钱

Lynkr 是一个命令行 HTTP 代理,把 Claude Code CLI 包装成统一入口,让编辑器、Agent 等工具更顺畅地调用代码生成能力。

核心能力

  • 用 TOON 压缩大型 JSON 工具结果,最高省 84% token
  • 剥离未使用的工具定义,工具调用请求省 53% token
  • 语义缓存命中低于 300ms 且不计费 token
  • 按 SIMPLE/MEDIUM/COMPLEX/REASONING 分级路由到 14+ 家模型
  • 用 kNN 与 bandit 从历史结果学习并自动校准路由阈值

容易踩的坑

需先自行安装并启动 Ollama 等后端,否则报 ECONNREFUSED;默认监听 8081 端口,接入工具时 Base URL 要填 http://localhost:8081/v1;旧版本(<9.3.0)会报 pino-pretty 传输错误,需升级到最新版;代码图分析需额外编译安装 graphify,不装则退回简单复杂度分析。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

2 个版本v9.6.0
  1. v9.6.0v9.6.0 — Routing resilience & output quality最新正式版2026-06-23 · 2026-06-23 08:52 UTC

    Released to npm: npm install -g [email protected]

    Highlights

    🔁 Tier-aware fallback (escalate-then-demote) — always on

    When a tier's provider fails, Lynkr now climbs to a more capable tier first (toward REASONING); only if every higher tier is unavailable does it fall downward to SIMPLE/local. Skips circuit-OPEN providers, dedups provider:model, and never re-tries the failed model.

    • Never silent: X-Lynkr-Fallback, X-Lynkr-Served-Tier, X-Lynkr-Fallback-From-Tier, X-Lynkr-Fallback-Direction headers + warn logs.
    • Example: COMPLEX (Moonshot) fails → REASONING (Azure) → MEDIUM/SIMPLE (Ollama).

    🧹 Output format guard — always on

    Injects a markdown formatting instruction for non-Claude backends so weaker models avoid ASCII/Unicode box-drawing diagrams. Keyed off the routing-resolved provider/model; skips Claude-family backends (already clean).

    🧩 Task decomposition — opt-in (TASK_DECOMPOSITION_ENABLED)

    Cost-aware gate → planner (validated subtask DAG) → dispatcher (parallel within dependency levels, isolated context) → synthesizer, with confidence-scored monolithic fallback, shadow mode, and net-savings telemetry. Exposed as the DecomposeTask tool.

    Config

    • TASK_DECOMPOSITION_ENABLED (default false) — the only new env knob.
    • Tier-aware fallback and the output format guard are always-on.

    Testing

    47 new unit tests across all three features; no regressions in existing suites; ESLint clean.

    Full PR: #77 🤖 Generated with Claude Code

  2. 0.1.0Windows Release 0.1.02025-12-04 · 2025-12-04 02:55 UTC

    这个版本没有写更新说明。

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    Lynkr

    An LLM Gateway which optimises your token usage.

    84% fewer tokens on JSON tool results. 53% fewer tokens on tool-heavy requests. Sub-300ms semantic cache hits. Zero code changes.

    npm version Tests License: Apache 2.0 Node.js Ask DeepWiki

    Numbers from the bundled benchmark against LiteLLM on identical free local backends — run it yourself: node benchmark-tier-routing.js. It doubles as a 19-scenario routing regression harness (currently 12/12 correctness checks), and MODE=routing runs a routing-only head-to-head that judges both proxies on the same acceptable-tier sets — including LiteLLM's Auto Router v2. How it works →

    Agentic benchmark (Terminal-Bench core, 80 tasks, Oct 2026): Lynkr 42/80 for $1.54 vs openrouter/auto 44/80 for $4.72 on the same VM and evening — tied on accuracy within single-run noise (Lynkr's three runs: 39, 39, 42) at ~30% of the cost; vLLM Semantic Router on the same models/hosts: 25/80 (34 agent timeouts from unbounded upstream stalls and per-turn CPU classification). Full comparison, fairness notes and what it changed in Lynkr →

    Third-party benchmark: on RouterArena (ICLR 2026, 8,400 queries) Lynkr's routing scores 67.65 arena / 68.41% accuracy at $0.29 per 1K queries with 92.38 robustness — above GPT-5's built-in router and NotDiamond at a fraction of their cost. Methodology & caveats →


    🚀 New: Wrap Mode for AI Coding Tools

    Use Lynkr's routing with your AI coding assistant — maximize your subscription value:

    npm install -g lynkr
    
    
    # Claude Code Pro/Max
    lynkr wrap claude
    
    
    

    Wrapping gives you:

    • ✅ Tier routing (send simple tasks to free Ollama, complex to your subscription/API)
    • ✅ Sticky sessions: one routing decision per conversation via content fingerprinting, with automatic escalation when the task outgrows the model
    • ✅ TOON/RTK compression (84% token reduction on large JSON tool outputs)
    • ✅ Semantic caching (sub-300ms cache hits, 0 tokens billed)
    • ✅ Your subscription is used only where it counts — simple requests route to your own local/API models, so subscription capacity goes to the work that needs it
    • ✅ Works with OAuth (Claude, Copilot, Cursor) or API keys (Aider, Codex)

    Full wrap guide →


    Quick Start (2 Minutes)

    1. Install Lynkr

    npm install -g lynkr
    

    2. Configure Lynkr

    The fastest path is the interactive wizard:

    lynkr init
    

    It asks four questions — usage mode (Claude Pro/Max via wrap, or direct API keys), tier picks for SIMPLE/MEDIUM/COMPLEX/REASONING across the 14 supported providers, credentials for what you chose, and a few routing-intelligence knobs — then writes a fully-populated .env with sensible production defaults for everything else (caching, compression, policy budgets, MCP sandbox, rate limiting).

    Useful flags:

    lynkr init --force                # overwrite an existing .env
    

    See docs/init.md for the full wizard reference.

    If you'd rather configure by hand, the manual options below still work — copy .env.example to .env and edit it directly:

    Option A: Free & Local (Ollama) - Recommended for Testing

    # Install Ollama first: https://ollama.com
    ollama pull qwen2.5-coder:latest
    

    Then start Lynkr:

    lynkr start
    

    3. Connect Your Tool

    Cursor IDE

    • Settings → Models → Override Base URL
    • Set to: http://localhost:8081/v1
    • API Key: any-value

    Codex CLI

    Edit ~/.codex/config.toml:

    model_provider = "lynkr"
    
    [model_providers.lynkr]
    base_url = "http://localhost:8081/v1"
    wire_api = "responses"
    

    ✅ Done! Your AI tool now uses your chosen provider.


    Common Startup Errors

    Error: unable to determine transport target for "pino-pretty"

    Problem: You're running an older version (< 9.3.0).

    Solution: Update to the latest version:

    npm install -g lynkr@latest
    

    If you must use an older version, set NODE_ENV=production before starting.

    Warning: Missing tier configuration: TIER_SIMPLE, TIER_MEDIUM...

    This is just a warning - you can ignore it. Tier routing is optional.

    To remove the warning, add to .env:

    TIER_SIMPLE=ollama:qwen2.5-coder:latest
    TIER_MEDIUM=ollama:qwen2.5-coder:latest
    TIER_COMPLEX=ollama:qwen2.5-coder:latest
    TIER_REASONING=ollama:qwen2.5-coder:latest
    

    Warning: FALLBACK_PROVIDER='databricks' is enabled but missing credentials

    Solution: Add to .env:

    FALLBACK_ENABLED=false
    

    Error: connect ECONNREFUSED ::1:11434 (Ollama)

    Problem: Ollama is not running.

    Solution:

    ollama serve
    

    Keep this terminal open, and start Lynkr in a new terminal.

    Error: Connection refused or 404 Not Found

    Problem: Lynkr is not running or wrong port.

    Solution: Check Lynkr is running on the correct port:

    curl http://localhost:8081/
    

    Should return: {"service":"Lynkr","version":"9.x.x","status":"running"}


    Why Lynkr?

    AI coding tools lock you into one provider and send every token raw. Lynkr breaks both locks.

    Claude Code / Cursor / Codex / Cline / Continue
                        ↓
                      Lynkr
              ┌─────────────────────┐
              │  Strip unused tools  │  ← 53% fewer tokens on tool calls
              │  Compress JSON blobs │  ← 84% on large tool results
              │  Semantic cache      │  ← <300ms hits, 0 tokens billed
              │  Route by complexity │  ← cheap model for simple, cloud for hard
              │  Learn from outcomes │  ← kNN + bandit + auto-calibration
              └─────────────────────┘
                        ↓
        Ollama | Bedrock | Azure | Moonshot | OpenRouter | OpenAI
    

    What you get:

    • ✅ 53% fewer tokens on tool-heavy requests (Claude Code, Cursor sessions)
    • ✅ 84% compression on large JSON tool results (grep, file reads, test output)
    • ✅ Semantic cache serves repeated queries in under 300ms with 0 tokens billed
    • ✅ Automatic tier routing — simple questions go to cheap models, complex ones escalate; sessions stick to one model until the task genuinely outgrows it
    • ✅ A closed learning loop — every outcome trains a kNN router and bandit, and tier thresholds re-calibrate nightly from your own traffic
    • ✅ Route through your company's infrastructure (Databricks, Azure, Bedrock)
    • ✅ Zero code changes — just change one environment variable

    Supported Providers

    ProviderTypeExample ModelsCost
    OllamaLocalqwen2.5-coder, deepseek-coder, llama3Free
    llama.cppLocalAny GGUF modelFree
    LM StudioLocalLocal models with GUIFree
    OpenRouterCloudGPT-4o, Claude 3.5, Llama 3, Gemini$
    OrcaRouterCloudChat, reasoning, image, video (one endpoint, live catalog)$ (zero-markup)
    AWS BedrockCloudClaude, Llama, Mistral, Titan$$
    DatabricksCloudClaude Sonnet 4.5, Opus 4.6$$$
    Azure OpenAICloudGPT-4o, o1, o3$$$
    Azure AnthropicCloudClaude Sonnet, Opus$$$
    OpenAICloudGPT-4o, o3-mini$$$
    Atlas CloudCloudQwen, DeepSeek, and other OpenAI-compatible models$-$$$
    Cheaper InferenceCloudGPT, Claude, Gemini, DeepSeek, and other OpenAI-compatible models$-$$$
    AtmoRouterCloudClaude, GPT, Gemini, GLM, Kimi, Qwen, DeepSeek, and other OpenAI-compatible models$-$$
    RuncrateCloudDeepSeek, GLM, Kimi, Qwen, gpt-oss, and other open-weight models$-$$
    OpenScaleCloudDeepSeek V4.1 Flash, GLM 5.3 Flash$
    DeepSeekCloudDeepSeek R1, Reasoner$
    Z.aiCloudGLM-4.7, GLM-4.5-Air$
    Moonshot AICloudKimi K2.6, Kimi K3$
    Baidu QianfanCloudERNIE 4.5 Turbo, ERNIE X1.1$ (unverified — not yet probed against a live key)
    Fireworks AICloudKimi K2, GLM-5, DeepSeek V3 (serverless)$ (unverified — not yet probed against a live key)

    4 local providers for 100% offline, free usage. 14+ cloud providers for scale.


    Advanced: Tier Routing (Save Even More)

    Route different request types to different models automatically:

    # .env file
    MODEL_PROVIDER=ollama
    FALLBACK_ENABLED=false
    
    # Use small/fast models for simple tasks
    TIER_SIMPLE=ollama:qwen2.5:3b
    
    # Use medium models for normal coding
    TIER_MEDIUM=ollama:qwen2.5:7b
    
    # Use powerful models for complex architecture
    TIER_COMPLEX=ollama:deepseek-r1:14b
    TIER_REASONING=ollama:deepseek-r1:14b
    
    # Optional: Limits (remove for unlimited) for long conversations
    POLICY_MAX_STEPS=50
    POLICY_MAX_TOOL_CALLS=100
    

    Lynkr analyzes each request and routes it to the appropriate tier. Simple questions use fast models. Complex refactoring uses powerful models. The scorer combines anchor-embedding classification (WS7, payload-invariant) with the Jev routing judge (an optional typed second opinion over the four tiers, enabled by TYPESAFE_API_KEY; it replaced the earlier local qwen2.5:3b classifier, so no local Ollama is required) that catches topic-vs-difficulty confounding — list the exports from this file correctly routes to MEDIUM instead of getting boosted to REASONING by "technical vocabulary" alone.

    Result: 70-90% of requests use cheaper/faster models. Only hard problems hit expensive models. 15× reduction in expensive-tier over-routing vs the anchor-only baseline on the 381-prompt eval set (0.6% vs ~15%).

    Tier configuration is strictly authoritative — bandit exploration is constrained to the models you've listed in TIER_*, and multi-turn conversations score with a recency-weighted sliding window so context isn't lost on short follow-ups. Conversations get a content-fingerprint session id (clients like Claude Code send none), the decision pins for the session, and a guarded escape ladder (risk keywords, force phrases, score drift, context overflow) re-escalates the moment a task outgrows its model. Full pipeline: docs/routing-intelligence.md · intent scorer: docs/intent-window-routing.md · verify any change: docs/benchmarking.md.


    Common Issues & Fixes

    IssueSolution
    "Service temporarily overloaded"Ollama model too large for RAM. Use smaller model or increase --max-old-space-size
    "Route not found: HEAD /"Ignore - harmless health check from Claude Code
    "Hallucinated tool calls"Normal - Lynkr automatically filters invalid tools
    "Safe Command DSL blocked"Add POLICY_SAFE_COMMANDS_ENABLED=false to .env
    "spawn graphify ENOENT"Optional feature. Set CODE_GRAPH_ENABLED=false in .env (see Advanced Features section for installation)
    Slow first request (20+ sec)Ollama loading model into memory. Add OLLAMA_KEEP_ALIVE=30m in Ollama config
    No response after N turnsRemove POLICY_MAX_STEPS and POLICY_MAX_TOOL_CALLS from .env (unlimited by default in v9.3.0+)

    Advanced Features

    Real-time SSE streaming (all tiers)

    Responses stream token-by-token instead of arriving all at once — including through the tier router. Two mechanisms, both on by default:

    • Native passthrough: when the upstream already speaks Anthropic SSE (Anthropic endpoints, Z.AI, Ollama v0.14+), Lynkr pipes the bytes straight through with backpressure. Kill switch: LYNKR_NATIVE_PASSTHROUGH=false.
    • Cross-format transform: OpenAI-format upstreams (OpenAI, Azure OpenAI, OpenRouter, Databricks, llama.cpp, LM Studio) are reshaped into Anthropic events in flight — including reassembling tool-call argument fragments into clean tool_use blocks. Kill switch: LYNKR_STREAM_TRANSFORM=false.

    The LYNKR_VISIBLE_ROUTING badge streams too (injected as the first content block), and telemetry is recorded on stream close with real token counts. Fallback safety: if an upstream fails before the first byte, the request falls back to the buffered path automatically.

    # Ollama thinking models (MiniMax): streaming skips the <think>-leak repair.
    # If you see raw <think> text in responses, buffer that provider instead:
    LYNKR_OLLAMA_BUFFER_RESPONSES=true   # default true; false = stream Ollama
    

    Token Optimization (60-80% savings)

    # Enable all optimizations
    PROMPT_CACHE_ENABLED=true
    SEMANTIC_CACHE_ENABLED=true
    

    Always-on (no config): RTK tool-result compression (test/git/grep/lint/build/JSON output), MCP tool dedup (drops built-in WebSearch/WebFetch when an Exa/Tavily MCP tool is present), and request bypass (Claude CLI Warmup / title-extraction calls are answered locally, never hitting a provider).

    Optional terse-output mode to cut output tokens:

    CAVEMAN_ENABLED=true        # off by default — nudges the model to be concise
    CAVEMAN_LEVEL=lite          # lite | full | ultra
    

    Built-in dashboard

    Open http://localhost:8081/dashboard while Lynkr is running. No setup, reads the local telemetry store:

    • Spend & savings — actual cost vs what the same traffic would have cost on the flagship model (the counterfactual no pass-through gateway can show, since they neither pick your model nor see local-model traffic)
    • Tier mix — daily request breakdown across SIMPLE/MEDIUM/COMPLEX/REASONING
    • Routing accuracy — over-/under-provisioned request counts, a self-audit of the tier router's decisions
    • Request logs — filterable by provider, tier, and errors, with latency, tokens, and cost per request; every session id links to a drill-down
    • Provider health — configured providers, credential warnings, circuit breaker states
    • Insights — analyzer findings ranked by past overspend (auditable against spend already recorded, never projected savings): dead tool schemas paying rent, harness side-traffic served on expensive tiers, weak prompt-cache hit ratios, and Wilson-bounded tier-downsize verdicts. Each finding ships its evidence rows, the fix, the caveat, and how the figure was computed. "Not measured yet" is rendered distinctly from zero — an un-run scan is not an all-clear.
    • Explore — a Metric × Dimension (× Stack) pivot over routing telemetry (spend/tokens/requests/sessions by provider, model, tier, request type, day…) with preset views, period-over-period deltas, and CSV export
    • Session drill-down — per-model cost mix and an input-context-per-call chart where distillation and cache behavior are directly visible
    • Cache receipts — projected switch/hold economics from cache-aware routing next to the measured companion (dollars saved by cache reads actually served)

    JSON APIs behind it (/dashboard/api/overview|usage|routing|logs|recommendations|analytics|sessions/:id|statusline) if you want the raw numbers.

    Status line for Claude Code

    One line after every turn — routed tier, served model, today's spend, and cache re-read share — with zero token cost (out-of-band, never enters model context). Add to ~/.claude/settings.json:

    "statusLine": { "type": "command", "command": "lynkr-statusline" }
    
    ◆ Opus 4.8 · MEDIUM → minimax-m3:cloud (ollama) · today $0.06 · cache 67%
    

    Always prints exactly one line and always exits 0 — a down proxy can never break the harness. Set LYNKR_PORT if Lynkr isn't on 8081.

    Cost tracking & model pricing

    Per-request cost is computed from a model-pricing registry (LiteLLM → models.dev, cached 24h) and recorded in telemetry. Models the registry doesn't know record cost_usd=null (logged once) rather than a fabricated price. Pin prices for unknown models:

    # Per-1M-token USD prices, JSON keyed by model name
    MODEL_PRICE_OVERRIDES={"my-model":{"input":0.5,"output":1.5}}
    

    Memory System (Titans-inspired)

    MEMORY_ENABLED=true
    MEMORY_TTL=3600000  # 1 hour
    

    Load Shedding & Resilience

    LOAD_SHEDDING_ENABLED=true
    LOAD_SHEDDING_HEAP_THRESHOLD=0.85
    

    Admin Hot-Reload (no restart needed)

    curl -X POST http://localhost:8081/v1/admin/reload
    

    Code Intelligence (Optional - Graphify)

    Graphify provides AST-based code analysis for smarter routing decisions.

    Installation (Rust required):

    # Install Rust if not already installed
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    source $HOME/.cargo/env
    
    # Build and install graphify
    git clone https://github.com/safishamsi/graphify
    cd graphify
    cargo build --release
    sudo cp target/release/graphify /usr/local/bin/
    
    # Verify installation
    graphify --version
    

    Enable in .env:

    CODE_GRAPH_ENABLED=true
    CODE_GRAPH_WORKSPACE=/path/to/your/project  # Optional, defaults to cwd
    

    Features:

    • AST-based complexity scoring
    • Structural code analysis (19 languages supported)
    • Enhanced routing decisions based on code structure

    Note: Graphify is completely optional. If not installed, Lynkr falls back to simpler complexity analysis.


    Installation Methods

    NPM (recommended)

    npm install -g lynkr
    

    One-line installer

    curl -fsSL https://raw.githubusercontent.com/Fast-Editor/Lynkr/main/install.sh | bash
    

    Homebrew (macOS / Linux)

    brew tap fast-editor/lynkr
    brew install lynkr
    lynkr --version
    

    Upgrade later with brew update && brew upgrade lynkr. The formula tracks the latest lynkr npm release automatically.

    Docker

    git clone https://github.com/Fast-Editor/Lynkr.git
    cd Lynkr
    docker-compose up -d
    

    From source

    git clone https://github.com/Fast-Editor/Lynkr.git
    cd Lynkr
    npm install
    cp .env.example .env
    npm start
    

    Documentation

    GuideDescription
    InstallationAll installation methods
    Provider SetupConfiguration for all 12+ providers
    Claude CodeClaude Code CLI integration
    Cursor IDECursor setup + troubleshooting
    Codex CLICodex configuration
    Tier RoutingSmart model routing by complexity
    Token Optimization60-80% cost reduction
    TroubleshootingCommon issues and solutions
    API ReferenceREST API endpoints
    ProductionEnterprise deployment

    Benchmark Results

    Head-to-head against LiteLLM on the same backends (Ollama minimax-m2.5, Moonshot, Azure OpenAI), 9 scenarios across 4 feature categories. Apples-to-apples comparison is Lynkr vs LiteLLM billed tokens on the same scenario. Run with node benchmark-tier-routing.js.

    Runs: token benchmarks — June 5, 2026 (Lynkr v9.3.2 · LiteLLM v1.87.1). Tier routing head-to-head — re-run July 19, 2026 (Lynkr working tree w/ Phase-6 classifier + config B · LiteLLM v1.94.0.dev1 Auto Router v2). macOS, Apple Silicon.

    Token reduction (vs LiteLLM, same model & prompt)

    MechanismLynkrLiteLLMResult
    TOON compression (60-item grep JSON)427 tokens · $0.0093,458 tokens · $0.01887.6% fewer tokens, 50% cheaper

    Lynkr binary-compresses large JSON tool results (TOON) in-process, with no added latency.

    Semantic cache

    Tokens billedResponse time
    First call (cold)2,8571,891ms
    Second call — paraphrased, cache hit0 (served from cache)171ms (11× faster)

    Near-identical prompts return cached responses in 171ms. Zero model tokens billed on a cache hit.

    Tier routing — vs LiteLLM Auto Router v2 (re-run July 19, 2026)

    LiteLLM v1.94 shipped a native complexity router (auto_router/complexity_router) with the same four tier names Lynkr uses. Head-to-head on the same backends with identical prompts, both proxies live, both judged against the same acceptable-tier sets (11 routing scenarios, MODE=routing node benchmark-tier-routing.js, LiteLLM config in litellm-autorouter-v2.yaml):

    RouterRouting-correctNotes
    Lynkr (Phase-6 classifier + config B)11/11 ✅anchor embedding + local LLM classifier reconcile + FORCE_REASONING patterns + risk-remap; ~500ms warm classifier call, cached
    LiteLLM v2 — heuristic (default)4/11every miss under-routed — banking security analysis, whole-pipeline refactor, prod auth-file fix, autonomous agentic loop all sent to a 7B local model
    LiteLLM v2 — LLM classifier6–8/11 (non-deterministic)paid GPT-5.2 call + ~2–3s on every request; fails outright with local classifier models

    The 7 requests LiteLLM v2 misroutes to a 7B ollama model (should be COMPLEX or REASONING):

    What you typedLynkr sends toLiteLLM sends to
    "Analyse security trade-offs of JWT vs httpOnly cookies for a banking app"Claude Opus (top)ollama 7B ❌
    "Refactor the entire ingestion pipeline and give me the plan"z.ai GLM-5.2 (mid)ollama 7B ❌
    "Fix the null-check bug in src/auth/middleware.ts"Claude Opus (risk-remap)ollama 7B ❌
    "Figure out why this test is flaky. You have full autonomy — iterate until 10 runs pass"Claude Opus (autonomous)ollama 7B ❌
    "please summarize the exports of this file quickly"ollama minimax (correct — MEDIUM)ollama minimax — but for the wrong reason (LiteLLM under-routed to SIMPLE)

    Lynkr layers the following, in decreasing priority, to catch every miss LiteLLM leaks:

    • FORCE_REASONING regex (ultrathink, prove, security audit, from first principles) → deterministic top-tier
    • Risk classifier (auth/middleware/credentials paths) → REASONING under config B
    • Agentic detector (AUTONOMOUS workflows) → REASONING minimum
    • Anchor-embedding classifier over 4 difficulty classes + FRONTIER_MIN_SIM floor
    • Jev routing judge (optional, TYPESAFE_API_KEY) reconciles borderline anchor calls — no local Ollama required; the earlier qwen2.5:3b classifier is kept dark
    • Envelope invariance — scores cleaned user text only, ignoring tool schemas / history / system-reminders

    LiteLLM's router reads the raw last message with no envelope-stripping, no verify-then-escalate cascade, no risk classifier, no agentic detection — its fallbacks trigger only on HTTP errors, never on a bad answer.

    Fairness notes: the 11 scenarios derive from Lynkr's own regression suite, so Lynkr has home-field advantage — the transferable finding is the direction of LiteLLM's failures (systematic under-routing to cheap on hard prompts), not the exact scores. Lynkr's top tiers used Claude Opus 4.8 / z.ai GLM-5.2; LiteLLM was given the identical tier targets.

    Cost projection (100,000 requests/month, same backend)

    Direct cost (raw meter):

    Monthly costvs LiteLLM
    LiteLLM (TOON tool-heavy scenario)~$818baseline
    Lynkr (TOON tool-heavy)~$409~50% cheaper via token optimization

    Effective cost per correct-tier answer (July 19 head-to-head, all 11 routing scenarios):

    Direct $/moEffective $/mo if you re-issue misroutes at correct tier
    Lynkr~$5.50 (spends where it should, doesn't where it shouldn't)~$5.50
    LiteLLM v2 heuristic$0 (under-routes everything to ollama)~$89 (7 misroutes need re-issue on Moonshot/COMPLEX)

    The story isn't "Lynkr always spends less." It's Lynkr spends where it should and doesn't where it shouldn't. LiteLLM's zero-dollar cost on complex prompts is bought with wrong-tier answers to hard work — a 7B model answering "prove this rate limiter is fair under concurrent refill" is silent quality collapse, not a savings.

    → Full benchmark report with methodology


    Cost Comparison

    ScenarioDirect AnthropicLynkr + OllamaLynkr + OpenRouter
    Daily coding (8h)$10-30/day$0 (free)$2-8/day
    Monthly (heavy use)$300-900$0$60-240

    With tier routing + token optimization: additional 50-87% savings on cloud providers depending on workload.


    Why Lynkr vs Alternatives

    FeatureLynkrLiteLLMOpenRouterPortKey
    Setupnpm install -g lynkrPython + Docker + PostgresAccount signupDocker stack
    Claude Code native✅ Drop-in⚠️ Requires config❌⚠️ Partial
    Cursor native✅ Drop-in⚠️ Partial❌⚠️ Partial
    Local modelsOllama, llama.cpp, LM StudioOllama only❌❌
    Automatic tier routing✅ embedding intent + 13-dimension scorer, verified cascade⚠️ Auto Router v2 (v1.94): heuristic under-routes, LLM classifier billed per request❌❌ Manual metadata
    TOON JSON compression✅ up to 87.6%❌❌❌
    Upstream SSE streaming✅ native passthrough + cross-format transform⚠️ passthrough only✅⚠️
    Semantic cache✅ 171ms hits, 0 tokens❌❌✅ Prompt cache only
    Savings & routing dashboard✅ spend, savings vs flagship, tier mix, routing accuracy, request logs, pivot explorer, session drill-down⚠️ spend UI only⚠️ usage page✅ observability suite (no routing accuracy)
    Cost recommendations✅ evidence-backed findings (dead tool schemas, side-traffic, cache weak spots, Wilson-proven downsizes) ranked by past overspend❌❌⚠️ alerts, no findings
    Long-term memory✅ SQLite, per-session❌❌❌
    MCP integration✅❌❌❌
    Self-hosted✅ Node.js only✅ Python stack❌ SaaS✅ Docker
    DependenciesNode.js 20+Python, Prisma, PostgreSQLNoneDocker, Python

    Lynkr's edge: Purpose-built for AI coding tools. Compresses tokens before they reach the model — not just after. Zero-config for Claude Code, Cursor, and Codex. Installs in one command.


    Community

    This project follows our Code of Conduct — it applies in all project spaces, and it tells you exactly how to report a problem.


    License

    Apache 2.0 — See LICENSE.


    Built by Vishal Veera Reddy for developers who want control over their AI tools.