Job ticket 578469 · consumer · operator's desk · no subscription
Your custom GPT only lives in the account. Here is the desk that builds it as a file for nothing.
This page is an operator's desk. A custom GPT is really a document — instructions, a test of its behaviour, and a handover note. Feed this desk the job, a free-tier model returns the system-prompt spec, the test suite, and the usage brief as strict JSON, and your browser stamps them as sheets you export as Markdown. The file goes into ChatGPT, or into any model that accepts a system prompt. Nothing is uploaded and the prompts are printed at the bottom of this page so you keep them even if this site disappears.
ChatGPT is a trademark of OpenAI. This is an independent, unaffiliated comparison built on ChatGPT's own published pricing page, linked below. We are not OpenAI, and nothing here is endorsed by them.
Operator's sheet — rendered in this browser
Sample data is illustrative, not a claim about ChatGPT. Every ChatGPT figure on this page comes from the linked pricing page, read 2026-09-17.
The prompt pack
Three prompts, each mapped one-to-one onto a ChatGPT feature you are currently rationed on. Run them from this page with a free key, or copy them into any free chat model — the text is identical either way, and it is printed in full at the bottom of this section so it survives this site.
Loading the pack from tools.json… If this fails, the full prompt text is still readable below.
What ChatGPT's own pricing page says
Read from chatgpt.com/pricing on 2026-09-17. Fields we could not read are marked unconfirmed rather than filled in with a plausible number.
| The job | ChatGPT Free (as printed) | Custom GPTs (account-only) | This page + a free-tier model |
|---|---|---|---|
| Price | US$0 — GPT-5.6 Luna; 27K context on Instant | Paid tiers: names printed, figures not printed server-side | US$0 forever. A free-tier key costs nothing; the prompts are yours. |
| Where the GPT lives | Inside the account | Inside the account, tier-dependent | In a Markdown file you export. Paste it into ChatGPT or any model with a system prompt — the instructions are model-agnostic by construction. |
| GPT behaviour testing | Try it in the editor | Try it in the editor | Prompt 02 writes a six-case falsifiable test suite before you publish, with at least two cases designed to break it. |
| Handover | None | None | Prompt 03 stamps the usage brief — what it knows, what it refuses, and the exact symptoms that mean it is lying. |
| Versioning | Account history | Account history | The spec sheet carries a version line in its footer; re-running the distiller is the version bump. |
| Who sees your instructions | OpenAI | OpenAI | Only the inference provider you choose — or nobody at all in Copy-Paste Relay. |
What this replaces, and what it does not
A displacement claim you cannot substantiate is a lie with good typography. This is the whole scope, including the parts where ChatGPT wins.
Replaced: the GPT instruction editor
Prompt 01 distils the job into a six-row instruction sheet with fixed labels, refusals with redirects, and no invented capabilities.
Replaced: ad-hoc GPT testing
Prompt 02 returns six falsifiable pass/fail cases, at least two of which attack the spec.
Replaced: the missing handover
Prompt 03 issues the stamped usage brief — use it for, do not use it for, distrust when — derived only from the spec.
Not replaced: hosting and accounts
Nothing here hosts a GPT or holds a conversation. The file is pasted into whatever runs it.
Not replaced: OpenAI's model access
We do not resell model access. Your free-tier ally is the model; this page is the paperwork around it.
Not replaced: automatic eval runs
The test suite is criteria, not a runner. You send the prompts and check the passes — deliberately, like a checklist.
The prompts, in full, as text
Copy these into any model. They are the product; the page around them is convenience. Each block is the exact system prompt the interactive runner sends, plus the user-message template.
Prompt 01 — 1. System distiller · chatgpt-system-distiller v1.0.0 · best ally: Google Gemini API — Free usage tier · gemini-2.5-flash-lite
Replaces: ChatGPT's custom-GPT instruction editor — the GPT's system prompt, written and versioned here as a file instead of typed into a form.
Why this model: A system prompt is one structured document with hard limits per section; strict-JSON on the Gemini free tier renders it on the first try and the sheet stamps the version. Fallback ally: OpenRouter — :free model variants.
System prompt (1889 chars):
You are the operator at an operator's desk. You turn a description of a job into a machine-readable custom-assistant spec.
Return ONLY one JSON object. No markdown fences, no commentary.
{
"name": string (max 5 words),
"kicker": string (max 6 words),
"rows": [
{ "label": "Persona", "value": string (max 40 words) },
{ "label": "Job", "value": string (max 30 words) },
{ "label": "Style", "value": string (max 30 words) },
{ "label": "Refusals", "value": string (max 30 words) },
{ "label": "Format", "value": string (max 30 words) },
{ "label": "First question", "value": string (max 20 words) }
],
"stat": { "value": string (max 12 chars), "label": string (max 10 words) },
"footnotes": [ string (max 15 words) ]
}
Hard rules:
1. The six "rows" labels are fixed and appear in exactly this order. Each value is written as an instruction the assistant will follow, not a description of the brief.
2. "Persona" names the role and its seniority ("a senior onboarding engineer"), never a celebrity or a model name. "Job" is the single outcome the assistant optimises for, one sentence.
3. "Refusals" lists what the assistant must decline, with the one-line redirect for each. At least 2 refusals; if the brief implies none, refuse out-of-domain work and self-declared uncertainty.
4. "Format" states the output shape (length, structure, what is and is not included). "First question" is the exact question the assistant asks before doing anything, drawn from the brief's missing context.
5. "stat.value" is the maximum response length in words this assistant should ever produce, derived from the brief; "stat.label" explains why.
6. Never invent a capability the brief did not give (no file access, no browsing, no tools — unless the brief explicitly grants one). Banned: "game-changer", exclamation marks, emoji.
7. Write in the language of the brief.
User message template:
Variables:
{{job}}— The job (max 700 chars) sample data shipped with the tool{{users}}— Users (max 160 chars) sample data shipped with the tool
Output schema (the answer must match this exactly):
Decoding: temperature 0.5 · max 1400 output tokens · responseMimeType application/json · budget ~900 in / ~600 out per run · cost per run: 1 request — a fraction of any free tier's daily base; the Gemini free tier is the reference ally here.
Prompt 02 — 2. Test suite · chatgpt-test-suite v1.0.0 · best ally: Google Gemini API — Free usage tier · gemini-2.5-flash-lite
Replaces: ChatGPT's ad-hoc 'try it in the GPT editor' — a written test suite that proves the GPT behaves before you publish it.
Why this model: Test cases are a table of (prompt → expected behaviour); strict-JSON keeps each case atomic and the sheet renders the pass criteria as rows. Fallback ally: OpenRouter — :free model variants.
System prompt (1483 chars):
You are the acceptance desk at an operator's desk. You turn a custom-assistant spec into a test suite.
Return ONLY one JSON object. No markdown fences, no commentary.
{
"name": string (max 6 words),
"kicker": string (max 6 words),
"rows": [
{ "label": string (max 8 words), "value": string (max 40 words) }
],
"stat": { "value": string (max 8 chars), "label": string (max 12 words) },
"footnotes": [ string (max 15 words) ]
}
Hard rules:
1. Exactly 6 "rows": the label is the test name ("invents a policy", "asks before answering", "refuses out-of-domain", "too-long answer", "stale fact", "empty input") and the value is one line each of: the exact user prompt to send, then the pass criterion. Both in one line, separated by ' → '.
2. Every test must be falsifiable: the pass criterion states what a passing answer does or contains, never 'should be good' or 'seems confident'.
3. At least 2 tests must attack the spec (one that the GPT should refuse, one that feeds it a stale or missing fact). If the spec has no stated knowledge boundary, the stale-fact test feeds a policy number the spec never contained.
4. "stat.value" is the number of tests that must pass before the GPT is publishable (at most the row count, at least 5); "stat.label" states what failing means (re-open the spec, do not patch the answer).
5. Prompts in the tests must be realistic one-liners a real user would type, including one lazy or vague one.
6. Write in the language of the spec.
User message template:
Variables:
{{spec}}— Assistant spec (max 2000 chars) sample data shipped with the tool
Output schema (the answer must match this exactly):
Decoding: temperature 0.5 · max 1400 output tokens · responseMimeType application/json · budget ~1,200 in / ~600 out per run · cost per run: 1 request per suite — well under 1% of the Gemini free tier's daily base.
Prompt 03 — 3. Usage brief · chatgpt-usage-brief v1.0.0 · best ally: Google Gemini API — Free usage tier · gemini-2.5-flash-lite
Replaces: ChatGPT's lack of a handover document for shared GPTs — the usage brief that tells the next person what the GPT is for, what it refuses, and when to distrust it.
Why this model: A usage brief is a small fixed-sheet document; strict-JSON renders it cleanly and the footnotes carry the version line that makes the handover honest. Fallback ally: OpenRouter — :free model variants.
System prompt (1748 chars):
You are the handover clerk at an operator's desk. You turn a custom-assistant spec into a usage brief for its next operator.
Return ONLY one JSON object. No markdown fences, no commentary.
{
"name": string (max 6 words),
"kicker": string (max 6 words),
"rows": [
{ "label": "Use it for", "value": string (max 25 words) },
{ "label": "Do not use it for", "value": string (max 25 words) },
{ "label": "Knows", "value": string (max 25 words) },
{ "label": "Does not know", "value": string (max 25 words) },
{ "label": "Distrust when", "value": string (max 25 words) }
],
"stat": { "value": string (max 12 chars), "label": string (max 10 words) },
"footnotes": [ string (max 20 words) ]
}
Hard rules:
1. The five row labels are fixed and in this order. Every value must be derivable from the spec — no new promises, no new limitations.
2. "Knows" lists the sources or scopes the spec gave (a handbook, a date range, a document set). If the spec gave none, the value is 'nothing stated — verify before relying'.
3. "Distrust when" names the concrete symptom (an answer with a policy number the spec never contained, a confident answer to a question the spec refuses) — at least 2 symptoms, comma-separated, each observable.
4. "stat.value" is the spec's version string and date (e.g. 'v1.0 2026-09-17') taken from the spec; if the spec has no version, use 'v1.0' plus the brief's date if given, else 'unversioned'.
5. "footnotes" carries one line: who to ask when the GPT and reality disagree, taken from the spec's refusal redirect; if the spec names nobody, the footnote says the handover is incomplete and must be re-run.
6. Banned: marketing adjectives, exclamation marks, emoji. Write in the language of the spec.
User message template:
Variables:
{{spec}}— Assistant spec (max 2000 chars) sample data shipped with the tool{{date}}— Handover date (max 20 chars) sample data shipped with the tool
Output schema (the answer must match this exactly):
Decoding: temperature 0.35 · max 1100 output tokens · responseMimeType application/json · budget ~1,100 in / ~450 out per run · cost per run: 1 request per handover — a rounding error against the Gemini free tier's daily base.
Questions worth asking before you cancel
Is this actually free, or is there a subscription hiding?
There is no subscription and, right now, no paid tier at all. The whole tool is unmetered. A one-time unlock for GPT version-diff exports is planned, but no price is shown anywhere on this site until a real Stripe Payment Link exists and its price is read back from Stripe's API rather than typed by hand.
Do you need an API key?
No. Copy-Paste Relay works with any free chat model you already use: copy the prompt block, paste it in, paste the JSON answer back into the box. A key only removes the copy-paste step. If you do use one, it is stored in your browser's localStorage and sent only to that provider — 0saas has no endpoint that accepts a key.
Which free model is best for this?
The Gemini free tier is the reference ally — the sheets are strict-JSON and the first render should be clean. OpenRouter's :free variants are the better pick for the test suite, where a model different from the one you intend to run is the more honest tester.
Will the GPT file actually work in ChatGPT?
The instruction sheet is written as a system prompt: paste the six rows into the GPT's instructions field (or into any model's system prompt). The test suite then tells you whether it behaves — that part is on the model you run, not on this page.
Is 0saas affiliated with OpenAI?
No. ChatGPT is a trademark of OpenAI. We name it because a comparison that will not name the thing it compares against is useless. The free-tier figures on this page come from ChatGPT's own pricing page, linked above; its paid figures are client-rendered and marked unconfirmed rather than quoted from memory.