| name | hexa-loop |
| description | /hexa-loop [seed] [--adapter=atlas|bench|byte-diff|smoke] [--diverge-only] [--engine mk9|mk10] [--max-rounds N] — canonical HEXA-LOOP, the universal self-evolving loop. ONE loop drains ANY active domain (math · perf · codegen · web) to genuine depletion via a PLUGGABLE verify-adapter. Each round = (1) DISCOVER — mining-style lens divergence + connect convergence saturate (the old /mining auto, now internal) PLUS a `hexa kick`/`hexa drill` breakthrough probe on the ranked candidates (the old mirror-loop 'mining→kick→' step, now internal), (2) 🔌 VERIFY-ADAPTER auto-selected by active-domain kind — atlas (math `hexa atlas register --from-drill`/`hexa verify`) · bench (perf measure — byte-diff IDENTICAL + roofline % (achieved/binding-roof · achieved-peak denominator) + Δ vs baseline) · byte-diff (codegen regen byte-equality) · smoke (web/service liveness assert), (3) ABSORB the verified result into the domain's SSOT — atlas embed (embedded.gen.hexa) · *.bench.md · .verdicts/<slug>/<id>.txt · ledger, (4) feed the verified result as the next-frontier seed, (5) explicit disk checkpoint per round (throttle-resilient · mining 0.5.0 discipline), (6) depletion test → else ScheduleWakeup 1200s rotation to depletion. Guards inherited VERBATIM from mirror-loop — HONEST g63 (drill/verify SKIP/FALSIFIED/🟠/🟡/⚪ rejected, never absorbed), IDEMPOTENT (dedup pre-check skips an already-absorbed result), ACTIVE-DOMAIN ONLY (g58 · reads ~/.sidecar/active-domain · refuse off-domain). Preset shorthands — `--adapter=atlas` ≈ old /mirror-loop · `--diverge-only` ≈ old /mining (discover stage only). Adapter EXTENSION hook — drop `~/.sidecar/loop-adapter/<name>.md` (verify-step + absorb-target schema) to add a custom adapter, mirroring mining's `~/.sidecar/lens/<name>.md`. ABSORBS + RETIRES /mining (discover sub-stage / --diverge-only) and /mirror-loop (--adapter=atlas preset). The `/kick` command is KEPT — it is the `hexa kick`/`hexa drill` CLI-verb wrapper that this discover stage CALLS, not an orchestrator. Defaults — adapter=auto · engine=mk9 · max-rounds=0 (= NO cap · run to genuine depletion, the canonical default; explicit N>0 is an optional safety backstop) · budget=0 (local). Triggers — '/hexa-loop', '헥사 루프', '범용 루프', '자가진화 루프', 'loop any domain', 'universal loop', 'self-evolving loop', '거울방', 'ouroboros 드라이버', 'mining→verify→absorb 회전', 'self-evolve atlas', 'lens 발산', '점잇기', 'diverge only', 'pluggable verify loop'. |
| allowed-tools | Bash, Read, Edit, Write, Skill |
@D hexa_loop := "범용 자가진화 루프 1회전 자동 (discover → 🔌 verify-adapter → absorb → next-seed → rotate) · 고갈시까지 self-continue" :: skill
do = "active-domain only (g58) — /hexa-loop reads ~/.sidecar/active-domain · refuse off-domain with the steer-options line"
do = "each round in strict order — (1) DISCOVER (mining lens divergence + connect convergence saturate-loop AND a hexa kick/hexa drill breakthrough probe on the ranked top-3 candidates) · (2) 🔌 verify-adapter run · (3) absorb verified result into the domain SSOT · (4) feed verified result as next-frontier seed · (5) disk checkpoint · (6) depletion test → real-drained terminate · else ScheduleWakeup 1200s next round"
do = "auto-select the verify-adapter by active-domain kind — atlas (math · hexa atlas register --from-drill / hexa verify) · bench (perf · measure → byte-diff IDENTICAL + roofline % (achieved/binding-roof · achieved-peak denominator) + Δ vs baseline) · byte-diff (codegen · regen byte-equality) · smoke (web/service · liveness assert); honor an explicit --adapter=<name> override"
do = "absorb target follows the adapter — atlas → embedded.gen.hexa fold · bench → *.bench.md · byte-diff → .verdicts//.txt · smoke → ledger; only a terminal verdict is absorbed"
do = "preset shorthands — --adapter=atlas reproduces the old /mirror-loop (math atlas-fold loop) · --diverge-only reproduces the old /mining (discover stage only — lens divergence + connect convergence saturate, NO verify/absorb/seed)"
do = "the discover stage CALLS hexa kick/hexa drill (the kept /kick tool — a CLI-verb wrapper, NOT retired); rank top-3 .mining.tape candidates by impact (lens-novelty + cross-domain coverage + bracket-tag uniqueness) before the kick probe"
do = "adapter extension — load + apply ~/.sidecar/loop-adapter/<name>.md (verify-step + absorb-target schema) identically to a built-in adapter, mirroring mining's ~/.sidecar/lens/<name>.md lens extension"
do = "HONEST verdict gate inherited verbatim from mirror-loop (g63 · d6) — 🔵 formal / 🟢 GATE_CLOSED_MEASURED / 🔴 CLOSED-negative accepted as absorb · 🟠 INCONCLUSIVE / 🟡 citation-only / ⚪ speculation / SKIP / FALSIFIED rejected (no absorb · log to .hexa-loop.log)"
do = "IDEMPOTENT pre-fire dedup inherited verbatim — adapter-appropriate pre-check (atlas: hexa atlas dump --json | jq '.[].id' | grep; bench/byte-diff/smoke: prior verdict/ledger lookup) SKIPS an already-absorbed result (no duplicate fire · log SKIP-DUP)"
do = "default --adapter=auto · default --engine mk9 · default --max-rounds 0 (= NO round cap · run to GENUINE DEPLETION — the canonical default) · default budget 0 (local); an OPTIONAL explicit --max-rounds N (N>0) is a safety backstop that on hit emits 🔄 cap N reached, NOT drained — re-run /hexa-loop and preserves checkpoint; with the default (0) the loop terminates ONLY at real depletion (all axes drained)"
dont = "off-domain hexa-loop (g58 · refuse + steer-options) · skip the active-domain pointer read at Step 0"
dont = "absorb a SKIP / FALSIFIED / 🟠 / 🟡 / ⚪ verdict (d6 honest · g63 honest sweep) · paraphrase or LLM-judge a verdict (g5)"
dont = "retire or shadow the /kick command — discover CALLS it (kick is a hexa CLI-verb tool, not an orchestrator); fire kick on the same seed twice without the idempotent dedup pre-check"
dont = "checkpoint at pipeline end only (mining 0.5.0 — disk write AFTER EACH round so rate-limit / SIGTERM mid-flight preserves state) · skip the round-N disk write before ScheduleWakeup"
dont = "declare drained without ALL axes (0 new leaf AND 0 new edge AND 0 new absorb AND all lenses @depleted) — single-axis exhaustion ≠ drained"
dont = "ScheduleWakeup at < 1200s interval (heartbeat too tight · throttle-risk) · stack > 1 wakeup per invocation · silently impose a finite round cap when the default (depletion) is in effect — ONLY an explicit user --max-rounds N caps; absent that, run to genuine depletion"