OpenClaw EnterpriseDOCSGitHub

Prepare a production handoff

Decide whether a Kubernetes installation is ready for a business workflow after deploying and verifying production Agents. Record who operates it, access decisions, and evidence in your organization's private operations record. The deployment guides cover installation and runtime checks; your organization is responsible for service commitments, regulatory compliance, and recovery targets for the workload.

Record the initialization Job for handoff

Use the CLI from the chart's source revision. Exclude other install, upgrade and Job writers until the installer exits. Choose a new receipt directory under a private, durable parent for this target. Use a filesystem that enforces owner-only permissions and supports hard links and directory sync. Keep the receipt after install.

Record the chart source commit and the matching CLI release or build commit and binary checksum in a separate private handoff record. The receipt's version is its file-format version, not the OCE release; an unversioned local CLI build can print dev. Keep this source identity with the receipt without editing its files.

The CLI syncs intent.json (target, attempt ID, time and input hashes), writes the receipt notice to stdout, then syncs dispatch.json before starting Helm once. If the notice write returns an error, the command exits unsuccessfully and names the preserved receipt directory in its error. That error confirms that this attempt created no dispatch.json and started no Helm install. Keep the receipt, repair the stdout destination, and confirm the target is still unused before selecting a new attempt with a new receipt directory.

While Helm waits, it can save the first recognized, attempt-marked Job UID in job.json. helm-result.json records Helm's separate outcome. After dispatch, a missing result means unknown. A failed or disconnected Helm client can leave the Job running and the database changed. Do not rerun install or switch to upgrade.

The installer removes private temporary copies of the kubeconfig, chart and values on normal exit. After a forced kill, confirm its Helm process has exited before removing that installation's occ-install-* temporary directory. A forced kill during handoff can also leave an occ-handoff-* directory with the reader's private kubeconfig. Share only the receipt and this source identity record with the authorized reader.

If install reports a template validation failure, run offline helm template with the same local chart, values, release, namespace and recorded installation.attemptId. Use the same Helm version. Keep rendered manifests and stderr in owner-only local outputs outside the receipt; they may contain secrets. For the shared DNS suffix refusal, the host in auth.baseUrl and agentNativeAdmin.domain must share a non-public DNS suffix. Correct a copy of the inputs and render again. Neither a render result nor a missing Job establishes cluster effects or authorizes retry; preserve the receipt and reconcile the original attempt below.

Resume an installation in progress

Use the matching CLI, kubectl, your own trusted kubeconfig, and permission to get the named Job (normally <release>-initialization). The CLI may also read API discovery and check whether the Namespace exists after a missing Job. Neither Namespace access nor permission to list Jobs or Pods is required. If the CLI release is unavailable, run go run ./cmd/occ from the matching checkout.

Run plan for the Job result and recovery steps, or use doctor to inspect the Job. The example uses the release name and Kubernetes namespace from the custom Helm guide. Substitute the values recorded for your installation.

bash
target=(--kubeconfig "$KUBECONFIG_FILE" --context "$CONTEXT"        --kube-namespace openclaw-system --release oce)# For an installation started by occ, use its original receipt directory.target+=(--receipt "$INSTALL_RECEIPT_DIRECTORY")# For an older installation without a receipt, instead use# --expect-job-uid "$RECORDED_JOB_UID" only if captured during that attempt.occ installation plan "${target[@]}"

With a receipt, the commands compare the recorded cluster connection, namespace and release before reading the Job. A different context name or credential can select the same connection. Keep the same server URL (including path), TLS and kubeconfig proxy settings. Neither command changes the receipt or cluster.

The Job UID identifies the initialization, not a later API operation. If an API attempt had an uncertain outcome, reconcile that original attempt before another write; do not replay the uncertain operation. Confirm removal of temporary access with its owner, then use the workload checks below.

Choose the first workflow

Start with one task and a small group. For example, let an Agent read a support queue and draft replies before enabling customer-facing sends. Name the business owner, acceptable output quality, response time, cost, and the person who handles exceptions. Use test records and a private test channel for the initial checks.

Confirm that the organization can operate the host infrastructure, database, credentials, and integrations before relying on the workflow.

Assign operating ownership

Record a primary and backup contact, the exact scope they manage, and how to reach them when the platform is unavailable. The same person can own several areas; each responsibility still needs an explicit handoff.

Area Decision to record Owning guidance
Platform Who maintains OCC, PostgreSQL, the cluster, storage, images, and deployment inputs. Production installation
Business workflow Who approves actions, checks result quality, handles exceptions, and can suspend the work. Agent deployment
Access and credentials Who admits users, grants resource access, renews credentials, and handles compromise or staff departures. Authorization, credential lifecycle
Data and evidence Which data may leave each workload, where logs and backups live, and their access and retention rules. Runtime security, observability
Usage and cost Who owns provider billing, expected request volume, budget alerts, and the response to quota exhaustion. Model credentials

Kubernetes resource quotas constrain the configured infrastructure resources; they do not impose a model-spending budget. Use the provider's available spending or quota controls and document their limits. Include model calls, integrations, storage, and operator time when measuring the pilot's cost.

Review access and data destinations

