Environment variables

Referenceby Aaron Reimannupdated Sep 28, 2026#reference#configuration#env

Every CLOCKWORK_* variable plus the standard Laravel ones we actually use. Defaults come from config/clockwork.php — most things work if the variable is empty (the feature short-circuits).

The provider-credential variables below (DigitalOcean, Hetzner, Azure, Vultr, Linode, SpinupWP, Pressable, WP Engine, Kinsta, Cloudways, Cloudflare, Twilio, Bill.com, blacklist-scan keys, GTmetrix, PSI, OAuth credentials, etc.) are managed directly in the root .env file — either manually or through the Setup dashboard (/setup) and Settings → API limits (/settings/integrations/{service}/limits). The built-in EnvCredentialManager writes atomically to .env and immediately reflects changes in running process memory without server reboots. CredentialResolver maintains backward-compatible fallback for any legacy database-stored credentials. On a fresh install (zero servers, zero sites), the dashboard redirects to Setup (/setup) — the fleet integration and credential configuration hub. See Features → Fleet Integrations Setup.

Group order matches .env.example so you can keep them side by side.

Laravel core

Variable Default Notes
APP_KEY empty php artisan key:generate once on first checkout. Re-generating breaks all encrypted columns (SSH keys, db_password, companion_secret).
APP_DEBUG true Local. Flip to false if you ever expose this beyond localhost.
APP_URL http://localhost
DB_* mysql / 127.0.0.1 / clockwork / root / empty Local-only. MySQL listens on 127.0.0.1, root has no password.
SESSION_DRIVER database
QUEUE_CONNECTION database
CACHE_STORE database

Mail

Variable Default Notes
MAIL_MAILER log Flip to mailgun once SPF/DKIM are set on the sending domain.
MAILGUN_DOMAIN, MAILGUN_SECRET, MAILGUN_ENDPOINT unset Required when MAIL_MAILER=mailgun. EU region uses api.eu.mailgun.net. Composer pull: composer require symfony/mailgun-mailer symfony/http-client.
MAIL_FROM_ADDRESS, MAIL_FROM_NAME example.com

Auth (Google OAuth)

Variable Default Notes
GOOGLE_CLIENT_ID / _SECRET unset Create at console.cloud.google.com/apis/credentials.
GOOGLE_REDIRECT_URI http://localhost:8000/auth/google/callback Must match Google Console exactly. Multiple URIs OK — register your dev URL and the production one.
GOOGLE_HD empty Optional Workspace domain pin. Off by default so personal Google accounts work.
GITHUB_CLIENT_ID / _SECRET unset GitHub OAuth App, create at github.com/settings/developers. Provided by the AuthGitHub module.
MICROSOFT_CLIENT_ID / _SECRET unset Microsoft Entra ID (Azure AD) App Registration at portal.azure.com. Provided by the AuthMicrosoft module.
MICROSOFT_TENANT_ID common Directory (tenant) ID, or common to allow any Microsoft account/tenant.

None of the three login providers is required — LoginController only shows a provider’s button once its credentials are actually configured (AuthProvider::isConfigured()), so leaving GitHub/Microsoft unset just means those two buttons don’t render. The allowlist itself is the users table regardless of which provider signed someone in — see architecture/security-model.

DigitalOcean

Variable Default Notes
CLOCKWORK_DIGITALOCEAN_TOKEN unset Personal Access Token. Required for clockwork:poll-servers against DO-provider servers.
CLOCKWORK_DIGITALOCEAN_BASE_URL https://api.digitalocean.com/v2
CLOCKWORK_DIGITALOCEAN_TIMEOUT 15 Seconds.

Hetzner Cloud

Variable Default Notes
CLOCKWORK_HETZNER_TOKEN unset Per-project API token from console.hetzner.cloud → project → Security → API Tokens. Required for clockwork:poll-servers against Hetzner-provider servers. Read-only scope is enough.
CLOCKWORK_HETZNER_BASE_URL https://api.hetzner.cloud/v1
CLOCKWORK_HETZNER_TIMEOUT 15 Seconds.

