Content Forge operator console
not connected

API connection

The Worker base URL and the x-cf-webhook token are supplied here, not baked into the page. The URL is remembered in localStorage; the token is kept in sessionStorage and is gone when this tab closes.

Single-operator tool

This is a static site. It cannot hold a secret. Anyone who loads the page and pastes a valid token gets full API access — and any script running on this origin can read sessionStorage. Deploy it behind Cloudflare Access (or keep it on localhost) and never treat the URL as private.

  • GET /health is unauthenticated and is what "test" calls first.
  • Every other route sends x-cf-webhook.
  • The token is never written to localStorage, never put in a URL, and never logged.
  • A 401 anywhere in the app clears the connection pill so you know why calls stopped working.

Polling

A run takes ~5–7 minutes, so 10s is ~40 polls. Polling stops on its own at a terminal state.

Create a job

Brand profile

No job loaded. Start one from New job, or paste a job ID above.

Recent jobs

Endpoint not implemented yet. The Worker exposes no list route, so this table has nothing to read. It is wired to GET /jobs?limit=&status=&brand=&content_type= and will populate the moment that route exists. Nothing here is faked — see the README for the exact contract the Worker needs to satisfy.
Job IDBrandTypeKeyword StateScoreCostCreated
No data — awaiting GET /jobs.

Locally-started jobs from this browser session are listed below. They come from this page's own memory, not from the API, and disappear when the browser data is cleared.

Job IDBrandTypeKeywordStarted

Pipeline config code defaults

Values shown greyed are the code defaults from worker/src/config.js, rendered as placeholders. Type into a field to create an override; overridden fields are marked overridden and only those keys are sent. This mirrors the cf_config overlay: each top-level key (brands, budgets, models, maxRevisions) is one row of (key, value_json), shallow-merged over the defaults.

Endpoints not implemented yet. Loading and saving need GET /config and PUT /config on the Worker. Until they exist this editor works offline against the code defaults, and Save will report the failure rather than pretend. Exact contract in the README.

Brands

Token budgets

Per content type, per stage. Opus 5 thinks by default and max_tokens caps thinking + output together — a tight budget truncates the response and its JSON parse fails. These figures were sized from measured live usage; lower them with care.

Models & effort

temperature / top_p / top_k are rejected with HTTP 400 on Opus 5 and Sonnet 5 — steer with effort. Disabling thinking is legal only at effort high or below. The architect runs at medium deliberately: at high it exhausted its ceiling twice.

Revision loop

Revisions per gate. 2 means 3 total attempts, after which the job fails carrying the gate's directives.

Override payload

Exactly what a PUT /config would send. Empty means no overrides.

{}