Agent skill

Test Weave Router with Codex

by weave-os in weave-os/router

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.

Apache-2.0Auto-check: notesTesting & QA

Install Test Weave Router with Codex

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

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

GitHub CLI
$ gh skill install weave-os/router test-codex-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-codex-locally .claude/skills/test-codex-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-codex-locally
GitHub stars
5.6k
Token cost
~4.7k tokens
SKILL.md length
1,989 words
Files
2 (incl. scripts)
Skills in repo
19
Repo updated
First seen
Licence
Apache-2.0

At a glance

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.

  • Works in 7 steps: Bring up the stack → Seed an API key → Choose the upstream → …
  • Verifying a router fix end to end for Codex's Responses API path
  • SKILL.md covers Critical gotchas (read first), Workflow and Notes
  • Runs Python scripts from its folder; calls codex, docker and curl; reaches chatgpt.com; needs OPENAI_API_KEY and FIREWORKS_API_KEY

What it does

The agent stands up the router in docker compose, points a one-off codex exec at it through a throwaway CODEX_HOME directory, and reads the local server logs to confirm behavior. The user's real Codex config and auth files are never edited; the temporary directory gets its own config and, when ChatGPT OAuth is needed, a copy of the auth file.

Two upstream modes exist: the real provider API, which needs a working key and credits plus a ChatGPT login for native GPT models, or a bundled mock upstream script that emits an exact SSE shape deterministically without credits. Gotchas include requires_openai_auth needing to be true, Codex always sending a ChatGPT token so the router treats it as a subscription, and a flag that forces the prepaid translation path instead. It is the interactive counterpart to an automated smoke test and to a sibling skill for Claude Code.

When your agent uses it

  • Verifying a router fix end to end for Codex's Responses API path
  • Reproducing a production Codex routing bug locally
  • Checking routing markers, force-model or subscription passthrough behavior
  • Testing a force-model route without touching the global Codex config

Example prompts

  • “Bring up the router in docker compose and run codex exec against the mock upstream.”
  • “Reproduce the routing-marker bug with a throwaway CODEX_HOME.”
  • “Test the force-model route and show me the router logs.”

Requirements

  • docker compose
  • The Codex CLI
  • A provider key and credits, or the bundled mock upstream

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. Throwaway CODEX_HOME
  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 8e8ebe6. 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:

    • codex
    • docker
    • curl
    • python3
    • make
    • claude
    • git

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

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • chatgpt.com

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

  • Credentials

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

    • OPENAI_API_KEY
    • FIREWORKS_API_KEY

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

Context cost