poll-servers is fine with a partial config (DO yes, Hetzner no, or vice versa) — each server uses its own provider’s client and rows whose provider client isn’t configured simply get skipped.

Azure

Variable Default Notes
CLOCKWORK_AZURE_TENANT_ID unset Azure AD / Entra ID tenant GUID.
CLOCKWORK_AZURE_CLIENT_ID unset Service Principal application GUID.
CLOCKWORK_AZURE_CLIENT_SECRET unset Service Principal client secret. Expires — Azure enforces a max lifetime.
CLOCKWORK_AZURE_SUBSCRIPTION_ID unset Subscription that owns the VMs.
CLOCKWORK_AZURE_BASE_URL https://management.azure.com
CLOCKWORK_AZURE_LOGIN_URL https://login.microsoftonline.com
CLOCKWORK_AZURE_TIMEOUT 15 Seconds.

All four of tenant/client/secret/subscription are required together — AzureClient::isConfigured() is all-or-nothing. Third cloud-provider branch in poll-servers / reconcile-provider, alongside DO and Hetzner. See Integrations → Azure.

Vultr

Variable Default Notes
CLOCKWORK_VULTR_API_KEY unset Read-only API key from my.vultr.com/settings/#settingsapi. Required for clockwork:reconcile-provider against Vultr-provider servers.
CLOCKWORK_VULTR_BASE_URL https://api.vultr.com/v2
CLOCKWORK_VULTR_TIMEOUT 15 Seconds.

Vultr’s API exposes no CPU/memory/disk time series, so clockwork:poll-servers never gets metrics for provider='vultr' servers — only alive/dead state. See Integrations → Vultr.

Linode (Akamai)

Variable Default Notes
CLOCKWORK_LINODE_TOKEN unset Read-only personal access token (Linodes scope) from cloud.linode.com/profile/tokens. Required for clockwork:poll-servers/reconcile-provider against Linode-provider servers.
CLOCKWORK_LINODE_BASE_URL https://api.linode.com/v4
CLOCKWORK_LINODE_TIMEOUT 15 Seconds.

CPU-only metrics (normalized by server.vcpus) — memory/disk/load stay null, same gap as Hetzner and Azure. See Integrations → Linode.

WP Engine

Variable Default Notes
CLOCKWORK_WPENGINE_API_USER_ID / _API_PASSWORD unset Basic Auth REST credentials from my.wpengine.com/api_access. Inventory/read only.
CLOCKWORK_WPENGINE_BASE_URL https://api.wpengine.com/v1
CLOCKWORK_WPENGINE_TIMEOUT 15 Seconds.
CLOCKWORK_WPENGINE_VIEW_ONLY true When true, enforces read-only mode: blocks mutating API requests and prevents remote Companion deployment over SSH. Safe default for unverified accounts.
CLOCKWORK_WPENGINE_SSH_PRIVATE_KEY / _SSH_PRIVATE_KEY_PASSPHRASE unset Separate credential from the API creds above — WP Engine’s SSH gateway auths by key, not by the REST API’s Basic Auth. Command execution and Companion install go over this, not the API. Same sensitivity class as a server’s own ssh_private_key column.

No server concept — same shape as Pressable, every operation addressed by install name. Unverified against a live account — see Integrations → WP Engine.

Kinsta

Variable Default Notes
CLOCKWORK_KINSTA_API_KEY unset Bearer token from the Kinsta MyKinsta dashboard.
CLOCKWORK_KINSTA_BASE_URL https://api.kinsta.com/v2
CLOCKWORK_KINSTA_TIMEOUT 15 Seconds.
CLOCKWORK_KINSTA_VIEW_ONLY true When true, enforces read-only mode: blocks mutating API requests (POST, PUT, DELETE) and prevents remote Companion deployment over SSH. Safe default for unverified accounts.
CLOCKWORK_KINSTA_SSH_PASSWORD unset Separate credential — Kinsta’s API can manage SSH access/credentials but can’t execute remote commands itself, so command execution and Companion install go over real per-environment SSH instead.

