Agent skill

Weave Router Local Testing

by weave-os in weave-os/router

Stands up the Weave model router in Docker Compose and drives it with claude -p against a real or mocked upstream to reproduce and verify routing and streaming behavior.

Apache-2.0Auto-check: notesDevOps & Cloud

Install Weave Router Local Testing

skills CLI
$ npx skills add weave-os/router --skill test-claude-locally -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install weave-os/router test-claude-locally --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/weave-os/router.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/test-claude-locally .claude/skills/test-claude-locally && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
test-claude-locally
GitHub stars
5.6k
Token cost
~3.1k tokens
SKILL.md length
1,210 words
Files
2 (incl. scripts)
Skills in repo
19
Repo updated
First seen
Licence
Apache-2.0

At a glance

Stands up the Weave model router in Docker Compose and drives it with claude -p against a real or mocked upstream to reproduce and verify routing and streaming behavior.

  • Works in 7 steps: Bring up the stack → Seed an API key → Choose the upstream → …
  • Verifying a router fix end to end against a specific upstream model
  • SKILL.md covers Critical gotchas (read first), Workflow, Testing the balance gate /… and Notes, plus 1 more section
  • Runs Python scripts from its folder; calls docker, claude and python3; needs FIREWORKS_API_KEY and ANTHROPIC_API_KEY

What it does

This is the interactive counterpart to an automated pre-merge smoke test: it brings up the router in docker compose, points a one-off claude -p session at it through a --settings file rather than environment variables, and reads the local server logs to confirm behavior for a specific upstream model such as GLM-5.1, DeepSeek or Qwen. Two upstream modes are supported, a real provider API that needs working credentials and credits, or a deterministic mock upstream emitting an exact SSE shape with no credits required.

Several gotchas are called out up front: ~/.claude/settings.json's env block overrides shell environment variables, so setting ANTHROPIC_BASE_URL in the shell silently fails and the request still reaches production unless --settings <file> is used, and the user's own global Claude Code config must never be edited for this; claude -p is stateless across invocations, so a /force-model directive must be the first line of the same prompt as the actual task, not a separate call.

The router also ignores the request's model field entirely and routes through its own cluster scorer, so /force-model through a Claude Code session is the only way to pin a model, not a raw curl call; and the monorepo's pubsub emulator may already hold host port 8085, worked around with a docker-compose.override.yml that drops the router's host binding while still reaching the emulator over the compose network.

When your agent uses it

  • Verifying a router fix end to end against a specific upstream model
  • Reproducing a production routing bug locally
  • Confirming a model's streaming behavior such as tool-call suppression or loop breaks
  • Testing a /force-model route without touching global Claude Code config

Example prompts

  • “Reproduce the GLM-5.1 streaming bug locally using the mock upstream.”
  • “Force-model to deepseek and verify the router logs show it was pinned correctly.”
  • “Bring up the router locally and work around the port 8085 conflict.”

Requirements

  • Docker Compose
  • The claude CLI
  • A real upstream API key and credits, or the mock upstream script

Workflow steps

7 steps, taken from the step headings in SKILL.md.

  1. Bring up the stack
  2. Seed an API key
  3. Choose the upstream
  4. One-off local settings
  5. Drive it
  6. Verify via logs
  7. Clean up

What it can do on your machine

Read from SKILL.md and the folder at commit 37d585b. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 1 file in scripts/ (Python), which the agent can run.

    Shell commands in SKILL.md call:

    • docker
    • claude
    • python3
    • curl
    • make
    • psql
    • git

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use docker, curl and git, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • FIREWORKS_API_KEY
    • ANTHROPIC_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Weave Router Local Testing loads about 3.1k tokens when it runs. Until then it costs about 119 tokens; SKILL.md has 1,210 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~119
