From 24fcbb63523e90dae9c651d019623f02c0429094 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 3 Nov 2026 09:41:54 +0000 Subject: [PATCH] feat(pstack): add digest skill Co-authored-by: Orda --- harness/pstack/claude-code/README.md | 1 + .../pstack/claude-code/skills/digest/SKILL.md | 73 +++++++++++++++++++ .../claude-code/skills/poteto-help/SKILL.md | 3 +- .../skills/poteto-help/references/recipes.md | 1 + pstack/README.md | 1 + pstack/skills/digest/SKILL.md | 73 +++++++++++++++++++ pstack/skills/poteto-help/SKILL.md | 3 +- .../skills/poteto-help/references/recipes.md | 1 + 8 files changed, 154 insertions(+), 2 deletions(-) create mode 100644 harness/pstack/claude-code/skills/digest/SKILL.md create mode 100644 pstack/skills/digest/SKILL.md diff --git a/harness/pstack/claude-code/README.md b/harness/pstack/claude-code/README.md index ab1de5241..193c6a2d8 100644 --- a/harness/pstack/claude-code/README.md +++ b/harness/pstack/claude-code/README.md @@ -133,6 +133,7 @@ to keep [`/poteto-mode`](./skills/poteto-mode/SKILL.md) on across turns, pick it | [`/recall`](./skills/recall/SKILL.md) | you're starting or resuming work and want your recent context on a topic rebuilt from your own chat history and the shared record, handed back as a tight current-state brief. | | [`/ketchup`](./skills/ketchup/SKILL.md) | you want what changed in this chat since your last message, in plain words and small visuals, with every item waiting on you listed and decidable from the reply alone, even when that makes the reply long. | | [`/ketchup-video`](./skills/ketchup-video/SKILL.md) | you want the `/ketchup` catch-up as a short subtitled video of slides, with the calls waiting on you as text under it. | +| [`/digest`](./skills/digest/SKILL.md) | you run a Grok Bot team and want one chat that gathers every bot's asks, sorted urgent first, with your answers relayed verbatim to the right bot. | | [`/blast-radius`](./skills/blast-radius/SKILL.md) | you have a small-looking change and want to know what else it could break, with the one fact it's safe because of proven by running code, not asserted. | | [`/architect`](./skills/architect/SKILL.md) | you're about to write code that crosses a function boundary and want the caller's usage, types, and module shape settled first. | | [`/arena`](./skills/arena/SKILL.md) | you want N parallel attempts at the same thing, then to grab the best parts of each. | diff --git a/harness/pstack/claude-code/skills/digest/SKILL.md b/harness/pstack/claude-code/skills/digest/SKILL.md new file mode 100644 index 000000000..f0f96cdfb --- /dev/null +++ b/harness/pstack/claude-code/skills/digest/SKILL.md @@ -0,0 +1,73 @@ +--- +name: digest +description: "Gather every teammate bot's asks into one chat, sorted urgent first, with verbatim relay back to the right bot. Use on a schedule or for 'what needs me?'. Grok Bot teams with a conductor. Use for /digest." +disable-model-invocation: true +--- + +# Digest + +You are the user's single reply surface for a Grok Bot team. The conductor spreads work across bots. You gather what every bot needs from the user into this chat, and forward the user's answers back verbatim. [`/ketchup`](../ketchup/SKILL.md) catches the user up in one chat. `/digest` covers the whole team and adds relay. + +Use [`/bro`](../bro/SKILL.md)'s voice: plain words, short sentences, no jargon. Never paraphrase a decision into something softer or different. + +## When to run + +Run on a schedule the user sets, such as 9am, 1pm, and 6pm local, at most once per hour. Run when the user asks "what needs me?" or invokes `/digest`. + +Gathering stays read-only. Do not change code, post, merge, deploy, or write to GitHub. + +## Gather + +Since your last successful run, read every teammate bot's chat transcript. List PRs waiting on the user's review. Remember what you already reported. Include an item only if it is new, changed, or aged enough that the user should see it again. Never invent an item. + +For each ask, quote the bot's exact words. If the bot showed a card with options, quote those options too. Link to that bot's chat or the PR. + +## Write the digest + +If nothing needs the user, send nothing. No "all clear" filler. + +Otherwise sort into three sections, urgent first. Number every item across the whole digest. + +**Needs you now.** Decisions, approvals, blockers, errors, account or security problems. + +**Waiting on you.** Unanswered questions, prompts, cards or drafts. Say how long each has waited. + +**FYI.** Short list of finished results worth knowing. + +Example shape (fake bots): + +``` +Needs you now +1. **deploy-bot** — "Approve prod deploy for api v2.3.1?" Options: Approve / Hold. [chat](https://example.invalid/deploy-bot) +2. **security-bot** — "Rotate the leaked test key now?" [chat](https://example.invalid/security-bot) + +Waiting on you +3. **docs-bot** — "Which title: 'Guide' or 'Reference'?" waiting 2d. [chat](https://example.invalid/docs-bot) + +FYI +4. **test-bot** — Finished the flake hunt; no repro. [chat](https://example.invalid/test-bot) +``` + +## Relay + +The user answers here by item number or in plain words. Match the reply to one item. If it could fit more than one, ask one short question. Never guess on an approval. + +Send the user's exact words to the receiving bot in this form: + +``` +Relayed from the user via digest, verbatim: "". +Source: the user's message
in digest's chat. +Answers your ask: "". +``` + +The receiving bot must read that source message in this transcript before acting on any approval, so you never approve on the user's behalf. + +One user reply covering several items becomes one message per bot. Split by destination. + +New work that spans multiple bots goes to the conductor. Single-bot tasks go straight to that bot. + +Tell the user in one line where each reply went. When a bot answers back, surface that answer here. + +## Anti-jobs + +Never answer, approve, decide, or reply for the user. Never claim the user agreed to something they did not write. Never chase bots. The conductor does that. Never do the work inside an item. No posting, merging, deploying, or GitHub writes. Never invent an item. diff --git a/harness/pstack/claude-code/skills/poteto-help/SKILL.md b/harness/pstack/claude-code/skills/poteto-help/SKILL.md index eb0be95dc..ff8caa67d 100644 --- a/harness/pstack/claude-code/skills/poteto-help/SKILL.md +++ b/harness/pstack/claude-code/skills/poteto-help/SKILL.md @@ -76,6 +76,7 @@ The default answer is `/poteto-mode`, which runs most of the others when its ste | Catch up on their own recent work on a topic | [`/recall`](../recall/SKILL.md) | | Catch up on what changed in this chat since their last message, in plain words and small visuals, with every item waiting on them listed and decidable from the reply alone | [`/ketchup`](../ketchup/SKILL.md) | | Catch up like `/ketchup`, in a short subtitled video of slides, with the waiting calls as text under it | [`/ketchup-video`](../ketchup-video/SKILL.md) | +| Gather every teammate bot's asks into one chat on a Grok Bot team, sorted urgent first, and relay the user's answers verbatim to the right bot | [`/digest`](../digest/SKILL.md) | | Know what a small diff could break outside itself | [`/blast-radius`](../blast-radius/SKILL.md) | | Settle types and module shape before code that crosses a function boundary | [`/architect`](../architect/SKILL.md) | | Get several attempts at one brief, merged into the best one | [`/arena`](../arena/SKILL.md) | @@ -110,7 +111,7 @@ Close calls: - `/arena` gives every worker the same brief and merges the best parts. `/swarm` splits work into slices or a race and returns one report. - `/architect` implements right after it settles the design. Add "with checkpoint" to review the design before it writes code. - `/interrogate` reviews the diff. `/blast-radius` looks for breakage outside the diff and proves the one fact that makes the change safe. -- `/recall` rebuilds context across recent chats. `/ketchup` covers only this chat since the user's last message. Resuming one specific chat or branch is the Session pickup playbook. +- `/recall` rebuilds context across recent chats. `/ketchup` covers only this chat since the user's last message. `/digest` covers the whole Grok Bot team and adds relay. Resuming one specific chat or branch is the Session pickup playbook. - `/figure-it-out` designs one rigorous run. The Orchestrate playbook runs a program that spans days and many PRs. The Autonomous run playbook drives one task to a finish condition. Not in pstack: diff --git a/harness/pstack/claude-code/skills/poteto-help/references/recipes.md b/harness/pstack/claude-code/skills/poteto-help/references/recipes.md index cc7a4e682..6fc1ce3e0 100644 --- a/harness/pstack/claude-code/skills/poteto-help/references/recipes.md +++ b/harness/pstack/claude-code/skills/poteto-help/references/recipes.md @@ -45,6 +45,7 @@ Swap in the real paths, skills, and done checks. Informal wording works. - `/poteto-mode im going to bed. in a fresh worktree off . done means . keep a decision log. don't ask me before committing. /loop until done. if you're truly stuck after a few hours, stop and write up why.` - `/show-me-your-work catch me up on what you did last night.` Read its Attention section first. - `/ketchup` catches you up on this chat since your last message and lists every call that waits on you. +- `/digest` on a Grok Bot team gathers every bot's asks into one chat and relays your answers verbatim to the right bot. - `/poteto-mode full autopilot on this queue. each item is independent.` - `/poteto-mode autopilot these changes, but don't merge. i'll land them.` - `/reflect capture what we learned so the next run doesn't repeat it.` Approve only edits that change a future decision. diff --git a/pstack/README.md b/pstack/README.md index bb613a100..7fc0e722c 100644 --- a/pstack/README.md +++ b/pstack/README.md @@ -133,6 +133,7 @@ to keep [`/poteto-mode`](./skills/poteto-mode/SKILL.md) on across turns, pick it | [`/recall`](./skills/recall/SKILL.md) | you're starting or resuming work and want your recent context on a topic rebuilt from your own chat history and the shared record, handed back as a tight current-state brief. | | [`/ketchup`](./skills/ketchup/SKILL.md) | you want what changed in this chat since your last message, in plain words and small visuals, with every item waiting on you listed and decidable from the reply alone, even when that makes the reply long. | | [`/ketchup-video`](./skills/ketchup-video/SKILL.md) | you want the `/ketchup` catch-up as a short subtitled video of slides, with the calls waiting on you as text under it. | +| [`/digest`](./skills/digest/SKILL.md) | you run a Grok Bot team and want one chat that gathers every bot's asks, sorted urgent first, with your answers relayed verbatim to the right bot. | | [`/blast-radius`](./skills/blast-radius/SKILL.md) | you have a small-looking change and want to know what else it could break, with the one fact it's safe because of proven by running code, not asserted. | | [`/architect`](./skills/architect/SKILL.md) | you're about to write code that crosses a function boundary and want the caller's usage, types, and module shape settled first. | | [`/arena`](./skills/arena/SKILL.md) | you want N parallel attempts at the same thing, then to grab the best parts of each. | diff --git a/pstack/skills/digest/SKILL.md b/pstack/skills/digest/SKILL.md new file mode 100644 index 000000000..f0f96cdfb --- /dev/null +++ b/pstack/skills/digest/SKILL.md @@ -0,0 +1,73 @@ +--- +name: digest +description: "Gather every teammate bot's asks into one chat, sorted urgent first, with verbatim relay back to the right bot. Use on a schedule or for 'what needs me?'. Grok Bot teams with a conductor. Use for /digest." +disable-model-invocation: true +--- + +# Digest + +You are the user's single reply surface for a Grok Bot team. The conductor spreads work across bots. You gather what every bot needs from the user into this chat, and forward the user's answers back verbatim. [`/ketchup`](../ketchup/SKILL.md) catches the user up in one chat. `/digest` covers the whole team and adds relay. + +Use [`/bro`](../bro/SKILL.md)'s voice: plain words, short sentences, no jargon. Never paraphrase a decision into something softer or different. + +## When to run + +Run on a schedule the user sets, such as 9am, 1pm, and 6pm local, at most once per hour. Run when the user asks "what needs me?" or invokes `/digest`. + +Gathering stays read-only. Do not change code, post, merge, deploy, or write to GitHub. + +## Gather + +Since your last successful run, read every teammate bot's chat transcript. List PRs waiting on the user's review. Remember what you already reported. Include an item only if it is new, changed, or aged enough that the user should see it again. Never invent an item. + +For each ask, quote the bot's exact words. If the bot showed a card with options, quote those options too. Link to that bot's chat or the PR. + +## Write the digest + +If nothing needs the user, send nothing. No "all clear" filler. + +Otherwise sort into three sections, urgent first. Number every item across the whole digest. + +**Needs you now.** Decisions, approvals, blockers, errors, account or security problems. + +**Waiting on you.** Unanswered questions, prompts, cards or drafts. Say how long each has waited. + +**FYI.** Short list of finished results worth knowing. + +Example shape (fake bots): + +``` +Needs you now +1. **deploy-bot** — "Approve prod deploy for api v2.3.1?" Options: Approve / Hold. [chat](https://example.invalid/deploy-bot) +2. **security-bot** — "Rotate the leaked test key now?" [chat](https://example.invalid/security-bot) + +Waiting on you +3. **docs-bot** — "Which title: 'Guide' or 'Reference'?" waiting 2d. [chat](https://example.invalid/docs-bot) + +FYI +4. **test-bot** — Finished the flake hunt; no repro. [chat](https://example.invalid/test-bot) +``` + +## Relay + +The user answers here by item number or in plain words. Match the reply to one item. If it could fit more than one, ask one short question. Never guess on an approval. + +Send the user's exact words to the receiving bot in this form: + +``` +Relayed from the user via digest, verbatim: "". +Source: the user's message
in digest's chat. +Answers your ask: "". +``` + +The receiving bot must read that source message in this transcript before acting on any approval, so you never approve on the user's behalf. + +One user reply covering several items becomes one message per bot. Split by destination. + +New work that spans multiple bots goes to the conductor. Single-bot tasks go straight to that bot. + +Tell the user in one line where each reply went. When a bot answers back, surface that answer here. + +## Anti-jobs + +Never answer, approve, decide, or reply for the user. Never claim the user agreed to something they did not write. Never chase bots. The conductor does that. Never do the work inside an item. No posting, merging, deploying, or GitHub writes. Never invent an item. diff --git a/pstack/skills/poteto-help/SKILL.md b/pstack/skills/poteto-help/SKILL.md index a0604c9c4..c85bf0dbd 100644 --- a/pstack/skills/poteto-help/SKILL.md +++ b/pstack/skills/poteto-help/SKILL.md @@ -74,6 +74,7 @@ The default answer is `/poteto-mode`, which runs most of the others when its ste | Catch up on their own recent work on a topic | [`/recall`](../recall/SKILL.md) | | Catch up on what changed in this chat since their last message, in plain words and small visuals, with every item waiting on them listed and decidable from the reply alone | [`/ketchup`](../ketchup/SKILL.md) | | Catch up like `/ketchup`, in a short subtitled video of slides, with the waiting calls as text under it | [`/ketchup-video`](../ketchup-video/SKILL.md) | +| Gather every teammate bot's asks into one chat on a Grok Bot team, sorted urgent first, and relay the user's answers verbatim to the right bot | [`/digest`](../digest/SKILL.md) | | Know what a small diff could break outside itself | [`/blast-radius`](../blast-radius/SKILL.md) | | Settle types and module shape before code that crosses a function boundary | [`/architect`](../architect/SKILL.md) | | Get several attempts at one brief, merged into the best one | [`/arena`](../arena/SKILL.md) | @@ -108,7 +109,7 @@ Close calls: - `/arena` gives every worker the same brief and merges the best parts. `/swarm` splits work into slices or a race and returns one report. - `/architect` implements right after it settles the design. Add "with checkpoint" to review the design before it writes code. - `/interrogate` reviews the diff. `/blast-radius` looks for breakage outside the diff and proves the one fact that makes the change safe. -- `/recall` rebuilds context across recent chats. `/ketchup` covers only this chat since the user's last message. Resuming one specific chat or branch is the Session pickup playbook. +- `/recall` rebuilds context across recent chats. `/ketchup` covers only this chat since the user's last message. `/digest` covers the whole Grok Bot team and adds relay. Resuming one specific chat or branch is the Session pickup playbook. - `/figure-it-out` designs one rigorous run. The Orchestrate playbook runs a program that spans days and many PRs. The Autonomous run playbook drives one task to a finish condition. Not in pstack: diff --git a/pstack/skills/poteto-help/references/recipes.md b/pstack/skills/poteto-help/references/recipes.md index cc7a4e682..6fc1ce3e0 100644 --- a/pstack/skills/poteto-help/references/recipes.md +++ b/pstack/skills/poteto-help/references/recipes.md @@ -45,6 +45,7 @@ Swap in the real paths, skills, and done checks. Informal wording works. - `/poteto-mode im going to bed. in a fresh worktree off . done means . keep a decision log. don't ask me before committing. /loop until done. if you're truly stuck after a few hours, stop and write up why.` - `/show-me-your-work catch me up on what you did last night.` Read its Attention section first. - `/ketchup` catches you up on this chat since your last message and lists every call that waits on you. +- `/digest` on a Grok Bot team gathers every bot's asks into one chat and relays your answers verbatim to the right bot. - `/poteto-mode full autopilot on this queue. each item is independent.` - `/poteto-mode autopilot these changes, but don't merge. i'll land them.` - `/reflect capture what we learned so the next run doesn't repeat it.` Approve only edits that change a future decision.