OpenClaw model access through Praxis¶
Run a bounded model task with OpenClaw inside OpenShell using read/write tools. Praxis holds the
upstream credentials; OpenClaw receives only a local placeholder. This path
uses the dev profile and openclaw agent exec, not a browser or gateway service.
Use a checkout containing this integration, or a bootc image built from it.
Previously published v0.1 images do not gain the new scripts automatically.
See the 0.1.4 pin review for the active pins
and release compatibility. The 0.1.3 fixture qualification
and earlier real-model evidence are
historical records; rerun an opt-in real-model task before promotion.
Prepare model access¶
First install OpenShell manually and
Praxis, or deploy your rebuilt bootc image.
Keep provider credentials at Praxis; do not attach an OpenShell --provider
or enter a real key in OpenClaw's config.
Choose one route:
- OpenAI: follow the Praxis credential setup. On bootc, use
the hidden-prompt secret and activation commands.
Set
OPENSHELL_MODEL_IDto an exact model ID available to your account. - An existing local OpenAI-compatible API with a key: configure the
administrator-owned custom provider.
sudo scripts/common/providers enable team --openai-url https://inference.example.com/v1prompts for the real key and stores a Podman secret. With a non-unified mutable gateway, setPRAXIS_API_PREFIX=/providers/teamand use the cloud OpenClaw config. For private IP upstreams, Praxis must also explicitly permit private upstreams in its reviewed configuration. Custom HTTP upstreams and bootc custom-provider management require a separately reviewed configuration. The API must support streaming chat completions and tool calls. Keep the key in a Praxis service-account Podman secret, not in the sandbox. - Private vLLM without a key: use the separate inference server guide.
The mutable installer serves
qwen3-8b; the bootc recipe servesQwen/Qwen3-8B. Use the ID actually returned by your server's model listing. The dedicated vLLM template disables Qwen thinking per request for bounded coding tasks.
Manual container deployment¶
Run these commands as the configured OpenShell service owner, using its HOME, XDG runtime directory, and user session bus as shown in the installation guide. Assume Praxis is already ready on host loopback port 8080:
export OPENSHELL_MODEL_ID='YOUR_SERVED_MODEL_ID'
export PRAXIS_PORT=8080
# Cloud or keyed private provider managed by Praxis:
config="$PWD/configs/openshell-praxis/openclaw"
# For the dedicated credentialless vLLM route instead:
# config="$PWD/configs/vllm/openclaw"
openshell/harnesses/openclaw/create.sh --profile dev \
--name openclaw-dev --config "$config"
openshell/harnesses/openclaw/run.sh --name openclaw-dev --timeout 600 \
--message 'Write /home/node/.openclaw/workspace/greeting.txt containing a short greeting, then read it and report its contents.'
The command returns JSON. Require ok: true, a useful final response, and
check the file independently through connect.sh --name openclaw-dev.
The runner sends the task through stdin and directs SQLite temporary files to
policy-permitted /tmp. It creates disposable per-call agent state; it does
not retain a conversation between invocations.
The cloud development policy also permits selected GitHub/npm traffic. The vLLM
policy permits only GET /vllm/v1/models and
POST /vllm/v1/chat/completions on the Praxis model endpoint. Neither permits
direct cloud model access. Do not combine this mode with automatic provider
injection.
Bootc deployment¶
On an OpenClaw bootc host built from this checkout, first activate Praxis credentials and choose cloud, local vLLM, or remote-vLLM inference using the bootc guide. For cloud routing:
IFS= read -r -p 'Model ID: ' model_id
uid="$(id -u openshell-svc)"
cd /
sudo runuser -u openshell-svc -- env HOME=/var/lib/openshell-svc \
XDG_RUNTIME_DIR=/run/user/"$uid" \
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/"$uid"/bus \
OPENSHELL_BIN=/usr/bin/openshell OPENSHELL_MODEL_ID="$model_id" \
/usr/share/secure-single-server/openshell/harnesses/openclaw/create.sh \
--profile dev --name openclaw-dev \
--config /usr/share/secure-single-server/configs/openshell-praxis/openclaw
sudo sss-bootc harness run --name openclaw-dev --timeout 600 \
--message 'Write /home/node/.openclaw/workspace/greeting.txt containing a short greeting, then read it and report its contents.'
For the bootc-managed vLLM modes, sudo sss-bootc harness create --profile dev
--name openclaw-dev selects the local model configuration automatically; use
that instead of the cloud creation command. harness connect still opens a
shell for inspecting the workspace.
Validation limits¶
The pinned OpenShell sandbox denies process-group signals with EPERM.
OpenClaw's exec tool requires those signals to certify process-tree cleanup,
so it returns a cleanup error even after a command finishes. This integration
exposes only read and write tools. Run generated code manually through
connect.sh, or use OpenCode when the model must execute commands itself.
The real-model acceptance test independently tests generated code through
sandbox SSH. Do not enable exec until that cleanup contract is qualified.
Automated tests cover authenticated and credentialless synthetic upstreams,
streamed tool execution, continuation, invalid upstream credentials, and
OpenShell allow/deny enforcement. AWS also exercises the pinned workload and
bootc container build. These 0.1.3 upgrade checks
used a controlled model fixture, and the same pins passed
real OpenAI model tasks on manual and booted bootc deployments.
The earlier Qwen GPU results and both records are historical for 0.1.4; the
active pins require separate opt-in qualification.
A synthetic credential test does not qualify a paid OpenAI account or every
OpenAI-compatible service. Browser login, gateway service deployment, retained
sessions, and --backend remain outside this tested path.