Use when a repeated learning, mistake, or successful pattern should be turned into a new rule or skill. Also use after completing a task to capture learnings from the work.
Scanned 9/2/2026
Install to Claude Code
npx -y skills add event4u-app/agent-config --skill learning-to-rule-or-skill --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Learning To Rule Or Skill?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/event4u-app-learning-to-rule-or-skill-agent-config)More formats (shields.io, HTML) on the badges page.
---
model_tier: inherit
name: learning-to-rule-or-skill
description: "Use when a repeated learning, mistake, or successful pattern should be turned into a new rule or skill. Also use after completing a task to capture learnings from the work."
source: project
domain: process
scope:
write: []
verification_reason: "execution.handler is internal, so this skill spawns no subprocess — writes happen through the agent's declared allowed_tools. No command can prove a scope the skill never executes."
execution:
type: assisted
handler: internal
allowed_tools: []
workspaces:
- agent-config-maintainer
packs:
- meta
---
# learning-to-rule-or-skill
## When to use
Use this skill when:
* A repeated mistake appears across multiple tasks
* A successful pattern should be reused in the future
* A new constraint or workflow should be captured permanently
* Reviewing post-task learnings or retrospectives
* Deciding whether a learning belongs in a rule or a skill
* After completing a task — reflecting on what worked or caused friction
* Mining the audit log (`agents/runtime/state/audit/<YYYY-MM>.jsonl`,
[`audit-log-v1`](../../../docs/contracts/audit-log-v1.md)) surfaced
a repeated phase pattern via
[`extract_audit_patterns.ts`](../../../scripts/extract_audit_patterns.ts)
— the pattern's `count` ≥ 2 already satisfies the repetition gate
* A comparative analysis handed over a **`### SEED —` block** from its
`## Seeds` section ([`/analyze:reference-repo`](../../agent-src/commands/analyze/reference-repo.md)
§ 6). This is an accepted intake shape: the block already carries the
proposed name, kind, target template, one-line description, and the
`Extends instead?` answer, so step 4's overlap search starts from a stated
candidate rather than a blank page — it does **not** skip that search, and a
seed whose `Extends instead?` line is missing is incomplete intake, not a
shortcut. The repetition gate is satisfied differently here: the evidence is
the anchored ADOPT/ADAPT verdict behind the seed rather than a recurrence
count — a mechanism confirmed once against a named own-repo defect is not the
one-off case the gate exists to filter.
Do not use this skill when:
* The learning is one-off and unlikely to repeat
* The issue is too vague to turn into guidance
* The content already exists in an equivalent rule or skill
## Goal
* Turn repeated learnings into reusable project guidance
* Decide correctly between rule, skill, or update to an existing one
* Prevent the same mistakes from happening again
* Keep the system small, clear, and non-duplicative
## Preconditions
* A concrete learning, mistake, or successful pattern exists
* The learning can be stated clearly in one or two sentences
* Existing rules and skills can be checked for overlap
## Decision matrix
| If the learning is... | Then... | Action |
|---|---|---|
| An always-true constraint ("never X", "always Y") | **Rule** | Create/update rule |
| A repeatable workflow with steps and validation | **Skill** | Create/update skill |
| A coding convention or reference material | **Guideline** | Create/update guideline |
| A reusable **fix/refactor recipe** for a specific problem (problem → before → after → verification) | **Pattern** | Create/update `src/patterns/<slug>.md` (see [`src/patterns/README.md`](../../patterns/README.md)) |
| Baseline model knowledge or standard tool usage | **Nothing** | Do not create anything |
| A refinement of existing guidance | **Update** | Extend the existing file |
### Decision hints
* Same issue appeared at least twice → strongly consider codifying
* One-off or too narrow → do not create anything yet
* Standard tool knowledge (jq, docker, git basics) → **Nothing** — the model knows this
* If unsure between skill and guideline: does it need step-by-step decisions? → Skill. Just conventions? → Guideline
* If unsure between guideline and pattern: is it *"how to write code in X"* (prose convention)? → Guideline. Is it *"I have problem P — here's the proven recipe + a verification step + how reliable it is"*? → **Pattern**
* When a related workflow fires, **surface** a matching `src/patterns/` recipe (never auto-apply) — the human decides whether to use it
## Procedure
### 0. Promotion Gate (mandatory)
Before proceeding, the learning MUST pass all gates:
| Gate | Question |
|---|---|
| Repetition | Occurred 2+ times OR clearly generalizable? |
| Impact | Improves correctness, reliability, or consistency? |
| Failure pattern | Prevents a real, observed failure? |
| Non-duplication | No existing rule/skill/guideline/command covers this? **Verify via § 4 search protocol — a negative grep alone is not proof.** |
| Scope fit | Fits rule, skill, or guideline? |
| Minimal | Update existing preferred over creation? |
If ANY gate fails → **stop**. Do not create or update anything.
Memory-entry rejection criteria live in `/memory:add` (see § "When to skip").
### 1. State the learning clearly
Write as a concrete sentence.
Good:
* Nested triple backticks break copyability in generated markdown
* Route inspection is more reliable via JSON and jq than text parsing
Bad:
* Markdown is annoying
* Routing was confusing
### 2. Identify the pattern type
Classify by type:
* Constraint
* Workflow
* Anti-pattern
* Quality check
* Environment-specific convention
Tag with feedback category (for tracking/aggregation):
* `skill-weakness` — skill gave wrong or incomplete guidance
* `rule-weakness` — rule was too vague or missed a case
* `routing-issue` — wrong skill was selected
* `assumption-issue` — agent made bad assumptions
* `verification-gap` — verification step was missing or weak
* `optimization-overreach` — optimize command suggested harmful change
### 3. Decide the target
Choose one:
* New rule (always-true constraint)
* Update existing rule
* New skill (step-by-step workflow)
* Update existing skill
* New guideline (coding convention / reference)
* Update existing guideline
* **Nothing** (baseline knowledge, standard tool usage, one-off)
### 4. Check for overlap — search protocol (mandatory)
A grep that returns zero hits is **not** proof of no overlap. Knowledge in
this package is distributed across **five surfaces** — `skills/`, `rules/`,
`docs/guidelines/`, `commands/`, `src/patterns/`. Skip any of them and recall
drops. Run all the steps before declaring "no overlap":
**Step 1 — list all five surfaces.** Directory taxonomy is free evidence:
```bash
ls src/skills/ \
src/rules/ \
docs/guidelines/ \
dist/agent-src/commands/ \
src/patterns/
```
Sub-directories matter — `docs/guidelines/php/patterns/`, `docs/guidelines/agent-infra/`,
etc. carry topic taxonomies a flat file scan misses. Always descend one level.
**Step 2 — grep with both vocabularies.** Search for **solution-words** *and*
**problem-words**. Solution-only grep is confirmation bias — the existing
artifact may name the *symptom*, not the cure.
| Vocabulary | Example for "agents miss Strategy pattern, write switch chains" |
|---|---|
| Solution-words | `strategy`, `registry`, `polymorph`, `interface` |
| Problem-words | `discriminator`, `enum.*match`, `switch.*on`, `if.*else.*chain` |
```bash
grep -rl -E "<solution-words>|<problem-words>" src/ docs/guidelines/
```
**Step 3 — taxonomy scan.** For any topic with a likely sub-folder
(`patterns/`, `php/`, `laravel/`, `agent-infra/`), `ls` that folder
*before* reading any file. Filename alone often answers the overlap question.
**Step 4 — sample, do not just list.** On *any* keyword overlap from
steps 2–3, **open and skim the 3 nearest matches** — read § headings, the
"When to use" / "Overview" block, and the examples list. Listing filenames
is not enough; semantic overlap hides behind unrelated keywords.
Only after all four steps return clean → declare "no overlap" and proceed.
Citation in the proposal: *"Reviewed before drafting: <files skimmed>"* —
this is the audit trail § 0's Non-duplication gate verifies against.
→ When the parent task is "create a new artifact", `artifact-drafting-protocol`
Phase B (Research) requires this same protocol — single source of truth.
### 5. Draft the content
If rule:
* Short, durable constraint
* General, clear, always applicable
If skill:
* Focused workflow
* Include: When to use, Procedure, Output format, Gotchas, Do NOT
### 6. Validate usefulness
* Will this improve future outputs?
* Specific enough to act on?
* Different from existing guidance?
* Likely to matter more than once?
### 7. Keep only the smallest effective change
Prefer:
* Update over duplicate
* Small focused skill over broad skill
* Short rule over long rule
### 8. Write the proposal (if scope ≠ nothing)
The output of this skill is a **curated proposal** under
`agents/proposals/<proposal_id>.md`, using the template at
`.augment/templates/agents/proposal.example.md` (shipped by the
package). This is the input to the five-stage pipeline
(capture → classify → propose → gate → upstream); see
[`self-improvement-pipeline`](../../../docs/guidelines/agent-infra/self-improvement-pipeline.md).
Mandatory fields the draft MUST fill:
* `proposal_id` — stable kebab-case slug, unique in this repo
* `type` — `rule` | `skill` | `command` | `guideline`
* `scope` — `project` (stays in `agents/overrides/`) or `package`
(contributed upstream via `upstream-contribute`)
* `source_learning` — path to the `agents/learnings/<date>-<slug>.md`
file this proposal was captured from
* `evidence` — **at least two independent** references (PR, issue,
incident, review-comment, test-failure, **or audit-log line ids**
per [`audit-log-v1`](../../../docs/contracts/audit-log-v1.md));
entries that all resolve to the same PR or the same audit-log
`run_id` are rejected by the gate (independence floor)
* `Proposed artefact` (§4) — the full draft body, no `TODO` / `TBD`
* `Success signal` (§7) — one metric, one baseline, one target, one
evaluation date
Run `./agent-config proposal:check agents/proposals/<id>.md`
before handing to `upstream-contribute`. The
gate is hard: non-zero exit = the proposal does not move
to stage `gated`.
### 9. Degrade the source to a pointer (when promoted from a knowledge page)
If the learning came from an `agents/knowledge/procedures/skill-candidates.md`
entry or any other `agents/knowledge/` page (see § "Knowledge-candidate
learnings" below), promotion is **not complete** until the source is
degraded to a pointer — this is what prevents double-maintenance between
the knowledge page and the new artifact:
```bash
./scripts-run src/scripts/degrade_to_pointer \
--source "agents/knowledge/procedures/skill-candidates.md#<topic>" \
--artifact "<promoted-artifact-path>" \
--date "<YYYY-MM-DD>"
```
This rewrites the source entry to `Promoted to <artifact> on <date>; see
<path>.` and regenerates `agents/knowledge/INDEX.md`. Skip this step
only when the learning's source was NOT a knowledge page (e.g. a direct
user request, an audit-log pattern, or a one-off observation).
## Output format
For the **decision step** (what this skill prints to the user):
1. Learning summary
2. Decision: rule, skill, update, or no action
3. Rationale in one to three lines
4. If decision ≠ "no action": path of the written proposal
(`agents/proposals/<proposal_id>.md`) and gate status
(`./agent-config proposal:check` exit 0 = ready for review)
The **proposal file itself** follows
`proposal.example.md` verbatim — all ten sections, YAML frontmatter
complete, draft body in §4.
## Core rules
* Capture repeated patterns, not random observations
* Prefer updating existing guidance over creating duplicates
* Rules are for durable constraints
* Skills are for repeatable workflows
* Keep new guidance as small and focused as possible
## Gotchas
* Model tends to create new files when a small update is enough
* Model tends to turn vague frustrations into bad guidance
* Model may write documentation instead of reusable instructions
* Over-capturing weak learnings creates noise and reduces quality
## Do NOT
* Do NOT create a rule or skill for one-off problems
* Do NOT duplicate existing guidance
* Do NOT create broad "catch-all" skills
* Do NOT write vague learnings without a concrete behavioral consequence
## Auto-trigger keywords
* learning
* retrospective
* repeated mistake
* recurring issue
* create rule from learning
* create skill from learning
* codify this
* capture this pattern
* after task
* what did we learn
* post-mortem
## Anti-patterns
* Creating a skill for every minor annoyance
* Rule that says "be careful" without concrete constraint
* Skill that duplicates an existing one with slightly different wording
* Capturing a learning before it has repeated
## Examples
Learning: "Nested triple backticks broke markdown copyability twice this week."
Decision: Update existing markdown rule + add markdown-safe skill if none exists.
Learning: "Route checks keep failing when done via text parsing."
Decision: Create focused skill for Laravel route inspection via JSON and jq.
Learning: "I forgot to run PHPStan once."
Decision: No action — one-off, already covered by verify-before-complete rule.
Learning: "We re-invented a per-format PDF extractor in three different
analysis skills."
Decision: Update the affected skills to dispatch to
[`markitdown`](../markitdown/SKILL.md) instead of writing new
extractors. Non-text ingestion (PDF / DOCX / XLSX / PPTX / image /
audio) goes through the upstream `markitdown-mcp` server first; only
write a custom extractor if `markitdown` cannot handle the format and
the gap is documented in its skill body.
## Audit-derived learnings (optional source)
When the input is a pattern surfaced by
[`extract_audit_patterns.ts`](../../../scripts/extract_audit_patterns.ts)
mining `agents/runtime/state/audit/<YYYY-MM>.jsonl`
([`audit-log-v1`](../../../docs/contracts/audit-log-v1.md)):
1. Treat the script's pattern record as the **State the learning**
step input (§1) — `pattern.summary` is the one-sentence
statement, `pattern.line_ids` is the evidence.
2. The repetition gate is already satisfied for `count ≥ 2`. Skip
to §3 (decide the target) — overlap check (§4) and proposal
draft (§8) remain mandatory.
3. Independence floor still applies: two line ids from the same
`run_id` count as **one** piece of evidence. The mining script
already de-duplicates by `run_id`; the gate trusts that output.
4. Audit-derived proposals MUST set
`source_learning: agents/runtime/state/audit/<YYYY-MM>.jsonl#<line_ids>`
and link the mining-script run id, so the human reviewer can
reproduce the pattern from the raw audit log.
## Knowledge-candidate learnings (optional source)
When the input is an entry from `agents/knowledge/procedures/skill-candidates.md`
that reached candidate status (≥ 3 mentions across distinct sessions —
see `update_skill_candidates.ts` and the
[`memory-consolidation`](../memory-consolidation/SKILL.md) recurrence
step):
1. Treat the candidate's topic as the **State the learning** step
input (§1). The repetition gate (§0) is already satisfied by the
≥ 3-mention threshold — skip straight to §3 (decide the target).
Overlap check (§4) and proposal draft (§8) remain mandatory.
2. **Ground the draft in the original session logs, never the
consolidated summary alone.** The candidate entry's `Sessions:`
list names the chat-history session ids the topic recurred in —
pull those via [`/chat-history import`](../../../commands/chat-history/import.md)
(select by id) or the host's native transcript view before
drafting. A skill written purely from the recurrence-counter
summary tends to be plausible but wrong; the original transcripts
carry the detail the summary dropped.
3. Set `source_learning` to the knowledge-candidate entry
(`agents/knowledge/procedures/skill-candidates.md#<topic>`).
4. **§9 (degrade the source) is mandatory for this source type** —
the whole point of the candidate counter is that it stops counting
once promoted.
## Environment notes
Prefer updating existing rule/skill when possible.
Create new files only when the learning introduces a clearly distinct pattern.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!