- one provider URL
- one inbound key
- virtual models instead of vendor juggling
- routing, fallback, cost control, and safety policy handled centrally
Recommended OpenClaw setup
Point OpenClaw at Astrolabe as a custom provider and use the Responses API.Provider values
- Base URL:
http://localhost:3000/v1 - API type:
openai-responses - API key: same value as
ASTROLABE_API_KEY - Primary model:
astrolabe/auto
Why this is the default path
OpenClaw keeps its normal tool execution and UX layer. Astrolabe adds:- static lane manifests
m27as the main workhorse- specialist promotion for
kimiK25,kimiThinking,glm47Flash, andglm5 - Responses-first compatibility
- chat-completions compatibility for legacy clients
- provider failover through OpenRouter
- tool-policy and untrusted-content guardrails
- sticky executor continuity across active sessions when OpenClaw sends the right metadata
Suggested model choices for OpenClaw
Most users should expose only Astrolabe virtual models inside OpenClaw:astrolabe/autoastrolabe/codingastrolabe/researchastrolabe/visionastrolabe/strict-jsonastrolabe/cheapastrolabe/safe
Typical request flow
- OpenClaw sends a Responses request to Astrolabe.
- Astrolabe classifies category, complexity, and route modifiers.
- Astrolabe resolves a lane and candidate model set from its static manifest.
- Astrolabe executes against OpenRouter.
- Astrolabe verifies the result, checks tool policy, and may escalate once.
- OpenClaw receives the final response plus
x-astrolabe-*routing headers.
Recommended metadata hints
Astrolabe stays stateless, so the best OpenClaw integration sends routing hints on each turn undermetadata.astrolabe:
last_modellast_lanesession_phasesticky_executortool_capabilitiesallow_preview
session_phase=activewhile the agent is in a real work loopsticky_executor=trueunless you intentionally want Astrolabe to re-pick aggressivelyallow_preview=falseunless you explicitly want preview research or vision branches
tool_capabilities should map tool names to capability labels like:
read_localread_remoteworkspace_writeremote_writeexternal_commscredential_accessfinancial_or_destructivecode_exec
Cross-session continuity
Astrolabe OSS is stateless. If you open a brand new OpenClaw session, Astrolabe will only see whatever OpenClaw sends in that new request. That means:- seeing an older transcript in the OpenClaw UI does not by itself make the model remember it
- staying in the same session preserves conversational context because OpenClaw keeps sending prior turns
- starting a different session requires OpenClaw memory, not Astrolabe state
- keep using the same session when you want short-term conversational continuity
- enable the bundled
session-memoryhook so/newand/resetsave session summaries into memory - configure OpenClaw memory/session retrieval so new sessions can load relevant prior memories, not just display old transcripts in the UI
What to inspect in debugging
When a turn behaves unexpectedly, inspect:x-astrolabe-categoryx-astrolabe-lanex-astrolabe-initial-modelx-astrolabe-final-modelx-astrolabe-route-labelx-astrolabe-escalatedx-astrolabe-sticky-appliedx-astrolabe-sticky-reasonx-astrolabe-verification-skippedx-astrolabe-transport-fallback-only
astrolabe metadata block.
Notes
POST /v1/responsesis the primary API.POST /v1/chat/completionsstill works for compatibility.- If you are handling untrusted content with tools enabled, keep Astrolabe’s safety gate on.
- In production, set
ASTROLABE_API_KEY. Astrolabe refuses to start in production without it.

