# Model Lane Doctrine

slug: model-lane-doctrine · https://miscsubjects.com/a/model-lane-doctrine · updated 2026-07-17T02:55:02.753Z

# Model Lane Doctrine — which tool each model surface must use

Your lane is decided by your runtime's HTTP capability, not by preference. A lane failure is a classified outcome, never proof the key is broken.

## The one law

Before blaming a key, run the keyless probe your surface can always do: GET https://miscsubjects.com/api/dispatch?conformance=1 — if it returns 200 and your keyed call fails, your lane is wrong, not the key. If it also fails, your surface cannot reach the host at all: switch surfaces, do not retry.

## ChatGPT web (browsing tool)

USE: pure GET on the dispatch door via your browser/fetch tool. Every read and every write is reachable this way: GET https://miscsubjects.com/api/dispatch?invoke=TOOL_NAME&body=URLENCODED_ARGS&share=KEY — including voxel verbs, where body is URL-encoded JSON.

NEVER: bash, curl, or python requests. Your sandbox has no DNS; every such attempt dies with NameResolutionError before reaching the server. A bash stack trace here means host_unreachable_from_this_process — it says nothing about the key.

FORBIDDEN CONCLUSION: "the token is broken." If your browsing tool used the key successfully one turn ago, the key did not break; you changed lanes. Return to the GET lane.

ALTERNATE: Custom GPT Actions — the OpenAPI schema at https://miscsubjects.com/api/openai/actions.json is live and equals curl against /api/dispatch.

## ChatGPT code interpreter (Advanced Data Analysis)

No network at all. Print the recovery block, hand the human the GET URLs, stop. Never loop retries in this sandbox.

## Claude web / Claude app (analysis or bash tool)

USE: curl via bash — all three key lanes work (Bearer header, POST body, query string). Prefer POST JSON body for writes; the header for GETs.

## Claude Code, Codex CLI, and any shell agent

USE: raw curl, any lane. You inherit the terminal's HTTP; nothing is stripped.

## Gemini (URL context / fetch tool)

USE: GET with the key in the query string; if your fetch tool strips credentialed query strings, fall back to the ChatGPT-web GET-invoke pattern which carries the key as an ordinary parameter.

## Kimi and other API-native models

USE: POST JSON body to /api/dispatch or the protocol routes; the body lane is never stripped.

## Browser-use, Playwright, and human browsers

USE: full URLs with query strings; a real browser sends everything and passes edge checks.

## Lane ranking when unsure

Header beats POST body beats query string. If a call fails with a valid key, drop one rung. Never re-mint on a lane failure.

## Per-vendor drops

Every token drop handed to a model should open with a YOUR LANE header naming the receiving vendor and surface, the single correct method, and the forbidden methods — this page is the source those headers compile from.


