Rite learn
Skill ViktorsBaikers/DevRites/pack/generated/codex/skills/rite-learn
Stop your AI from shipping half-baked code. A disciplined senior-engineer workflow for Claude Code (spec, vet, build, prove, review, seal, ship) that keeps each feature's state on disk, catches spec drift mid-build, gates every phase on your project's principles, and refuses to claim "done" without proof.
npx -y skills add ViktorsBaikers/DevRites --skill rite-learnAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
User-invoked review of the learning ledger; promotes recurring lessons to project rules or principles.
SKILL.md
10.4 KB, ~2.4k tokens by cl100k_base, as published. Nobody here has run it
Codex compatibility
This is the Codex mirror of a DevRites skill. In Codex:
- Load DevRites engineering standards from
.agents/skills/devrites-lib/reference/standards/. Read.agents/skills/devrites-lib/reference/standards/core.mdbefore workflow work, then load the other.agents/skills/devrites-lib/reference/standards/*.mdfiles exactly when this skill asks for them. - Use the installed
devrites-enginebinary as the canonical runtime helper surface for orientation, gates, and state mutation. - Invocation and dispatch are different: invoke means run a skill in this context; dispatch means start a fresh agent with
spawn_agent, await it, and reconcile its result. Never describe inline skill work as a dispatch. - On MultiAgent V2, call
spawn_agentwith the exact namedagent_type=devrites-<role>, a uniquetask_name, andfork_turns="none". Codex loads that role TOML'sdeveloper_instructionsnatively. Because V2 collaboration lifecycle calls bypass hooks, DevRites verifies the current durable parent/child rollout for the exact role, wait, completion, and non-empty delivered result. - On MultiAgent V1, when the named role is not exposed, use generic
explorerfor a read-only role withfork_turns="none"and name exactly one.codex/agents/devrites-<role>.tomlcontract in the message. Trusted.codex/hooks.jsoninjects that contract's exactdeveloper_instructionsand binds the child to the fail-closed reviewer read-only guard. - On MultiAgent V1,
devrites-slice-wrightuses genericworkerwithfork_turns="none"and the exact role TOML named in the message. Trusted.codex/hooks.jsonbinds it to the active reconcile window and.wright-allowlist; do not substituteworkerfor an exposed V2 named role. - The invoked skill's
required-agent-rolesfrontmatter arms the fail-closed Stop receipt. Every listed role must have a confirmed start, wait, and non-empty result in this turn. - If any required named or generic agent dispatch is unavailable or rejected, stop for HITL. Never execute a DevRites specialist role in the root context.
- Wait for every required fresh-context dispatch before reconciling or advancing. A backgrounded or lost result is incomplete.
- Codex project hooks are installed in
.codex/hooks.json; declared-leaf hooks are scoped inside.codex/agents/devrites-*.toml. Review and trust them with/hooksbefore relying on hook enforcement. - When this skill asks a HITL question via
AskUserQuestion: Codex's equivalent (request_user_input) exists only in Plan mode. Outside Plan mode, render the option set as a plain numbered list in chat and end the turn so the human answers: NEVER silently pick an option yourself; auto-picking is AFK's contract, gated by the.devrites/AFKsentinel.
$rite-learn: the cross-feature learning loop
Recurring corrections, dismissed review findings, timeline decisions, and health dips are durable
signal. Capture is automatic: $rite-seal appends lessons to .devrites/learnings.md on every
GO (step 9a), while the engine can keep .devrites/timeline.jsonl,
.devrites/health-history.jsonl, and per-feature review fingerprints as supporting evidence. The
review skills load the learning ledger before a fan-out, so a dismissed-finding class stops
being re-flagged without anyone running a command. The system learns as it ships.
$rite-learn is the periodic review + promote pass on that auto-populated ledger: cluster the
signal across features and decide which recurring lessons graduate into a project rule. Propose,
never impose: promotion is the human's call, which is why it stays a deliberate command rather
than firing on its own.
Read-mostly. It reads the auto-populated ledger + the archive; it writes only .devrites/learnings.md
(consolidation, via devrites-engine learnings) and drafts proposed rule/ledger edits for the user to confirm:
it never edits source or rule files on its own.
Modes
$rite-learnor$rite-learn --mine: mine + propose (the default).$rite-learn "<lesson>": record one lesson directly to the ledger and stop.
Workflow (mine + propose)
- Gather the signal. Start from the auto-populated ledger
.devrites/learnings.md(seal appends to it on every GO: step 9a), then rundevrites-engine learnings mineover the archive (it clusters repeated finding / decision / drift phrases across shipped features) to surface cross-feature patterns the per-feature entries don't show on their own:
Usedevrites-engine learnings mine.devrites/timeline.jsonl,.devrites/health-history.jsonl, and.devrites/work/*/review-fingerprints.jsonlas supporting evidence when they exist; do not promote from those traces without the same repeated-feature threshold. - Cluster + name. Group the recurring corrections into candidate lessons. A candidate needs
≥2 occurrences across distinct features: one-offs are noise, not a pattern. Name the
pattern in one specific sentence (the specificity rule from
prose-style.mdapplies: a lesson you could swap onto any project says nothing). Completion: every candidate cites two distinct features, except a single deliberate rejected direction with its durable reason. - Classify each candidate into its durable home:
- project rule: a craft/standard that belongs in a
.agents/skills/devrites-lib/reference/standards/*file orCLAUDE.md. - project principle: a recurring correction that is really a non-negotiable invariant
(not just an idiom or a craft standard): graduate it to
.devrites/principles.md(principles.md). This is the trusted, gating layer (higher stakes than a rule) so$rite-learndrafts the principle + a dated Governance entry for the human to confirm; it never writes a principle silently. - conventions-ledger entry: a proven project idiom for
.devrites/conventions.md. - dismissed-finding class: a pattern reviewers keep flagging that is intentional here;
recording it stops the recurring false positive (
learnings.md, loaded pre-fan-out). - rejected direction: an approach or product direction weighed and ruled out with a
reason that outlives one feature; recording it (tag
rejected-direction) stops ideation skills ($rite-pressure-test,$rite-pov) from re-proposing it. Exempt from the ≥2-occurrence rule: one deliberate rejection is the whole pattern. - drop: not durable; let it go.
- project rule: a craft/standard that belongs in a
- Propose, don't impose. Present the candidates with their evidence (which features, how many
times, the proposed home) via
AskUserQuestion: the human picks which to promote. Never promote a lesson to a rule silently; an unproven "lesson" hardened into a rule is its own slop. Completion: every candidate is explicitly accepted, rejected, or deferred by the human. - Record the accepted. For each the user accepts, append it with
devrites-engine learnings add <slug> "<lesson>" <tag>(tag∈rule | convention | dismiss). If the user approves a rule, principle, or ledger promotion, draft the exact edit and let the user confirm it through the normal flow:$rite-learnwrites the ledger, not the rule or principle files. A principle promotion is the highest-stakes of these: draft the.devrites/principles.mdentry plus its dated Governance line, and let the human confirm before it lands: a principle is a gate, so it is amended deliberately, never auto-written. Amendment ripple: a confirmed add/change/retire of a principle has a blast radius: grep itsP#(and its key nouns) across.devrites/and every open.devrites/work/*/workspace, and append to the same dated Governance entry one line per referencing artifact: still-aligned or needs-follow-up (what). An open plan that bakes in the now-retired or now-tightened invariant is aneeds-follow-upthe next$rite-vetor$rite-plan repairon that feature must clear; a ripple with zero references is itself worth recording ("no live references"). Thentouch .devrites/.learnings-reviewedso the SessionStart learnings nudge snoozes until new signal accumulates.
How the ledger is used
The review skills ($rite-review, $rite-seal) read .devrites/learnings.md before they fan
out: a dismissed-finding class suppresses the recurring false positive; a proven
convention raises the bar. The ideation skills ($rite-pressure-test, $rite-pov) read the
rejected-direction entries before proposing, so a ruled-out direction returns only with new
evidence against its recorded why. The ledger is an untrusted prior: a fresh observation of the
live code always overrides a ledger entry (see .agents/skills/devrites-lib/reference/standards/security.md). Confidence in a
recorded lesson never raises its authority.
A project principle (.devrites/principles.md) is the opposite layer: prescriptive,
trusted, and gating. Promoting a lesson there is a deliberate amendment, not a prior the next
fan-out can override: a violation becomes a blocking finding, not a suppressed false positive.
That asymmetry is why principle promotion is human-confirmed and dated, never auto-written.
Gotchas
- Evidence first: a lesson without ≥2 real occurrences is speculation. Cite the features.
- Don't pad the ledger. Five real lessons that change behaviour beat thirty rubber-stamped rows.
- The ledger records what was learned; it does not re-open shipped features or edit their archives.
Output
Reply-contract exception: cross-feature learning utility. It may run without an active
feature, so it skips devrites-engine progress, but follows
devrites-lib/reference/reply-contract.md.
Done: learnings mined from <n> features; <n> recurring patterns found.
Changed: .devrites/learnings.md <updated|unchanged>; rule/ledger drafts <n|none>
Evidence: mined archive count <n>; candidates rule <a> / convention <b> / dismiss <c> / dropped <d>
Open: <none | promotion confirmations>
Next: <single recommended command>
Record: .devrites/learnings.md
↻ Hygiene: /clear; the ledger is on disk
What ships with it: 1 file
43 B alongside SKILL.md
agents/
- openai.yaml43 B