feat: add HEARTBEAT.md as the per-agent wake procedure#9
Merged
Conversation
OpenClaw loads agents/<id>/HEARTBEAT.md on every wake. Previously the wake procedure was tucked into SOUL.md's "Wake Protocol" section, conflating behaviour with the step-by-step script. Pull it into its own file and update the contract, template, docs, and create-squad skill. The procedure now requires: execute at least one task before closing the session (no orient-and-bail) and write a digest to memory/YYYY-MM-DD.md before ending the turn. NO_REPLY is only acceptable when nothing is actionable, with the reason logged first. Bump geo-seo-squad to 1.1.0 since atlas migrated to the new layout. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
fdefitte
pushed a commit
that referenced
this pull request
May 19, 2026
Move the per-agent wake procedure out of SOUL.md / MEMORY.md and into a dedicated HEARTBEAT.md for both geo-squad/atlas and reddit-squad/seren. SOUL.md keeps the behavioural rules; MEMORY.md keeps pointers. The contract change (template + docs + validator stance) is being landed separately in PR #9. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
fdefitte
pushed a commit
that referenced
this pull request
May 19, 2026
Move the channel-aware wake procedure out of SOUL.md and into a dedicated HEARTBEAT.md. SOUL.md now points at HEARTBEAT.md — SOUL defines who/how, HEARTBEAT defines what to run on every wake. Template + validator changes are handled by PR #9. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
MarquisG
approved these changes
May 19, 2026
MarquisG
pushed a commit
that referenced
this pull request
May 19, 2026
… (Reddit-agent) (#6) * feat: split geo-seo-squad into geo-squad (Atlas) and reddit-squad (Seren) geo-seo-squad combined two distinct agents with different tools, vault secrets, and onboarding paths into one bundle. Splitting into focused single-agent squads keeps each one self-contained and easier to deploy independently. geo-squad: - Atlas only (GEO/SEO strategist) - Daily citation audits, blog posts, llms.txt / JSON-LD engineering - Requires: team.target_domain, team.target_keywords, github.com identity - No cron jobs (Atlas is heartbeat-driven) reddit-squad: - Seren only (Reddit presence agent) - Daily subreddit monitoring, comment drafts, multi-account karma strategy - Requires: team.reddit_accounts, team.reddit_target_subreddits, team.target_keywords - Weekly health check cron retained from geo-seo-squad Both bundles pass validate.mjs. * refactor(geo-squad): move geo-llmseo-playbook to agent-level skills In a single-agent squad the squad-level vs agent-level distinction is meaningless. Flattened: skills/geo-llmseo-playbook.md moved to agents/atlas/skills/ and manifest updated accordingly. * feat(geo-squad): add daily blog post date refresh to Atlas scope * feat(squads): add HEARTBEAT.md for Atlas and Seren Move the per-agent wake procedure out of SOUL.md / MEMORY.md and into a dedicated HEARTBEAT.md for both geo-squad/atlas and reddit-squad/seren. SOUL.md keeps the behavioural rules; MEMORY.md keeps pointers. The contract change (template + docs + validator stance) is being landed separately in PR #9. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * refactor(squads): rename Atlas to GEO-agent, Seren to Reddit-agent Rename the two agents from proper names to descriptive ids. Agent dirs move to agents/geo-agent and agents/reddit-agent; manifest ids, skill paths, cron sessionTarget, task assigned_to, and all prose updated to match. Gendered pronouns referring to Seren neutralized. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> --------- Co-authored-by: Pancake <pancake@getpancake.ai> Co-authored-by: Francois de Fitte <francoisdefitte@MacBook-Air-8.local> Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
fdefitte
pushed a commit
that referenced
this pull request
May 20, 2026
… out of SOUL.md Each of the three landing-page agents (Pixel, Canvas, Scout) now ships a HEARTBEAT.md that OpenClaw loads on every wake — orient, decide, run the recurring duty, execute, digest, close the loop. The wake-protocol section is removed from each SOUL.md to keep wake instructions in one place. PR #9 handles HEARTBEAT.md in the template, the other squad, and the docs/validator contract. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
MarquisG
pushed a commit
that referenced
this pull request
May 20, 2026
* feat: add outreach-squad Daily outbound engine with one agent (Rex/outreach-agent). - Simple mode by default (LinkedIn, 4 leads/week, 4-5 touchpoints) - Auto-upgrades to Advanced mode (signal stacking, multichannel) when reply rate >8% sustained + tools available - Daily heartbeat: find leads, advance sequences, handle replies, post digest - Mandatory daily digest to configured channel (Slack/email/iMessage) - 2 squad-wide skills: simple-outreach + advanced-outreach - 5 task templates: find-leads, update-icp, new-message-variant, weekly-review, extract-post-engagers - No cron (heartbeat-driven, timing doesn't matter to anyone outside the agent) - Exa built-in; Heyreach/Lemlist/FullEnrich/Jungler/Crunchbase all optional vault secrets Passes validate.mjs clean. * fix: replace MEMORY.md pipeline tracking with Agent Tasks system - SOUL.md: Wake Protocol now uses create_task/update_task/complete_task for lead state instead of MEMORY.md. Full task lifecycle documented (queued → in_progress → complete/closed). - SOUL.md: Operating Principles updated to reference task system as single source of truth for pipeline state. - MEMORY.md: Pipeline section now points to list_tasks instead of tracking leads inline. - simple-outreach.md: Each sequence touch now includes the corresponding update_task call. Lead creation uses create_task. Sequence end and meeting booked use complete_task. * fix: address PR review comments - IDENTITY.md: renamed Rex -> Outreach agent; rebalanced LinkedIn vs email as co-equal channels; email now documented as free/fully-automated default, LinkedIn as higher-reply-rate option requiring paid tool for automation - SOUL.md: same name fix; added Channel philosophy section; added Operating Principle #2 (self-populate task backlog after each digest); Wake Protocol step 2 now starts with list_tasks(todo) for pre-queued actions before scanning in-progress leads - tasks-config/templates.json: added daily-digest, enrich-leads, send-linkedin-connection, send-linkedin-dm, send-email, handle-reply, advance-sequence templates covering all skill actions; expanded find-leads and existing templates with explicit task system calls * fix: declare Exa as built-in tool in manifest and MEMORY.md - manifest.json: added 'exa' to required_tool_permissions so the marketplace surface shows it as a used capability - MEMORY.md: Exa entry now explicitly marked as pre-configured in Pancake — no key or vault secret needed. Other tool entries now include the vault key path for clarity. Exa requires no required_vault_secret entry because it's part of the Pancake stack, not a user-supplied credential. * feat: extract outreach-agent wake protocol into HEARTBEAT.md Move the channel-aware wake procedure out of SOUL.md and into a dedicated HEARTBEAT.md. SOUL.md now points at HEARTBEAT.md — SOUL defines who/how, HEARTBEAT defines what to run on every wake. Template + validator changes are handled by PR #9. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * chore: drop the "Rex" nickname from outreach-agent Agent is referred to as outreach-agent everywhere — remove the stale Rex label from MEMORY.md's header. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * fix: address all PR review comments - required_vault_secrets → optional_vault_secrets (all 5 keys were already labeled optional) - Add crons block to manifest.json — daily heartbeat is a cron, not a task template - Expand tasks-config/templates.json: add missing action tasks covering both skills (send-email, send-linkedin-voice-note, draft-cold-call-opener, handle-reply, advance-sequence, extract-post-engagers; enrich-lead → singular) - daily-digest template kept as manual trigger; cron covers automated daily run - daily-digest description now includes self-populate instruction for next-day backlog Names (Rex → Outreach agent) and channel-neutral IDENTITY/SOUL were already addressed in prior commits. Exa was already in required_tool_permissions. * fix: remove redundant cron — agent already has daily heartbeat * feat: expand HEARTBEAT.md to cover full workflow from both skills - Full Simple mode sequence (all 5 touchpoints with copy examples) - Full Advanced mode sequence (8-12 touchpoints, all channels) - Enrichment step (FullEnrich → Hunter.io → Exa fallback) - Lead finding: signal-based + ICP search, Simple and Advanced variants - A/B test check with Advanced-mode additions - Mode upgrade/downgrade logic inline - Self-populate next-wake backlog - Weekly learning with Advanced-mode metrics - Task lifecycle reference table HEARTBEAT.md is now the single source of truth — tasks/templates become optional. * refactor: remove task system from outreach-squad, fold workflow into heartbeat Drop tasks-config/ entirely and rewire pipeline state to live inline in MEMORY.md as an Active leads / Closed leads ledger. The heartbeat now owns the end-to-end loop and computes due work from Next due dates in the ledger instead of from queued task templates. Also drops required_identities (LinkedIn) and optional_vault_secrets from the manifest — Pancake can't drive LinkedIn outreach for the user, and optional_vault_secrets was never in the manifest schema. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> --------- Co-authored-by: Pancake <pancake@getpancake.ai> Co-authored-by: Francois de Fitte <francoisdefitte@MacBook-Air-8.local> Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Add
agents/<id>/HEARTBEAT.mdto the bundle contract — the imperative wake procedure OpenClaw loads on every pulse — so authors stop burying it inSOUL.md's "Wake Protocol" section or inMEMORY.mdpointers. The procedure now requires the agent to execute at least one task before closing the session (no orient-and-bail) and to write a digest tomemory/YYYY-MM-DD.mdbefore ending the turn. Updatedtemplate/, migratedgeo-seo-squad/atlas(bumped to 1.1.0), refreshedbundle-reference.md/authoring-a-squad.md/how-squads-work.md/create-squadskill. Validator unchanged —HEARTBEAT.mdis convention-based and optional, likeMEMORY.md.Checklist
🤖 Generated with Claude Code