I wanted one clean workflow: send a Slack message and end with a merged PR, using a self-contained VM so the whole process stayed safe, stable, and repeatable.

The story in one run

We started by moving the workflow to a dedicated VM. That gave us isolation from my daily machine and a predictable place to run long tasks. Then we installed OpenClaw, connected model providers, wired Slack, and used that setup to create and refine this blog post through a few short feedback loops.

The important shift was not "AI wrote a draft." The shift was operational: Slack request in, repository changes out, PR updated, done.

The win is not the draft. The win is a repeatable Slack-to-PR loop.

How to set this up (short version)

  1. Create a dedicated VM so the agent runtime is isolated and persistent.
  2. Install OpenClaw and initialize your workspace.
  3. Configure OpenClaw markdown context files: AGENTS.md, SOUL.md, TOOLS.md, USER.md, and IDENTITY.md.
  4. Connect AI providers (Google and/or OpenRouter) so you have a primary model plus fallback.
  5. Install GitHub CLI and authenticate with gh auth login.
  6. Install coding tools you want in the loop (Codex, Claude Code).
  7. Connect Slack app/events so requests can trigger work and status can post back.
  8. Run the flow: Slack request -> OpenClaw edits -> review -> push branch -> PR update.

Starter links

What is next

Next step is a reusable Slack template for content tasks so each request includes goal, tone, and acceptance criteria up front. That should cut revision rounds and keep the loop fast.