Skip to content

Harness + Celln selection UX: administrator-assisted one-shot delivery

Historical record

This page records a Celln development milestone (September 2026). Interfaces and limits it describes may since have changed or been replaced by the Celln fleet. For current behaviour see Celln Backend and Celln Fleet Installation.

Recorded for epic #426 after the user's UI/YAML question. The approved experience has three distinct choices: Harness identity, execution placement, and explicitly borrowed tools. The advanced JSON API and the high-level AgentRun cellnSelection schema are implemented. Runs → New Run now supports initial catalogue selection. Registered compositions can receive automatic trusted issuance; unmatched selections wait for operator preparation. On-demand admission/distribution remains pending.

Current run form

Select an Agent, inherit its Harness or choose a one-run override, then select Celln. A compatible native JSON profile opens Harness in Celln, with an explicit DeepSeek model and ordered tool checkboxes. Empty selection lends no tools. The form shows catalogue descriptions, support owners, publisher keys and declared limits. The effective-permission preview separately resolves the current grant intersection; it is not executable readiness or permission to bypass subsequent issuance checks. See the borrowed-tool handoff for the complete user YAML example and administrator prerequisites. Incompatible runtimes and unavailable catalogues block the request. A native runtime without an OCI image cannot be submitted to the Job backend.

The button says Request catalogue run because readiness is not established. The operator must still prepare/register new compositions. For an exact registered composition, the controller can commit issuance automatically. Run details show the selected tools and the controller's issuance observation. Without a selected Harness, the existing Celln host-forge path retains its separate ambient-host-model warning. No Celln chat/session button is exposed.

Catalogue listing uses a namespace-scoped read-only endpoint and read-only apiserver RBAC. It does not expose tool approval or grant mutation. Browser contract tests use intercepted responses; they do not establish live deployment. Separate actual browser/API/controller/KVM/DeepSeek evidence now exists in the MLP acceptance index, including cancellation, recovery and selected security checks. Persistent installation qualification remains open.

UI requirements

  • Agent → Harness selects the approved default runtime. New Run inherits it and offers a one-run override, preserving the existing runtimeRef workflow.
  • Execution placement selects Job or Celln. Only proven compatible combinations can run. Explain unsupported profiles, rather than silently switching backend or pretending an arbitrary OCI/Pi/Hermes runtime is Celln-compatible.
  • Borrowed tools is an explicit multi-select of approved catalogue revisions, displaying description, publisher/owner, effective permissions and limits, and selection-specific readiness. Empty selection means no borrowed tools.
  • Before submission, show the resolved runtime, model/provider, ordered tools, permission intersection and any review/distribution/prewarm blockers. A node preflight success must not make an unverified selection runnable.
  • BYO tools enter a submission/review workflow; users cannot self-approve or turn an uploaded artifact into authority. Pending/refused status is visible.
  • Results show the answer, tool-call timeline, pinned identities, receipt and correlated audit, with cancellation and cleanup state. Runtime transcript events must not be labelled individually hardware-attested tool receipts.

“Harness in Celln” means the model loop executes in the cell. “Celln tool execution” means an outside Harness invokes Celln-backed tools. Keep these labels distinct. Model selection must be explicit and checked against the host grant; the existing forge-path warning about ambient host model selection must not be reused for this Harness path.

YAML and API parity

Keep Agent.spec.runtimeRef as the default Harness reference and Agent.spec.execution for Agent-level placement, lifecycle and borrowed-tool defaults. Create/Edit Agent can save those defaults; subsequent runs inherit them unless overridden. AgentRun.spec.backend remains the effective placement recorded on each run. cellnSelection.toolRefs names catalogue revisions. It is deliberately separate from the existing required explicit artifact fields in celln, preserving that API and rejecting ambiguous mixtures:

# Requires the current catalogue-selection CRD and controller.
spec:
  agentRef: my-agent # its runtimeRef selects an approved Celln-capable Harness
  backend: celln
  task: Uppercase "celln", then measure its length.
  model:
    provider: deepseek
    model: deepseek-chat
    authSecretRef: "" # host-issued model authority, not a Kubernetes key
  cellnSelection:
    # Optional one-run override; otherwise inherit Agent.spec.runtimeRef.
    # runtimeRef: approved-celln-runtime
    toolRefs:
      - name: uppercase-v1
        revision: v1
      - name: length-v1
        revision: v1

Names/revisions are user intent, not the final authority. The controller must resolve live same-namespace UIDs/generations/full-spec identities, intersect independently trusted operator/runtime/Agent/run grants, and freeze the exact signed composition, model grant, policy and execution identity. Users should not assemble mote hashes, closure signatures or host credential/grant files.

UI and YAML use the same admission and resolution path; YAML is not an escape hatch around the UI. The API must distinguish high-level selection from the existing advanced explicit-artifact binding and reject ambiguous mixtures. Omitted grants must not mean “all installed tools”. Retrying a denied or ambiguous attempt must not invent a new execution ID or duplicate side effects.

The same-namespace runtime override and ordered tool list participate in the frozen full-run identity. Operator CLI selection must exactly match the run's names/revisions/order; every grant layer must approve the overridden runtime. Empty toolRefs: [] lends nothing. Missing/null lists and duplicate names refuse.

POST /api/v1/runs accepts the same cellnSelection object, backend: celln, and explicit provider: deepseek plus model: deepseek-chat. It does not convert the request into an OCI harness task or inherit Kubernetes model credentials. Do not also supply the endpoint's legacy top-level runtimeRef; put a one-run override inside cellnSelection. Explicit artifact blocks use the Kubernetes AgentRun API, not this endpoint.

Without committed issuance the current controller reports CellnIssuanceCommitted=False with AwaitingIssuance (or DispatcherNotConfigured) and does not enter legacy execution. Operators can use the durable issuance CLI with matching selection flags. This waiting condition is not selection readiness or an automatic packaging/distribution service. Deploy the new controller before creating these requests; older controllers cannot enforce the new waiting path.

Agent-level placement/tool defaults are stored on Agent.spec.execution and inherited by supported entry points. Conversational New Run overrides still need explicit immutable/frozen identity semantics before exposure. Celln conversations remain unsupported until the ADR's external checkpoint and disposable-turn lifecycle is implemented and proven. Do not expose a chat button that accidentally starts an OCI HarnessSession for a Celln selection.