Build complete autonomous agent systems with Claude Code. 7-phase guided workflow: map work, CLAUDE.md, agent team, pipeline, security, deployment, test. Components: - commands/build.md: main guided workflow - agents/builder.md: scaffolding agent - skills/agent-system-design: architecture knowledge + 4 references - scripts/templates: hooks, automation, launchd, systemd Covers 22 OpenClaw capabilities across 4 deployment targets (local, Mac Mini, VPS, Managed Agents). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
6 KiB
Deployment Targets
Reference for the agent-system-design skill. Covers the four deployment platforms available for Claude Code agents. Use this to guide target selection and scaffold the correct infrastructure files.
1. Local (cron/launchd)
How it works: Claude Code CLI invoked by the host scheduler. No persistent process; each run starts a fresh Claude Code session and exits.
Setup files to scaffold:
automation.sh-- wrapper script that sets env vars and invokesclaude- Cron entry comment block in README, or
launchd.plistfor macOS
Cron pattern:
0 5 * * * /path/to/project/automation.sh >> /var/log/agent.log 2>&1
launchd pattern (macOS):
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key><integer>5</integer>
<key>Minute</key><integer>0</integer>
</dict>
Pros:
- Simple setup, no infrastructure cost
- Full tool access (filesystem, shell, MCP)
- Easy to test locally before any deployment
Cons:
- Not always-on between scheduled runs
- No mobile access without a channel plugin
- Log rotation must be managed manually
Best for: Development, testing, personal daily pipelines (nightly batch, ecosystem pulse).
2. Mac Mini (launchd + channels)
How it works: A dedicated Mac runs Claude Code inside a persistent tmux session.
launchd ensures the session restarts on reboot. Channel plugins (iMessage, Telegram)
provide mobile access.
Setup files to scaffold:
launchd.plist-- keeps the tmux session alive across rebootstmux-start.sh-- creates/attaches the named session.mcp.json-- channel MCP server (Telegram or iMessage)channels-guide.md-- instructions for mobile interaction
tmux session pattern:
tmux new-session -d -s agent -x 220 -y 50
tmux send-keys -t agent "claude --model claude-sonnet-4-6" Enter
Pros:
- Always-on between scheduled runs
- Native iMessage support (macOS-only feature)
- Full GUI access for Computer Use (Desktop app)
- Local hardware, no cloud dependency
Cons:
- Requires dedicated physical hardware
- iMessage and Computer Use are macOS-only
- Single machine; no horizontal scaling
Best for: Personal always-on agent with phone access, Computer Use workflows, home automation pipelines.
3. VPS (systemd + cron)
How it works: Linux server runs Claude Code headless. systemd manages the service
lifecycle. Cron handles scheduled tasks. Telegram or Slack provides the channel layer.
Setup files to scaffold:
systemd/agent.service-- service unit for the agent processsystemd/agent.timer-- timer unit for scheduled runs (alternative to cron)automation.sh-- invocation wrapper.mcp.json-- Telegram or Slack MCP serverchannels-guide.md-- instructions for team interaction
systemd service pattern:
[Service]
ExecStart=/path/to/automation.sh
Restart=on-failure
User=agent
Environment=HOME=/home/agent
systemd timer pattern:
[Timer]
OnCalendar=*-*-* 05:00:00
Persistent=true
Pros:
- True always-on with automatic restart on failure
- Scalable: multiple agents on one server or across servers
- Team access via shared Telegram/Slack channel
- No hardware to manage locally
Cons:
- No iMessage (Linux)
- No Computer Use (no display server in headless mode)
- Requires server management (security patches, disk, logs)
Best for: Server-side agents, team pipelines, production workloads, nightly batch that must run reliably even when the developer's laptop is off.
4. Managed Agents (Anthropic API)
How it works: Anthropic hosts the agent runtime. The builder deploys via the
/v1/agents and /v1/sessions REST API, or uses @anthropic-ai/sdk in TypeScript/Python.
No local Claude Code installation required.
Setup files to scaffold:
agent.tsoragent.py-- SDK code defining the agentsessions.ts-- session management helpers.env.template-- API key templateREADME.md-- deployment and configuration instructions
TypeScript pattern:
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
const session = await client.sessions.create({ agent_id: "ag_..." });
Pros:
- Cloud-native, zero infrastructure to manage
- Scales automatically across sessions
- Persistent sessions via the API
- Integrates directly into SaaS products or APIs
Cons:
- Different architecture from Claude Code CLI (no local filesystem by default)
- API costs per token, no flat rate
- Less direct filesystem access than CLI agents
- Feature set tied to what the Managed Agents API exposes
Best for: Production deployment at scale, SaaS product integration, agents that must be accessible to end users without CLI access.
Comparison Matrix
| Dimension | Local (cron) | Mac Mini | VPS | Managed API |
|---|---|---|---|---|
| Always-on | No | Yes | Yes | Yes |
| Computer Use | No | Yes (Desktop) | No | No |
| iMessage | No | Yes | No | No |
| Telegram/Slack | Via MCP | Via MCP | Via MCP | Via integration |
| Infrastructure cost | Zero | Hardware | VPS fee | API token cost |
| Setup complexity | Low | Medium | Medium | Low (SDK) |
| Team access | No | Limited | Yes | Yes |
| Filesystem access | Full | Full | Full | Limited |
| Horizontal scaling | No | No | Manual | Automatic |
| Best environment | Dev/test | Personal | Team/prod | SaaS/prod |
Scaffold Decision Guide
-
Is this a personal agent for one developer? Start with Local. Upgrade to Mac Mini if always-on or iMessage is required.
-
Does the agent need Computer Use? Mac Mini with Claude Code Desktop is the only option today. Document this constraint if the user is on Linux or Windows.
-
Is this a team or production workload? VPS with systemd. Add Telegram/Slack channel.
-
Is this going into a product or SaaS? Managed API. Scaffold TypeScript SDK code, not a CLAUDE.md agent.
-
Do not mix targets in one scaffold. Pick one. Document the alternatives in the
## Deploymentsection of the generated README.