Concept Radar Loop
You are the orchestrator that runs one radar cycle end-to-end by driving the
deterministic builderdna radar-cycle state machine. You never invent persistence
or checkpoints: the Python CLI owns every state transition, every hard gate, and
every idempotency rule. You own retrieval (via the specialist skills) and semantic
reduction (paraphrasing source records into validated handoff JSON).
Semantics vs execution: the lifecycle, modes, hard gates, boundaries, and
invariants are defined in concept-radar — this skill only defines the
execution protocol for driving one full cycle. You never write maturity, stage,
or gate results directly; the Python engine computes those. Build only produces
a bounded smallest experiment, never a full product plan; outcome reflow must
support keep / revise / drop, never default to self-confirmation.
Every command below runs as PYTHONPATH=. uv run builderdna <command> … (the
PYTHONPATH=. prefix is the project convention from CLAUDE.md; plain
uv run builderdna … also resolves).
The loop (7 steps)
Start.
builderdna radar-cycle start --radar <name> --mode full --json
(--mode is one of daily | weekly | monthly | full). The JSON response
carries data.run_id and data.next_action.
Read next_action. Its fields are phase, specialist_skill,
required_handoff, budget, completion_command. It is the engine's
instruction for what to do next — never re-derive it yourself.
Load only that specialist skill. When specialist_skill is non-empty,
load exactly that skill and no other:
twitter-learning → produces the x-discovery handoff
reddit-opportunity → produces the reddit-scan handoff
repo-trend → produces the verify and source-audit handoffs
When specialist_skill is "", this is a local phase — perform it yourself
(see "Local phases").
Produce the required handoff JSON. Write a file matching
concepts.handoffs.SourceHandoffEnvelope (schema_version: 1, source_phase,
coverage, coverage_notes, items[]). The envelope's source_phase must
equal the NextAction's required_handoff. Default location:
output/handoffs/<phase>.json.
Import.
builderdna radar-cycle import <run_id> <phase> --file <path> --json.
The engine validates the envelope atomically (one structurally invalid item
rejects the whole handoff with no partial writes), imports records
idempotently, completes the phase, and returns the next next_action in
data.next_action.
Repeat steps 2–5 until the loop reaches decide and then report.
Present. Run builderdna radar-cycle finalize <run_id> --json, then report
the run ID plus data.json_path / data.md_path and stop.
Local phases
When next_action.specialist_skill is "", the phase produces no source handoff.
Handle it directly using the real commands the engine's completion_command names:
| phase |
what you do |
validate |
review the resolved radar config against the run fingerprint, then radar-cycle complete <run_id> validate --json |
reduce |
reduce imported evidence into concept cards via builderdna concept capture, then radar-cycle complete <run_id> reduce --json |
verify |
(source phase — see loop; produces a verify handoff via repo-trend, then import) |
decide |
run builderdna radar-cycle decide <run_id> --json |
experiment |
builderdna radar experiment <CONCEPT_ID> --format fde-gym, then radar-cycle complete <run_id> experiment --json |
calibration |
reconcile stored predictions against outcomes via builderdna concept outcome <ID> --outcome … --lesson …, then radar-cycle complete <run_id> calibration --json |
report |
run builderdna radar-cycle finalize <run_id> --json, then present + stop |
Note: import completes source phases; decide completes decide;
finalize completes report. Local phases (validate, reduce, experiment,
calibration) are completed with builderdna radar-cycle complete <run_id> <phase> --json, which marks the phase done and returns the next next_action
in the same call.
Resume
To continue an interrupted run:
builderdna radar-cycle resume <run_id> --json. It re-checks the config
fingerprint and returns the first incomplete phase (data.next_action). It fails
closed (non-zero exit, ok: false) if the radar config or its referenced Reddit
preset changed since start.
Stopping conditions
Stop and surface the problem — do not fabricate evidence, do not auto-fix — when:
- Authentication failure — a specialist skill cannot authenticate to X, GitHub,
or Reddit. Record that source as
coverage: unavailable (or partial) with
coverage_notes, never substitute another source for it.
- Invalid or corrupt state — any
radar-cycle command returns ok: false for
a missing/invalid radar config, an invalid handoff envelope, a corrupt store, or
a mismatched phase / changed fingerprint. Read the JSON error and exit_code
and stop rather than retrying blindly.
- Ambiguous merge —
builderdna concept capture reports an ambiguous match
(non-zero exit, ok: false, candidates listed). Never auto-merge: ask the user
to disambiguate with --into <ID> or an explicit
builderdna concept merge <keep_id> <merged_id> decision. A suggested match is
never merged automatically.
- External platform mutations — never post, reply, push, open PRs, or write to
FDE-Gym or any external repository. The loop is read-only against platforms and
write-only against local
state/ and output/.
No self-scheduling
This skill runs once per invocation. It does not schedule future runs — no
cron, no launchd, no daemon, no background watcher. A recurring radar loop is a
platform scheduler's job: if the user asks for a recurring schedule, point them at
their scheduler and do not claim the skill can self-schedule.
Reference files
references/orchestration.md — mode → phase → specialist skill → required handoff → completion command
references/run-state.md — what lives on disk and the resume fingerprint rule
1---2name: concept-radar-loop3description: Resumable, command-driven orchestrator for the cross-source concept radar loop. Use when the user wants to run an end-to-end radar cycle over a configured radar ("run the concept radar loop", "使用 concept-radar-loop", "自动跑一遍 … 概念雷达", "resume my radar run", "继续跑概念雷达", "概念雷达循环"), or asks to start, resume, import, decide, or finalize a radar-cycle run. Drives the deterministic `builderdna radar-cycle` state machine (start → import source handoffs → decide → finalize), loading only the specialist skill each NextAction names (twitter-learning / reddit-opportunity / repo-trend). Single-source requests do NOT enter the loop — route them to the specialist skill; recurring-schedule requests route to automation. This skill never schedules future runs (no cron/daemon).4---56# Concept Radar Loop78You are the orchestrator that runs **one radar cycle** end-to-end by driving the9deterministic `builderdna radar-cycle` state machine. You never invent persistence10or checkpoints: the Python CLI owns every state transition, every hard gate, and11every idempotency rule. You own retrieval (via the specialist skills) and semantic12reduction (paraphrasing source records into validated handoff JSON).1314**Semantics vs execution:** the lifecycle, modes, hard gates, boundaries, and15invariants are defined in `concept-radar` — this skill only defines the16*execution protocol* for driving one full cycle. You never write maturity, stage,17or gate results directly; the Python engine computes those. Build only produces18a bounded smallest experiment, never a full product plan; outcome reflow must19support keep / revise / drop, never default to self-confirmation.2021Every command below runs as `PYTHONPATH=. uv run builderdna <command> …` (the22`PYTHONPATH=.` prefix is the project convention from `CLAUDE.md`; plain23`uv run builderdna …` also resolves).2425## The loop (7 steps)26271. **Start.**28 `builderdna radar-cycle start --radar <name> --mode full --json`29 (`--mode` is one of `daily | weekly | monthly | full`). The JSON response30 carries `data.run_id` and `data.next_action`.31322. **Read `next_action`.** Its fields are `phase`, `specialist_skill`,33 `required_handoff`, `budget`, `completion_command`. It is the engine's34 instruction for what to do next — never re-derive it yourself.35363. **Load only that specialist skill.** When `specialist_skill` is non-empty,37 load exactly that skill and no other:38 - `twitter-learning` → produces the `x-discovery` handoff39 - `reddit-opportunity` → produces the `reddit-scan` handoff40 - `repo-trend` → produces the `verify` and `source-audit` handoffs41 When `specialist_skill` is `""`, this is a local phase — perform it yourself42 (see "Local phases").43444. **Produce the required handoff JSON.** Write a file matching45 `concepts.handoffs.SourceHandoffEnvelope` (`schema_version: 1`, `source_phase`,46 `coverage`, `coverage_notes`, `items[]`). The envelope's `source_phase` must47 equal the NextAction's `required_handoff`. Default location:48 `output/handoffs/<phase>.json`.49505. **Import.**51 `builderdna radar-cycle import <run_id> <phase> --file <path> --json`.52 The engine validates the envelope atomically (one structurally invalid item53 rejects the whole handoff with no partial writes), imports records54 idempotently, completes the phase, and returns the next `next_action` in55 `data.next_action`.56576. **Repeat** steps 2–5 until the loop reaches `decide` and then `report`.58597. **Present.** Run `builderdna radar-cycle finalize <run_id> --json`, then report60 the run ID plus `data.json_path` / `data.md_path` and stop.6162## Local phases6364When `next_action.specialist_skill` is `""`, the phase produces no source handoff.65Handle it directly using the real commands the engine's `completion_command` names:6667| phase | what you do |68|----------------|----------------------------------------------------------------------------------------------------------|69| `validate` | review the resolved radar config against the run fingerprint, then `radar-cycle complete <run_id> validate --json` |70| `reduce` | reduce imported evidence into concept cards via `builderdna concept capture`, then `radar-cycle complete <run_id> reduce --json` |71| `verify` | (source phase — see loop; produces a `verify` handoff via `repo-trend`, then `import`) |72| `decide` | run `builderdna radar-cycle decide <run_id> --json` |73| `experiment` | `builderdna radar experiment <CONCEPT_ID> --format fde-gym`, then `radar-cycle complete <run_id> experiment --json` |74| `calibration` | reconcile stored predictions against outcomes via `builderdna concept outcome <ID> --outcome … --lesson …`, then `radar-cycle complete <run_id> calibration --json` |75| `report` | run `builderdna radar-cycle finalize <run_id> --json`, then present + stop |7677Note: `import` completes source phases; `decide` completes `decide`;78`finalize` completes `report`. Local phases (`validate`, `reduce`, `experiment`,79`calibration`) are completed with `builderdna radar-cycle complete <run_id>80<phase> --json`, which marks the phase done and returns the next `next_action`81in the same call.8283## Resume8485To continue an interrupted run:86`builderdna radar-cycle resume <run_id> --json`. It re-checks the config87fingerprint and returns the first incomplete phase (`data.next_action`). It fails88closed (non-zero exit, `ok: false`) if the radar config or its referenced Reddit89preset changed since `start`.9091## Stopping conditions9293Stop and surface the problem — do not fabricate evidence, do not auto-fix — when:9495- **Authentication failure** — a specialist skill cannot authenticate to X, GitHub,96 or Reddit. Record that source as `coverage: unavailable` (or `partial`) with97 `coverage_notes`, never substitute another source for it.98- **Invalid or corrupt state** — any `radar-cycle` command returns `ok: false` for99 a missing/invalid radar config, an invalid handoff envelope, a corrupt store, or100 a mismatched phase / changed fingerprint. Read the JSON `error` and `exit_code`101 and stop rather than retrying blindly.102- **Ambiguous merge** — `builderdna concept capture` reports an ambiguous match103 (non-zero exit, `ok: false`, candidates listed). Never auto-merge: ask the user104 to disambiguate with `--into <ID>` or an explicit105 `builderdna concept merge <keep_id> <merged_id>` decision. A `suggested` match is106 never merged automatically.107- **External platform mutations** — never post, reply, push, open PRs, or write to108 FDE-Gym or any external repository. The loop is read-only against platforms and109 write-only against local `state/` and `output/`.110111## No self-scheduling112113This skill runs once per invocation. It does **not** schedule future runs — no114cron, no launchd, no daemon, no background watcher. A recurring radar loop is a115platform scheduler's job: if the user asks for a recurring schedule, point them at116their scheduler and do not claim the skill can self-schedule.117118## Reference files119120- `references/orchestration.md` — mode → phase → specialist skill → required handoff → completion command121- `references/run-state.md` — what lives on disk and the resume fingerprint rule