Test Weave Router with Codex loads about 4.7k tokens when it runs. Until then it costs about 111 tokens; SKILL.md has 1,989 words of instructions outside code blocks.

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

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:77
    al provider** — set the provider key in `.env.local` (e.g. `OPENAI_API_KEY=...`, `FIREWORKS_API_KEY=...`) and restart `d
  • NoteMentions a .env fileSKILL.md:249
    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 8e8ebe6, republished under its Apache-2.0 licence (© weave-os). 1,989 words, ~4,687 tokens.

Download SKILL.mdSave it as .claude/skills/test-codex-locally/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
test-codex-locally
description
Run the Weave router locally in docker compose and drive it with `codex exec` to reproduce and verify routing/translation/marker behavior for Codex's Responses API path. Use when verifying a router fix end-to-end for Codex, reproducing a prod Codex routing bug, confirming routing-marker / force-model / subscription-passthrough behavior, or testing a `/force-model` route — without touching the user's global Codex config.

Testing the router locally with Codex

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 for the Codex CLI (codex exec): stand the stack up by hand and drive it via a throwaway CODEX_HOME so ~/.codex/config.toml is never edited.

Stand up the router in docker compose, point a one-off codex exec at it via CODEX_HOME, and read the local server logs to confirm behavior. Two upstream modes: the real provider API (needs a working key + credits, and for native GPT models a ChatGPT OAuth login) or a mock upstream that emits an exact SSE shape (deterministic, no credits).

The sibling skill test-claude-locally is the Claude Code (claude -p) counterpart. Stack bring-up and seeding are identical; only the client driver differs.

Critical gotchas (read first)

  • Never edit ~/.codex/config.toml or ~/.codex/auth.json. Those are the user's live Codex install (prod Weave Router + ChatGPT OAuth). Redirect with a throwaway CODEX_HOME directory that contains its own config.toml (and a copy of auth.json when ChatGPT OAuth is required). CODEX_HOME is how Codex finds config; there is no --settings flag equivalent to Claude Code.
  • requires_openai_auth = true is required. Codex 0.149 hangs or never issues a /v1/responses request if the custom provider uses requires_openai_auth = false or env_key. Copy ~/.codex/auth.json into the throwaway CODEX_HOME so Codex can attach the ChatGPT JWT + ChatGPT-Account-ID. The mock-router experiment that dropped OAuth never even hit the mock.
  • Codex always sends a ChatGPT JWT + ChatGPT-Account-ID. The local router will classify that as a Codex subscription (codexResponsesRequest → native Responses passthrough for OpenAI decisions). That is the path this skill is usually exercising (routing markers on verbatim GPT frames). To force the prepaid/BYOK translation path instead, flip subscription_routing_disabled=true on the seeded installation (see step 3).
  • codex exec is one-shot. A standalone /force-model call does not persist to the next codex exec (new session id every time, unless you codex exec resume). Put /force-model <model> as the first line of the SAME prompt. The leading space is load-bearing — Codex consumes unknown slash tokens as local commands; a leading space makes it a normal user message the router can parse.
  • Pin via config.toml, not codex -c. On Codex 0.149.1, -c 'model_providers.weave-local.http_headers."x-weave-force-model"="…"' did not merge into the outgoing request (no x-weave-force-model applied in server logs; the scorer served something else). Put "x-weave-force-model" = "<id>" on the same http_headers table in the throwaway config.toml (step 4). Confirm with docker compose logs server | grep 'x-weave-force-model applied' before drawing conclusions.
  • The router ignores the request's model field for routing (cluster scorer / pins win). Codex's -m gpt-5.5 only changes what Codex requests; /force-model or x-weave-force-model is the only way to pin a specific routed model. Native GPT family (gpt-5.6-sol / terra / luna, plus whatever -m Codex defaulted to) still goes through the scorer unless forced.
  • No GNU timeout on macOS. Drive codex exec directly. If a run hangs (Reading additional input from stdin... with no banner), Codex is waiting on a TTY/stdin — do not pipe into it, and make sure -s read-only (or --dangerously-bypass-approvals-and-sandbox) is set.
  • Docker may not be running. docker compose fails with a unix://…/.docker/run/docker.sock connect error if Desktop is stopped. open -a Docker and wait for docker info before step 1.
  • Other agents in the same workspace can docker compose down and delete /tmp scratch. If health suddenly 404s or CODEX_HOME vanishes mid-run, re-up the stack and reseed — do not reuse a key you can no longer /validate.
  • Session key is apiKeyID + first user message. Reusing the same curl/prompt body on the same key reuses the pin slot. routingMarkerFor then returns empty when PriorServedModel == ServedIdentity() (sticky same-model). For first-turn marker tests, seed a new key or change the first user text. Isolated /validate first: curl -sS -o /dev/null -w '%{http_code}\n' -H "X-Weave-Router-Key: $KEY" http://localhost:8080/validate must be 200.
  • Native GPT passthrough + tool-only emits a synthetic badge item. SetPassthroughBadge rewrites existing response.output_text.* events and, when a ChatGPT-subscription turn has no assistant text, inserts a leading assistant message item before native tool/reasoning output. Verify the badge in the Responses SSE/JSON; the Codex TUI can bury the first-turn line under tool chatter.
  • GET /v1/models 501 from a mock is fine. Codex probes <base_url>/models first, logs an HTML 501, then continues to POST /v1/responses. The real local router implements GET /v1/models as Anthropic passthrough, so this only shows up against a Python mock.
  • 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 + subscription vs prepaid path
- [ ] 4. Write a throwaway CODEX_HOME (copy auth.json)
- [ ] 5. Drive with `CODEX_HOME=... codex exec`, 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 — only the line under Weave Router key (shown once — store it now):. Seed stdout repeats the same token in curl examples and installer snippets; grep -oE 'rk_[A-Za-z0-9]+' can grab a stale key from an earlier seed in the same log. Always /validate before driving Codex:

bash
curl -sS -o /dev/null -w '%{http_code}\n' \
  -H "X-Weave-Router-Key: rk_REPLACE_ME" http://localhost:8080/validate
# expect 200

A 401 mid-session usually means the stack was torn down and reseeded (new installation, old token dead).

3. Choose the upstream

Real provider — set the provider key in .env.local (e.g. OPENAI_API_KEY=..., 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.

For an actual Codex subscription response, do not set ROUTER_CODEX_BASE_URL and do not run either mock. Remove that environment entry from docker-compose.override.yml, then rebuild the server:

bash
unset ROUTER_CODEX_BASE_URL  # also remove it from docker-compose.override.yml
docker compose up -d --build server

Use a throwaway CODEX_HOME containing a copy of the real ~/.codex/auth.json, with requires_openai_auth = true and X-App = "codex". The router detects the OAuth bearer plus ChatGPT-Account-ID and calls the real https://chatgpt.com/backend-api/codex/responses endpoint. This consumes the user's ChatGPT quota and requires a valid login; the mock is only for repeatable tests when that endpoint is unavailable or too expensive.

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. Codex talks to the router (POST /v1/responses); the mock sits behind the router as the upstream the router dispatches to:

bash
python3 .claude/skills/test-claude-locally/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

To exercise the production-equivalent native Codex subscription path, use a native Responses mock instead of the Chat Completions mock:

bash
python3 .claude/skills/test-codex-locally/scripts/mock_codex_upstream.py >/tmp/mock-codex.log 2>&1 &

Add this to the server service in docker-compose.override.yml:

yaml
environment:
  ROUTER_CODEX_BASE_URL: http://host.docker.internal:8099/v1
extra_hosts: ["host.docker.internal:host-gateway"]

This preserves real Codex subscription detection (OAuth bearer plus ChatGPT-Account-ID) and native Responses passthrough, while replacing only the outbound ChatGPT backend with a deterministic tool-only stream. The mock emits a function call, so the expected result is a synthetic marker message at output_index: 0, followed by the native tool at output_index: 1.

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). For local testing, ROUTER_CODEX_BASE_URL overrides only the subscription backend; the default remains https://chatgpt.com/backend-api/codex.

Subscription vs prepaid (important for marker / passthrough tests):

Codex will attach a ChatGPT JWT. The local router then treats the turn as a Codex subscription:

  • OpenAI-family decision → verbatim Responses passthrough (SetPassthrough / SetPassthroughBadge) to the Codex backend (or ROUTER_CODEX_BASE_URL in the native mock setup). This is the path the routing-marker-on-Codex work exercises.
  • Non-OpenAI decision → Chat Completions translation + ResponsesWriter.SetBadgeText.

To force the prepaid/BYOK translation path (no ChatGPT backend, uses OPENAI_API_KEY / other provider keys):

bash
docker compose exec postgres psql -U router -d router -c \
  "SET search_path TO router; UPDATE model_router_installations SET subscription_routing_disabled=true WHERE external_id='__router_admin__';"

Revert with subscription_routing_disabled=false when done.

Show full SKILL.md (763 more words)Show less
4. Throwaway CODEX_HOME

Do not point this at ~/.codex. A unique temp dir keeps the user's prod Weave + ChatGPT login intact.

bash
export CODEX_HOME=/tmp/weave-codex-local
rm -rf "$CODEX_HOME"
mkdir -p "$CODEX_HOME"
cp ~/.codex/auth.json "$CODEX_HOME/auth.json"   # required; see gotchas
cat > "$CODEX_HOME/config.toml" <<EOF
model_provider = "weave-local"

[model_providers.weave-local]
name = "Weave Router (local)"
base_url = "http://localhost:8080/v1"
wire_api = "responses"
requires_openai_auth = true
http_headers = { "X-Weave-Router-Key" = "rk_REPLACE_ME", "X-App" = "codex" }
EOF

Optional headers on the same http_headers table:

HeaderPurpose
"X-Weave-User-Email" = "dev@localhost"Attribution in local logs
"x-weave-force-model" = "z-ai/glm-5.1"Preferred pin. Put it here — do not rely on codex -c (see gotchas).
"X-Weave-Routing-Marker" = "off"Suppress the in-band routing marker

Do not set X-Weave-Router-Strategy unless you are deliberately pinning a strategy — omitting it uses the local deployment default (same rationale as install/install.sh --codex --local).

5. Drive it
bash
cd <scratch-dir-with-files-to-act-on>
CODEX_HOME=/tmp/weave-codex-local \
  codex exec --skip-git-repo-check -s read-only -C "$(pwd)" \
  ' First send exactly: /force-model z-ai/glm-5.1
Then <task that requires tool use>, then stop.'

Notes:

  • --skip-git-repo-check lets you run against /tmp or any non-git scratch dir.
  • -s read-only (or --dangerously-bypass-approvals-and-sandbox in a throwaway dir) avoids the interactive approval TUI, which codex exec otherwise cannot answer.
  • Leading space before /force-model is required (Codex otherwise treats it as an unknown local slash command and never sends it to the router).
  • codex exec prints provider: weave-local in its session banner when the throwaway config took; if it prints provider: weave it is still reading ~/.codex — CODEX_HOME was not exported.
  • Confirm Codex actually reached the local router: docker compose logs server --since=1m should show a POST /v1/responses (and ProxyOpenAIChatCompletion start).

Headless pin, no slash command — bake the header into the throwaway config.toml (step 4), then:

bash
CODEX_HOME=/tmp/weave-codex-local \
  codex exec --skip-git-repo-check -s read-only -C "$(pwd)" \
  "say hi and stop"

Do not use codex exec -c 'model_providers.weave-local.http_headers."x-weave-force-model"=…' as the pin. On 0.149.1 that override is silently dropped. After the run, grep 'x-weave-force-model applied' in server logs must fire; if it doesn't, Codex never sent the header.

6. Verify via logs

Codex ingress is ProxyOpenAIResponses → ProxyOpenAIChatCompletion. The decision + completion log per action is ProxyOpenAIChatCompletion complete. Strip ANSI first:

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

Useful fields: decision_model, decision_provider, decision_reason, routing_marker, hard_pinned, cross_format, turn_type, proxy_err, upstream_status. Also grep for recovery nudge, tool-call loop, no-progress. SetBadgeText is not logged — look at the Codex transcript / codex output for the ✦ **Weave Router** → <model> (or **Weave Router** — <model> legacy) line.

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 'ProxyOpenAIChatCompletion complete' | grep -oE 'decision_model=[^ ]+' | sort | uniq -c

If you only see other models, the pin didn't take. Recheck: (1) x-weave-force-model is in CODEX_HOME/config.toml (not only a -c flag), (2) server log has x-weave-force-model applied, (3) leading space on in-prompt /force-model if you used that path. Codex's session banner model: gpt-5.6-sol is what Codex requested, not what the router served.

Routing-marker specific checks (the usual reason to use this skill):

  • Cross-format (non-OpenAI decision, or prepaid OpenAI): first assistant text is ✦ **Weave Router** → <model> · <reason>. Log field routing_marker is non-empty.
  • Verbatim GPT passthrough (Codex subscription + OpenAI decision): same marker is injected into the first native assistant text, or as a synthetic assistant message item before tool/reasoning-only output (SetPassthroughBadge). Log still has routing_marker.
  • X-Weave-Routing-Marker: off (and not subscription-only warning): no badge. Subscription-only depleted-credits warning still wins over the opt-out.
  • Same model, second action (prior_served_model equals decision_model): routing_marker="". Expected. Seed a new key (or change the first user text) to re-see a first-turn badge.
  • Tool-call-only on the translated path: marker is a leading output_item (output_index 0) ahead of the function call — including stream:false JSON. Confirm in the SSE / JSON, not only in codex exec stdout (the TUI can bury the first-turn line under tool chatter).
  • Tool-call-only on verbatim GPT passthrough: a leading synthetic message item carries the badge, followed by the native tool call. Sequence/output indices are shifted to remain valid.
  • Non-Codex client (X-App unset) on a translated decision still gets the ✦ **Weave Router** → … text badge today; native OpenAI passthrough without X-App: codex stays byte-identical (SetPassthrough with no badge rewrite).
  • For curl-level checks (no Codex CLI), POST /v1/responses with X-Weave-Router-Key + X-App: codex is enough. Isolate first-turn cases with a freshly seeded key.
7. Clean up
bash
pkill -f mock_openai_upstream.py 2>/dev/null
pkill -f mock_codex_upstream.py 2>/dev/null
rm -rf /tmp/weave-codex-local
rm -f docker-compose.override.yml
# `docker compose down` if you want to stop the stack
# do NOT touch ~/.codex

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.
  • Native Codex models gpt-5.6-sol, gpt-5.6-terra, and gpt-5.6-luna use the caller's ChatGPT OAuth plan when subscription routing is on. Other OpenAI / Anthropic / Gemini / OpenAI-compatible models use WorkWeave deployment or BYOK credentials, same as Claude Code.
  • 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.
  • codex exec --ignore-user-config is not a substitute for CODEX_HOME: it skips $CODEX_HOME/config.toml entirely (so you'd have no weave-local provider) while auth still uses CODEX_HOME. Always write a full throwaway config.
  • Codex rollout transcripts live under $CODEX_HOME/sessions/<yyyy>/<mm>/<dd>/rollout-*.jsonl. Grep those for Weave Router when codex exec stdout is noisy.
  • docker-compose.override.yml is gitignored. If you add a mock *_BASE_URL there, remember to rewrite the file back to the pubsub-only ports: !reset [] (or delete it) before a real-provider Codex run — a leftover mock URL will serve sk-mock against production-looking model names.

© 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-codex-locally of weave-os/router.

  • SKILL.md
  • scripts/mock_codex_upstream.py

Open the folder on GitHubat commit 8e8ebe6

Compare with similar skills

Test Weave Router with Codex 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.

Test Weave Router with Codex compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Test Weave Router with Codex this skillweave-os/router5.6k—~4.7kAutomated safety check: NotesApache-2.0
LLM Gatewaysickn33/agentic-awesome-skills47k1 repos~2.1kAutomated safety check: PassMIT
LLM GatewayBagelHole/DevOps-Security-Agent-Skills1.1k—~2kAutomated safety check: PassMIT
Integration Tests for pRESTprest/prest4.6k—~1.1kAutomated safety check: PassMIT
Testcontainers Guide Migratordocker/docs4.7k—~5kAutomated safety check: PassApache-2.0
Remote Executor Integration Testsopeninterpreter/openinterpreter69k2 repos~842Automated safety check: PassApache-2.0

Similar skills

  • LLM Gateway

    sickn33/agentic-awesome-skills

    Deploy an API gateway for LLM traffic with load balancing, rate limiting, key management, semantic caching, fallback routing, and cost tracking.

    47k GitHub starsUsed in 1 repo~2.1k tokens
    Backend & APIsAuto-check passed
  • LLM Gateway

    BagelHole/DevOps-Security-Agent-Skills

    Deploy an API gateway for LLM traffic with load balancing, rate limiting, key management, semantic caching, fallback routing, and cost tracking.

    1.1k GitHub stars~2k tokensUpdated 4 mo ago
    AI & LLM EngineeringAuto-check passed
  • Guides writing and reviewing pREST Docker-based integration tests so every HTTP request is explained by step comments or table-driven descriptions.

    4.6k GitHub stars~1.1k tokensUpdated today
    Testing & QAAuto-check passed
  • Official

    Migrate a Testcontainers guide from testcontainers.com into the Docker docs site (docs.docker.com).

    4.7k GitHub stars~5k tokensUpdated yesterday
    Testing & QAAuto-check passed
  • Remote Executor Integration Tests

    openinterpreter/openinterpreter

    Explains how to run agent integration tests against remote executors, using Docker for Linux or Wine for Windows, and how to opt tests in or skip them.

    69k GitHub starsUsed in 2 repos~842 tokens
    Testing & QAAuto-check passed
  • Official

    Starts a throwaway MongoDB 7.0 replica set and runs the Airbyte spec, check, discover and read commands against source-mongodb-v2 images for local end-to-end testing.

    22k GitHub stars~1.9k tokensUpdated today
    Testing & QAAuto-check passed

More from weave-os/router

All 19 skills in this repo
  • 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.

    5.6k GitHub stars~3.1k tokensUpdated today
    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 today
    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 today
    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 today
    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 today
    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 today
    Auto-check passed

Works with

Questions about Test Weave Router with Codex

What does Test Weave Router with Codex do?

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. The agent stands up the router in docker compose, points a one-off codex exec at it through a throwaway CODEX_HOME directory, and reads the local server logs to confirm behavior. The user's real Codex config and auth files are never edited; the temporary directory gets its own config and, when ChatGPT OAuth is needed, a copy of the auth file.

When should I use Test Weave Router with Codex?

Test Weave Router with Codex fits situations like: verifying a router fix end to end for Codex's Responses API path; reproducing a production Codex routing bug locally; checking routing markers, force-model or subscription passthrough behavior; testing a force-model route without touching the global Codex config.

How do I install Test Weave Router with Codex in Claude Code?

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

How do I install Test Weave Router with Codex in Codex?

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

Can I use Test Weave Router with Codex 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-codex-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-codex-locally, .gemini/skills/test-codex-locally, .github/skills/test-codex-locally and .opencode/skills/test-codex-locally in your project.

What does Test Weave Router with Codex need to run?

Going by SKILL.md and its folder, Test Weave Router with Codex needs Python for the scripts in its folder, the command-line tools its instructions call (codex, docker, curl, python3, make and claude) and credentials named OPENAI_API_KEY and FIREWORKS_API_KEY. Our summary lists: docker compose; The Codex CLI; A provider key and credits, or the bundled mock upstream.

Does Test Weave Router with Codex access the network?

SKILL.md names 1 domain. In commands or code: chatgpt.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is Test Weave Router with Codex 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 Test Weave Router with Codex use?

Test Weave Router with Codex 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 Test Weave Router with Codex use?

About 4.7k tokens (SKILL.md is roughly 19k 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 Test Weave Router with Codex?

Skills that share tags, products or a category with Test Weave Router with Codex: LLM Gateway (sickn33/agentic-awesome-skills, 47k stars), LLM Gateway (BagelHole/DevOps-Security-Agent-Skills, 1.1k stars), Integration Tests for pREST (prest/prest, 4.6k stars) and Testcontainers Guide Migrator (docker/docs, 4.7k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Test Weave Router with Codex?

weave-os (a GitHub organization) maintains it in weave-os/router, which has 5,576 GitHub stars. The repository holds 19 skills in this directory. The repository was last updated on October 8, 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.