Guides

Practical, code-heavy writeups for running agents unattended — permissions, cron, human-in-the-loop approvals, and webhooks with no public URL. Written for practitioners; every guide is self-contained and useful whether or not you ever touch pendnt.

What --dangerously-skip-permissions actually disables

Permission modes, allow/deny rules, hooks, --permission-prompt-tool, and sandboxing — five ways to run Claude Code unattended without turning off the whole permission system.

Running claude -p on cron: a production checklist

flock locking, MCP_TOOL_TIMEOUT, exit codes (including the 75-retry convention), logging, secrets, and wake-up patterns for a job that runs on a schedule with nobody watching.

The undocumented --permission-prompt-tool contract

The payload and response shapes the official docs don't publish, source-derived from the CLI bundle, plus a minimal do-it-yourself MCP server that implements the whole contract in about 40 lines.

OpenClaw cron jobs can't ask_user

Why a scheduled OpenClaw session has no chat to ask into, and the poll-by-id pattern (plus a minimal skill) for a step that genuinely needs a human decision.

Human approval in the Claude Agent SDK

canUseTool, the defer hook decision, and resume — why not to just block inside the callback, in TypeScript and Python.

Receiving webhooks with no public URL

Tunnels vs. a hosted polling inbox vs. self-hosting a receiver — the real tradeoffs, and why OAuth redirect_uri registration makes URL stability matter more than it first seems to.

Claude Code hooks that matter for unattended runs

PreToolUse, PermissionRequest, Notification, and Stop — the JSON shapes on stdin and stdout, hooks.json examples, and the deny/allow output contract each one actually expects.

Authenticating remote MCP servers

API keys in headers, .mcp.json env expansion, and what the MCP spec's 2026-07-28 revision changed for sessions and OAuth — with examples across Claude Code, the Agent SDK, Cursor, and OpenClaw.

Exit codes for unattended agents

Retry vs. stay-dead — the 75/1 sysexits.h convention, flock locking, a cron hygiene checklist, and a systemd timer alternative.

Approving agent actions from Telegram

Linking a chat to a workspace, inline keyboard buttons, callback_query handling, and the idempotency pitfalls that show up the first time two people tap the same button.

Claude Code permissions: allow rules, ask rules, modes, and where they're read from

settings.json precedence across enterprise/CLI/project/user files, the Tool(pattern) rule syntax, defaultMode values, and how the CLI's own sandbox layer fits alongside the permission engine.

Stopping the permission prompts

Every option ranked by blast radius: allow rules, acceptEdits, sandboxed auto-allow, hooks, --permission-prompt-tool, and --dangerously-skip-permissions — with what's sane for a fully unattended run.

Scheduling Claude Code

cron, systemd timers, launchd, and CI runners compared — concrete unit files and plists, logging, secrets, and the exit-code convention that should stay the same across all four.

Writing an OpenClaw skill

SKILL.md anatomy, how a skill actually calls out via exec, SecretRefs and the Docker-sandbox caveat, and the ClawHub publishing checklist.

.mcp.json config reference

Every config shape with examples: stdio and http transports, header env expansion, scope precedence, plugin-provided servers, and claude mcp add.

See also

The docs cover pendnt's own API and MCP tools directly; these guides are broader — general practices for unattended agents that apply whether or not you use pendnt at all. Start with the quickstart if you're here to wire up pendnt specifically.