Automation

Scheduled prompts, stopping conditions, headless runs, and deep links — the smaller pieces that make Claudin run without someone watching.

Scheduled prompts

Three tools handle it: CronCreate takes a standard 5-field cron expression, a prompt to enqueue when it fires, and two flags — recurring (default true) and durable (default false). A non-durable job lives only in the running process's memory; a durable one is written to .claudin/scheduled_tasks.json and survives a restart. CronList and CronDelete round it out. There's no daemon — everything fires from inside a running Claudin process, on a timer, only while the REPL is idle. If Claudin isn't running, a durable job just waits on disk until the next launch, at which point missed one-shots surface for catch-up. CLAUDE_CODE_DISABLE_CRON=1 turns the whole scheduler off.

A related, narrower tool, ScheduleWakeup, handles one-shot, session-only delays — no cron expression, just a delay in seconds and an optional prompt.

The /loop skill sits on top of both, picking the right primitive for how it's called:

UsageWhat happens
/loop 5m check the deployFixed interval — a recurring CronCreate job.
/loop check the deployDynamic — the model picks its own delay each iteration via ScheduleWakeup.
/loop (no arguments)Maintenance mode — reads .claudin/loop.md or ~/.claudin/loop.md if present, else a built-in maintenance prompt.

Stopping conditions

/goal <condition> sets a session-scoped stopping condition: every time the assistant tries to stop, an LLM judge checks the transcript against the condition and blocks the stop until it holds, then clears itself automatically. /goal clear ends it early; bare /goal shows the condition, iteration count, elapsed time, and tokens used. It works in headless mode too — there's no user around to say "keep going," so the goal does that instead. Limits: 4,000-character condition, 120-second judge timeout, 50 iterations interactive / 10 non-interactive.

This is a different mechanism from Task tracking (TaskCreate/TaskList/TaskGet) — Tasks track discrete units of work; a goal gates whether the session is allowed to stop at all, implemented as a session-scoped Stop hook.

Headless mode

-p/--print runs Claudin non-interactively — the prompt is a separate argument (claudin -p "text") — for scripts, CI, or piping into other tools.

FlagMeaning
--output-format text|json|stream-jsonStructured output, including cost.
--input-format stream-jsonStream input in, requires stream-json output.
--include-partial-messagesStream partial assistant messages (requires -p + stream-json).
--no-session-persistenceDon't write session state to disk.
claudin -p "summarize the failing tests" --output-format json

A claude-cli://open URI opens a new terminal window with Claudin already running:

claude-cli://open
claude-cli://open?q=hello+world
claude-cli://open?q=fix+tests&repo=owner/repo
claude-cli://open?cwd=/path/to/project

q pre-fills the prompt input — it does not submit it, so a link can't silently trigger an instruction without someone pressing Enter. cwd sets the working directory directly; repo resolves an owner/repo slug against locally known clones if cwd isn't given.

A separate scheme, cc://, is unrelated: it's for connecting to an already-running Claudin session on another machine (claudin open <cc-url>), not for pre-filling a prompt from a webpage.