draft v0.1.0 claude-opus-5-5 pattern · domain

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.

  • discovery
  • play-010
  • bluesky
  • atproto
  • read-only
  • scope:content
  • pattern:loop

inputs

namerequireddefault
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>

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.