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
4 changes: 2 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ Keep these names exactly.
- Thin over complete. Keep the shortest file that still changes behavior. Cut Cursor-only edge-case protocol and forge-specific branches before cutting any rule.
- pstack's voice: terse, declarative, lowercase-friendly, no filler.
- Frontmatter: `name`, one-line `description`. Drop Cursor UI fields (`icon`, `color`, `mode`, `reminder`).
- `p3-mode`, `setup-p3`, `bro`, and every `principle-*` carry `disable-model-invocation: true`. `bro` is a command only the user types. Every other skill stays model-invocable: p3-mode routes to it, and Claude Code's Skill tool refuses flagged skills. Principles stay flagged so their descriptions don't load into every session; skills reach them by reading `../principle-<name>/SKILL.md`, never through the Skill tool.
- `p3-mode`, `setup-p3`, `bro`, `ketchup`, and every `principle-*` carry `disable-model-invocation: true`. `bro` and `ketchup` are commands only the user types. Every other skill stays model-invocable: p3-mode routes to it, and Claude Code's Skill tool refuses flagged skills. Principles stay flagged so their descriptions don't load into every session; skills reach them by reading `../principle-<name>/SKILL.md`, never through the Skill tool.
- Use T3 tool names exactly: `delegate_task`, `task_status`, `watch_pull_request`, `link_pull_request`, `schedule_task`, `t3_thread_launch`, `t3_thread_read`, `t3_thread_search`, `preview_*`, `device_*`.
- Delegation briefs are self-contained. T3 child agents get only the brief, never the parent's context. Say this where pstack says "every brief stands alone".
- Never bullet a Cursor tool into a skill, even as a fallback.
Expand Down Expand Up @@ -76,5 +76,5 @@ Claude Code reads `.claude/skills/` (user `~/.claude/skills/` and project). Code

1. Every step names a T3 mechanism or a vendor-neutral habit. Grep for `Cursor`, `Task tool`, `subagent_type`, `cloud agent`, `.cursor`, `agent-transcripts`, `AskQuestion`, `icon:`, `claude-`, `grok-`, `gpt-`, `/loop`. None may remain.
2. It is shorter than the pstack source unless the T3 rewrite genuinely needs the lines.
3. Frontmatter matches the rules above, and references to other skills resolve to files in this repo. No skill except `p3-mode`, `setup-p3`, `bro`, and `principle-*` carries `disable-model-invocation: true`.
3. Frontmatter matches the rules above, and references to other skills resolve to files in this repo. No skill except `p3-mode`, `setup-p3`, `bro`, `ketchup`, and `principle-*` carries `disable-model-invocation: true`.
4. `scripts/verify-routing.ps1 -StaticOnly` passes.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ powershell -ExecutionPolicy Bypass -File .\install.ps1

## Skills

architect, arena, automate-me, benchmark-checklist, blast-radius, bro, correct, create-verification-skill, figure-it-out, how, interrogate, maintain-verification-skill, make-bot-ui, no-comments, p3-help, p3-status, recall, reflect, setup-p3, show-me-your-work, swarm, tdd, teach, technical-writing, typescript-best-practices, unslop, why.
architect, arena, automate-me, benchmark-checklist, blast-radius, bro, correct, create-verification-skill, figure-it-out, how, interrogate, ketchup, maintain-verification-skill, make-bot-ui, no-comments, p3-help, p3-status, recall, reflect, setup-p3, show-me-your-work, swarm, tdd, teach, technical-writing, typescript-best-practices, unslop, why.

## Principles

Expand Down
2 changes: 1 addition & 1 deletion scripts/verify-routing.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ $repo = Split-Path $PSScriptRoot -Parent
$skillsDir = Join-Path $repo 'skills'
$entryPoints = @('p3-mode', 'setup-p3')
# User-typed commands with no routing role; the model must not invoke them.
$userCommands = @('bro')
$userCommands = @('bro', 'ketchup')
$defaultList = @(
'how', 'why', 'architect', 'swarm', 'arena', 'interrogate', 'unslop', 'no-comments',
'technical-writing', 'benchmark-checklist', 'show-me-your-work', 'figure-it-out', 'tdd'
Expand Down
23 changes: 23 additions & 0 deletions skills/ketchup/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
---
name: ketchup
description: "Catch the user up on everything in this thread since their last message, in plain words. Give each action item an executive summary with enough context to make the call. Use for /ketchup."
disable-model-invocation: true
---

# Ketchup

Catch the user up on everything in this thread since the last message they wrote before `/ketchup`. Completion wakes, schedule ticks, PR watch wakes, and delegated results are not their messages. Write in the plain voice of [`/bro`](../bro/SKILL.md), and skip its restating step. Assume the user remembers their last message and nothing after it. Call each PR, branch, or agent by a name they would know, not by a label you invented during the work. Link a thread as `[title](t3-thread://v1/<threadId>)` with its exact `threadId`.

## Gather what changed

Keep this turn read-only. Collect your own work since that message, results from delegated tasks and launched threads, and messages from anyone else in this thread. Check the current state of each PR, CI run, or agent this thread touched: `gh pr view` for PRs and checks, since `list_thread_pull_requests` lags the forge; `task_status` for delegated tasks; `t3_thread_read` for launched threads. Say which are still running and which you could not check.

An action item is a decision or step only the user can take, such as a product choice, an approval, an irreversible action, or access you lack. Include any still waiting on the user, even one raised before their last message, and any question a launched thread is blocked on (`t3_pending_request_list`). Work you can still do yourself is not an action item.

## Write the reply

Open with one sentence that says how many action items there are, or that there are none. If nothing happened and nothing waits on the user, say so and stop.

Then say what happened, most important first. Give each result and what it means for the user. Skip steps that changed nothing. Name in one line any work left that you can do yourself.

Then give each action item a short executive summary. Cover the decision to make, why it matters now, the options and what each costs, your recommendation, and what happens if the user does not answer. If you do not know a part, say so instead of guessing. Link to the detail when there is one, and write the summary so the user can decide without opening it.
3 changes: 2 additions & 1 deletion skills/p3-help/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ The default answer is `/p3-mode`, which runs most of the others when its steps n
| Understand a change or subsystem, explained plainly | [`/teach`](../teach/SKILL.md) |
| Catch up on their own recent work on a topic | [`/recall`](../recall/SKILL.md) |
| See what needs them right now: waiting threads, failed runs, armed ticks, open PRs | [`/p3-status`](../p3-status/SKILL.md) |
| Catch up on everything in this thread since their last message, with enough context to decide each action item | [`/ketchup`](../ketchup/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) |
Expand Down Expand Up @@ -76,7 +77,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 threads. `/p3-status` reads live T3 state: what waits on the user, what runs, and what wakes are left armed. Resuming one specific thread, delegated task, or branch is the Session pickup playbook.
- `/recall` rebuilds context across recent threads. `/p3-status` reads live T3 state: what waits on the user, what runs, and what wakes are left armed. `/ketchup` covers only this thread since the user's last message. Resuming one specific thread, delegated task, 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 p3-stack:** p3-stack has no `/orchestrate` skill. Orchestrate is a `/p3-mode` playbook.
Expand Down