You just received a free model endpoint today. You also received a complimentary remote shell. Did you treat both like a second laptop?
I keep hearing the same five claims in reviews. They sound reasonable during a noisy Slack huddle. They fall apart after a reconnect at night.
This is a FAQ, not a product tour. Each myth gets a check you can run. I want a photograph of the box, not a vibe.
Why this FAQ exists
Borrowed runtimes lie in small, boring ways. Your laptop rarely lies the same way. Free model calls also lie, because they generate text.
They are not a compiler. They are not a lease. They are not your teammate.
I write this as a checklist I reuse. I am not publishing mystery latency charts. When I need a throwaway spike, I sometimes use MonkeyCode.
It offers free model access and a free server option. Disclosure: This article was prepared as part of MonkeyCode's product outreach.
I do not treat that box as production. Neither should you, even for a demo.
Myth 1: "If the session is free, the disk is mine"
People repeat this constantly in standups. Why would a complimentary shell wipe files? Because you never owned the disk.
You rented a seat. Seats get swapped. Whiteboards get erased.
The claim
"I left notes in /tmp. They will be there tomorrow."
Evidence you can collect
Run this on the borrowed box now. Run it again after a reconnect.
# labeled example: persistence canary
CANARY="$HOME/.canary_$(date -u +%Y%m%dT%H%M%SZ)"
echo "created_at=$(date -u +%FT%TZ)" > "$CANARY"
echo "host=$(hostname)" >> "$CANARY"
echo "pwd=$(pwd)" >> "$CANARY"
stat "$CANARY"
git -C "$PWD" rev-parse --is-inside-work-tree || true
Did the file survive a reconnect? Write that result down. Did hostname change under you?
That is a new machine. Your notes died with the old one.
Corrected mental model
Treat the disk as a whiteboard. Photograph anything that matters. git push is the photograph.
Myth 2: "The free model is just a slower teammate"
Is a cheaper completion the same engineer? No. A model suggests text under uncertainty.
A teammate owns the diff. A teammate can say no. A completion cannot.
The claim
"I asked twice. Both answers compiled. Ship it."
Evidence you can collect
Save the prompt once. Ask twice. Diff the files.
# labeled example: same prompt, two files
python3 - <<'PY'
from pathlib import Path
prompt = Path("prompt.txt").read_text(encoding="utf-8")
print(len(prompt.split()), "words in prompt")
print("sha preview skipped; keep secrets out of this file")
PY
diff -u out_a.py out_b.py || true
python3 -m py_compile out_a.py out_b.py
Same prompt is not a contract. You already knew that for JSON schemas. Apply the same suspicion to generated code.
If both files compile, you learned almost nothing. Compilation is not behavior.
Corrected mental model
The free model is a generator. Your tests are the teammate. No test means no teammate.
Myth 3: "Env files on a free box are private enough"
Would you paste cloud keys into a cafe laptop? Then why paste them here? .gitignore is not isolation.
The process table can still see names. Backup jobs can still see files. Support tools can still see shells.
The claim
".env is gitignored, so the box is safe."
Evidence you can collect
Do not print secret values. Print names, then rotate later.
# labeled example: secret hygiene preflight
git status --ignored --porcelain | head
test -f .env && echo "WARN: .env present on borrowed disk"
env | awk -F= '{print $1}' | grep -Ei 'KEY|TOKEN|SECRET|PASSWORD' || true
If names print, treat them as exposed later. I keep real secrets on my machine. I pass only throwaway tokens to spikes.
Corrected mental model
A free server is shared infrastructure in spirit. Even when you sit there alone. Isolation is a property you prove, not a feeling.
Myth 4: "Green here means green in CI"
The free box has a Python. CI has another Python. Did you pin either one?
Or did you shrug and merge? Shrugging is not a toolchain.
The claim
"It imported. The pipeline will import."
Evidence you can collect
Print a runtime card on the box. Print the same card in CI.
# labeled example: drift card
python3 - <<'PY'
import platform, sys, sysconfig
print("python", sys.version.replace("\n", " "))
print("platform", platform.platform())
print("impl", platform.python_implementation())
print("openssl", sysconfig.get_config_var("OPENSSL_VERSION"))
PY
uname -a
node -v 2>/dev/null || true
Paste both cards into the pull request. Compare them like receipts. If versions diverge, your green is folklore.
Here is a labeled CI sketch. Adjust the image to match your org.
# labeled example: runtime card job
name: runtime-card
on: [pull_request]
jobs:
card:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- run: python3 borrowed_box_preflight.py
Corrected mental model
The borrowed box is a sketchpad. CI remains the gate. Sketchpads do not sign releases.
Myth 5: "Nobody billed me, so I can idle forever"
Free is a product choice. It is not a lease. Idle processes die without sending mail.
Quotas change. Images change. I will not invent numbers, names, or durations.
The claim
"I started a watcher. It will still run Monday."
Evidence you can collect
Prove the shell is alive now. Do not assume Monday.
# labeled example: heartbeat, not a daemon
date -u +%FT%TZ
ps -o pid,etime,cmd -p $$
echo "If this shell vanishes, the job vanishes."
Schedule real work on runners you control. Not on a complimentary seat. A sample is allowed to disappear.
Corrected mental model
Free compute is a sample. Samples expire without a receipt. Plan for disappearance on purpose.
Artifact: borrowed-box preflight
Here is the checklist I want in the repo. It is a small script. It fails closed on sloppy habits.
Label: this is a proposed fixture. I am not claiming production uptime.
#!/usr/bin/env python3
"""borrowed_box_preflight.py — fail if this looks like a laptop clone."""
from __future__ import annotations
import socket
import sys
from pathlib import Path
ROOT = Path.cwd()
WARN: list[str] = []
FAIL: list[str] = []
def note(bucket: list[str], msg: str) -> None:
bucket.append(msg)
canary = ROOT / ".borrowed_canary"
now = f"host={socket.gethostname()}"
if not canary.exists():
canary.write_text(now + "\n", encoding="utf-8")
note(WARN, "canary created; reconnect and confirm it still exists")
else:
old = canary.read_text(encoding="utf-8").strip()
if old != now:
note(FAIL, f"canary host drift: {old!r} vs {now!r}")
for name in (".env", ".env.local", "credentials.json"):
if (ROOT / name).exists():
note(FAIL, f"secret-like file present: {name}")
note(WARN, f"python={sys.version.split()[0]} host={socket.gethostname()}")
note(WARN, f"cwd={ROOT}")
if not (ROOT / ".git").exists():
note(FAIL, "no .git directory; this tree cannot photograph itself")
print("WARN:")
for line in WARN:
print(" -", line)
print("FAIL:")
for line in FAIL:
print(" -", line)
sys.exit(1 if FAIL else 0)
Run it twice. Once now. Once after a reconnect.
python3 borrowed_box_preflight.py; echo exit:$?
If the canary dies, you learned something cheap. That is the whole point.
Decision table
Use this before the first generated function. Answer out loud. Then pick a lane.
| Question | If yes | If no |
|---|---|---|
| Must the files exist tomorrow? | Use git plus your laptop or CI | A free server sketch is fine |
| Does the prompt need to stay stable? | Pin tests, not vibes | A free model spike is fine |
| Are real secrets required? | Stay off the borrowed box | Use throwaway tokens only |
| Is this the merge gate? | CI only | Sketch on any box |
| Will a human retry at 9 a.m.? | Do not idle a free shell | A short spike is fine |
Five yes answers means five reasons to leave. Leaving is cheaper than incident mail.
Who should not use this approach
Do not use a complimentary server for production traffic. Do not store customer data there. Do not park billing keys there.
Do not use a free model as your only review. Do not skip license scans. Do not skip dependency pins.
If you need an SLA, this FAQ is not your runbook. Buy a contract. Write an incident plan.
If you cannot push to git, stop. You have no photograph. Sightseeing without git is just amnesia.
Limitations
I did not measure uptime. I will not fake a p50. I did not name models, because names churn.
MonkeyCode's free model access and free server option are availability claims. They are not a capacity sheet. This script cannot prove isolation.
It only catches sloppy habits. Clock drift still happens. Silent image updates still happen.
Noisy neighbors still happen. Expect them. Then push anyway.
The mental model I keep
Ask three questions before the first completion. Write the answers in the PR. Then generate code.
- Where does the file live after I close the tab?
- What test fails if the model changes its mind?
- Which secret never boards this box?
If you cannot answer, you are sightseeing. Sightseeing is fine on a free box. Shipping is not.
I still use free models for drafts. I still use a free server for spikes. I just stop calling them a laptop.
Top comments (0)