Skip to content

Ops agents (day-2 crew)

Scheduled checks and cleanup before more golden-path automation. WearLab deferred.

Agents

Agent Schedule What it does
Daily pulse Woodpecker cron ops-daily-pulse (e.g. 08:00 UTC) Ship health, stuck/needs-you counts, staging HTTPS, wallet %; Discord only if issues (or always with OPS_PULSE_ALWAYS=1)
Weekly digest Woodpecker cron ops-weekly-digest (e.g. Mon 09:00 UTC) Done this week, blocked tickets, wallet, staging — one Discord summary
Slot steward On each pulse + mark_done/cancel Wipes bays + drops slot_claims for done/cancelled tickets
H2c reclaim Apps cron 04:00 UTC reclaim-idle-slots.py — wipe slots idle > 24h
Writing daily Portfolio catchup / finalize → Ship notify Ticket WRITING-DAILY on board — writing-daily-agent.md

Ship API

Endpoint Purpose
GET /api/v1/ops/snapshot JSON snapshot for tools
POST /api/v1/ops/pulse Run pulse + steward; optional Discord
POST /api/v1/ops/weekly-digest Weekly message
POST /api/v1/ops/slot-steward Release stale claims only

Laptop / manual

# Woodpecker cron (after push + repo cron names configured)
# Or trigger from Woodpecker UI → ops-agents pipeline → manual

SHIP_BASIC_AUTH='user:pass' node scripts/ops-agent-runner.mjs pulse
SHIP_BASIC_AUTH='user:pass' node scripts/ops-agent-runner.mjs digest
SHIP_BASIC_AUTH='user:pass' node scripts/ops-agent-runner.mjs slot-steward

# Apps H2c cron (once)
bash local/install-apps-reclaim-cron.sh

# Discord for Ship gates + ops (infra VPS)
DISCORD_WEBHOOK_URL='https://discord.com/api/webhooks/...' bash local/install-ship-discord-webhook.sh

Auto on mark_done

  • Slot release — remote wipe + clear slot_claims / assigned_slot
  • Plane close — PATCH work item to completed state when API key + plane_issue_id set (best-effort)

Forgejo cron setup

Repo infra/devops → Settings → Cron jobs:

Name Schedule Pipeline
ops-daily-pulse 0 8 * * * .woodpecker/ops-agents.yml
ops-weekly-digest 0 9 * * 1 .woodpecker/ops-agents.yml

Existing: ship-worker, graphify-docs-daily — leave as-is.

See also: ship-golden-path.md · writing-daily-agent.md.