From agent
Installs and manages Claude Code as a background service using launchd on macOS or systemd on Linux for 24/7 operation of HTTP bridge, WebChat, webhooks, and crons. Supports install, status, uninstall, logs.
npx claudepluginhub crisandrews/clawcode --plugin agentThis skill uses the workspace's default tool permissions.
Wrap Claude Code (with ClawCode) in the OS's service manager so the agent keeps running after the terminal closes. This is what makes the HTTP bridge, WebChat, webhooks, and crons work 24/7.
Automates ClaudeClaw setup: installs dependencies, authenticates messaging channels, registers main channel, starts background services. Triggers on setup, install, configure claudeclaw, or first-time requests.
Builds AI agents and automates Claude Code programmatically using Python Agent SDK, headless CLI mode (claude -p), MCP servers, hooks, and sessions. For programmatic agent creation without raw API keys.
Provides architecture reference for Claude Code CLI agent internals, including minimal TypeScript agent loop, tool systems, permission gates, telemetry, and 12 harness mechanisms. Useful for building similar coding agents.
Share bugs, ideas, or general feedback.
Wrap Claude Code (with ClawCode) in the OS's service manager so the agent keeps running after the terminal closes. This is what makes the HTTP bridge, WebChat, webhooks, and crons work 24/7.
This is an OPTIONAL feature. See docs/service.md for the full reference, risks, and how to add messaging-channel flags.
Installing the service runs Claude Code with --dangerously-skip-permissions in the background. That flag:
This is an irrevocable trust decision for this workspace. Only run /agent:service install if you understand that.
Always prompt the user to confirm before installing. Quote the flag by name in the confirmation. If the user hesitates or asks questions, stop and explain.
Parse the action and call service_plan with it.
| User says | Action argument |
|---|---|
/agent:service install | install |
/agent:service status (or no arg) | status |
/agent:service uninstall | uninstall |
/agent:service logs | logs |
claude binary: Bash(which claude). Trim output. If empty, abort with: "Can't find claude in PATH. Install Claude Code or point me at it manually."service_plan({ action: "install", claudeBin: <path> })error (unsupported OS), print the error and stop.~/.claude/settings.json (prevents the most common install hang — see docs/service.md "Heads-up" note):
Read(~/.claude/settings.json). If it doesn't exist or is empty, treat as {}.skipDangerousModePermissionPrompt is already true, skip to the next sub-step.~/.claude/settings.json is missing \"skipDangerousModePermissionPrompt\": true. Without it, the service will show a 'Bypass Permissions — Do you accept?' dialog at startup that no daemon (launchd / systemd) can answer, and the install will appear to succeed but the service will hang silently. Add it now? [y/N]"jq via Bash (preserves any other keys, atomic write):
Bash: jq '. + {"skipDangerousModePermissionPrompt": true}' ~/.claude/settings.json > ~/.claude/settings.json.tmp && mv ~/.claude/settings.json.tmp ~/.claude/settings.json
(If the file did not exist, first run Bash: echo '{}' > ~/.claude/settings.json so jq has something to merge into.) Confirm with one line: "Added skipDangerousModePermissionPrompt: true to ~/.claude/settings.json."no, abort with a neutral acknowledgement and do not write any service files. On yes, proceed and let the user deal with it.plan.extraFiles is present, for each entry: ensure the parent dir exists (Bash(mkdir -p <dirname>)), then Write(file.path, file.content), then Bash(chmod <octal> <file.path>) using file.mode (default 0o644 when omitted). These are auxiliary scripts the unit file needs to exist before start — e.g. the resume-on-restart wrapper.Write(filePath, fileContent) — the plan tells you the pathplan.commands in order with Bash, printing the label before eachuninstall to clean up)<plan.label>. Log: <plan.logPath>. Run /agent:service status to verify."service_plan({ action: "status" })plan.commands with Bashservice_plan({ action: "uninstall" })<plan.label> service? [y/N]"plan.commandsservice_plan({ action: "logs" })tail command and print output directly./tmp/clawcode-<slug>.log directly" instead.launchctl or systemctl commands that aren't in the plan returned by service_plan — the tool is the source of truth./agent:service install with the updated flags (future: expose an extraArgs UX).docs/service.md — full doc, risks, channel-flag customizationlib/service-generator.ts — pure generatorsdocs/INDEX.md