NeMo Agent Toolkit kit (selected Linux AArch64 profile)
This kit pins NeMo Agent Toolkit 1.9.0, MCP SDK 1.29.1 and A2A SDK 0.3.26. It runs on the Jetson client host, beside but outside the GPU provider runtime. Hive Gateway connects to the exact-source Queen and owns Cohesix admission, standing budgets and receipts. NeMo calls the gateway through its native MCP and A2A clients; the model endpoint only plans calls. It is never an authority or a substitute for native provider verification. Apple, NIM, NeMo Framework, Triton and Kubernetes are not required by this selection.
Install from a sealed candidate
Build the wheel once on a trusted packaging host:
python3 -m pip wheel --no-deps --wheel-dir dist integrations/nemo-agent-toolkit
shasum -a 256 dist/cohesix_nemo_kit-1.2.0-py3-none-any.whl
shasum -a 256 integrations/nemo-agent-toolkit/requirements-linux-aarch64.lock
Copy the wheel, requirements-linux-aarch64.lock and
scripts/install/install_nemo_agent_toolkit.py to the Linux AArch64 client.
Verify their recorded digests through the chosen artifact channel. The
installer accepts absolute paths and creates a new venv; it never installs
from an editable checkout:
python3 install_nemo_agent_toolkit.py \
--venv /absolute/private/nemo-client-1.9.0 \
--wheel /absolute/kit/cohesix_nemo_kit-1.2.0-py3-none-any.whl \
--sha256 EXPECTED_WHEEL_SHA256 \
--lock /absolute/kit/requirements-linux-aarch64.lock \
--lock-sha256 EXPECTED_LOCK_SHA256
The lock names every selected transitive distribution at its tested version.
Use a new venv for a different Linux, Python or Toolkit release and rerun the
native compatibility checks. pip check and the installed console command
must pass before connecting to Cohesix. Keep the accepted CUDA/PEFT container
and the Toolkit client venv separate.
One subject per process
Give each Toolkit process a private settings JSON file, mode 0600, and a
gateway credential pair minted for the same delegated subject. Example values
below are references only:
{
"gateway_url": "http://127.0.0.1:8415",
"subject": "operator-a",
"request_auth_ref": "file:/absolute/private/request-auth",
"delegated_ticket_ref": "file:/absolute/private/operator-a.ticket"
}
The gateway URL must be HTTPS or loopback HTTP over a protected host channel.
subject labels NeMo’s local per-user context; the verified delegated ticket
decides Cohesix authority. Use a second process, credential pair and settings
file for a second user. Client-supplied user IDs cannot grant a Cohesix scope.
Do not forward a gateway ticket, request token or model key to the CUDA
executor. Do not put credentials in tracked YAML or shell arguments.
Run cohesix-nemo doctor --settings /absolute/private/settings.json and the
read-only cohesix-nemo mcp and cohesix-nemo a2a discovery modes first.
The MCP path requires the selected available_selected_jobs, preflight,
submit, inspect and recover tools. The A2A path requires a scoped Agent
Card with the selected CUDA or PEFT skill. An optional service is unavailable
when absent; discovery never invents it.
Native-client workflows
Prepare a private request JSON with scope_id and a complete immutable
host-ticket/v2 object from the selected Cohesix workload or PEFT recipe.
The same ticket ID and idempotency key must be used through recovery. Then:
cohesix-nemo mcp --settings /absolute/private/settings.json \
--request /absolute/private/cuda-request.json \
--output /absolute/private/mcp-cuda-submit.json
cohesix-nemo mcp --settings /absolute/private/settings.json \
--recover-id ORIGINAL_TICKET_ID \
--output /absolute/private/mcp-cuda-recovered.json
cohesix-nemo a2a --settings /absolute/private/settings.json \
--request /absolute/private/peft-request.json \
--output /absolute/private/a2a-peft-submit.json
cohesix-nemo a2a --settings /absolute/private/settings.json \
--get-task-id ORIGINAL_TICKET_ID \
--output /absolute/private/a2a-peft-recovered.json
The MCP path preflights, submits once and reconnects for the same admission.
The A2A path sends one data part and uses NeMo’s native get_task helper.
--cancel-id issues NeMo’s native cancellation helper for the inspected task;
it does not claim native termination. Timeout or lost ACK is uncertain until
the original ID is reconciled. Output files are create-only and 0600; repeat
a read with a fresh output path. Typed client observations carry the original
ID and result digest, but provider_verified remains false for A2A. Run the
independent CUDA byte verifier or coh peft release --deployment ... verify
against the native record before reporting success. A failed candidate or
rollback remains recovered_failure under the shared verifier.
Model-backed NeMo agents
The MCP configuration uses Toolkit’s tool_calling_agent; the A2A
configuration uses its per_user_react_agent because a per-user function
group requires a per-user workflow in Toolkit 1.9.0. Both use a pinned
OpenAI-compatible model endpoint. mcp-agent.yaml uses the native
mcp_client function group with the selected tool list, 30 second call timeout
and one bounded reconnect. a2a-agent.yaml uses a per-user native A2A group.
Toolkit 1.9.0 fetches its Agent Card before applying its auth interceptor, and
its generic text sender cannot produce Cohesix’s required data part. The
installed cohesix_a2a_client plugin supplies only those two wire adaptations
while retaining Toolkit’s own card, task lookup and cancellation helpers.
This kit uses separate protected MCP and A2A processes. A combined process is
not advertised without its own authenticated startup test.
Make a private 0600 model settings file after pinning and loading the chosen
model, for example:
{
"base_url": "http://127.0.0.1:8080/v1",
"model_name": "SELECTED_LOADED_MODEL_ID",
"api_key_ref": "file:/absolute/private/model-api-key"
}
The launcher probes /v1/models for that exact name. Provide a private
0600 input file containing one fixed task and ticket identity, then run
cohesix-nemo agent-mcp or cohesix-nemo agent-a2a with --settings,
--model-settings, --input-file and an unused absolute --trace-log.
The trace is private because it may contain the task and model output.
These model traces explain planner behavior; they do not replace Cohesix’s
signed native outcome. The launcher exposes Toolkit’s nat eval and profiler
through three modes. Prepare a private 0600 JSON array of one to sixteen
{"id":"...","question":"...","answer":"..."} rows, then run the same
file and model settings through direct and governed configurations:
cohesix-nemo eval-direct --settings /absolute/private/settings.json \
--model-settings /absolute/private/model.json \
--dataset /absolute/private/fixed-task.json \
--eval-dir /absolute/private/eval-direct-01
cohesix-nemo eval-a2a --settings /absolute/private/settings.json \
--model-settings /absolute/private/model.json \
--dataset /absolute/private/fixed-task.json \
--eval-dir /absolute/private/eval-a2a-01
eval-mcp is also available for a fixed MCP question. Each output directory
must be unused and private; it retains NeMo’s native
.tmp/nat/examples/default/standardized_data_all.csv, profiler traces and a
private nat-eval.log. Inspect WORKFLOW_START/END and TOOL_START/END in
the CSV and independently check the task ID and signed result. A zero eval
exit code is insufficient if no dataset row or tool call ran. The kit also
requires a completed native model response for every dataset row and exits
with an incomplete-evaluation error when Toolkit returns zero without one.
This check does not verify the answer or any provider effect. Use the fixed
quality and latency budgets in BENCHMARKS.md.
For two subjects, run two isolated Toolkit processes and repeat both protocol
discovery and cross-subject lookups. The gateway must refuse another subject’s
task, adapter and evidence even if the caller changes NeMo’s user_id.
Reproduction record
Record the wheel and lock SHA-256, native package versions, gateway/Queen source and image identity, selected manifest, model name and endpoint, subject labels and credential modes, exact ticket IDs, request/response trace paths, native verifier result, denied action, timeout and restart observations. Report setup effort, credential exposure, control latency, manual recovery and evidence utility for identical direct and governed jobs. Retain failures and unknowns. The M28f conformance case consumes those records; package presence, mock completion and model text are insufficient.