From aevatar-codex-exec-node-setup
Configure and prove Aevatar codex_exec for one NyxID account, choosing either operator-managed OpenSandbox or a private NyxID node-backed SSH service. Use for managed allowlist/binding readiness, node registration, forced-command hardening, service binding, Codex authentication/workspace configuration, mandatory public-sample verification, or diagnosing managed sandbox and private SSH failures.
How this skill is triggered — by the user, by Claude, or both
Slash command
/aevatar-codex-exec-node-setup:aevatar-codex-exec-node-setupThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Choose exactly one target before changing state:
Choose exactly one target before changing state:
managed_sandbox: Aevatar and operations own OpenSandbox, the runner image, model gateway, isolation, and cleanup. The user needs an authenticated NyxID binding with llm:proxy and an allowlist entry. No personal node or local Codex login is required.private_ssh: the user owns a private NyxID node, SSH service, fixed target, forced-command wrapper, local Codex login, and one Git workspace.Never mix fields between targets. Do not report either target as ready until its public Ornn sample succeeds through Aevatar with exact CODEX_EXEC_READY.
auth.json into workflow input, logs, issue comments, or image layers.llm:proxy and install it through Credential Vault.danger-full-access.Confirm the intended identity and Aevatar service connection:
nyxid --version
nyxid whoami
nyxid service list
The Aevatar login/consent flow must create a first-party binding for the same NyxID sub. Bindings created before Aevatar requested llm:proxy must be refreshed through normal login consent. Do not repair invalid_scope by broadening a token or using a static API key.
Operations must complete docs/operations/2026-07-16-managed-codex-exec-rollout.md in the Aevatar repository. Required outcomes are:
CODEX_EXEC_READYAllowedNyxIdUserIds entryHealth and standalone smoke results still do not prove Aevatar workflow identity propagation.
Mount the public dependency and run codex-exec-check with no caller-controlled routing. Follow its evaluation contract exactly. Success is a managed JSON result with status=succeeded, target=managed_sandbox, exit_code=0, and output=CODEX_EXEC_READY.
Build this ownership chain:
NyxID user -> private SSH UserService -> owned node -> SSH target -> fixed wrapper -> Codex CLI -> one Git workspace
The workflow receives the service slug or UUID, never node_id.
Choose NODE_PROFILE, NODE_NAME, SERVICE_LABEL, PRINCIPAL, absolute WORKSPACE, SSH_HOST, SSH_PORT, and dedicated SSH_KEY_FILE. Show these values and visibility before mutating state.
nyxid --version
nyxid whoami
codex --version
codex login status
git -C "$WORKSPACE" rev-parse --show-toplevel
command -v jq sshd ssh-keygen base64 codex
Stop if the Codex login is absent, the workspace is not a Git repository, or the NyxID identity is not the intended owner.
Preserve any default profile. Mint and consume the one-time token without emitting it:
NODE_STORAGE_FLAG=--keychain
registration_json="$(nyxid node register-token --name "$NODE_NAME" --terminal --output json)"
registration_token="$(printf '%s' "$registration_json" | jq -r '.token // .registration_token // .data.token // empty')"
test -n "$registration_token"
nyxid node register \
--token "$registration_token" \
--url wss://nyx-api.chrono-ai.fun/api/v1/nodes/ws \
--profile "$NODE_PROFILE" \
${NODE_STORAGE_FLAG:+$NODE_STORAGE_FLAG}
unset registration_token registration_json
nyxid node daemon install --profile "$NODE_PROFILE" --log-level info
nyxid node daemon start --profile "$NODE_PROFILE"
nyxid node daemon status --profile "$NODE_PROFILE"
nyxid node list --output json
Use --keychain only where a supported secret service exists; otherwise explicitly select NyxID's encrypted-file backend. Continue only when this profile's node is online.
Read forced-command-wrapper.md and install the wrapper first. On macOS follow macos-loopback-sshd.md; on Linux follow linux-ssh-target.md.
Allow only the selected host and port in this node profile's [ssh].allowed_targets, then restart only that profile. Do not replace its server, node, signing, or credential sections.
Create the service without --org unless organization ownership was explicitly requested:
node_id="$(nyxid node list --output json | jq -r --arg name "$NODE_NAME" '.nodes[] | select(.name == $name) | .id')"
test -n "$node_id"
service_json="$(nyxid service add-ssh \
--label "$SERVICE_LABEL" \
--host "$SSH_HOST" \
--port "$SSH_PORT" \
--via-node "$node_id" \
--node-key \
--principals "$PRINCIPAL" \
--output json)"
service_slug="$(printf '%s' "$service_json" | jq -r '.slug // .service_slug // .data.slug // empty')"
test -n "$service_slug"
NYXID_PROFILE="$NODE_PROFILE" nyxid node ssh-credentials add \
--service "$service_slug" \
--principal "$PRINCIPAL" \
--key-file "$SSH_KEY_FILE" \
--host "$SSH_HOST" \
--port "$SSH_PORT"
Investigate a host-key mismatch or explicitly rotate the verified pin. Never disable host verification.
Use troubleshooting.md to confirm a generic command is rejected and the exact Aevatar command profile succeeds through nyxid ssh exec.
Private workflow arguments use the nested contract:
{
"target": {
"kind": "private_ssh",
"private_ssh": {
"service": "your-service-slug",
"principal": "your-unix-user"
}
},
"prompt": "Reply with exactly CODEX_EXEC_READY",
"timeout_secs": 300
}
Do not use the obsolete root-level service and principal shape.
Mount the public dependency and run codex-exec-private-ssh-check with the actual service slug and principal. A direct SSH success is insufficient. The Aevatar workflow must return exit_code: 0, timed_out: false, and stdout exactly CODEX_EXEC_READY after trimming.
For either target, load the declared public dependency from Ornn:
{
"skill": "aevatar-codex-exec-workflow-sample",
"mount_workflows": true
}
Use codex-exec-check for managed or codex-exec-private-ssh-check for private SSH. If workflow mounting is unavailable, fetch the same published Ornn version and run it as explicit inline draft input; do not substitute an unverified local copy.
For managed, all must be true:
llm:proxy consentCODEX_EXEC_READYFor private SSH, all must be true:
CODEX_EXEC_READYAnything less is partial configuration, not a usable codex_exec route.
npx claudepluginhub chronoaiproject/nyx-skills --plugin aevatar-codex-exec-node-setupGuides creation and editing of skills using test-driven development with pressure scenarios and subagents to verify agent compliance.
Guides reception of code review feedback: verify before implementing, avoid performative agreement, push back with technical reasoning when needed.
Creates platform-native content for X, LinkedIn, TikTok, YouTube, and newsletters from source material. Adapts voice and format per platform while avoiding engagement bait and filler.