WATCHD v3
SCHEDULE AI AGENTS
FIG. 01 / THE OUTCOME

AI agents that run while you sleep.

Write a markdown file. watchd schedules it, runs claude -p, tracks cost. Single binary, zero config.

agents/competitor.mdMARKDOWN AGENT
AGENTSMARKDOWN FILES
SCHEDULECRON / INTERVAL
COSTTRACKED PER RUN
INSTALLSINGLE BINARY
FIG. 02 / PROOFMARKDOWN AGENTS

Write markdown.
Claude does the rest.

YAML frontmatter sets the schedule, model, and budget. The markdown body is the prompt. watchd runs claude -p, parses the JSON output, tracks cost per run.

AGENT FILE
agents/uptime.md
---
name: uptime
schedule: 5m
model: sonnet
permission_mode: default
max_turns: 5
budget: 0.05
---

# Uptime Monitor

Check if https://api.myapp.com/health
returns 200. If not, tell me what's wrong.
CLI OUTPUT
watchd run + watchd status
$ watchd run uptime
running uptime...
✓ uptime in 4.2s ($0.0089)
The endpoint returned HTTP 200 with response
time of 142ms. All healthy.

$ watchd
AGENT      SCHEDULE  STATUS   COST      LAST RUN
uptime     5m        success  $0.0089   2m ago
digest     1d        success  $0.1204   6h ago
COST TRACKING
watchd costs + watchd logs
$ watchd costs
AGENT          COST     RUNS
uptime       $ 0.2314     26
digest       $ 0.4816      4
security     $ 0.8201      7
TOTAL        $ 1.5331     37

$ watchd logs uptime
✓ uptime   success  4.2s  $0.0089  2m ago
  All healthy. 200 OK in 142ms.
✓ uptime   success  3.8s  $0.0076  7m ago
  All healthy. 200 OK in 138ms.
FIG. 03 / WHY NOT CRON + BASH

Cron can schedule. It can't track cost.

watchd wraps claude -p with scheduling, cost tracking, budget enforcement, and run history. Your agents are markdown files, not bash scripts.

CRON + BASH
01Write a bash script. Parse output yourself. No structure.
02No cost tracking. You find out at the end of the month.
03No run history. stdout is gone when the terminal closes.
04Permission? Your script runs as root. Hope it behaves.
05Adding a new task: edit crontab, write another script.
WATCHD
01Write a markdown file. Claude handles the thinking.
02Cost tracked per run. Budget limits per agent.
03Full run history. Status dashboard. Queryable logs.
04Permission modes: default, plan, full. You choose.
05Adding a new task: watchd add name, write the prompt.
FIG. 04 / THREE STEPS
01WRITE

A markdown file.

YAML frontmatter for schedule, model, budget. The body is the prompt Claude follows. No code, no framework.

---
name: digest
schedule: 1d
model: sonnet
budget: 0.25
---

# Daily Digest

Summarize the top stories on
TechCrunch and Product Hunt
from the last 24 hours.
Focus on developer tools
and AI infrastructure.
02RUN

One command.

watchd runs claude -p with your prompt, tracks the result and cost. Test locally before scheduling.

$ watchd run digest
running digest...
✓ digest in 12.3s ($0.0892)
3 noteworthy launches today...

$ watchd costs
AGENT      COST     RUNS
digest   $ 0.4460      5
TOTAL    $ 0.4460      5
03SHIP

Runs while you sleep.

watchd up starts the scheduler. Agents run on their intervals. Deploy to any VPS and forget about it.

$ watchd up
watchd: starting with 3 agent(s)
  digest   1d
  security 6h
  uptime   5m
watchd: running digest...
  ✓ digest in 12.3s $0.0892
watchd: running security...
  ✓ security in 8.1s $0.0341
watchd: waiting for schedules
FIG. 05 / AGENTS6 EXAMPLES

Agents you can run tonight.

Each agent is a markdown file. Drop it in agents/, run watchd up.

Uptime monitor

Check your endpoints every 5 minutes. Claude interprets the response, not just the status code.

---
name: uptime
schedule: 5m
model: haiku
budget: 0.02
---

Check if https://api.myapp.com/health
returns 200. If the response time is
above 500ms or the body looks wrong,
explain what might be happening.
Security scanner

Audit your repos for vulnerabilities. Claude reads the code, not just dependency lists.

---
name: security
schedule: 6h
model: sonnet
max_turns: 15
budget: 1.00
---

Check the latest commits in my repo
for security issues: SQL injection,
hardcoded secrets, unsafe file ops.
Flag anything that needs attention.
Email digest

Summarize what matters from your inbox. Runs before you wake up.

---
name: inbox
schedule: 1d
model: sonnet
budget: 0.50
---

Check my unread emails from the
last 24 hours. Summarize anything
from customers or investors.
Ignore newsletters and marketing.
Changelog writer

Generate release notes from your git log. Push to docs automatically.

---
name: changelog
schedule: 1d
model: sonnet
max_turns: 10
---

Look at git commits from the last
24 hours. Write a concise changelog
entry. Group by feature, fix, chore.
Skip merge commits and CI changes.
Error log analyzer

Tail your logs, find patterns, suggest fixes. Runs every 30 minutes.

---
name: errors
schedule: 30m
model: sonnet
budget: 0.10
---

Read the last 100 lines of
/var/log/app/error.log.
Group similar errors, identify
root causes, suggest fixes.
Skip known false positives.
DB health check

Monitor slow queries and table growth. Claude explains what it finds.

---
name: dbhealth
schedule: 1h
model: sonnet
max_turns: 10
budget: 0.25
---

Connect to the production database.
Check for slow queries (>100ms),
table bloat, and unused indexes.
Suggest specific fixes.
FIG. 06 / UNDER THE HOODSINGLE BINARY

Go binary. The LLM does the thinking.

watchd is a thin orchestration layer. No AI runtime, no model loading, no API keys. It spawns claude -p and parses the JSON output. That's it.

agents/
Markdown files with YAML frontmatter
cli
init, add, run, list, logs, costs, up
scheduler
Interval timer for recurring agents
runner
Spawns claude -p, parses JSON output
store
Run history as JSON files in runs/
costs
Per-run tracking, budget enforcement
cli -> runnercli -> storescheduler -> runnerrunner -> storerunner -> costscli -> scheduler
FIG. 07 / GET STARTED
Star on GitHub
BUILT BY © LEVEL09