Same “no server concept, unverified against a live account” caveat as WP Engine — see Integrations → Kinsta.

Cloudways

Variable Default Notes
CLOCKWORK_CLOUDWAYS_API_KEY / _EMAIL unset API key is exchanged for an OAuth2 bearer access token (see CloudwaysClient::token()); email identifies the account in that exchange.
CLOCKWORK_CLOUDWAYS_BASE_URL https://api.cloudways.com/api/v2 v1 has reached end-of-life — only v2 is supported here.
CLOCKWORK_CLOUDWAYS_TIMEOUT 15 Seconds.
CLOCKWORK_CLOUDWAYS_VIEW_ONLY true When true, enforces read-only mode: blocks mutating API requests (POST, PUT, DELETE) and disables SSH command execution and Companion deployment. Safe default for unverified accounts.

The one hosting provider that’s also a CloudProvider — see Integrations → Cloudways for why metrics come from Cloudways’ own API rather than whichever cloud (DO/AWS/GCP/Vultr/Linode) it actually provisioned on.

GridPane

Variable Default Notes
GRIDPANE_API_KEY unset API token from the GridPane dashboard (Account Settings → API Keys). Bearer token.
GRIDPANE_BASE_URL https://my.gridpane.com/oauth/api/v1 Base URL for the GridPane API v1.
GRIDPANE_TIMEOUT 15 Seconds.
GRIDPANE_VIEW_ONLY true When true, enforces strict read-only mode: blocks all mutating API requests (POST, PUT, DELETE, remote WP-CLI) and disables SSH command execution and Companion plugin deployment. Essential when connecting client-owned or third-party API keys.

Server management panel running on real VPS servers — see Integrations → GridPane. Direct SSH access to servers and sites at /var/www/{domain}/htdocs.

TurnkeyWP

Var Default Notes
TURNKEYWP_TOKEN unset Sanctum token from TurnkeyWP → Settings → API tokens. Use an Owner’s token; TurnkeyWP only lists what the token’s user can see.
TURNKEYWP_BASE_URL https://app.turnkeywp.com/api/v1 Base URL for the TurnkeyWP API v1.
TURNKEYWP_TIMEOUT 15 Seconds.
TURNKEYWP_VIEW_ONLY false When true, blocks TurnkeyWP API writes, SSH command execution and Companion installs.

Clockwork Control’s own hosting control plane — see Integrations → TurnkeyWP.

DigitalOcean Spaces (S3-compatible)

Variable Default Notes
CLOCKWORK_DO_SPACES_KEY / _SECRET unset S3-style HMAC, NOT the DO PAT. Issue from the bucket’s Settings → Access Keys tab.
CLOCKWORK_DO_SPACES_REGION nyc3
CLOCKWORK_DO_SPACES_BUCKET empty
CLOCKWORK_DO_SPACES_PREFIX_TEMPLATE {domain}/ Override only if you’re not using SpinupWP-style backup paths.

SpinupWP

Variable Default Notes
CLOCKWORK_SPINUPWP_TOKEN unset API token from the SpinupWP dashboard.
CLOCKWORK_SPINUPWP_BASE_URL https://api.spinupwp.app/v1
CLOCKWORK_SPINUPWP_TIMEOUT 15
CLOCKWORK_SPINUPWP_VIEW_ONLY false When true, blocks mutating API requests (POST, PUT, DELETE) and disables SSH execution and Companion deployment. Safe for inspecting third-party fleets.

Pressable

Variable Default Notes
CLOCKWORK_PRESSABLE_CLIENT_ID / _SECRET unset OAuth2 client_credentials — no per-site “server” concept, every operation is addressed by site_id alone.
CLOCKWORK_PRESSABLE_AUTH_URL https://my.pressable.com/auth/token
CLOCKWORK_PRESSABLE_BASE_URL https://my.pressable.com/v1
CLOCKWORK_PRESSABLE_TIMEOUT 15 Seconds.
CLOCKWORK_PRESSABLE_VIEW_ONLY false When true, blocks mutating API actions (cache purges, bash scripts, WP-CLI execution) and prevents Companion plugin deployment.

