fcc-server — the OSS-coder proxy that nothing runs on
Mirrored from the fleet knowledge base: wi/components/fcc-server.md
Updated
Mirrored verbatim from
utopia-models/knowledgewi/components/fcc-server.mdby the allowlisted publish pipeline. Edit it there, not here.
component: fcc-server
serves: all
runs-on: novaserver, unix user `nova`, a `Type=simple` user unit
adrs: [6723, 2165]
owns:
- _infra/systemd/fcc-server.service
- fcc-server.service
- "0.0.0.0:8082"fcc-server — the OSS-coder proxy that nothing runs on
WHAT IT IS
free-claude-code installed as a uv tool on nova's account, serving an Anthropic-shaped API on
:8082 in front of an OSS model. It exists because of the cost model — flat subscriptions and
owned hardware only, never a pay-per-use frontier key — and cheap OSS backends were the sanctioned
rate-limit escape.
🔴 It is not a dispatch backend, and there is nothing for it to be an alternative to. ADR-6723
(2026-08-23) settles it: every dispatched run is Claude Code on a Claude subscription, dispatch.sh
passes the literal TASK_BACKEND=claude, and the resolver that once chose between providers is
deleted. ADR-2165, which reasoned about a second backend, is superseded by it. If this process
stops, no run changes behaviour.
HOW IT WORKS TODAY
flowchart TD
U["fcc-server.service (nova)<br/>Restart=always, RestartSec=5"] --> B["~/.local/bin/fcc-server<br/>(uv tool: free-claude-code)"]
B --> T["tokens.py: tiktoken.get_encoding<br/>AT MODULE SCOPE"]
T -->|"cache hit"| L["listening 0.0.0.0:8082"]
T -->|"cache MISS"| N["downloads cl100k_base.tiktoken<br/>from openaipublic.blob.core.windows.net"]
N -->|"no route at boot"| C["CRASH — not a degraded start"]
E["Environment=TIKTOKEN_CACHE_DIR=%h/.cache/tiktoken"] -.->|"removes the network<br/>from the startup path"| T
S["seed-tiktoken-cache.sh<br/>(checksum-verified, idempotent)"] -.-> EWhat it reports is the whole of its surface — the two commands are in DETERMINE CURRENT STATE.
The one behaviour worth carrying forward is the boot race, because the shape recurs. It
tokenizes at import, so a startup with no route is a crash rather than a degraded start. novaserver
rebooted at 13:55:23 on 2026-08-04; the unit started 19 s in with no route and died on
OSError: [Errno 101] Network is unreachable; Restart=always succeeded on the retry at 13:55:49 —
but the crash had already fired fleet-notify@ and filed a board issue, and the race was set to run
on every cold boot (#4118).
Two facts came out of that fix and both generalise to every user unit on this fleet:
network-online.targetdoes not exist in the systemd USER manager. The unit carriedAfter=network-online.targetand it was a silent no-op —systemctl --user list-units --all network-online.targetreportsLOAD=not-found. Ordering a--userunit behind the network is not a knob that exists. Do not reach for it.- tiktoken's default cache is
$TMPDIR, which a reboot wipes. Every cold boot re-downloaded a 1.6 MB blob just to start a tokenizer. The fix removes the network from the startup path instead of trying to wait for it.
Proving that fix is live rather than merely committed means reading the running process's own environment — see DETERMINE CURRENT STATE.
bash _infra/scripts/seed-tiktoken-cache.sh # idempotent; prints "already seeded"
tr '\0' '\n' < /proc/$(systemctl --user show fcc-server -p MainPID --value)/environ | grep TIKTOKEN
sudo unshare -n -- bash -c 'ip link set lo up; exec sudo -u nova env \
TIKTOKEN_CACHE_DIR=$HOME/.cache/tiktoken FCC_OPEN_BROWSER=false timeout 40 ~/.local/bin/fcc-server'Reaching it. :8082 binds 0.0.0.0, so it answers on the tailnet. There is no auth in front of
it. The model and provider it fronts are read from the probe below, never stated here — they change
with the upstream tool's own defaults.
BOUND VALUES
- ✅
_infra/systemd/fcc-server.service - ✅
TIKTOKEN_CACHE_DIR— still called by_infra/systemd/fcc-server.service - 🔴
fcc-server— nounits:binding, so nothing proves its ExecStart target still exists (#4742)
DETERMINE CURRENT STATE
curl -s -m5 http://127.0.0.1:8082/ # {"status":"ok","provider":...,"model":...}
ssh nova@100.71.25.43 'systemctl --user is-active fcc-server'
bash _infra/scripts/seed-tiktoken-cache.sh # idempotent; prints "already seeded"The health endpoint is the whole of its reported surface. A unit that is active and an endpoint
that answers are two different facts here, because the crash-and-restart path leaves the first true
for a service that has already filed a board issue.
🔴 The unit check has to go over ssh, not -M. systemctl --user -M nova@ … run from any
other master's shell dies with Failed to connect to bus: Permission denied — measured from cloud,
2026-08-31. Master homes are 0750 and each account has its own session bus.
To prove the boot fix is live rather than merely committed, read the ENVIRONMENT OF THE RUNNING PROCESS — a unit file on disk says nothing about it:
ssh nova@100.71.25.43 \
'tr "\0" "\n" < /proc/$(systemctl --user show fcc-server -p MainPID --value)/environ | grep TIKTOKEN'KNOWN BROKEN
- 🔴 The registry row binds the unit under the wrong key, so it is in no sweep. The
fcc-serverrow carriesunit: _infra/systemd/fcc-server.service— singular, and a path. The fieldverify-unit-execstart.pyreads isunits:, a list ofuser@<box>:<unit>names. The generated block above is that gap: the unit exists, the artifact of record exists, and nothing proves daily that the ExecStart target is still there. A one-word registry edit closes it. - ⚠ A healthy probe here says the proxy is up, not that anything uses it. Nothing does. Measured
2026-08-31:
grep -rn "8082" --include='*.sh' --include='*.py' --include='*.yml' --include='*.mjs' --include='*.service' .over the whole repo returns no lines at all — not even the unit, which takes the port from the tool's default. Under ADR-6723 that is the correct state, not a defect, but it means uptime here is not evidence of anything working. - 🔴
wi/work/reference/win/fcc-server.mdends by telling the reader to runbash _infra/scripts/dispatch.sh --resolve <master>for what a master would run on. That flag no longer exists — it went with the second-backend architecture in ADR-6723. Run today it is parsed as positional arguments and fails pre-flight:dispatch.sh --resolve cloud→PRE-FLIGHT FAIL: issue #cloud does not exist. Four comments inside_infra/scripts/dispatch.shstill cite--resolveas a live dry-run hook (grep -n -- '--resolve' _infra/scripts/dispatch.sh→ 4 hits, all prose). Superseded by this doc.
escalation-gates — a claim that blocks work must be re-derivable, or it is not a gate
Mirrored from the fleet knowledge base: wi/components/escalation-gates.md
feature-closer — the trigger the fleet controls, in front of a cron GitHub half-honours
Mirrored from the fleet knowledge base: wi/components/feature-closer.md