fusionAIze Gate should be understandable and usable for a deployment with many providers and many clients.
The safest onboarding order is:
- one provider
- one client
- bootstrap + diagnostics
- second provider
- client-specific defaults
- policy constraints
Run the generic helpers before changing config:
./scripts/faigate-menu
./scripts/faigate-bootstrap
./scripts/faigate-provider-setup
./scripts/faigate-doctor
./scripts/faigate-onboarding-reportIf you prefer a guided shell flow over remembering individual helper names, start with ./scripts/faigate-menu. It wraps the new performance dashboard, provider setup, the wizard, API-key editing, HTTP settings, routing-mode editing, client quickstarts, validation helpers, service control, and update checks behind one consistent control-center layout.
The Configure section now splits cleanly into:
Current ConfigProvider SetupGuided SetupDirect Settings
That keeps the Gate-native flow closer to the later Grid orchestration pattern without hiding the low-level settings when you need them.
The main menu and the service/config submenus also show small runtime snapshots and inline tips now, so operators get a quick sense of the current bind, health, provider count, and default routing posture before choosing the next action. Once requests are flowing, the Dashboard section becomes the operator surface for traffic, latency, spend, token volume, provider/client hotspots, and routing pressure.
Provider Setup is the right first stop when the source itself is missing, not just the key:
Known Providersfor the curated source listCustom Providerfor an OpenAI-compatible upstream not yet in the catalogLocal Workerfor LM Studio, Ollama-style bridges, or another local/LAN worker
After the sources exist, Provider Probe is now the compact operator check for:
- which configured providers really look ready right now
- which providers still only have config but no usable key
- whether
/healthalready sees them as healthy - common failure classes such as rate-limited, quota-exhausted, or model-unavailable
Then Client Scenarios gives named templates such as opencode / eco or n8n / reliable, so the next step feels like choosing an intended client posture instead of hand-editing profile modes.
faigate-doctor now also checks whether provider env placeholders referenced in config.yaml are actually present in .env.
faigate-config-wizard gives you a first pass at:
- detected provider blocks from the API keys already present in
.env - stock routing modes such as
auto,eco,premium, andfree - model shortcuts
- client defaults for OpenClaw, n8n, CLI, and
opencode - purpose-/client-aware candidate lists you can multi-select instead of taking one hardcoded set
- conservative merges into an existing
config.yamlfor later provider additions
Useful flows:
./scripts/faigate-config-wizard --help
./scripts/faigate-config-wizard --purpose coding --client opencode --list-candidates
./scripts/faigate-config-wizard --current-config config.yaml --purpose coding --client opencode
./scripts/faigate-config-wizard --purpose coding --client opencode \
--select deepseek-chat,deepseek-reasoner,anthropic-claude > config.yaml
./scripts/faigate-config-wizard --current-config config.yaml --merge-existing \
--select openrouter-fallback,kilocode --write config.yaml
./scripts/faigate-config-wizard --current-config config.yaml --purpose coding --client opencode \
--apply recommended_add,recommended_replace,recommended_mode_changes \
--select kilocode,openrouter-fallback --select-profiles opencode --write config.yaml
./scripts/faigate-config-wizard --current-config config.yaml --purpose coding --client opencode \
--apply recommended_add,recommended_replace,recommended_mode_changes \
--select kilocode,openrouter-fallback --select-profiles opencode --dry-run-summary
./scripts/faigate-config-wizard --current-config config.yaml --purpose coding --client opencode \
--apply recommended_add,recommended_replace,recommended_mode_changes \
--select kilocode,openrouter-fallback --select-profiles opencode \
--write config.yaml --write-backup --backup-suffix .before-wizardIf you only need a compact refresher for the flags and example flows, ./scripts/faigate-config-wizard --help now prints the whole first-setup / update / dry-run / backup path directly in the CLI.
When a current config is present, the suggestion output now also flags client-profile mode deltas such as recommended_mode_changes, so you can see when n8n, openclaw, or opencode probably want a different default mode for the selected purpose.
faigate-onboarding-report now includes concrete OpenClaw, n8n, and CLI quickstart hints plus a staged provider-rollout view. Use it after every provider or client change to keep the deployment understandable for the next operator as well.
It now also includes provider-catalog alerts for:
- configured models that drift away from the curated recommendation
- providers that are not tracked yet
- catalog entries that have gone stale and need review
- volatile free-/BYOK-/marketplace-backed offer tracks
- mixed/community-backed catalog entries that deserve faster review
The same catalog can now also carry optional provider-discovery links for CLI or later browser surfaces. Those links can be operator-configured through env vars, but they are deliberately downstream of the recommendation itself: ranking stays performance-led and link-neutral.
Today that means:
faigate-onboarding-reportcan show the resolved provider discovery URLfaigate-doctorcan print the same disclosed link for configured providersfaigate-provider-discoverycan give one compact text or JSON view for later automation or browser work- that discovery helper can now also filter by
offer_track,link_source, ordisclosed_only - both surfaces also print the link-neutral policy state alongside the links
It also prints a client matrix:
- which client profiles exist
- whether they come from presets or custom config
- how they match traffic
- which routing hints they actually apply
If you want that client view without the full onboarding report, use:
./scripts/faigate-client-integrations
./scripts/faigate-client-integrations --matrix
./scripts/faigate-client-integrations --json --client n8n
./scripts/faigate-config-overview- define the provider in
config.yaml - set the required API key or local auth value in
.env - keep the fallback chain simple
Starter snippets:
- examples/provider-openai-compat.yaml
- examples/provider-openai-compat.env.example
- examples/provider-local-worker.yaml
- examples/provider-local-worker.env.example
- examples/provider-image-provider.yaml
- examples/provider-image-provider.env.example
- examples/provider-kilocode.yaml
- examples/provider-kilocode.env.example
- examples/provider-blackbox.yaml
- examples/provider-blackbox.env.example
- examples/faigate-multi-provider-stack.yaml
- check
GET /health - check
GET /v1/models - for
contract: local-worker, confirm thatGET /modelsworks on the worker - for
contract: image-provider, confirm that the upstream exposesPOST /images/generations
- use
POST /api/route - confirm the selected provider and attempt order
Repeat the same path before introducing more routing complexity.
If you want a fuller multi-provider starting point instead of enabling one block at a time, use examples/faigate-multi-provider-stack.yaml as a copy source and then trim it down to the providers that are actually available in your environment.
For many-provider rollouts, run the onboarding report after every provider change:
./scripts/faigate-onboarding-report
./scripts/faigate-onboarding-report --markdown
./scripts/faigate-onboarding-report --json
./scripts/faigate-onboarding-validateThe rollout section is intentionally staged:
- stage 1 primary: ready local/default chat providers
- stage 2 secondary: additional non-image providers
- stage 3 modality: image-capable providers
This keeps provider growth incremental instead of introducing chat, fallback, and modality changes all at once.
Prefer the standard OpenAI-compatible entry point.
Examples:
x-openclaw-sourceX-faigate-Client: n8nX-faigate-Client: codex
Keep these tags short and stable. The runtime now bounds routing-header values before they reach traces, client matrices, and rollout decisions.
Start with:
openclawn8ncli
Then tighten it only if the default is not good enough.
When the client set grows, use the client matrix from faigate-onboarding-report to catch profiles that only work through explicit overrides and still have no real match rule.
OpenClaw:
{
"baseUrl": "http://127.0.0.1:8090/v1",
"primary": "faigate/auto"
}Starter file: examples/openclaw-faigate.jsonc
Fuller deployment example: examples/openclaw-faigate-full.jsonc Full reference block: ../openclaw-integration.jsonc
Important:
- the model ids under
providers.faigate.modelsmust matchGET /v1/models - use
imageModel.primary: "faigate/auto"if fusionAIze Gate should pick the image backend - use
imageModel.primary: "faigate/<provider-id>"only when the image path should be pinned
Delegated / many-agent example:
n8n:
Base URL: http://127.0.0.1:8090/v1
Model: auto
Header: X-faigate-Client: n8n
CLI:
export OPENAI_BASE_URL=http://127.0.0.1:8090/v1
export OPENAI_API_KEY=localStarter files:
- examples/n8n-faigate-http-request.json
- examples/cli-faigate-env.sh
- examples/opencode-faigate.json
- examples/client-ai-native-app-profile.yaml
- examples/swe-af-faigate.env.example
- examples/paperclip-faigate.env.example
- examples/ship-faster-faigate.env.example
- examples/langchain-faigate.env.example
- examples/langgraph-faigate.env.example
- examples/agno-faigate.env.example
- examples/semantic-kernel-faigate.env.example
- examples/haystack-faigate.env.example
- examples/mastra-faigate.env.example
- examples/google-adk-faigate.env.example
- examples/autogen-faigate.env.example
- examples/llamaindex-faigate.env.example
- examples/crewai-faigate.env.example
- examples/pydanticai-faigate.env.example
- examples/camel-faigate.env.example
The first post-1.0 framework wave keeps every client on the same OpenAI-compatible entry point and varies only the stable client tag:
SWE-AF->X-faigate-Client: swe-afpaperclip->X-faigate-Client: paperclipship-faster->X-faigate-Client: ship-fasterLangChain->X-faigate-Client: langchainLangGraph->X-faigate-Client: langgraph
Use the starter env files above first, then add explicit profile rules only if one framework needs different locality, provider, or cost behavior.
The second post-1.0 starter wave extends the same pattern to:
Agno->X-faigate-Client: agnoSemantic Kernel->X-faigate-Client: semantic-kernelHaystack->X-faigate-Client: haystackMastra->X-faigate-Client: mastraGoogle ADK->X-faigate-Client: google-adk
Keep these on the shared OpenAI-compatible path first. The right time to split them into more specialized profiles is after traces and stats show a real difference in locality, fallback, or cost behavior.
The third post-1.0 starter wave closes the biggest remaining framework gaps from the matrix:
AutoGen->X-faigate-Client: autogenLlamaIndex->X-faigate-Client: llamaindexCrewAI->X-faigate-Client: crewaiPydanticAI->X-faigate-Client: pydanticaiCAMEL->X-faigate-Client: camel
Treat these the same way as the earlier waves: stay on the shared OpenAI-compatible endpoint first, then split profiles only when traces and route previews show a real need.
Keep hooks opt-in and narrow. Good uses are:
X-faigate-Prefer-Providerfor one explicit provider preferenceX-faigate-Locality: local-onlyfor private or worker-local trafficX-faigate-Profilefor a one-request profile override
Use:
POST /api/routePOST /api/route/imageGET /api/traces
When the stack grows, avoid changing everything at once.
Recommended rollout:
- stabilize the provider set
- group clients into a small number of profiles
- introduce policies only for real constraints
- keep route debugging enabled through traces and stats
fusionAIze Gate v2.0.0 brings deeper shell parity between the CLI and dashboard. Key enhancements:
All faigate-stats commands now generate matching dashboard URLs:
# Generate URL for current view/filters
faigate-stats --link --view routes --provider deepseek-chat
# Copy to clipboard
faigate-stats --link --view routes --provider deepseek-chat --copyFilters work across all CLI commands:
--provider– filter by provider id--modality– filter by modality (chat,image,code)--client-profile– filter by client profile (opencode,n8n,openclaw)--layer– filter by routing layer (policy,profile,static,heuristic)
The CLI can analyze metrics and suggest relevant commands:
# Get command suggestions based on failure rates, provider concentration, costs, recent activity
faigate-stats --suggestNew faigate-config CLI provides safe config workflows:
# Preview config changes
faigate-config preview --provider xai --provider zai
# Show detailed diff
faigate-config diff config.yaml config.new.yaml
# Apply with backup and confirmation
faigate-config apply config.new.yaml --backup --confirm
# Validate syntax
faigate-config validate config.yamlAutomatically detect local AI workers:
# Scan for Ollama, vLLM, LM Studio, LiteLLM
faigate-config discover
# JSON output for automation
faigate-config discover --jsonFor each detected worker, the command suggests a ready‑to‑copy provider block for config.yaml.
The provider catalog now includes 43 curated entries covering all LLM AI Router custom endpoints:
- xAI / Grok, Z.AI / GLM, Mistral, Groq, HuggingFace Inference
- Moonshot AI / Kimi, MiniMax, Volcano Engine / Doubao, BytePlus
- Qwen, OpenAI Codex, OpenCode Zen, Cerebras, GitHub Copilot
- Synthetic, Kimi Coding, Vercel AI Gateway
- KiloCode model‑level lanes:
kilo‑auto/frontier,/balanced,/free
View the full catalog:
faigate-stats --link --view catalogCurrent state:
- manual updates via Git or
faigate-update - cached release update checks via
GET /api/updateandfaigate-update-check - optional eligibility reporting and helper-driven apply flow via
faigate-auto-update - tag-driven release artifacts for Python distributions and container images
- publish dry-run workflow for Python packaging and GHCR container builds
Planned state:
- scheduled use of
faigate-auto-update --applyin controlled environments
This remains opt-in. fusionAIze Gate does not self-schedule or mutate the checkout over HTTP.
Use scheduling only after you are comfortable with the manual path:
./scripts/faigate-update-check
./scripts/faigate-auto-updateRecommended systemd path:
- review examples/faigate-auto-update.service
- review examples/faigate-auto-update.timer
- install them under
/etc/systemd/system/ - enable the timer only after
auto_update.enabled: trueis set deliberately
Minimal flow:
sudo install -m 644 docs/examples/faigate-auto-update.service /etc/systemd/system/faigate-auto-update.service
sudo install -m 644 docs/examples/faigate-auto-update.timer /etc/systemd/system/faigate-auto-update.timer
sudo systemctl daemon-reload
sudo systemctl enable --now faigate-auto-update.timer
sudo systemctl list-timers faigate-auto-update.timerCron remains possible for simpler hosts. The example is in examples/faigate-auto-update.cron, but systemd timers are usually the safer default because they provide visibility and persistence.