Cloudflare

Variable Default Notes
CLOCKWORK_CLOUDFLARE_API_TOKEN unset Read scopes only. See integrations/cloudflare for the per-phase scope list.
CLOCKWORK_CLOUDFLARE_WRITE_TOKEN unset Zone.DNS:Edit plus Cache Purge. Used for DNS cutover writes and homepage URL cache purge after update batches. Never reuse the read-only token.
CLOCKWORK_CLOUDFLARE_BASE_URL https://api.cloudflare.com/client/v4

Backup relay

There’s no shared token or API — this app and the standalone relay droplet never connect to each other directly. Instead both sides read/write two small JSON files on the same S3 bucket, so the variables below are the standard Laravel s3 disk vars plus one prefix override. See Features → Backup relay.

Variable Default Notes
CLOCKWORK_BACKUP_RELAY_MODE in_repo Operational mode: in_repo for native scheduled streaming directly from this app, or external_agent to use the legacy standalone droplet handoff.
S3_BACKUP_RELAY_KEY AWS_ACCESS_KEY_ID Dedicated S3 access key for backup relay uploads. Falls back to AWS_ACCESS_KEY_ID if unset.
S3_BACKUP_RELAY_SECRET AWS_SECRET_ACCESS_KEY Dedicated S3 secret key for backup relay uploads. Falls back to AWS_SECRET_ACCESS_KEY if unset.
S3_BACKUP_RELAY_REGION us-east-1 S3 region where backup archives are uploaded.
S3_BACKUP_RELAY_BUCKET AWS_BUCKET Destination S3 bucket name.
CLOCKWORK_BACKUP_RELAY_DISK s3-backup-relay Dedicated filesystem disk configured in config/filesystems.php used for backup relay operations.
CLOCKWORK_BACKUP_RELAY_FREQUENCY weekly Default fleet-wide backup relay schedule frequency (daily, twice_weekly, weekly). Overridden per-site by sites.backup_relay_frequency.
CLOCKWORK_BACKUP_RELAY_RETENTION_DAYS 90 Default retention period in days for off-site backup archives.
CLOCKWORK_BACKUP_RELAY_ARCHIVE_PREFIX archives Destination folder prefix inside the bucket where site backups land (e.g. archives/{domain}/...). Production uses _control/backup-relay/archives due to scoped IAM permissions.
CLOCKWORK_BACKUP_RELAY_S3_PREFIX _control/backup-relay Key prefix for the two control files (targets.json, last-report.json). Used in external_agent mode only. Must match the external droplet’s S3_CONTROL_PREFIX.
AWS_ACCESS_KEY_ID unset IAM access key used as general fallback.
AWS_SECRET_ACCESS_KEY unset Matching fallback secret key.
AWS_DEFAULT_REGION us-east-1 General AWS region fallback.
AWS_BUCKET unset General bucket fallback.

Bill.com

Variable Default Notes
CLOCKWORK_BILL_COM_ENABLED false Master toggle. Daily syncs no-op when off.
CLOCKWORK_BILL_COM_USERNAME / _PASSWORD / _ORG_ID / _DEV_KEY unset All required when enabled. Generate the dev key at developer.bill.com.
CLOCKWORK_BILL_COM_BASE_URL https://api.bill.com/api/v2 The advertised v3 host has no DNS — v2 is what works.
CLOCKWORK_BILL_COM_CARE_PLAN_ITEM_REGEX /care plan/i Item names matching this regex are treated as care-plan-revealing.
CLOCKWORK_BILL_COM_CUSTOMER_LINK_WINDOW_DAYS 1095 3 years of invoice history walked for site↔customer linking.
CLOCKWORK_BILL_COM_CARE_PLAN_WINDOW_DAYS 400 Catches both monthly and annual invoicing cadences.

Mattermost

