Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions squads/ai-seo-squad/agents/geo-agent/HEARTBEAT.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,13 @@ cofounder-briefed tickets from scheduled crons. This pulse fires once a day
and has exactly one job: **advance the company's goal on your own
initiative.**

**Execution rule (hard).** Act through TOOL CALLS, never narration. If step 1
finds an assigned ticket, CALL claim_next_task and execute it IN THIS TURN —
do not describe what you are about to do and stop. `NO_REPLY` may only ever
be your ENTIRE final message, and only when steps 1–3 genuinely found nothing
to do. Writing NO_REPLY after announcing work terminates the session with the
work undone (this exact failure stranded a live board ticket on 2026-06-12).

1. **Hygiene first (fast).** `claim_next_task` — if a ticket assigned to you
is sitting in `todo` (a missed wake), work it and stop here. Unfinished
in-flight work also beats new initiative: an open PR awaiting a follow-up
Expand Down
5 changes: 4 additions & 1 deletion squads/ai-seo-squad/agents/geo-agent/agent.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@
"id": "geo-agent",
"description": "GEO/SEO strategist — daily citation audits, blog posts, JSON-LD/llms.txt engineering. Self-merges blog and technical GEO PRs.",
"model": "sonnet",
"heartbeat": { "every": "24h" },
"heartbeat": {
"every": "24h",
"model": "sonnet"
},
"skills": [
"agents/geo-agent/skills/geo-llmseo-playbook.md",
"agents/geo-agent/skills/advanced-seo.md",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"team.target_domain": "getpancake.ai",
"team.target_keywords": "ai agent platform, autonomous sub-agents, agent squads, proactive ai assistant, ai cofounder"
},
"installed_squads": ["ai-seo-squad@1.5.0"]
"installed_squads": ["ai-seo-squad@1.5.1"]
},
"inputs": {
"keywords": "ai agent platform, autonomous sub-agents, agent squads, proactive ai assistant, ai cofounder",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"description": "Cofounder dispatches an llms.txt refresh. Per advanced-seo: geo-agent claims, reads the target domain from the vault, fetches the live llms.txt and the pages it should index via web_fetch, rewrites it (one-liner, core pages, facts), ships the change as a PR via github and self-merges (squash — never edit the live file directly), files the change to wiki/Knowledge/GEO, and completes with the merged-PR link + digest. The workflow declares only web_fetch + github — no web_search, no browser.",
"setup": {
"vault": { "team.target_domain": "getpancake.ai" },
"installed_squads": ["ai-seo-squad@1.5.0"]
"installed_squads": ["ai-seo-squad@1.5.1"]
},
"inputs": {
"target": "llms.txt",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"vault": {
"team.target_keywords": "ai agent platform, autonomous sub-agents, agent squads, proactive ai assistant, ai cofounder"
},
"installed_squads": ["ai-seo-squad@1.5.0"]
"installed_squads": ["ai-seo-squad@1.5.1"]
},
"inputs": {},
"dispatch": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"description": "Cofounder dispatches a single article to close a citation gap. Per blog-writing-guide: geo-agent claims, reads the target domain from the vault, researches the buyer question and competitor coverage via web_search/web_fetch, drafts the .mdx with answer-first lede + FAQPage JSON-LD, opens the PR via github, self-merges (squash — blog posts need no human review), and completes with the merged-PR link + digest.",
"setup": {
"vault": { "team.target_domain": "getpancake.ai" },
"installed_squads": ["ai-seo-squad@1.5.0"]
"installed_squads": ["ai-seo-squad@1.5.1"]
},
"inputs": {
"topic": "Pancake vs. building your own agent stack: an honest comparison for early-stage founders",
Expand Down
2 changes: 1 addition & 1 deletion squads/ai-seo-squad/manifest.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "ai-seo-squad",
"version": "1.5.0",
"version": "1.5.1",
"description": "Single-agent GEO squad: GEO-agent runs daily citation audits, writes GEO-optimized blog posts, and ships llms.txt / JSON-LD engineering PRs.",
"author": "pancake-official",
"license": "MIT",
Expand Down
7 changes: 7 additions & 0 deletions squads/analytics-squad/agents/analytics-agent/HEARTBEAT.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,13 @@ cofounder-briefed tickets from the scheduled crons. This pulse fires once a
day and has exactly one job: **advance the company's goal on your own
initiative.**

**Execution rule (hard).** Act through TOOL CALLS, never narration. If step 1
finds an assigned ticket, CALL claim_next_task and execute it IN THIS TURN —
do not describe what you are about to do and stop. `NO_REPLY` may only ever
be your ENTIRE final message, and only when steps 1–3 genuinely found nothing
to do. Writing NO_REPLY after announcing work terminates the session with the
work undone (this exact failure stranded a live board ticket on 2026-06-12).

1. **Hygiene first (fast).** `claim_next_task` — if a ticket assigned to you
is sitting in `todo` (a missed wake), work it and stop here. Unfinished
in-flight work also beats new initiative: finish before you start.
Expand Down
5 changes: 4 additions & 1 deletion squads/analytics-squad/agents/analytics-agent/agent.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@
"id": "analytics-agent",
"description": "Product analytics agent — owns the PostHog MCP, the north-star event taxonomy, and the daily DAU/WAU/MAU + engaged-users + dying-users digest.",
"model": "sonnet",
"heartbeat": { "every": "24h" },
"heartbeat": {
"every": "24h",
"model": "sonnet"
},
"skills": [
"agents/analytics-agent/skills/posthog-discovery.md",
"agents/analytics-agent/skills/posthog-daily-analysis.md",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"description": "Ad-hoc metrics pull dispatched at the canonical qualified id with html format; analytics-agent reads the read-only API key, pulls the requested metrics over web_fetch, publishes the HTML report through preview-host (publish_preview), and completes with the signed preview URL + digest.",
"setup": {
"vault": { "team.posthog_api_key": "phx_test_key" },
"installed_squads": ["analytics-squad@1.3.0"]
"installed_squads": ["analytics-squad@1.3.1"]
},
"inputs": {
"metrics": "DAU last 7d, top 5 events, active users",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"description": "Daily digest dispatched at the canonical qualified id; analytics-agent reads the API key from the vault, queries PostHog over web_fetch, files the digest, completes with the canonical result + digest.",
"setup": {
"vault": { "team.posthog_api_key": "phx_test_key" },
"installed_squads": ["analytics-squad@1.3.0"]
"installed_squads": ["analytics-squad@1.3.1"]
},
"inputs": { "date": "2026-06-11" },
"dispatch": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"description": "Regression for the live tenant audit on 2026-06-11. The cofounder stamped tasks with `analytics-squad.daily_digest` (squad name as the entire qualified id) when the canonical form is `analytics-squad.posthog.daily_digest`. The invented stamp polluted the SigNoz workflow group-bys AND — worse — suppressed the learned-workflow nudge in complete_task (which keys on workflow_id === null), so the working recipe was never registered after a successful run. We shipped the validator in tasks plugin (apps/pancake-claw/plugins/tasks/src/squads-registry.ts → checkWorkflowId); this trace keeps a record of the exact id shape that triggered it and goes red if the dispatch.workflow stamp check ever stops catching it.",
"setup": {
"vault": { "team.posthog_api_key": "phx_test_key" },
"installed_squads": ["analytics-squad@1.3.0"]
"installed_squads": ["analytics-squad@1.3.1"]
},
"inputs": { "date": "2026-06-11" },
"dispatch": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"description": "Regression for the second root cause from the 2026-06-11 audit. The analytics-agent's HEARTBEAT.md mandates a digest written to memory/YYYY-MM-DD.md before closing the turn — but the contract was prompt-only and production pods showed 0 daily-log files across all agents, so each wake started blind and re-discovered known failures (5 tasks failed in 3 days on the same eu.posthog.com host bug; ~$0.71 wasted on the latest one). We folded the digest into the terminal-task tools so it's structural — fail_task / complete_task now accept a `digest` param the plugin appends to the daily log. This trace records a terminal WITHOUT a digest and goes red if the digest check is ever loosened.",
"setup": {
"vault": { "team.posthog_api_key": "phx_test_key" },
"installed_squads": ["analytics-squad@1.3.0"]
"installed_squads": ["analytics-squad@1.3.1"]
},
"inputs": { "date": "2026-06-11" },
"dispatch": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"description": "Manual funnel investigation dispatched at the canonical qualified id; analytics-agent reads the read-only API key, derives the signup cohort + intermediate steps + funnel conversion over web_fetch (posthog-funnel-debugger §1-4), files the breakdown to wiki/Knowledge/PostHog/FunnelDebugger/, and completes naming the biggest drop-off step plus a one-sentence hypothesis.",
"setup": {
"vault": { "team.posthog_api_key": "phx_test_key" },
"installed_squads": ["analytics-squad@1.3.0"]
"installed_squads": ["analytics-squad@1.3.1"]
},
"inputs": { "window_days": 28 },
"dispatch": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"description": "Monday weekly recap dispatched at the canonical qualified id; analytics-agent reads the read-only API key from the vault, pulls 4-week trends + activation cohort table + churn count over web_fetch, files the recap to wiki/Knowledge/PostHog/Reports/weekly/, and completes with the canonical result + digest ending in the one-paragraph hypothesis.",
"setup": {
"vault": { "team.posthog_api_key": "phx_test_key" },
"installed_squads": ["analytics-squad@1.3.0"]
"installed_squads": ["analytics-squad@1.3.1"]
},
"inputs": { "week": "2026-W24" },
"dispatch": {
Expand Down
2 changes: 1 addition & 1 deletion squads/analytics-squad/manifest.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "analytics-squad",
"version": "1.3.0",
"version": "1.3.1",
"description": "Analytics squad (PostHog-backed): daily digest (DAU/WAU/MAU, north-star, engaged + dying), activation-funnel debugger, anomaly alerts, weekly recap. Add-ons: release tracker + auto cohorts.",
"author": "pancake-official",
"license": "MIT",
Expand Down
7 changes: 7 additions & 0 deletions squads/community-squad/agents/reddit-agent/HEARTBEAT.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,13 @@ arrive as cofounder-briefed tickets from scheduled crons. This pulse fires
once a day and has exactly one job: **advance the company's goal on your
own initiative.**

**Execution rule (hard).** Act through TOOL CALLS, never narration. If step 1
finds an assigned ticket, CALL claim_next_task and execute it IN THIS TURN —
do not describe what you are about to do and stop. `NO_REPLY` may only ever
be your ENTIRE final message, and only when steps 1–3 genuinely found nothing
to do. Writing NO_REPLY after announcing work terminates the session with the
work undone (this exact failure stranded a live board ticket on 2026-06-12).

1. **Hygiene first (fast).** `claim_next_task` — if a ticket assigned to you
is sitting in `todo` (a missed wake), work it and stop here. Unfinished
in-flight work also beats new initiative: finish before you start — a
Expand Down
5 changes: 4 additions & 1 deletion squads/community-squad/agents/reddit-agent/agent.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@
"id": "reddit-agent",
"description": "Reddit presence agent — monitors subreddits and drafts comments on a single purchased account via browser automation on old.reddit.com.",
"model": "sonnet",
"heartbeat": { "every": "24h" },
"heartbeat": {
"every": "24h",
"model": "sonnet"
},
"skills": [
"agents/reddit-agent/skills/reddit-playbook.md",
"agents/reddit-agent/skills/reddit-account.md"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"vault": {
"team.reddit_account": "{\"username\": \"quiet_builder_42\", \"password\": \"***\"}"
},
"installed_squads": ["community-squad@1.4.0"]
"installed_squads": ["community-squad@1.4.1"]
},
"inputs": {},
"dispatch": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"vault": {
"team.target_keywords": "ai cofounder,agent squads,autonomous agents,openclaw,acme-competitor"
},
"installed_squads": ["community-squad@1.4.0"]
"installed_squads": ["community-squad@1.4.1"]
},
"inputs": { "keywords": "ai cofounder,agent squads,autonomous agents,openclaw,acme-competitor" },
"dispatch": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"vault": {
"team.reddit_account": "{\"username\": \"quiet_builder_42\", \"password\": \"***\"}"
},
"installed_squads": ["community-squad@1.4.0"]
"installed_squads": ["community-squad@1.4.1"]
},
"inputs": { "draft_ids": "draft-2026-06-12-1,draft-2026-06-12-3" },
"dispatch": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"team.reddit_account": "{\"username\": \"quiet_builder_42\", \"password\": \"***\"}",
"team.reddit_target_subreddits": "Entrepreneur,startups,SaaS"
},
"installed_squads": ["community-squad@1.4.0"]
"installed_squads": ["community-squad@1.4.1"]
},
"inputs": { "subreddits": "Entrepreneur,startups,SaaS" },
"dispatch": {
Expand Down
2 changes: 1 addition & 1 deletion squads/community-squad/manifest.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "community-squad",
"version": "1.4.0",
"version": "1.4.1",
"description": "Community squad: reddit-agent grows organic presence on Reddit — monitors subreddits, drafts value comments via the browser, warms up a single purchased account, and reports account health.",
"author": "pancake-official",
"license": "MIT",
Expand Down
7 changes: 7 additions & 0 deletions squads/eng-squad/agents/build-agent/HEARTBEAT.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,13 @@ implementation tickets (`eng.implement_idea` with a concrete `source`) as
they arise. This pulse fires once a day and has exactly one job: **advance
the company's goal on your own initiative.**

**Execution rule (hard).** Act through TOOL CALLS, never narration. If step 1
finds an assigned ticket, CALL claim_next_task and execute it IN THIS TURN —
do not describe what you are about to do and stop. `NO_REPLY` may only ever
be your ENTIRE final message, and only when steps 1–3 genuinely found nothing
to do. Writing NO_REPLY after announcing work terminates the session with the
work undone (this exact failure stranded a live board ticket on 2026-06-12).

1. **Hygiene first (fast).** `claim_next_task` — if a ticket assigned to you
is sitting in `todo` (a missed wake), work it and stop here. Unfinished
in-flight work also beats new initiative: finish before you start — an
Expand Down
5 changes: 4 additions & 1 deletion squads/eng-squad/agents/build-agent/agent.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@
"id": "build-agent",
"description": "Implementation specialist — takes a specified idea, issue, or PRD and ships it end to end: branch, code, tests, and an open PR; self-merges only reversible, CI-green changes.",
"model": "sonnet",
"heartbeat": { "every": "24h" },
"heartbeat": {
"every": "24h",
"model": "sonnet"
},
"skills": [
"agents/build-agent/skills/implement-idea.md"
]
Expand Down
7 changes: 7 additions & 0 deletions squads/eng-squad/agents/triage-agent/HEARTBEAT.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,13 @@ arrive as cofounder-briefed tickets from the scheduled crons. This pulse
fires once a day and has exactly one job: **advance the company's goal on
your own initiative.**

**Execution rule (hard).** Act through TOOL CALLS, never narration. If step 1
finds an assigned ticket, CALL claim_next_task and execute it IN THIS TURN —
do not describe what you are about to do and stop. `NO_REPLY` may only ever
be your ENTIRE final message, and only when steps 1–3 genuinely found nothing
to do. Writing NO_REPLY after announcing work terminates the session with the
work undone (this exact failure stranded a live board ticket on 2026-06-12).

1. **Hygiene first (fast).** `claim_next_task` — if a ticket assigned to you
is sitting in `todo` (a missed wake), work it and stop here. Unfinished
in-flight work also beats new initiative: finish before you start.
Expand Down
5 changes: 4 additions & 1 deletion squads/eng-squad/agents/triage-agent/agent.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@
"id": "triage-agent",
"description": "GitHub issue triage specialist — classifies issues by P0–P3 criticality, labels them, sweeps the backlog daily, and reports issue health weekly.",
"model": "sonnet",
"heartbeat": { "every": "24h" },
"heartbeat": {
"every": "24h",
"model": "sonnet"
},
"skills": [
"agents/triage-agent/skills/triage-playbook.md",
"agents/triage-agent/skills/github-labeling.md"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"description": "Cofounder dispatches an implementation ticket with a concrete source (a specified GitHub issue); build-agent claims, reads team.github_repos from the vault, grounds in the issue + thread, creates a feature branch, implements with tests, verifies lint/build/CI, opens a PR referencing the source — and leaves it open for review because the change touches public API behaviour (not reversible enough to self-merge). Completes with the PR link in the result + digest.",
"setup": {
"vault": { "team.github_repos": "acme/api" },
"installed_squads": ["eng-squad@2.4.0"]
"installed_squads": ["eng-squad@2.4.1"]
},
"inputs": {
"source": "https://github.com/acme/api/issues/162",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"description": "Daily-sweep cron dispatches a repo sweep; triage-agent claims, reads team.github_repos from the vault, lists open issues missing a priority/P* label, classifies and labels three of them (P1, P2, P3) with assessment comments, files the sweep as a routine board record (no notify_channel), and completes with the canonical summary + digest.",
"setup": {
"vault": { "team.github_repos": "acme/api" },
"installed_squads": ["eng-squad@2.4.0"]
"installed_squads": ["eng-squad@2.4.1"]
},
"inputs": { "repo": "acme/api", "since": "2026-06-11" },
"dispatch": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"description": "Cofounder dispatches a single-issue triage; triage-agent claims, fetches issue, labels it P2, files a comment, completes with the canonical result + digest.",
"setup": {
"vault": { "team.github_repos": "acme/api" },
"installed_squads": ["eng-squad@2.4.0"]
"installed_squads": ["eng-squad@2.4.1"]
},
"inputs": { "repo": "acme/api", "issue_number": 142 },
"dispatch": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"description": "Regression: cofounder stamps an INVENTED qualified id (`eng-squad.triage_issue`, dropping the `eng.` namespace) — the same failure mode the 2026-06-11 posthog-squad audit found (posthog-squad.daily_digest instead of posthog-squad.posthog.daily_digest; squad since renamed analytics-squad). This trace MUST fail the runner; if it passes, the workflow-id contract check has regressed.",
"setup": {
"vault": { "team.github_repos": "acme/api" },
"installed_squads": ["eng-squad@2.4.0"]
"installed_squads": ["eng-squad@2.4.1"]
},
"inputs": { "repo": "acme/api", "issue_number": 142 },
"dispatch": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"description": "Weekly-report cron dispatches the issue-health report; triage-agent claims, reads team.github_repos from the vault, gathers the week's stats from GitHub (open vs closed, criticality mix, stale >30d, unlabeled, oldest untriaged), writes the report to the wiki, files it as a digest board record (no notify_channel), and completes with the headline numbers + digest.",
"setup": {
"vault": { "team.github_repos": "acme/api" },
"installed_squads": ["eng-squad@2.4.0"]
"installed_squads": ["eng-squad@2.4.1"]
},
"inputs": { "repo": "acme/api" },
"dispatch": {
Expand Down
2 changes: 1 addition & 1 deletion squads/eng-squad/manifest.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "eng-squad",
"version": "2.4.0",
"version": "2.4.1",
"description": "Engineering squad: triage-agent classifies GitHub issues P0–P3 and reports issue health; build-agent implements specified ideas, issues, and PRDs end to end as reviewable PRs.",
"author": "pancake-official",
"license": "MIT",
Expand Down
7 changes: 7 additions & 0 deletions squads/outreach-squad/agents/outreach-agent/HEARTBEAT.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,13 @@ crons. The reply-latency SLA is carried by the `reply-sweep` cron, and the
this pulse. This pulse fires once a day and has exactly one job: **advance
the company's goal on your own initiative.**

**Execution rule (hard).** Act through TOOL CALLS, never narration. If step 1
finds an assigned ticket, CALL claim_next_task and execute it IN THIS TURN —
do not describe what you are about to do and stop. `NO_REPLY` may only ever
be your ENTIRE final message, and only when steps 1–3 genuinely found nothing
to do. Writing NO_REPLY after announcing work terminates the session with the
work undone (this exact failure stranded a live board ticket on 2026-06-12).

1. **Hygiene first (fast).** `claim_next_task` — if a ticket assigned to you
is sitting in `todo` (a missed wake), work it and stop here. Unfinished
in-flight work also beats new initiative: finish before you start — a
Expand Down
5 changes: 4 additions & 1 deletion squads/outreach-squad/agents/outreach-agent/agent.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,8 @@
"id": "outreach-agent",
"description": "Runs the full outbound loop daily: finds 1-3 leads, advances active sequences, handles replies, and posts a digest. Decides simple vs. advanced mode autonomously based on company stage.",
"model": "sonnet",
"heartbeat": { "every": "24h" }
"heartbeat": {
"every": "24h",
"model": "sonnet"
}
}
Loading
Loading