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.