Variable Default Notes
CLOCKWORK_MATTERMOST_ENABLED false Master toggle.
CLOCKWORK_MATTERMOST_WEBHOOK_URL unset Required when enabled.
CLOCKWORK_MATTERMOST_CHANNEL unset Lowercase slug. Mixed case is silently rejected.
CLOCKWORK_MATTERMOST_USERNAME Clockwork Control
CLOCKWORK_MATTERMOST_ICON_EMOJI :lock:

Slack

Variable Default Notes
CLOCKWORK_SLACK_ENABLED false Master toggle. Independent of CLOCKWORK_MATTERMOST_ENABLED — both can be on at once.
CLOCKWORK_SLACK_WEBHOOK_URL unset Required when enabled.
CLOCKWORK_SLACK_CHANNEL unset
CLOCKWORK_SLACK_USERNAME Clockwork Control
CLOCKWORK_SLACK_ICON_EMOJI :lock:

See Integrations → Slack. The per-site client-facing Slack channel (ClientSlackNotifier) has no env vars of its own — its webhook is client-configured per site — but it does read the Operator identity vars below for the operator name/support link it puts in client-facing messages.

Performance scans

Variable Default Notes
CLOCKWORK_GTMETRIX_API_KEY empty GTmetrix REST API v2 — primary engine. Paid plan required (free tier is 5 tests/day). Empty falls through to PSI.
CLOCKWORK_GTMETRIX_REGION 4 Default test location, integer GTmetrix location ID (4 = San Antonio TX). Per-site override on sites.performance_scan_region.
CLOCKWORK_GTMETRIX_BASE_URL https://gtmetrix.com/api/2.0
CLOCKWORK_GTMETRIX_TIMEOUT 120 Seconds, per HTTP call.
CLOCKWORK_GTMETRIX_POLL_INTERVAL 5 Seconds between completion polls.
CLOCKWORK_GTMETRIX_POLL_MAX_ATTEMPTS 36 5s × 36 = 180s poll ceiling.
CLOCKWORK_PSI_API_KEY empty Google PageSpeed Insights v5 — fallback engine, runs only when GTmetrix errors. Free 25k req/day.
CLOCKWORK_PSI_TIMEOUT 90 Seconds. PSI can be genuinely slow.

Security scans

Variable Default Notes
CLOCKWORK_GOOGLE_WEB_RISK_KEY empty Google Cloud Web Risk API (commercial standard). Free up to 100k req/mo. Do not put a v4 Safe Browsing secret here.
CLOCKWORK_GOOGLE_SAFE_BROWSING_KEY empty Legacy non-commercial Safe Browsing v4. Used only when the Web Risk key is empty.
CLOCKWORK_URLHAUS_AUTH_KEY empty Optional. Free registration at auth.abuse.ch.
CLOCKWORK_BLACKLIST_TIMEOUT 10 Per-source timeout.
CLOCKWORK_SUCURI_BASE_URL https://sitecheck.sucuri.net
CLOCKWORK_SUCURI_TIMEOUT 30

SSH defaults

Variable Default Notes
CLOCKWORK_DEFAULT_SSH_USER clockwork-deploy The non-root sudo user we provision on every server.
CLOCKWORK_DEFAULT_SSH_PORT 22
CLOCKWORK_SSH_KEY_PATH unset Local default private key. Per-server keys override.
CLOCKWORK_SSH_KEY_PASSPHRASE unset If the key is passphrase-protected.
CLOCKWORK_SSH_CONNECT_TIMEOUT 10
CLOCKWORK_SSH_EXEC_TIMEOUT 30 Per-command override available in the client call.
CLOCKWORK_SSH_PREFLIGHT_TIMEOUT 2 Short fsockopen probe before the real SSH handshake, so a deleted/firewalled server fails fast instead of hanging past max_execution_time.
CLOCKWORK_SCHEDULED_JOBS_RETENTION_DAYS 30 How long Settings → Scheduled Jobs keeps run history before clockwork:prune-scheduled-job-runs deletes it.

Monitoring thresholds

