claude-memory/graph/solutions/claude-scheduled-tasks-headless-claude-code-on-systemd-timer-cb5e88.md

3.2 KiB

id type title tags importance confidence created updated relations
cb5e8814-f689-4de0-8854-823358706dec solution Claude Scheduled Tasks: headless Claude Code on systemd timers
claude-scheduled
systemd
automation
headless
claude-code
homelab
solution
0.9 0.8 2026-03-01T06:20:55.075783+00:00 2026-03-01T16:43:47.150565+00:00
target type direction strength edge_id
62ee21e8-2b56-4d38-a73d-47e2724f08c6 RELATED_TO outgoing 0.89 db026c0c-561b-4707-a639-e84fd30796bf
target type direction strength edge_id
39379120-896b-46cd-befa-b83d09d7556b RELATED_TO outgoing 0.83 81f46fe3-13a8-47f5-9075-38593a064eab
target type direction strength edge_id
4edbf516-fe92-4e70-995a-266fe9f183ee RELATED_TO outgoing 0.81 61b35eaa-20c9-4e0c-93c6-1718f38d53ad
target type direction strength edge_id
b27fb831-811e-4103-b5f1-3c36d5b1ad20 REQUIRES incoming 0.9 57bef9f5-bad9-4111-b97e-75a7486bad71
target type direction strength edge_id
250d2fe0-5866-42f1-b83d-187b3a64fb84 RELATED_TO incoming 0.9 2cf0cf58-bef2-4ba9-a19d-05ce98b353c1
target type direction strength edge_id
dfe48a70-b8ab-4bb5-a3d8-6116fa498168 RELATED_TO incoming 0.85 6e4d85b7-87e7-4a6e-b624-cf79679f0aaf
target type direction strength edge_id
057d7989-0465-413d-9a59-67e186133cec BUILDS_ON incoming 0.84 81e81204-668e-4dd6-aa07-e63ef93e4b8c
target type direction strength edge_id
c684a1ea-bdb6-4e4b-9416-e50e471221a0 BUILDS_ON incoming 0.82 1d8b07e5-4ad4-44d2-97c1-f103345b6b98
target type direction strength edge_id
e6f9c92a-2964-4ffa-979c-700e7d23bed3 RELATED_TO incoming 0.79 c795bfcc-99a7-43f4-bfc4-e071f0a91da9

Claude Scheduled Tasks System

Summary

Built a "Claude Cowork"-style scheduled task system using systemd timers and claude -p headless mode. Allows fully autonomous Claude Code sessions to run on a schedule without human interaction.

Architecture

  • Universal runner: ~/.config/claude-scheduled/runner.sh
  • Per-task config directory: ~/.config/claude-scheduled/tasks/<name>/
    • prompt.md — task instructions
    • settings.json — model, budget, allowed tools
    • mcp.json — MCP server config for that task
  • Systemd template unit: claude-scheduled@.service
  • Per-task timer files: claude-scheduled@<name>.timer

Key invocation flags

claude -p \
  --model sonnet \
  --max-budget-usd 0.75 \
  --output-format json \
  --no-session-persistence \
  --allowedTools <list> \
  --mcp-config <file> \
  --strict-mcp-config \
  --append-system-prompt <context>

Critical notes

  • Must unset CLAUDECODE before invoking claude -p inside any shell that may be a Claude session (nested session error otherwise)
  • --permission-mode bypassPermissions cannot be used as root — run as non-root user
  • --max-budget-usd is not an instant cutoff — can overshoot (set $0.25, spent $0.37)
  • Results stored to cognitive-memory as workflow+episode
  • Log rotation: keeps 30 logs per task in ~/.config/claude-scheduled/tasks/<name>/logs/
  • Global kill switch: create ~/.config/claude-scheduled/disabled file to halt all tasks

Gitea issue

claude-home#2