Keep the platform and runtime boundaries distinct. OCC authorizes operations on its exact resources and manages separate Agent gateways. An OCC role does not define which CRM records or email recipients a connected business tool may use. Enforce those limits in the destination system or integration with a dedicated business identity and narrowly scoped access.

For each integration, record the allowed reads, writes, external destinations, required reviewer, and revocation owner. Check that the selected runtime can represent the requested tool policy. A saved plugin selection is desired state, not proof that its policy is supported or active; see Agent plugins.

Inventory model endpoints, channel providers, tools, MCP servers, log exporters, and backup destinations. Include fallback models and secondary processing such as search or media services. Self-hosting the workload does not establish that data stays on its host or in one region. The current Kubernetes model-egress exception allows public TCP/443 beyond a provider-specific allowlist; review networking and isolation before making a destination-isolation claim. Treat retrieved messages, documents, and web pages as untrusted inputs when deciding which actions may run.

Verify the deployed workflow

Keep a short evidence record identifying the Namespace, Agent, version, verification time, expected result, and observed result. Store credential references rather than values.

  1. Complete the production workload checks: the expected version, denied and allowed gateway access, and a real model turn through the selected runtime. A deployment response of 202 means work was admitted; activeRevisionId alone is not serving-health evidence.
  2. Submit a representative business request through the intended channel. Verify the source records read, the generated result, and any approved change in the destination system. Check the result against the pilot's quality, time, and cost expectations.
  3. Exercise denied access and, where supported, rejected approvals. Confirm that the destination remains unchanged. Demonstrate the human handoff for an ambiguous request or unavailable integration.
  4. Before enabling retries for writes, test a timeout or repeated request against test records. Verify the integration's duplicate-prevention behavior; OCC deployment reconciliation does not establish exactly-once CRM updates or message delivery.
  5. Repeat the relevant checks after a version, credential, plugin, or access policy change. Confirm that unrelated Agents retain their intended behavior.

Connect alerts to a response

Verify each private API/worker metrics target using Pod discovery, and use platform observability to connect operational logs and prove backend receipt. Default local output does not prove remote delivery. Then assign alert thresholds and a response owner for the workload. Keep an alert route that does not depend on the affected Agent replying.

Signal First operator response
Agent remains unready or work stops advancing Check the independent worker, current permissions, runtime readiness, and the selected Driver's diagnostics in controller troubleshooting.
Channel or business action fails despite a reachable gateway Verify that integration's credentials, provider quota, and destination result; repeat the affected workflow check.
Credential is near expiry or provider quota is exhausted Notify the credential or billing owner and use the credential-specific renewal path.
Export fails, records are refused, or the Collector queue fills Check backend receipt, exporter connectivity, and Collector metrics.

Operational logs, Collector metrics, PostgreSQL audit records, and destination transaction records answer different questions. The Collector does not export the audit ledger or provide application metrics, distributed traces, dashboards, or business-success alerts. Filtered operational logs are best-effort; their absence does not prove that an action did not occur. Confirm consequential business effects in their destination system.

Prepare recovery and update acceptance

Agree on acceptable downtime and data loss before relying on the workflow. Controller lease recovery handles interrupted reconciliation; it is not a backup or a complete Installation restore. There is currently no general OCC backup/restore command or explicit Agent rollback endpoint.

Record the protection and recovery owner for each required asset:

Use database- and storage-owner backup procedures that capture consistent state; do not treat copies of live SQLite files or PVC persistence as a verified backup. Coordinate the restore points across platform state, runtime state, configuration, and credentials, and record any consistency limits. Protect backups like the live data and retain a copy outside the failure domain being recovered.

Have the infrastructure owner review and rehearse the installation-specific restore procedure on an isolated target. Block production connectivity before starting a restored API, worker, or runtime: restored work may reconcile or repeat external actions. Substitute test credentials and disable copied production channels and scheduled work before allowing test egress. Verify state, access, and the business workflow; measure recovery time and the age of recovered data. Before an actual cutover, fence old writers and workloads. RWO storage and normal version routing do not provide independent process fencing during a node partition.

For an update, retain the reviewed deployment inputs and a verified recovery point, rehearse the candidate in a separate environment, and repeat the workload checks before widening use. Define the failure response with the infrastructure owner; reverting a Helm release or image does not restore database, Secret, or workspace state. A saved version fixes the requested configuration and references. Referenced Secret values and resolved plugin releases can change. See version snapshots and plugin lifecycle.

Check conversation continuity

Before the upgrade, choose a test conversation on an existing Agent and note a harmless exchange. After recovery, reopen that conversation on the same Agent. Find the earlier exchange, then send a follow-up and check for a new reply. Repeat the check if you return to the old build. A new chat or a restored workspace file can work even when the original history is missing.

For dedicated Codex, the Gateway claim holds the conversation and the Harness claim holds codex-sessions. To check native thread continuity, record the thread ID before the change and verify the follow-up used that same thread. Keep IDs and results private; omit message bodies and credentials.

Re-creating a split-layout tenant assigns new Agent IDs; the separate archive keeps old conversations for reference.

Complete the handoff

The business and platform owners should be able to locate the accepted workflow, deployed version, access and data decisions, credential renewal dates, alert responses, and recovery evidence without the original installer. Record unresolved limits and the decision to accept them or defer the workload. Revisit the handoff when a new integration, permission, runtime, or data category changes those assumptions.

Search documentation