Variable Default Notes
CLOCKWORK_CPU_RED_THRESHOLD 90 Percent. Drives green/yellow/red on the dashboard.
CLOCKWORK_CPU_YELLOW_THRESHOLD 70
CLOCKWORK_MEM_YELLOW_THRESHOLD 80
CLOCKWORK_DISK_YELLOW_THRESHOLD 85
CLOCKWORK_METRICS_WINDOW_MINUTES 15 Window for the DO jiffy delta.
CLOCKWORK_SSL_RENEWAL_GRACE_HOURS 48 Grace after the LE renewal date before flagging yellow.
CLOCKWORK_AUTO_IGNORE_PATTERNS empty Comma-separated substrings. Servers matching get auto-ignored on first import.
CLOCKWORK_AUTO_IGNORE_REASON Behind firewall — auto-flagged from name pattern
CLOCKWORK_SERVER_DISPLAY_NAME_STRIP_SUFFIX empty Server::display_name strips this suffix in UI tables — e.g. set to .example.com and “web36.example.com” shows as “web36”. Empty (default) shows the full name unchanged.

LM Studio (local LLM)

Variable Default Notes
CLOCKWORK_LM_STUDIO_BASE_URL http://localhost:1234/v1 Loopback only — no data leaves the box.
CLOCKWORK_LM_STUDIO_MODEL meta-llama-3-8b-instruct
CLOCKWORK_LM_STUDIO_API_KEY lm-studio LM Studio doesn’t enforce, but keep something here.
CLOCKWORK_LM_STUDIO_TIMEOUT 120

OpenRouter (AiRemedy Cloud LLM Engine)

Variable Default Notes
OPENROUTER_API_KEY unset API key from openrouter.ai used by AiRemedy. Configurable via Setup (/setup), Settings → API limits (/settings/integrations/ai-remedy/limits), or AiRemedy Settings (/ai-remedy/settings), which writes it directly to .env without database storage. The model is a setting, not an env var (default anthropic/claude-sonnet-4.5).

Companion mu-plugin

Variable Default Notes
CLOCKWORK_COMPANION_DIST_URL unset When set, installer fetches signed tarball. Empty = local rsync mode (dev).
CLOCKWORK_COMPANION_DIST_SHA256 unset REQUIRED when DIST_URL is set. Mismatched hash aborts the install.
CLOCKWORK_COMPANION_LOCAL_PATH ~/Projects/clockwork-companion Resolved via posix_getpwuid first because env('HOME') is null under Herd’s php-fpm.
CLOCKWORK_COMPANION_TIMEOUT 30 Per-call timeout for HTTP to the plugin.
CLOCKWORK_COMPANION_VERSION 1.39.1 The mu-plugin version bundled with this Core release. Compared per-site against sites.companion_version to compute the fleet rollout breakdown on /settings/updates — bump this when a new Companion tarball ships.
CLOCKWORK_RENEGADE_VERSION 1.0.4 The bundled Clockwork Renegade version for standalone WordPress sites.
CLOCKWORK_UNLOCK_HUB_DOMAIN clockworkwd.com Optional fallback domain for the LLAR emergency unlock console host. Overrides the default hub detection if unlock_hub_domain is unconfigured.

Operator identity

Variable Default Notes
CLOCKWORK_OPERATOR_NAME Clockwork Control operator Whoever runs this instance — appears in client-facing Slack messages and email footers.
CLOCKWORK_OPERATOR_CONTACT_EMAIL unset Appended to the uptime prober’s User-Agent (Clockwork Control-Uptime/1.0 (+you@example.com)) so a monitored site’s admin can identify and, if needed, whitelist or contact the bot. Sent to every monitored site on every probe — set deliberately, not by accident.
CLOCKWORK_OPERATOR_SUPPORT_URL unset Linked in client-facing Slack alerts (ClientSlackNotifier).
CLOCKWORK_OPERATOR_WEBSITE_URL unset Linked in the footer of outbound client emails (vulnerability reports, nightly update summaries).

Added in the modularization roadmap’s Phase 8, replacing what used to be a hardcoded name/email/URL baked directly into UptimeProber, ClientSlackNotifier, and two email templates.

Twilio SMS

