{
  "jobs": [
    {
      "id": "8b2ae3275ce1",
      "name": "linkedin-content-batch",
      "prompt": "Generate and schedule the weekly LinkedIn content batch for Pipeline Layer.\n\n**Pre-flight:**\n1. Check GHL token health: `curl -s http://127.0.0.1:9120/ghl/health` \u2014 confirm agency token active\n2. Verify LinkedIn account connected to Pipeline Layer sub-account (`k6PTFz0gXAdNJLDT1aji`)\n\n**Research (optional):**\n- Quick web search for LinkedIn algorithm/news this week\n- Note any trending topics in B2B SaaS/RevOps/AI that could inform hooks\n\n**Content generation \u2014 5 posts, Monday-Friday:**\n- Use the pillar rotation: Builder log \u2192 MarTech/RevOps \u2192 Applied AI \u2192 Career/perspective \u2192 Industry commentary\n- Hook types: Pattern-break, Mechanism-reveal, Stat-anchored, Experience-led, Counter-intuitive\n- Length: 800-1,500 characters each\n- Voice: Rob's style \u2014 short sentences, contrarian but earned, no hype, no fabricated case studies, \"background check\" test\n- Each post needs: text + quote card image\n\n**Image generation:**\n- Backend: OpenAI gpt-image-2 (primary)\n- Style: Dark charcoal bg (#2D3748), warm amber text (#E8893A), \"Pipeline Layer\" in white below\n- Format: Landscape, typography-only, centered, generous padding\n- Verify: vision_analyze each image for text accuracy before proceeding\n\n**Scheduling:**\n- Location: Pipeline Layer sub-account (`k6PTFz0gXAdNJLDT1aji`)\n- Platform: LinkedIn (Rob Blake profile)\n- Time: 9:00 AM MDT each day\n- Copy images to `/root/.hermes/images/linkedin/linkedin_{date}.png` first\n- Use GHL Social Planner API to schedule\n\n**Verification:**\n- List all scheduled posts for the week\n- Confirm: status=scheduled, media attached, correct dates\n- Report summary to Rob with post texts for final review\n\n**Deliverable:** Summary of 5 posts with text previews, scheduled dates, and verification status. Flag any errors or concerns for Rob's review before posts go live.",
      "skills": [
        "social-media-content-pipeline"
      ],
      "skill": "social-media-content-pipeline",
      "model": null,
      "provider": null,
      "provider_snapshot": "nous",
      "model_snapshot": "moonshotai/kimi-k3",
      "base_url": null,
      "script": null,
      "no_agent": false,
      "context_from": null,
      "schedule": {
        "kind": "cron",
        "expr": "0 6 * * 0",
        "display": "0 6 * * 0"
      },
      "schedule_display": "0 6 * * 0",
      "repeat": {
        "times": null,
        "completed": 1
      },
      "enabled": true,
      "state": "scheduled",
      "paused_at": null,
      "paused_reason": null,
      "created_at": "2026-08-03T13:30:08.870269+00:00",
      "next_run_at": "2026-08-16T06:00:00+00:00",
      "last_run_at": "2026-08-09T06:14:13.910533+00:00",
      "last_status": "ok",
      "last_error": null,
      "last_delivery_error": null,
      "deliver": "origin",
      "origin": null,
      "enabled_toolsets": [
        "web",
        "terminal",
        "file",
        "delegation"
      ],
      "workdir": null,
      "fire_claim": null
    },
    {
      "id": "4e8a65d59f31",
      "name": "memory-audit-prune",
      "prompt": "You are running the weekly memory audit for Rob's Hermes instance. Your job: keep the 'memory' store lean (facts + gotchas + pointers to skills) without losing irreducible information. The 'user' profile store is OFF-LIMITS \u2014 do not modify it.\n\nRules for the audit:\n1. Read the current memory entries (call the memory tool with no operations to list them).\n2. An entry is TRIM-WORTHY if it contains: (a) narrative backstory or rejection stories, (b) dates that aren't the fact itself, (c) procedural detail that lives in a named skill (check skills are referenced by name), (d) completed-task logs or stale status flags (e.g. 'fix block handed to Rob' where the fix was applied \u2014 verify before removing; if unsure, KEEP and flag).\n3. An entry is IRREDUCIBLE if it's a user preference/correction, a locked decision (brand, positioning), an open security item, or an environment fact with no skill home.\n4. NEVER remove: open security items, locked positioning/brand decisions, or anything you're less than fully confident is redundant.\n5. If you trim: use ONE batch operations call. Keep the fact + the gotcha + the skill pointer; cut the story.\n6. REPORTING: If you made changes or found something questionable, reply with a SHORT summary (what was trimmed, chars freed, anything flagged for Rob's decision). If the store is clean and nothing changed, reply with exactly one line: 'Memory audit clean \u2014 no changes.' Do not pad the report.",
      "skills": [],
      "skill": null,
      "model": null,
      "provider": null,
      "provider_snapshot": "nous",
      "model_snapshot": "moonshotai/kimi-k3",
      "base_url": null,
      "script": null,
      "no_agent": false,
      "context_from": null,
      "schedule": {
        "kind": "cron",
        "expr": "0 7 * * 1",
        "display": "0 7 * * 1"
      },
      "schedule_display": "0 7 * * 1",
      "repeat": {
        "times": null,
        "completed": 0
      },
      "enabled": true,
      "state": "scheduled",
      "paused_at": null,
      "paused_reason": null,
      "created_at": "2026-08-06T01:23:00.984846+00:00",
      "next_run_at": "2026-08-10T07:00:00+00:00",
      "last_run_at": null,
      "last_status": null,
      "last_error": null,
      "last_delivery_error": null,
      "deliver": "origin",
      "origin": null,
      "enabled_toolsets": [
        "memory"
      ],
      "workdir": null
    },
    {
      "id": "7f93f7b456d9",
      "name": "gateway-watchdog",
      "prompt": "Run the VPS gateway watchdog script; stdout (if any) is delivered verbatim to Rob.",
      "skills": [],
      "skill": null,
      "model": null,
      "provider": null,
      "provider_snapshot": null,
      "model_snapshot": null,
      "base_url": null,
      "script": "gateway-watchdog-vps.sh",
      "no_agent": true,
      "context_from": null,
      "schedule": {
        "kind": "cron",
        "expr": "*/5 * * * *",
        "display": "*/5 * * * *"
      },
      "schedule_display": "*/5 * * * *",
      "repeat": {
        "times": null,
        "completed": 639
      },
      "enabled": true,
      "state": "scheduled",
      "paused_at": null,
      "paused_reason": null,
      "created_at": "2026-08-07T08:28:06.067682+00:00",
      "next_run_at": "2026-08-09T13:45:00+00:00",
      "last_run_at": "2026-08-09T13:40:35.009763+00:00",
      "last_status": "ok",
      "last_error": null,
      "last_delivery_error": null,
      "deliver": "origin",
      "origin": null,
      "enabled_toolsets": null,
      "workdir": null,
      "fire_claim": null
    }
  ],
  "updated_at": "2026-08-09T13:40:35.010227+00:00"
}