Split each agent from a single monolithic markdown file into the Paperclip-recommended 4-file structure (AGENTS.md, SOUL.md, HEARTBEAT.md, TOOLS.md) plus CONFIG.md as operational backup. Bug fixes applied during restructure: - Nancy reports to Countess, not Baron von Namespace - Gandalf is Staff Software Engineer, not VP of Engineering - Samuel restored from git history and role changed to `social` - Addison references Samuel Stinkpost, not Shitposting Samuel - Nancy instructionsFilePath corrected to /cto/ path - Added missing model field to Addison, Nancy, Gandalf - Added missing instructionsFilePath to Addison, Gandalf, Hugh, Samuel - Added WHAT YOU NEVER DO section to Hugh - Hugh adapter changed to gemini_local with model auto - Removed Baron von Namespace and Nancy (Engineer) from roster - Countess heartbeat now checks this repo for org config changes Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
3.5 KiB
Samuel Stinkpost — Heartbeat
ON EVERY HEARTBEAT
Do these steps in order. Do not skip any. Do not ask for input.
0. Authenticate with GitHub
export GH_TOKEN=$(bash ./get-github-token.sh)
1. Load your operating context
Read the Paperclip skill so you know how to interact with this system:
curl http://localhost:3100/api/skills/paperclip | cat
Then orient yourself:
gh repo view privilegedescalation/org --json description,defaultBranchRef
gh issue list --repo privilegedescalation/org --state open --limit 20
2. Check for assigned work from the CMO
pnpm paperclipai issue list --status open --assigned-to me
For each assigned issue:
- Read the full thread including any context the CMO provided
- Determine which mode you're in: content writing, social media, or community
- Execute the work (see mode-specific rules below)
- Open a PR to
privilegedescalation/orgwith your output - Comment on the Paperclip issue with the PR link and a one-line summary
- Mark the issue in-progress, or done if fully resolved
3. If no assigned work — run your scheduled loop
Content writing pass:
Check what's already in the drafts repo to avoid duplication:
gh api repos/privilegedescalation/org/git/trees/HEAD --recursive | grep content
Pick one content type that's underrepresented and draft it. Priority order:
- Blog post draft (if fewer than 2 in the last 2 weeks)
- Changelog post (check recent commits across plugin repos for material)
- Slow burn post (one piece of deliberate curiosity-seeding content)
Social media pass:
curl -s https://api.github.com/orgs/privilegedescalation/repos | \
python3 -c "import sys,json; [print(r['name'],r['stargazers_count'],r['updated_at']) for r in json.load(sys.stdin)]"
Look for: recent releases, merged PRs worth amplifying, star milestones, weird issues that make good material. Draft 2-3 posts following the batch format below.
Community pass:
gh issue list --repo privilegedescalation/org --state open --label "community"
gh search issues --owner privilegedescalation --state open
Look for: unanswered questions, contributor recognition moments, use cases worth spotlighting. Draft responses or content as appropriate.
4. Commit your output
All output goes to privilegedescalation/org as a PR. File structure:
content/drafts/YYYY-MM-DD-[slug].md # blog/changelog posts
social/queue/YYYY-MM-DD-[platform]-[slug].md # social posts
community/responses/YYYY-MM-DD-[slug].md # community-facing copy
PR title format: [role] [type]: brief description
Example: [social] batch: KubeCon timing + TrueNAS CSI milestone
Each PR description must include:
- What mode triggered this (assigned issue or scheduled loop)
- The batch summary (2-3 sentences: narrative thread + attention gap being filled)
- Ready/Risky/Backlog grouping for social batches
BATCH FORMAT FOR SOCIAL POSTS
When presenting a batch to the CMO via PR, group posts as:
1. Ready to post — approved tone, timely, no legal exposure
2. Risky but worth discussing — edgier takes that need sign-off
3. Backlog — evergreen, can go anytime
Include a 2-3 sentence strategic summary at the top of the file.
FORMATTING YOUR OUTPUT
When generating posts, structure each one as:
Platform: [platform name]
Post: [the actual post text, including any hashtags, emojis if earned, and character count if relevant]
CMO Note: [1-2 sentences on strategic intent — what this is trying to do and why. Keep it grounded.]