Variable Default Notes
TWILIO_ACCOUNT_SID unset Account SID from Twilio Console.
TWILIO_AUTH_TOKEN unset Auth token from Twilio Console.
TWILIO_FROM_NUMBER unset Purchased Twilio phone number (E.164 format, e.g. +14045550100).
TWILIO_ENABLED false Set to true to activate SMS dispatch. Feature is wired but currently paused — no credentials configured yet. Recipients and off-windows are managed at /settings/notifications.

Alerts

Variable Default Notes
CLOCKWORK_ALERTS_EMAIL unset Fallback destination when no on-call SMS recipient is available (clockwork.alerts.email). See Integrations → Twilio.

Module Directory

Variable Default Notes
CLOCKWORK_MODULES_API_URL https://clockworkcontrol.com/api/modules.json Official + community module feed, browsed at /settings/modules. Point at a local mirror if you don’t want this instance calling out to clockworkcontrol.com.
CLOCKWORK_MODULES_CACHE_TTL 21600 (6h) Seconds the fetched feed is cached before the next scheduled/manual refresh re-pulls it.

Telemetry

Variable Default Notes
CLOCKWORK_TELEMETRY_ENABLED true Anonymous usage reporting — on by default; can be disabled during install or in Settings → Maintenance.
CLOCKWORK_TELEMETRY_ENDPOINT https://telemetry.clockworkcontrol.com/v1/report Where the weekly report is sent, if enabled.

Clockwork Control sends a small, anonymous usage report once a week: exact site and server counts, the list of enabled modules, and a per-module breakdown of how many sites/servers each one covers (e.g. how many sites are on SpinupWP vs. Pressable, how many servers are on DigitalOcean vs. Hetzner). Legacy bucketed counts (1-5, 6-25, etc.) are also included for backwards compatibility with older report consumers. It never includes site URLs, hosting credentials, content, or IP data. You can toggle this anytime in Settings → Maintenance or set CLOCKWORK_TELEMETRY_ENABLED=false to keep this instance fully offline.

See DISCLAIMER.md for the full data-handling commitment.

System updates

Variable Default Notes
CLOCKWORK_UPDATE_CHANNEL stable Cosmetic label only, shown on the updates page — doesn’t currently filter which GitHub releases are considered.
CLOCKWORK_UPDATE_REPO Clockwork-Web-Dev-LLC/clockwork-control Repo slug used to build the default releases API URL below. Change this if you’re running a fork.
CLOCKWORK_UPDATES_API_URL https://api.github.com/repos/Clockwork-Web-Dev-LLC/clockwork-control/releases/latest Full override for the release-check endpoint, in case CLOCKWORK_UPDATE_REPO alone isn’t enough (e.g. a private mirror).
CLOCKWORK_UPDATES_CACHE_TTL 43200 (12h) Seconds the latest-release check is cached. “Check Again” on /settings/updates bypasses this.

See Features → System updates.

Domain Expiration (RDAP)

Variable Default Notes
CLOCKWORK_RDAP_TIMEOUT 10 RDAP HTTP request timeout in seconds.
CLOCKWORK_RDAP_RATE_LIMIT 10 Cloudflare-capped rate limit ceiling (requests per 10 seconds).
CLOCKWORK_RDAP_TLD_BACKOFF_HOURS 2 Registry cooldown duration in hours after an authoritative registry returns 429 or 503.

SEO Indexability Watchdog

Variable Default Notes
CLOCKWORK_SEO_MONITORING_ENABLED true Global kill-switch for automated SEO indexability checks.
CLOCKWORK_SEO_ROBOTS_TXT_TIMEOUT 10 Timeout in seconds when fetching /robots.txt or homepage pre-flight checks.

Misc

Variable Default Notes
CLOCKWORK_ARCJET_BOTS_URL GitHub raw URL Override only if you mirror the file.
Clockwork Web Dev
Brought to you by Clockwork Web Dev

A real WordPress development agency building battle-tested operational tooling to run client fleets with zero bloat and total control.

Visit Clockwork Web Dev→