A shared free AI bench rarely dies from an empty allowance. It dies from an unowned next step.
The developer conversation this week mixed two moods. There is fatigue with AI tooling, and there is a sprint to ship open-source work. Both push teams toward the same move: pool a free tier, share it, and hope nobody hogs it. Hope is not a handoff.
MonkeyCode is an open-source coding agent project. The operator states that it offers free model access and a free server option. Treat both as availability, not as a contract.
Disclosure: This article was prepared as part of MonkeyCode's product outreach.
The failure this SOP prevents
A free bench has no queue and no billing alarm. Two people start long runs, a third retries a failure, and the window closes mid-task. Nobody can say which run burned the last of it.
The fix is small and boring. Name three roles, write one card per run, and keep a local token ledger you control. The ledger is yours, so it survives quota changes and product changes.
Three roles, one handoff
The Bench Steward owns the budget line and the ledger file. This person approves a run before it starts and closes it after. The Steward does not write code during a shift.
The Runner owns a single run card at a time. One card equals one goal, one model, one output artifact. A second goal needs a second card, even when the first is nearly done.
The Reviewer owns the accept or reject call. This person reads the diff and the card, never the chat history. If the card cannot explain the change, the change is not ready.
Handoffs move in one direction. Runner hands a filled card to Reviewer. Reviewer hands a verdict to Steward. Steward writes the next slot. No role skips forward, and no role edits another role's section.
Artifact one: the token ledger
Put this file at bench/ledger.sh and keep the data in plain TSV. It reads the usage block from a saved response, so it never guesses.
#!/usr/bin/env bash
# bench/ledger.sh — count tokens per run card, refuse to start over budget
set -euo pipefail
BENCH_DIR="${BENCH_DIR:-bench}"
LEDGER="$BENCH_DIR/token-ledger.tsv"
BUDGET_FILE="$BENCH_DIR/budget.txt"
[[ -f "$BUDGET_FILE" ]] || { echo "missing $BUDGET_FILE" >&2; exit 2; }
BUDGET=$(tr -dc '0-9' < "$BUDGET_FILE")
[[ -n "$BUDGET" ]] || { echo "budget file has no number" >&2; exit 2; }
[[ -f "$LEDGER" ]] || printf 'run_id\towner\tmodel\ttokens\n' > "$LEDGER"
spent() { awk -F'\t' 'NR>1 {s+=$4} END {print s+0}' "$LEDGER"; }
check() {
local now left
now=$(spent)
left=$(( BUDGET - now ))
printf 'budget=%s spent=%s left=%s\n' "$BUDGET" "$now" "$left"
(( left > 0 )) || { echo 'FENCE: no headroom left, stop' >&2; return 1; }
}
record() {
local run_id="$1" owner="$2" model="$3" payload="$4" tokens
tokens=$(jq -r '.usage.total_tokens // empty' "$payload")
[[ -n "$tokens" ]] || { echo "no usage block in $payload" >&2; return 1; }
printf '%s\t%s\t%s\t%s\n' "$run_id" "$owner" "$model" "$tokens" >> "$LEDGER"
echo "recorded $tokens tokens for $run_id"
}
case "${1:-}" in
check) check ;;
record) shift; record "$@" ;;
*) echo 'usage: ledger.sh check | record <run_id> <owner> <model> <response.json>' >&2; exit 64 ;;
esac
The run loop is three commands. Check headroom, do the work, then record.
mkdir -p bench
cat > bench/budget.txt <<'EOF'
400000
EOF
./bench/ledger.sh check
# ... run the agent, save the raw response ...
./bench/ledger.sh record r-2026-10-18-a morgan swe-review response.json
The number in budget.txt is your own planning line, not the provider's quota. Set it below whatever the project currently documents, and re-read that page before each planning cycle. Free quotas move.
Artifact two: the handoff card
Paste this block into the team wiki and copy it per run. The card is the artifact a reviewer reads.
### Run card r-2026-10-18-a
- Owner: morgan
- Slot: 09:00-11:00 UTC
- Goal (one sentence): add retry jitter to the fetch wrapper
- Model: as listed by the project today
- Files touched: src/fetch.ts, test/fetch.test.ts
- Test command: npm test -- fetch
- Ledger line: recorded, 8,412 tokens
- Open risk: jitter default may break timing test
- Reviewer verdict: pending
A card with a missing test command is a block. A card with no ledger line is a block. A card with two goals is split before review, not after.
Artifact three: a bench smoke test
The free server option deserves the same suspicion as any demo host. Four cheap checks answer the only question that matters: can the team rely on it for the next two hours?
#!/usr/bin/env bash
# bench/smoke.sh — cheap checks before a shift on the free server
set -euo pipefail
BASE="${BENCH_BASE_URL:?set BENCH_BASE_URL}"
probe() {
local label="$1" want="$2" path="$3" ttl="$4" code
code=$(curl -s -o /dev/null -w '%{http_code}' --max-time "$ttl" "$BASE$path" || true)
if [[ "$code" == "$want" ]]; then
printf '%-22s ok (%s)\n' "$label" "$code"
else
printf '%-22s FAIL (want %s, got %s)\n' "$label" "$want" "$code"
fi
}
probe reachable 200 /healthz 5
probe unauth-reject 401 /v1/models 5
probe cold-start 200 /v1/models 30
probe metrics 200 /metrics 5
The paths above are placeholders. Swap in the endpoints the project documents, keep the timings, and log the output next to the card. A cold start above thirty seconds is a scheduling fact, not a bug report.
When to use the bench, and when not to
SituationShared free benchPaid keyExploratory refactor, reversible diffYesOptionalWork with a hard deadline todayNoYesAny customer data in the promptNoOnly with a reviewed pathLong batch generationNoYesLimits worth stating plainly
The free allowance and the free server are operator statements, not service guarantees. Quotas, model lists, and uptime can change without notice, so re-read the project page before you plan a sprint. The ledger only counts what you save to disk; a run that skips the record step is invisible to the fence. The smoke test proves reachability, not output quality.
Skip this playbook if you are the only person using the bench. A solo user needs a budget note, not three roles. Skip it too if the work touches regulated data, because a shared free host is the wrong place for that conversation.
Start with the ledger. Run it for one week before you invite a second person onto the bench.#ai #opensource #devops #tutorial #software #coding #development #engineering #inclusive #community
A One-Page SOP for a Shared Free AI Bench