day8
@day8 Organization
Public Skills
re-frame2-improver
by day8
Focused critique-mode for existing re-frame2 ClojureScript code: reviews source files (or a supplied snippet) against a small catalogue of re-frame2 anti-patterns, surfaces concrete findings cross-linked to canonical idioms, and may suggest inline fixes. Do not use for greenfield bootstrap, authoring new code, live-runtime work, retro on a pair session, migrating a re-frame v1.x codebase, porting Reagent views to Fresco (a migration ask even on an already-re-frame2 app), touring the Xray devtools panel, porting re-frame2 itself, spec/architecture discussion, or inline mid-edit interruption. Activates only on explicit pull — "review my re-frame2 code for anti-patterns", "audit this against re-frame2 best practices", "spot any anti-patterns in cart/handlers.cljs" — and a body of re-frame2 source must be in scope: read or edited in this conversation, supplied as a snippet, or named as a resolvable .cljs / .cljc file or directory. Vocabulary alone is not enough.
re-frame2-pair-retro
by day8
Retrospect on a re-frame2-pair session and turn it into prioritised improvement ideas for the pair skill, preload runtime, MCP surface, or upstream re-frame2 Tool-Pair contract; optionally drafts a GitHub issue the user can file. Not for ordinary re-frame2-pair operation, nor for the code/spec/framework work the body's routing matrix sends elsewhere. Requires evidence: a concrete re-frame2-pair session in this conversation (turns where the user attached, dispatched, walked traces/epochs, hot-swapped, or time-travelled), or a user-supplied recap — vocabulary alone ("retro", "what went wrong", "any improvements?") does not justify activation. Two triggers: (a) explicit pull — "retro on this pair session", "review my re-frame2-pair session", "draft an issue about that"; or (b) post-error inside a pair session — after a stack trace, a pair tool returning {:ok? false :reason :error-kind}, or an :rf.error/ or :rf.epoch/restore- trace during live pair work.
re-frame2-xray
by day8
Question-first tour of Xray, the re-frame2 devtools panel: how to launch it (inline in-app panel; the open-overlay! fallback for hosts with no [data-rf-xray-host] layout column; pop-out window; programmatic mount; the wired hotkeys), which of its two modes (Dynamic event-spine / Static registry browse) applies, and what each tab is for. Do not use when the user asks the AGENT to inspect or change their running app, read-only included (read a sub, snapshot state, walk traces, dispatch) — that is re-frame2-pair, the agent-facing runtime companion. Nor for authoring the host app (re-frame2), bootstrapping a project (re-frame2-setup), or implementing Xray itself (no implementor skill exists — the spec is the answer). Trigger phrases: "open Xray", "which Xray panel shows…", "Xray Static mode", "browse registered machines/routes/schemas", "Xray overlay", "Xray machine inspector", "Xray Graph / Resources / Frames / Fresco tab", "why did this boundary re-render".
re-frame2-pair
by day8
Pair-program against a running re-frame2 application via its Tool-Pair contract — attach to a live shadow-cljs nREPL, inspect a frame's app-db, dispatch events, hot-swap handlers, read the trace stream and per-frame epoch history, time-travel with restore-epoch, and replay a retained epoch strictly with replay-epoch. Use when the user is operating on (or wants to operate on) a live runtime they have running locally. Do not use for static spec reading, architecture questions, design discussion, or ordinary source edits when no runtime is involved — those belong to skills/re-frame2/ (authoring) or direct spec reading. See references/vocabulary.md for the surface glossary; vocabulary matches alone do not justify activation.
re-frame2
by day8
Writes re-frame2 ClojureScript application code — events, subscriptions, effects, flows, frames, state machines (reg-machine, parallel regions, tags, spawn), schemas, stories, routing, tests, and the canonical patterns (RemoteData, Resources, Forms, Boot, WebSocket, NineStates, ManagedHTTP, AsyncEffect, StaleDetection, FormAction). Authoring only. Do not use for: live-app inspection (re-frame2-pair), greenfield bootstrap (re-frame2-setup), v1→v2 migration (re-frame-migration), porting Reagent views onto Fresco (reagent-migration), or porting re-frame2 itself (re-frame2-implementor). Use whenever the user mentions re-frame2, reg-event, reg-sub, reg-fx, reg-cofx, reg-flow, reg-view, reg-machine, reg-route, reg-resource, reg-mutation, dispatch, subscribe, app-db, flows, frames, regions, tags, the nine UI states, managed HTTP, RemoteData lifecycles, cached server-state / query-cache / TanStack-Query shapes, or tests for a re-frame2 app — even when re-frame2 is not named explicitly.
re-frame2-setup
by day8
Greenfield-only bootstrap for re-frame2 ClojureScript projects. Scope: brand-new apps from nothing, or empty CLJS projects (shadow-cljs / Clojure already present but zero re-frame2 wiring). Writes the canonical twelve-file counter SPA the generator template emits — core + the Reagent adapter, shadow-cljs.edn, the entry namespace with rf/init!, events / subs / views — then installs, compiles, serves it and reports the URL, exiting once the counter mounts. Do not use for writing app code on an already-bootstrapped project (use re-frame2), v1→v2 migration (re-frame-migration), live-app inspection (re-frame2-pair), or porting re-frame2 itself (re-frame2-implementor); the full disqualifier list is skills/README.md §Skill routing. Trigger on "start a re-frame2 project", "scaffold re-frame2", "hello-world re-frame2 app", or a build failure on a freshly-scaffolded project that traces to missing re-frame.core / re-frame.adapter.reagent wiring.
reagent-migration
by day8
Rewrites Reagent VIEW code into Fresco (re-frame.fresco, alias h) — re-frame2's re-frame-native view layer: a view becomes an h/defview mounted in brackets, @(subscribe …) becomes (h/sub …), handlers become event vectors, Form-2/Form-3 state moves out of the component. First establish whether the user needs Fresco: re-frame2's Reagent adapter is first-class and supported, so a v1 app keeps its view code and needs NO rewrite to land on re-frame2 — that is re-frame-migration, and it finishes the job. This is an OPTIONAL second step, and Fresco is pre-publication with no released Maven coordinate. Do not use for: the v1→v2 events/subs/db migration (re-frame-migration), writing new re-frame2 code (re-frame2), greenfield setup (re-frame2-setup), or live-runtime inspection (re-frame2-pair). Trigger on "migrate my Reagent views to Fresco", "port this component to h/defview", or a Reagent view surface (r/atom, @(subscribe …) in a view) named in a Fresco context.
re-frame-migration
by day8
Migrates an existing re-frame v1.x ClojureScript codebase to re-frame2. Swaps the artefact coord (re-frame/re-frame → day8/re-frame2 + a substrate adapter), applies the mechanical (Type A) rewrites from MIGRATION.md automatically, and flags the judgment-call (Type B) call sites for human review before touching them. Do not use for: greenfield bootstrap, writing v2 application code, live v2-app inspection, static critique, devtools tours, or porting re-frame2 itself — see the full routing table in skills/README.md §Skill routing for the right sibling skill. Trigger on phrasing like "migrate to re-frame2", "upgrade re-frame", "v1 to v2", "what breaks under re-frame2", or any prompt referencing a v1 surface (re-frame.db, dispatch-with, reg-global-interceptor, reg-sub-raw, ^:flush-dom, re-frame.alpha, re-frame-test, old top-level :dispatch / :dispatch-n effect-map keys), or a v1 add-on library (http-fx / :http-xhrio, async-flow-fx / :async-flow).
re-frame2-implementor
by day8
Guides an engineer building a NEW re-frame2 implementation in one of the eight in-scope JS-cross-compile-to-React+VDOM host languages — ClojureScript (the reference), TypeScript, Melange/ReScript/Reason, F# (Fable), Squint, Scala.js, PureScript, Kotlin/JS — over a two-phase workflow (record the port profile, then one EP loop driven by the pinned spec and live conformance fixtures, with the conformance corpus as the acceptance test). Do not use for: writing apps on the CLJS reference (re-frame2), greenfield bootstrap (re-frame2-setup), v1→v2 migration (re-frame-migration), live-app inspection (re-frame2-pair), or an out-of-scope target — a non-React substrate (Vue, Solid, Svelte, vanilla DOM) or a host that does not cross-compile to JS (Python, Ruby, native Rust, Go, server-side JVM): out of scope by deliberate spec choice, so surface the spec/000-Vision.md scope footnote and stop. Trigger on "port re-frame2", "implement re-frame2 in a language", "conformance corpus".
re-frame-pair
by day8
Pair-program with a live re-frame application via shadow-cljs nREPL. Inspect app-db, dispatch events, hot-swap handlers, trace dispatches, read epoch data, time-travel, and perform post-mortems without source edits when probing. Use whenever the user asks about their running re-frame app or mentions: re-frame, app-db, dispatch, subscribe, reg-event, reg-sub, reg-fx, epoch, interceptor, re-frame-10x, re-com, shadow-cljs.