Skip to content

The pickup — a task prompt you give to Claude

Last updated: 2026-09-17

The pickup is the prompt for a Claude session, scheduled task or routine that collects reports from your Beacon page and works them. Nothing in it belongs to any particular account, so it works for anyone's setup.

  1. Copy the prompt below.
  2. Fill in the four values in the FILL IN block at its top.
  3. Give it to Claude as a scheduled task (in Claude Code, the Scheduled section), or paste it into a session when you want a run now.

The prompt follows the policy in TRIAGE.md, in this folder. For GitHub issues it uses the skill at .claude/skills/beacon-triage/SKILL.md in the Beacon repository, or wherever you copied it (Scripts/beacon-adopt-github.sh copies it into an app's repository).


FILL IN:
  BEACON_PAGE   = <the artifact URL of your Beacon page>
  BEACON_REPO   = <path to your checkout of the Beacon repository, for Triage/TRIAGE.md and the skill>
  CODE_ROOT     = <the folder under which each app's `folder` (from the apps list) is found>
  NOTIFY        = <how to tell the owner when something happened: a chat channel through a
                   connector, an email, or "nowhere"; one message per run, only if something
                   was filed or worked>

You are working Beacon: bug, feature and feedback reports from testers of the apps listed on the Beacon page.

Reports arrive two ways: through the Beacon page, and, for apps that use it, through the native Beacon sheet, which files GitHub issues directly. Your job is to turn the page's reports into GitHub issues wherever an app is tracked in GitHub, so there is ONE queue, and then work that queue.

Testers are never written back to. They submit and carry on. Write every outcome onto the report and onto the issue, so the owner's board shows it and later runs reuse it. A question for a tester is recorded for the owner, never sent.

The policy: BEACON_REPO/Triage/TRIAGE.md. Read it first. Every gate applies as written.
(If the owner has relaxed gate 4, they will have said so here: ______.)

The skill for GitHub issues: BEACON_REPO/.claude/skills/beacon-triage/SKILL.md

Issue format and labels: BEACON_REPO/Sources/BeaconCore/IssueRendering.swift. It defines:
- the fixed headings "What they expected", "What actually happened", "Steps to see it" and "How much this affects them"
- the reporter's words, quoted verbatim, never summarised
- the hidden <!-- beacon-metadata --> JSON block at the end
- the labels beacon, type:<kind>, impact:<impact>, and area:<area> when known
Never set severity when filing.

Each app document in the page's apps collection carries: name, platform, repository (owner/name), folder (relative to CODE_ROOT), and tracker. tracker is one of:
- "github": reports become issues. Parts 1 and 2 apply.
- "board": no GitHub. The report is worked in place from its record, and the whole outcome is written onto it: status, finding, triageNote, fixCommit, triagedAt.

Part 1: file the page's reports (tracker "github")
1. Artifact tool, read_db, db_op query, collection "reports", where [["status","==","new"]]. None → skip to Part 2.
2. For each report, oldest first:
   a. Its app field gives {id, name, repository}. Its context gives version, build, commit, OS, device. If attachmentCount > 0: read_db list collection "reports/<reference>/attachments" with out_dir in your scratchpad. Each document's dataURL is a base64 JPEG. Decode them to .jpg files and look at them.
   b. Read the board first: read_db query reports where [["app.id","==",<id>]]. Compare area, title and words against reports that already carry a finding. On a match: write_db update this report with duplicateOf: <reference> plus that report's status, finding and triageNote; comment on the existing issue ("Also reported by <reporter> on <app> <version> (<build>)"); move on.
   c. Otherwise search the repository: gh issue list --repo <repository> --label beacon --state all --limit 100 --json number,title,labels,body, and compare. On a match: gh issue comment with the full rendered report, reopen the issue if closed, and add the new impact label if higher. No match → gh issue create with the rendered title, body and labels.
   d. Images: commit them to the repository's beacon-attachments branch under .beacon/attachments/<reference>/. Create the branch from the default branch if it is missing. Never commit to a branch anyone builds from. Link the images in the issue under "What they attached".
   e. write_db update reports/<reference> with {"status":"filed","issueNumber":N,"issueURL":"...","issueFiledAt":"<ISO>"}.

Part 2: work the queue
3. For every app with tracker "github": gh issue list --repo <repository> --label beacon --state open --search "-label:triaged -label:needs-info". Work impact:blocked first, then oldest. Work each issue by the skill:
   - Reproduce against the commit in the metadata block.
   - Fix on beacon/<issue>-<slug>.
   - Run the whole suite.
   - Prove the fix by running the app through the steps where feasible.
   - Merge to the default branch (ask the repo which branch that is, never assume) and push.
   - Label and close with a comment naming the commit.
   Feature requests: never build one. Label, route, note what already exists, and leave open for the owner.
   Feedback: label triaged, leave open.
4. Every outcome also goes onto the page report (find it by issueNumber). write_db update with:
   - status: triaging while the report is being worked, then one of auto-fixed, needs-human, needs-info, cannot-reproduce, working-as-intended, expectation-mismatch or triaged
   - finding: {intent, citations, verdict}
   - triageNote: two to four plain sentences for the owner saying what was found and what happens next
   - fixCommit, when there is one
   - triagedAt
5. For every app with tracker "board": query its "new" reports and work each one from its record the same way, writing the same fields onto it.

Part 3: tell the owner, only if something happened
6. If at least one report was filed or one issue worked, send ONE message to NOTIFY: what was filed (links), what was fixed (commits), what waits on a person, and any pattern across reports. Otherwise send nothing.

Never: work on a bug that would not reproduce; change infrastructure, secrets, CI or deployments; write anything to the page except the fields above; post anywhere except the app repositories' issues and NOTIFY.