# Cohesix host tools — user guide Use this guide to operate a Queen from a Mac or Linux host, share its connection between tools, publish host observations, run authorised host work, and retain results for later review. The Queen runs Cohesix; **the tools in this guide run on your host, not at the Queen's serial prompt**. CUDA, model files, containers, REST and the desktop UI remain host-side. Start with [Quickstart](QUICKSTART.md) to install a matching host bundle and boot a target. Then follow [Connect and verify](#connect-and-verify). For normal work involving more than one tool, use a gateway rather than opening competing TCP sessions. This guide describes the current source interfaces. An older release can have different options, credentials or authority policy. Keep its binaries and configuration together, check its `--help`, and read the [M27a migration notes](M27A_AUTHORITY.md#release-migration-and-historical-errata) before using historical deployment examples. Published fixture credentials are not deployment credentials. ## Find the right tool | Your job | Tool or workflow | Where the effect occurs | | --- | --- | --- | | Browse the Queen, issue commands or run a checked script | [`cohsh`](#cohsh) | Target, through TCP or REST | | Share one Queen between a shell, UI and automation | [`hive-gateway`](#hive-gateway) | Host service owning the target connection | | Inspect state, compare captures or export evidence | [`coh`](#coh), [evidence workflow](#capture-and-review-evidence) | Target reads and local files | | Use existing file-oriented software | [`coh mount`](#mount-a-namespace) | Host FUSE mount of permitted target paths | | Discover a real GPU and publish its inventory | [`gpu-bridge-host`](#gpu-bridge-host) | Discovery on the GPU host; snapshot on the Queen | | Run a local program after checking a GPU lease | [`coh run`](#run-a-host-program) | The host where `coh` is running | | Register and diagnose approved CUDA work | [`coh workload`](#registered-cuda-workloads) | The GPU executor host | | Export a LoRA job and manage an adapter registry | [`coh peft`](#manage-peft-adapters) | Export reads, host registry and GPU projection | | Publish Docker, systemd, Kubernetes or other host observations | [`host-sidecar-bridge`](#host-sidecar-bridge) | Observations of the publishing host | | Execute admitted, allowlisted host actions | [`host-ticket-agent`](#host-ticket-agent) | The host running the agent | | Package and upload a small CAS update | [`cas-tool`](#cas-tool) | Local bundle, then target update store | | View the hive and use a graphical operator console | [SwarmUI](#swarmui) | Host desktop, using the same target contracts | | Integrate Cohesix into a Python application | [Python package](#cohesix-python-package) | Explicit REST, TCP, filesystem or mock backend | The eight operator executables are `cohsh`, `coh`, `hive-gateway`, `gpu-bridge-host`, `host-sidecar-bridge`, `host-ticket-agent`, `cas-tool` and `swarmui`. Shared crates such as `coh-status`, `sidecar-bus` and `console-ack-wire` support the suite; you do not need to start additional services for them. **In this guide:** [Setup](#set-up-your-host) · [Connection ownership](#choose-one-live-topology) · [First connection](#connect-and-verify) · [Write credentials](#authentication-layers) · [Tool reference](#tool-catalog) · [Troubleshooting](#troubleshooting) · [Shutdown](#shut-down-without-losing-state) · [Release maintainer appendix](#release-factory) ## Set up your host ### Use one matching installation For a release installation, extract the Mac or Linux host archive into its own directory and follow the bundle's `QUICKSTART.md`. The Pi image archive does not contain host executables: operating a Pi also requires the appropriate Mac or Linux host bundle. From the **host bundle root**, prepare and check the runtime: ```bash ./scripts/setup_environment.sh ./scripts/setup_environment.sh --check source .venv/bin/activate export COH_BIN="$PWD/bin" ``` The first command can install host packages. The second checks an existing installation. Neither installs an NVIDIA driver or builds a Queen image. Verify the archive's `MANIFEST.sha256` as described in Quickstart before running its contents. For an already built source checkout, work from the **repository root**: ```bash source "$HOME/.cargo/env" source .venv/bin/activate export COH_BIN="$PWD/out/cohesix/host-tools" ``` When those binaries do not yet exist, follow [Build from source](QUICKSTART.md#build-from-source). Source developers can substitute `cargo run -p TOOL --` for `"$COH_BIN/TOOL"`. FUSE and GPU backends are build features: a minimal Cargo build is not necessarily equivalent to a native release build. Use the selected manifest's generated configuration, not policy copied from a different target or release. The examples below use **Bash**. In each new terminal, return to the same installation root and set `COH_BIN` and the relevant connection variables. Variables defined in one terminal are not automatically available in another. `COH_BIN` and `COH_TARGET_HOST` below are conveniences for these examples, not settings automatically understood by every executable. ### Check the local tools ```bash "$COH_BIN/coh" --help "$COH_BIN/cohsh" --help "$COH_BIN/hive-gateway" --help "$COH_BIN/coh" doctor ``` `coh doctor` checks local policy/ticket, mount, GPU and runtime prerequisites. **It is not a target connection test:** its implementation does not use the connection options to probe the Queen. A missing optional GPU or FUSE prerequisite is different from a failed TCP connection; read the individual check results. For a deliberately simulated local check: ```bash "$COH_BIN/coh" doctor --mock "$COH_BIN/cohsh" --transport mock --role queen ``` At `coh>`, type `help`, `ls /`, then `quit`. Mock state is not target evidence. Rust in-process mocks are separate for each process; one mock executable does not populate another. Python's filesystem-backed mock can retain state at its chosen directory. Also, **mock does not mean every tool is free of host side effects**: `coh run --mock`, for example, can still launch the supplied local program. ## Choose one live topology The Queen's authenticated TCP console accepts **one client**. Choose one of these alternatives: ```text Direct: one foreground tool ----------------------> Queen TCP console Shared: cohsh / coh / SwarmUI / Python / bridges | +---- REST ---> hive-gateway ---> Queen TCP console ``` | Mode | Console owner | How to use it safely | | --- | --- | --- | | Direct TCP | One shell, UI, mount or bridge | Finish that process before opening another direct client. | | Shared gateway | `hive-gateway` | Point every other live tool at its REST URL. This is the normal multi-tool setup. | | Mounted filesystem | The `coh mount` process uses TCP or REST | Keep the mount process running; filesystem clients inherit its access. | | Mock or offline replay | No live target | Keep the output labelled as model or historical data. | A direct publisher with `--watch` or `--interval-ms` keeps its connection. Starting a direct shell beside it is not concurrency; it is contention for the only console. A gateway does not add an in-target listener or a second control authority. The target's serial/local-seat console remains a separate operator surface; its guide is [Userland and CLI](USERLAND_AND_CLI.md). ## Connect and verify ### 1. Select the actual target For a Pi, use the address verified at that Pi's current console. This is an example address, not automatic discovery: ```bash export COH_TARGET_HOST="192.168.10.50" export COH_TARGET_PORT="31337" export COH_WORKER_PROFILE="pi4-production" export COH_REST_URL="http://127.0.0.1:8080" ``` For a locally running QEMU Queen, use these values instead: ```bash export COH_TARGET_HOST="127.0.0.1" export COH_TARGET_PORT="31337" export COH_WORKER_PROFILE="qemu-smp-production" export COH_REST_URL="http://127.0.0.1:8080" ``` Use the forwarded port selected by the QEMU launcher if it differs. `--worker-runtime-profile` selects the gateway's generated Worker bounds; it does not detect or qualify the target. Select `pi4-production` explicitly for Pi even when the gateway itself runs on a Mac. ### 2. Start the shared gateway First quit any direct TCP client. On the gateway host, obtain the Queen console credential and a **different** REST request-authentication token from the operator responsible for this deployment. For write-capable operation, also configure the delegated-ticket issuer reference. Do not put secret values in source files or shell command arguments. In the gateway terminal: ```bash : "${COH_AUTH_TOKEN:?load the console credential for this target}" : "${HIVE_GATEWAY_REQUEST_AUTH_TOKEN:?load the gateway request-auth token}" : "${HIVE_GATEWAY_DELEGATION_KEY_REF:?set the provisioned env: or file: issuer reference}" export COH_AUTH_TOKEN HIVE_GATEWAY_REQUEST_AUTH_TOKEN HIVE_GATEWAY_DELEGATION_KEY_REF "$COH_BIN/hive-gateway" \ --bind 127.0.0.1:8080 \ --tcp-host "$COH_TARGET_HOST" \ --tcp-port "$COH_TARGET_PORT" \ --worker-runtime-profile "$COH_WORKER_PROFILE" \ --delegation-key-ref "$HIVE_GATEWAY_DELEGATION_KEY_REF" ``` Leave this process running. Its upstream role defaults to `queen`; use its `--role` and `--ticket` only for the deployment's intended upstream attachment. A narrower upstream ticket also narrows every downstream client. Keep the bind on loopback. Neither the console nor the gateway supplies TLS. For clients on another machine, use an approved authenticated tunnel, VPN or TLS-terminating proxy. A remote Jetson's `127.0.0.1` refers to that Jetson, not to your Mac. Give it a URL reachable through the secured connection. Do not solve reachability by exposing an unauthenticated network boundary; `--allow-non-loopback-bind` is an explicit exposure opt-in, not encryption. ### 3. Verify the gateway and the Queen separately In another terminal, set `COH_BIN` and `COH_REST_URL` as above. Obtain a private operator-provisioned header file containing `Authorization: Bearer TOKEN` and `x-cohesix-ticket: TICKET`, with the actual request credential and delegated read ticket for these paths. Set `COH_READ_HEADERS` to its absolute path; keep its contents private and never enable a compatibility bypass just to read. Then run: ```bash : "${COH_READ_HEADERS:?set the private read-credential header file}" curl --header "@$COH_READ_HEADERS" --fail-with-body --silent --show-error \ "$COH_REST_URL/v1/meta/status" curl --header "@$COH_READ_HEADERS" --fail-with-body --silent --show-error \ "$COH_REST_URL/v1/meta/bounds" curl --header "@$COH_READ_HEADERS" --fail-with-body --silent --show-error --get \ --data-urlencode 'path=/proc/boot' \ --data-urlencode 'max_bytes=1024' \ "$COH_REST_URL/v1/fs/cat" ``` Require `connected: true`, the expected backend/profile and a successful `/proc/boot` read identifying the intended Queen. `/v1/meta/bounds` describes **compiled host policy**; `/proc/boot` is **target-reported identity**. Compare both with the selected deployment rather than treating either one alone as proof of parity. A connected mock gateway is still a model. Non-public reads require request authentication and delegated `Read` or `ReadWrite` scope, as described under [Delegated namespace reads](#delegated-namespace-reads). They remain bounded by the gateway's upstream target authority. Public read classification is generated; a request-auth token alone is not a delegated read grant. Protect the gateway endpoint and provision scoped credentials before using the read examples. ### 4. Do a first useful read ```bash "$COH_BIN/cohsh" --transport rest --rest-url "$COH_REST_URL" --role queen ``` At the **`coh>` prompt**, enter only the following commands, without a prompt prefix: ```text ls / cat /proc/boot cat /proc/root/reachable cat /proc/schedule/summary cat /proc/lease/summary tail /log/queen.log 32 quit ``` A successful read means that operation completed. Inspect the returned state; `OK` does not mean every service is healthy. The gateway stays running after `quit`, ready for the UI, another shell or an evidence capture. ## Authentication layers There are several independent credentials and checks. Confusing them is a common cause of “connected, but writes fail”. | Layer | What you supply | What it permits | | --- | --- | --- | | Console authentication | This Queen's console credential, commonly `COH_AUTH_TOKEN` | Opening the authenticated TCP console | | Upstream attachment | Gateway/direct-tool role and, when required, capability ticket | Target namespace identity, scope and budget | | REST request authentication | Gateway token; clients commonly use `COH_REST_AUTH_TOKEN` or `HIVE_GATEWAY_REQUEST_AUTH_TOKEN` | Calling the host HTTP mutation boundary | | REST caller delegation | Signed `COH_REST_TICKET`, sent as `x-cohesix-ticket` | Finite caller-specific write scopes and quotas beneath the upstream ceiling | | Target policy | Enabled paths, approvals, writer epoch and current lifecycle state | Whether the concrete operation is allowed now | | Host execution request | A `host-ticket/v1` or other supported action record | Asking the agent for a particular allowlisted host action; this is not a REST credential | Every REST mutation, including a batch, needs **both request authentication and a delegated caller ticket**. A console password, `--role queen`, or the REST token alone is insufficient. The gateway verifies the caller ticket; the VM still sees the gateway's upstream principal. This is gateway-enforced caller identity, not VM-verified individual caller identity. ### Delegated namespace reads non-public REST reads, including gateway status, require request authentication and a delegated `Read` or `ReadWrite` scope. Mint with `cohsh --mint-ticket --role queen --ticket-subject --ticket-read-scope ` and an existing protected signing-key reference. Combining read and write on the same prefix creates `ReadWrite`; both consume one shared finite quota. An explicitly issued Queen read scope `/` is administrative authority. `--read-compatibility` permits gateway-Queen reads of admin-class paths using request auth in a single-caller installation. Ticket-scoped paths still require delegation. The default enables no compatibility bypass. Rust and Python REST clients, REST FUSE and SwarmUI use the same delegated read header. Native direct console/FUSE transports retain their own authenticated session authority. ### Prepare a writing client Obtain a signed ticket for this client's job, with the needed path scope, subject, lifetime and operation budget. In the client terminal: ```bash : "${COH_REST_AUTH_TOKEN:?load the request-auth token for this gateway}" : "${COH_REST_TICKET:?load the signed delegated ticket for this job}" export COH_REST_AUTH_TOKEN COH_REST_TICKET ``` Use a clean, deployment-specific environment. Different tools give different precedence to the request-token aliases; an old `HIVE_GATEWAY_REQUEST_AUTH_TOKEN` or `COHSH_REST_AUTH_TOKEN` can override the intended value. Do not leave conflicting aliases set. Start the writing shell from that environment: ```bash "$COH_BIN/cohsh" --transport rest --rest-url "$COH_REST_URL" --role queen ``` REST attachment reads `COH_REST_TICKET`; an explicit `--ticket` overrides that binding, but exposes a bearer credential in process arguments. Prefer the environment on a private operator host. Changing the shell's REST attachment replaces its caller binding, not the gateway's upstream role. Current REST shell and `coh` transports accept only the local `queen` role; that local label does not widen the gateway's upstream authority. ### Enrolled external identities Use `coh identity --mapping ID --jwks FILE` (JWT on stdin) and `coh identity --mapping ID --local` (kernel effective uid). Both normally render a verified subject's finite ticket request. An enrolled issuer may add `--issuer-key-ref env:NAME` or `file:/absolute/path` to issue a gateway-only ticket. The authenticated gateway exchange provides the remote JWT path. Enrollment is compiler-owned under `providers.identity_mappings`; defaults are disabled. See [identity enrollment](IDENTITY_MAPPING.md) and [SIEM boundaries](SECURITY.md) before enabling a deployment. ### Issue a narrow ticket — issuer administrators only A publisher needs its signed ticket, **not the issuer's signing key**. On a trusted issuer host with the provisioned key source available, this example creates a ticket only for GPU snapshot publication: ```bash : "${HIVE_GATEWAY_DELEGATION_KEY_REF:?set the provisioned issuer reference}" COH_REST_TICKET=$("$COH_BIN/cohsh" --mint-ticket --role queen \ --ticket-secret "$HIVE_GATEWAY_DELEGATION_KEY_REF" \ --ticket-subject gpu-publisher \ --ticket-write-scope /gpu/bridge/ctl \ --ticket-ttl-s 300 --ticket-ops 128) || exit 1 export COH_REST_TICKET ``` The key must match the gateway's delegated-ticket verifier. `env:NAME` reads a provisioned environment variable; `file:/absolute/path` reads a provisioned file. The `--ticket-secret` argument above contains a reference, not key bytes. A missing or invalid selected source fails rather than falling back. Transfer the resulting ticket through the deployment's secret-management channel. This ticket cannot authorise a host action, CAS upload or arbitrary Queen command. Issue separate scopes for separate jobs. `--ticket-write-scope` takes one prefix; do not assume it is a repeatable option. TTL and operation counts must fit the selected policy and the planned work, including each record in a multi-record publication. Long-running clients need an explicit renewal and restart procedure; a short-lived ticket does not renew itself. ### Production Queen commands Production authority profiles disable `/queen/ctl` and the legacy `spawn` and `kill` shortcuts. They use `/queen/intents/ctl` with a bounded `queen-intent/v1` envelope, immutable retry identity, current timestamp and the selected `writer_epoch`. Its `cmd` field is a **JSON string containing the Queen command**, not a nested command object. Required policy approvals remain separate. The current `coh gpu lease` helper still targets the legacy `/queen/ctl` path. It is therefore a **compatibility-profile helper, not a production strict-intent client**. Do not disable production policy to make an example work. Use the strict-intent contract and the corresponding shell/Python interfaces in [M27a authority](M27A_AUTHORITY.md#strict-queen-commands), [Userland and CLI](USERLAND_AND_CLI.md) and [Python support](PYTHON_SUPPORT.md). A rejected legacy write is not evidence of a broken GPU connection. ## Tool catalog Choose a tool below for its workflows, options and result checks. Commands use the installation and gateway selected above unless marked local or offline. ### `cohsh` Use `cohsh` for interactive namespace work, checked `.coh` scripts, ticket minting and trace capture/replay. Full console grammar belongs in [Userland and CLI](USERLAND_AND_CLI.md); host invocation is shown here. | Invocation option | Use | | --- | --- | | `--transport tcp --tcp-host HOST --tcp-port PORT` | Own one live TCP session directly | | `--transport rest --rest-url URL` | Share the gateway | | `--role queen` | Attach on startup | | `--script FILE` | Execute a `.coh` script and exit | | `--check FILE` | Validate script syntax without executing it | | `--policy FILE` | Select a generated shell policy | | `--record-trace FILE` / `--replay-trace FILE` | Capture a bounded trace or replay one offline | | `--transport mock` | Use this process's in-memory model | | `--transport qemu` | Use the shell's QEMU-launch transport; not an alias for connecting to an already running TCP Queen | For a direct session, first stop the gateway and every other direct owner: ```bash : "${COH_AUTH_TOKEN:?load the console credential for this Queen}" export COH_AUTH_TOKEN "$COH_BIN/cohsh" --transport tcp \ --tcp-host "$COH_TARGET_HOST" --tcp-port "$COH_TARGET_PORT" --role queen ``` For repeatable work, create a small script in your local output directory: ```bash mkdir -p out/operator cat > out/operator/health.coh <<'COH' # Author: Lukas Bower # Purpose: Read a bounded Queen health baseline without mutation. # Copyright 2026 Lukas Bower ping EXPECT OK cat /proc/boot EXPECT OK cat /proc/root/reachable EXPECT OK cat /proc/schedule/summary EXPECT OK tail /log/queen.log 16 EXPECT OK quit COH "$COH_BIN/cohsh" --check out/operator/health.coh && "$COH_BIN/cohsh" --transport rest --rest-url "$COH_REST_URL" \ --role queen --script out/operator/health.coh > out/operator/health.txt ``` Check the exit status and transcript. Script failures identify the source line and recent responses. These assertions test successful reads, not the meaning of every health field. Add explicit assertions for your deployment's required state using the documented `.coh` grammar. `.coh` is not Bash: it has no shell variables, loops or command substitution. Never paste Bash assignments into `coh>` or copy the visible prompt into a command. The default Queen-log tail is the newest 64 records; an explicit tail accepts 1–256 lines. Use an evidence pack for the complete retained log rather than mistaking a short tail for a full capture. Native clients reassemble bounded chunked `CAT` records; applications should use those clients rather than implementing ad hoc line joining. For incident tracing, see [Operator evidence](OPERATOR_EVIDENCE.md). Live capture accepts TCP or REST and explicit target/session identity fields; caller-supplied labels are not independently verified identity. `coh trace --input FILE` validates and summarises a saved trace without opening a target. #### Read the installed manual At `coh>`, use `man`, `man ls`, or `man spawn`. The manual covers complete arguments, namespace layout, production authority, examples and recovery. From the host terminal, `cohsh --man spawn` prints the same page and exits without opening a transport; `cohsh --man` lists topics. Use the host pager if desired: `cohsh --man spawn | less`. ### `coh` `coh` combines local diagnostics, target inspection, evidence export, FUSE, GPU lease helpers, host-command receipts and PEFT registry operations. Place its top-level `--policy`, `--role` and `--ticket` options **before** the subcommand. Connection options belong to the operation: ```bash : "${COH_POLICY:?set the selected generated coh policy file}" "$COH_BIN/coh" --policy "$COH_POLICY" inspect --rest-url "$COH_REST_URL" ``` Use the installation default when no explicit policy selection is needed. `coh` has no `--transport` option: `--rest-url` selects REST; without a configured REST URL, applicable live operations use `--host` and `--port`. `--mock` selects the model. Check inherited `COH_REST_URL` settings before intending to use direct TCP. | Command | Example arguments after the command | Result | | --- | --- | --- | | `doctor` | `--mock` for a simulated check | Local prerequisite report, not connection health | | `inspect` | `--rest-url URL --json` or `--input PACK --json` | Source-labelled live or offline state | | `diff` | `--left BEFORE --right AFTER` | Comparison of packs or explicit `tcp://` / HTTP target URLs | | `attest` | `--rest-url URL --trust-policy FILE --record FILE` | Signed-evidence verification when the target and trust policy support it | | `trace` | `--input TRACE` | Offline trace validation and summary | | `bundle` | `--rest-url URL --out DIR` | Alias for `evidence pack` | | `evidence pack` | `--rest-url URL --out DIR` | Bounded evidence directory | | `evidence timeline` | `--input DIR` | `timeline.ndjson` and `timeline.md` | | `telemetry pull` | `--rest-url URL --out DIR` | Local copy of Queen telemetry bundles | | `fleet` | Repeated `--hive NAME=URL`, then `status`, `lease-summary` or `pressure` | Read-only multi-gateway report | | `mount` | `--rest-url URL --at DIR` | Foreground FUSE mount | | `gpu` | Connection options, then `list`, `status --gpu ID` or `lease ...` | Published inventory/status, or a legacy lease request | | `run` | `--rest-url URL --gpu ID -- PROGRAM ARGS` | Local program after lease validation | | `peft` | `export`, `import`, `activate` or `rollback` | Job export and host registry lifecycle | `coh doctor` reports the compiled provider graph, declared provider availability, and exporter configuration without equating registration with installation. Local GPU, FUSE and QEMU checks are selected explicitly with `--local-gpu`, `--require-fuse` and `--developer-tools`. A Mac operator controlling a remote CUDA node therefore does not probe local NVML. GPU executor profiles use `--local-gpu` to exercise NVML and the deterministic CUDA fallback. #### Capture and review evidence Use a new output directory for each observation. Keep the gateway running: ```bash run_id="case-$(date -u +%Y%m%dT%H%M%SZ)" pack="$PWD/out/evidence/$run_id" "$COH_BIN/coh" inspect --rest-url "$COH_REST_URL" --json "$COH_BIN/coh" evidence pack --rest-url "$COH_REST_URL" --out "$pack" ``` Continue to review only after checking the exporter result. A capture error returns nonzero and retains a partial `summary.json`; preserve that directory for diagnosis rather than overwriting it. A missing optional path is not the same as a failed read. Optional capture errors also make the export fail. These commands read the pack without a live Queen: ```bash "$COH_BIN/coh" inspect --input "$pack" --json "$COH_BIN/coh" evidence timeline --input "$pack" ``` | Retained file | What to check | | --- | --- | | `summary.json` | Which paths were captured, missing or errored? | | `meta.json`, `bounds.json` | Which exporter and generated host policy produced the capture? | | `proc/boot`, `proc/authority` when available | Which target identity and authority were reported? | | `proc/schedule/`, `proc/lease/` | What scheduler and lease state was retained? | | `log/queen.log` | What remains of the Queen's bounded log? | | `timeline.md`, `timeline.ndjson` | Human-readable and machine-readable offline correlation | Add `--with-telemetry` only when needed. `--manifest`, `--resolved-manifest`, `--serial-log`, `--trace` and `--attestation-record` attach supported local context. Capture implements bounded redaction; still review the resulting pack before sharing it. A valid empty audit stream is saved as an empty file after a positive-size read, not treated as an automatic failure or fabricated read. Compare two retained observations: ```bash : "${BEFORE_PACK:?set the before-change evidence directory}" : "${AFTER_PACK:?set the after-change evidence directory}" "$COH_BIN/coh" diff --left "$BEFORE_PACK" --right "$AFTER_PACK" ``` A diff is a comparison, not an automatic go/no-go decision. Keep differing image, manifest and target identities visible. The full inventory, redaction and CI/SIEM contract is in [Evidence packs](OPERATOR_RECIPES.md#evidence-packs-ci-and-siem). #### Verify, export and deliver signed evidence `coh evidence verify --input GRAPH --trust TRUST --cas CAS` uses the shared `cohesix-evidence` host verifier. `TRUST` is an operator-supplied file outside the evidence pack, with exact ticket/subject/action/epoch, manifest/component/graph hashes, phase-scoped public keys and an explicit verification time. Every referenced object must exist under its SHA-256 CAS filename and match its declared size and digest. Historical verification at a recorded time does not establish current admission authority. The optional gateway and ticket-agent `--evidence-enrollment-dir` path signs validated native v1 request observations and native terminal readbacks using distinct enrolled keys. See [causal evidence custody](CAUSAL_EVIDENCE.md) for enrollment, bounds, restart behavior and proof classes. Provider results and Worker witnesses have separate custody and proof requirements; native systemd evidence is not device attestation or Worker proof. `coh evidence export` takes the same `--input`, `--trust`, and `--cas`, plus `--format prometheus|otel|cloudevents|in_toto|siem --out FILE`. It emits bounded derived records, withholding raw payloads, credentials and native identity text. SLSA output refuses actions without an implemented build provenance contract. The projections follow [OTLP JSON](https://opentelemetry.io/docs/specs/otlp/), [CloudEvents 1.0](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md) and the in-toto statement envelope; a generic action is never described as a [SLSA build](https://slsa.dev/spec/v1.2/build-provenance). These commands write local export artifacts. Destination delivery and acknowledgements remain separate. Evidence packs include the generated provider registry and seal every retained file. Inspection refuses changed, missing, unexpected and symlinked files in a sealed pack. Historical unsealed packs remain unverified review inputs. Add `--causal-graph GRAPH --evidence-trust TRUST --evidence-cas CAS` to `coh evidence pack` to attach a graph after shared validation; the copied verification result remains a derived projection. `cohesix.evidence_graph.verify_graph` invokes the same installed Rust verifier from Python using an explicit executable path. `coh evidence deliver --input GRAPH --trust TRUST --cas CAS --state-dir STATE` verifies a causal graph, renders the allowlisted SIEM NDJSON, and attempts delivery to the generated `providers.siem_delivery` HTTPS destination. The private state directory retains projections, bounded cursor/WAL, attempt and retry state, deadletters and exact receiver acknowledgements. Repeat with the same input after the reported retry time to resume safely. The sink must honor the documented idempotency and acknowledgement contract. A disabled destination returns `not_enabled`; no local-file copy is presented as live SIEM delivery. An optional `providers.siem_delivery.ca_certificate_path_ref` selects an environment or file reference whose value is an absolute PEM certificate path. That one CA replaces the default trust roots for this destination; unreadable, oversized or malformed certificates fail without fallback. The receiver must commit its idempotency record before acknowledging. A lost reply retries the same graph/payload hashes after durable backoff, while an acknowledged WAL entry does not transmit again. A missing WAL in an existing delivery store requires reconciliation and cannot reset its sequence. Delivery of historically verified evidence proves receiver acceptance of that record, not fresh provider execution. #### Pull telemetry or read a small fleet ```bash "$COH_BIN/coh" telemetry pull --rest-url "$COH_REST_URL" \ --out out/telemetry/queen "$COH_BIN/coh" fleet \ --hive lab-pi=http://127.0.0.1:8080 \ --hive lab-qemu=http://127.0.0.1:8081 \ status ``` The fleet example requires **two separately configured gateways**, each owning its own target; port 8081 is not created automatically. Substitute `lease-summary` or `pressure` for `status` as needed. Inspect each named row: a failed hive can be reported within the result, so process completion alone does not mean the entire fleet is healthy. Fleet reads do not grant cross-hive write authority. #### Mount a namespace Use a mount when an existing program needs files instead of REST. The selected policy's root and allowlist determine what appears. The mount does not turn Cohesix into an unrestricted POSIX filesystem. The binary must include FUSE support. macOS needs the macFUSE/FUSE3 runtime selected by the native host setup; Linux requires FUSE 3 and usable `/dev/fuse`. Source developers enable this with `cargo build -p coh --features fuse`. See [the pinned mount integration](https://github.com/lukeb-aidev/cohesix/tree/main/third_party/fuser). In the mount terminal: ```bash mount_dir="$PWD/out/mount/cohesix" mkdir -p "$mount_dir" "$COH_BIN/coh" mount --rest-url "$COH_REST_URL" --at "$mount_dir" ``` Keep it running. In another terminal at the same installation root: ```bash mount_dir="$PWD/out/mount/cohesix" sed -n '1,40p' "$mount_dir/proc/boot" ``` REST file reads use the gateway-advertised per-path byte limits, including the small schedule and lease summaries. A larger host read buffer does not increase those limits; disabled paths and missing authority still return errors. The mount is private to the mounting host user. Only one REST mount may hold the host-side lock for a given gateway URL. Reads fetch current remote data; a remote error must not be mistaken for a successfully read empty file. Writes require the mount process's delegated credentials and the target's policy. Prefer explicit CLI workflows for control writes instead of tools that replace, truncate or rename files. Stop filesystem users, then unmount before terminating the server: ```bash # Linux fusermount3 -u "$mount_dir" ``` ```bash # macOS umount "$mount_dir" ``` After an abrupt server loss, clear the disconnected mount with the same host unmount procedure. Do not start another server over a still-mounted directory. The direct and REST FUSE backends share append semantics. `O_APPEND` writes use the remote atomic append operation even when the kernel has a stale or nonzero EOF; other write handles require sequential offsets from zero. Cursors advance only for acknowledged bytes, preserving failed and partial-write recovery. Canonical `/shard/