Install any skill in seconds. Free to start, no credit card required.
Get Started Free →workweave/test-claude-locally
Run the Weave router locally in docker compose and drive it with `claude -p` to reproduce and verify routing/translation behavior for a specific upstream model (e.g. GLM-5.1, DeepSeek, Qwen).
Passed 13 of 17 test cases with the skill, and 4 of 17 without it.
and 17 more in the full report
13 fixed4 passed either way4 still failing1 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 12 test cases the skill fixed. Same model, same prompt, with and without the skill.
I sent a simple curl request with 'say hi' and max_tokens=10 to test the usage bypass path, but the router logs show the request hit a refusal path instead of usage bypass. Why did short prompt fail, and how must the request body be structured?
| Checked | Without skill | With skill |
|---|---|---|
| Explains that short prompts are classified as Probe, Classifier, or TitleGen which short-circuit before usage bypass. | Missed | Passed |
| Instructs adding a tools definition and setting max_tokens to at least 4096 in the request body. | Missed | Passed |
The instructions your model reads when the skill loads.
For an automated pre-merge regression net (fixture-driven, asserts caching/streaming/decision-headers against real Anthropic), run
make smoke— see docs/SMOKE.md. This skill is the interactive counterpart: stand the stack up by hand and drive it withclaude -pto reproduce or verify a one-off bug.
Stand up the router in docker compose, point a one-off claude -p session at it via --settings, and read the local server logs to confirm behavior. Two upstream modes: the real provider API (needs a working key + credits) or a mock upstream that emits an exact SSE shape (deterministic, no credits).
~/.claude/settings.json env overrides inherited env vars. Setting ANTHROPIC_BASE_URL in the shell does NOT redirect claude — settings.json wins and the request silently goes to prod. Always redirect with claude --settings <file> (see scripts/local-settings.json). Never edit the user's global ~/.claude.json or ~/.claude/settings.json — that breaks their live session.claude -p is stateless across invocations. A standalone /force-model call does not persist to the next claude -p. Put /force-model <model> as the first line of the SAME prompt that contains the task.model field and routes via the cluster scorer. The ONLY way to pin a specific model is /force-model through a Claude Code session (raw curl cannot).docker-compose.override.yml (see workflow). The server still reaches the emulator over the compose network.- [ ] 1. Bring up the stack (handle port 8085)
- [ ] 2. Seed an API key
- [ ] 3. Choose upstream: real provider OR mock
- [ ] 4. Write a one-off local-settings.json
- [ ] 5. Drive with `claude -p --settings`, forcing the target model
- [ ] 6. Read local logs to verify behavior
- [ ] 7. Clean up
cd <router-repo>
# Drop the pubsub host-port binding to avoid an 8085 conflict:
cat > docker-compose.override.yml <<'EOF'
services:
pubsub-emulator:
ports: !reset []
EOF
docker compose up -d --build server # --build picks up code changes
until curl -sf http://localhost:8080/health >/dev/null; do sleep 2; done
test cases passed, vs 4 / 17 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.