This repo creates a separate Podman VM named openclaw-demo, installs OpenClaw inside that VM using the official getting-started flow, and keeps the demo agent files under agents/ so they are easy to inspect, export, and modify.
The scripts print the commands they run. The only thing they intentionally redact is API key values.
setup.shCreates or starts the dedicated Podman machine, installs OpenClaw in the VM, and runsopenclaw onboardinside the VM.start.shStarts the VM and the OpenClaw gateway service again later.test.shRunsopenclaw --version,openclaw gateway status, andopenclaw doctor --non-interactiveinside the VM.ssh.shOpens a direct SSH session into the Podman VM or runs a single command there.create-agent.shCreates a demo agent whose workspace is tracked in this repo underagents/demo-agent/workspace/.agent-demo.shRuns the demo agent against a public GitHub repository issue list.
- setup.sh
- start.sh
- test.sh
- ssh.sh
- create-agent.sh
- agent-demo.sh
- scripts/lib.sh
- agents/demo-agent/agent.template.json
- agents/demo-agent/README.md
- agents/demo-agent/workspace/SOUL.md
- agents/demo-agent/workspace/skills/github-demo.md
- agents/demo-agent/workspace/tools/github-issue-list-public.sh
- agents/demo-agent/workspace/tools/github-issue-create.sh
- Host OS: macOS
- Podman may be missing. If so,
setup.shinstalls it with Homebrew. - The Podman machine is isolated from your existing
podman-machine-default. - Because Podman only allows one active machine at a time on this host, the scripts stop any other running Podman machine before starting
openclaw-demo. - The repo path is visible inside the VM through Podman's default
/Users:/Usersmount.
Optional sizing overrides for the dedicated VM:
export OPENCLAW_DEMO_MACHINE=openclaw-demo
export OPENCLAW_DEMO_CPUS=4
export OPENCLAW_DEMO_MEMORY_MB=4096
export OPENCLAW_DEMO_DISK_GB=40Optional model provider for non-interactive onboarding and agent runs:
export OPENAI_API_KEY=...
# or
export ANTHROPIC_API_KEY=...
# or
export GEMINI_API_KEY=...
# or
export OPENROUTER_API_KEY=...If no provider key is set, setup.sh falls back to openclaw onboard --auth-choice skip. That is enough to install and configure the gateway, but the demo agent will not be able to answer model-backed requests until a provider is configured later.
Optional model override for the demo agent:
export OPENCLAW_DEMO_MODEL="openai/gpt-5.2"./setup.sh
./start.sh
./test.sh
./ssh.sh
./create-agent.sh
./agent-demo.shFor live demos, ssh.sh is the practical escape hatch. It starts the dedicated machine if needed, resolves the machine's current SSH port and identity from podman machine inspect, and then connects directly instead of relying on podman machine ssh.
Open an interactive shell:
./ssh.shRun a single command:
./ssh.sh openclaw --version
./ssh.sh openclaw gateway status
./ssh.sh openclaw doctor --non-interactiveThis is useful if the automation gets stuck but the VM itself is still reachable.
If the full scripted flow gets stuck, use this exact sequence.
Start the machine and open a shell in the VM:
./ssh.shFrom inside the VM, check the basics:
openclaw --version
openclaw gateway status
openclaw doctor --non-interactiveIf OpenClaw is not installed yet inside the VM, install it with the same official installer used by setup.sh:
curl -fsSL --proto '=https' --tlsv1.2 https://openclaw.ai/install.sh | bash -s -- --no-onboardIf onboarding still needs to happen, run one of these:
Without a model provider:
openclaw onboard --non-interactive --accept-risk --flow quickstart --install-daemon --skip-channels --skip-search --skip-skills --skip-ui --gateway-bind loopback --auth-choice skipWith OpenAI:
export OPENAI_API_KEY=...
openclaw onboard --non-interactive --accept-risk --flow quickstart --install-daemon --skip-channels --skip-search --skip-skills --skip-ui --gateway-bind loopback --auth-choice openai-api-key --openai-api-key "$OPENAI_API_KEY"Then continue the demo either from the host:
./test.sh
./create-agent.sh
./agent-demo.shOr manually from inside the VM:
openclaw agents list
openclaw config fileIf you just want a quick health check from the host without opening a shell:
./ssh.sh openclaw --version
./ssh.sh openclaw gateway status
./ssh.sh openclaw doctor --non-interactiveThe main official OpenClaw install step inside the VM is:
curl -fsSL --proto '=https' --tlsv1.2 https://openclaw.ai/install.sh | bash -s -- --no-onboardThe main official onboarding step inside the VM is:
openclaw onboard --non-interactive --accept-risk --flow quickstart --install-daemon --skip-channels --skip-search --skip-skills --skip-ui --gateway-bind loopback ...The Podman machine bootstrap is:
podman machine init --cpus 4 --memory 4096 --disk-size 40 openclaw-demo
podman machine start openclaw-demoThe committed demo agent uses OpenClaw's coding tool profile plus group:web. Its workspace includes:
- a public issue lister that works without GitHub auth
- a create-issue helper that uses
gh issue createwhengh auth loginhas been completed inside the VM
That means the first demo can work against a public repo without extra GitHub setup, while issue creation remains an explicit opt-in step.