Imported from flingjie/builderDNA (
.claude/skills/concept-radar-loop/SKILL.md). Install upstream withnpx skills add flingjie/builderDNA --skill concept-radar-loop. Copyright stays with the author.
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(--modeis one ofdaily | weekly | monthly | full). The JSON response carriesdata.run_idanddata.next_action. -
Read
next_action. Its fields arephase,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_skillis non-empty, load exactly that skill and no other:twitter-learning→ produces thex-discoveryhandoffreddit-opportunity→ produces thereddit-scanhandoffrepo-trend→ produces theverifyandsource-audithandoffs Whenspecialist_skillis"", 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'ssource_phasemust equal the NextAction'srequired_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 nextnext_actionindata.next_action. -
Repeat steps 2–5 until the loop reaches
decideand thenreport. -
Present. Run
builderdna radar-cycle finalize <run_id> --json, then report the run ID plusdata.json_path/data.md_pathand 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(orpartial) withcoverage_notes, never substitute another source for it. - Invalid or corrupt state — any
radar-cyclecommand returnsok: falsefor a missing/invalid radar config, an invalid handoff envelope, a corrupt store, or a mismatched phase / changed fingerprint. Read the JSONerrorandexit_codeand stop rather than retrying blindly. - Ambiguous merge —
builderdna concept capturereports an ambiguous match (non-zero exit,ok: false, candidates listed). Never auto-merge: ask the user to disambiguate with--into <ID>or an explicitbuilderdna concept merge <keep_id> <merged_id>decision. Asuggestedmatch 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/andoutput/.
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 commandreferences/run-state.md— what lives on disk and the resume fingerprint rule