When it runs · the whole SKILL.md, loaded when a task matches
~3.1k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteMentions a .env fileSKILL.md:63
    al provider** — set the provider key in `.env.local` (e.g. `FIREWORKS_API_KEY=...`) and restart `docker compose up -d se
  • NoteMentions a .env fileSKILL.md:148
    comes from `ROUTER_CLUSTER_VERSION` in `.env.local`; it may differ from prod, which is why `/force-model` (not the scor

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from weave-os/router at commit 37d585b, republished under its Apache-2.0 licence (© weave-os). 1,210 words, ~3,074 tokens.

Download SKILL.mdSave it as .claude/skills/test-claude-locally/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
test-claude-locally
description
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). Use when verifying a router fix end-to-end, reproducing a prod routing bug, confirming a model's streaming behavior (nudges, tool-call suppression, loop/no-progress breaks), or testing a `/force-model` route — without touching the user's global Claude Code config.

name: test-claude-locally description: Run the local Docker Compose router with a seeded installation and Claude CLI against real or mock upstreams to verify routing and log behavior.

Testing the router locally

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 with claude -p to 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).

Critical gotchas (read first)

  • ~/.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.
  • The router ignores the request's 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).
  • Port 8085 conflict. The monorepo's pubsub emulator may already own host port 8085. Drop the router's host binding with a docker-compose.override.yml (see workflow). The server still reaches the emulator over the compose network.
  • No credits / no key = no reproduction. If the real upstream returns an error (e.g. OpenRouter "Insufficient credits"), use the mock-upstream path instead.

Workflow

- [ ] 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
1. Bring up the stack
bash
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

The override file is gitignored-by-intent scaffolding — delete it in cleanup.

2. Seed an API key
bash
docker compose run --rm seed

Copy the rk_... key it prints.

3. Choose the upstream

Real provider — set the provider key in .env.local (e.g. FIREWORKS_API_KEY=...) and restart docker compose up -d server. Confirm the boot log shows <Provider> provider enabled with the real base_url. Use this to confirm a model genuinely produces the behavior.

Mock upstream — for a deterministic, credit-free repro of a precise SSE shape. Point the provider's base URL at a local mock and restart:

bash
python3 scripts/mock_openai_upstream.py >/tmp/mock.log 2>&1 &   # serves :8099
# In docker-compose.override.yml under `server:`, add:
#   environment:
#     FIREWORKS_BASE_URL: http://host.docker.internal:8099/v1
#     FIREWORKS_API_KEY: sk-mock
#   extra_hosts: ["host.docker.internal:host-gateway"]
docker compose up -d server

Edit the mock's emitted chunks to match the upstream shape you're reproducing. Provider→env-var names live in internal/providers/provider.go; base-URL overrides are read in cmd/router/main.go (<PROVIDER>_BASE_URL).

4. One-off local settings
bash
cat > /tmp/local-settings.json <<EOF
{ "env": {
  "ANTHROPIC_BASE_URL": "http://localhost:8080",
  "ANTHROPIC_CUSTOM_HEADERS": "X-Weave-Router-Key: rk_REPLACE_ME"
}}
EOF
5. Drive it
bash
cd <scratch-dir-with-files-to-act-on>
env -u CLAUDE_CODE_SESSION_ID -u ANTHROPIC_BASE_URL -u ANTHROPIC_CUSTOM_HEADERS \
  claude -p 'First send exactly: /force-model z-ai/glm-5.1
Then <task that requires tool use>, then stop.' \
  --settings /tmp/local-settings.json --max-turns 10 --verbose
6. Verify via logs

The decision + completion log per action (one ProxyMessages complete) carries the signals you need. Strip ANSI first:

bash
docker compose logs server --since=3m 2>&1 | sed -E 's/\x1b\[[0-9;]*m//g' \
  | grep 'ProxyMessages complete' | grep 'decision_model=z-ai/glm-5.1'

Useful fields: decision_model, decision_provider, upstream_finish_reason, suppressed_tool_calls, text_only_turn_nudged, tool_use_blocks, resp_stop_reason, stop_reason_demoted. Also grep for recovery nudge, tool-call loop, no-progress.

Confirm the model was actually served before drawing conclusions:

bash
docker compose logs server --since=3m 2>&1 | sed -E 's/\x1b\[[0-9;]*m//g' \
  | grep 'ProxyMessages complete' | grep -oE 'decision_model=[^ ]+' | sort | uniq -c

If you only see other models, /force-model didn't take — recheck step 5.

7. Clean up
bash
pkill -f mock_openai_upstream.py 2>/dev/null
rm -f docker-compose.override.yml /tmp/local-settings.json
# `docker compose down` if you want to stop the stack

Testing the balance gate / subscription usage-bypass (managed billing)

For fixes to internal/billing + internal/server/middleware/balance_check.go + the usage-bypass path (internal/proxy/usage_bypass.go), the setup differs from the model-behavior workflow above:

  • The balance gate only attaches in managed mode with billing enabled. Set ROUTER_DEPLOYMENT_MODE=managed on the server service. Billing auto-enables when the router schema's billing tables exist (they do after migrate), logged as Router billing enabled. In default selfhosted mode WithBalanceCheck is never wired and none of this triggers.
  • The Anthropic provider has no ANTHROPIC_BASE_URL override (unlike Fireworks/Together/etc.) — cmd/router/main.go hardcodes anthropic.DefaultBaseURL. To point Anthropic at a mock, temporarily edit that line to config.GetOr("ANTHROPIC_BASE_URL", anthropic.DefaultBaseURL), rebuild, and revert it after testing (don't ship it in the fix PR). The boot log line still prints DefaultBaseURL cosmetically — verify the mock is actually hit via the mock's own logs, not the boot log.
  • Requests must be MainLoop-shaped to reach the usage-bypass decision. Short prompts (small max_tokens, no tools) classify as Probe/Classifier/TitleGen — all hard-pinned, short-circuiting before the usage-bypass and scorer branches. A trivial "say hi" will wrongly hit the refusal path. Use a realistic turn: tools present + max_tokens>=4096 + a normal user message. Confirm turn_type=main_loop in the turnloop classified log before trusting the result.
  • Drive with raw curl on the production router-key path — no claude binary needed, and it lets you pin the requested model (the usage-bypass path serves the requested model verbatim, so no /force-model needed here):
    bash
    curl -sS -N -D /tmp/h.txt -X POST http://localhost:8080/v1/messages \
      -H "Authorization: Bearer $RK" \
      -H "X-Weave-Anthropic-Subscription: sk-ant-oat01-anything" \
      -H "anthropic-version: 2023-06-01" -H "Content-Type: application/json" \
      -d '{"model":"claude-sonnet-4-5","max_tokens":4096,"stream":true,"tools":[{"name":"Bash","input_schema":{"type":"object"}}],"messages":[{"role":"user","content":"<realistic multi-sentence task>"}]}'
    A fake sk-ant-oat... token is enough for router-side classification; the mock doesn't validate it.
  • Set DB state directly (host psql -h localhost -p 5433 -U router -d router, password router, SET search_path TO router): UPDATE model_router_installations SET usage_bypass_enabled=true WHERE external_id='__router_admin__'; and upsert organization_credit_balance with balance_usd_micros below SubscriptionOverdraftFloorMicros (−5_000_000). Assert no debit via SELECT count(*) FROM organization_credit_ledger WHERE organization_id='__router_admin__'; before/after.
  • Deterministic mock that branches on the requested model is the cleanest way to drive both the serve path and the refusal path from one server: return 200 SSE for one model and 429 for another (the usage-bypass path forwards the requested model verbatim, so branching on model in the request body is reliable).
  • What good looks like: header X-Router-Decision: usage_bypass, the depleted-credits warning injected as content-block index 0 (real content re-indexed to 1), log Balance past subscription overdraft floor: serving subscription-only. Retryable upstream error → log Subscription-only bypass hit retryable error; refusing instead of paid reroute → HTTP 402. No subscription header below floor → insufficient_credits 402 that never logs ProxyMessages start.
Show full SKILL.md (336 more words)Show less

Notes

  • Local cluster version comes from ROUTER_CLUSTER_VERSION in .env.local; it may differ from prod, which is why /force-model (not the scorer) is the reliable way to hit one model.
  • GLM-5.1's primary binding is Together (then Fireworks, then OpenRouter) — see internal/router/catalog/catalog.go.
  • To confirm a deploy contains a given router commit: the prod Cloud Run revision name maps to a monorepo commit; git ls-tree <monorepo-commit> router-internal/router shows the pinned router submodule SHA.

Content-capture and stdout privacy checks

  • Self-hosted capture defaults to off. For a positive control, set WV_CAPTURE_CONTENT=full on the Compose server and leave the seeded installation's content_capture_mode NULL. Deployment off wins over installation full; installation off wins over deployment full.
  • Direct SQL changes to router.model_router_installations.content_capture_mode do not invalidate cached auth. Restart the server after a direct update, or use the admin endpoint that publishes invalidation.
  • For headless requests, x-weave-force-model: <catalog model> pins the target without a slash-command exchange. Supply it alongside X-Weave-Router-Key through the one-off Claude settings. --settings accepts inline JSON as well as a file, allowing locally seeded keys to remain in shell memory.
  • Newer Claude versions may prepend environment context to the main user message. Its last_preview can therefore show environment text rather than the task; title-generation requests may contain the task canary. Add a raw authenticated Messages request when exact preview equality matters.
  • To provoke a real Anthropic 400 through either Messages or Chat Completions, use a tool schema with an invalid nested JSON Schema type, e.g. {"type":"object","properties":{"canary":{"type":"not_a_valid_json_schema_type"}}}. Verify upstream_status=400 and a nonempty error body with capture on before asserting it is blank off. Unknown model pins can fail locally, invalid tool names are sanitized, and invalid caller API keys are ignored on the router-keyed paid-credential path.
  • Search the entire container log for unique off-mode canaries, not only completion records. Include start records and conversation-tail diagnostics. Save logs before recreating the container, which replaces its log history.
Devin Secrets Needed
  • ANTHROPIC_API_KEY for real Anthropic checks. Pass it through the process environment to Compose; do not copy it into tracked files or plaintext test artifacts.

© weave-os, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file (scripts) in .agents/skills/test-claude-locally of weave-os/router.

  • SKILL.md
  • scripts/mock_openai_upstream.py

Open the folder on GitHubat commit 37d585b

Compare with similar skills

Weave Router Local Testing next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Weave Router Local Testing compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Weave Router Local Testing this skillweave-os/router5.6k—~3.1kAutomated safety check: NotesApache-2.0
LLM Council on Fireworks AIdair-ai/dair-academy-plugins614—~5kAutomated safety check: NotesMIT
slime RL Post-TrainingOrchestra-Research/AI-Research-SKILLs13k4 repos~2.8kAutomated safety check: PassMIT
Deepseek Harness Dockerrunzhliu/deepseek-harness-docker110—~2.7kAutomated safety check: NotesMIT
Cloud TestFreakStudioCN/mpy-hardware-extension154—~1.7kAutomated safety check: PassCustom licence
Cliproxy Newapi Stackmajiayu000/spellbook287—~1.7kAutomated safety check: WarnMIT

Similar skills

  • LLM Council on Fireworks AI

    dair-ai/dair-academy-plugins

    Has several open-weight models answer a question, rank each other's anonymized answers, then lets a chairman model write the final response through Fireworks AI.

    614 GitHub stars~5k tokensUpdated 2 mo ago
    AI & LLM EngineeringAuto-check: notes
  • slime RL Post-Training

    Orchestra-Research/AI-Research-SKILLs

    Guides reinforcement-learning post-training of LLMs with slime, which pairs Megatron-LM training with SGLang rollouts, including GRPO runs on GLM, Qwen3 and Llama 3 models.

    13k GitHub starsUsed in 4 repos~2.8k tokens
    AI & LLM EngineeringAuto-check passed
  • Deepseek Harness Docker

    runzhliu/deepseek-harness-docker

    Deploy, configure, verify, upgrade, and troubleshoot DeepSeek Harness with the community Docker, Docker Compose, rootless Podman, and Helm runtime, including the built-in Chromium/noVNC browser…

    110 GitHub stars~2.7k tokensUpdated yesterday
    DevOps & CloudAuto-check: notes
  • Cloud Test

    FreakStudioCN/mpy-hardware-extension

    用本地前端插件连云端后端做端到端测试 / test the local VS Code extension against the deployed cloud backend.

    154 GitHub stars~1.7k tokensUpdated 12 days ago
    DevOps & CloudAuto-check passed
  • Cliproxy Newapi Stack

    majiayu000/spellbook

    在已经过独立验证的 CLIProxyAPI upstream 之上部署 NewAPI 计费层,把 Codex/Claude/Gemini/Qwen 等订阅账号包装成可计费的 OpenAI 兼容 API。本 Skill 不负责新建裸 CLIProxyAPI;负责 NewAPI Docker 部署、容器到宿主桥接、模型计费倍率、参数化额度修正、多账号 OAuth…

    287 GitHub stars~1.7k tokensUpdated 2 days ago
    AI & LLM EngineeringAuto-check: warnings
  • Serves AI models on AMD Instinct GPU hardware using vLLM. An agent skill from amd/skills.

    408 GitHub stars~4k tokensUpdated yesterday
    AI & LLM EngineeringAuto-check: notes

More from weave-os/router

All 19 skills in this repo
  • Local test harness for the Weave router: a docker compose stack plus codex exec runs that confirm how Codex requests are routed, translated and marked.

    5.6k GitHub stars~4.7k tokensUpdated yesterday
    Auto-check: notes
  • PR Merge Ready

    weave-os/router

    Works through every review comment on a pull request in one pass, fixes what it can, escalates human decisions and keeps CI churn to a single push.

    5.6k GitHub stars~10k tokensUpdated yesterday
    Auto-check passed
  • Correlates a Claude Code session's local transcript with a model router's production cloud logs to explain why a specific response rendered the way it did.

    5.6k GitHub stars~2.9k tokensUpdated yesterday
    Auto-check passed
  • Installs a language server such as gopls, typescript-language-server, pyright or rust-analyzer and, with explicit confirmation, its underlying toolchain so the lsp tool can use it.

    5.6k GitHub stars~745 tokensUpdated yesterday
    Auto-check: notes
  • Correlates a Codex CLI session's local transcript with a model router's production logs to explain why a reply rendered the way it did.

    5.6k GitHub stars~4.5k tokensUpdated yesterday
    Auto-check: warnings
  • Shows when to answer a code question through a real language server instead of grep, covering definitions, references, hover, outlines, and errors.

    5.6k GitHub stars~794 tokensUpdated yesterday
    Auto-check passed

Questions about Weave Router Local Testing

What does Weave Router Local Testing do?

Stands up the Weave model router in Docker Compose and drives it with claude -p against a real or mocked upstream to reproduce and verify routing and streaming behavior. 1, DeepSeek or Qwen. Two upstream modes are supported, a real provider API that needs working credentials and credits, or a deterministic mock upstream emitting an exact SSE shape with no credits required.

When should I use Weave Router Local Testing?

Weave Router Local Testing fits situations like: verifying a router fix end to end against a specific upstream model; reproducing a production routing bug locally; confirming a model's streaming behavior such as tool-call suppression or loop breaks; testing a /force-model route without touching global Claude Code config.

How do I install Weave Router Local Testing in Claude Code?

Run `npx skills add weave-os/router --skill test-claude-locally -a claude-code`. Or copy the skill folder (.agents/skills/test-claude-locally in weave-os/router) into .claude/skills/test-claude-locally in your project. Claude Code loads it when a task matches its description.

How do I install Weave Router Local Testing in Codex?

Run `npx skills add weave-os/router --skill test-claude-locally -a codex`. Or copy the skill folder (.agents/skills/test-claude-locally in weave-os/router) into .agents/skills/test-claude-locally in your project. Codex loads it when a task matches its description.

Can I use Weave Router Local Testing in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add weave-os/router --skill test-claude-locally -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/test-claude-locally, .gemini/skills/test-claude-locally, .github/skills/test-claude-locally and .opencode/skills/test-claude-locally in your project.

What does Weave Router Local Testing need to run?

Going by SKILL.md and its folder, Weave Router Local Testing needs Python for the scripts in its folder, the command-line tools its instructions call (docker, claude, python3, curl, make and psql) and credentials named FIREWORKS_API_KEY and ANTHROPIC_API_KEY. Our summary lists: Docker Compose; The claude CLI; A real upstream API key and credits, or the mock upstream script.

Does Weave Router Local Testing access the network?

SKILL.md contains no URLs. Its commands use docker, curl and git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Weave Router Local Testing safe to install?

Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Weave Router Local Testing use?

Weave Router Local Testing is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Weave Router Local Testing use?

About 3.1k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Weave Router Local Testing?

Skills that share tags, products or a category with Weave Router Local Testing: LLM Council on Fireworks AI (dair-ai/dair-academy-plugins, 614 stars), slime RL Post-Training (Orchestra-Research/AI-Research-SKILLs, 13k stars), Deepseek Harness Docker (runzhliu/deepseek-harness-docker, 110 stars) and Cloud Test (FreakStudioCN/mpy-hardware-extension, 154 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Weave Router Local Testing?

weave-os (a GitHub organization) maintains it in weave-os/router, which has 5,578 GitHub stars. The repository holds 19 skills in this directory. The repository was last updated on October 10, 2026.

Source: weave-os/router on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.