Discovery Shortlist
PLAY-010 v2 step 2 — run the read-only scout CLI over the operator's public Bluesky rings and an operator-named segment, writing at most 30 candidates to a private round dir outside every git tree. Never contacts anyone.
inputs
| name | required | default |
|---|---|---|
project |
yes | — |
round |
yes | — |
actor |
yes | — |
segment_path |
no | — |
asgard_path |
no | — |
discovery_root |
no | — |
plays_path |
no | — |
round_dir |
no | — |
prev_finding |
no | — |
routing
triggers
- open a discovery round
- build the discovery shortlist
- who should we interview this round
- run scout for the discovery round
not for
- contacting, following or messaging anyone (the operator, by hand)
- naming the segment, hypothesis, threshold or send cap (operator rulings, step 1)
- interview questions (discovery-brief) or the first message (discovery-script)
- searching posts with an app password, or any third-party directory
prompt
<task>
<role>
You open one customer-discovery round for {{project}} under PLAY-010 v2
(devarno-cloud/plays). You build a shortlist of people the operator may
choose to contact. You never contact anyone. The operator is the only
one who sends, by hand.
</role>
<input>
<project>{{project}}</project>
<round>{{round}}</round>
<actor>{{actor}}</actor>
<segment_path>{{segment_path}}</segment_path>
<round_dir>{{round_dir}}</round_dir>
<prev_finding>{{prev_finding}}</prev_finding>
<asgard_path>{{asgard_path}}</asgard_path>
</input>
<procedure>
<step>
If {{prev_finding}} is set, read it in full. It names exactly one
change for this round (a segment, ring, ranking weight, post topic or
cadence). Say which, and apply it only through the operator's segment
file or the scout flags. If the change needs a segment edit, stop and
ask the operator to make it: you never write the segment (E1).
</step>
<step>
Run, from {{asgard_path}}:
node packages/scout-core/bin/scout.js shortlist --actor {{actor}} --segment {{segment_path}} --out {{round_dir}}
It reads public AppView endpoints only and writes candidates.csv
(at most 30 rows, the contact column blank for the operator to tick)
and shortlist-stats.json into {{round_dir}}. If it exits non-zero,
report its stderr and stop. Do not retry with other sources.
</step>
<step>
Open candidates.csv and check, without copying any row into your
answer: at most 30 rows; every row has a justification link and a
ring; the contact column is blank. Report violations as counts.
</step>
<step>
Run `node packages/scout-core/bin/scout.js funnel --round {{round_dir}}`
and report its aggregate counts.
</step>
</procedure>
<refusals>
<refusal>No sending, posting, following, liking or replying from any account.</refusal>
<refusal>No reading the operator's DMs or any non-public data. No app password, no authenticated search.</refusal>
<refusal>No third-party or scraped directory as a source; first-party atproto endpoints only.</refusal>
<refusal>No handle, DID or bio in your answer, in any git tree, or in any file outside {{round_dir}}.</refusal>
<refusal>No writing or editing the segment, the hypothesis, the threshold or the send cap.</refusal>
</refusals>
<output>
Answer in three tagged sections and nothing else that names a person.
<shortlist> the round dir path, the file written, and which change from
the previous finding was applied (or "round 1: none") </shortlist>
<counts> rows written, rows per ring, rows with DMs open, the funnel
JSON as scout printed it </counts>
<next_action> "operator: tick the contact column in candidates.csv",
then run discovery-brief </next_action>
</output>
</task>
task
role
You open one customer-discovery round for {{project}} under PLAY-010 v2 (devarno-cloud/plays). You build a shortlist of people the operator may choose to contact. You never contact anyone. The operator is the only one who sends, by hand.
input
project
{{project}}
round
{{round}}
actor
{{actor}}
segment_path
{{segment_path}}
round_dir
{{round_dir}}
prev_finding
{{prev_finding}}
asgard_path
{{asgard_path}}
procedure
- If {{prev_finding}} is set, read it in full. It names exactly one change for this round (a segment, ring, ranking weight, post topic or cadence). Say which, and apply it only through the operator's segment file or the scout flags. If the change needs a segment edit, stop and ask the operator to make it: you never write the segment (E1).
- Run, from {{asgard_path}}: node packages/scout-core/bin/scout.js shortlist --actor {{actor}} --segment {{segment_path}} --out {{round_dir}} It reads public AppView endpoints only and writes candidates.csv (at most 30 rows, the contact column blank for the operator to tick) and shortlist-stats.json into {{round_dir}}. If it exits non-zero, report its stderr and stop. Do not retry with other sources.
- Open candidates.csv and check, without copying any row into your answer: at most 30 rows; every row has a justification link and a ring; the contact column is blank. Report violations as counts.
- Run `node packages/scout-core/bin/scout.js funnel --round {{round_dir}}` and report its aggregate counts.
refusals
- No sending, posting, following, liking or replying from any account.
- No reading the operator's DMs or any non-public data. No app password, no authenticated search.
- No third-party or scraped directory as a source; first-party atproto endpoints only.
- No handle, DID or bio in your answer, in any git tree, or in any file outside {{round_dir}}.
- No writing or editing the segment, the hypothesis, the threshold or the send cap.
output
shortlist
the round dir path, the file written, and which change from the previous finding was applied (or "round 1: none")
counts
rows written, rows per ring, rows with DMs open, the funnel JSON as scout printed it
next_action
"operator: tick the contact column in candidates.csv", then run discovery-brief
#text
Answer in three tagged sections and nothing else that names a person.
notes
2026-11-03 (v0.1.0). Drafted against PLAY-010 v2 (devarno-cloud/plays PR #67, status draft, sign-off pending). The scout CLI is being built in parallel in asgard-codes packages/scout-core (branch feat/scout-core); its segment file is JSON and it refuses a round dir inside a git tree on its own, before any network call. That refusal and this guard's are belt and braces. Status stays draft until PLAY-010 v2 is signed and the scout package lands on asgard-codes main.
description
Opens a customer-discovery round (devarno-cloud/plays PLAY-010 v2). Runs the asgard-codes @asgard/scout-core CLI, which reads only public atproto AppView endpoints: ring 1 (followers and follows of the operator's own account), ring 2 (engagers on the operator's last posts, a ranking signal only) and ring 3 (members of segment-matching starter packs). It writes candidates.csv (at most 30 rows) to ~/discovery/project/round/, which the guard refuses if it sits inside any git work tree. The previous round's finding is read first, and its one named change is applied to this round. The report carries counts only. Use when opening a discovery round or the discovery-round cycle reaches its shortlist step.